From 388a6c01792dcc0f5e7feae950c93e2ad041d51e Mon Sep 17 00:00:00 2001 From: jhogyu Date: Sun, 30 Aug 2026 03:05:06 +0900 Subject: [PATCH] feat(stage2): add S2_00 AgentBackend spec Keep the adapter non-executable until the native loader primitive and signed runtime admission contracts are bound. --- .../YAML_Prompts/2. Stage_2/MEMORY.md | 11 + .../YAML_Prompts/2. Stage_2/Stage_2_S2_00.yml | 954 ++++++++++++++++++ .../plans/s2-00-agent-yaml-candidate-a.yml | 531 ++++++++++ .../plans/s2-00-agent-yaml-candidate-b.yml | 317 ++++++ .../plans/s2-00-agent-yaml-implementation.md | 119 +++ 5 files changed, 1932 insertions(+) create mode 100644 Case_02_Comparison_Research/YAML_Prompts/2. Stage_2/Stage_2_S2_00.yml create mode 100644 Case_02_Comparison_Research/plans/s2-00-agent-yaml-candidate-a.yml create mode 100644 Case_02_Comparison_Research/plans/s2-00-agent-yaml-candidate-b.yml create mode 100644 Case_02_Comparison_Research/plans/s2-00-agent-yaml-implementation.md diff --git a/Case_02_Comparison_Research/YAML_Prompts/2. Stage_2/MEMORY.md b/Case_02_Comparison_Research/YAML_Prompts/2. Stage_2/MEMORY.md index 4867ced2..dc0210f6 100644 --- a/Case_02_Comparison_Research/YAML_Prompts/2. Stage_2/MEMORY.md +++ b/Case_02_Comparison_Research/YAML_Prompts/2. Stage_2/MEMORY.md @@ -16,6 +16,17 @@ - 하위 에이전트(subagents)를 사용하여 핵심 테마와 교훈을 식별하고 MEMORY.md에 섹션으로 저장하라. - 향후 세션 시작 시 MEMORY.md의 이전 섹션을 참조하라. +## 2026-08-30 — S2_00 AgentBackend YAML 작업명세 구현 + +한 줄 요약: `S_00_SOW.md`의 S2_00 계약을 두 독립 후보의 앙상블과 독립 evaluator 2개씩 정확히 2회 검증·증분개정하여 `Stage_2_S2_00.yml`로 구현하되, 미확인 native primitive를 창작하지 않고 O-06이 닫힐 때까지 명시적인 비실행 authoring projection으로 고정했다. + +- 최종 산출물: `YAML_Prompts/2. Stage_2/Stage_2_S2_00.yml`; 954행/45,833 bytes/SHA-256 `3fbadd9bf48e8d3921b43f766690bf67ad1dd2cd0a8f624d78a9b3223edeeeb7`. 후보 A는 계약 완전성, 후보 B는 canonical 참조 최소화를 강화했고 main agent가 thin loader-adapter 구조로 병합했다. +- 실행 의미: 실행 성격은 `NON-LLM-DETERMINISTIC`이지만 현재 AgentBackend의 외부 고정 `.py` native invocation primitive가 확인되지 않았다. 따라서 `tasks: []`, `nexts: []`, `DRAFT_NOT_EXECUTABLE`, `OPEN_EXTERNAL_BACKEND`를 유지하며 빈 task를 성공 no-op으로 해석하지 않는다. 인라인 Python, direct runtime 우회, shell, 임의 MCP/tool, 구 Stage 2 v.0~v.3 dependency·fallback은 모두 금지한다. +- 계약 범위: loader만 호출하는 단일 원자 native primitive가 향후 invoke→profile별 single receipt 검증→상호배타 dispatch를 소유하도록 했다. Stage 1 exact input 16개 + signal expansion 1 family, `C00→C05→C10→C15`, normal 12-family와 diagnostic exact 5-family, `S2_10`/`S2_40_STATUS_ONLY` 상호배타 route 및 final status single writer `S2_40`을 보존한다. +- 2회 검증 교정: Round 1에서 affected-scope·보존식·review/slot·party/title·native projection·single receipt·workspace·retry·self-binding을 보강했다. Round 2의 법률/계약 `CRITICAL 0·MAJOR 4·MINOR 1`과 architecture `CRITICAL 0·MAJOR 6·MINOR 1`을 반영해 review `SUPPORTED`, slot `UNEVALUABLE`, explicit-relation adapter 미결속 처리, validate-only receipt v1/사건실행 receipt v2 분리, non-DEV admission·600초 process-tree timeout·workspace mapping·self-hash 전제를 명시했다. 지정 횟수 종료 후 제3의 독립 PASS 평가는 수행하지 않았다. +- drift·검증: 복사 view 24개를 `local_pointer → authority_ref#authority_pointer` 19개와 future-blocking row 5개로 기계 판독 가능하게 만들었다. unique-key YAML parse, pointer·fixed argv·input/output/route/schema enum 교차대조, UTF-8/final newline/trailing whitespace 및 `git diff --check`를 통과했고, 기존 `tests/s2_00` 38/38 PASS와 loader validate-only `VALIDATED_WITH_PENDING_BINDINGS`를 재확인했다. +- 잔여 경계: O-06 native adapter, O-07 signed admission, receipt v2와 runtime stdout single-JSON capture, loader non-DEV/timeout, authenticated workspace mapping, explicit relation adapter, Stage 1 completion seal와 detached signature가 열려 있다. 현 파일은 static adapter contract일 뿐 case invoke·downstream E2E·canary/production admission 또는 법률 검수 완료를 증명하지 않으며, 전제가 닫히면 canonical `agent_scripts/Stage_2_S2_00.yml` native projection을 원자 생성·hash binding·재봉인해야 한다. + ## 2026-08-30 — S2_00 고정 YAML·assets·sources 구현 한 줄 요약: 정본 `S_00_SOW.md`와 `S2_00_assets.md`에 따라 `Default_Agent/Stage_2_Clean/`에 S2_00 고정 자산 141개를 생성하고, N=3 병렬 생성·순차 hash binding·독립 감사 2회와 병렬 증분수정을 거쳐 38/38 test 및 전체 정적 closure를 통과했다. diff --git a/Case_02_Comparison_Research/YAML_Prompts/2. Stage_2/Stage_2_S2_00.yml b/Case_02_Comparison_Research/YAML_Prompts/2. Stage_2/Stage_2_S2_00.yml new file mode 100644 index 00000000..c85f3680 --- /dev/null +++ b/Case_02_Comparison_Research/YAML_Prompts/2. Stage_2/Stage_2_S2_00.yml @@ -0,0 +1,954 @@ +# S2_00 AgentBackend orchestration specification +# Canonical runtime logic remains under Default_Agent/Stage_2_Clean/. +# This authoring projection is intentionally non-executable until O-06 is closed. +Agent: + name: Stage_2_S2_00 + description: >- + 현행 Stage 1 Part 1-4 산출물을 release-bound fixed runtime으로 검증·보존·정규화하고, + claim-neutral cluster slice와 prompt bundle plan을 작성하는 S2_00 AgentBackend + loader-adapter 작업명세서. 이 파일은 외부 고정 Python을 호출하는 검증된 + AgentBackend primitive와 live loader receipt가 결속되기 전에는 실행형 스크립트가 아니다. + version: "1.0.0-draft" + + metadata: + workflow_id: S2_00 + execution_class: NON-LLM-DETERMINISTIC + artifact_role: AGENTBACKEND_LOADER_ADAPTER_CONTRACT + contract_schema_version: stage2_agent_loader_adapter_contract.v1-draft + contract_schema_ref: null + contract_schema_status: NOT_IMPLEMENTED_DRAFT_ONLY + owner: Stage_2_workflow_maintainer + + implementation_status: FIXED_ASSETS_PRESENT_ADAPTER_OPEN + specification_status: DRAFT_NOT_EXECUTABLE + authorization_status: DEV_VALIDATION_ONLY + invocation_status: OPEN_EXTERNAL_BACKEND + runtime_activation_allowed: false + + strategy_ref: stage_2_optimal_update_strategy_v.4.md + sow_ref: S_00_SOW.md + canonical_root_ref: Default_Agent/Stage_2_Clean + canonical_workflow_ref: >- + Default_Agent/Stage_2_Clean/workflows/S2_00_stage1_ingress_normalize_and_bundle_compile.yml + loader_binding_ref: >- + Default_Agent/Stage_2_Clean/deployment/stage2_loader_binding.yml + loader_ref: Default_Agent/Stage_2_Clean/release_ops/stage2_loader.py + runtime_ref: Default_Agent/Stage_2_Clean/runtime/s2_00_ingress.py + release_ref: Default_Agent/Stage_2_Clean/manifest/stage2_release.json + + source_of_truth_order: + - Default_Agent/Stage_2_Clean/manifest/stage2_release.json + - Default_Agent/Stage_2_Clean/deployment/stage2_loader_binding.yml + - Default_Agent/Stage_2_Clean/workflows/S2_00_stage1_ingress_normalize_and_bundle_compile.yml + canonical_contract_is_imported_not_copied: true + duplicated_runtime_logic_allowed: false + duplicated_hash_binding_allowed: false + legacy_runtime_dependencies: [] + old_stage2_fallbacks: [] + stage1_new_required_outputs: [] + + Stages: + - name: S2_00 + description: >- + 검증된 host adapter가 canonical stage2_loader.py만 호출하고, loader가 + release·binding·asset closure를 검증한 뒤 C00→C05→C10→C15 fixed runtime을 + 수행하도록 하는 단일 deterministic stage. O-06 미해결 상태에서는 downstream을 + 스케줄하지 않으며 빈 tasks를 성공 no-op으로 해석해서는 안 된다. + prevs: [] + nexts: [] + tasks: [] + + x_activation_gate: + open_id: O-06 + status: OPEN_EXTERNAL_BACKEND + runtime_activation_allowed: false + empty_tasks_meaning: NON_EXECUTABLE_CONTRACT_NOT_SUCCESSFUL_NOOP + blocker_reason: >- + 현재 확인된 Agent Script 문법에는 release-bound 외부 고정 .py를 직접 호출하는 + native task primitive가 없다. Direct MCP, code-executor, shell, 인라인 Python, + 또는 확인되지 않은 tool name으로 우회하지 않는다. + allowed_until_closed: + - STATIC_CONTRACT_VALIDATION + - LOADER_VALIDATE_ONLY + - DEV_FIXTURE_TEST_HARNESS + forbidden_until_closed: + - AGENTBACKEND_CASE_RUN_INVOCATION + - S2_10_HANDOFF + - S2_40_STATUS_ONLY_HANDOFF + - SUBSET_CANARY_EXECUTION + - PRODUCTION_EXECUTION + required_closure_evidence: + - BACKEND_OWNER_APPROVED_FIXED_ENTRYPOINT_ADAPTER_SYNTAX + - LIVE_LOADER_INVOCATION_RECEIPT + - LOADER_BYPASS_NEGATIVE_TEST_PASS + - USER_WORKSPACE_CONTEXT_BINDING_PASS + activation_patch_contract: + replacement_mode: ATOMIC_NATIVE_EXECUTABLE_PROJECTION + draft_host_registry_policy: REJECT_IMPORT_AND_EXECUTION + draft_rejection_code: EMPTY_TASK_STAGE_REJECTED + executable_projection_allowed_top_level_fields_only: true + executable_projection_must_remove_extension_fields: + - Agent.metadata + - Agent.Stages[0].x_activation_gate + - Agent.Stages[0].x_s2_00_contract + executable_projection_task_count: 1 + executable_projection_task_role: >- + NATIVE_LOADER_INVOKE_RECEIPT_VALIDATE_AND_EXCLUSIVE_DISPATCH + executable_projection_graph_owner: ONE_ATOMIC_APPROVED_HOST_PRIMITIVE + executable_projection_internal_semantics: + - INVOKE_BOUND_STAGE2_LOADER + - VERIFY_PROFILE_SPECIFIC_SINGLE_LOADER_RECEIPT + - VERIFY_ROUTE_STATUS_AND_ARTIFACT_HASH_BINDING + - DISPATCH_EXACTLY_ONE_DOWNSTREAM_OR_FAIL_ZERO_DOWNSTREAM + stage_level_unconditional_nexts_after_activation: [] + exclusive_downstream_handoffs: + - S2_10 + - S2_40_STATUS_ONLY + s2_10_edge_requires: + - LOADER_INVOKE_SUCCESS + - ROUTE_IN_TO_S2_10_OR_TO_S2_10_WITH_ISSUES + - IMMUTABLE_EXECUTABLE_CLUSTER_SLICE_AND_BUNDLE_ONLY + s2_40_status_only_edge_requires: + - LOADER_INVOKE_SUCCESS + - ROUTE_EQUALS_TO_S2_40_STATUS_ONLY + - EXACT_FIVE_DIAGNOSTIC_ARTIFACTS_ONLY + both_downstream_edges_same_run_allowed: false + required_post_patch_evidence: + - AGENTBACKEND_PARSE_CONSTRUCT_PASS + - EXACTLY_ONE_NATIVE_LOADER_TASK_PASS + - ATOMIC_INVOKE_VALIDATE_EXCLUSIVE_DISPATCH_PASS + - EMPTY_TASK_DRAFT_REJECTION_PASS + - EXECUTABLE_AGENT_SCRIPT_SELF_HASH_PASS + - LOADER_RECEIPT_SCHEMA_STRICT_PASS + - RUNTIME_STDOUT_EXACTLY_ONE_JSON_PASS + - ROUTE_STATUS_ARTIFACT_HASH_BINDING_PASS + - MALFORMED_EXTRA_MISSING_RECEIPT_ZERO_DOWNSTREAM_PASS + - ROUTE_MUTUAL_EXCLUSION_AND_AFFECTED_SCOPE_CONFORMANCE_PASS + - TIMEOUT_RETRY_OWNERSHIP_CONFORMANCE_PASS + release_rebind_required: true + + x_s2_00_contract: + canonical_import: + mode: RELEASE_BOUND_EXACT_REFERENCE + workflow_ref: workflows/S2_00_stage1_ingress_normalize_and_bundle_compile.yml + workflow_id: S2_00 + workflow_schema_version: stage2_workflow_contract.v1 + loader_ref: release_ops/stage2_loader.py + binding_ref: deployment/stage2_loader_binding.yml + runtime_ref: runtime/s2_00_ingress.py + release_ref: manifest/stage2_release.json + runtime_logic_override_allowed: false + input_output_override_allowed: false + directory_scan_allowed: false + glob_fallback_allowed: false + fuzzy_basename_allowed: false + + host_adapter_slot: + primitive_name: null + primitive_schema: null + native_task_definition: null + status: OPEN_EXTERNAL_BACKEND + required_semantics: + loader_only_invocation: true + direct_runtime_invocation_allowed: false + shell: false + arbitrary_command_allowed: false + arbitrary_executable_allowed: false + arbitrary_source_code_allowed: false + arbitrary_absolute_path_allowed: false + caller_selected_output_root_allowed: false + user_workspace_context_forwarding_required: true + byte_preserving_workspace_transport_required: true + loader_receipt_capture_required: true + runtime_stdout_capture_required: true + runtime_stdout_strict_single_json_required: true + runtime_extra_or_missing_json_allowed: false + runtime_returncode_zero_required: true + runtime_result_ok_true_required: true + prohibited_substitutes: + - INLINE_PYTHON_CODE_EXECUTOR + - DIRECT_RUNTIME_S2_00_INGRESS_CALL + - TEXT_NORMALIZING_RAW_DIGEST_TRANSPORT + - UNVERIFIED_MCP_TOOL_OR_ENDPOINT + single_loader_receipt_contract: + output_object_count: 1 + current_schema_ref: schemas/deployment.schema.json#/$defs/loader_receipt + current_schema_version: stage2_loader_receipt.v1 + required_case_schema_version: stage2_loader_receipt.v2 + binding_status: PENDING_LOADER_AND_SCHEMA_UPGRADE + sole_envelope_writer: release_ops/stage2_loader.py + common_required_fields: + - schema_version + - loader_id + - workflow_id + - mode + - request_digest + - run_id + - attempt_id + - argv_digest + - release_class + - release_digest + - binding_digest + - asset_validation + - invocation_status + - backend_session_binding_digest + - workspace_mapping_digest + - transport_adapter_id + - transport_adapter_sha256 + - byte_preserving_transport_verified + - shell + mode_contracts: + VALIDATE_ONLY: + required_fields: + - pending_bindings + - pending_binding_count + forbidden_fields: + - run_binding_digest + - runtime_returncode + - runtime_result_digest + - ingress_route + - ingress_status_sha256 + - publish_status + INVOKE: + required_fields: + - run_binding_digest + - runtime_returncode + - runtime_result_digest + - ingress_route + - ingress_status_sha256 + - publish_status + - pending_bindings + - pending_binding_count + required_values: + pending_binding_count: 0 + runtime_returncode: 0 + publish_status: PUBLISHED_OR_IDEMPOTENT_REVALIDATED + host_binding_fields_source: APPROVED_NATIVE_ADAPTER_SESSION_EVIDENCE + invocation_status_is_profile_specific: true + malformed_extra_missing_or_noop_disposition: FAIL_WITH_ZERO_DOWNSTREAM + loader_update_and_schema_reseal_required: true + + loader_request_contract: + fixed_values: + workflow_id: S2_00 + release_ref: manifest/stage2_release.json + backend_bound_values: + - argument_id: run_id + source: RUN_TUPLE_BINDING + raw_user_value_allowed: false + - argument_id: attempt_id + source: TRANSIENT_RETRY_BINDING + canonical_id_input_allowed: false + - argument_id: user_context_sha256 + source: BACKEND_SESSION + raw_user_id_persist_allowed: false + - argument_id: workspace_context_sha256 + source: BACKEND_SESSION + raw_workspace_id_persist_allowed: false + - argument_id: stage1_run_root_ref + source: BACKEND_WORKSPACE_TRANSPORT + arbitrary_absolute_path_allowed: false + - argument_id: stage1_deployment_root_ref + source: BACKEND_WORKSPACE_TRANSPORT + arbitrary_absolute_path_allowed: false + deployed_contents_must_match: >- + manifest/stage2_release.json#/dependency_locks/stage1 + allowed_flags_in_order: + - --workflow-id + - --release-ref + - --run-id + - --attempt-id + - --user-context-sha256 + - --workspace-context-sha256 + - --stage1-run-root-ref + - --stage1-deployment-root-ref + positional_argument_count: 0 + invocation_profiles: + DEV_VALIDATE_ONLY: + base_flags_plus: + - --validate-only + expected_status: + - VALIDATED + - VALIDATED_WITH_PENDING_BINDINGS + case_runtime_success_allowed: false + downstream_handoff_allowed: false + CASE_INVOKE: + additional_flags: [] + validate_only_flag_allowed: false + runtime_and_publish_receipt_required: true + downstream_handoff_allowed_only_after_receipt_pass: true + CASE_INVOKE_NO_DOWNSTREAM_CANARY: + additional_flags: [] + isolated_workspace_required: true + route_dispatch_allowed: false + purpose: VERIFY_NON_DEV_ADMISSION_AND_SINGLE_RECEIPT_BEFORE_ROUTING + negative_test_required: VALIDATE_ONLY_CANNOT_SATISFY_CASE_TASK_SUCCESS + + release_and_integrity_gate: + trust_boundary: release_ops/stage2_loader.py + loader_bypass_allowed: false + binding_id: S2-BINDING-S2_00-V1 + current_release_class: DEV_FIXTURE_RELEASE + current_release_status: DRAFT_NOT_EXECUTABLE + current_authorization_status: DEV_VALIDATION_ONLY + validate_only_expected_status: VALIDATED_WITH_PENDING_BINDINGS + signed_canary_admission_required: true + signed_production_admission_required: true + module_acceptance_is_production_release: false + required_checks: + - RELEASE_AND_BINDING_STRICT_PARSE + - AUTHORING_ROOT_AND_WORKSPACE_ROOT_CONFINEMENT + - WORKFLOW_LOADER_RUNTIME_SCHEMA_RAW_HASH_CLOSURE + - MODULE_MANIFEST_AND_RELEASE_ORACLE_CROSS_BINDING + - STAGE1_DEPENDENCY_LOCK_CLOSURE + - FIXED_ARGV_CONTRACT + - LEGACY_FALLBACK_EMPTY + - EXTERNAL_NETWORK_DISABLED + open_or_pending_evidence: + - O-06_AGENTBACKEND_NATIVE_ADAPTER + - O-07_SIGNED_RELEASE_ADMISSION + - STAGE1_COMPLETION_SEAL + - DETACHED_RELEASE_SIGNATURE + o06_closure_scope: LIVE_VALIDATE_ONLY_ADAPTER_RECEIPT + case_runtime_activation_requires: + - O_06_CLOSED + - O_07_CLOSED + - RELEASE_CLASS_IS_SUBSET_CANARY_OR_PRODUCTION + - RELEASE_STATUS_IS_ADMITTED + - SIGNED_NON_DEV_ADMISSION_VERIFIER_BOUND_AND_TESTED + - LOADER_NON_DEV_RELEASE_CLASS_SUPPORT_BOUND_AND_RESEALED + - PENDING_BINDING_COUNT_ZERO + - STAGE1_COMPLETION_SEAL_VALID + - DETACHED_RELEASE_SIGNATURE_VALID + - LOADER_RECEIPT_V2_SCHEMA_STRICT_PASS + - RUNTIME_STDOUT_EXACTLY_ONE_JSON_PASS + - ROUTE_STATUS_ARTIFACT_HASH_BINDING_PASS + - MALFORMED_EXTRA_MISSING_RECEIPT_ZERO_DOWNSTREAM_PASS + - ROUTE_MUTUAL_EXCLUSION_AND_AFFECTED_SCOPE_CONFORMANCE_PASS + - CASE_INVOKE_NO_DOWNSTREAM_CANARY_PASS + - AUTHENTICATED_WORKSPACE_MAPPING_BINDING_PASS + - CROSS_WORKSPACE_TAMPER_AND_COLLISION_NEGATIVE_TEST_PASS + - LOADER_600_SECOND_PROCESS_TREE_TIMEOUT_PASS + - RETRY_POLICY_AND_NEW_ATTEMPT_ID_CONFORMANCE_PASS + - EXPLICIT_RELATION_ADAPTER_BOUND_OR_HARD_JOIN_DISABLED_PASS + - LIVE_CASE_INVOKE_SINGLE_RECEIPT_PASS + user_workspace_transport_receipt_contract: + backend_session_hash_exact_equality_required: true + workspace_mapping_digest_required: true + transport_adapter_identity_and_hash_required: true + byte_preserving_capability_required: true + raw_user_or_workspace_id_persistence_allowed: false + tamper_negative_test_required: true + + agent_script_self_binding_contract: + asset_id: AGENT-SCRIPT-S2_00 + authoring_source_base: MAIN_WORKING_DIRECTORY + authoring_source_path: Stage_2_S2_00.yml + executable_projection_path: agent_scripts/Stage_2_S2_00.yml + canonical_path_root: Default_Agent/Stage_2_Clean + schema_id: stage2_agent_loader_adapter_contract.v1-draft + schema_ref: null + required_native_schema_id: stage2_agent_loader_adapter_contract.v1 + binding_status: PENDING_O06_NATIVE_PROJECTION + required_manifest_targets: + - deployment/stage2_loader_binding.yml + - manifest/module_manifest.json + - manifest/stage2_release.json + exact_raw_sha256_required_before_activation: true + current_authoring_projection_is_release_asset: false + bind_authoring_source_directly_allowed: false + executable_projection_must_be_atomically_generated_and_resealed: true + + fixed_runtime_contract: + runtime_ref: runtime/s2_00_ingress.py + only_direct_caller: release_ops/stage2_loader.py + component_order: + - C00 + - C05 + - C10 + - C15 + component_responsibilities: + C00: EXACT_RESOLVE_BOUNDED_SNAPSHOT_STRICT_VALIDATE_SOURCE_LOCK + C05: INDEPENDENT_MULTISET_AND_REVIEW_CONSERVATION + C10: SOURCE_PRESERVING_CONTEXT_CROSSWALK_BASE_ISSUE + C15: CLAIM_NEUTRAL_CLUSTER_SLICE_BUNDLE_AND_ATOMIC_PUBLISH + llm_calls_allowed: false + external_network_access_allowed: false + dynamic_code_allowed: false + runtime_package_install_allowed: false + + snapshot_and_parse_policy: + transport_class: RELEASE_BOUND_BYTE_PRESERVING_WORKSPACE_TRANSPORT + text_normalizing_transport_for_raw_digest_allowed: false + same_descriptor_one_read_required: true + raw_hash_parse_and_schema_use_same_buffer: true + strict_utf8_json_required: true + duplicate_json_key_allowed: false + nan_or_infinity_allowed: false + trailing_extra_object_allowed: false + resource_limits_source: manifest/stage2_release.json + snapshot_seal_before_and_after_required: true + source_snapshot_change_disposition: DISCARD_ATTEMPT + + stage1_ingress_view: + authority: >- + workflows/S2_00_stage1_ingress_normalize_and_bundle_compile.yml#/Agent/Stages/0/orchestration_contract/input_contract + default_exact_input_count: 16 + signal_manifest_expansion_family_count: 1 + default_exact_paths: + - evidence_indexed.json + - evidence_event_candidates.json + - client_goal.json + - routing/domain_screening.json + - routing/domain_activation_manifest.json + - quality_gates/B1_evidence_indexed_gate.json + - quality_gates/B2_event_candidates_gate.json + - quality_gates/stage1_part1_soft_gate_handoff.json + - BO.json + - signals/signal_manifest.json + - quality_gates/stage1_part2_review_handoff.json + - legal_effect_structures.json + - quality_gates/stage1_part3_review_handoff.json + - Fact_Ledger_base.json + - stage1_tmp/fact_ledger/fact_ledger_writer_report.json + - quality_gates/stage1_part4_review_handoff.json + signal_manifest_expansion_rule: signals/ + optional_fields_only: + - client_goal.json#/defendant_target_matrix + - client_goal.json#/parties/defendants/*/asset_status + optional_fields_as_sibling_files_allowed: false + stage1_contract_manifest_default_required: false + stage1_new_production_task_required: false + deployment_dependency_lock_ref: manifest/stage2_release.json#/dependency_locks/stage1 + expected_stage1_deployment_path_count: 55 + + signal_and_conservation_policy: + signal_downstream_read_set_exact: + - ALL + manifest_file_order_preserved: true + semantic_file_kinds: + - canonical + - domain_signal + integrity_only_file_kinds: + - compatibility_view + signal_file_and_record_equations_separate: true + signal_record_occurrence_identity: + - manifest_transaction_id + - file_path + - record_ordinal + - signal_id + dual_sg01_raw_hashes_preserved_separately: true + dual_sg01_semantic_projection_comparison_required: true + upstream_pass_trusted_without_recompute: false + bo_fact_ledger_set_cardinality_multiset_required: true + review_occurrence_single_partition_required: true + preserve_stage1_ids_codepoint_exactly: true + raw_stage1_id_normalization_allowed: false + fact_ledger_current_v8_required_keys: + - domain_effects + - calculation_requests + required_independent_conservation_checks: + - BO_FACT_LEDGER_SOURCE_BO_SET_CARDINALITY_MULTISET + - FACT_ID_PRODUCER_SEQUENCE_DUPLICATE_AND_MISSING + - LES_DECLARED_ACTUAL_DOMAIN_TYPE_ROUTE_AND_BO_REVERSE_JOIN + - EVIDENCE_EVENT_FINAL_ID_GATE_EXCEPTION_AND_DANGLING_REF + - SIGNAL_FILE_MULTISET_RAW_HASH_COUNT_AND_PROJECTION_LINEAGE + - SIGNAL_SEMANTIC_RECORD_OCCURRENCE_MULTISET + - EXPECTED_RUNNABLE_CONFIG_AND_ACTIVE_DOMAIN_SIGNAL_CLOSURE + - P1_P4_PATH_WRAPPER_DIGEST_RECEIPT_AND_WRITER_REPORT + - EVERY_INPUT_ALLOWLIST_PRODUCER_SCHEMA_HASH_RUN_TRANSACTION + schema_pass_substitutes_for_semantic_conservation_pass: false + review_partition_contract: + partitions: + - SUPPORTED + - CONDITIONAL + - UNRESOLVED + - EXCLUDED + - UNMAPPED + pairwise_disjoint: true + exhaustive_over_raw_review_occurrences: true + unknown_upstream_status_disposition: UNMAPPED + legacy_resolved_alias_target: SUPPORTED + legacy_resolved_alias_requires_release_bound_adapter: true + inferred_supported_promotion_allowed: false + blocked_review_item_limits_affected_ready_scope_only: true + + affected_scope_policy: + technical_disposition_enum: + - AVAILABLE + - AVAILABLE_WITH_ISSUES + - UNAVAILABLE + every_occurrence_has_exactly_one_disposition: true + unavailable_occurrence_receipt_preserved: true + impact_scope_enum: + - GLOBAL + - CLUSTER + - PARTY_CONTEXT + - OBJECT_CONTEXT + - FACT + - EVIDENCE + - SIGNAL + - REVIEW_ITEM + occurrence_disposition_required_fields: + - scope_technical_disposition + - impact_scope + - scope_refs + - source_contract_row_refs + - reason_codes + - downstream_allowed_actions + minimum_coherent_package_predicate: + - SAME_RUN_FACT_AND_BO_IDENTITY_UNIVERSE_RESOLVABLE + - ALL_AVAILABLE_INCOMPLETE_AND_UNAVAILABLE_SCOPES_ENUMERATED + - EVERY_USED_AND_UNUSABLE_SOURCE_EXPLAINED_IN_MANIFEST_AND_ISSUES + - AT_LEAST_ONE_SCHEMA_VALID_EXECUTABLE_CLUSTER_SLICE_AND_BUNDLE + evidence_gap_or_legal_uncertainty_is_global_abort: false + non_global_abort_reason_classes: + - EVIDENCE_OR_EVENT_GATE_UNCERTAIN + - EVENT_DATE_UNRESOLVED + - CLIENT_GOAL_OR_OPTIONAL_TARGET_ASSET_ABSENT + - PARTIAL_DOMAIN_CONFIG_GAP + - UNRESOLVED_CONDITIONAL_EXCLUDED_OR_UNMAPPED_REVIEW_ITEM + - RECOVERABLE_JOIN_GAP + - DOWNSTREAM_CASE_TYPE_RULE_OR_CORPUS_RELEASE_ISSUE + - CACHE_MISS_OR_CACHE_SERVICE_UNAVAILABLE + closed_route_decision_table: + TO_S2_10: + requires_all: + - CORE_ANCHORS_AND_CONSERVATION_CONSISTENT + - EXECUTABLE_CLUSTER_IDS_NONEMPTY + - NO_RECOVERABLE_SCOPE_ISSUE_REQUIRING_WITH_ISSUES_LABEL + TO_S2_10_WITH_ISSUES: + requires_all: + - MINIMUM_COHERENT_PACKAGE_POSSIBLE + - RECOVERABLE_SCOPE_OR_REVIEW_ISSUES_EXIST + - EXECUTABLE_CLUSTER_IDS_NONEMPTY + TO_S2_40_STATUS_ONLY: + requires_any: + - MINIMUM_COHERENT_PACKAGE_IMPOSSIBLE + - GLOBAL_RUN_OR_TRANSACTION_IDENTITY_CONFLICT + - TRUSTED_SOURCE_UNIVERSE_CANNOT_BE_ENUMERATED + - NO_CONSISTENT_EXECUTABLE_OR_RESIDUAL_SLICE + - RESIDUAL_ONLY_AND_EXECUTABLE_CLUSTER_IDS_EMPTY + - ALL_BUNDLE_COHORTS_NON_EXECUTABLE + + context_and_cluster_policy: + source_ref_required_for_every_context_row: true + stage1_canonical_id_preferred: true + occurrence_context_id_only_when_canonical_id_absent: true + party_object_fuzzy_merge_allowed: false + legal_conclusion_allowed: false + case_type_id_creation_allowed: false + claim_option_id_creation_allowed: false + atomic_claim_id_creation_allowed: false + claim_group_id_creation_allowed: false + slot_crosswalk_contract: + required_link_chain: + - FACT_TO_BO_PARTY_OBJECT + - BO_TO_LES_DOMAIN_TYPE_ROUTE + - LES_TO_SIGNAL_CALCULATION_AND_LAW_VERSION + - FACT_TO_ELEMENT_OPPOSING_DEFENSE_REBUTTAL_SLOT + - FACT_TO_EVIDENCE_STATUS_EVIDENCE_AND_EVENT + - FACT_TO_REVIEW_CLIENT_GOAL_AND_CLIENT_INSTRUCTION + slot_state_enum: + - SUPPORTED + - CONDITIONAL + - UNRESOLVED + - NOT_APPLICABLE + - UNEVALUABLE + config_gap_disposition: UNEVALUABLE + missing_stage1_rebuttal_or_canonical_slot_creation_allowed: false + proposed_slot_is_canonical_slot: false + proposed_slot_requires: + - authority_ref + - taxonomy_difference + - review_disposition + corpus_element_may_replace_stage1_slot_without_approved_crosswalk: false + party_and_title_context_contract: + separate_fields: + - plaintiff_title_chain + - defendant_role + - liability_form + - client_instruction + - recovery_information + - completeness_status + - source_refs + client_no_sue_means_claim_nonexistence: false + recovery_risk_means_claim_nonexistence: false + hard_join_predicates: + - SAME_BO_ID + - LES_SOURCE_BO_ID + - SAME_EVIDENCE_REF + - SAME_EVENT_REF + - APPROVED_EXPLICIT_CASE_RELATION + approved_explicit_case_relation_contract: + adapter_id: S2A-FACT-EXPLICIT-RELATION-V1 + schema_ref: null + required_release_pointer: >- + manifest/stage2_release.json#/relation_adapters/S2A-FACT-EXPLICIT-RELATION-V1 + allowed_logical_input_id: fact_ledger_base + allowed_json_pointer_patterns: + - /facts/*/relations/* + - /facts/*/explicit_relations/* + - /facts/*/candidate_relations/* + allowed_relation_kinds: + - claim_precondition + - accessory_of + - incompatible_with + - EXPLICIT_DEPENDENCY + - EXPLICIT_CASE_RELATION + exact_source_relation_required: true + binding_status: UNBOUND_BLOCKS_EXPLICIT_HARD_JOIN + unbound_disposition: >- + APPROVED_EXPLICIT_CASE_RELATION을 hard join에서 제외하고 issue로 보존한다. + activation_evidence_required: + - EXPLICIT_RELATION_ADAPTER_SCHEMA_BOUND + - EXPLICIT_RELATION_ADAPTER_RELEASE_POINTER_PASS + - UNAPPROVED_RELATION_HARD_JOIN_NEGATIVE_TEST_PASS + same_domain_profile_type_route_or_display_value_as_hard_join_allowed: false + legal_relation_projection_status: CANDIDATE_ONLY + candidate_only_relation_types: + - claim_precondition + - accessory_of + - incompatible_with + similarity_only_hard_join_allowed: false + domain_registry_depends_on_as_litigation_edge_allowed: false + cycles_preserved_as_scc: true + executable_and_residual_partitions_disjoint: true + + bundle_policy: + plan_only: true + prompt_text_generation_allowed: false + cache_policy_ref: registry/cache/prompt_cache_policy.yml + forbidden_bulk_inputs: + - FULL_137_CASE_CATALOG + - RAW_CORPUS + - ALL_RELIEF_MARKDOWN + - ALL_LAW_VALUE_ROWS + pii_in_static_prefix_allowed: false + cache_miss_or_service_down_is_quality_failure: false + prefix_hash_or_pii_failure_scope: COHORT_NON_EXECUTABLE + mode_release_mapping: + STRUCTURAL_FIXTURE: DEV_FIXTURE_RELEASE + SUBSET_CANARY: SUBSET_CANARY_RELEASE + PRODUCTION: PRODUCTION_RELEASE + structural_fixture_case_run_publish_allowed: false + structural_fixture_downstream_route_allowed: false + + output_and_route_contract: + output_root_source: LOADER_BOUND_WORKSPACE_MAPPING + current_runtime_mapping_status: UNBOUND_FOR_CASE_ACTIVATION + current_runtime_mapping_observation: >- + runtime currently derives project_root/stage2_runs/; authenticated workspace + mapping is not yet supplied by a bound native adapter. + required_workspace_mapping_contract: + source: AUTHENTICATED_BACKEND_WORKSPACE_TRANSPORT + opaque_mapping_handle_required: true + mapping_digest_required: true + stage1_run_and_deployment_roots_same_workspace_required: true + output_destination_deterministically_derived_from_mapping_and_run_id: true + cross_workspace_collision_and_tamper_negative_test_required: true + caller_selected_output_root_allowed: false + normal_branch: + route_values: + - TO_S2_10 + - TO_S2_10_WITH_ISSUES + required_artifacts: + - ingress/stage1_input_manifest.json + - ingress/intake_report.json + - context/case_context.json + - context/evidence_inventory.json + - context/object_registry.json + - context/party_and_title_context.json + - context/slot_crosswalk.json + - context/cluster_plan.json + - context/cluster_slices/.json + - context/bundle_plan.json + - review/issue_ledger.base.json + - ingress/ingress_status.json + technical_diagnostic_allowed: false + diagnostic_branch: + route_values: + - TO_S2_40_STATUS_ONLY + exact_artifacts: + - ingress/stage1_input_manifest.json + - ingress/intake_report.json + - ingress/technical_diagnostic.json + - review/issue_ledger.base.json + - ingress/ingress_status.json + context_publish_allowed: false + ingress_status_written_last: true + whole_tree_atomic_publish_required: true + partial_publish_allowed: false + downstream_route_after_successful_loader_invoke_only: true + normal_route_requires_nonempty_executable_cluster_ids: true + final_status_writer: S2_40 + s2_00_final_status_write_allowed: false + + retry_and_idempotence: + timeout_seconds: 600 + timeout_source: >- + workflows/S2_00_stage1_ingress_normalize_and_bundle_compile.yml#/Agent/Stages/0/orchestration_contract/execution/timeout_seconds + timeout_source_is_release_policy: false + outer_timeout_owner: APPROVED_NATIVE_HOST_ADAPTER + subprocess_timeout_owner: release_ops/stage2_loader.py + current_loader_timeout_support: MISSING_BLOCKS_CASE_ACTIVATION + process_tree_cancel_on_timeout_required: true + retry_policy_ref: manifest/stage2_release.json#/retry_policies/0 + retry_policy_id: S2-RETRY-TRANSIENT-READ-V1 + referenced_row_policy_id_equality_required: true + retry_policy_literals_duplicated_here: false + retryable_class: TRANSIENT_READ_OR_LOCK_ONLY + timeout_retryable_only_if_closed_retry_policy_code_present: true + timeout_retry_disposition_source: manifest/stage2_release.json#/retry_policies/0 + per_attempt_timeout_receipt_required: true + semantic_or_integrity_failure_retry_allowed: false + run_tuple_material: + - input_set_digest + - stage2_release_digest + - algorithm_digest + - release_class + attempt_id_is_run_tuple_material: false + every_retry_requires_new_attempt_id: true + same_run_tuple_byte_identical_required: true + different_run_tuple_requires_new_run_id: true + conflicting_existing_output_overwrite_allowed: false + + prohibitions: + llm_provider_field_allowed: false + llm_model_field_allowed: false + prompt_body_allowed: false + inline_python_allowed: false + inline_schema_allowed: false + direct_runtime_call_allowed: false + arbitrary_mcp_endpoint_allowed: false + external_network_access_allowed: false + directory_scan_allowed: false + fuzzy_path_fallback_allowed: false + claim_or_case_type_generation_allowed: false + final_document_status_seal_or_commit_allowed: false + legacy_stage2_v0_v3_dependencies: [] + old_stage2_runtime_fallbacks: [] + + acceptance_boundary: + executable_yaml_acceptance_deferred: true + defer_reason: O-06_OPEN_EXTERNAL_BACKEND + static_checks_required_now: + - YAML_STRICT_PARSE + - CANONICAL_REFERENCE_PATHS_EXIST + - CANONICAL_WORKFLOW_COMPONENT_AND_IO_MATCH + - NO_LLM_PROMPT_INLINE_CODE_OR_UNVERIFIED_TOOL + - LEGACY_V0_V3_DEPENDENCY_COUNT_ZERO + - FIXED_ARGV_MATCHES_LOADER_BINDING + - RELEASE_STATUS_REMAINS_DRAFT_NOT_EXECUTABLE + - CANONICAL_HASH_AND_JSON_POINTER_DRIFT_TEST_PASS + - DRAFT_EMPTY_TASK_HOST_REJECTION_PASS + validate_only_adapter_claim_requires: + - O_06_CLOSED + - NATIVE_ADAPTER_SCHEMA_AND_HASH_BOUND + - LIVE_VALIDATE_ONLY_LOADER_RECEIPT_PASS + - LOADER_BYPASS_NEGATIVE_TEST_PASS + case_runtime_executable_claim_requires: + - NATIVE_EXECUTABLE_PROJECTION_PARSE_CONSTRUCT_PASS + - EXACTLY_ONE_NATIVE_LOADER_TASK_PASS + authoritative_case_activation_prerequisite_ref: >- + /Agent/Stages/0/x_s2_00_contract/release_and_integrity_gate/case_runtime_activation_requires + all_authoritative_case_activation_prerequisites_required: true + canary_or_production_claim_requires: + - CASE_RUNTIME_EXECUTABLE_CLAIM_PASS + - RELEASE_SCOPE_MATCHES_CASE_RUN + - DOWNSTREAM_HANDOFF_MOCK_PASS + completion_claim_allowed_now: STATIC_AGENT_ADAPTER_CONTRACT_ONLY + + canonical_view_drift_control: + copied_fields_are_non_authoritative_views: true + authoritative_contract_hash_source: manifest/stage2_release.json + comparison_rows: + - contract_id: COMPONENT_ORDER + local_pointer: >- + /Agent/Stages/0/x_s2_00_contract/fixed_runtime_contract/component_order + authority_ref: >- + workflows/S2_00_stage1_ingress_normalize_and_bundle_compile.yml + authority_pointer: >- + /Agent/Stages/0/orchestration_contract/component_order + comparison_mode: EXACT_SEQUENCE + binding_status: BOUND + - contract_id: FIXED_ARGV_ALLOWED_FLAGS + local_pointer: >- + /Agent/Stages/0/x_s2_00_contract/loader_request_contract/allowed_flags_in_order + authority_ref: deployment/stage2_loader_binding.yml + authority_pointer: /fixed_argv_contract/allowed_flags + comparison_mode: EXACT_SEQUENCE + binding_status: BOUND + - contract_id: STAGE1_INPUT_ALLOWLIST + local_pointer: >- + /Agent/Stages/0/x_s2_00_contract/stage1_ingress_view/default_exact_paths + authority_ref: >- + workflows/S2_00_stage1_ingress_normalize_and_bundle_compile.yml + authority_pointer: >- + /Agent/Stages/0/orchestration_contract/input_contract + comparison_mode: EXACT_PATH_PROJECTION_IN_DECLARED_ORDER + binding_status: BOUND + - contract_id: NORMAL_OUTPUT_BRANCH + local_pointer: >- + /Agent/Stages/0/x_s2_00_contract/output_and_route_contract/normal_branch/required_artifacts + authority_ref: >- + workflows/S2_00_stage1_ingress_normalize_and_bundle_compile.yml + authority_pointer: >- + /Agent/Stages/0/orchestration_contract/output_contract/normal_branch + comparison_mode: EXACT_SEQUENCE + binding_status: BOUND + - contract_id: DIAGNOSTIC_OUTPUT_BRANCH + local_pointer: >- + /Agent/Stages/0/x_s2_00_contract/output_and_route_contract/diagnostic_branch/exact_artifacts + authority_ref: >- + workflows/S2_00_stage1_ingress_normalize_and_bundle_compile.yml + authority_pointer: >- + /Agent/Stages/0/orchestration_contract/output_contract/diagnostic_branch + comparison_mode: EXACT_SEQUENCE + binding_status: BOUND + - contract_id: ROUTE_ENUMS + local_pointer: >- + /Agent/Stages/0/x_s2_00_contract/output_and_route_contract + authority_ref: >- + workflows/S2_00_stage1_ingress_normalize_and_bundle_compile.yml + authority_pointer: >- + /Agent/Stages/0/orchestration_contract/routing + comparison_mode: ROUTE_VALUE_AND_EXCLUSIVE_HANDOFF_PROJECTION_EXACT + binding_status: BOUND + - contract_id: RETRY_POLICY + local_pointer: >- + /Agent/Stages/0/x_s2_00_contract/retry_and_idempotence + authority_ref: manifest/stage2_release.json + authority_pointer: /retry_policies/0 + comparison_mode: RETRY_POLICY_ID_AND_CLASSIFICATION_PROJECTION_EXACT + binding_status: BOUND + - contract_id: AFFECTED_SCOPE_REQUIRED_FIELDS + local_pointer: >- + /Agent/Stages/0/x_s2_00_contract/affected_scope_policy/occurrence_disposition_required_fields + authority_ref: schemas/ingress.schema.json + authority_pointer: /$defs/affected_scope_fields/required + comparison_mode: EXACT_SET + binding_status: BOUND + - contract_id: AFFECTED_SCOPE_TECHNICAL_ENUM + local_pointer: >- + /Agent/Stages/0/x_s2_00_contract/affected_scope_policy/technical_disposition_enum + authority_ref: schemas/ingress.schema.json + authority_pointer: /$defs/scope_technical_disposition/enum + comparison_mode: EXACT_SEQUENCE + binding_status: BOUND + - contract_id: AFFECTED_SCOPE_IMPACT_ENUM + local_pointer: >- + /Agent/Stages/0/x_s2_00_contract/affected_scope_policy/impact_scope_enum + authority_ref: schemas/ingress.schema.json + authority_pointer: /$defs/impact_scope/enum + comparison_mode: EXACT_SEQUENCE + binding_status: BOUND + - contract_id: CONSERVATION_CONTRACT + local_pointer: >- + /Agent/Stages/0/x_s2_00_contract/signal_and_conservation_policy + authority_ref: >- + workflows/S2_00_stage1_ingress_normalize_and_bundle_compile.yml + authority_pointer: >- + /Agent/Stages/0/orchestration_contract/conservation_contract + comparison_mode: REQUIRED_INVARIANT_PROJECTION_EXACT + binding_status: BOUND + - contract_id: REVIEW_PARTITION_ENUM + local_pointer: >- + /Agent/Stages/0/x_s2_00_contract/signal_and_conservation_policy/review_partition_contract/partitions + authority_ref: schemas/review_status.schema.json + authority_pointer: /$defs/normalized_review_partition/enum + comparison_mode: EXACT_SEQUENCE + binding_status: BOUND + - contract_id: SLOT_EVALUATION_ENUM + local_pointer: >- + /Agent/Stages/0/x_s2_00_contract/context_and_cluster_policy/slot_crosswalk_contract/slot_state_enum + authority_ref: schemas/context.schema.json + authority_pointer: >- + /$defs/slot_crosswalk_row/properties/evaluation_status/enum + comparison_mode: EXACT_SEQUENCE + binding_status: BOUND + - contract_id: EXPLICIT_RELATION_ADAPTER + local_pointer: >- + /Agent/Stages/0/x_s2_00_contract/context_and_cluster_policy/approved_explicit_case_relation_contract + authority_ref: null + authority_pointer: null + comparison_mode: REQUIRED_FUTURE_BINDING + binding_status: UNBOUND_BLOCKS_EXPLICIT_HARD_JOIN + - contract_id: BUNDLE_POLICY + local_pointer: >- + /Agent/Stages/0/x_s2_00_contract/bundle_policy + authority_ref: >- + workflows/S2_00_stage1_ingress_normalize_and_bundle_compile.yml + authority_pointer: >- + /Agent/Stages/0/orchestration_contract/bundle_policy + comparison_mode: REQUIRED_POLICY_PROJECTION_EXACT + binding_status: BOUND + - contract_id: FINAL_STATUS_SINGLE_WRITER + local_pointer: >- + /Agent/Stages/0/x_s2_00_contract/output_and_route_contract/final_status_writer + authority_ref: >- + workflows/S2_00_stage1_ingress_normalize_and_bundle_compile.yml + authority_pointer: >- + /Agent/Stages/0/orchestration_contract/routing/final_status_writer + comparison_mode: EXACT_SCALAR + binding_status: BOUND + - contract_id: CURRENT_LOADER_RECEIPT_SCHEMA + local_pointer: >- + /Agent/Stages/0/x_s2_00_contract/host_adapter_slot/single_loader_receipt_contract/current_schema_version + authority_ref: schemas/deployment.schema.json + authority_pointer: /$defs/loader_receipt/properties/schema_version/const + comparison_mode: EXACT_SCALAR + binding_status: BOUND_VALIDATE_ONLY + - contract_id: REQUIRED_CASE_LOADER_RECEIPT_PROFILE + local_pointer: >- + /Agent/Stages/0/x_s2_00_contract/host_adapter_slot/single_loader_receipt_contract + authority_ref: null + authority_pointer: null + comparison_mode: REQUIRED_FUTURE_BINDING + binding_status: UNBOUND_BLOCKS_CASE_ACTIVATION + - contract_id: CURRENT_RELEASE_CLASS + local_pointer: >- + /Agent/Stages/0/x_s2_00_contract/release_and_integrity_gate/current_release_class + authority_ref: manifest/stage2_release.json + authority_pointer: /release_class + comparison_mode: EXACT_SCALAR + binding_status: BOUND_DEV_ONLY + - contract_id: CURRENT_RELEASE_STATUS + local_pointer: >- + /Agent/Stages/0/x_s2_00_contract/release_and_integrity_gate/current_release_status + authority_ref: manifest/stage2_release.json + authority_pointer: /release_status + comparison_mode: EXACT_SCALAR + binding_status: BOUND_DEV_ONLY + - contract_id: CURRENT_AUTHORIZATION_STATUS + local_pointer: >- + /Agent/Stages/0/x_s2_00_contract/release_and_integrity_gate/current_authorization_status + authority_ref: manifest/stage2_release.json + authority_pointer: /authorization_status + comparison_mode: EXACT_SCALAR + binding_status: BOUND_DEV_ONLY + - contract_id: CASE_ACTIVATION_PREREQUISITES + local_pointer: >- + /Agent/Stages/0/x_s2_00_contract/release_and_integrity_gate/case_runtime_activation_requires + authority_ref: null + authority_pointer: null + comparison_mode: REQUIRED_FUTURE_RELEASE_BINDING + binding_status: UNBOUND_BLOCKS_CASE_ACTIVATION + - contract_id: TIMEOUT_AND_PROCESS_TREE_CONTROL + local_pointer: >- + /Agent/Stages/0/x_s2_00_contract/retry_and_idempotence + authority_ref: null + authority_pointer: null + comparison_mode: REQUIRED_FUTURE_LOADER_AND_HOST_BINDING + binding_status: UNBOUND_BLOCKS_CASE_ACTIVATION + - contract_id: EXECUTABLE_PROJECTION_SELF_BINDING + local_pointer: >- + /Agent/Stages/0/x_s2_00_contract/agent_script_self_binding_contract + authority_ref: null + authority_pointer: null + comparison_mode: REQUIRED_FUTURE_MANIFEST_HASH_BINDING + binding_status: UNBOUND_BLOCKS_CASE_ACTIVATION + every_row_requires_local_pointer: true + every_bound_row_requires_authority_ref_and_pointer: true + unbound_row_requires_closed_blocking_disposition: true + drift_disposition: BLOCK_ACTIVATION_AND_REGENERATE_VIEW diff --git a/Case_02_Comparison_Research/plans/s2-00-agent-yaml-candidate-a.yml b/Case_02_Comparison_Research/plans/s2-00-agent-yaml-candidate-a.yml new file mode 100644 index 00000000..2fee191d --- /dev/null +++ b/Case_02_Comparison_Research/plans/s2-00-agent-yaml-candidate-a.yml @@ -0,0 +1,531 @@ +Agent: + name: Stage_2_S2_00 + description: >- + 현행 Stage 1 Part 1-4 산출물을 release-bound fixed runtime으로 검증·보존·정규화하고, + claim-neutral cluster slice와 prompt bundle plan을 작성하기 위한 S2_00 선언형 작업명세서. + 이 문서는 AgentBackend의 외부 고정 .py 호출 primitive가 검증되기 전에는 실행형 스크립트가 아니다. + version: "1.0.0-draft-candidate-a" + + metadata: + workflow_id: S2_00 + execution_class: NON-LLM-DETERMINISTIC + specification_role: DECLARATIVE_AGENT_WRAPPER + specification_status: DRAFT_NOT_EXECUTABLE + authorization_status: DEV_VALIDATION_ONLY + invocation_status: OPEN_EXTERNAL_BACKEND + runtime_activation_allowed: false + owner: Stage_2_workflow_maintainer + strategy_ref: stage_2_optimal_update_strategy_v.4.md + sow_ref: S_00_SOW.md + canonical_deployment_root: Default_Agent/Stage_2_Clean + canonical_workflow_ref: >- + Default_Agent/Stage_2_Clean/workflows/S2_00_stage1_ingress_normalize_and_bundle_compile.yml + loader_binding_ref: >- + Default_Agent/Stage_2_Clean/deployment/stage2_loader_binding.yml + release_ref: Default_Agent/Stage_2_Clean/manifest/stage2_release.json + legacy_stage2_dependencies: [] + + Stages: + - name: S2_00 + description: >- + C00 -> C05 -> C10 -> C15를 고정 순서로 수행한다. 정상 package는 S2_10 handoff를, + minimum coherent package를 만들 수 없는 경우에는 S2_40 status-only handoff를 준비한다. + 최종 상태·법률판단·소송문안·seal·commit은 작성하지 않는다. + prevs: [] + nexts: [] + tasks: [] + + x_agentbackend_execution_gate: + field_namespace_status: DECLARATIVE_EXTENSION_NOT_NATIVE_PRIMITIVE + executable_from_this_yaml: false + blocker_id: O-06 + blocker_status: OPEN_EXTERNAL_BACKEND + blocker_reason: >- + 현재 확인된 Agent Script 문법에는 release-bound 외부 고정 .py를 직접 호출하는 native task + primitive가 없다. 따라서 Direct MCP, code-executor, shell 또는 인라인 Python으로 우회하지 않는다. + required_closure_evidence: + - BACKEND_OWNER_APPROVED_FIXED_ENTRYPOINT_ADAPTER_SYNTAX + - LIVE_LOADER_INVOCATION_RECEIPT + - LOADER_BYPASS_NEGATIVE_TEST_PASS + allowed_until_closed: + - STATIC_CONTRACT_VALIDATION + - LOADER_VALIDATE_ONLY + - DEV_FIXTURE_TEST_HARNESS + forbidden_until_closed: + - AGENTBACKEND_CASE_RUN_INVOCATION + - SUBSET_CANARY_EXECUTION + - PRODUCTION_EXECUTION + + x_s2_00_contract: + identity: + workflow_id: S2_00 + module_id: WF-S2_00 + workflow_schema_version: stage2_workflow_contract.v1 + asset_version: s2_00.1 + execution_class: NON-LLM-DETERMINISTIC + + canonical_assets: + workflow: + asset_id: WF-S2_00 + path: workflows/S2_00_stage1_ingress_normalize_and_bundle_compile.yml + loader: + asset_id: LOADER-STAGE2 + path: release_ops/stage2_loader.py + loader_binding: + asset_id: BINDING-S2_00 + path: deployment/stage2_loader_binding.yml + fixed_runtime: + asset_id: RUNTIME-S2_00 + path: runtime/s2_00_ingress.py + release_manifest: + asset_id: MANIFEST-STAGE2-RELEASE + path: manifest/stage2_release.json + module_manifest: + asset_id: MANIFEST-MODULE + path: manifest/module_manifest.json + schemas: + ingress: schemas/ingress.schema.json + context: schemas/context.schema.json + deployment: schemas/deployment.schema.json + review_status: schemas/review_status.schema.json + cache_policy: registry/cache/prompt_cache_policy.yml + regression_manifest: tests/fixtures/regression_manifest.json + asset_resolution_policy: + root: Default_Agent/Stage_2_Clean + path_source: SIGNED_RELEASE_AND_LOADER_BINDING_ONLY + physical_hash_verification_required: true + directory_scan_allowed: false + glob_fallback_allowed: false + fuzzy_basename_allowed: false + legacy_fallback_allowed: false + + execution: + trust_boundary: release_ops/stage2_loader.py + loader_bypass_allowed: false + loader_invocation_contract_status: OPEN_EXTERNAL_BACKEND + fixed_runtime_entrypoint: runtime/s2_00_ingress.py + component_order: + - C00 + - C05 + - C10 + - C15 + component_contracts: + C00: + purpose: exact ingress, bounded snapshot, source lock, strict parse + function_refs: + - resolve_stage1_sources + - load_release_lock + - open_bounded_snapshot + - load_json_strict + - validate_ingress_contracts + - expand_stage2_signal_all + - verify_activation_projection + - verify_cross_artifact_seals + C05: + purpose: independent multiset and review conservation + function_refs: + - normalize_review_items + - check_conservation + C10: + purpose: source-bound context, crosswalk and base issue ledger + function_refs: + - build_case_context + - build_evidence_inventory + - build_object_registry + - build_party_and_title_context + - build_slot_crosswalk + - mint_stage2_id + - mint_context_occurrence_id + C15: + purpose: claim-neutral cluster, SCC DAG, immutable slices and bundle plan + function_refs: + - compile_cluster_plan + - compile_cluster_slices + - compile_bundle_plan + - validate_bundle_release_cohorts + - publish_atomically + timeout_policy_source: manifest/stage2_release.json + retry_policy_id: S2-RETRY-TRANSIENT-READ-V1 + retry_policy_ref: manifest/stage2_release.json#/retry_policies/0 + retryable_failure_class: + - TRANSIENT_READ + - TRANSIENT_LOCK + nonretryable_failure_class: + - HASH_MISMATCH + - SCHEMA_MISMATCH + - PRODUCER_MISMATCH + - CONSERVATION_MISMATCH + - RUN_ID_BINDING_CONFLICT + + snapshot_and_parse_policy: + transport_class: RELEASE_BOUND_BYTE_PRESERVING_WORKSPACE_TRANSPORT + text_normalizing_transport_for_raw_digest_allowed: false + same_descriptor_one_read_required: true + raw_hash_parse_and_schema_use_same_buffer: true + strict_utf8_json_required: true + duplicate_json_key_allowed: false + nan_or_infinity_allowed: false + trailing_extra_object_allowed: false + resource_limits_source: manifest/stage2_release.json + snapshot_seal_before_and_after_required: true + source_snapshot_change_disposition: DISCARD_ATTEMPT + source_snapshot_change_issue_code: SOURCE_SNAPSHOT_CHANGED + + invocation_request: + fixed_values: + workflow_id: S2_00 + release_ref: manifest/stage2_release.json + host_supplied_values: + - run_id + - attempt_id + - stage1_run_root_ref + - stage1_deployment_root_ref + backend_session_values: + - user_context_sha256 + - workspace_context_sha256 + forbidden_caller_values: + - executable + - command + - source_code + - runtime_entrypoint + - output_root + - arbitrary_absolute_path + shell_allowed: false + arbitrary_command_allowed: false + + release_binding: + release_class_allowed_while_o07_open: + - DEV_FIXTURE_RELEASE + current_release_status: DRAFT_NOT_EXECUTABLE + current_authorization_status: DEV_VALIDATION_ONLY + validate_only_expected_status: VALIDATED_WITH_PENDING_BINDINGS + signed_canary_admission_required: true + signed_production_admission_required: true + module_acceptance_is_production_release: false + + input_roots: + stage1_run_root_ref: + source: backend_workspace_transport + arbitrary_absolute_path_allowed: false + stage1_deployment_root_ref: + source: stage2_release_dependency_lock + arbitrary_absolute_path_allowed: false + + stage1_input_allowlist: + - logical_input_id: evidence_indexed + requirement_class: EVIDENCE_EVENT_SCOPE + exact_path: evidence_indexed.json + adapter_id: S2A-EVIDENCE-V3-ENVELOPE-V1 + - logical_input_id: evidence_event_candidates + requirement_class: EVIDENCE_EVENT_SCOPE + exact_path: evidence_event_candidates.json + adapter_id: S2A-EVENTS-V1-ENVELOPE-V1 + - logical_input_id: client_goal + requirement_class: OPTIMIZATION_CONTEXT + exact_path: client_goal.json + optional_json_pointers: + - /defendant_target_matrix + - /parties/defendants/*/asset_status + invented_sibling_files_allowed: false + - logical_input_id: domain_screening + requirement_class: ROUTING_PROFILE_BACKBONE + exact_path: routing/domain_screening.json + - logical_input_id: domain_activation_manifest + requirement_class: ROUTING_PROFILE_BACKBONE + exact_path: routing/domain_activation_manifest.json + adapter_id: S2A-DUAL-SG01-V1 + - logical_input_id: b1_evidence_indexed_gate + requirement_class: INTEGRITY_CORROBORATOR + exact_path: quality_gates/B1_evidence_indexed_gate.json + - logical_input_id: b2_event_candidates_gate + requirement_class: INTEGRITY_CORROBORATOR + exact_path: quality_gates/B2_event_candidates_gate.json + - logical_input_id: stage1_part1_soft_gate_handoff + requirement_class: INTEGRITY_CORROBORATOR + exact_path: quality_gates/stage1_part1_soft_gate_handoff.json + adapter_id: S2A-P1-HANDOFF-FLAT-V1 + - logical_input_id: bo + requirement_class: IDENTITY_BACKBONE + exact_path: BO.json + adapter_id: S2A-BO-V8-LIST-V1 + - logical_input_id: signal_manifest + requirement_class: ROUTING_PROFILE_BACKBONE + exact_path: signals/signal_manifest.json + adapter_id: S2A-SIGNAL-ALL-V1 + producer_alias_id: PA-SG-COMPILER-001 + - logical_input_id: stage1_part2_review_handoff + requirement_class: INTEGRITY_CORROBORATOR + exact_path: quality_gates/stage1_part2_review_handoff.json + adapter_id: S2A-P2-HANDOFF-FLAT-V1 + - logical_input_id: legal_effect_structures + requirement_class: ROUTING_PROFILE_BACKBONE + exact_path: legal_effect_structures.json + - logical_input_id: stage1_part3_review_handoff + requirement_class: INTEGRITY_CORROBORATOR + exact_path: quality_gates/stage1_part3_review_handoff.json + adapter_id: S2A-P3-HANDOFF-WRAPPED-V1 + - logical_input_id: fact_ledger_base + requirement_class: IDENTITY_BACKBONE + exact_path: Fact_Ledger_base.json + adapter_id: S2A-FACT-LEDGER-CURRENT-V8-V1 + - logical_input_id: fact_ledger_writer_report + requirement_class: INTEGRITY_CORROBORATOR + exact_path: stage1_tmp/fact_ledger/fact_ledger_writer_report.json + - logical_input_id: stage1_part4_review_handoff + requirement_class: INTEGRITY_CORROBORATOR + exact_path: quality_gates/stage1_part4_review_handoff.json + adapter_id: S2A-P4-HANDOFF-WRAPPED-V1 + - logical_input_id: signal_payload_family + requirement_class: SIGNAL_PAYLOAD + exact_path_rule: signals/ + manifest_order_preserved: true + + stage1_deployment_contract: + dependency_lock_id: STAGE1-DEPLOYMENT-CLOSURE-2026-08-29 + dependency_lock_ref: manifest/stage2_release.json#/dependency_locks/stage1 + exact_concrete_path_count: 55 + allowed_sources: + - runtime_manifest.json + - domains/_registry_index.json + - domains//domain_config.json + - signals/signal_registry.v2.json + - manifest_or_registry_enumerated_platform_schemas + - manifest_or_registry_enumerated_signal_schemas + stage1_contract_manifest: + default_required: false + allowed_only_for_release_bound_relocation: true + new_logical_artifact_kind_allowed: false + producer_alias_ids: + - PA-SG-COMPILER-001 + + part1_digest_guard: + exact_keys: + - evidence_indexed_sha256 + - evidence_event_candidates_sha256 + - b1_gate_sha256 + - b2_gate_sha256 + - screening_sha256 + - activation_manifest_sha256 + - registry_index_sha256 + recompute_from_raw_bytes: true + + signal_policy: + downstream_read_set_exact: + - ALL + file_rows_preserve_manifest_order: true + physical_path_rule: signals/ + semantic_file_kinds: + - canonical + - domain_signal + integrity_only_file_kinds: + - compatibility_view + file_and_record_conservation_separate: true + record_occurrence_identity: + - manifest_transaction_id + - file_path + - record_ordinal + - signal_id + routing_sg01_ref: routing/domain_activation_manifest.json + signal_sg01_ref: signals/domain_activation_manifest.json + sg01_raw_hashes_preserved_separately: true + sg01_semantic_projection_comparison_required: true + + conservation_policy: + upstream_status_trusted_without_recompute: false + preserve_stage1_ids_codepoint_exactly: true + normalize_raw_stage1_ids: false + bo_fact_ledger_set_cardinality_multiset_required: true + fact_id_sequence_rule: F-001..F-N + every_source_occurrence_has_one_disposition: true + unavailable_occurrence_receipt_preserved: true + review_occurrence_single_partition_required: true + fact_ledger_current_v8_required_keys: + - domain_effects + - calculation_requests + + affected_scope_policy: + scope_technical_disposition_enum: + - AVAILABLE + - AVAILABLE_WITH_ISSUES + - UNAVAILABLE + impact_scope_enum: + - GLOBAL + - CLUSTER + - PARTY_CONTEXT + - OBJECT_CONTEXT + - FACT + - EVIDENCE + - SIGNAL + - REVIEW_ITEM + required_disposition_fields: + - scope_refs + - source_contract_row_refs + - reason_codes + - downstream_allowed_actions + occurrence_partition_must_be_disjoint_and_exhaustive: true + + context_identity_policy: + source_ref_required_for_every_row: true + party_object_fuzzy_merge_allowed: false + stage1_canonical_id_preferred: true + occurrence_context_id_only_when_canonical_id_absent: true + unresolved_identity_issue_code: IDENTITY_UNRESOLVED + physical_path_or_parallel_ordinal_as_mint_input_allowed: false + + cluster_policy: + legal_conclusion_allowed: false + case_type_id_creation_allowed: false + claim_option_id_creation_allowed: false + hard_join_predicates: + - SAME_BO_ID + - LES_SOURCE_BO_ID + - SAME_EVIDENCE_REF + - SAME_EVENT_REF + - APPROVED_EXPLICIT_CASE_RELATION + similarity_only_hard_join_allowed: false + domain_registry_depends_on_as_litigation_edge_allowed: false + cycles_preserved_as_scc: true + executable_and_residual_partitions_disjoint: true + + bundle_policy: + plan_only: true + prompt_text_generation_allowed: false + static_prefix_classes: + - P00_SYSTEM_SAFETY + - P10_LEGAL_RESOLUTION + - ACTIVE_PROFILE + - APPROVED_COMMON_AUTHORITY + dynamic_tail_classes: + - CLUSTER_SLICE + - PRIOR_WAVE_NARROW_VERDICT_PLACEHOLDER + forbidden_bulk_inputs: + - FULL_137_CASE_CATALOG + - RAW_CORPUS + - ALL_RELIEF_MARKDOWN + - ALL_LAW_VALUE_ROWS + pii_in_static_prefix_allowed: false + cache_miss_is_quality_failure: false + prefix_hash_or_pii_failure_scope: COHORT_NON_EXECUTABLE + mode_release_mapping: + STRUCTURAL_FIXTURE: DEV_FIXTURE_RELEASE + SUBSET_CANARY: SUBSET_CANARY_RELEASE + PRODUCTION: PRODUCTION_RELEASE + structural_fixture_case_run_publish_allowed: false + structural_fixture_downstream_route_allowed: false + + output_contract: + output_root_source: loader_bound_stage2_run_root + output_root_argument_allowed: false + normal_branch: + - ingress/stage1_input_manifest.json + - ingress/intake_report.json + - context/case_context.json + - context/evidence_inventory.json + - context/object_registry.json + - context/party_and_title_context.json + - context/slot_crosswalk.json + - context/cluster_plan.json + - context/cluster_slices/.json + - context/bundle_plan.json + - review/issue_ledger.base.json + - ingress/ingress_status.json + diagnostic_branch: + - ingress/stage1_input_manifest.json + - ingress/intake_report.json + - ingress/technical_diagnostic.json + - review/issue_ledger.base.json + - ingress/ingress_status.json + ingress_status_written_last: true + normal_branch_technical_diagnostic_allowed: false + diagnostic_branch_partial_context_publish_allowed: false + whole_tree_atomic_publish_required: true + + routing_contract: + normal_routes: + - TO_S2_10 + - TO_S2_10_WITH_ISSUES + diagnostic_route: TO_S2_40_STATUS_ONLY + normal_route_requires_nonempty_executable_cluster_ids: true + status_only_exact_inputs: + - ingress/ingress_status.json + - ingress/technical_diagnostic.json + - ingress/stage1_input_manifest.json + - ingress/intake_report.json + - review/issue_ledger.base.json + final_status_writer: S2_40 + s2_00_final_status_write_allowed: false + s2_00_control_run_status_write_allowed: false + minimum_coherent_package_predicate: + - SAME_RUN_FACT_AND_BO_IDENTITY_UNIVERSE_RESOLVABLE + - ALL_AVAILABLE_INCOMPLETE_AND_UNAVAILABLE_SCOPES_ENUMERATED + - EVERY_USED_AND_UNUSABLE_SOURCE_EXPLAINED_IN_MANIFEST_AND_ISSUES + - AT_LEAST_ONE_SCHEMA_VALID_EXECUTABLE_CLUSTER_SLICE_AND_BUNDLE + route_decisions: + TO_S2_10: + when: + - CORE_ANCHORS_AND_CONSERVATION_CONSISTENT + - EXECUTABLE_CLUSTER_IDS_NONEMPTY + TO_S2_10_WITH_ISSUES: + when: + - MINIMUM_COHERENT_PACKAGE_POSSIBLE + - RECOVERABLE_SCOPE_OR_REVIEW_ISSUES_EXIST + - EXECUTABLE_CLUSTER_IDS_NONEMPTY + TO_S2_40_STATUS_ONLY: + when_any: + - MINIMUM_COHERENT_PACKAGE_IMPOSSIBLE + - GLOBAL_RUN_OR_TRANSACTION_IDENTITY_CONFLICT + - TRUSTED_SOURCE_UNIVERSE_CANNOT_BE_ENUMERATED + - NO_CONSISTENT_EXECUTABLE_OR_RESIDUAL_SLICE + - RESIDUAL_ONLY_AND_EXECUTABLE_CLUSTER_IDS_EMPTY + - ALL_BUNDLE_COHORTS_NON_EXECUTABLE + not_a_standalone_diagnostic_reason: + - EVIDENCE_OR_EVENT_GATE_UNCERTAIN + - EVENT_DATE_UNRESOLVED + - CLIENT_GOAL_OR_OPTIONAL_TARGET_ASSET_ABSENT + - PARTIAL_DOMAIN_CONFIG_GAP + - UNRESOLVED_CONDITIONAL_EXCLUDED_OR_UNMAPPED_REVIEW_ITEM + - RECOVERABLE_JOIN_GAP + - DOWNSTREAM_CASE_TYPE_RULE_OR_CORPUS_RELEASE_ISSUE + - CACHE_MISS_OR_CACHE_SERVICE_UNAVAILABLE + + idempotence_and_publish: + run_binding_tuple: + - input_set_digest + - stage2_release_digest + - algorithm_digest + - release_class + attempt_id_is_run_binding_input: false + same_tuple_output_requirement: BYTE_IDENTICAL + existing_same_digest_disposition: IDEMPOTENT_SUCCESS_AFTER_REVALIDATION + existing_different_digest_disposition: RUN_ID_BINDING_CONFLICT + publish_method: SAME_FILESYSTEM_WHOLE_TREE_ATOMIC_RENAME + + prohibitions: + llm_calls_allowed: false + llm_configuration_allowed: false + prompt_body_allowed: false + inline_python_allowed: false + inline_schema_allowed: false + dynamic_code_allowed: false + runtime_package_install_allowed: false + arbitrary_external_network_allowed: false + approved_workspace_transport_is_external_egress: false + directory_scan_allowed: false + fuzzy_path_fallback_allowed: false + stage1_new_required_outputs: [] + legacy_stage2_v0_v3_dependencies: [] + old_stage2_runtime_fallbacks: [] + legal_judgment_allowed: false + final_document_write_allowed: false + final_seal_or_commit_allowed: false + + acceptance_boundary: + static_contract_validation_required: true + release_hash_closure_required: true + loader_validate_only_required: true + fixed_runtime_unit_property_tests_required: true + live_agentbackend_invocation_required_for_executable_claim: true + live_stage1_to_s2_00_e2e_required_for_implementation_complete_claim: true + s2_10_and_s2_40_handoff_mock_required: true + korean_lawyer_review_is_not_s2_00_module_acceptance: true + production_readiness_may_not_be_inferred_from_dev_fixture_pass: true diff --git a/Case_02_Comparison_Research/plans/s2-00-agent-yaml-candidate-b.yml b/Case_02_Comparison_Research/plans/s2-00-agent-yaml-candidate-b.yml new file mode 100644 index 00000000..0511f24a --- /dev/null +++ b/Case_02_Comparison_Research/plans/s2-00-agent-yaml-candidate-b.yml @@ -0,0 +1,317 @@ +Agent: + name: Stage_2_S2_00 + description: >- + Stage 1 Part 1-4의 현행 산출물을 대상으로 canonical S2_00 fixed runtime을 + release-bound loader를 통해서만 호출하기 위한 AgentBackend adapter 계약 후보. + 이 파일은 O-06이 닫히기 전에는 실행 가능한 Agent Script가 아니다. + version: "1.0.0-candidate-b" + + metadata: + workflow_id: S2_00 + execution_class: NON-LLM-DETERMINISTIC + artifact_role: AGENTBACKEND_LOADER_ADAPTER_CONTRACT + contract_schema_version: stage2_agent_loader_adapter_contract.v1-draft + owner: Stage_2_workflow_maintainer + + implementation_status: FIXED_ASSETS_PRESENT_ADAPTER_OPEN + invocation_status: OPEN_EXTERNAL_BACKEND + release_class: DEV_FIXTURE_RELEASE + release_status: DRAFT_NOT_EXECUTABLE + authorization_status: DEV_VALIDATION_ONLY + runtime_activation_allowed: false + + canonical_root_ref: Default_Agent/Stage_2_Clean + canonical_workflow_ref: >- + Default_Agent/Stage_2_Clean/workflows/S2_00_stage1_ingress_normalize_and_bundle_compile.yml + loader_binding_ref: >- + Default_Agent/Stage_2_Clean/deployment/stage2_loader_binding.yml + loader_ref: Default_Agent/Stage_2_Clean/release_ops/stage2_loader.py + release_ref: Default_Agent/Stage_2_Clean/manifest/stage2_release.json + + source_of_truth_order: + - Default_Agent/Stage_2_Clean/manifest/stage2_release.json + - Default_Agent/Stage_2_Clean/deployment/stage2_loader_binding.yml + - Default_Agent/Stage_2_Clean/workflows/S2_00_stage1_ingress_normalize_and_bundle_compile.yml + duplicated_runtime_logic_allowed: false + duplicated_hash_binding_allowed: false + legacy_runtime_dependencies: [] + old_stage2_fallbacks: [] + stage1_new_required_outputs: [] + + Stages: + - name: S2_00 + description: >- + AgentBackend가 검증된 native adapter로 canonical stage2_loader.py만 호출하고, + loader가 release·binding·asset closure를 검증한 뒤 C00→C05→C10→C15 + fixed runtime을 실행하도록 하는 단일 deterministic stage의 계약 후보. + 현재는 backend primitive가 검증되지 않았으므로 tasks를 의도적으로 비워 둔다. + prevs: [] + nexts: [] + tasks: [] + + activation_gate: + status: OPEN_EXTERNAL_BACKEND + agentbackend_runtime_activation_allowed: false + empty_tasks_meaning: NON_EXECUTABLE_CONTRACT_NOT_SUCCESSFUL_NOOP + required_closeout: + open_id: O-06 + owner: AgentBackend_owner + evidence: >- + AgentBackend가 arbitrary command/path/source를 받지 않고 canonical + stage2_loader.py만 shell=false fixed argv로 호출했음을 입증하는 live receipt + post_closeout_actions: + - native adapter의 실제 schema와 task syntax를 이 파일에 명시한다. + - deployment/stage2_loader_binding.yml에 adapter identity와 raw hash를 결속한다. + - manifest/stage2_release.json을 재봉인하고 loader integration test를 실행한다. + - tasks가 비어 있는 현 후보를 production에 그대로 배포하지 않는다. + + canonical_contract: + workflow_ref: workflows/S2_00_stage1_ingress_normalize_and_bundle_compile.yml + workflow_id: S2_00 + execution_class: NON-LLM-DETERMINISTIC + entrypoint_ref: runtime/s2_00_ingress.py + loader_ref: release_ops/stage2_loader.py + binding_ref: deployment/stage2_loader_binding.yml + release_ref: manifest/stage2_release.json + component_order: + - C00 + - C05 + - C10 + - C15 + contract_import_policy: + mode: REFERENCE_CANONICAL_ASSET + inline_copy_allowed: false + runtime_logic_override_allowed: false + input_output_policy_override_allowed: false + + backend_adapter_requirements: + primitive_name: null + primitive_schema: null + status: OPEN_EXTERNAL_BACKEND + required_semantics: + loader_only_invocation: true + direct_runtime_invocation_allowed: false + shell: false + arbitrary_command_allowed: false + arbitrary_executable_allowed: false + arbitrary_source_code_allowed: false + arbitrary_absolute_path_allowed: false + caller_selected_output_root_allowed: false + user_workspace_context_forwarding_required: true + byte_preserving_workspace_transport_required: true + loader_receipt_capture_required: true + prohibited_substitutes: + - INLINE_PYTHON_CODE_EXECUTOR + - DIRECT_RUNTIME_S2_00_INGRESS_CALL + - TEXT_NORMALIZING_RAW_DIGEST_TRANSPORT + - UNVERIFIED_MCP_TOOL_OR_ENDPOINT + + loader_request_contract: + fixed_values: + workflow_id: S2_00 + release_ref: manifest/stage2_release.json + backend_bound_values: + - argument_id: run_id + source: RUN_TUPLE_BINDING + raw_user_value_allowed: false + - argument_id: attempt_id + source: TRANSIENT_RETRY_BINDING + canonical_id_input_allowed: false + - argument_id: user_context_sha256 + source: BACKEND_SESSION + raw_user_id_persist_allowed: false + - argument_id: workspace_context_sha256 + source: BACKEND_SESSION + raw_workspace_id_persist_allowed: false + - argument_id: stage1_run_root_ref + source: BACKEND_WORKSPACE_TRANSPORT + arbitrary_absolute_path_allowed: false + - argument_id: stage1_deployment_root_ref + source: STAGE2_RELEASE_DEPENDENCY_LOCK + arbitrary_absolute_path_allowed: false + allowed_flags_in_order: + - --workflow-id + - --release-ref + - --run-id + - --attempt-id + - --user-context-sha256 + - --workspace-context-sha256 + - --stage1-run-root-ref + - --stage1-deployment-root-ref + positional_argument_count: 0 + validate_only_is_runtime_invocation: false + + release_and_integrity_gate: + authority: release_ops/stage2_loader.py + binding_id: S2-BINDING-S2_00-V1 + required_checks: + - RELEASE_AND_BINDING_STRICT_PARSE + - AUTHORING_ROOT_AND_WORKSPACE_ROOT_CONFINEMENT + - WORKFLOW_LOADER_RUNTIME_SCHEMA_RAW_HASH_CLOSURE + - MODULE_MANIFEST_AND_RELEASE_ORACLE_CROSS_BINDING + - STAGE1_DEPENDENCY_LOCK_CLOSURE + - FIXED_ARGV_CONTRACT + - LEGACY_FALLBACK_EMPTY + - EXTERNAL_NETWORK_DISABLED + current_blockers: + - open_id: O-06 + status: OPEN_EXTERNAL_BACKEND + - open_id: O-07 + status: OPEN_RELEASE_AUTHORIZATION + - open_id: SNAPSHOT-SEAL-BIND + status: PENDING_SEQUENTIAL_BIND + - open_id: DEV-DETACHED-RELEASE-ENVELOPE + status: OPEN_RELEASE_AUTHORIZATION + current_execution_boundary: + authoring_validation_allowed: true + agentbackend_invoke_allowed: false + s2_10_handoff_allowed: false + s2_40_status_only_handoff_allowed: false + canary_or_production_allowed: false + + stage1_ingress_binding: + source_contract_authority: >- + workflows/S2_00_stage1_ingress_normalize_and_bundle_compile.yml#/Agent/Stages/0/orchestration_contract/input_contract + default_input_count_excluding_manifest_expansion: 16 + signal_manifest_expansion_family_count: 1 + default_exact_logical_inputs: + - evidence_indexed.json + - evidence_event_candidates.json + - client_goal.json + - routing/domain_screening.json + - routing/domain_activation_manifest.json + - quality_gates/B1_evidence_indexed_gate.json + - quality_gates/B2_event_candidates_gate.json + - quality_gates/stage1_part1_soft_gate_handoff.json + - BO.json + - signals/signal_manifest.json + - quality_gates/stage1_part2_review_handoff.json + - legal_effect_structures.json + - quality_gates/stage1_part3_review_handoff.json + - Fact_Ledger_base.json + - stage1_tmp/fact_ledger/fact_ledger_writer_report.json + - quality_gates/stage1_part4_review_handoff.json + manifest_expansion_rule: signals/ + optional_fields_only: + - client_goal.json#/defendant_target_matrix + - client_goal.json#/parties/defendants/*/asset_status + optional_fields_as_sibling_files_allowed: false + stage1_contract_manifest_default_required: false + directory_scan_allowed: false + glob_fallback_allowed: false + fuzzy_basename_allowed: false + + fixed_runtime_contract: + runtime_ref: runtime/s2_00_ingress.py + direct_caller: release_ops/stage2_loader.py + other_callers_allowed: false + component_order: + - C00 + - C05 + - C10 + - C15 + component_responsibilities: + C00: EXACT_RESOLVE_STRICT_VALIDATE_SOURCE_LOCK + C05: INDEPENDENT_MULTISET_AND_REVIEW_CONSERVATION + C10: SOURCE_PRESERVING_CONTEXT_CROSSWALK_BASE_ISSUE + C15: CLAIM_NEUTRAL_CLUSTER_SLICE_BUNDLE_AND_ATOMIC_PUBLISH + llm_calls_allowed: false + external_network_access_allowed: false + dynamic_code_allowed: false + runtime_package_install_allowed: false + + output_contract: + output_root_source: LOADER_BOUND_WORKSPACE_MAPPING + caller_selected_output_root_allowed: false + normal_branch: + route_values: + - TO_S2_10 + - TO_S2_10_WITH_ISSUES + required_artifacts: + - ingress/stage1_input_manifest.json + - ingress/intake_report.json + - context/case_context.json + - context/evidence_inventory.json + - context/object_registry.json + - context/party_and_title_context.json + - context/slot_crosswalk.json + - context/cluster_plan.json + - context/cluster_slices/.json + - context/bundle_plan.json + - review/issue_ledger.base.json + - ingress/ingress_status.json + ingress_status_written_last: true + technical_diagnostic_allowed: false + diagnostic_branch: + route_values: + - TO_S2_40_STATUS_ONLY + exact_artifacts: + - ingress/stage1_input_manifest.json + - ingress/intake_report.json + - ingress/technical_diagnostic.json + - review/issue_ledger.base.json + - ingress/ingress_status.json + context_publish_allowed: false + whole_tree_atomic_publish_required: true + partial_publish_allowed: false + final_status_writer: S2_40 + s2_00_final_status_write_allowed: false + + route_contract: + route_source: ingress/ingress_status.json + route_schema_ref: schemas/ingress.schema.json#/$defs/ingress_status + route_after_successful_loader_invoke_only: true + branches: + TO_S2_10: + downstream_workflow_id: S2_10 + executable_cluster_required: true + TO_S2_10_WITH_ISSUES: + downstream_workflow_id: S2_10 + executable_cluster_required: true + TO_S2_40_STATUS_ONLY: + downstream_workflow_id: S2_40_STATUS_ONLY + exact_input_count: 5 + agentbackend_route_activation_status: OPEN_EXTERNAL_BACKEND + + retry_and_idempotence: + retry_policy_ref: manifest/stage2_release.json#/retry_policies/0 + retry_policy_id: S2-RETRY-TRANSIENT-READ-V1 + retry_policy_literals_duplicated_here: false + retryable_class: TRANSIENT_READ_OR_LOCK_ONLY + semantic_or_integrity_failure_retry_allowed: false + run_tuple_material: + - input_set_digest + - stage2_release_digest + - algorithm_digest + - release_class + same_run_tuple_byte_identical_required: true + different_run_tuple_requires_new_run_id: true + conflicting_existing_output_overwrite_allowed: false + + prohibitions: + llm_provider_field_allowed: false + llm_model_field_allowed: false + prompt_body_allowed: false + inline_python_allowed: false + inline_schema_allowed: false + direct_runtime_call_allowed: false + arbitrary_mcp_endpoint_allowed: false + external_network_access_allowed: false + directory_scan_allowed: false + fuzzy_path_fallback_allowed: false + raw_stage1_id_normalization_allowed: false + claim_or_case_type_generation_allowed: false + old_stage2_dependency_allowed: false + fixture_success_as_production_evidence_allowed: false + + acceptance_contract: + executable_yaml_acceptance_deferred: true + defer_reason: O-06_OPEN_EXTERNAL_BACKEND + non_execution_static_checks: + - YAML_STRICT_PARSE + - CANONICAL_REFERENCE_PATHS_EXIST + - NO_LLM_OR_PROMPT_OR_INLINE_CODE + - LEGACY_V0_V3_DEPENDENCY_COUNT_ZERO + - FIXED_ARGV_MATCHES_LOADER_BINDING + - RELEASE_STATUS_REMAINS_DRAFT_NOT_EXECUTABLE + completion_claim_allowed_now: CONTRACT_CANDIDATE_ONLY diff --git a/Case_02_Comparison_Research/plans/s2-00-agent-yaml-implementation.md b/Case_02_Comparison_Research/plans/s2-00-agent-yaml-implementation.md new file mode 100644 index 00000000..72cd1073 --- /dev/null +++ b/Case_02_Comparison_Research/plans/s2-00-agent-yaml-implementation.md @@ -0,0 +1,119 @@ +# S2_00 AgentBackend YAML 구현 + +## Objective + +`S_00_SOW.md`와 Stage 2 v4 계약을 그대로 실행 경계로 삼아, 이미 배포된 `Default_Agent/Stage_2_Clean/` 고정 자산을 소비하는 독립 실행용 `Stage_2_S2_00.yml`을 작성한다. + +## Deliverables + +- `YAML_Prompts/2. Stage_2/Stage_2_S2_00.yml` +- `YAML_Prompts/2. Stage_2/MEMORY.md`의 압축 작업 기록 +- 후보 2개, 앙상블, 2회 독립 병렬 평가의 검증 근거 + +## Scope and Non-Scope + +- 범위: AgentBackend orchestration YAML, loader/runtime 호출 계약, deterministic 분기·출력·오류 전파, 정적 검증. +- 비범위: 신규 Python 구현, 법률 content 보강, Stage 1 live 실행, production admission, 외부 서명·법률가 승인. + +## Known Inputs + +- `YAML_Prompts/2. Stage_2/S_00_SOW.md` +- `YAML_Prompts/2. Stage_2/stage_2_optimal_update_strategy_v.4.md` +- `YAML_Prompts/2. Stage_2/SKILL.md` +- `YAML_Prompts/2. Stage_2/Default_Agent/Stage_2_Clean/` +- `YAML_Prompts/2. Stage_2/Prompt_stage_2_S2_00_assets_creation.txt` + +## Material Assumptions + +- 사용자 문구의 `S2_00_SOW.md`는 저장소 정본 파일명 `S_00_SOW.md`를 가리킨다. +- 최종 YAML은 Main working directory에 저장하며, 고정 Python의 내용을 인라인 재구현하지 않고 배포 자산을 호출한다. + +## Questions That Could Change the Outcome + +- 없음. 경로·실행 경계는 정본 SOW, 배포 binding 및 로컬 YAML 가이드에서 확인한다. + +## Workstreams and Dependencies + +1. 정본 계약과 실제 배포 자산의 일치 여부를 조사한다. +2. 독립 후보 YAML 2개를 병렬 설계한다. +3. Main agent가 계약별 장점을 취합해 단일 초안을 작성한다. +4. 독립 evaluator 2개로 Round 1 평가 후 증분 개정한다. +5. 새 evaluator 2개로 Round 2 평가 후 증분 개정한다. +6. 구문·DAG·경로·금지 edge·MEMORY를 검증한다. + +## Source and Tool Plan + +- 로컬 정본 문서와 실제 파일을 우선한다. +- `rg`, YAML parser, 프로젝트 테스트와 읽기 전용 sub-agent 감사를 사용한다. +- 외부 웹 조사나 외부 write는 수행하지 않는다. + +## Validation Plan + +- YAML parse 및 Agent/Stages/task_procedure/tasks 연결 검증 +- 모든 참조 자산의 존재·NFC 경로 검증 +- loader/runtime 호출·상태 분기·single writer·구 v.0~v.3 dependency 0 확인 +- 독립 평가 2개 × 정확히 2회 +- staged/working tree의 무관 파일 비변경 확인 + +## Approval Boundaries + +- 요청된 로컬 파일 생성·검증만 수행한다. +- commit, production 배포, 외부 실행, 서명·법률 승인 상태 변경은 수행하지 않는다. + +## Progress + +- [x] 프로젝트 규칙·MEMORY·SKILL 위치 확인 +- [x] 정본 SOW·v4·배포 계약 조사 +- [x] 독립 후보 2개 +- [x] 앙상블 초안 +- [x] Round 1 평가·개정 +- [x] Round 2 평가·개정 +- [x] 정적 검증 +- [x] MEMORY 기록 + +## Decision Log + +| Date/Stage | Decision | Basis | Consequence | +|---|---|---|---| +| 2026-08-30 / 착수 | `S_00_SOW.md`를 사용자 지칭 SOW의 정본으로 사용 | 저장소에 `S2_00_SOW.md`는 없고 해당 내용·history가 `S_00_SOW.md`에 존재 | 잘못된 유사 파일 생성·참조 방지 | +| 2026-08-30 / 앙상블 | canonical workflow를 복제하지 않는 thin loader-adapter를 기본으로 하고 필요한 보존·route view만 둔다 | 후보 A는 계약 완전성, 후보 B는 drift 최소화를 각각 강화 | release가 유일 정본이며 이 파일의 복사 field는 비권위 view | +| 2026-08-30 / Round 1 | O-06 전에는 빈 tasks·nexts와 host reject를 유지하고, O-06 후에는 지원 field만 가진 native projection으로 원자 교체한다 | 현재 AgentBackend에 외부 `.py` native primitive가 확인되지 않았고 확장 field는 실행 grammar가 아님 | 성공 no-op·미확인 tool 창작·loader 우회 방지 | +| 2026-08-30 / Round 1 | loader/runtime 변경 요구는 YAML의 activation prerequisite로만 기록한다 | 이번 deliverable은 YAML 1개이며 기존 고정 자산 수정은 범위 밖 | single receipt·timeout·context binding 없이는 case activation 금지 | +| 2026-08-30 / Round 2 | review enum은 `SUPPORTED`, slot enum은 `UNEVALUABLE` 포함으로 실제 schema와 일치시키고 explicit relation adapter가 미결속이면 해당 hard join만 비활성화한다 | 두 evaluator가 enum drift와 자유형 explicit relation 결속을 MAJOR로 식별 | 입력 의미를 임의 확장하지 않고 scope별 issue로 보존 | +| 2026-08-30 / Round 2 | validate-only receipt v1과 사건 실행 receipt v2를 분리하고 native task를 loader invoke·receipt 검증·상호배타 dispatch를 담당하는 단일 원자 primitive로 한정한다 | 현재 loader는 case receipt·stdout capture·timeout·non-DEV admission을 구현하지 않음 | O-06/O-07 및 후속 구현 전 `tasks: []`, `nexts: []` 유지 | +| 2026-08-30 / 최종 | 복사 view 24개를 machine-addressable local/authority pointer 또는 명시적 future blocking row로 관리한다 | evaluator의 drift-control·self-binding 지적 | canonical 자산 변경을 묵시적으로 수용하지 않고 activation 차단 | + +## Evidence Ledger + +| Claim/Issue | Source or Test | Status | Notes | +|---|---|---|---| +| S2_00 계약 | `S_00_SOW.md` | 조사 중 | 전체 계약 확인 필요 | +| Stage 2 상하류 경계 | `stage_2_optimal_update_strategy_v.4.md` | 조사 중 | S2_10/S2_40 handoff 포함 | +| AgentBackend YAML 문법 | `YAML_Prompts/2. Stage_2/SKILL.md` | 확인 | 독립 실행 YAML 구조·code-executor 규칙 적용 | +| 배포 자산 | `Default_Agent/Stage_2_Clean/` | 조사 중 | manifest/binding/runtime 확인 필요 | +| 후보 설계 | `plans/s2-00-agent-yaml-candidate-a.yml`, `candidate-b.yml` | 확인 | 2개 독립 후보 모두 O-06 OPEN을 보존 | +| Round 1 법률·계약 평가 | 독립 evaluator | 반영 | affected-scope·review·slot·relation·route 보강 | +| Round 1 architecture 평가 | 독립 evaluator | 반영 | native projection·single receipt·activation·retry·self-binding 보강 | +| Round 2 법률·계약 평가 | 독립 evaluator | 반영 | CRITICAL 0, MAJOR 4, MINOR 1; review/slot·explicit relation·receipt profile·활성화 경계 개정 | +| Round 2 architecture 평가 | 독립 evaluator | 반영 | CRITICAL 0, MAJOR 6, MINOR 1; native graph·workspace·timeout·self-binding·drift row 개정 | +| 최종 YAML 정적 계약 | duplicate-key detector + pointer cross-check | PASS | 24 comparison rows(19 bound, 5 future-blocking), 16+1 ingress, C00→C15, 12/5 output 확인 | +| 기존 S2_00 회귀검사 | `unittest discover tests/s2_00` | PASS | 38/38 PASS | +| loader trust-boundary 검사 | validate-only loader 호출 | PASS WITH PENDING | `VALIDATED_WITH_PENDING_BINDINGS`; production 또는 case invoke 증명 아님 | + +## Risks and Failure Modes + +- 정본 workflow YAML과 AgentBackend 실행 YAML을 혼동해 duplicate runtime logic을 만드는 위험 +- DRAFT/DEV release를 production-ready로 오인하는 위험 +- localdocs user/workspace 격리 또는 host loader 경계를 우회하는 위험 +- 조건 분기에서 diagnostic artifact가 누락되거나 두 consumer가 동시에 실행되는 위험 + +## Results and Residual Uncertainty + +`Stage_2_S2_00.yml`을 954행/45,833 bytes/SHA-256 +`3fbadd9bf48e8d3921b43f766690bf67ad1dd2cd0a8f624d78a9b3223edeeeb7`로 생성했다. +이는 S2_00 고정 자산을 가리키는 정적 AgentBackend loader-adapter 계약이다. O-06 native +primitive, O-07 signed admission, receipt v2, authenticated workspace mapping, loader timeout, +explicit relation adapter, completion seal·detached signature가 닫히지 않아 실행 task와 downstream +edge는 의도적으로 비어 있다. 따라서 현 결과는 production-ready 실행 YAML이 아니라 검증 가능한 +`DRAFT_NOT_EXECUTABLE` authoring projection이며, 위 전제들을 모두 충족한 atomic native projection으로 +교체·재봉인한 뒤에만 case activation을 주장할 수 있다.