Summary
Move Prompter's decision log out of the untracked .ai-work/Planning/DECISIONS.md into a tracked decisions/ folder in the shared decision-record shape, and resolve the two open decisions (D-14, D-15) or mark them deferred with a review trigger. Real, dated decisions with recorded fallbacks currently exist only on one machine.
Current behaviour
- The repository has no tracked
decisions/ folder. Its durable rulings live in .ai-work/Planning/DECISIONS.md (about 19 KB, 247 lines), which .gitignore line 309 excludes from git per the .ai-work/ rule. The file's own header says it holds "durable rulings for Prompter", appended with the next D-number and a date, and that open decisions are marked OPEN with a recommendation.
- It contains sixteen decisions, D-1 through D-16, dated 2026-07-15 to 2026-08-06 (product name, build-versus-buy, the Discord library, the vector store, the models, the interaction model, the ingestion source, the specs discipline, the deployment target, licence and visibility, the no-personal-data rule for the interaction log, and the bridging role between Discord and the trackers). Several carry a recorded fallback ("if X costs more than it saves, do Y") and one is a negative decision ("decided: NOT now" with a re-raise condition). Two are
OPEN: D-14 (whether question text is stored) and D-15 (where the Pulumi stack lives).
- Because the file is untracked, nothing in the repository, its CI, or a fresh clone can see these rulings; a contributor or agent working from a clean checkout can contradict any of them without knowing.
Desired behaviour
decisions/ with one file per decision, PROMPTER-0001 … PROMPTER-0016, each with front matter id, title, status (accepted, or rejected for the negative decision, or deferred for D-14/D-15 if not resolved), stage, class, reversibility, decided, decider, applies-to, enforced-by (or not verified — <what would verify it>), review-trigger, and optional fallback (the recorded fallback, kept verbatim from the log) and a re-raise trigger on the rejected one; the original text moved into the body under the same headings.
decisions/index.md with a census line (16 records: n accepted, n deferred, n rejected).
- D-14 and D-15 either decided (status
accepted, decided, decider filled) or deferred with a concrete review-trigger.
.ai-work/Planning/DECISIONS.md reduced to a pointer to decisions/ on the machine that holds it (not tracked).
Acceptance
Done when:
- Sixteen records exist under
decisions/, validate against the shared front-matter shape, and none has status proposed; D-14 and D-15 are accepted or deferred with a trigger.
README.md (or AGENTS.md) tells contributors to consult decisions/ before architectural changes.
Verify by:
ls decisions/PROMPTER-00*.md | wc -l # 16
grep -L '^review-trigger:' decisions/PROMPTER-00*.md # prints nothing
grep -n '^status: deferred' decisions/PROMPTER-0014-*.md decisions/PROMPTER-0015-*.md # or accepted with a decided date
Mutation proof: set one record's status to accepted and delete its decided line; the front-matter check (the shared verify-decisions workflow once available, or a local validation) fails naming it.
Out of scope
Re-litigating any decision; changing the .ai-work/ rule (Cratis/AI and Cratis/Workflows own it); the checker itself.
Dependencies
Source: AI-Learning F-89. Depends on: D-0001, D-0002. Related: the verify-no-work-records allowlist amendment in Cratis/Workflows (so decisions/** is recognised as documentation) and the verify-decisions reusable workflow issue there.
Summary
Move Prompter's decision log out of the untracked
.ai-work/Planning/DECISIONS.mdinto a trackeddecisions/folder in the shared decision-record shape, and resolve the two open decisions (D-14, D-15) or mark themdeferredwith a review trigger. Real, dated decisions with recorded fallbacks currently exist only on one machine.Current behaviour
decisions/folder. Its durable rulings live in.ai-work/Planning/DECISIONS.md(about 19 KB, 247 lines), which.gitignoreline 309 excludes from git per the.ai-work/rule. The file's own header says it holds "durable rulings for Prompter", appended with the next D-number and a date, and that open decisions are markedOPENwith a recommendation.OPEN: D-14 (whether question text is stored) and D-15 (where the Pulumi stack lives).Desired behaviour
decisions/with one file per decision,PROMPTER-0001…PROMPTER-0016, each with front matterid,title,status(accepted, orrejectedfor the negative decision, ordeferredfor D-14/D-15 if not resolved),stage,class,reversibility,decided,decider,applies-to,enforced-by(ornot verified — <what would verify it>),review-trigger, and optionalfallback(the recorded fallback, kept verbatim from the log) and a re-raise trigger on the rejected one; the original text moved into the body under the same headings.decisions/index.mdwith a census line (16 records: n accepted, n deferred, n rejected).accepted,decided,deciderfilled) ordeferredwith a concretereview-trigger..ai-work/Planning/DECISIONS.mdreduced to a pointer todecisions/on the machine that holds it (not tracked).Acceptance
Done when:
decisions/, validate against the shared front-matter shape, and none has statusproposed; D-14 and D-15 areacceptedordeferredwith a trigger.README.md(orAGENTS.md) tells contributors to consultdecisions/before architectural changes.Verify by:
Mutation proof: set one record's status to
acceptedand delete itsdecidedline; the front-matter check (the sharedverify-decisionsworkflow once available, or a local validation) fails naming it.Out of scope
Re-litigating any decision; changing the
.ai-work/rule (Cratis/AI and Cratis/Workflows own it); the checker itself.Dependencies
Source: AI-Learning F-89. Depends on: D-0001, D-0002. Related: the
verify-no-work-recordsallowlist amendment in Cratis/Workflows (sodecisions/**is recognised as documentation) and theverify-decisionsreusable workflow issue there.