@pareto4/pp-core 1.18.0 → 1.20.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 (194) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/agents/pp-code-fixer.md +9 -5
  3. package/agents/pp-code-reviewer.md +1 -0
  4. package/agents/pp-codebase-mapper.md +3 -0
  5. package/agents/pp-debugger.md +3 -2
  6. package/agents/pp-executor.md +16 -7
  7. package/agents/pp-integration-checker.md +1 -0
  8. package/agents/pp-phase-researcher.md +13 -1
  9. package/agents/pp-plan-checker.md +3 -0
  10. package/agents/pp-planner.md +20 -1
  11. package/agents/pp-research-synthesizer.md +1 -1
  12. package/agents/pp-ui-auditor.md +1 -0
  13. package/agents/pp-ui-researcher.md +3 -1
  14. package/agents/pp-vault-reviewer.md +2 -0
  15. package/agents/pp-verifier.md +22 -10
  16. package/commands/pp-add-tests.md +1 -1
  17. package/commands/pp-debug.md +1 -0
  18. package/commands/pp-discovery.md +3 -2
  19. package/commands/pp-init.md +4 -3
  20. package/commands/pp-quick.md +3 -0
  21. package/commands/pp-review-backlog.md +2 -1
  22. package/gemini-extension.json +1 -1
  23. package/package.json +6 -3
  24. package/pareto-skills/_shared/pp-claude-md-protocol.md +1 -1
  25. package/pareto-skills/pp-project-setup/SKILL.md +18 -343
  26. package/pp-core/bin/lib/capability-registry.cjs +3 -3
  27. package/pp-core/bin/lib/check-command-router.cjs +60 -20
  28. package/pp-core/bin/lib/commands.cjs +79 -4
  29. package/pp-core/bin/lib/compose-bindings.cjs +97 -14
  30. package/pp-core/bin/lib/discovery-access.cjs +276 -0
  31. package/pp-core/bin/lib/discovery-charter.cjs +664 -0
  32. package/pp-core/bin/lib/discovery-deviations.cjs +264 -0
  33. package/pp-core/bin/lib/discovery-entities.cjs +323 -0
  34. package/pp-core/bin/lib/discovery-for-phase.cjs +628 -0
  35. package/pp-core/bin/lib/discovery-integrations.cjs +286 -0
  36. package/pp-core/bin/lib/discovery-migration.cjs +246 -0
  37. package/pp-core/bin/lib/discovery-phases.cjs +233 -0
  38. package/pp-core/bin/lib/discovery-processes.cjs +355 -0
  39. package/pp-core/bin/lib/discovery-research-track.cjs +5 -4
  40. package/pp-core/bin/lib/discovery-rollup.cjs +12 -8
  41. package/pp-core/bin/lib/discovery-rules.cjs +216 -0
  42. package/pp-core/bin/lib/discovery-screens.cjs +21 -3
  43. package/pp-core/bin/lib/discovery-session-check.cjs +264 -0
  44. package/pp-core/bin/lib/discovery-stories.cjs +273 -0
  45. package/pp-core/bin/lib/discovery-sweep.cjs +13 -4
  46. package/pp-core/bin/lib/discovery-table.cjs +55 -0
  47. package/pp-core/bin/lib/discovery-vault-check.cjs +37 -3
  48. package/pp-core/bin/lib/init-contract.cjs +48 -7
  49. package/pp-core/bin/lib/io.cjs +22 -0
  50. package/pp-core/bin/lib/vault-coordinates.cjs +1 -1
  51. package/pp-core/bin/lib/vault-index.cjs +18 -5
  52. package/pp-core/bin/lib/vault-standards-review.cjs +50 -2
  53. package/pp-core/bin/lib/vault-update.cjs +4 -0
  54. package/pp-core/bin/lib/vault.cjs +2 -2
  55. package/pp-core/bin/pp-tools.cjs +153 -5
  56. package/pp-core/org-profile.json +1 -1
  57. package/pp-core/references/autonomous-best-effort.md +3 -2
  58. package/pp-core/references/autonomous-lifecycle.md +1 -0
  59. package/pp-core/references/autonomous-smart-discuss.md +5 -1
  60. package/pp-core/references/discovery-access.md +112 -0
  61. package/pp-core/references/discovery-build-consumption.md +256 -0
  62. package/pp-core/references/discovery-charter.md +127 -0
  63. package/pp-core/references/discovery-data-model.md +145 -0
  64. package/pp-core/references/discovery-id-conventions.md +77 -8
  65. package/pp-core/references/discovery-integrations.md +151 -0
  66. package/pp-core/references/discovery-processes.md +190 -0
  67. package/pp-core/references/discovery-rebaseline.md +2 -2
  68. package/pp-core/references/discovery-research-track.md +5 -6
  69. package/pp-core/references/discovery-session-output.md +70 -0
  70. package/pp-core/references/discovery-standards.md +107 -0
  71. package/pp-core/references/discovery-traceability.md +2 -2
  72. package/pp-core/references/execute-mvp-tdd.md +3 -3
  73. package/pp-core/references/git-integration.md +57 -33
  74. package/pp-core/references/git-planning-commit.md +31 -9
  75. package/pp-core/references/phase-argument-parsing.md +1 -0
  76. package/pp-core/references/planner-discovery-extract.md +35 -0
  77. package/pp-core/references/planner-gap-closure.md +1 -0
  78. package/pp-core/references/planner-revision.md +3 -1
  79. package/pp-core/references/planner-tdd.md +4 -4
  80. package/pp-core/references/planning-config.md +3 -3
  81. package/pp-core/references/shell-portability.md +28 -0
  82. package/pp-core/references/tdd.md +20 -16
  83. package/pp-core/references/verifier-discovery-conformance.md +36 -0
  84. package/pp-core/references/worktree-path-safety.md +1 -0
  85. package/pp-core/templates/milestone.md +5 -5
  86. package/pp-core/templates/project-charter.md +161 -100
  87. package/pp-core/templates/project.md +3 -3
  88. package/pp-core/templates/requirements.md +18 -0
  89. package/pp-core/templates/verification-report.md +16 -0
  90. package/pp-core/workflows/add-backlog.md +1 -1
  91. package/pp-core/workflows/add-tests.md +5 -2
  92. package/pp-core/workflows/add-todo.md +3 -1
  93. package/pp-core/workflows/ai-integration-phase.md +2 -1
  94. package/pp-core/workflows/audit-fix.md +4 -3
  95. package/pp-core/workflows/audit-milestone.md +1 -0
  96. package/pp-core/workflows/autonomous.md +6 -0
  97. package/pp-core/workflows/check-todos.md +2 -1
  98. package/pp-core/workflows/cleanup.md +3 -1
  99. package/pp-core/workflows/code-review-fix.md +12 -5
  100. package/pp-core/workflows/code-review.md +15 -1
  101. package/pp-core/workflows/complete-milestone.md +13 -3
  102. package/pp-core/workflows/debug.md +2 -0
  103. package/pp-core/workflows/diagnose-issues.md +1 -1
  104. package/pp-core/workflows/discovery-sprint/charter.md +114 -0
  105. package/pp-core/workflows/discovery-sprint/prefill.md +1 -1
  106. package/pp-core/workflows/discovery-sprint/prototype.md +4 -4
  107. package/pp-core/workflows/discovery-sprint/session-13-gates.md +11 -1
  108. package/pp-core/workflows/discovery-sprint/sessions/01-kick-off.md +54 -7
  109. package/pp-core/workflows/discovery-sprint/sessions/02-as-is.md +31 -7
  110. package/pp-core/workflows/discovery-sprint/sessions/03-to-be.md +64 -37
  111. package/pp-core/workflows/discovery-sprint/sessions/04-ux-design.md +12 -3
  112. package/pp-core/workflows/discovery-sprint/sessions/05-architecture.md +45 -22
  113. package/pp-core/workflows/discovery-sprint/sessions/06-security.md +30 -15
  114. package/pp-core/workflows/discovery-sprint/sessions/07-identity.md +43 -25
  115. package/pp-core/workflows/discovery-sprint/sessions/08-integration.md +63 -24
  116. package/pp-core/workflows/discovery-sprint/sessions/09-qa.md +28 -13
  117. package/pp-core/workflows/discovery-sprint/sessions/10-infrastructure.md +35 -16
  118. package/pp-core/workflows/discovery-sprint/sessions/11-roadmap.md +32 -8
  119. package/pp-core/workflows/discovery-sprint/sessions/12-delivery-model.md +21 -18
  120. package/pp-core/workflows/discovery-sprint/sessions/13-wrap-up.md +29 -12
  121. package/pp-core/workflows/discovery-sprint/vault-context.md +14 -3
  122. package/pp-core/workflows/discovery-sprint.md +23 -23
  123. package/pp-core/workflows/discovery-to-build/steps/architecture-deliverables.md +81 -29
  124. package/pp-core/workflows/discovery-to-build/steps/{screen-inventory-gate.md → handoff-gates.md} +111 -3
  125. package/pp-core/workflows/discovery-to-build/templates/discovery-references.md +12 -9
  126. package/pp-core/workflows/discovery-to-build/templates/pp-handoff.md +27 -26
  127. package/pp-core/workflows/discovery-to-build.md +70 -34
  128. package/pp-core/workflows/discuss-phase/discovery.md +83 -0
  129. package/pp-core/workflows/discuss-phase/templates/context.md +4 -0
  130. package/pp-core/workflows/discuss-phase-assumptions.md +5 -3
  131. package/pp-core/workflows/discuss-phase.md +18 -10
  132. package/pp-core/workflows/docs-update.md +1 -0
  133. package/pp-core/workflows/eval-review.md +2 -1
  134. package/pp-core/workflows/execute-phase/steps/check-query-gate.md +7 -6
  135. package/pp-core/workflows/execute-phase/steps/cross-ai-delegation.md +1 -0
  136. package/pp-core/workflows/execute-phase/steps/per-plan-worktree-gate.md +1 -0
  137. package/pp-core/workflows/execute-phase/steps/vault-fetch.md +12 -0
  138. package/pp-core/workflows/execute-phase.md +19 -7
  139. package/pp-core/workflows/execute-plan.md +18 -7
  140. package/pp-core/workflows/explore.md +1 -1
  141. package/pp-core/workflows/forensics.md +4 -2
  142. package/pp-core/workflows/health.md +1 -0
  143. package/pp-core/workflows/import.md +2 -1
  144. package/pp-core/workflows/ingest-docs.md +1 -0
  145. package/pp-core/workflows/init/steps/client-context-capture.md +1 -0
  146. package/pp-core/workflows/init/steps/github-provisioning.md +145 -0
  147. package/pp-core/workflows/init/steps/gitlab-provisioning.md +18 -4
  148. package/pp-core/workflows/init/steps/reachability-outcome.md +3 -1
  149. package/pp-core/workflows/init.md +56 -66
  150. package/pp-core/workflows/map-codebase.md +5 -1
  151. package/pp-core/workflows/milestone-summary.md +2 -1
  152. package/pp-core/workflows/mvp-phase.md +1 -0
  153. package/pp-core/workflows/new-milestone.md +9 -5
  154. package/pp-core/workflows/new-project.md +12 -11
  155. package/pp-core/workflows/new-workspace.md +1 -0
  156. package/pp-core/workflows/next.md +2 -1
  157. package/pp-core/workflows/pause-work.md +6 -4
  158. package/pp-core/workflows/plan-milestone-gaps.md +3 -1
  159. package/pp-core/workflows/plan-phase/steps/chunked-planning.md +1 -1
  160. package/pp-core/workflows/plan-phase/steps/discovery-extract.md +41 -0
  161. package/pp-core/workflows/plan-phase.md +36 -16
  162. package/pp-core/workflows/plan-review-convergence.md +2 -0
  163. package/pp-core/workflows/plant-seed.md +4 -2
  164. package/pp-core/workflows/pr-branch.md +2 -0
  165. package/pp-core/workflows/progress.md +5 -0
  166. package/pp-core/workflows/quick.md +11 -4
  167. package/pp-core/workflows/reapply-patches.md +3 -0
  168. package/pp-core/workflows/remove-phase.md +1 -1
  169. package/pp-core/workflows/resume-project.md +3 -0
  170. package/pp-core/workflows/review.md +7 -1
  171. package/pp-core/workflows/secure-phase.md +2 -1
  172. package/pp-core/workflows/session-report.md +1 -0
  173. package/pp-core/workflows/ship.md +8 -1
  174. package/pp-core/workflows/sketch-wrap-up.md +1 -1
  175. package/pp-core/workflows/sketch.md +3 -2
  176. package/pp-core/workflows/spec-phase.md +2 -1
  177. package/pp-core/workflows/spike-wrap-up.md +1 -1
  178. package/pp-core/workflows/spike.md +4 -3
  179. package/pp-core/workflows/sync-skills.md +5 -2
  180. package/pp-core/workflows/thread.md +3 -2
  181. package/pp-core/workflows/transition.md +6 -0
  182. package/pp-core/workflows/ui-phase.md +3 -1
  183. package/pp-core/workflows/ui-review.md +2 -1
  184. package/pp-core/workflows/ultraplan-phase.md +1 -0
  185. package/pp-core/workflows/undo.md +14 -10
  186. package/pp-core/workflows/update.md +5 -0
  187. package/pp-core/workflows/validate-phase.md +6 -3
  188. package/pp-core/workflows/vault-review.md +7 -1
  189. package/pp-core/workflows/vault-write-back.md +5 -0
  190. package/pp-core/workflows/verify-phase.md +5 -0
  191. package/pp-core/workflows/verify-work.md +8 -1
  192. package/scripts/prompt-injection-scan.sh +1 -1
  193. package/scripts/sync-runtime-launcher.cjs +115 -5
  194. package/pp-core/workflows/discovery-sprint/templates/context-template.md +0 -266
