LearnNewsExamplesServices
Frontmatter
id11729
titleCloud deployment ADR set — D1/D3/D4 decision records + stale-ADR reconciliation
stateClosed
labels
documentationenhancementaiarchitecture
assignees[]
createdAtMay 21, 2026, 7:45 PM
updatedAtMay 21, 2026, 8:09 PM
githubUrlhttps://github.com/neomjs/neo/issues/11729
authorneo-opus-ada
commentsCount2
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
blockedBy[x] 11721 Cloud deployment topology + scheduler-task-taxonomy ADR
blocking[]
closedAtMay 21, 2026, 8:09 PM

Cloud deployment ADR set — D1/D3/D4 decision records + stale-ADR reconciliation

Closed v13.0.0/archive-v13-0-0-chunk-12 documentationenhancementaiarchitecture
neo-opus-ada
neo-opus-ada commented on May 21, 2026, 7:45 PM

Context

Epic #11720 graduated from Discussion #11718. Its decomposition produced D0 #11721 — a single ADR ticket scoped to deployment topology + scheduler-task-taxonomy. A post-graduation completeness audit of #11718 (body Updates a–h + all 29 comments) found the Discussion explicitly calls for more ADRs than D0 delivers, and Epic #11720's own Acceptance Criteria names them — "ADR set: D0 + (D1–D4 where durable decisions are reached) recorded; stale deployment-relevant ADRs/docs updated" — but that AC was never decomposed into a sub-ticket. This is that sub-ticket (Sub G).

The Problem

The deployment decisions made inside the implementation workstreams (Sub B/C/E) are durable architecture choices. Per Discussion #11718 §7 — "D1–D4 become ADRs when their workstreams record durable architecture choices" — and Epic #11720's framing of D0–D5 as decision workstreams each producing an ADR, those records are a required mission outcome (the mission's second clause: a future agent/operator can deploy without tacit maintainer knowledge). Currently no ticket owns authoring them:

  • D1 — container topology. #11718 §5 names the D1 ADR three times ("the D1 ADR records the final decision"). Sub B #11723 implements the multi-container compose; nothing records the decision.
  • D3 — tenant-repo ingestion ownership. GPT review (#11718): "an ingestion-ownership ADR records the chosen push/server-clone policy." Sub E #11726 documents the operational model but is not an ADR.
  • D4 — backup / redeploy-safe persistence. GPT review: "a persistence ADR records the chosen bind-mount/backup externalization policy." Sub C #11724 implements bind-mounts; nothing records the decision.
  • D2 — provider isolation / resource-governance. #11718 §3.1 + GPT STEP_BACK list this as an ADR candidate; §5 D2 suggests it may fold into the D1 ADR as a section — the fold-vs-standalone call is itself unresolved.
  • Stale-ADR reconciliation. Epic #11720 AC: "stale deployment-relevant ADRs/docs updated." If the D0/D1 topology decision supersedes or amends ADR 0003 (unified Chroma) or 0009 (cross-daemon lease), those need annotation. No ticket owns the sweep.

The Fix

Author the cloud-deployment ADR set under learn/agentos/decisions/, each as a decision record — chosen outcome + rejected options, per ADR 0005/0006 — never an open options workspace:

  1. D1 container-topology ADR — the chosen production topology (container count: 3 today → 4 with the orchestrator → 5 with a model-provider container) + the lifecycle / resource / security-boundary rationale per service.
  2. D3 ingestion-ownership ADR — the push-based-default decision + the server-side-clone deferral.
  3. D4 backup/redeploy-persistence ADR — the chosen bind-mount / /data externalization policy.
  4. D2 provider-isolation — resolve standalone-ADR vs D1-ADR-section, then record accordingly.
  5. Stale-ADR reconciliation — sweep learn/agentos/decisions/ for deployment-relevant ADRs (esp. 0003, 0009) the topology decision supersedes/amends; annotate them; record the sweep result even if "no change needed."

Authoring discipline: each decision ADR (D1/D3/D4) is authored alongside — ideally in the same PR as — the implementation work that crystallizes its decision (D1 ↔ Sub B #11723, D3 ↔ Sub E #11726, D4 ↔ Sub C #11724), so they are decision records, not retroactive paperwork. This ticket is the accountability umbrella ensuring none is dropped, and directly owns the cross-cutting items (D2 fold-vs-standalone, stale-ADR sweep).

Acceptance Criteria

  • D1 container-topology ADR exists in learn/agentos/decisions/ — chosen outcome + rejected options.
  • D3 ingestion-ownership ADR exists — push-based default + clone deferral recorded.
  • D4 backup/redeploy-persistence ADR exists — externalization policy recorded.
  • D2 provider-isolation: a documented decision on standalone-ADR vs D1-section exists, and the content is recorded accordingly.
  • Stale-ADR reconciliation: learn/agentos/decisions/ swept; any ADR superseded/amended by the topology decision is annotated; the sweep result is recorded even if no change is needed.
  • Each D1/D3/D4 ADR cross-links its originating implementation sub (#11723 / #11726 / #11724) and Epic #11720.
  • Epic #11720's "ADR set" AC is satisfiable by pointing at this ticket's deliverables.

Out of Scope

  • The D0 topology + scheduler-task-taxonomy ADR — owned by D0 #11721.
  • The implementation work (compose, bind-mounts, ingestion model) — owned by Sub B #11723 / Sub C #11724 / Sub E #11726.
  • D5 graph-store evolution ADR (SQLite → networked SQL) — explicitly a v13 follow-up per #11718 §5 D5.
  • A new ai/config wake toggle — gated on V-B-A per #11718 (GPT C26); not pre-filed.

Avoided Traps

Trap Why rejected
Four separate ADR tickets (D1/D2/D3/D4) Fragments a coherent decision-record set + inflates ticket count vs the 60–80 ceiling; one umbrella with per-ADR ACs keeps the set coherent and reversible
ADR as an open A/B/C/D options workspace An ADR is a decision record — chosen outcome + rejected options — per ADR 0005/0006
Author all ADRs in one trailing PR after Sub B/C/E land Retroactive paperwork, not decision records; each ADR ships with the PR that makes its decision

Related

  • Parent epic: #11720
  • Blocked by: D0 #11721 (the topology gate must land first)
  • Coordinates with: Sub B #11723 (D1), Sub C #11724 (D4), Sub E #11726 (D3) — the decision-producing workstreams
  • Graduating Discussion: #11718 (post-graduation completeness audit)
  • ADRs: format per 0005 / 0006; in scope for reconciliation — 0003 (unified Chroma), 0009 (cross-daemon lease)

Origin Session ID

8e1dc8ca-b5a5-4479-b3cf-31918eb4a5b2