Appearance
Service Agent Closeout Ledger
Status: active-not-complete.
This page explains service-agent-closeout-ledger.json, the machine-readable ledger that turns service-agent handoffs into completion evidence. This ledger is not a claim that any service is complete; it exists so each spawned service owner has the same closeout bar after completing one bounded vertical slice.
Use this ledger with:
docs/agents/service-agent-manifest.jsondocs/agents/service-agent-proof-ledger.jsondocs/agents/service-agent-execution-queue.jsondocs/agents/service-agent-next-slice-closeout-ledger.jsondocs/agents/service-agent-accepted-handoffs.mddocs/agents/service-agent-spawn-packets.mddocs/agents/service-workflow-test-matrix.mddocs/agents/agent-handoff-format.md
Required Loop
Every accepted service-agent handoff must show the worker completed the loop the user requested:
Required loop terms: audit, investigate, code, test, fix.
- Audit the task pack, matrix, current source, and read-only legacy evidence.
- Investigate the concrete workflow or bug before changing code.
- Code only inside the delegated implementation and writable docs/contracts scope.
- Test with focused checks plus the row's first verification command.
- Fix issues found by the worker or verifier, then rerun the relevant checks.
Required Evidence
service-agent-closeout-ledger.json requires every accepted handoff to include:
- Task ID using the
Dispatch IDprefix. - Docs read and legacy evidence read.
- Files changed inside the delegated writable scope.
- Behavior implemented, or explicit
nonefor audit-only slices. - Focused tests and first verification command output.
- Route/default cutover status and rollback notes.
- Data validation report path when data changed.
- Remaining risks or blockers.
- Next recommended task.
Current State
Every SVC-001 through SVC-023 row now has an accepted bounded-slice handoff, and RET-USER has an accepted retirement/quarantine handoff. The accepted handoffs are discoverable from Service Agent Accepted Handoffs.
All rows still remain not-complete because accepted bounded evidence is not the same as service or rollout completion. Public/default route promotion still needs route-specific runtime/browser proof, rollback notes, legacy response parity, and data/backfill proof where applicable. SVC-003 and SVC-004 remain cutover-gated until the IAM/Profile production-like proof bundle and offline artifact review pass. SVC-013 remains runtime-adapter-only because the Go Formula runtime is external read-only evidence, not a deployable services/ directory. The RET-USER row remains retirement-only.
Next proof-gate handoffs are tracked separately in Service Agent Next Slice Closeout Ledger. Do not overwrite the first-slice acceptedHandoff fields here when accepting a future nextTaskId handoff.
Do not move a row to a closeout-accepted-...-not-complete state until the handoff exists under docs/agents/handoffs/, follows docs/agents/agent-handoff-format.md, matches the current service-agent-execution-queue.json requiredHandoffPath, and passes:
bash
make test-service-agent-closeout-ledgerCompletion Boundary
This ledger intentionally keeps spawn-ready separate from complete:
- A service can be ready to spawn while still lacking an accepted handoff.
- A service can have an accepted bounded-slice handoff while the overall service and rollout remain not complete.
- A next-slice handoff belongs in
docs/agents/service-agent-next-slice-closeout-ledger.json, not in the first-slice closeout row. - A service handoff can pass focused tests while default route promotion still remains blocked by live/browser/rollback evidence.
- IAM/Profile promotion still needs the production-like populated target proof bundle and offline artifact review before any default-route approval.
- Alias-only rows must not create duplicate implementation directories.
Row Summary
| Dispatch ID | Service | Closeout status |
|---|---|---|
| SVC-001 | api-gateway | closeout-accepted-not-complete |
| SVC-002 | bff-service | closeout-accepted-not-complete |
| SVC-003 | iam-service | closeout-accepted-cutover-gated-not-complete |
| SVC-004 | profile-service | closeout-accepted-cutover-gated-not-complete |
| SVC-005 | organization-service | closeout-accepted-not-complete |
| SVC-006 | classroom-service | closeout-accepted-not-complete |
| SVC-007 | course-service | closeout-accepted-not-complete |
| SVC-008 | question-service | closeout-accepted-not-complete |
| SVC-009 | exam-service | closeout-accepted-not-complete |
| SVC-010 | attempt-service | closeout-accepted-not-complete |
| SVC-011 | file-service | closeout-accepted-not-complete |
| SVC-012 | import-service | closeout-accepted-not-complete |
| SVC-013 | formula-docx-service | runtime-adapter-closeout-accepted-not-complete |
| SVC-014 | search-service | closeout-accepted-not-complete |
| SVC-015 | ai-service | closeout-accepted-not-complete |
| SVC-016 | billing-service | closeout-accepted-not-complete |
| SVC-017 | wallet-service | closeout-accepted-not-complete |
| SVC-018 | usage-service | closeout-accepted-not-complete |
| SVC-019 | payment-service | closeout-accepted-not-complete |
| SVC-020 | notification-service | closeout-accepted-not-complete |
| SVC-021 | audit-service | closeout-accepted-not-complete |
| SVC-022 | analytics-service | closeout-accepted-not-complete |
| SVC-023 | admin-service | closeout-accepted-not-complete |
| RET-USER | user-service retirement | retirement-closeout-accepted-not-complete |