@nusoft/nuos-build-catalogue 0.9.0 → 0.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/dist/cli.d.ts +13 -0
  2. package/dist/cli.js +472 -0
  3. package/dist/commands/create.d.ts +70 -0
  4. package/dist/commands/create.js +341 -0
  5. package/dist/commands/format.d.ts +19 -0
  6. package/dist/commands/format.js +89 -0
  7. package/dist/commands/handlers.d.ts +35 -0
  8. package/dist/commands/handlers.js +132 -0
  9. package/dist/commands/init.d.ts +41 -0
  10. package/dist/commands/init.js +289 -0
  11. package/dist/commands/prompt.d.ts +44 -0
  12. package/dist/commands/prompt.js +100 -0
  13. package/dist/commands/write.d.ts +39 -0
  14. package/dist/commands/write.js +247 -0
  15. package/dist/embedder/ollama.d.ts +54 -0
  16. package/dist/embedder/ollama.js +164 -0
  17. package/dist/embedder/openai.d.ts +21 -0
  18. package/dist/embedder/openai.js +56 -0
  19. package/dist/embedder/select.d.ts +9 -0
  20. package/dist/embedder/select.js +27 -0
  21. package/dist/embedder/stub.d.ts +15 -0
  22. package/dist/embedder/stub.js +40 -0
  23. package/dist/embedder/types.d.ts +21 -0
  24. package/dist/embedder/types.js +6 -0
  25. package/dist/embedder/vertex.d.ts +41 -0
  26. package/dist/embedder/vertex.js +94 -0
  27. package/dist/indexer/chunk.d.ts +20 -0
  28. package/dist/indexer/chunk.js +196 -0
  29. package/dist/indexer/crawl.d.ts +20 -0
  30. package/dist/indexer/crawl.js +66 -0
  31. package/dist/indexer/metadata.d.ts +21 -0
  32. package/dist/indexer/metadata.js +126 -0
  33. package/dist/indexer/upsert.d.ts +26 -0
  34. package/dist/indexer/upsert.js +152 -0
  35. package/dist/migrate/parsers.d.ts +17 -0
  36. package/dist/migrate/parsers.js +123 -0
  37. package/dist/migrate/run.d.ts +22 -0
  38. package/dist/migrate/run.js +142 -0
  39. package/dist/migrate/store.d.ts +20 -0
  40. package/dist/migrate/store.js +52 -0
  41. package/dist/migrate/types.d.ts +57 -0
  42. package/dist/migrate/types.js +13 -0
  43. package/dist/regenerate/check.d.ts +11 -0
  44. package/dist/regenerate/check.js +97 -0
  45. package/dist/regenerate/diff.d.ts +18 -0
  46. package/dist/regenerate/diff.js +38 -0
  47. package/dist/regenerate/types.d.ts +52 -0
  48. package/dist/regenerate/types.js +14 -0
  49. package/dist/runtime/ac-parse.d.ts +63 -0
  50. package/dist/runtime/ac-parse.js +196 -0
  51. package/dist/runtime/markdown-edit.d.ts +53 -0
  52. package/dist/runtime/markdown-edit.js +101 -0
  53. package/dist/runtime/markdown-render.d.ts +27 -0
  54. package/dist/runtime/markdown-render.js +209 -0
  55. package/dist/runtime/mis-adapter.d.ts +35 -0
  56. package/dist/runtime/mis-adapter.js +364 -0
  57. package/dist/runtime/runtime.d.ts +20 -0
  58. package/dist/runtime/runtime.js +39 -0
  59. package/dist/search/format.d.ts +6 -0
  60. package/dist/search/format.js +23 -0
  61. package/dist/search/query.d.ts +29 -0
  62. package/dist/search/query.js +71 -0
  63. package/dist/store/open.d.ts +14 -0
  64. package/dist/store/open.js +16 -0
  65. package/package.json +5 -3
  66. package/templates/protocols/end-of-session.md +19 -0
  67. package/templates/protocols/persona-new.md +43 -0
  68. package/templates/protocols/start-of-session.md +19 -0
  69. package/templates/protocols/wu-new.md +52 -0
  70. package/templates/starter-kit/CLAUDE.md +73 -0
  71. package/templates/starter-kit/README.md +116 -0
  72. package/templates/starter-kit/docs/build/END-OF-SESSION.md +62 -0
  73. package/templates/starter-kit/docs/build/START-OF-SESSION.md +33 -0
  74. package/templates/starter-kit/docs/build/STATE.md +47 -0
  75. package/templates/starter-kit/docs/build/decisions/D001-template.md +38 -0
  76. package/templates/starter-kit/docs/build/decisions/_index.md +30 -0
  77. package/templates/starter-kit/docs/build/maps/01-template.md +126 -0
  78. package/templates/starter-kit/docs/build/maps/_index.md +63 -0
  79. package/templates/starter-kit/docs/build/open-questions/_index.md +26 -0
  80. package/templates/starter-kit/docs/build/personas/001-template.md +68 -0
  81. package/templates/starter-kit/docs/build/personas/_index.md +77 -0
  82. package/templates/starter-kit/docs/build/risks/_index.md +28 -0
  83. package/templates/starter-kit/docs/build/sessions/0000-00-00-template.md +47 -0
  84. package/templates/starter-kit/docs/build/sessions/_index.md +27 -0
  85. package/templates/starter-kit/docs/build/work-units/001-template.md +82 -0
  86. package/templates/starter-kit/docs/build/work-units/_index.md +34 -0
  87. package/templates/starter-kit/docs/contracts/_index.md +26 -0
  88. package/templates/starter-kit/docs/guides/_index.md +26 -0
  89. package/templates/starter-kit/docs/philosophy/_index.md +26 -0
  90. package/templates/starter-kit/methodfile.json +54 -0