@@ -15,13 +15,16 @@
15
15
 
16
16
  ## What this step produces
17
17
 
18
- Two deliverables, both written under the client project's `docs/` tree —
18
+ Three deliverables, all written under the client project's `docs/` tree —
19
19
  **never** under `.planning/`, which stays process-state only:
20
20
 
21
21
  1. `docs/architecture/architecture.md` — one arc42-lite document with four
22
22
  sections: Introduction & Goals, Context, Containers, Data Model.
23
23
  2. `docs/architecture/adr/NNNN-title.md` — one file per row of Session 5's
24
24
  Architecture Decision Records table.
25
+ 3. `docs/processes/MP-nn.md` — one file per main process of
26
+ `.planning/discovery/_processes.md`: its swimlane and its step matrix,
27
+ verbatim (Discovery Sprint improvement plan, Batch 2).
25
28
 
26
29
  ## Source of truth
27
30
 
@@ -31,12 +34,18 @@ captured elsewhere in the synthesis:
31
34
 
32
35
  - **Introduction & Goals** — `.planning/PROJECT.md`'s core problem statement
33
36
  (from Session 1) plus Session 5's stated architecture goals/constraints.
34
- - **Context (C4Context)** — Session 5's Integration Points Map plus Session 8
35
- (external systems, direction, protocol) for `System_Ext`/`Rel` actors.
37
+ - **Context (C4Context)** — `.planning/discovery/_integrations.md` § Interfaces
38
+ (one `System_Ext` per `IF-` row, `Rel` carrying `Direction` and `Protocol` —
39
+ `references/discovery-integrations.md`); an engagement without that file falls
40
+ back to Session 5's Integration Points Map plus Session 8's Integration Design
41
+ Register.
36
42
  - **Containers (C4Container)** — Session 5's Component Inventory and
