docs(issue-5): phase 2a contracts, scenarios and task checklist
Records what phase 2a actually delivers and, as importantly, what it does not: the shadow runner decides and logs, and nothing commits an inferred completion until 2b. state-transitions.md gains an implementation mapping so each contract row names the code and the test that hold it up, with the inferred-completed row marked as judged-but-not-committed. phase2a-shadow.md is the operations note: the rollback switch, the lock discipline and why transition_seq exists, the herdr wait rules that are easy to get wrong (milliseconds, always name --until, errors on stderr, a timeout is a healthy answer), the fail-closed decision order, and the 2b handoff. task.md records P2A-00..04 with commit evidence, including two corrections to my own plan: pick_pending was already a correct swap rather than a hole, and the engine had to live with the registry writers because putting it in lib_py/loop would have made delegation import a sibling and mix trees under a frozen loop. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UrDNJkHmm18uu7n7JwV5Qd
This commit is contained in:
1 parent
964abc6965
commit
17a2dcd988
4 files changed
+95
-9
No files matched your search
@@ -1,6 +1,6 @@
|
||||
# 📑 Target State Transitions and CAS Specification
|
||||
|
||||
- **Document Version**: Rev.2
|
||||
- **Document Version**: Rev.3 (Phase 2a 구현 매핑 추가)
|
||||
- **Issue**: [Gitea Issue #5](https://git.godopu.com/tmpl/multi-agent-mux/issues/5)
|
||||
- **Scope**: Target Compare-And-Swap (CAS) State Machine & Attribution Contract
|
||||
|
||||
@@ -52,6 +52,20 @@ $$\text{Attribution Tuple} = (\text{job\_id}, \text{attempt\_id}, \text{agent\_s
|
||||
|
||||
---
|
||||
|
||||
### 3-1. 구현 매핑 (Phase 2a)
|
||||
|
||||
| 계약 | 구현 | 테스트 |
|
||||
|---|---|---|
|
||||
| §3 CAS 전이표 | `lib_py/delegation/engine.py::_decide` (순수 함수, 락 안에서 호출) | `test_engine_*` |
|
||||
| 단일 전이 주체 | `engine.transition` — 유일한 상태 writer. `update_job_status`·`pick_pending`이 이를 경유 | `test_g6_every_record_writer_*` |
|
||||
| 락 내 I/O 배제 | 락 = 판정 + 레코드 1회 쓰기. 감사 mirror는 큐잉 후 락 밖 flush | `test_g5_no_blocking_io_*` |
|
||||
| §2 4중 귀속 | `lib_py/loop/attribution.py::check` | `test_attribution_*` |
|
||||
| 롤백 | `MAM_ENGINE_CAS=0` → 보존된 `_*_legacy` 본체 | 전 특성화 테스트 parametrize |
|
||||
|
||||
> 📌 **Phase 2a는 추론 완료를 커밋하지 않는다.** `inferred completed` 행은 `lib_py/loop/policy.py`가 `candidate_approved`로 **판정만** 하고, shadow 러너가 이를 로그로 남긴다. 실제 CAS 커밋 연동은 Phase 2b다.
|
||||
|
||||
---
|
||||
|
||||
## 4. 리포트 확정 단계 (Report Finalization Lifecycle)
|
||||
|
||||
자동완료 추론 시 파일 쓰기 도중 발생하는 불완전 리포트 채택을 방지하기 위해 3단계 확정 계약을 수립합니다:
|
||||
|
||||
Reference in new issue
Block a user