@@ -0,0 +1,47 @@
1
+ # {{PROJECT_NAME}} — Always-Current State
2
+
3
+ > The single snapshot read at the start of every session. If anything important is not here, it is not real. Update this file at the end of every session via the end-of-session protocol.
4
+
5
+ **Last updated:** {{TODAY}}
6
+ **Active phase:** Phase 0 — bootstrap
7
+ **Active work unit:** WU 001 — [first work unit name]
8
+
9
+ ## What is currently in flight
10
+
11
+ [One paragraph describing what work is happening right now. Edit when work changes shape.]
12
+
13
+ ## What just shipped
14
+
15
+ Nothing yet — this catalogue was just adopted on {{TODAY}}.
16
+
17
+ ## What is next
18
+
19
+ [The next concrete action. Should be specific enough that an LLM teammate can pick it up and start without further context.]
20
+
21
+ ## Open questions blocking progress
22
+
23
+ None currently filed. Filed questions live in [`open-questions/_index.md`](open-questions/_index.md).
24
+
25
+ ## Active risks
26
+
27
+ None currently filed. Filed risks live in [`risks/_index.md`](risks/_index.md).
28
+
29
+ ## Decisions made recently
30
+
31
+ | Decision | Status | Date |
32
+ | --- | --- | --- |
33
+ | _none yet_ | | |
34
+
35
+ ## Work units in flight
36
+
37
+ | WU | Status | Owner | Notes |
38
+ | --- | --- | --- | --- |
39
+ | WU 001 | 🟡 in flight | — | First work unit |
40
+
41
+ ## Status legend
42
+
43
+ - 🔵 **proposed** — written down, not yet started
44
+ - 🟡 **in flight** — actively being worked on
45
+ - 🟣 **built / awaiting review** — implementation done, review pending
46
+ - ✅ **merged / shipped** — complete and integrated
47
+ - 🔴 **blocked** — cannot proceed; see notes for blocker
@@ -0,0 +1,38 @@
1
+ # D001 — [Decision title in present tense, e.g., "We commit to PostgreSQL as the primary store"]
2
+
3
+ | Field | Value |
4
+ | --- | --- |
5
+ | Status | accepted |
6
+ | Date | {{TODAY}} |
7
+ | Affects | [which work units, modules, or surfaces this commits] |
8
+ | Supersedes | none |
9
+ | Superseded by | — |
10
+
11
+ ## Context
12
+
13
+ [What is the situation in which this decision is being made? What are the constraints, what is forcing a choice now, what does *not* doing this look like? One or two paragraphs.]
14
+
15
+ ## Decision
16
+
17
+ [The commitment in plain language. One short paragraph. The reader should be able to read just this section and understand what was committed.]
18
+
19
+ ## Rationale
20
+
21
+ [Why this and not the alternatives? What does this commit us to, and what does it rule out? Be specific about trade-offs accepted.]
22
+
23
+ ## Consequences
24
+
25
+ - [What this means for downstream work]
26
+ - [What this means for future flexibility]
27
+ - [What this means for any current open questions or risks]
28
+
29
+ ## Alternatives considered
30
+
31
+ - **[Alternative 1]** — rejected because [...]
32
+ - **[Alternative 2]** — rejected because [...]
33
+
34
+ ## Pointers
35
+
36
+ - [Link to relevant work units]
37
+ - [Link to any open question this resolves]
38
+ - [Link to any prior decision this builds on]
@@ -0,0 +1,30 @@
1
+ # Decisions
2
+
3
+ > Architectural commitments made by this project. Each decision lives in its own D-NNN file. Decisions are dated, justified, and have a status (`accepted`, `superseded`, `withdrawn`).
4
+
5
+ ## Index
6
+
7
+ | ID | Title | Status | Date |
8
+ | --- | --- | --- | --- |
9
+ | _none yet — see the template_ | | | |
10
+
11
+ ## How to add a decision
12
+
13
+ 1. Copy `D001-template.md` to `DNNN-short-title-with-dashes.md` (next available number)
14
+ 2. Fill in the template
15
+ 3. Add a row to the table above
16
+ 4. If the decision affects a work unit's acceptance criteria, link it from the WU
17
+ 5. If the decision supersedes a prior one, mark the prior one's status as `superseded` and link forward
18
+
19
+ ## When to write a decision
20
+
21
+ - An architectural commitment is being made
22
+ - Two reasonable approaches are being chosen between
23
+ - A constraint is being adopted that future work will need to honour
24
+ - A prior decision is being overridden (write the supersede; don't silently shift)
25
+
26
+ ## When NOT to write a decision
27
+
28
+ - The choice is implementation-detail and easy to reverse
29
+ - The work unit's notes are sufficient to capture the rationale
30
+ - The matter is open and unresolved — file it as an open question (Q-NNN), not a decision
@@ -0,0 +1,126 @@
1
+ # Map [number] — [title]
2
+
3
+ > **The canonical operational plan for [workstream name].** Sequenced work units from "today" to "[goal state]", each with phase-step decomposition, contracts realised, and verification gates anchored in target-repo files. If a step isn't here, it isn't planned. This map is the single source of truth for [workstream name] — read this before any other planning surface.
4
+
5
+ > Replace the bracketed placeholders. Delete this hint block.
6
+
7
+ ## How to read this map
8
+
9
+ The catalogue's decomposition (which this map operationalises):
10
+
11
+ ```
12
+ Contracts deep-module surfaces — what the system IS
13
+
14
+ │ realised by
15
+
16
+ Maps strategic plan — when, in what order, why
17
+
18
+ │ ordering
19
+
20
+ Work units (WUs) executable units against contract surfaces — what ships
21
+
22
+ │ decomposed into
23
+
24
+ Phases sub-units when a WU is too large for one shot
25
+
26
+ │ decomposed into
27
+
28
+ Phase steps the actual moves; each has acceptance + verification gate
29
+ ```
30
+
31
+ Maps own **sequencing and outline**. WU files own **acceptance design and execution log**. Contracts own **the surface specs**. Sessions own **the temporal history**. No other planning artefact.
32
+
33
+ ## The five agentic-age patterns this map enforces
34
+
35
+ These are the load-bearing discipline for agent-led building (codified in [`THE-NUOS-BUILD-METHOD.md`](https://github.com/DarrenJCoxon/nuos/blob/main/docs/THE-NUOS-BUILD-METHOD.md) §post-Phase-3 epistemic discipline):
36
+
37
+ 1. **Verification gates anchored in target-repo files** — every phase step names a specific file/grep/test as acceptance proof. Closes the spec-vs-reality drift loop.
38
+ 2. **Maps as single canonical plan** — story-level detail lives here, not in side docs. Closes the proliferation loop.
39
+ 3. **Contracts as immutable truth** — phase steps cite the contract surface they realise. Closes the "agent makes things up" loop.
40
+ 4. **Hedge words as stop signal** — "likely", "presumably", "should be" indicate a missing verification step.
41
+ 5. **Design alternatives before implementation** — Ousterhout's "design it twice"; produce at least two fundamentally different designs, evaluate, then pick or hybrid before generating non-trivial implementation. Phase steps that generate implementation carry an implicit prerequisite: design alternatives recorded in WU notes.
42
+
43
+ ## Where we are now ([date])
44
+
45
+ | WU | Title | Status | Repo / branch |
46
+ |---|---|---|---|
47
+ | [WU number] | [title] | [🔵 ready / 🟡 in flight / 🟣 in_review / ✅ done / 🔴 blocked] | [repo + branch] |
48
+
49
+ ## What "[goal state]" means
50
+
51
+ The workstream is **complete** when all of the following hold simultaneously:
52
+
53
+ 1. [Outcome 1]
54
+ 2. [Outcome 2]
55
+ 3. [Outcome 3]
56
+ 4. ...
57
+
58
+ (List the verifiable end-state of the workstream. Each outcome should be an observable fact about the system, not a process step.)
59
+
60
+ ## Critical path
61
+
62
+ ```
63
+ [diagram of WU sequencing with dependencies — use ASCII art or describe in prose]
64
+ ```
65
+
66
+ ---
67
+
68
+ ## WU [number] — [title]
69
+
70
+ | Field | Value |
71
+ |---|---|
72
+ | Contracts realised | [which contract surface(s) this WU fulfils] |
73
+ | Status | [🔵 / 🟡 / 🟣 / ✅ / 🔴] |
74
+ | Repo | [repo + branch] |
75
+ | Estimate | [working days] |
76
+ | Depends on | [upstream WUs / npm publishes / external] |
77
+
78
+ **Design alternatives considered (Pattern N — before any non-trivial implementation step):**
79
+
80
+ > If this WU includes any non-trivial architectural choice (schema, migration, integration shape, adapter, RBAC, audit, retention, error-handling), record at least two fundamentally different design candidates here before phase steps that generate implementation. State the chosen one and why. Delete this block if the WU is purely incremental work against an already-decided design.
81
+
82
+ - **Option A:** [first fundamentally different design]. Trade-offs: [...]. Errors created: [...].
83
+ - **Option B:** [second fundamentally different design]. Trade-offs: [...]. Errors created: [...].
84
+ - *(Option C if useful)*
85
+ - **Chosen:** [A / B / C / hybrid] because [...]. Records as: [WU notes / D-NNN decision file].
86
+
87
+ | # | Phase step | Acceptance | Verification gate |
88
+ |---|---|---|---|
89
+ | 1 | [what move is being made] | [what proves it produced the intended outcome] | [specific file/grep/test the operator runs to confirm] |
90
+ | 2 | ... | ... | ... |
91
+
92
+ **Done when:** [the overall WU acceptance — usually "all N steps complete + canonical green line + integration test"].
93
+
94
+ **Risks:** [anything that could derail the WU; mitigations].
95
+
96
+ ---
97
+
98
+ ## WU [number] — [title]
99
+
100
+ [Repeat the structure above for each WU on the critical path. Each WU with non-trivial design choices gets its own "Design alternatives considered" block; routine incremental WUs can omit it.]
101
+
102
+ ---
103
+
104
+ ## What runs in parallel
105
+
106
+ [List independent workstreams that don't gate the critical path.]
107
+
108
+ ## Trigger conditions for deferred WUs
109
+
110
+ [List WUs that are deferred and what unblocks them.]
111
+
112
+ ## What this map is not
113
+
114
+ - It does NOT describe [out-of-scope topic 1] — see [other doc].
115
+ - It does NOT cover [out-of-scope topic 2] — see [other doc].
116
+
117
+ ## How to use this map
118
+
119
+ - **At session start** — read this map plus the active WU's spec file. The map tells you which phase step is next + the verification gate; the WU spec tells you the deeper acceptance design.
120
+ - **Mid-step** — if you find yourself writing a hedge word ("likely", "presumably", "should be"), stop. Run the verification gate's grep/test/file-read first. Replace the hedge with the result.
121
+ - **At session end** — flip phase-step status here; if scope changed, edit the step description here (not in a side doc).
122
+ - **When a phase completes** — flip the WU's phase status; update STATE.md to reflect; confirm the dependency graph still holds.
123
+
124
+ ## Pointers
125
+
126
+ - [List relevant WU files, contracts, decisions, prior maps]
@@ -0,0 +1,63 @@
1
+ # Maps — index
2
+
3
+ > Maps are the canonical operational plan for a project running the NuOS Build Method. **Story-level detail lives in maps**, not in fragmented planning docs. If a phase step isn't here, it isn't planned. The maps are the single source of truth for sequencing.
4
+
5
+ ## Why maps matter (the post-Phase-3 evolution)
6
+
7
+ The NuOS catalogue has many surfaces — decisions, contracts, work units, sessions, risks, open questions. Maps are what stops planning from sprawling across all of them. Maps own:
8
+
9
+ - **Sequencing** — which work unit comes when, with explicit dependencies
10
+ - **Phase-step decomposition** — when a WU is too large for one shot, the phase steps live here, each with acceptance + verification gate
11
+ - **Contracts realised** — every WU on the path cites the contract surface(s) it fulfils
12
+
13
+ This is one of the four agentic-age patterns codified in the NuOS Build Method (see [`docs/THE-NUOS-BUILD-METHOD.md`](https://github.com/DarrenJCoxon/nuos/blob/main/docs/THE-NUOS-BUILD-METHOD.md) §post-Phase-3). The pattern: **maps as single canonical plan** closes the proliferation loop. A fresh session — human or agent — should be able to read STATE.md + the active map and have full operational context.
14
+
15
+ ## Map conventions
16
+
17
+ - **Map 1 — the horizon.** The whole project journey, narrative form. Layperson-readable. If you read only one map, this is it.
18
+ - **Map 2 — phases-in-detail (optional).** When the project has clearly separated phases (e.g., NuOS's Phases 0–F), this map gives mid-level detail per phase.
19
+ - **Map N — canonical operational plan(s).** One per major workstream. Story-level detail with verification gates. This is where the active work lives.
20
+
21
+ A small project may only need Map 1 + Map 2 (canonical plan). A larger project may have several Map N variants for parallel workstreams. The convention: numbered sequentially; the latest is the most operational.
22
+
23
+ ## Story-step shape
24
+
25
+ Every executable phase step in a map has the following shape (per [`01-template.md`](01-template.md)):
26
+
27
+ ```
28
+ | # | Phase step | Acceptance | Verification gate |
29
+ |---|---|---|---|
30
+ | 1 | <what move is being made> | <what proves it produced the intended outcome> | <specific file/grep/test in the target repo that the operator runs to confirm the gate> |
31
+ ```
32
+
33
+ The **verification gate** is the load-bearing column for agent-led work. *"This works"* is not a gate. *"`grep 'createSensightMisWriteAdapter' apps/web/lib/nuos/nuflow/runtime.ts` returns a hit"* is a gate. Vague gates leave room for plausible-looking work that doesn't match reality; precise gates close that loop.
34
+
35
+ ## Hedge words are a stop signal
36
+
37
+ If you find yourself writing *"likely"*, *"presumably"*, *"should be"* in a map, stop. The hedge word indicates a verification step you skipped. Replace it with the grep/test/file-read result before the map ships.
38
+
39
+ ## Design alternatives before implementation
40
+
41
+ For any non-trivial architectural choice — schema, migration, integration shape, adapter design, audit composition, RBAC pattern, error-handling strategy, retention policy — **produce at least two fundamentally different designs, evaluate them, then pick or hybrid before any implementation is generated.** This is Ousterhout's "design it twice" applied to agent-led work.
42
+
43
+ Two syntactic variations of the same design (e.g., `USING` clause vs `WITH CHECK` clause for the same RLS pattern) do not count. Three fundamentally different designs (e.g., session-variable RLS / Supabase auth.uid() RLS / defense-in-depth + app-side enforcement) do count.
44
+
45
+ Record the alternatives in the WU's Design notes (or as a D-NNN decision when the choice is durable enough). The audit trail of *"we considered A, B, C; chose B because X"* is catalogue value — future sessions can re-evaluate when context changes.
46
+
47
+ In maps, any phase step whose work is *"generate non-trivial implementation"* carries an implicit prerequisite: design alternatives recorded in the WU notes. The gate fires before code is written, not after.
48
+
49
+ ## Naming
50
+
51
+ - `01-the-horizon.md` — the high-level narrative (recommend keep verbatim if adopting unchanged)
52
+ - `02-<name>.md` — phases-in-detail or first canonical operational plan
53
+ - `03-<name>.md`, `04-<name>.md`, etc. — additional canonical plans per workstream
54
+
55
+ When a map is superseded (e.g., the project's operational shape changes), preserve the old map with a `(HISTORICAL)` header pointing at its replacement. Don't delete — the evolution is part of the audit trail.
56
+
57
+ ## Maps in this catalogue
58
+
59
+ | File | Title | Purpose |
60
+ |---|---|---|
61
+ | `01-template.md` | Map template | Shape for a canonical operational map (copy + rename) |
62
+
63
+ Update this list as you add real maps.
@@ -0,0 +1,26 @@
1
+ # Open Questions
2
+
3
+ > Questions blocking work that have not yet been resolved into decisions. Each question is Q-NNN. Open questions exist in three states: `open` (under deliberation), `resolved` (resolved into a D-NNN — link forward), `withdrawn` (no longer relevant).
4
+
5
+ ## Index
6
+
7
+ | ID | Question | Status | Blocks | Date opened |
8
+ | --- | --- | --- | --- | --- |
9
+ | _none yet_ | | | | |
10
+
11
+ ## How to file an open question
12
+
13
+ 1. Add a new row with Q-NNN (next available number)
14
+ 2. If the question warrants detail (multiple options, real trade-offs), write a `Q-NNN-short-title.md` file beside this index laying out the options
15
+ 3. Reference the question from any blocked work unit
16
+ 4. When the question resolves, file a D-NNN; mark this question `resolved` and link forward
17
+
18
+ ## When a question becomes a decision
19
+
20
+ A question is "ready to resolve" when:
21
+
22
+ - The trade-offs are clear enough to choose between
23
+ - The information needed to choose is available (or its absence is itself a decision)
24
+ - An active or imminent work unit needs the answer
25
+
26
+ Resolving prematurely produces fragile decisions. Resolving late produces blocked work units. The catalogue review walks open questions and forces the choice when blocking begins.
@@ -0,0 +1,68 @@
1
+ # P001 — [Persona name, e.g., "Returning bookshop customer" or "Watling Street Primary SENCo"]
2
+
3
+ | Field | Value |
4
+ | --- | --- |
5
+ | Status | 🟢 active |
6
+ | Paired with | [P-NNN if this persona's outcomes are paired with another (e.g., customer ↔ organiser); `none` otherwise] |
7
+ | Used by WUs | [List of WU numbers that cite this persona — keep updated] |
8
+ | First filed | {{TODAY}} |
9
+ | Last refined | {{TODAY}} |
10
+
11
+ ## What this persona is, in one sentence
12
+
13
+ [One sentence describing who this person is in the context of *this system*. Not "Sarah, 32, marketing manager". A relationship to the system: "a returning customer who has attended at least one event before and has an existing account", "a SENCo at a primary school managing 22 pupils on the SEN register".]
14
+
15
+ ## The seven dimensions
16
+
17
+ ### 1. Identity
18
+
19
+ [Who they are in the context of this system. Their relationship to it. Not their demographic profile — their position in the system's world. What account do they have? What role do they play? What other systems have they used before that shape their expectations?]
20
+
21
+ ### 2. Reality
22
+
23
+ [The physical environment they are in when they use this system. Device, connection quality, noise level, time pressure. "At home on a laptop, stable connection, no time pressure." "On a phone in the staff room between lessons, intermittent wifi, four-minute window." Real conditions, not idealised ones.]
24
+
25
+ ### 3. Psychology
26
+
27
+ [Technical confidence, stress level, tolerance for confusion. Will they read instructions or click around? Will they abandon if a page takes more than three seconds? Will they call a colleague for help, or give up silently? What is their emotional state when they arrive at this system?]
28
+
29
+ ### 4. Trigger
30
+
31
+ [What brought them to this outcome. A real-world event, not a UI click. "They saw an event announcement on the bookshop's social media." "Their head teacher forwarded a safeguarding form that needs completing today." "A pupil disclosed something at lunch and they need to record it before the day ends."]
32
+
33
+ ### 5. History
34
+
35
+ [What they have done before arriving at this outcome. Have they used the platform before? Do they have saved details? Do they understand how this kind of system works? What context do they bring with them that the system can rely on?]
36
+
37
+ ### 6. Success
38
+
39
+ [What "done" looks like from *their* perspective. Not what the system logs — what they feel. "I know I have a place, I know when it is, and I will not forget." "The disclosure is recorded, the right people are notified, and I can go home knowing I did my duty." This drives the design — the system must produce that subjective state, not just write a database row.]
40
+
41
+ ### 7. Constraints
42
+
43
+ [What they cannot or will not do. "Will not phone the shop to book." "Will not create a new account if their login fails — they will give up." "Will not wait more than five seconds for a page to load." "Cannot share the screen with a parent — confidentiality." These define the outer boundary of acceptable design.]
44
+
45
+ ## The acid-test refinement
46
+
47
+ [The hardest legitimate user — this persona with the most demanding combination of real constraints. Not a hostile user; a legitimate user with the worst realistic conditions. Slow device, low technical confidence, time pressure, complex situation, possibly distracted or stressed.
48
+
49
+ Design for the acid-test and the standard cases hold. If only one scenario gets verified end-to-end, verify this one.]
50
+
51
+ ## Paired persona
52
+
53
+ [If this persona's outcomes are paired with another's — e.g., a customer who books an event and an organiser who receives the booking — link the paired P-NNN here. The contract between them (what one outcome produces and the other consumes) lives in the WU files, but the relationship is recorded here so a future reader can find both sides quickly.
54
+
55
+ If this persona has no paired counterpart, write `none`.]
56
+
57
+ ## Used by WUs
58
+
59
+ [Keep this list updated as WUs cite the persona. Format: `WU NNN — title` per line.]
60
+
61
+ - [WU NNN — title]
62
+ - ...
63
+
64
+ ## Notes / refinements
65
+
66
+ ### {{TODAY}} — first filed
67
+
68
+ [Initial draft of the seven dimensions. What was clear; what was guessed; what needs verification with a real person.]
@@ -0,0 +1,77 @@
1
+ # Personas Index
2
+
3
+ > Master list of the personas this project's work units serve. Personas are P-NNN-numbered, written along the seven dimensions, and refined with the acid-test. Reusable across multiple WUs — a "paired outcome" (e.g., a customer-side outcome paired with an organiser-side one) cites two personas, both filed here.
4
+
5
+ ## What a persona is
6
+
7
+ A persona is a **specification of who will use an outcome and what situation they will be in when they use it.** It is not a demographic snapshot; it is a design constraint. A persona that does not change a design decision is decoration — rewrite it until it does.
8
+
9
+ The seven dimensions every persona addresses:
10
+
11
+ 1. **Identity** — who they are in the context of *this system*. Not their age or job title in the abstract — their relationship to this particular system.
12
+ 2. **Reality** — physical environment when they use the outcome. Device, connection quality, noise level, time pressure.
13
+ 3. **Psychology** — technical confidence, stress level, tolerance for confusion.
14
+ 4. **Trigger** — what brought them to this outcome. A real-world event, not a UI click.
15
+ 5. **History** — what they have done before arriving at this outcome.
16
+ 6. **Success** — what "done" looks like from their perspective. Not what the system logs — what they feel.
17
+ 7. **Constraints** — what they cannot or will not do. Defines the outer boundary of acceptable design.
18
+
19
+ Every persona is then refined into an **acid-test persona** — the hardest legitimate user, with the most demanding combination of real constraints. Design for the acid-test and the standard cases hold.
20
+
21
+ ## How a persona is filed
22
+
23
+ ```
24
+ personas/
25
+ ├── _index.md (this file)
26
+ ├── 001-template.md (the template; copy when filing a new persona)
27
+ ├── P001-<slug>.md (your first persona)
28
+ ├── P002-<slug>.md ...
29
+ └── done/ (when a persona retires — e.g., the user role no longer exists)
30
+ ```
31
+
32
+ Personas are P-NNN-numbered. Numbers are stable: a retired persona moves to `done/` but keeps its number. Cross-WU references use the stable handle (`{repo}:P-NNN` for cross-catalogue references; `[P-NNN](../personas/P-NNN-slug.md)` within the same catalogue).
33
+
34
+ ## Personas — active
35
+
36
+ | ID | Name | Used by WUs | Status |
37
+ | --- | --- | --- | --- |
38
+
39
+ [Add a row when you file a new persona. Status: `🟢 active`, `🟡 evolving` (the persona shape is being refined), `🟣 paired-with-PNNN` (this persona's outcomes are paired with another), `⚫ retired`.]
40
+
41
+ ## Status legend
42
+
43
+ - 🟢 `active` — in use; cited by one or more current WUs
44
+ - 🟡 `evolving` — the seven dimensions are being refined as understanding deepens
45
+ - 🟣 `paired-with-PNNN` — this persona pairs with another (e.g., customer + organiser)
46
+ - ⚫ `retired` — no longer in use; moved to `done/`
47
+
48
+ ## How to write a persona
49
+
50
+ Use the file format established in `001-template.md`. A persona document has:
51
+
52
+ - Identity dimension
53
+ - Reality dimension
54
+ - Psychology dimension
55
+ - Trigger dimension
56
+ - History dimension
57
+ - Success dimension
58
+ - Constraints dimension
59
+ - Acid-test refinement (the worst legitimate combination of constraints)
60
+ - Paired persona (if any) — the persona on the other side of any outcome this persona triggers
61
+ - WUs this persona is cited by
62
+
63
+ A persona should be small enough to read in two minutes and specific enough that swapping it for a different persona would force at least one design decision to change. If you can substitute the persona without changing anything in the WU, the persona is decorative — rewrite it until it constrains.
64
+
65
+ ## How personas connect to WUs
66
+
67
+ A WU's `Persona` field links the P-NNN that the outcome serves. A WU's `Trigger` field draws from the persona's Trigger dimension but specifies the *moment* (not just the class of event). A WU's `Walkthrough` is written from the persona's perspective, using their reality, psychology, and history to constrain what they need to be told and what they already know.
68
+
69
+ If a WU has no clear persona, it is one of two things:
70
+ 1. An infrastructure WU (build, publish, hardening) — mark the persona field `N/A — infrastructure WU`.
71
+ 2. An unanchored feature — the WU describes a category of capability without a person doing a thing. Rewrite as an outcome with a real persona, or split into smaller outcomes.
72
+
73
+ ## How personas evolve
74
+
75
+ Personas evolve as understanding deepens. The seven dimensions get sharper; the acid-test gets harder; new constraints surface. Update the persona file in place — but record the *date* of each refinement in the file itself, so a future reader can see how the understanding changed.
76
+
77
+ If a persona's role in the system changes substantially (e.g., "customer" splits into "registered customer" + "guest customer"), file two new personas with new P-NNN numbers and mark the original `⚫ retired` rather than amending it.
@@ -0,0 +1,28 @@
1
+ # Risks
2
+
3
+ > Tracked risks to the project. Each risk is R-NNN. A risk is anything that could prevent a work unit from shipping, prevent a phase from completing, or invalidate an architectural commitment if it materialises.
4
+
5
+ ## Index
6
+
7
+ | ID | Risk | Severity | Status | Date opened |
8
+ | --- | --- | --- | --- | --- |
9
+ | _none yet_ | | | | |
10
+
11
+ ## Severity scale
12
+
13
+ - **High** — blocks active work or threatens an architectural commitment
14
+ - **Medium** — would slow work materially if it materialises
15
+ - **Low** — worth tracking; not blocking
16
+
17
+ ## Status
18
+
19
+ - **open** — being watched
20
+ - **mitigated** — action taken; risk reduced
21
+ - **materialised** — happened; see linked WU or session for response
22
+ - **closed** — no longer applicable
23
+
24
+ ## How to add a risk
25
+
26
+ 1. Add a new row to the table with R-NNN (next available number)
27
+ 2. If the risk is large enough to warrant detail, write a `R-NNN-short-title.md` file beside this index
28
+ 3. Reference the risk from any work unit it affects
@@ -0,0 +1,47 @@
1
+ # {{TODAY}} — Session: [short description]
2
+
3
+ | Field | Value |
4
+ | --- | --- |
5
+ | Operator | [name] |
6
+ | Active WU | WU NNN — [title] |
7
+ | Duration | [approximate, e.g., "90 minutes"] |
8
+ | Outcome | [one phrase: "WU NNN advanced", "D-NNN landed", "blocked on Q-NNN", etc.] |
9
+
10
+ ## What this session was about
11
+
12
+ [One paragraph framing. Why was this session run? What was the entry-point question or task?]
13
+
14
+ ## What was done
15
+
16
+ [Chronological narrative. Reference any commits by hash or branch. Link any artefacts created or modified.]
17
+
18
+ - [bullet]
19
+ - [bullet]
20
+ - [bullet]
21
+
22
+ ## Decisions that surfaced
23
+
24
+ | ID | Title | Status |
25
+ | --- | --- | --- |
26
+ | _none_ | | |
27
+
28
+ ## Open questions raised
29
+
30
+ | ID | Question | Owner |
31
+ | --- | --- | --- |
32
+ | _none_ | | |
33
+
34
+ ## Risks identified
35
+
36
+ | ID | Risk | Severity |
37
+ | --- | --- | --- |
38
+ | _none_ | | |
39
+
40
+ ## What's next
41
+
42
+ [The concrete next action. Mirrors STATE.md "What is next". Should be specific enough that the next session's start-of-session protocol can pick it up without further context.]
43
+
44
+ ## Pointers
45
+
46
+ - [Link to the active WU]
47
+ - [Link to any decisions or open questions referenced]
@@ -0,0 +1,27 @@
1
+ # Sessions
2
+
3
+ > Chronological audit trail of every session run on this project. One entry per session, named `YYYY-MM-DD-short-description.md`. The session log is the catalogue's replay history; a fresh operator (human or agent) should be able to read the most recent entries and pick up exactly where work stopped.
4
+
5
+ ## Index
6
+
7
+ | Date | Session | Active WU | Notes |
8
+ | --- | --- | --- | --- |
9
+ | {{TODAY}} | [Adopt the catalogue scaffold](0000-00-00-template.md) | WU 001 | First session; catalogue bootstrapped |
10
+
11
+ ## How to add a session entry
12
+
13
+ 1. Copy `0000-00-00-template.md` to `YYYY-MM-DD-short-description.md` (today's date, dashes-not-spaces description)
14
+ 2. Fill in the template
15
+ 3. Add a row to the table above
16
+ 4. Link the entry from STATE.md if the session significantly shifted state
17
+
18
+ ## What a session entry must include
19
+
20
+ - What this session was about (one paragraph)
21
+ - What was done (chronological narrative)
22
+ - Decisions that surfaced (linked)
23
+ - Open questions raised (linked)
24
+ - Risks identified (linked)
25
+ - What's next (the concrete next action)
26
+
27
+ The auditor's-question test: *could a third-party auditor read this entry and answer "what happened, why, and what's next?" without contacting the team?* If yes, sufficient.