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