@nusoft/nuos-build-catalogue 0.8.1 → 0.10.0

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 (26) hide show
  1. package/package.json +3 -2
  2. package/templates/protocols/end-of-session.md +19 -0
  3. package/templates/protocols/persona-new.md +43 -0
  4. package/templates/protocols/start-of-session.md +19 -0
  5. package/templates/protocols/wu-new.md +52 -0
  6. package/templates/starter-kit/CLAUDE.md +73 -0
  7. package/templates/starter-kit/README.md +116 -0
  8. package/templates/starter-kit/docs/build/END-OF-SESSION.md +62 -0
  9. package/templates/starter-kit/docs/build/START-OF-SESSION.md +33 -0
  10. package/templates/starter-kit/docs/build/STATE.md +47 -0
  11. package/templates/starter-kit/docs/build/decisions/D001-template.md +38 -0
  12. package/templates/starter-kit/docs/build/decisions/_index.md +30 -0
  13. package/templates/starter-kit/docs/build/maps/01-template.md +126 -0
  14. package/templates/starter-kit/docs/build/maps/_index.md +63 -0
  15. package/templates/starter-kit/docs/build/open-questions/_index.md +26 -0
  16. package/templates/starter-kit/docs/build/personas/001-template.md +68 -0
  17. package/templates/starter-kit/docs/build/personas/_index.md +77 -0
  18. package/templates/starter-kit/docs/build/risks/_index.md +28 -0
  19. package/templates/starter-kit/docs/build/sessions/0000-00-00-template.md +47 -0
  20. package/templates/starter-kit/docs/build/sessions/_index.md +27 -0
  21. package/templates/starter-kit/docs/build/work-units/001-template.md +82 -0
  22. package/templates/starter-kit/docs/build/work-units/_index.md +34 -0
  23. package/templates/starter-kit/docs/contracts/_index.md +26 -0
  24. package/templates/starter-kit/docs/guides/_index.md +26 -0
  25. package/templates/starter-kit/docs/philosophy/_index.md +26 -0
  26. package/templates/starter-kit/methodfile.json +54 -0
