feat(fleet): scaffold fleet/ — atom registry, class skeletons, AGENTS.md #38

Closed
opened 2026-07-11 18:16:31 +02:00 by arcodange · 2 comments
Owner

Part of the AI back-office PRDagent-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.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 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
Author
Owner

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.
Author
Owner

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.mdall 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.
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: arcodange-org/erp#38