@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.
- package/.claude-plugin/plugin.json +1 -1
- package/agents/pp-code-fixer.md +9 -5
- package/agents/pp-code-reviewer.md +1 -0
- package/agents/pp-codebase-mapper.md +3 -0
- package/agents/pp-debugger.md +3 -2
- package/agents/pp-executor.md +16 -7
- package/agents/pp-integration-checker.md +1 -0
- package/agents/pp-phase-researcher.md +13 -1
- package/agents/pp-plan-checker.md +3 -0
- package/agents/pp-planner.md +20 -1
- package/agents/pp-research-synthesizer.md +1 -1
- package/agents/pp-ui-auditor.md +1 -0
- package/agents/pp-ui-researcher.md +3 -1
- package/agents/pp-vault-reviewer.md +2 -0
- package/agents/pp-verifier.md +22 -10
- package/commands/pp-add-tests.md +1 -1
- package/commands/pp-debug.md +1 -0
- package/commands/pp-discovery.md +3 -2
- package/commands/pp-init.md +4 -3
- package/commands/pp-quick.md +3 -0
- package/commands/pp-review-backlog.md +2 -1
- package/gemini-extension.json +1 -1
- package/package.json +6 -3
- package/pareto-skills/_shared/pp-claude-md-protocol.md +1 -1
- package/pareto-skills/pp-project-setup/SKILL.md +18 -343
- package/pp-core/bin/lib/capability-registry.cjs +3 -3
- package/pp-core/bin/lib/check-command-router.cjs +60 -20
- package/pp-core/bin/lib/commands.cjs +79 -4
- package/pp-core/bin/lib/compose-bindings.cjs +97 -14
- package/pp-core/bin/lib/discovery-access.cjs +276 -0
- package/pp-core/bin/lib/discovery-charter.cjs +664 -0
- package/pp-core/bin/lib/discovery-deviations.cjs +264 -0
- package/pp-core/bin/lib/discovery-entities.cjs +323 -0
- package/pp-core/bin/lib/discovery-for-phase.cjs +628 -0
- package/pp-core/bin/lib/discovery-integrations.cjs +286 -0
- package/pp-core/bin/lib/discovery-migration.cjs +246 -0
- package/pp-core/bin/lib/discovery-phases.cjs +233 -0
- package/pp-core/bin/lib/discovery-processes.cjs +355 -0
- package/pp-core/bin/lib/discovery-research-track.cjs +5 -4
- package/pp-core/bin/lib/discovery-rollup.cjs +12 -8
- package/pp-core/bin/lib/discovery-rules.cjs +216 -0
- package/pp-core/bin/lib/discovery-screens.cjs +21 -3
- package/pp-core/bin/lib/discovery-session-check.cjs +264 -0
- package/pp-core/bin/lib/discovery-stories.cjs +273 -0
- package/pp-core/bin/lib/discovery-sweep.cjs +13 -4
- package/pp-core/bin/lib/discovery-table.cjs +55 -0
- package/pp-core/bin/lib/discovery-vault-check.cjs +37 -3
- package/pp-core/bin/lib/init-contract.cjs +48 -7
- package/pp-core/bin/lib/io.cjs +22 -0
- package/pp-core/bin/lib/vault-coordinates.cjs +1 -1
- package/pp-core/bin/lib/vault-index.cjs +18 -5
- package/pp-core/bin/lib/vault-standards-review.cjs +50 -2
- package/pp-core/bin/lib/vault-update.cjs +4 -0
- package/pp-core/bin/lib/vault.cjs +2 -2
- package/pp-core/bin/pp-tools.cjs +153 -5
- package/pp-core/org-profile.json +1 -1
- package/pp-core/references/autonomous-best-effort.md +3 -2
- package/pp-core/references/autonomous-lifecycle.md +1 -0
- package/pp-core/references/autonomous-smart-discuss.md +5 -1
- package/pp-core/references/discovery-access.md +112 -0
- package/pp-core/references/discovery-build-consumption.md +256 -0
- package/pp-core/references/discovery-charter.md +127 -0
- package/pp-core/references/discovery-data-model.md +145 -0
- package/pp-core/references/discovery-id-conventions.md +77 -8
- package/pp-core/references/discovery-integrations.md +151 -0
- package/pp-core/references/discovery-processes.md +190 -0
- package/pp-core/references/discovery-rebaseline.md +2 -2
- package/pp-core/references/discovery-research-track.md +5 -6
- package/pp-core/references/discovery-session-output.md +70 -0
- package/pp-core/references/discovery-standards.md +107 -0
- package/pp-core/references/discovery-traceability.md +2 -2
- package/pp-core/references/execute-mvp-tdd.md +3 -3
- package/pp-core/references/git-integration.md +57 -33
- package/pp-core/references/git-planning-commit.md +31 -9
- package/pp-core/references/phase-argument-parsing.md +1 -0
- package/pp-core/references/planner-discovery-extract.md +35 -0
- package/pp-core/references/planner-gap-closure.md +1 -0
- package/pp-core/references/planner-revision.md +3 -1
- package/pp-core/references/planner-tdd.md +4 -4
- package/pp-core/references/planning-config.md +3 -3
- package/pp-core/references/shell-portability.md +28 -0
- package/pp-core/references/tdd.md +20 -16
- package/pp-core/references/verifier-discovery-conformance.md +36 -0
- package/pp-core/references/worktree-path-safety.md +1 -0
- package/pp-core/templates/milestone.md +5 -5
- package/pp-core/templates/project-charter.md +161 -100
- package/pp-core/templates/project.md +3 -3
- package/pp-core/templates/requirements.md +18 -0
- package/pp-core/templates/verification-report.md +16 -0
- package/pp-core/workflows/add-backlog.md +1 -1
- package/pp-core/workflows/add-tests.md +5 -2
- package/pp-core/workflows/add-todo.md +3 -1
- package/pp-core/workflows/ai-integration-phase.md +2 -1
- package/pp-core/workflows/audit-fix.md +4 -3
- package/pp-core/workflows/audit-milestone.md +1 -0
- package/pp-core/workflows/autonomous.md +6 -0
- package/pp-core/workflows/check-todos.md +2 -1
- package/pp-core/workflows/cleanup.md +3 -1
- package/pp-core/workflows/code-review-fix.md +12 -5
- package/pp-core/workflows/code-review.md +15 -1
- package/pp-core/workflows/complete-milestone.md +13 -3
- package/pp-core/workflows/debug.md +2 -0
- package/pp-core/workflows/diagnose-issues.md +1 -1
- package/pp-core/workflows/discovery-sprint/charter.md +114 -0
- package/pp-core/workflows/discovery-sprint/prefill.md +1 -1
- package/pp-core/workflows/discovery-sprint/prototype.md +4 -4
- package/pp-core/workflows/discovery-sprint/session-13-gates.md +11 -1
- package/pp-core/workflows/discovery-sprint/sessions/01-kick-off.md +54 -7
- package/pp-core/workflows/discovery-sprint/sessions/02-as-is.md +31 -7
- package/pp-core/workflows/discovery-sprint/sessions/03-to-be.md +64 -37
- package/pp-core/workflows/discovery-sprint/sessions/04-ux-design.md +12 -3
- package/pp-core/workflows/discovery-sprint/sessions/05-architecture.md +45 -22
- package/pp-core/workflows/discovery-sprint/sessions/06-security.md +30 -15
- package/pp-core/workflows/discovery-sprint/sessions/07-identity.md +43 -25
- package/pp-core/workflows/discovery-sprint/sessions/08-integration.md +63 -24
- package/pp-core/workflows/discovery-sprint/sessions/09-qa.md +28 -13
- package/pp-core/workflows/discovery-sprint/sessions/10-infrastructure.md +35 -16
- package/pp-core/workflows/discovery-sprint/sessions/11-roadmap.md +32 -8
- package/pp-core/workflows/discovery-sprint/sessions/12-delivery-model.md +21 -18
- package/pp-core/workflows/discovery-sprint/sessions/13-wrap-up.md +29 -12
- package/pp-core/workflows/discovery-sprint/vault-context.md +14 -3
- package/pp-core/workflows/discovery-sprint.md +23 -23
- package/pp-core/workflows/discovery-to-build/steps/architecture-deliverables.md +81 -29
- package/pp-core/workflows/discovery-to-build/steps/{screen-inventory-gate.md → handoff-gates.md} +111 -3
- package/pp-core/workflows/discovery-to-build/templates/discovery-references.md +12 -9
- package/pp-core/workflows/discovery-to-build/templates/pp-handoff.md +27 -26
- package/pp-core/workflows/discovery-to-build.md +70 -34
- package/pp-core/workflows/discuss-phase/discovery.md +83 -0
- package/pp-core/workflows/discuss-phase/templates/context.md +4 -0
- package/pp-core/workflows/discuss-phase-assumptions.md +5 -3
- package/pp-core/workflows/discuss-phase.md +18 -10
- package/pp-core/workflows/docs-update.md +1 -0
- package/pp-core/workflows/eval-review.md +2 -1
- package/pp-core/workflows/execute-phase/steps/check-query-gate.md +7 -6
- package/pp-core/workflows/execute-phase/steps/cross-ai-delegation.md +1 -0
- package/pp-core/workflows/execute-phase/steps/per-plan-worktree-gate.md +1 -0
- package/pp-core/workflows/execute-phase/steps/vault-fetch.md +12 -0
- package/pp-core/workflows/execute-phase.md +19 -7
- package/pp-core/workflows/execute-plan.md +18 -7
- package/pp-core/workflows/explore.md +1 -1
- package/pp-core/workflows/forensics.md +4 -2
- package/pp-core/workflows/health.md +1 -0
- package/pp-core/workflows/import.md +2 -1
- package/pp-core/workflows/ingest-docs.md +1 -0
- package/pp-core/workflows/init/steps/client-context-capture.md +1 -0
- package/pp-core/workflows/init/steps/github-provisioning.md +145 -0
- package/pp-core/workflows/init/steps/gitlab-provisioning.md +18 -4
- package/pp-core/workflows/init/steps/reachability-outcome.md +3 -1
- package/pp-core/workflows/init.md +56 -66
- package/pp-core/workflows/map-codebase.md +5 -1
- package/pp-core/workflows/milestone-summary.md +2 -1
- package/pp-core/workflows/mvp-phase.md +1 -0
- package/pp-core/workflows/new-milestone.md +9 -5
- package/pp-core/workflows/new-project.md +12 -11
- package/pp-core/workflows/new-workspace.md +1 -0
- package/pp-core/workflows/next.md +2 -1
- package/pp-core/workflows/pause-work.md +6 -4
- package/pp-core/workflows/plan-milestone-gaps.md +3 -1
- package/pp-core/workflows/plan-phase/steps/chunked-planning.md +1 -1
- package/pp-core/workflows/plan-phase/steps/discovery-extract.md +41 -0
- package/pp-core/workflows/plan-phase.md +36 -16
- package/pp-core/workflows/plan-review-convergence.md +2 -0
- package/pp-core/workflows/plant-seed.md +4 -2
- package/pp-core/workflows/pr-branch.md +2 -0
- package/pp-core/workflows/progress.md +5 -0
- package/pp-core/workflows/quick.md +11 -4
- package/pp-core/workflows/reapply-patches.md +3 -0
- package/pp-core/workflows/remove-phase.md +1 -1
- package/pp-core/workflows/resume-project.md +3 -0
- package/pp-core/workflows/review.md +7 -1
- package/pp-core/workflows/secure-phase.md +2 -1
- package/pp-core/workflows/session-report.md +1 -0
- package/pp-core/workflows/ship.md +8 -1
- package/pp-core/workflows/sketch-wrap-up.md +1 -1
- package/pp-core/workflows/sketch.md +3 -2
- package/pp-core/workflows/spec-phase.md +2 -1
- package/pp-core/workflows/spike-wrap-up.md +1 -1
- package/pp-core/workflows/spike.md +4 -3
- package/pp-core/workflows/sync-skills.md +5 -2
- package/pp-core/workflows/thread.md +3 -2
- package/pp-core/workflows/transition.md +6 -0
- package/pp-core/workflows/ui-phase.md +3 -1
- package/pp-core/workflows/ui-review.md +2 -1
- package/pp-core/workflows/ultraplan-phase.md +1 -0
- package/pp-core/workflows/undo.md +14 -10
- package/pp-core/workflows/update.md +5 -0
- package/pp-core/workflows/validate-phase.md +6 -3
- package/pp-core/workflows/vault-review.md +7 -1
- package/pp-core/workflows/vault-write-back.md +5 -0
- package/pp-core/workflows/verify-phase.md +5 -0
- package/pp-core/workflows/verify-work.md +8 -1
- package/scripts/prompt-injection-scan.sh +1 -1
- package/scripts/sync-runtime-launcher.cjs +115 -5
- 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
|
-
|
|
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)** —
|
|
35
|
-
(
|
|
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)** —
|
|
39
|
-
|
|
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/`
|
|
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
|
-
|
|
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
|
|
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
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
`
|
|
104
|
-
|
|
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
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
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
|
|
228
|
-
needed (they do not exist in a fresh
|
|
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
|
|
235
|
-
these files itself, so this block inlines the canonical
|
|
236
|
-
resolver unconditionally, exactly as every other workflow file
|
|
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
|
-
|
|
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
|
package/pp-core/workflows/discovery-to-build/steps/{screen-inventory-gate.md → handoff-gates.md}
RENAMED
|
@@ -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
|
|
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:**
|
|
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
|
|
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/
|
|
24
|
-
| Integration specs | `.planning/discovery/
|
|
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
|
|
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
|
|
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. **
|
|
48
|
-
5. **
|
|
49
|
-
- Auth/roles → Session 7
|
|
50
|
-
- Integrations → Session 8
|
|
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/
|
|
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
|
-
| {
|
|
60
|
+
| {E-nn} | {title} | {must/should/could} | {phase} | {count} |
|
|
59
61
|
|
|
60
62
|
### Requirements by EPIC
|
|
61
63
|
|
|
62
|
-
#### {
|
|
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
|
-
| {
|
|
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
|
-
| {
|
|
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
|
|
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
|
|
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/
|
|
211
|
-
| Current state & pain points | `.planning/discovery/session-02.md` | `.planning/discovery/
|
|
212
|
-
| Requirements & user stories | `.planning/discovery/session-03.md` | `.planning/discovery/
|
|
213
|
-
| UX design principles | `.planning/discovery/session-04.md` | `.planning/discovery/
|
|
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/
|
|
218
|
-
| Security & compliance | `.planning/discovery/session-06.md` | `.planning/discovery/
|
|
219
|
-
| Roles & identity | `.planning/discovery/
|
|
220
|
-
| Integrations | `.planning/discovery/
|
|
221
|
-
|
|
|
222
|
-
|
|
|
223
|
-
|
|
|
224
|
-
|
|
|
225
|
-
|
|
|
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
|
```
|