@@ -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.
@@ -0,0 +1,82 @@
1
+ # Work Unit 001 — [Outcome-bounded title, e.g., "Bookshop event booking flow" or "Bootstrap the Postgres schema"]
2
+
3
+ | Field | Value |
4
+ | --- | --- |
5
+ | Status | 🟡 in flight |
6
+ | Depends on | none |
7
+ | Blocks | [WUs that cannot start until this lands] |
8
+ | Implements | [the decision or pattern this realises] |
9
+ | Owner | [name or "—"] |
10
+ | Estimated effort | [days or "small/medium/large"] |
11
+ | Repo | [where the implementation lands] |
12
+
13
+ ## Persona
14
+
15
+ [Link to the P-NNN persona this outcome serves — e.g., `[P001 — Returning bookshop customer](../personas/P001-returning-customer.md)`. For paired outcomes, link both personas. For infrastructure WUs (build, publish, hardening), write `N/A — infrastructure WU.`]
16
+
17
+ ## Trigger
18
+
19
+ [The real-world event that makes this outcome necessary. Not "the user clicks the booking button" — that is a UI interaction. The trigger is what happened *before* they opened the platform: "the customer saw an event announcement on social media and wants to reserve a place", "the SENCo received an email that a child has been placed on the SEN register". For infrastructure WUs, write `N/A — infrastructure WU.`]
20
+
21
+ ## Outcome
22
+
23
+ [One paragraph. The single sentence test: *what will be true when this is done that is not true now?* That sentence is the outcome.]
24
+
25
+ ## Walkthrough
26
+
27
+ [Numbered steps from the persona's perspective — what they do and what they see. Include failure paths via the five injection points: (1) what if the persona cannot complete this step in one sitting? (2) what if the information they need is incorrect or missing? (3) what if the system itself fails? (4) what if the persona makes a mistake? (5) what if they realise immediately afterwards they used the wrong information?
28
+
29
+ For infrastructure WUs, write `N/A — infrastructure WU.`]
30
+
31
+ 1. [Persona action; system response; including any failure handling that lives at this step]
32
+ 2. ...
33
+
34
+ ## Acceptance criteria
35
+
36
+ When this WU is `✅ merged / shipped`:
37
+
38
+ 1. [Concrete, observable, checkable criterion — phrased as an inspection that passes or fails. Each criterion must be evaluable by a person looking at the running system, not inferred from technical state.]
39
+ 2. ...
40
+
41
+ The auditor's-question test applies: *can a third-party reader read these and confirm "yes, this is shipped" by inspection alone?*
42
+
43
+ The four quality traps apply when reviewing acceptance criteria: vagueness (could this be implemented in more than one way that satisfies the wording?); technical language (does this describe implementation rather than behaviour?); happy-path-only (have failure paths been covered?); kitchen-sink (does this WU try to do more than one thing?).
44
+
45
+ ## Contracts produced
46
+
47
+ [What this WU makes available to other WUs once it lands, in domain language. Not database schemas, not API endpoints — facts about the world that the system now knows. Examples:
48
+
49
+ - "A confirmed booking record, linked to a specific customer and a specific event"
50
+ - "A verified customer account: name, email, login credentials, saved payment method"
51
+ - "A published event with capacity, price, and date"
52
+
53
+ For infrastructure WUs, list the technical artefacts: "A `@nusoft/nuwiki@0.1.4` published privately on npm with caret-range trifecta deps".]
54
+
55
+ ## Contracts consumed
56
+
57
+ [What must already exist before this WU can run. Each entry should map to another WU's `Contracts produced` field. If something this WU consumes is not produced by any WU in the plan, that is a planning gap — file it as an open question or a new WU before this one starts.]
58
+
59
+ ## Approach
60
+
61
+ [Two or three short paragraphs. Not a design doc; just enough that an LLM teammate or a fresh operator can see how the work breaks down. If "design twice" applies (any non-trivial architectural choice), produce two fundamentally different designs in the Notes section before generating implementation.]
62
+
63
+ ## What this WU does NOT do
64
+
65
+ - [Things deliberately deferred to later WUs]
66
+ - [Things that look in-scope but are not]
67
+
68
+ ## Forward-compatibility commitments
69
+
70
+ [If this WU's shape decisions affect later WUs, name them here. Future WUs depend on these surviving.]
71
+
72
+ ## Notes / log
73
+
74
+ ### {{TODAY}} — session 1
75
+ [What was attempted, what worked, what did not, what was learned, what is next.]
76
+
77
+ ## Pointers
78
+
79
+ - [Link to the decision this implements, if any]
80
+ - [Link to the persona(s) this serves]
81
+ - [Links to dependent WUs (those this consumes from, those this blocks)]
82
+ - [Links to relevant module-level contracts in `docs/contracts/`]
@@ -0,0 +1,34 @@
1
+ # Work Units
2
+
3
+ > Concrete, buildable pieces of work. Each work unit has an outcome, acceptance criteria, dependencies, and a status. Work units are the unit of progress; the catalogue's compounding value comes from accumulated WU notes.
4
+
5
+ ## Index
6
+
7
+ | WU | Title | Status | Depends on | Notes |
8
+ | --- | --- | --- | --- | --- |
9
+ | 001 | [first WU title] | 🟡 in flight | — | First work unit |
10
+
11
+ ## Status legend
12
+
13
+ - 🔵 **proposed** — written down, not yet started
14
+ - 🟡 **in flight** — actively being worked on
15
+ - 🟣 **built / awaiting review** — implementation done, review pending
16
+ - ✅ **merged / shipped** — complete and integrated
17
+ - 🔴 **blocked** — cannot proceed; see notes for blocker
18
+
19
+ ## Deferred / proposed-with-trigger work units
20
+
21
+ A work unit can be `🔵 proposed` in three flavours:
22
+
23
+ - **proposed-ready** — eligible to activate at next priority review
24
+ - **proposed-deferred-with-trigger** — committed, awaiting a checkable condition (state the condition in the WU itself)
25
+ - **proposed-blocked-on-question** — cannot activate until an open question resolves; link to the Q-NNN
26
+
27
+ The quarterly catalogue review walks each deferred WU and re-evaluates its trigger.
28
+
29
+ ## How to add a work unit
30
+
31
+ 1. Copy `001-template.md` to `NNN-short-title-with-dashes.md` (next available number)
32
+ 2. Fill in the template
33
+ 3. Add a row to the table above
34
+ 4. If the WU resolves an open question, link it; if the WU was created in response to a decision, link the decision
@@ -0,0 +1,26 @@
1
+ # Contracts
2
+
3
+ > Type-stable surfaces — what each part of {{PROJECT_NAME}} promises to its consumers. Where decisions justify *why* and philosophy frames the spirit, contracts specify *what is true at the boundary*. A contract is what an integrator (human or LLM) reads to know how to interact with this part of the system.
4
+
5
+ ## When to write a contract
6
+
7
+ Not on day one. Contracts come when stable surfaces emerge — when something has been built, tested, and is being depended on by other parts of the system or other projects.
8
+
9
+ Premature contracts ossify the wrong shape. Late contracts allow drift. The signal a contract is needed: a downstream consumer is asking *"what does X actually guarantee?"* and the answer is not in any single place.
10
+
11
+ ## Index
12
+
13
+ | Contract | Surface | Status |
14
+ | --- | --- | --- |
15
+ | _none yet_ | | |
16
+
17
+ ## Pattern
18
+
19
+ Each contract document:
20
+ - Names the surface
21
+ - Lists the type-stable promises (what shape inputs come in, what shape outputs go out, what side effects fire)
22
+ - Specifies the conformance gate (the test or check that proves a candidate implementation honours the contract)
23
+ - Lists what is *not* covered (so consumers don't depend on incidentals)
24
+ - Records the contract's version (semver if it's published)
25
+
26
+ Contracts are change-controlled. Breaking a contract requires a decision (D-NNN) and a downstream-impact note.
@@ -0,0 +1,26 @@
1
+ # Guides
2
+
3
+ > The persuasion layer. Where decisions are committed-to, contracts are typed, and philosophy is committed-architectural-spirit, **guides are written to persuade**. They explain {{PROJECT_NAME}} to investors, customers, partners, regulators, and domain experts. They are the artefact you send when you need a non-technical reader to understand and care.
4
+
5
+ ## When to write a guide
6
+
7
+ When you need to persuade somebody. Not before. A guide written without an audience and a goal is academic. A guide written *for an audience* against a known goal is the most leveraged writing you can do — it is the artefact that opens conversations, closes deals, and aligns stakeholders.
8
+
9
+ The catalogue's other layers are the source material. A guide is the curated, audience-tuned read.
10
+
11
+ ## Index
12
+
13
+ | Guide | Audience | Topic |
14
+ | --- | --- | --- |
15
+ | _none yet_ | | |
16
+
17
+ ## Pattern
18
+
19
+ Each guide:
20
+ - States the audience explicitly (one or two reader personas)
21
+ - States the goal — what should the reader do or believe after reading?
22
+ - Stays in the language of the audience (no jargon the audience doesn't already use)
23
+ - Cites the catalogue (decisions, contracts, philosophy) as evidence
24
+ - Is dated — guides go stale; the date tells the reader whether they're reading current
25
+
26
+ A guide is not eternal. When the underlying truth shifts, the guide gets revised or retired. Catalogue decisions persist; guides are seasonal.