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
@@ -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을 주장할 수 있다.