fleet/README.md — the atom registry doc: what an atom is, the atom.yaml contract schema documented field by field (I/O JSON Schemas, invariants, side_effect_class, idempotency key, autonomy + eval evidence, model_policy, eval_ref), the fleet/ layout map, and how an atom graduates (links the PRD qa-strategy gates — bars not restated).
fleet/classes/ — the 7 skeletons exactly as named by the PRD catalog: sentinel, extractor (zero credentials, zero action tools — injection defense), erp-scribe, deterministic-controller (no LLM at all), analyst-writer, researcher, knowledge-archivist. Each: mission, tool posture, typical I/O shape, escalation path, invariants.
fleet/atoms/invoice-extract/ — the ONE worked example (erp#40's future home; contract only, no extraction code): atom.yaml fully filled (T02 schema as I/O, dual-extraction M4 ∥ Mistral with exact agreement + Claude escalation + quarantine, invariants incl. HT+TVA=TTC ±0.01 / rate set / SIREN / IBAN mod-97, provenance blocks {source_sha256, raw_excerpt} on critical fields, side_effect_class: read, idempotency key (supplier, ref_supplier, TTC), autonomy A1 with evidence "none yet — erp#39/erp#40", model_policy placeholder closed by erp#45); thin prompt.md (36 lines, extends the extractor class, zero business rules — points to fleet/profile/fiscal.yaml, erp#54); scripts/README.md stating implementation lands with erp#40.
## What
Scaffolds the fleet's home per the [PRD agent-architecture](https://gitea.arcodange.lab/arcodange-org/factory/src/branch/main/vibe/PRD/ai-back-office/agent-architecture.md#atom-contract) + [agent-catalog](https://gitea.arcodange.lab/arcodange-org/factory/src/branch/main/vibe/PRD/ai-back-office/agent-catalog.md) (decision D8: fleet code home = this repo):
- **`fleet/README.md`** — the atom registry doc: what an atom is, the `atom.yaml` contract schema documented field by field (I/O JSON Schemas, invariants, `side_effect_class`, idempotency key, autonomy + eval evidence, `model_policy`, `eval_ref`), the `fleet/` layout map, and how an atom graduates (links the PRD qa-strategy gates — bars not restated).
- **`fleet/classes/`** — the 7 skeletons exactly as named by the PRD catalog: `sentinel`, `extractor` (zero credentials, zero action tools — injection defense), `erp-scribe`, `deterministic-controller` (no LLM at all), `analyst-writer`, `researcher`, `knowledge-archivist`. Each: mission, tool posture, typical I/O shape, escalation path, invariants.
- **`fleet/atoms/invoice-extract/`** — the ONE worked example (erp#40's future home; **contract only, no extraction code**): `atom.yaml` fully filled (T02 schema as I/O, dual-extraction M4 ∥ Mistral with exact agreement + Claude escalation + quarantine, invariants incl. HT+TVA=TTC ±0.01 / rate set / SIREN / IBAN mod-97, provenance blocks `{source_sha256, raw_excerpt}` on critical fields, `side_effect_class: read`, idempotency key (supplier, ref_supplier, TTC), autonomy A1 with evidence "none yet — erp#39/erp#40", `model_policy` placeholder closed by erp#45); thin `prompt.md` (36 lines, extends the extractor class, zero business rules — points to `fleet/profile/fiscal.yaml`, erp#54); `scripts/README.md` stating implementation lands with erp#40.
- **`fleet/golden/` + `fleet/profile/`** — one-line stubs linking erp#39 / erp#54.
- **`AGENTS.md`** — new `## Fleet` section (registry, class skeletons, environment rules = operating-rules section + `dolibarr-sandbox-write` SKILL.md, autonomy ladder + gates, graduation line) and the **same-change freshness fix**: the Map row no longer claims `fleet/` is "not yet landed / tracked by erp#38".
Scope limits honored: the erp#36 note (right 251 / `permissions.ts`) left untouched; no `test/` trunk WIP touched; no extraction logic implemented.
## Spec conformance
- 7 class files named exactly per the issue; PRD agent-catalog stays authoritative and is cited by URL (no long passages copied).
- `atom.yaml` carries every PRD contract field; registry conveniences `class`/`task` documented as such in `fleet/README.md`.
- Cross-referenced issues verified before linking: erp#39 (golden set → `fleet/golden/`), erp#40 (implementation), erp#45 (POC-5 writes `model_policy`), erp#54 (fiscal profile → `fleet/profile/`).
## QA
- Link check: all relative links + in-file anchors across the 13 created files + AGENTS.md resolve (scripted check).
- `wc -l fleet/atoms/invoice-extract/prompt.md` = **36** (≤ 40).
- `atom.yaml` parses (yaml.safe_load) with all contract fields present.
- `find fleet -type f` matches the issue layout (README, 7 classes, atom.yaml/prompt.md/scripts, golden + profile stubs).
- Stale-claim grep: the only "not yet landed"/erp#38 claim was AGENTS.md:22 — fixed in this PR.
- **Locate-test pre-check passed**: a context-free subagent given AGENTS.md alone stated all three paths correctly (registry = `fleet/README.md`, skeletons = `fleet/classes/`, environment rules = AGENTS.md operating-rules section + `.claude/skills/dolibarr-sandbox-write/SKILL.md`). Independent verification remains the orchestrator's gate.
Closes #38
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Closes erp#38 deliverables: fleet/ layout, atom.yaml schema documented
in fleet/README.md, 7 class skeletons per the PRD agent-catalog,
invoice-extract as the worked example (contract only — implementation
is erp#40), golden/ + profile/ stubs, AGENTS.md Fleet section with
freshness fixes (fleet/ no longer "not yet landed").
Co-Authored-By: Claude Fable 5 <[email protected]>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
What
Scaffolds the fleet's home per the PRD agent-architecture + agent-catalog (decision D8: fleet code home = this repo):
fleet/README.md— the atom registry doc: what an atom is, theatom.yamlcontract schema documented field by field (I/O JSON Schemas, invariants,side_effect_class, idempotency key, autonomy + eval evidence,model_policy,eval_ref), thefleet/layout map, and how an atom graduates (links the PRD qa-strategy gates — bars not restated).fleet/classes/— the 7 skeletons exactly as named by the PRD catalog:sentinel,extractor(zero credentials, zero action tools — injection defense),erp-scribe,deterministic-controller(no LLM at all),analyst-writer,researcher,knowledge-archivist. Each: mission, tool posture, typical I/O shape, escalation path, invariants.fleet/atoms/invoice-extract/— the ONE worked example (erp#40's future home; contract only, no extraction code):atom.yamlfully filled (T02 schema as I/O, dual-extraction M4 ∥ Mistral with exact agreement + Claude escalation + quarantine, invariants incl. HT+TVA=TTC ±0.01 / rate set / SIREN / IBAN mod-97, provenance blocks{source_sha256, raw_excerpt}on critical fields,side_effect_class: read, idempotency key (supplier, ref_supplier, TTC), autonomy A1 with evidence "none yet — erp#39/erp#40",model_policyplaceholder closed by erp#45); thinprompt.md(36 lines, extends the extractor class, zero business rules — points tofleet/profile/fiscal.yaml, erp#54);scripts/README.mdstating implementation lands with erp#40.fleet/golden/+fleet/profile/— one-line stubs linking erp#39 / erp#54.AGENTS.md— new## Fleetsection (registry, class skeletons, environment rules = operating-rules section +dolibarr-sandbox-writeSKILL.md, autonomy ladder + gates, graduation line) and the same-change freshness fix: the Map row no longer claimsfleet/is "not yet landed / tracked by erp#38".Scope limits honored: the erp#36 note (right 251 /
permissions.ts) left untouched; notest/trunk WIP touched; no extraction logic implemented.Spec conformance
atom.yamlcarries every PRD contract field; registry conveniencesclass/taskdocumented as such infleet/README.md.fleet/golden/), erp#40 (implementation), erp#45 (POC-5 writesmodel_policy), erp#54 (fiscal profile →fleet/profile/).QA
wc -l fleet/atoms/invoice-extract/prompt.md= 36 (≤ 40).atom.yamlparses (yaml.safe_load) with all contract fields present.find fleet -type fmatches the issue layout (README, 7 classes, atom.yaml/prompt.md/scripts, golden + profile stubs).fleet/README.md, skeletons =fleet/classes/, environment rules = AGENTS.md operating-rules section +.claude/skills/dolibarr-sandbox-write/SKILL.md). Independent verification remains the orchestrator's gate.Closes #38
🤖 Generated with Claude Code