feat(stage2): add S2_00 AgentBackend spec

Keep the adapter non-executable until the native loader primitive and signed runtime admission contracts are bound.
This commit is contained in:
2026-08-30 03:05:06 +09:00
parent 0ac7223790
commit 388a6c0179
5 changed files with 1932 additions and 0 deletions
@@ -16,6 +16,17 @@
- 하위 에이전트(subagents)를 사용하여 핵심 테마와 교훈을 식별하고 MEMORY.md에 섹션으로 저장하라. - 하위 에이전트(subagents)를 사용하여 핵심 테마와 교훈을 식별하고 MEMORY.md에 섹션으로 저장하라.
- 향후 세션 시작 시 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 구현 ## 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를 통과했다. 한 줄 요약: 정본 `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를 통과했다.
@@ -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/<signal_manifest.files[i].path>
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/<run_id>; 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/<cluster_id>.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
@@ -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/<signal_manifest.files[i].path>
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_id>/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/<files[i].path>
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/<cluster_id>.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
@@ -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/<signal_manifest.files[i].path>
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/<cluster_id>.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
@@ -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을 주장할 수 있다.