37
43
  Technology Stack table for `Container`/`ContainerDb` nodes.
38
- - **Data Model (erDiagram)** — Session 5's Domain Model / Entity Register
39
- table (D-16: entity, key attributes, relationships, owner module).
44
+ - **Data Model (erDiagram)** — `.planning/discovery/_entities.md` (entities
45
+ with attributes, relationships with cardinality, lifecycles —
46
+ `references/discovery-data-model.md`); an engagement without that file
47
+ falls back to Session 5's Domain Model / Entity Register table (D-16).
48
+ - **Processes** — `.planning/discovery/_processes.md` § Flows and § Steps.
40
49
  - **ADRs** — Session 5's Architecture Decision Records table
41
50
  (`ADR ID | Title | Context | Decision | Consequences | Status`).
42
51
 
@@ -47,15 +56,19 @@ Never invent facts that are not present in the session content. If a Session
47
56
  ## Path safety (extends T-04-03)
48
57
 
49
58
  The same discipline `discovery-sprint.md` already applies to
50
- `.planning/discovery/` writes applies here to `docs/architecture/` writes:
59
+ `.planning/discovery/` writes applies here to `docs/architecture/` and
60
+ `docs/processes/` writes:
51
61
 
52
- - All write targets MUST be relative paths under `docs/architecture/`
53
- (`docs/architecture/architecture.md`, `docs/architecture/adr/NNNN-title.md`).
62
+ - All write targets MUST be relative paths under `docs/architecture/` or
63
+ `docs/processes/` (`docs/architecture/architecture.md`,
64
+ `docs/architecture/adr/NNNN-title.md`, `docs/processes/MP-nn.md`).
54
65
  - Never write to an absolute path.
55
66
  - Never write to a path containing `..`.
56
- - The only read target for this step is `.planning/discovery/session-05.md`
67
+ - The only read targets for this step are `.planning/discovery/session-05.md`,
68
+ `.planning/discovery/_entities.md`, `.planning/discovery/_processes.md` and
69
+ `.planning/discovery/_integrations.md`
57
70
  (plus the already-loaded synthesis context) — never read or write outside
58
- `docs/architecture/` and `.planning/discovery/`.
71
+ `docs/architecture/`, `docs/processes/` and `.planning/discovery/`.
59
72
 
60
73
  ## Idempotent overwrite handling
61
74
 
@@ -96,12 +109,13 @@ that were not stated during Discovery.
96
109
  ### Section 2: Context
97
110
 
98
111
  One paragraph of prose describing the system's boundary and the actors that
99
- interact with it, followed by a Mermaid `C4Context` block built from Session
100
- 5's Integration Points Map and Session 8's Integrations table. Map each
101
- external system in Session 8 to a `System_Ext` node, the product itself to a
102
- `System` node, and each user-facing actor from Session 5/Session 1 to a
103
- `Person` node. Connect them with `Rel` lines carrying the protocol from
104
- Session 8's table where known.
112
+ interact with it, followed by a Mermaid `C4Context` block built from
113
+ `.planning/discovery/_integrations.md` § Interfaces (falling back to Session 5's
114
+ Integration Points Map and Session 8's Integration Design Register when the
115
+ register does not exist). Map each `IF-` row to a `System_Ext` node, the product
116
+ itself to a `System` node, and each user-facing actor from Session 5/Session 1 to
117
+ a `Person` node. Connect them with `Rel` lines carrying the row's `Protocol`
118
+ where known, pointing in its `Direction`.
105
119
 
106
120
  Example shape (fill every placeholder from actual captured facts — never
107
121
  leave a literal `[System Name]` placeholder in the generated output):
