@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.
- package/dist/cli.d.ts +13 -0
- package/dist/cli.js +472 -0
- package/dist/commands/create.d.ts +70 -0
- package/dist/commands/create.js +341 -0
- package/dist/commands/format.d.ts +19 -0
- package/dist/commands/format.js +89 -0
- package/dist/commands/handlers.d.ts +35 -0
- package/dist/commands/handlers.js +132 -0
- package/dist/commands/init.d.ts +41 -0
- package/dist/commands/init.js +289 -0
- package/dist/commands/prompt.d.ts +44 -0
- package/dist/commands/prompt.js +100 -0
- package/dist/commands/write.d.ts +39 -0
- package/dist/commands/write.js +247 -0
- package/dist/embedder/ollama.d.ts +54 -0
- package/dist/embedder/ollama.js +164 -0
- package/dist/embedder/openai.d.ts +21 -0
- package/dist/embedder/openai.js +56 -0
- package/dist/embedder/select.d.ts +9 -0
- package/dist/embedder/select.js +27 -0
- package/dist/embedder/stub.d.ts +15 -0
- package/dist/embedder/stub.js +40 -0
- package/dist/embedder/types.d.ts +21 -0
- package/dist/embedder/types.js +6 -0
- package/dist/embedder/vertex.d.ts +41 -0
- package/dist/embedder/vertex.js +94 -0
- package/dist/indexer/chunk.d.ts +20 -0
- package/dist/indexer/chunk.js +196 -0
- package/dist/indexer/crawl.d.ts +20 -0
- package/dist/indexer/crawl.js +66 -0
- package/dist/indexer/metadata.d.ts +21 -0
- package/dist/indexer/metadata.js +126 -0
- package/dist/indexer/upsert.d.ts +26 -0
- package/dist/indexer/upsert.js +152 -0
- package/dist/migrate/parsers.d.ts +17 -0
- package/dist/migrate/parsers.js +123 -0
- package/dist/migrate/run.d.ts +22 -0
- package/dist/migrate/run.js +142 -0
- package/dist/migrate/store.d.ts +20 -0
- package/dist/migrate/store.js +52 -0
- package/dist/migrate/types.d.ts +57 -0
- package/dist/migrate/types.js +13 -0
- package/dist/regenerate/check.d.ts +11 -0
- package/dist/regenerate/check.js +97 -0
- package/dist/regenerate/diff.d.ts +18 -0
- package/dist/regenerate/diff.js +38 -0
- package/dist/regenerate/types.d.ts +52 -0
- package/dist/regenerate/types.js +14 -0
- package/dist/runtime/ac-parse.d.ts +63 -0
- package/dist/runtime/ac-parse.js +196 -0
- package/dist/runtime/markdown-edit.d.ts +53 -0
- package/dist/runtime/markdown-edit.js +101 -0
- package/dist/runtime/markdown-render.d.ts +27 -0
- package/dist/runtime/markdown-render.js +209 -0
- package/dist/runtime/mis-adapter.d.ts +35 -0
- package/dist/runtime/mis-adapter.js +364 -0
- package/dist/runtime/runtime.d.ts +20 -0
- package/dist/runtime/runtime.js +39 -0
- package/dist/search/format.d.ts +6 -0
- package/dist/search/format.js +23 -0
- package/dist/search/query.d.ts +29 -0
- package/dist/search/query.js +71 -0
- package/dist/store/open.d.ts +14 -0
- package/dist/store/open.js +16 -0
- package/package.json +5 -3
- package/templates/protocols/end-of-session.md +19 -0
- package/templates/protocols/persona-new.md +43 -0
- package/templates/protocols/start-of-session.md +19 -0
- package/templates/protocols/wu-new.md +52 -0
- package/templates/starter-kit/CLAUDE.md +73 -0
- package/templates/starter-kit/README.md +116 -0
- package/templates/starter-kit/docs/build/END-OF-SESSION.md +62 -0
- package/templates/starter-kit/docs/build/START-OF-SESSION.md +33 -0
- package/templates/starter-kit/docs/build/STATE.md +47 -0
- package/templates/starter-kit/docs/build/decisions/D001-template.md +38 -0
- package/templates/starter-kit/docs/build/decisions/_index.md +30 -0
- package/templates/starter-kit/docs/build/maps/01-template.md +126 -0
- package/templates/starter-kit/docs/build/maps/_index.md +63 -0
- package/templates/starter-kit/docs/build/open-questions/_index.md +26 -0
- package/templates/starter-kit/docs/build/personas/001-template.md +68 -0
- package/templates/starter-kit/docs/build/personas/_index.md +77 -0
- package/templates/starter-kit/docs/build/risks/_index.md +28 -0
- package/templates/starter-kit/docs/build/sessions/0000-00-00-template.md +47 -0
- package/templates/starter-kit/docs/build/sessions/_index.md +27 -0
- package/templates/starter-kit/docs/build/work-units/001-template.md +82 -0
- package/templates/starter-kit/docs/build/work-units/_index.md +34 -0
- package/templates/starter-kit/docs/contracts/_index.md +26 -0
- package/templates/starter-kit/docs/guides/_index.md +26 -0
- package/templates/starter-kit/docs/philosophy/_index.md +26 -0
- 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.
|