Context. The PRD defines atoms with contracts (atom.yaml), thin prompts extending class skeletons, and an agent-facing doc surface. None of it exists yet.
Deliverables
fleet/ layout: fleet/atoms/<atom>/{atom.yaml,prompt.md,scripts/}, fleet/classes/<class>.md — the 7 classes are Sentinel, Extractor, ERP-scribe, Deterministic-controller (no-LLM), Analyst-writer, Researcher, Knowledge-archivist (the PRD agent-catalog is authoritative if it ever diverges), fleet/golden/ + fleet/profile/ placeholders (one-line README stub each — git can't track empty dirs).
atom.yaml schema documented in fleet/README.md (fields per the PRD atom contract: I/O JSON Schemas, invariants, side_effect_class, idempotency key, autonomy + eval evidence, model_policy); a formal schema file is welcome but optional. The ONE worked example = invoice-extract (it is #40's home — scaffold it as the example; other atoms appear only when their issues land).
(Reminder only, NOT in this PR's scope — do not touch trunk WIP:) when test/scripts/admin/permissions.ts lands, add right 251 to its write scopes (carried from erp#36).
Acceptance: the locate test — spawn a context-free subagent told only "You are in the erp repo; using AGENTS.md alone, state where the atom registry, the class skeletons and the environment rules live" — pass = all three paths correct.
Execution — Blocked by: none — this is the fleet's entry issue; start here · Blocks: #39, #40, #45, #47 (registry home; #41–#44 are write-skill-side and independent) · Human gates: none. Start:claude --worktree fleet-scaffold from the erp repo root; read AGENTS.md + the PRD atom contract first. Done means: evidence comment here (tree listing + locate-test transcript) → PR opened with Closes #38 (Gitea MCP, not gh) — merging is the operator's call unless delegated in-session → AGENTS.md fleet section in the same PR.
Part of the **AI back-office PRD** — [agent-catalog](https://gitea.arcodange.lab/arcodange-org/factory/src/branch/main/vibe/PRD/ai-back-office/agent-catalog.md) + [agent-architecture](https://gitea.arcodange.lab/arcodange-org/factory/src/branch/main/vibe/PRD/ai-back-office/agent-architecture.md). Closes decision **D8** (fleet code home = this repo).
**Context.** The PRD defines atoms with contracts (`atom.yaml`), thin prompts extending class skeletons, and an agent-facing doc surface. None of it exists yet.
**Deliverables**
- `fleet/` layout: `fleet/atoms/<atom>/{atom.yaml,prompt.md,scripts/}`, `fleet/classes/<class>.md` — the 7 classes are **Sentinel, Extractor, ERP-scribe, Deterministic-controller (no-LLM), Analyst-writer, Researcher, Knowledge-archivist** (the PRD agent-catalog is authoritative if it ever diverges), `fleet/golden/` + `fleet/profile/` placeholders (one-line README stub each — git can't track empty dirs).
- `atom.yaml` schema documented in **`fleet/README.md`** (fields per the PRD atom contract: I/O JSON Schemas, invariants, side_effect_class, idempotency key, autonomy + eval evidence, model_policy); a formal schema file is welcome but optional. The ONE worked example = **`invoice-extract`** (it is #40's home — scaffold it as the example; other atoms appear only when their issues land).
- **`AGENTS.md` fleet section** (AGENTS.md exists at repo root — extend, don't recreate): registry location (`fleet/README.md`), class skeletons, environment rules pointer (= the existing AGENTS.md operating-rules section + `dolibarr-sandbox-write` SKILL.md), autonomy ladder pointer (= PRD qa-strategy).
- *(Reminder only, NOT in this PR's scope — do not touch trunk WIP:)* when `test/scripts/admin/permissions.ts` lands, add right `251` to its write scopes (carried from erp#36).
**Acceptance:** the **locate test** — spawn a context-free subagent told only *"You are in the erp repo; using AGENTS.md alone, state where the atom registry, the class skeletons and the environment rules live"* — pass = all three paths correct.
---
**Execution** — Blocked by: none — **this is the fleet's entry issue; start here** · Blocks: #39, #40, #45, #47 (registry home; #41–#44 are write-skill-side and independent) · Human gates: none.
**Start:** `claude --worktree fleet-scaffold` from the erp repo root; read `AGENTS.md` + the PRD [atom contract](https://gitea.arcodange.lab/arcodange-org/factory/src/branch/main/vibe/PRD/ai-back-office/agent-architecture.md) first.
**Done means:** evidence comment here (tree listing + locate-test transcript) → PR opened with `Closes #38` (Gitea MCP, not `gh`) — **merging is the operator's call unless delegated in-session** → AGENTS.md fleet section in the same PR.
arcodange
added this to the P1 — Flagship pipeline milestone 2026-07-11 18:16:31 +02:00
Seed landed: erp#58 creates the repo-root AGENTS.md (orientation map, backlog resume protocol, operating rules). Remaining in this issue's scope: the fleet/ scaffold (registry schema + example atom, class skeletons, golden/profile placeholders) and growing the AGENTS.md fleet section accordingly. The 251-in-permissions.ts note still applies when that WIP lands.
Seed landed: erp#58 creates the repo-root `AGENTS.md` (orientation map, backlog resume protocol, operating rules). Remaining in this issue's scope: the `fleet/` scaffold (registry schema + example atom, class skeletons, golden/profile placeholders) and growing the AGENTS.md fleet section accordingly. The `251`-in-permissions.ts note still applies when that WIP lands.
Evidence — acceptance gate run and PASSED (2026-07-15).
Built (PR #62, branch arcodange/fleet-scaffold, 14 files +536/−1):
fleet/README.md ← atom registry + atom.yaml schema
fleet/atoms/invoice-extract/atom.yaml ← worked example (contract only; impl = #40)
fleet/atoms/invoice-extract/prompt.md ← 36 lines (bar ≤ 40), zero business rules
fleet/atoms/invoice-extract/scripts/README.md
fleet/classes/{sentinel,extractor,erp-scribe,deterministic-controller,analyst-writer,researcher,knowledge-archivist}.md
fleet/golden/README.md ← stub → #39
fleet/profile/README.md ← stub → #54
+ AGENTS.md ## Fleet section (and the Map row's "not yet landed" claim fixed in the same PR)
Builder QA: all relative links + anchors resolve (scripted, 13 files); atom.yaml parses with every PRD contract field (side_effect_class: read, idempotency_key, autonomy A1 + evidence pointer, model_policy → #45); cross-referenced issues verified before citing. Deviation noted: SSH remote unreachable → pushed over HTTPS after ls-remote confirmed identical refs (no content impact); atom.yaml adds class + task convenience fields, documented in the registry.
Locate test (the acceptance criterion) — run by an independent context-free subagent, no conversation inherited: given AGENTS.md alone, it answered (a) registry = fleet/README.md, (b) skeletons = fleet/classes/ (found exactly 7), (c) environment rules = AGENTS.md operating-rules section + .claude/skills/dolibarr-sandbox-write/SKILL.md — all three correct and resolving on disk → PASS. Its one confusion note, logged for the P1 closure sweep: the Map table's fleet/ row doesn't mention environment rules; only the Fleet section's bullet does.
Decision D8 settled by this landing (fleet code home = erp fleet/) — PRD row flipped in a companion factory PR.
Merging #62 under the session's standing delegation.
**Evidence — acceptance gate run and PASSED (2026-07-15).**
**Built** (PR #62, branch `arcodange/fleet-scaffold`, 14 files +536/−1):
```
fleet/README.md ← atom registry + atom.yaml schema
fleet/atoms/invoice-extract/atom.yaml ← worked example (contract only; impl = #40)
fleet/atoms/invoice-extract/prompt.md ← 36 lines (bar ≤ 40), zero business rules
fleet/atoms/invoice-extract/scripts/README.md
fleet/classes/{sentinel,extractor,erp-scribe,deterministic-controller,analyst-writer,researcher,knowledge-archivist}.md
fleet/golden/README.md ← stub → #39
fleet/profile/README.md ← stub → #54
+ AGENTS.md ## Fleet section (and the Map row's "not yet landed" claim fixed in the same PR)
```
**Builder QA:** all relative links + anchors resolve (scripted, 13 files); `atom.yaml` parses with every PRD contract field (side_effect_class: read, idempotency_key, autonomy A1 + evidence pointer, model_policy → #45); cross-referenced issues verified before citing. Deviation noted: SSH remote unreachable → pushed over HTTPS after `ls-remote` confirmed identical refs (no content impact); `atom.yaml` adds `class` + `task` convenience fields, documented in the registry.
**Locate test (the acceptance criterion) — run by an independent context-free subagent, no conversation inherited:** given AGENTS.md alone, it answered (a) registry = `fleet/README.md`, (b) skeletons = `fleet/classes/` (found exactly 7), (c) environment rules = AGENTS.md operating-rules section + `.claude/skills/dolibarr-sandbox-write/SKILL.md` — **all three correct and resolving on disk → PASS**. Its one confusion note, logged for the P1 closure sweep: the Map table's `fleet/` row doesn't mention environment rules; only the Fleet section's bullet does.
**Decision D8 settled by this landing** (fleet code home = erp `fleet/`) — PRD row flipped in a companion factory PR.
Merging #62 under the session's standing delegation.
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.
Part of the AI back-office PRD — agent-catalog + agent-architecture. Closes decision D8 (fleet code home = this repo).
Context. The PRD defines atoms with contracts (
atom.yaml), thin prompts extending class skeletons, and an agent-facing doc surface. None of it exists yet.Deliverables
fleet/layout:fleet/atoms/<atom>/{atom.yaml,prompt.md,scripts/},fleet/classes/<class>.md— the 7 classes are Sentinel, Extractor, ERP-scribe, Deterministic-controller (no-LLM), Analyst-writer, Researcher, Knowledge-archivist (the PRD agent-catalog is authoritative if it ever diverges),fleet/golden/+fleet/profile/placeholders (one-line README stub each — git can't track empty dirs).atom.yamlschema documented infleet/README.md(fields per the PRD atom contract: I/O JSON Schemas, invariants, side_effect_class, idempotency key, autonomy + eval evidence, model_policy); a formal schema file is welcome but optional. The ONE worked example =invoice-extract(it is #40's home — scaffold it as the example; other atoms appear only when their issues land).AGENTS.mdfleet section (AGENTS.md exists at repo root — extend, don't recreate): registry location (fleet/README.md), class skeletons, environment rules pointer (= the existing AGENTS.md operating-rules section +dolibarr-sandbox-writeSKILL.md), autonomy ladder pointer (= PRD qa-strategy).test/scripts/admin/permissions.tslands, add right251to its write scopes (carried from erp#36).Acceptance: the locate test — spawn a context-free subagent told only "You are in the erp repo; using AGENTS.md alone, state where the atom registry, the class skeletons and the environment rules live" — pass = all three paths correct.
Execution — Blocked by: none — this is the fleet's entry issue; start here · Blocks: #39, #40, #45, #47 (registry home; #41–#44 are write-skill-side and independent) · Human gates: none.
Start:
claude --worktree fleet-scaffoldfrom the erp repo root; readAGENTS.md+ the PRD atom contract first.Done means: evidence comment here (tree listing + locate-test transcript) → PR opened with
Closes #38(Gitea MCP, notgh) — merging is the operator's call unless delegated in-session → AGENTS.md fleet section in the same PR.Seed landed: erp#58 creates the repo-root
AGENTS.md(orientation map, backlog resume protocol, operating rules). Remaining in this issue's scope: thefleet/scaffold (registry schema + example atom, class skeletons, golden/profile placeholders) and growing the AGENTS.md fleet section accordingly. The251-in-permissions.ts note still applies when that WIP lands.Evidence — acceptance gate run and PASSED (2026-07-15).
Built (PR #62, branch
arcodange/fleet-scaffold, 14 files +536/−1):Builder QA: all relative links + anchors resolve (scripted, 13 files);
atom.yamlparses with every PRD contract field (side_effect_class: read, idempotency_key, autonomy A1 + evidence pointer, model_policy → #45); cross-referenced issues verified before citing. Deviation noted: SSH remote unreachable → pushed over HTTPS afterls-remoteconfirmed identical refs (no content impact);atom.yamladdsclass+taskconvenience fields, documented in the registry.Locate test (the acceptance criterion) — run by an independent context-free subagent, no conversation inherited: given AGENTS.md alone, it answered (a) registry =
fleet/README.md, (b) skeletons =fleet/classes/(found exactly 7), (c) environment rules = AGENTS.md operating-rules section +.claude/skills/dolibarr-sandbox-write/SKILL.md— all three correct and resolving on disk → PASS. Its one confusion note, logged for the P1 closure sweep: the Map table'sfleet/row doesn't mention environment rules; only the Fleet section's bullet does.Decision D8 settled by this landing (fleet code home = erp
fleet/) — PRD row flipped in a companion factory PR.Merging #62 under the session's standing delegation.