@@ -138,16 +152,33 @@ C4Container
138
152
  ### Section 4: Data Model
139
153
 
140
154
  One paragraph of prose summarizing the domain model, followed by a Mermaid
141
- `erDiagram` block built directly from Session 5's Domain Model / Entity
142
- Register table (D-16). Emit one entity per register row and one relationship
143
- line per captured relationship; use the register's stated cardinality where
144
- given, otherwise default to the most conservative reading (`||--o{`) and
145
- note the assumption in prose.
155
+ `erDiagram` block built directly from `.planning/discovery/_entities.md`:
156
+ one entity block per `## Entities` row, holding its `## Attributes` rows as
157
+ `type name` lines (a `PK` comment on the identifier), and one relationship
158
+ line per `## Relationships` row with the **cardinality copied verbatim**
159
+ (unescape the table's `\|` to `|`). **There is no default cardinality.** A
160
+ relationship the artifact does not state is not drawn; `entity-check` has
161
+ already refused a malformed one, so every line here is one Discovery
162
+ recorded.
163
+
164
+ When `_entities.md` does not exist (an engagement that predates it), build the
165
+ block from Session 5's Domain Model / Entity Register table (D-16) under the
166
+ same rule: a relationship whose cardinality the register does not state is
167
+ listed in prose as `[not captured in Discovery]`, never drawn with a guessed
168
+ cardinality.
146
169
 
147
170
  Example shape (fill every placeholder from actual captured facts):
148
171
 
149
172
  ```mermaid
150
173
  erDiagram
174
+ ORDER {
175
+ guid id PK
176
+ string reference
177
+ }
178
+ LINE_ITEM {
179
+ guid id PK
180
+ int quantity
181
+ }
151
182
  ORDER ||--|{ LINE_ITEM : contains
152
183
  CUSTOMER ||--o{ ORDER : places
153
184
  ```
@@ -222,27 +253,48 @@ captured), skip `docs/architecture/adr/` entirely rather than generating
222
253
  empty placeholder files, and note the gap in `architecture.md`'s
223
254
  Introduction & Goals section.
224
255
 
256
+ ## Generating `docs/processes/MP-nn.md`
257
+
258
+ One file per `## To-be` row of `.planning/discovery/_processes.md`, named by
259
+ its ID (`docs/processes/MP-01.md`), holding in this order: a `# MP-nn — <Main
260
+ process>` title; one line naming the as-is processes it replaces (`Replaces:
261
+ PRC-02, PRC-03` or `Replaces: new`), the trigger, the end state and the
262
+ primary actor from the To-be row; the swimlane `mermaid` block from § Flows,
263
+ verbatim; the step matrix from § Steps, verbatim, with its `Exception` and
264
+ `Requirements` columns. Nothing is summarised or re-drawn: the file is the
265
+ artifact's rows, exported where the client can read them. Skip the whole
266
+ section when `_processes.md` does not exist; a main process without a flow or
267
+ a matrix has already failed `process-check` at the handoff gate.
268
+
269
+ Idempotency: a `docs/processes/MP-nn.md` that already exists is overwritten
270
+ only after the same confirmation the architecture document asks for above —
271
+ the file is a rendering of the artifact, so the artifact is the thing to edit.
272
+
225
273
  ## Completing the step
226
274
 
227
- 1. Create `docs/architecture/` and `docs/architecture/adr/` directories as
228
- needed (they do not exist in a fresh client project).
275
+ 1. Create `docs/architecture/`, `docs/architecture/adr/` and
276
+ `docs/processes/` directories as needed (they do not exist in a fresh
277
+ client project).
229
278
  2. Write `docs/architecture/architecture.md` per the section instructions
230
279
  above, applying the idempotent replace-or-append rule.
231
280
  3. Write one `docs/architecture/adr/NNNN-title.md` per Session 5 ADR row,
232
- skipping any that already exist (idempotent).
281
+ skipping any that already exist (idempotent), and one
282
+ `docs/processes/MP-nn.md` per main process.
233
283
  4. Commit the generated files. This step is the SOLE committer of
234
- `docs/architecture/` — `discovery-to-build.md` Step 5h does not commit
235
- these files itself, so this block inlines the canonical `pp_run`
236
- resolver unconditionally, exactly as every other workflow file does.
237
- The resolver is idempotent, so redefining `pp_run` when a caller has
284
+ `docs/architecture/` and `docs/processes/` — `discovery-to-build.md` Step
285
+ 5h does not commit these files itself, so this block inlines the canonical
286
+ `pp_run` resolver unconditionally, exactly as every other workflow file
287
+ does. The resolver is idempotent, so redefining `pp_run` when a caller has
238
288
  already defined it is harmless:
239
289
 
