[vibe](../../README.md) > [PRD](../README.md) > [AI back-office](README.md) > **STATUS** # STATUS β€” implementation tracker > **Status:** 🟒 Current β€” backlog decomposed into issues (2026-07-11); sharpened with per-issue Execution footers + splits #59/#60 (2026-07-12); execution started β€” erp#38 shipped, D8 settled (2026-07-15); harness portability proven β€” erp#63 + #56 closed, Mistral + Ornith admitted to verifier duty (2026-07-18); **P1 write-skill + atom sprint β€” #44/#43/#39/#40 shipped (invoice-extract at the 98 % bar: 100 % criticals, 6/6 injections quarantined), #54 Accepted + merged (2026-07-19)** > **Last Updated:** 2026-07-19 > **Up:** [AI back-office hub](README.md) > **Related:** [POC plan](poc-plan.md) Β· [Roadmap](roadmap.md) (dated plan; actuals and slips land here) ## Phase tracker | Phase | Scope | State | | --- | --- | --- | | 0 β€” Foundations | read skills, sandbox + promote, backups, snapshots, bank reco, email ingest, Telegram gateway MVP | βœ… shipped pre-PRD (ledger below) | | 1 β€” Flagship pipeline | [POC-1](poc-plan.md#poc-1--supplier-invoice-end-to-end) + [POC-5](poc-plan.md#poc-5--model-routing-bench) | 🟑 in progress β†’ [erp milestone P1](https://gitea.arcodange.lab/arcodange-org/erp/milestone/1) (erp#38–45, #47 β€” due 2026-10-09) Β· **#38 βœ… 2026-07-15** ([PR erp#62](https://gitea.arcodange.lab/arcodange-org/erp/pulls/62)) | | 2 β€” Urgent compliance | [POC-6](poc-plan.md#poc-6--e-invoicing-readiness-spike) β€” **hard deadline 2026-09-01** | ⬜ decomposed β†’ [erp milestone P2](https://gitea.arcodange.lab/arcodange-org/erp/milestone/2) (erp#46 β€” due 2026-09-01) | | 3 β€” Standing fleet | [POC-2](poc-plan.md#poc-2--pi-sentinel), queue, digest + approval cards, harness portability | 🟑 in progress β†’ [erp milestone P3](https://gitea.arcodange.lab/arcodange-org/erp/milestone/3) (erp#48–50, #59 β€” due 2026-11-13) + [gateway#1](https://gitea.arcodange.lab/arcodange/telegram-gateway/issues/1)/[#2](https://gitea.arcodange.lab/arcodange/telegram-gateway/issues/2) Β· **#63 βœ… 2026-07-18** ([PR erp#69](https://gitea.arcodange.lab/arcodange-org/erp/pulls/69): harness home `erp:fleet/harness/`, Mistral `vibe -p` + Ornith 35B at verifier parity, builder bench = #56 by Mistral, 0 corrections) | | Ledger compliance (cross-cutting) | [Dolibarr verifications](compliance.md#dolibarr-verifications-sandbox-first) | ⬜ decomposed β†’ [erp milestone](https://gitea.arcodange.lab/arcodange-org/erp/milestone/4) (erp#51 β€” due 2026-11-27) | | 4 β€” Money loops | [POC-3](poc-plan.md#poc-3--reconciliation--payment-recording), dunning, cash report | ⬜ decomposed β†’ [erp milestone P4](https://gitea.arcodange.lab/arcodange-org/erp/milestone/5) (erp#52–53 β€” due 2026-12-24) | | 5 β€” Fiscal autopilot | [POC-4](poc-plan.md#poc-4--tva-dry-run), compliance calendar | ⬜ decomposed β†’ [erp milestone P5](https://gitea.arcodange.lab/arcodange-org/erp/milestone/6) (erp#54–55, #60 β€” due 2027-05-04) | | 6 β€” Emission era | e-invoice emission + e-reporting β€” **hard deadline 2027-09-01** | ⬜ not yet decomposed (starts 2027-05; requirements captured by erp#46 deliverable 4) | ## Backlog map Every phase is decomposed into **self-contained issues** (context, deliverables, acceptance criteria, dependencies, PRD links); since 2026-07-12 each issue also carries an **Execution footer** β€” *Blocked by / Blocks / Human gates / Start (worktree + first command) / Done means (evidence comment β†’ PR with `Closes #N` β†’ doc sweep)*. How a future session resumes: **order open milestones by due date, pick the top issue whose "Blocked by" is clear β€” and skip issues whose only open step is a `[HUMAN]` gate** (surface those in the digest instead of stalling on them; e.g. erp#46 step 1 is operator-owned). Cold-start entry points as of 2026-07-19 (post-#39/#40/#54): **erp#45** (routing bench β€” golden set + atom + dual-run journals all on main), **erp#41/#42** (write-skill side, independent), **erp#51** (startable today), **erp#60** (T11 loop β€” its data files landed with #54). Operator-gated, not session-startable: #46 step 1 (Qonto UI, hard 2026-09-01), #53 July manual invoice ~07-23, prod replay of the GED manifest-C. **Arbitration: one session = one lane** β€” take the entry issue; an orchestrator may fan the independent lanes out in parallel (#39 βˆ₯ #51 βˆ₯ #41–44 touch disjoint directories); everything else follows due-date order (dates in the phase tracker above). The issue body carries everything; on any doubt the trust order is live system > code > STATUS > leaves. Cross-cutting decisions get their ADRs via [factory#22](https://gitea.arcodange.lab/arcodange-org/factory/issues/22). | Repo | Issues | | --- | --- | | [erp](https://gitea.arcodange.lab/arcodange-org/erp/issues) | **P1:** #38 fleet scaffold βœ… 2026-07-15 (D8 settled, PR erp#62) Β· #39 golden set+injection fixtures **βœ… 2026-07-19** ([PR erp#73](https://gitea.arcodange.lab/arcodange-org/erp/pulls/73) β€” 16 invoices + 6 injection + 1824 mails + scorer) Β· #40 invoice-extract atom **βœ… 2026-07-19** ([PR erp#74](https://gitea.arcodange.lab/arcodange-org/erp/pulls/74) β€” **critical-field 100 % on the 98 % bar, 6/6 injections quarantined pre-model**, A1, journals = #45 raw material) Β· #41 provenance checker Β· #42 compliance linter Β· #43 GED attach op **βœ… 2026-07-19** ([PR erp#72](https://gitea.arcodange.lab/arcodange-org/erp/pulls/72)) Β· #44 idempotency keys **βœ… 2026-07-19** ([PR erp#70](https://gitea.arcodange.lab/arcodange-org/erp/pulls/70) β€” the 2026-07-11 manifest-B replays 5/5 deduped) Β· #45 POC-5 routing bench (D5) Β· #47 POC-1 exit gate (umbrella) β€” **P2:** #46 POC-6 Qonto-as-PA (D4; step 1 = [HUMAN] Qonto UI) β€” **P3:** #48 T13 drift watchdog Β· #59 T14 backup freshness+drill Β· #49 T17 second-brain hooks (D7; meeting lane D9 parked) Β· #50 POC-2 Pi sentinel (D6) β€” **Compliance:** #51 Dolibarr verifications (FEC/BlockedLog, startable today) β€” **P4:** #52 POC-3 reco+payments Β· #53 T05 client invoice (D3, ⚠️ July manual ~07-23) Β· #65 client-dossier ops (phase 1 βœ… 07-15) Β· #67 official-doc drafting skill (T18) β€” **P5:** #54 fiscal profile+calendar files+ADC register **βœ… 2026-07-19** ([PR erp#71](https://gitea.arcodange.lab/arcodange-org/erp/pulls/71) merged = adc-001…005 Accepted by the operator's go; adc-006/007 stay Proposed β†’ #53/#51) Β· #60 T11 reminder loop Β· #55 POC-4 TVA dry-runs β€” **Ops (post-replay):** #57 bucket C + document gaps (#56 βœ… 2026-07-18, PR erp#68 β€” authored by the Mistral builder bench) | | [telegram-gateway](https://gitea.arcodange.lab/arcodange/telegram-gateway/issues) | #1 Postgres durable queue (D1) Β· #2 daily digest + approval cards | | [factory](https://gitea.arcodange.lab/arcodange-org/factory/issues) | #22 ADRs as decisions close (D1/D2/D4/D6/D7) | ## Closure protocol β€” per milestone The resume protocol tells a session where to pick up work; this one keeps the doc surface **currently true** when work lands. Docs describe intent; **this file + git describe reality**. A Gitea milestone is closed only after the sweep β€” and the sweep starts with QA, because nothing gets documented as done before it is *proven* done: 1. **QA gate β€” verify before documenting, and never by yourself.** The gate is run by an **independent verifier subagent**: context-free (no conversation inherited from the closer), prompted to *refute* β€” "find why this milestone is NOT actually done" β€” with the repo, the issues and the run journals as its only inputs ([no self-grading](qa-strategy.md#independent-verification--no-self-grading)). It checks: (a) every closed issue's **acceptance criteria re-verified** with evidence linked (eval scores, run journals, exit-gate results β€” not memory of them); (b) the milestone's **test suites green**: golden-set regressions at their bars, injection fixtures quarantined, linter suites behaving (forbidden manifests rejected, seeded-wrong provenance fixtures FAIL), idempotency replay no-op, watchdog/heartbeat checks where the milestone ships standing loops ([QA strategy](qa-strategy.md)); (c) any πŸ§ͺβ†’βœ… flip in the [agent-catalog](agent-catalog.md) backed by its proving-protocol evidence. Its verdict is posted on the milestone before closure; a refutation the closer cannot resolve **with evidence** blocks. A milestone that can't pass its own QA doesn't close β€” it sheds scope back into open issues. 2. **Flip the phase row** above (βœ… + date + PR links) and prune the backlog map of closed issues. 3. **Re-baseline the [roadmap](roadmap.md)** at the boundary: mark the stream done, re-date downstream engineering bars if they slipped β€” regulatory diamonds never move; slips shed scope instead. Bump its Last Updated. 4. **Truth-pass the affected leaves** (no-tombstone β€” rewrite as currently true, no "previously/now"): the [task inventory](task-inventory.md) `Today:`/`Target:` lines the milestone changed; the agent-catalog matrix; `not yet`/candidate claims in [architecture](agent-architecture.md), [model-fleet](model-fleet.md), [compliance](compliance.md). Bump Last Updated **only on files whose claims changed**. 5. **Sweep the orientation layer**: repo `AGENTS.md` files (map rows, "not yet landed" pointers), touched `SKILL.md`s, and any [guidebook](../../guidebooks/erp/README.md) page mapping a changed component (house same-change rule). 6. **Doc-surface QA β€” mechanical + fresh-reader.** (a) Run the link/anchor/convention check over the PRD tree (the `prd_check` pattern: every relative link + heading anchor resolves, breadcrumbs, stamps) β€” zero broken; (b) **deprecation grep**: list the claims the milestone retired (read them off the closed issues β€” e.g. `frequency=0`, "not yet landed", "no fleet wiring") and grep `vibe/` + the repos' `AGENTS.md`/`SKILL.md` for them β€” zero hits or fixed; (c) **fresh-reader smoke test**: a context-free subagent reads only STATUS + the repo `AGENTS.md` and must answer "what shipped, what's next, what would you verify before trusting?" correctly β€” if it lands on a stale claim, real sessions will too. 7. **Close the loop outward**: ADRs for decisions the milestone settled ([factory#22](https://gitea.arcodange.lab/arcodange-org/factory/issues/22)), agent memories updated or pruned, a REX note into the second brain (T17 once live). 8. Only then **close the Gitea milestone**. Between milestones, the continuous rule stands: **a PR that makes any documented claim false updates that doc in the same PR** β€” a change that leaves its docs stale is an incomplete change. **Reader's half β€” trust order.** Any session, before acting on a versionable claim (a path exists, a flag's value, a status emoji): verify against **live system > code/git log > this STATUS > PRD leaves > agent memories/plans**. A page whose Last Updated predates the newest closed milestone in its area is suspect β€” verify before relying on it. ## Foundation ledger (shipped pre-PRD) The bricks this PRD builds on, in the [erp](https://gitea.arcodange.lab/arcodange-org/erp), [factory](https://gitea.arcodange.lab/arcodange-org/factory) and [tools](https://gitea.arcodange.lab/arcodange-org/tools) repos: | Brick | What it gives the fleet | Key PRs | | --- | --- | --- | | Read-only skill catalogue + `bin/arcodange` CLI | invoices, payments, TVA (collectΓ©e/dΓ©ductible/summary), thirdparty completeness, recurring templates, snapshots β€” the fleet's A3 read layer | erp (V1–V8 skill series) | | Multi-env: `erp-sandbox` live in-cluster | the rehearsal environment ([ADR 0002](../../ADR/0002-per-application-environments.md)) | factory [#15](https://gitea.arcodange.lab/arcodange-org/factory/pulls/15)–[#18](https://gitea.arcodange.lab/arcodange-org/factory/pulls/18), erp [#11](https://gitea.arcodange.lab/arcodange-org/erp/pulls/11)–[#12](https://gitea.arcodange.lab/arcodange-org/erp/pulls/12), tools [#2](https://gitea.arcodange.lab/arcodange-org/tools/pulls/2)–[#3](https://gitea.arcodange.lab/arcodange-org/tools/pulls/3) | | Sandbox write skill (fiches, invoices, payments, avoirs) | the A2 write layer, host-guarded to the sandbox | erp [#21](https://gitea.arcodange.lab/arcodange-org/erp/pulls/21), [#22](https://gitea.arcodange.lab/arcodange-org/erp/pulls/22), [#25](https://gitea.arcodange.lab/arcodange-org/erp/pulls/25) | | Promote flow (manifests, business-key lookup, prod gate) | the ADR-0003 capstone: rehearse β†’ review β†’ human-gated prod apply ([ADR 0003](../../ADR/0003-sandbox-state-lifecycle.md), factory [#19](https://gitea.arcodange.lab/arcodange-org/factory/pulls/19)) | erp [#23](https://gitea.arcodange.lab/arcodange-org/erp/pulls/23), [#24](https://gitea.arcodange.lab/arcodange-org/erp/pulls/24) | | Deterministic payment↔bank linkage | `transaction_id` end-to-end: record with the feed id, reconcile by id (PASS 0) | erp [#26](https://gitea.arcodange.lab/arcodange-org/erp/pulls/26)–[#28](https://gitea.arcodange.lab/arcodange-org/erp/pulls/28) | | Sandbox checkpoint lifecycle + CLI | iso-prod refresh, write-agent provisioning, `.env` relink | erp [#29](https://gitea.arcodange.lab/arcodange-org/erp/pulls/29), [#30](https://gitea.arcodange.lab/arcodange-org/erp/pulls/30), [#35](https://gitea.arcodange.lab/arcodange-org/erp/pulls/35) | | Dedicated Dolibarr backup (daily CronJob, 10 y retention, tested restore) | the evidence/recovery floor | erp [#31](https://gitea.arcodange.lab/arcodange-org/erp/pulls/31)–[#34](https://gitea.arcodange.lab/arcodange-org/erp/pulls/34), tools [#5](https://gitea.arcodange.lab/arcodange-org/tools/pulls/5) | | Bank reco + email ingest skills | Qonto/Wise feeds, Zoho `books@`/`bureaux@` ingestion (read-only) | erp (skill series) | | telegram-gateway MVP | the human channel's transport (webhook echo proven; queue + async handlers roadmapped) | [telegram-gateway](https://gitea.arcodange.lab/arcodange-org/telegram-gateway) repo | | Second brain (Obsidian vault + automation) | the fleet's knowledge layer: PARA vault git-synced, `sb.py` jobs (digest / inbox triage / daily / Gitea-ingest) on the hermes cron ticker, local Ornith runtime, `mcp-obsidian` access | [SecondBrain](https://gitea.arcodange.lab/arcodange/SecondBrain) repo | ## PR log (this PRD) | Date | PR | What shipped | | --- | --- | --- | | 2026-07-11 | [factory#21](https://gitea.arcodange.lab/arcodange-org/factory/pulls/21) | PRD authored: hub + task inventory + agent architecture + model fleet + challenges + POC plan + QA strategy. | | 2026-07-18 | [erp#68](https://gitea.arcodange.lab/arcodange-org/erp/pulls/68) | #56 known-patterns fix β€” authored end-to-end by the Mistral runtime (`vibe -p`) under the builder bench; acceptance `bank match` clean (0 UNKNOWN). | | 2026-07-18 | [erp#69](https://gitea.arcodange.lab/arcodange-org/erp/pulls/69) | #63 harness portability: `fleet/harness/` (verifier tests, `run-verifier.sh`, `vibe-builder.sh`) + parity/bench evidence β€” Mistral + Ornith admitted to verifier duty (blind-judged, 16/16 unanimous). | | 2026-07-18 | [factory#31](https://gitea.arcodange.lab/arcodange-org/factory/pulls/31) | Cross-family verification rule codified in the [qa-strategy](qa-strategy.md#independent-verification--no-self-grading); STATUS truth-pass for #56/#63/#39. | | 2026-07-19 | [erp#70](https://gitea.arcodange.lab/arcodange-org/erp/pulls/70) | #44 idempotency keys β€” replay is a no-op, proven live (historic manifest-B 5/5 deduped). | | 2026-07-19 | [erp#71](https://gitea.arcodange.lab/arcodange-org/erp/pulls/71) | #54 fiscal profile + calendar + ADC register β€” merged under the operator's go: adc-001…005 Accepted. | | 2026-07-19 | [erp#73](https://gitea.arcodange.lab/arcodange-org/erp/pulls/73) | #39 golden set β€” push gate released by the operator. | | 2026-07-19 | [erp#74](https://gitea.arcodange.lab/arcodange-org/erp/pulls/74) | #40 invoice-extract atom β€” acceptance met (100 % criticals, 0 injection leaks). | | 2026-07-19 | [erp#72](https://gitea.arcodange.lab/arcodange-org/erp/pulls/72) | #43 GED attach op β€” idempotent by (object, filename, sha256), rehearsed live (4 created β†’ 4 deduped). | | 2026-07-19 | this PR | STATUS truth-pass for #43/#44/#40/#54; entry points re-baselined. |