240
290
  ```bash
241
291
 
242
292
  _PP_SHIM_NAME="pp-tools.cjs"; _pp_root() { ( for _v in $(env | sed -n 's/^\(GIT_[A-Za-z0-9_]*\)=.*/\1/p'); do unset "$_v"; done; _c=$(git rev-parse --git-common-dir 2>/dev/null); if [ "${_c##*/}" = .git ] && cd "$_c/.." 2>/dev/null; then pwd -P; else git rev-parse --show-toplevel 2>/dev/null || pwd; fi ); }; pp_run() { case "$PP_TOOLS" in *.cjs) node "$PP_TOOLS" "$@";; *) "$PP_TOOLS" "$@";; esac; }; _PP_RUNTIME_ROOT="${RUNTIME_DIR:-$(_pp_root)}"; PP_TOOLS="${_PP_RUNTIME_ROOT}/pp-core/bin/${_PP_SHIM_NAME}"; if [ -f "$PP_TOOLS" ]; then :; elif [ -f "${_PP_RUNTIME_ROOT}/.claude/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${_PP_RUNTIME_ROOT}/.claude/pp-core/bin/${_PP_SHIM_NAME}"; elif [ -f "${_PP_RUNTIME_ROOT}/.codex/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${_PP_RUNTIME_ROOT}/.codex/pp-core/bin/${_PP_SHIM_NAME}"; elif [ -f "$HOME/.claude/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="$HOME/.claude/pp-core/bin/${_PP_SHIM_NAME}"; elif [ -f "${HERMES_HOME:-$HOME/.hermes}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${HERMES_HOME:-$HOME/.hermes}/pp-core/bin/${_PP_SHIM_NAME}"; elif [ -f "${CURSOR_CONFIG_DIR:-$HOME/.cursor}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${CURSOR_CONFIG_DIR:-$HOME/.cursor}/pp-core/bin/${_PP_SHIM_NAME}"; elif [ -f "${CODEX_HOME:-$HOME/.codex}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${CODEX_HOME:-$HOME/.codex}/pp-core/bin/${_PP_SHIM_NAME}"; elif [ -f "${GEMINI_CONFIG_DIR:-$HOME/.gemini}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${GEMINI_CONFIG_DIR:-$HOME/.gemini}/pp-core/bin/${_PP_SHIM_NAME}"; elif [ -f "${COPILOT_CONFIG_DIR:-$HOME/.copilot}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${COPILOT_CONFIG_DIR:-$HOME/.copilot}/pp-core/bin/${_PP_SHIM_NAME}"; elif [ -f "${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/pp-core/bin/${_PP_SHIM_NAME}"; elif [ -f "${AUGMENT_CONFIG_DIR:-$HOME/.augment}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${AUGMENT_CONFIG_DIR:-$HOME/.augment}/pp-core/bin/${_PP_SHIM_NAME}"; elif [ -f "${TRAE_CONFIG_DIR:-$HOME/.trae}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${TRAE_CONFIG_DIR:-$HOME/.trae}/pp-core/bin/${_PP_SHIM_NAME}"; elif [ -f "${QWEN_CONFIG_DIR:-$HOME/.qwen}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${QWEN_CONFIG_DIR:-$HOME/.qwen}/pp-core/bin/${_PP_SHIM_NAME}"; elif [ -f "${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/pp-core/bin/${_PP_SHIM_NAME}"; elif [ -f "${CLINE_CONFIG_DIR:-$HOME/.cline}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${CLINE_CONFIG_DIR:-$HOME/.cline}/pp-core/bin/${_PP_SHIM_NAME}"; elif [ -f "${GROK_AGENTS_HOME:-$HOME/.agents}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${GROK_AGENTS_HOME:-$HOME/.agents}/pp-core/bin/${_PP_SHIM_NAME}"; elif [ -f "${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/pp-core/bin/${_PP_SHIM_NAME}"; elif [ -f "${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/pp-core/bin/${_PP_SHIM_NAME}"; elif [ -f "${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/pp-core/bin/${_PP_SHIM_NAME}"; elif command -v pp-tools >/dev/null 2>&1; then PP_TOOLS="$(command -v pp-tools)"; else echo "ERROR: pp-tools.cjs not found at $PP_TOOLS and pp-tools is not on PATH. Run: npx -y @pareto4/pp-core@latest --claude --local" >&2; exit 1; fi; if [ -n "${CLAUDE_ENV_FILE:-}" ] && [ -n "${PP_TOOLS:-}" ]; then printf "export PATH='%s':\"\$PATH\"\n" "${PP_TOOLS%/*}" >> "$CLAUDE_ENV_FILE" 2>/dev/null || true; fi
293
+ [ -z "${ZSH_VERSION:-}" ] || emulate -R sh
243
294
  FILES="docs/architecture/architecture.md"
244
295
  ls docs/architecture/adr/*.md >/dev/null 2>&1 && FILES="$FILES docs/architecture/adr/*.md"
245
- pp_run commit "docs: generate architect-grade handoff (arc42-lite architecture + ADRs)" --files $FILES
296
+ ls docs/processes/*.md >/dev/null 2>&1 && FILES="$FILES docs/processes/*.md"
297
+ pp_run commit "docs: generate architect-grade handoff (arc42-lite architecture, ADRs, processes)" --files $FILES
246
298
  ```
247
299
 
248
300
  5. Return control to `discovery-to-build.md`'s Step 5h caller — this step
@@ -3,11 +3,13 @@
3
3
  > **Lazily-loaded.** Read this file from `pp-core/workflows/discovery-to-build.md` at the start of
4
4
  > Step 2, before the completion check. It is not `@`-imported. Run the gates in order; a stop in any
5
5
  > of them ends the handoff. They are the only hard blocks in the workflow — every other check in
6
- > Step 2 is a confirmation prompt.
6
+ > Step 2 is a confirmation prompt. Four gates: the screen-inventory contract, the element sweep,
7
+ > the artifact gates (data model, processes, rules, stories, phase plan, roles, integrations,
8
+ > migration, deviations) and the signed charter.
7
9
 
8
10
  **Screen-inventory contract gate (D-53)**
9
11
 
10
- This is the one gate in this workflow that hard-blocks; every other check in Step 2 is a
12
+ This gate hard-blocks; every other check in Step 2 is a
11
13
  confirmation prompt, deliberately. A percentage-based visual gate over a curated list cannot
12
14
  detect an omission — a surface dropped from the list is dropped from the denominator too — and
13
15
  this handoff is the last moment such an omission is still free to fix.
@@ -62,9 +64,115 @@ receives screens with fields, columns and actions that no requirement or decisio
62
64
 
63
65
  The check ran in the first fence above.
64
66
 
65
- **If `SWEEP_STATUS` is 0:** The gates pass. Return to Step 2 of `discovery-to-build.md`.
67
+ **If `SWEEP_STATUS` is 0:** Continue with the artifact gates below.
68
+
69
+ **Artifact gates (data model, processes, rules, stories, phase plan, roles, integrations, migration, deviations)**
70
+
71
+ The build's planner reads `_entities.md`, `_processes.md`, `_rules.md`, `_stories.md`, `_roles.md`,
72
+ `_integrations.md` and `_migration.md` by requirement ID, Step 5f copies `_phases.md` into ROADMAP.md
73
+ verbatim, and `pp-vault-review` reads `_deviations.md` for the deviations on file. A pending `—` cell,
74
+ an uncited step, interface or migration row, an MVP requirement with no story or no phase, or a
75
+ hard-to-reverse deviation nobody has approved at this point is a fact the build would have to invent,
76
+ so the same checks that only report at Sessions 8, 11 and 13 hard-block here with their strict flags.
77
+
78
+ ```bash
79
+ pp_run query discovery.entity-check --require-complete
80
+ ENTITY_STATUS=$?
81
+ echo "ENTITY_STATUS=$ENTITY_STATUS"
82
+ pp_run query discovery.process-check --require-cited
83
+ PROCESS_STATUS=$?
84
+ echo "PROCESS_STATUS=$PROCESS_STATUS"
85
+ pp_run query discovery.rules-check
86
+ RULES_STATUS=$?
87
+ echo "RULES_STATUS=$RULES_STATUS"
88
+ pp_run query discovery.stories-check
89
+ STORIES_STATUS=$?
90
+ echo "STORIES_STATUS=$STORIES_STATUS"
91
+ pp_run query discovery.phases-check
92
+ PHASES_STATUS=$?
93
+ echo "PHASES_STATUS=$PHASES_STATUS"
94
+ pp_run query discovery.roles-check
95
+ ROLES_STATUS=$?
96
+ echo "ROLES_STATUS=$ROLES_STATUS"
97
+ pp_run query discovery.integrations-check --require-cited
98
+ INTEGRATIONS_STATUS=$?
99
+ echo "INTEGRATIONS_STATUS=$INTEGRATIONS_STATUS"
100
+ pp_run query discovery.migration-check --require-cited
101
+ MIGRATION_STATUS=$?
102
+ echo "MIGRATION_STATUS=$MIGRATION_STATUS"
103
+ pp_run query discovery.deviations-check --require-approved
104
+ DEVIATIONS_STATUS=$?
105
+ echo "DEVIATIONS_STATUS=$DEVIATIONS_STATUS"
106
+ pp_run query discovery.session-check --all
107
+ SESSION_STATUS=$?
108
+ echo "SESSION_STATUS=$SESSION_STATUS"
109
+ ```
110
+
111
+ **If all ten are 0:** Continue with the charter gate below. An artifact that does not exist exits
112
+ 0 by itself (an engagement that predates it), so every pre-existing engagement is unaffected.
113
+
114
+ **If any is non-zero:** Stop with no option to proceed. Report the fault list the check printed,
115
+ verbatim — `incomplete_cell` and `attributes_missing` mean Session 5 or 6 did not finish the data
116
+ model; `uncited_step` means Step 5D did not back-fill a step; `mvp_requirement_without_story` means
117
+ Step 5E skipped a requirement; `mvp_requirement_unplanned` means Session 11's Closing Step left a
118
+ requirement out of the Phase Plan; `uncited_interface`, `step_integration_unlinked` and
119
+ `uncited_migration` mean Session 8 did not finish `_integrations.md` or `_migration.md`;
120
+ `hard_deviation_unapproved` means a hard-to-reverse deviation still waits for its architect — get the
121
+ signature and set the row `Approved` with its decision, or set it `Rejected` and rework;
122
+ `empty_section` and `missing_section` mean a session closed without its Notes Template output — fill
123
+ the named section in that session file, or write `None identified in Discovery.` under its title
124
+ (`references/discovery-session-output.md`); anything else
125
+ is a malformed artifact (vocabularies in `references/discovery-data-model.md`,
126
+ `references/discovery-processes.md`, `references/discovery-build-consumption.md`,
127
+ `references/discovery-access.md`, `references/discovery-integrations.md` and
128
+ `references/discovery-standards.md`). Fix the artifact, re-run its check, then re-run
129
+ `/pp-discovery-to-build`. Neither `--skip-validation` nor `--unsigned` covers these gates.
66
130
 
67
131
  **If `SWEEP_STATUS` is non-zero:** Stop with no option to proceed. Report the fault list the check
68
132
  printed, verbatim, and tell the user to finish the sweep with `/pp-discovery prototype` Step 8, then
69
133
  re-run `/pp-discovery-to-build`. `--skip-validation` does not cover this gate. Without a prototype
70
134
  the check exits 0 by itself.
135
+
136
+ **Signed-charter gate**
137
+
138
+ The Project Charter (`docs/discovery/PROJECT-CHARTER.md`) is what the sponsor signed. A build that
139
+ starts on a `Draft`, a `For sign-off` or a `Rejected` charter builds something nobody agreed to, so
140
+ the handoff requires `Signed` or `Signed with conditions`. Two checks, run separately so a malformed
141
+ charter and an unsigned one are told apart: the structural check never yields to a flag; the signature
142
+ requirement yields to `--unsigned`, which records the gap instead of waiting.
143
+
144
+ ```bash
145
+ if [ -f docs/discovery/PROJECT-CHARTER.md ]; then
146
+ pp_run query discovery.charter-check
147
+ CHARTER_STRUCT=$?
148
+ pp_run query discovery.charter-check --require-signed >/dev/null 2>&1
149
+ CHARTER_SIGNED=$?
150
+ CHARTER_STATE=$(sed -n 's/^status: *//p' docs/discovery/PROJECT-CHARTER.md | head -1)
151
+ else
152
+ CHARTER_STRUCT=absent
153
+ CHARTER_SIGNED=absent
154
+ CHARTER_STATE=none
155
+ fi
156
+ echo "CHARTER_STRUCT=$CHARTER_STRUCT"
157
+ echo "CHARTER_SIGNED=$CHARTER_SIGNED"
158
+ echo "CHARTER_STATE=$CHARTER_STATE"
159
+ ```
160
+
161
+ **If `CHARTER_STRUCT` is 0 and `CHARTER_SIGNED` is 0:** The gates pass. Return to Step 2 of
162
+ `discovery-to-build.md`.
163
+
164
+ **If `CHARTER_STRUCT` is a non-zero number:** Stop with no option to proceed. Report the fault list the
165
+ check printed, verbatim: the charter has structural faults (a section missing, an ID nothing minted, a
166
+ Go / No-Go table that differs from Session 13's, a must-resolve item not listed as a condition — the
167
+ vocabulary is `references/discovery-charter.md`). Neither `--skip-validation` nor `--unsigned` covers
168
+ this arm: a malformed charter is not an unsigned one. Fix it with `/pp-discovery charter`, then re-run.
169
+
170
+ **If `CHARTER_STRUCT` is 0 and `CHARTER_SIGNED` is non-zero, or both are `absent`:**
171
+
172
+ - **Without `--unsigned`:** Stop with no option to proceed. Say which it is — `status: {CHARTER_STATE}`
173
+ or no charter at all — and that `/pp-discovery charter` records the signatures (`/pp-discovery 13`
174
+ drafts the charter when none exists). Re-run `/pp-discovery-to-build` once the status reads `Signed`
175
+ or `Signed with conditions`.
176
+ - **With `--unsigned`:** Continue, and carry `CHARTER_STATE` forward: Step 5d adds the Key Decisions
177
+ row that records the build started on an unsigned charter, Step 5g lists it under Blockers/Concerns,
178
+ and Step 8 prints it. The flag records a gap; it does not make the charter signed.
@@ -15,13 +15,15 @@ Discovery outputs are the source of truth for business decisions and requirement
15
15
 
16
16
  | Topic | File | Use When |
17
17
  |-------|------|----------|
18
- | All decisions (accumulated) | `.planning/discovery/_context.md` | Understanding why a decision was made |
18
+ | All decisions | the **Key Decisions** table of each `.planning/discovery/session-NN.md` (`D-<ss>-<n>`) | Understanding why a decision was made |
19
19
  | pp-core handoff synthesis | `.planning/discovery/_pp-handoff.md` | Complete structured summary of all sessions |
20
20
  | Business requirements | `.planning/discovery/session-03.md` | Detailed EPICs, user stories, acceptance criteria |
21
21
  | Architecture decisions | `.planning/discovery/session-05.md` | Tech stack rationale, ADRs, component design |
22
22
  | Security requirements | `.planning/discovery/session-06.md` | Compliance, encryption, audit requirements |
23
- | Role definitions | `.planning/discovery/session-07.md` | RBAC model, permissions, identity provider |
24
- | Integration specs | `.planning/discovery/session-08.md` | External system interfaces, protocols, data flows |
23
+ | Role definitions | `.planning/discovery/_roles.md` | Roles, permissions per entity, screens per role (Session 7 holds the identity provider) |
24
+ | Integration specs | `.planning/discovery/_integrations.md` | Interfaces, contracts, error handling (Session 8 holds the sync approach) |
25
+ | Migration | `.planning/discovery/_migration.md` | Source systems, entities moved, cut-over, reconciliation |
26
+ | Deviations from standards | `.planning/discovery/_deviations.md` | Every agreed departure from a vault standard, with approver and status |
25
27
  | QA strategy | `.planning/discovery/session-09.md` | Test types, coverage targets, quality gates |
26
28
  | Release plan | `.planning/discovery/session-11.md` | Sprint plan, milestones, build order |
27
29
  | Interactive prototype | `.planning/discovery/prototype/` | Visual reference for UI implementation |
@@ -30,7 +32,7 @@ Discovery outputs are the source of truth for business decisions and requirement
30
32
 
31
33
  - **During discuss phases:** Reference specific sessions when answering gray-area questions
32
34
  - **During research:** Check Discovery sessions before external research — many answers are already there
33
- - **During planning:** Use requirement IDs from Discovery (FR-xxx, US-xxx) in plan references
35
+ - **During planning:** Use requirement IDs as Discovery minted them (`<PREFIX>-nn`, `N-nn`, `E-nn`, `US-nn`) in plan references
34
36
  - **During verification:** Trace completed work back to Discovery requirements
35
37
  ```
36
38
 
@@ -42,12 +44,13 @@ Discovery outputs are the source of truth for business decisions and requirement
42
44
  This project has a completed Discovery Sprint in `.planning/discovery/`. pp-core agents should:
43
45
 
44
46
  1. **Check Discovery before asking the user** — most business and architecture decisions are already documented
45
- 2. **Reference `.planning/discovery/_context.md`** for accumulated cross-session decisions
47
+ 2. **Reference the sessions' Key Decisions tables** (`D-<ss>-<n>`) for cross-session decisions — the original line carries any amendment
46
48
  3. **Reference `.planning/discovery/_pp-handoff.md`** for the structured synthesis used to initialize pp-core
47
- 4. **Use original requirement IDs** (FR-xxx, NFR-xxx, US-xxx, EPIC-xxx) from Discovery in plans and commits
48
- 5. **Reference specific session files** when a phase involves topics covered in that session:
49
- - Auth/roles → Session 7 (`.planning/discovery/session-07.md`)
50
- - Integrations → Session 8 (`.planning/discovery/session-08.md`)
49
+ 4. **Cite IDs as Discovery minted them** — `<PREFIX>-nn`/`N-nn`/`T-nn` requirements from `.planning/discovery/_requirements.md`, `E-nn` EPICs and `US-nn` stories from Session 3 (`references/discovery-id-conventions.md`) — in plans and commits; never invent `FR-`/`NFR-`/`EPIC-` IDs
50
+ 5. **Read the registers before the session files** — `_requirements.md` (with acceptance criteria) and `_screens.md` are the canonical artifacts; a session file is the facilitation record behind them. Open a session file only when a phase involves a topic no register covers yet:
51
+ - Auth/roles → `.planning/discovery/_roles.md` (identity provider: Session 7, `.planning/discovery/session-07.md`)
52
+ - Integrations → `.planning/discovery/_integrations.md`; migration → `.planning/discovery/_migration.md` (sync approach: Session 8, `.planning/discovery/session-08.md`)
53
+ - Deviations from the client's standards → `.planning/discovery/_deviations.md`
51
54
  - UI/UX → Session 4 (`.planning/discovery/session-04.md`) + `.planning/discovery/prototype/`
52
55
  - Security → Session 6 (`.planning/discovery/session-06.md`)
53
56
  - Testing → Session 9 (`.planning/discovery/session-09.md`)
@@ -8,7 +8,7 @@
8
8
  # Discovery Sprint Synthesis — pp-core Handoff
9
9
 
10
10
  > Auto-generated from {completed_count}/13 completed Discovery Sprint sessions.
11
- > Source: .planning/discovery/_context.md + individual session files
11
+ > Source: the session files and the registers under .planning/discovery/
12
12
  > Generated: {date}
13
13
 
14
14
  ---
@@ -50,32 +50,31 @@ application — what it does, who it's for, why it matters}
50
50
  {From Session 3: EPICs and user stories, structured for requirements generation. When
51
51
  `_requirements.md` exists it is the requirement source — it holds what prototype feedback and the
52
52
  element sweep added: carry every `MVP` and `Later` row, and list each `Dropped` row under Out of
53
- Scope with its decision}
53
+ Scope with its decision. IDs are the ones discovery minted — `references/discovery-id-conventions.md`:
54
+ `<PREFIX>-nn`/`N-nn`/`T-nn` requirements, `E-nn` EPICs, `US-nn` stories — never a `FR-`/`NFR-`/`EPIC-`
55
+ ID of this document's own}
54
56
 
55
57
  ### EPIC Registry
56
58
  | ID | Title | Priority | Phase | Stories |
57
59
  |----|-------|----------|-------|---------|
58
- | {epic-id} | {title} | {must/should/could} | {phase} | {count} |
60
+ | {E-nn} | {title} | {must/should/could} | {phase} | {count} |
59
61
 
60
62
  ### Requirements by EPIC
61
63
 
62
- #### {EPIC-001}: {Title}
64
+ #### {E-nn}: {Title}
63
65
  {Brief EPIC description}
64
66
 
67
+ **Requirements:** {the `_requirements.md` IDs this EPIC groups — `<PREFIX>-nn`, `N-nn`, `T-nn`}
68
+
65
69
  **User Stories:**
66
70
  | ID | Story | Priority | Acceptance Criteria Summary |
67
71
  |----|-------|----------|---------------------------|
68
- | {us-id} | As a {role}, I want {goal} so that {benefit} | {priority} | {brief AC} |
72
+ | {US-nn} | As a {role}, I want {goal} so that {benefit} | {priority} | {brief AC} |
69
73
 
70
74
  ### Non-Functional Requirements
71
75
  | ID | Category | Requirement | Target |
72
76
  |----|----------|-------------|--------|
73
- | {nfr-id} | {Performance/Security/Usability/Availability} | {requirement} | {target} |
74
-
75
- ### Business Rules
76
- | ID | Rule | Applies To |
77
- |----|------|------------|
78
- | {br-id} | {rule} | {module/scope} |
77
+ | {N-nn} | {Performance/Security/Usability/Availability} | {requirement} | {target} |
79
78
 
80
79
  ---
81
80
 
@@ -138,14 +137,14 @@ row for row — never summarise them. Without a screen inventory or prototype, w
138
137
  {From Session 6: data classification, compliance, encryption, auth, audit, SLA}
139
138
 
140
139
  ## User Roles & Identity
141
- {From Session 7: RBAC roles + permissions, identity provider}
140
+ {From `.planning/discovery/_roles.md` (§ Roles, § Permissions, § Screens) when it exists, else Session 7's RBAC Matrix; identity provider from Session 7 § IdP Integration Design}
142
141
 
143
142
  | Role | Description | Key Permissions |
144
143
  |------|-------------|-----------------|
145
144
  | {role} | {description} | {permissions} |
146
145
 
147
146
  ## Integrations
148
- {From Session 8: external systems, direction, protocol, data, phase}
147
+ {From `.planning/discovery/_integrations.md` § Interfaces when it exists (one row per `IF-nn`: system, direction, protocol, format), else Session 8's Integration Design Register; phase from `_phases.md`. Migration from `.planning/discovery/_migration.md` when it exists}
149
148
 
150
149
  | System | Direction | Protocol | Data | Phase |
151
150
  |--------|-----------|----------|------|-------|
@@ -207,20 +206,22 @@ list each parked question verbatim, honestly, as a known gap — never silently
207
206
 
208
207
  | Topic | Primary Source | Secondary Sources |
209
208
  |-------|---------------|-------------------|
210
- | Business context & vision | `.planning/discovery/session-01.md` | `.planning/discovery/_context.md` §1 |
211
- | Current state & pain points | `.planning/discovery/session-02.md` | `.planning/discovery/_context.md` §2 |
212
- | Requirements & user stories | `.planning/discovery/session-03.md` | `.planning/discovery/_context.md` §3 |
213
- | UX design principles | `.planning/discovery/session-04.md` | `.planning/discovery/_context.md` §4 |
209
+ | Business context & vision | `.planning/discovery/session-01.md` | `.planning/discovery/_requirements.md` § Prefix Registry |
210
+ | Current state & pain points | `.planning/discovery/session-02.md` | `.planning/discovery/_processes.md`, `_entities.md`, `_glossary.md` |
211
+ | Requirements & user stories | `.planning/discovery/session-03.md` | `.planning/discovery/_requirements.md`, `_stories.md`, `_rules.md` |
212
+ | UX design principles | `.planning/discovery/session-04.md` | `.planning/discovery/_screens.md` |
214
213
  | Requirement register | `.planning/discovery/_requirements.md` | `.planning/discovery/session-03.md` |
215
214
  | Screens | `.planning/discovery/_screens.md` | `.planning/discovery/session-04.md` |
216
215
  | Prototype | `.planning/discovery/prototype/` | `.planning/discovery/_feedback.md`, `.planning/discovery/_sweep.md` |
217
- | Architecture & tech stack | `.planning/discovery/session-05.md` | `.planning/discovery/_context.md` §5 |
218
- | Security & compliance | `.planning/discovery/session-06.md` | `.planning/discovery/_context.md` §6 |
219
- | Roles & identity | `.planning/discovery/session-07.md` | `.planning/discovery/_context.md` §7 |
220
- | Integrations | `.planning/discovery/session-08.md` | `.planning/discovery/_context.md` §8 |
221
- | QA & testing | `.planning/discovery/session-09.md` | `.planning/discovery/_context.md` §9 |
222
- | Infrastructure & deployment | `.planning/discovery/session-10.md` | `.planning/discovery/_context.md` §10 |
223
- | Roadmap & release plan | `.planning/discovery/session-11.md` | `.planning/discovery/_context.md` §11 |
224
- | Team & delivery model | `.planning/discovery/session-12.md` | `.planning/discovery/_context.md` §12 |
225
- | Wrap-up & go/no-go | `.planning/discovery/session-13.md` | `.planning/discovery/_context.md` §13 |
216
+ | Architecture & tech stack | `.planning/discovery/session-05.md` | `.planning/discovery/_entities.md`, `_integrations.md`, `_deviations.md` |
217
+ | Security & compliance | `.planning/discovery/session-06.md` | `.planning/discovery/_entities.md` (classification, retention), `_deviations.md` |
218
+ | Roles & identity | `.planning/discovery/_roles.md` | `.planning/discovery/session-07.md` |
219
+ | Integrations | `.planning/discovery/_integrations.md` | `.planning/discovery/session-08.md` |
220
+ | Migration | `.planning/discovery/_migration.md` | `.planning/discovery/session-02.md`, `session-08.md` |
221
+ | Deviations from standards | `.planning/discovery/_deviations.md` | the sessions' **Standards Applied** tables |
222
+ | QA & testing | `.planning/discovery/session-09.md` | the **Standards Applied** table |
223
+ | Infrastructure & deployment | `.planning/discovery/session-10.md` | the **Standards Applied** table |
224
+ | Roadmap & release plan | `.planning/discovery/session-11.md` | `.planning/discovery/_phases.md` |
225
+ | Team & delivery model | `.planning/discovery/session-12.md` | `.planning/discovery/session-01.md` **Sprint Logistics** |
226
+ | Wrap-up & go/no-go | `.planning/discovery/session-13.md` | `docs/discovery/PROJECT-CHARTER.md` |
226
227
  ```