@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
|
@@ -96,18 +96,18 @@ After completion, create SUMMARY.md with:
|
|
|
96
96
|
2. Write test describing expected behavior (from `<behavior>` element)
|
|
97
97
|
3. Run test - it MUST fail
|
|
98
98
|
4. If test passes: feature exists or test is wrong. Investigate.
|
|
99
|
-
5. Commit: `test({
|
|
99
|
+
5. Commit: `test({area}): add failing test for [feature]` with the trailer `Phase: {phase}-{plan}`
|
|
100
100
|
|
|
101
101
|
**GREEN - Implement to pass:**
|
|
102
102
|
1. Write minimal code to make test pass
|
|
103
103
|
2. No cleverness, no optimization - just make it work
|
|
104
104
|
3. Run test - it MUST pass
|
|
105
|
-
4. Commit: `feat({
|
|
105
|
+
4. Commit: `feat({area}): implement [feature]` with the trailer `Phase: {phase}-{plan}`
|
|
106
106
|
|
|
107
107
|
**REFACTOR (if needed):**
|
|
108
108
|
1. Clean up implementation if obvious improvements exist
|
|
109
109
|
2. Run tests - MUST still pass
|
|
110
|
-
3. Only commit if changes made: `refactor({
|
|
110
|
+
3. Only commit if changes made: `refactor({area}): clean up [feature]` with the trailer `Phase: {phase}-{plan}`
|
|
111
111
|
|
|
112
112
|
**Result:** Each TDD plan produces 2-3 atomic commits.
|
|
113
113
|
</execution_flow>
|
|
@@ -215,30 +215,36 @@ Framework setup is a one-time cost included in the first TDD plan's RED phase.
|
|
|
215
215
|
TDD plans produce 2-3 atomic commits (one per phase):
|
|
216
216
|
|
|
217
217
|
```
|
|
218
|
-
test(
|
|
218
|
+
test(validation): add failing test for email validation
|
|
219
219
|
|
|
220
220
|
- Tests valid email formats accepted
|
|
221
221
|
- Tests invalid formats rejected
|
|
222
222
|
- Tests empty input handling
|
|
223
223
|
|
|
224
|
-
|
|
224
|
+
Phase: 08-02
|
|
225
|
+
|
|
226
|
+
feat(validation): implement email validation
|
|
225
227
|
|
|
226
228
|
- Regex pattern matches RFC 5322
|
|
227
229
|
- Returns boolean for validity
|
|
228
230
|
- Handles edge cases (empty, null)
|
|
229
231
|
|
|
230
|
-
|
|
232
|
+
Phase: 08-02
|
|
233
|
+
|
|
234
|
+
refactor(validation): extract regex to constant (optional)
|
|
231
235
|
|
|
232
236
|
- Moved pattern to EMAIL_REGEX constant
|
|
233
237
|
- No behavior changes
|
|
234
238
|
- Tests still pass
|
|
239
|
+
|
|
240
|
+
Phase: 08-02
|
|
235
241
|
```
|
|
236
242
|
|
|
237
243
|
**Comparison with standard plans:**
|
|
238
244
|
- Standard plans: 1 commit per task, 2-4 commits per plan
|
|
239
245
|
- TDD plans: 2-3 commits for single feature
|
|
240
246
|
|
|
241
|
-
Both follow same format: `{type}({
|
|
247
|
+
Both follow same format: `{type}({area}): {description}`, where `{area}` names the part of the codebase, plus the trailer `Phase: {phase}-{plan}`
|
|
242
248
|
|
|
243
249
|
**Benefits:**
|
|
244
250
|
- Each commit independently revertable
|
|
@@ -256,9 +262,9 @@ When `workflow.tdd_mode` is enabled in config, the RED/GREEN/REFACTOR gate seque
|
|
|
256
262
|
|
|
257
263
|
| Gate | Required | Commit Pattern | Validation |
|
|
258
264
|
|------|----------|---------------|------------|
|
|
259
|
-
| RED | Yes | `test({phase}-{plan}
|
|
260
|
-
| GREEN | Yes | `feat({phase}-{plan}
|
|
261
|
-
| REFACTOR | No | `refactor({phase}-{plan}
|
|
265
|
+
| RED | Yes | `test({area}): ...` + `Phase: {phase}-{plan}` | Test exists AND fails before implementation |
|
|
266
|
+
| GREEN | Yes | `feat({area}): ...` + `Phase: {phase}-{plan}` | Test passes after implementation |
|
|
267
|
+
| REFACTOR | No | `refactor({area}): ...` + `Phase: {phase}-{plan}` | Tests still pass after cleanup |
|
|
262
268
|
|
|
263
269
|
### Fail-Fast Rules
|
|
264
270
|
|
|
@@ -270,12 +276,10 @@ When `workflow.tdd_mode` is enabled in config, the RED/GREEN/REFACTOR gate seque
|
|
|
270
276
|
|
|
271
277
|
After completing a `type: tdd` plan, the executor validates the git log:
|
|
272
278
|
```bash
|
|
273
|
-
#
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
# Check for optional REFACTOR gate commit
|
|
278
|
-
git log --oneline --grep="^refactor(${PHASE}-${PLAN})" | head -1
|
|
279
|
+
# Gate commits for this plan: type from the subject, plan from the Phase trailer.
|
|
280
|
+
# Expect a test commit (RED), a feat commit (GREEN) and optionally a refactor commit.
|
|
281
|
+
git log --format='%h%x09%s%x09%(trailers:key=Phase,valueonly,separator=%x2C)' \
|
|
282
|
+
| awk -F'\t' -v id="${PHASE}-${PLAN}" '$2 ~ /^(test|feat|refactor)(\([^)]*\))?!?:/ && ($3 == id || index($2, "(" id "):") > 0)'
|
|
279
283
|
```
|
|
280
284
|
|
|
281
285
|
If RED or GREEN gate commits are missing, add a `## TDD Gate Compliance` section to SUMMARY.md with the violation details.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Discovery conformance — the verifier contract (R3)
|
|
2
|
+
|
|
3
|
+
**Load this file from pp-verifier Step 6d on a project that ran the Discovery Sprint** (contract:
|
|
4
|
+
`references/discovery-build-consumption.md`). Planning read the Discovery registers; verification
|
|
5
|
+
is where conformance is enforced — "did we build what was signed" is answered per phase.
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
DISCOVERY_CONFORMANCE=$(pp_run query discovery.for-phase "$PHASE_NUM" --conformance-template 2>/dev/null || true)
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Empty output means no `.planning/discovery/` — write no block and stop here. A non-zero exit is a
|
|
12
|
+
structural fault in a discovery register: record it as a gap naming the fault list.
|
|
13
|
+
|
|
14
|
+
Otherwise the output is the **Discovery conformance** block: one row per Discovery register row
|
|
15
|
+
that cites this phase's requirement IDs (`_requirements.md`, `_stories.md`, `_processes.md` steps,
|
|
16
|
+
`_entities.md`, `_rules.md`, `_screens.md`, roles, integrations), every row `missed`. Fill it:
|
|
17
|
+
|
|
18
|
+
1. **The acceptance criteria ARE the UAT.** Each `_requirements.md` and `_stories.md` row's
|
|
19
|
+
acceptance criteria is a truth in Step 3 — add any the plans' `must_haves` omitted — verified
|
|
20
|
+
by the same evidence rules as every other truth.
|
|
21
|
+
2. **One status per row**, exactly one of:
|
|
22
|
+
- `honoured` — evidence that the build realises the row (`file:line`, a test name) in `Evidence`;
|
|
23
|
+
- `amended (D-P<nn>-<n>)` — the register cell carries `→ amended by` that decision and the build
|
|
24
|
+
matches the amended cell; name the cell in `Evidence`;
|
|
25
|
+
- `missed` — no evidence, or the build contradicts the row; say which in `Evidence`.
|
|
26
|
+
3. **Never add, remove or rename a row**; never open a `.planning/discovery/session-NN.md` — the
|
|
27
|
+
register row is the fact, and `--verify` refuses an unknown or missing row.
|
|
28
|
+
4. **A `missed` row is a gap.** It fires rule 1 of Step 9 (`gaps_found`) and appears in the Gaps
|
|
29
|
+
Summary with its row key (`_rules.md BR-02`).
|
|
30
|
+
5. **Paste the filled block into VERIFICATION.md** under `### Discovery conformance`, markers
|
|
31
|
+
included, after Requirements Coverage. Then run
|
|
32
|
+
|
|
33
|
+
`pp_run query discovery.for-phase "$PHASE_NUM" --verify "$REPORT_PATH"`
|
|
34
|
+
|
|
35
|
+
and repair the block until it exits 0 (markers once each, header, every row present once, legal
|
|
36
|
+
statuses). A `missed` count is never a fault of the block.
|
|
@@ -22,6 +22,7 @@ skipping all worktree guards. The sentinel captures the spawn-time toplevel and
|
|
|
22
22
|
detects drift before every commit.
|
|
23
23
|
|
|
24
24
|
```bash
|
|
25
|
+
[ -z "${ZSH_VERSION:-}" ] || emulate -R sh
|
|
25
26
|
if [ -f .git ]; then # we are in a worktree
|
|
26
27
|
WT_GIT_DIR=$(git rev-parse --git-dir 2>/dev/null)
|
|
27
28
|
case "$WT_GIT_DIR" in
|
|
@@ -51,14 +51,14 @@ If MILESTONES.md doesn't exist, create it with header:
|
|
|
51
51
|
- Minor bug fixes that don't constitute a release
|
|
52
52
|
|
|
53
53
|
**Stats to include:**
|
|
54
|
-
- Count modified files: `git diff --stat
|
|
54
|
+
- Count modified files: `git diff --stat FIRST_SHA^..LAST_SHA | tail -1` (find a plan's commits with `git log --format=%h --grep="^Phase: XX-XX$"`)
|
|
55
55
|
- Count LOC: `find . -name "*.swift" -o -name "*.ts" | xargs wc -l` (or relevant extension)
|
|
56
56
|
- Phase/plan/task counts from ROADMAP
|
|
57
57
|
- Timeline from first phase commit to last phase commit
|
|
58
58
|
|
|
59
59
|
**Git range format:**
|
|
60
|
-
- First commit of milestone → last commit of milestone
|
|
61
|
-
- Example: `
|
|
60
|
+
- First commit of milestone → last commit of milestone, each named by short sha and its `Phase:` trailer
|
|
61
|
+
- Example: `a1b2c3d` (Phase: 01-01) → `e4f5a6b` (Phase: 04-01) for phases 1-4
|
|
62
62
|
</guidelines>
|
|
63
63
|
|
|
64
64
|
<example>
|
|
@@ -83,7 +83,7 @@ If MILESTONES.md doesn't exist, create it with header:
|
|
|
83
83
|
- 2 phases, 3 plans, 12 tasks
|
|
84
84
|
- 8 days from v1.0 to v1.1
|
|
85
85
|
|
|
86
|
-
**Git range:** `
|
|
86
|
+
**Git range:** `3c9d2e1` (Phase: 05-01) → `7f0a4b8` (Phase: 06-02)
|
|
87
87
|
|
|
88
88
|
**What's next:** v2.0 SwiftUI redesign with widget support
|
|
89
89
|
|
|
@@ -108,7 +108,7 @@ If MILESTONES.md doesn't exist, create it with header:
|
|
|
108
108
|
- 4 phases, 7 plans, 28 tasks
|
|
109
109
|
- 12 days from start to ship
|
|
110
110
|
|
|
111
|
-
**Git range:** `
|
|
111
|
+
**Git range:** `a1b2c3d` (Phase: 01-01) → `e4f5a6b` (Phase: 04-01)
|
|
112
112
|
|
|
113
113
|
**What's next:** Security audit and hardening for v1.1
|
|
114
114
|
```
|
|
@@ -1,32 +1,51 @@
|
|
|
1
1
|
# Project Charter Template
|
|
2
2
|
|
|
3
|
-
Template for
|
|
4
|
-
|
|
3
|
+
Template for `docs/discovery/PROJECT-CHARTER.md`, the document every stakeholder signs at the end of a
|
|
4
|
+
Discovery Sprint. It lives under `docs/` because it is client-visible, like `docs/architecture/`;
|
|
5
|
+
`.planning/discovery/` holds the facilitation record it condenses.
|
|
5
6
|
|
|
6
7
|
**Purpose:** one short, fixed-shape document that states what will be built, why, for whom, how it will
|
|
7
|
-
be delivered and on what conditions, so that sign-off is a decision
|
|
8
|
-
order for every engagement. It summarises the thirteen session files
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
8
|
+
be delivered, where it departs from the standards and on what conditions, so that sign-off is a decision
|
|
9
|
+
on the same questions in the same order for every engagement. It summarises the thirteen session files
|
|
10
|
+
and the discovery registers; it does not replace them.
|
|
11
|
+
|
|
12
|
+
**When:** drafted in Session 13 Step 0.5 (after the cross-reference, before the wrap-up topics), reviewed
|
|
13
|
+
in topics 2–3, set to `For sign-off` at the Closing Step, and required `Signed` or `Signed with
|
|
14
|
+
conditions` by `/pp-discovery-to-build`. The drafting procedure is
|
|
15
|
+
`workflows/discovery-sprint/charter.md`; the parser contract and the heading translations are in
|
|
16
|
+
`references/discovery-charter.md`.
|
|
17
|
+
|
|
18
|
+
**Shape is fixed.** Every charter has the same 20 numbered sections in the same order, with the same
|
|
19
|
+
table columns. A section with nothing to report stays in place and says so; it is never dropped, merged
|
|
20
|
+
or renumbered. That is what lets a reader compare two charters side by side, and what lets
|
|
21
|
+
`pp_run query discovery.charter-check` verify one.
|
|
22
|
+
|
|
23
|
+
**Language.** The charter is written in the sprint language — the `Charter language` row of Session 1's
|
|
24
|
+
Sprint Logistics, else `discovery.language` in `.planning/config.json`, else the language the sprint
|
|
25
|
+
was facilitated in. Headings, labels and prose are translated; the `<!-- charter:<key> -->` heading
|
|
26
|
+
keys, the frontmatter fields and every enum cell (`status`, `go_no_go`, `Green / Amber / Red`,
|
|
27
|
+
`Approve / Approve with conditions / Reject`, `Yes / No`) stay in English, because the check reads them.
|
|
28
|
+
Column order is fixed; column headings may be translated.
|
|
15
29
|
|
|
16
30
|
---
|
|
17
31
|
|
|
18
32
|
## File Template
|
|
19
33
|
|
|
20
|
-
|
|
34
|
+
Copy verbatim, then fill. Tables carry no example rows: a row is written only when a session table
|
|
35
|
+
supplies it. The frontmatter placeholders `0000-00-00`, `0/13` and `und` are valid to the check and are
|
|
36
|
+
replaced by the drafting step.
|
|
37
|
+
|
|
38
|
+
````markdown
|
|
21
39
|
---
|
|
22
40
|
document: project-charter
|
|
23
41
|
project: [Project name]
|
|
24
42
|
client: [Client name]
|
|
25
|
-
version:
|
|
26
|
-
status:
|
|
27
|
-
date:
|
|
28
|
-
|
|
29
|
-
|
|
43
|
+
version: 1.0
|
|
44
|
+
status: Draft
|
|
45
|
+
date: 0000-00-00
|
|
46
|
+
language: und
|
|
47
|
+
discovery_sessions_completed: 0/13
|
|
48
|
+
go_no_go: Pending
|
|
30
49
|
---
|
|
31
50
|
|
|
32
51
|
# [Project name] — Project Charter
|
|
@@ -36,61 +55,68 @@ go_no_go: [Go | Go with conditions | No-Go]
|
|
|
36
55
|
| Document control | |
|
|
37
56
|
|---|---|
|
|
38
57
|
| Client | [Client name] |
|
|
39
|
-
| Version / status |
|
|
40
|
-
| Date |
|
|
58
|
+
| Version / status | 1.0 · Draft |
|
|
59
|
+
| Date | 0000-00-00 |
|
|
41
60
|
| Prepared by | [Name, role] |
|
|
42
|
-
| Based on | Discovery Sprint sessions 1–13, completed
|
|
61
|
+
| Based on | Discovery Sprint sessions 1–13, completed 0000-00-00 |
|
|
43
62
|
|
|
44
63
|
---
|
|
45
64
|
|
|
46
|
-
## 1. Purpose and background
|
|
65
|
+
## 1. Purpose and background <!-- charter:purpose -->
|
|
47
66
|
|
|
48
67
|
[Two to four sentences: the business problem and why it matters now.]
|
|
49
68
|
|
|
50
69
|
**Top pain points today**
|
|
51
70
|
|
|
52
|
-
| # | Pain point | Who is affected | Impact |
|
|
53
|
-
|
|
54
|
-
| 1 | | | |
|
|
71
|
+
| # | Pain point | Who is affected | Impact | Source |
|
|
72
|
+
|---|---|---|---|---|
|
|
55
73
|
|
|
56
|
-
## 2. Objectives and success measures
|
|
74
|
+
## 2. Objectives and success measures <!-- charter:objectives -->
|
|
57
75
|
|
|
58
|
-
|
|
|
76
|
+
| ID | Objective | KPI | Baseline | Target | Measured by |
|
|
59
77
|
|---|---|---|---|---|---|
|
|
60
|
-
| O-1 | | | | | |
|
|
61
78
|
|
|
62
|
-
## 3. Scope
|
|
79
|
+
## 3. Scope <!-- charter:scope -->
|
|
63
80
|
|
|
64
81
|
**In scope (MVP)**
|
|
65
82
|
|
|
66
|
-
| EPIC | Title | Priority |
|
|
67
|
-
|
|
68
|
-
| | | |
|
|
83
|
+
| EPIC | Title | Priority | Requirements |
|
|
84
|
+
|---|---|---|---|
|
|
69
85
|
|
|
70
86
|
**Out of scope**
|
|
71
87
|
|
|
72
|
-
|
|
88
|
+
| Item | Reason | Decision |
|
|
89
|
+
|---|---|---|
|
|
73
90
|
|
|
74
|
-
**Requirements:** [
|
|
75
|
-
`_requirements.md`.
|
|
91
|
+
**Requirements:** [one count per registered prefix, then the dropped count — `K- 12 · N- 4 · T- 3 · Dropped 1`] <!-- charter:counts -->
|
|
76
92
|
|
|
77
|
-
## 4. Stakeholders and users
|
|
93
|
+
## 4. Stakeholders and users <!-- charter:stakeholders -->
|
|
78
94
|
|
|
79
95
|
| Stakeholder | Role | Decision authority | Involvement |
|
|
80
96
|
|---|---|---|---|
|
|
81
|
-
| | | | |
|
|
82
97
|
|
|
83
98
|
| Persona | Description | Main goal |
|
|
84
99
|
|---|---|---|
|
|
85
|
-
| | | |
|
|
86
100
|
|
|
87
|
-
## 5.
|
|
101
|
+
## 5. Approvals and role holders <!-- charter:approvals -->
|
|
102
|
+
|
|
103
|
+
| Approval | Approver | Consulted | Source |
|
|
104
|
+
|---|---|---|---|
|
|
105
|
+
|
|
106
|
+
| Role | Holder | Source |
|
|
107
|
+
|---|---|---|
|
|
108
|
+
| Privacy owner | | |
|
|
109
|
+
| Security owner | | |
|
|
110
|
+
| Incident contact | | |
|
|
111
|
+
| Architect (signs deviations) | | |
|
|
112
|
+
|
|
113
|
+
## 6. Solution overview <!-- charter:solution -->
|
|
88
114
|
|
|
89
115
|
[Two to four sentences: the shape of the solution.]
|
|
90
116
|
|
|
91
117
|
| Layer | Choice | Decision |
|
|
92
118
|
|---|---|---|
|
|
93
|
-
| Frontend | |
|
|
119
|
+
| Frontend | | |
|
|
94
120
|
| Backend | | |
|
|
95
121
|
| Data | | |
|
|
96
122
|
| Hosting | | |
|
|
@@ -98,129 +124,164 @@ go_no_go: [Go | Go with conditions | No-Go]
|
|
|
98
124
|
|
|
99
125
|
**Integrations**
|
|
100
126
|
|
|
101
|
-
| System | Direction | Purpose |
|
|
127
|
+
| ID | System | Direction | Purpose |
|
|
128
|
+
|---|---|---|---|
|
|
129
|
+
|
|
130
|
+
## 7. Deviations from standards <!-- charter:deviations -->
|
|
131
|
+
|
|
132
|
+
| ID | Standard | Choice | Reason | Reversible | Approver | Decision | Status |
|
|
133
|
+
|---|---|---|---|---|---|---|---|
|
|
134
|
+
|
|
135
|
+
## 8. Data <!-- charter:data -->
|
|
136
|
+
|
|
137
|
+
| Aspect | Statement | Source |
|
|
102
138
|
|---|---|---|
|
|
103
|
-
| | | |
|
|
139
|
+
| Highest data classification | | |
|
|
140
|
+
| Personal data processed | | |
|
|
141
|
+
| Controller / processor role | | |
|
|
142
|
+
| Retention headline | | |
|
|
143
|
+
| Availability target (RTO / RPO) | | |
|
|
104
144
|
|
|
105
|
-
|
|
106
|
-
four lines.]
|
|
145
|
+
## 9. Quality and acceptance <!-- charter:quality -->
|
|
107
146
|
|
|
108
|
-
|
|
147
|
+
| Gate | Criterion | Approved by |
|
|
148
|
+
|---|---|---|
|
|
149
|
+
| UAT sign-off | | |
|
|
150
|
+
| Go-live readiness | | |
|
|
109
151
|
|
|
110
|
-
|
|
111
|
-
|---|---|
|
|
112
|
-
| UAT sign-off | [criteria] — approved by [role] |
|
|
113
|
-
| Go-live readiness | [criteria] |
|
|
152
|
+
## 10. What was validated <!-- charter:validated -->
|
|
114
153
|
|
|
115
|
-
|
|
154
|
+
| Round | Prototype version | Flows validated | Verdicts (change / keep / drop / question) | Closed? |
|
|
155
|
+
|---|---|---|---|---|
|
|
156
|
+
|
|
157
|
+
**Screens:** [n] required, [n] deferred, [n] MVP requirements in the no-screen bucket with a reason, 0 uncovered — as `_screens.md` records them.
|
|
116
158
|
|
|
117
|
-
|
|
159
|
+
## 11. Delivery plan <!-- charter:delivery -->
|
|
160
|
+
|
|
161
|
+
| Milestone | Target | Included EPICs | Exit criteria |
|
|
118
162
|
|---|---|---|---|
|
|
119
|
-
| [v1.0 — MVP] | | | |
|
|
120
163
|
|
|
121
164
|
**Build order:** [EPIC order and why.]
|
|
122
165
|
|
|
123
|
-
##
|
|
166
|
+
## 12. Team and governance <!-- charter:team -->
|
|
124
167
|
|
|
125
168
|
| Role | Name / party | Responsibility |
|
|
126
169
|
|---|---|---|
|
|
127
|
-
| | | |
|
|
128
170
|
|
|
129
171
|
**Scope changes are approved by:** [role]. **Progress is reported:** [cadence, format].
|
|
130
172
|
|
|
131
|
-
##
|
|
173
|
+
## 13. Budget, constraints and assumptions <!-- charter:budget -->
|
|
132
174
|
|
|
133
175
|
| Type | Item | Source |
|
|
134
176
|
|---|---|---|
|
|
135
|
-
| Budget | [amount or "Not decided in Discovery — OI-n"] | |
|
|
136
|
-
| Constraint | | |
|
|
137
|
-
| Assumption | | |
|
|
138
177
|
|
|
139
|
-
##
|
|
178
|
+
## 14. Risks <!-- charter:risks -->
|
|
140
179
|
|
|
141
|
-
|
|
|
180
|
+
| ID | Risk | Likelihood | Impact | Mitigation | Owner |
|
|
142
181
|
|---|---|---|---|---|---|
|
|
143
|
-
| R-1 | | | | | |
|
|
144
182
|
|
|
145
|
-
##
|
|
183
|
+
## 15. Open items <!-- charter:open-items -->
|
|
146
184
|
|
|
147
|
-
| ID | Item | Must resolve before build? | Owner | Target date |
|
|
148
|
-
|
|
149
|
-
|
|
185
|
+
| ID | Item | Must resolve before build? | Owner | Target date | Status |
|
|
186
|
+
|---|---|---|---|---|---|
|
|
187
|
+
|
|
188
|
+
## 16. Conditions <!-- charter:conditions -->
|
|
189
|
+
|
|
190
|
+
| Kind | ID | Statement | Resolution |
|
|
191
|
+
|---|---|---|---|
|
|
150
192
|
|
|
151
|
-
##
|
|
193
|
+
## 17. Go / No-Go recommendation <!-- charter:go-no-go -->
|
|
152
194
|
|
|
153
195
|
| Criterion | Status | Note |
|
|
154
196
|
|---|---|---|
|
|
155
|
-
| Business requirements clarity |
|
|
197
|
+
| Business requirements clarity | | |
|
|
156
198
|
| Technical architecture feasibility | | |
|
|
157
199
|
| Security and compliance readiness | | |
|
|
158
200
|
| Integration dependencies resolved | | |
|
|
159
201
|
| Team and budget availability | | |
|
|
160
202
|
| Timeline confidence | | |
|
|
161
203
|
| Stakeholder alignment | | |
|
|
162
|
-
| **Overall recommendation** |
|
|
204
|
+
| **Overall recommendation** | | |
|
|
163
205
|
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
## 13. Key decisions
|
|
206
|
+
## 18. Key decisions <!-- charter:decisions -->
|
|
167
207
|
|
|
168
208
|
| ID | Decision | Rationale | Owner |
|
|
169
209
|
|---|---|---|---|
|
|
170
|
-
| D-01-1 | | | |
|
|
171
210
|
|
|
172
|
-
##
|
|
211
|
+
## 19. Sign-off <!-- charter:sign-off -->
|
|
173
212
|
|
|
174
|
-
By signing, each party agrees that sections 1–
|
|
175
|
-
conditions
|
|
213
|
+
By signing, each party agrees that sections 1–18 describe the project to be built, subject to the
|
|
214
|
+
conditions in § 16.
|
|
176
215
|
|
|
177
216
|
| Role | Name | Decision | Conditions | Date | Signature |
|
|
178
217
|
|---|---|---|---|---|---|
|
|
179
|
-
| [Sponsor] | |
|
|
218
|
+
| [Sponsor] | | | | | |
|
|
180
219
|
| [Product owner] | | | | | |
|
|
181
220
|
| [Delivery lead] | | | | | |
|
|
182
221
|
|
|
222
|
+
## 20. Version history <!-- charter:history -->
|
|
223
|
+
|
|
224
|
+
| Version | Date | Status | Change | Decision |
|
|
225
|
+
|---|---|---|---|---|
|
|
226
|
+
| 1.0 | 0000-00-00 | Draft | Initial draft from Sessions 1–13 | — |
|
|
227
|
+
|
|
183
228
|
---
|
|
184
229
|
|
|
185
|
-
**Source files:** `.planning/discovery/session-01.md` … `session-13.md`, `_requirements.md
|
|
186
|
-
|
|
230
|
+
**Source files:** `.planning/discovery/session-01.md` … `session-13.md`, `_requirements.md`, `_screens.md`,
|
|
231
|
+
`_feedback.md`, `_research.md`, `_deviations.md`.
|
|
232
|
+
````
|
|
187
233
|
|
|
188
234
|
---
|
|
189
235
|
|
|
190
236
|
## Where each section comes from
|
|
191
237
|
|
|
192
|
-
Fill every section from the
|
|
193
|
-
truth; the charter only condenses them.
|
|
238
|
+
Fill every section from the tables below and nothing else. The session files and the registers are the
|
|
239
|
+
source of truth; the charter only condenses them.
|
|
194
240
|
|
|
195
241
|
| § | Section | Source (file § table) |
|
|
196
242
|
|---|---|---|
|
|
197
|
-
| — | Front matter, document control | `_progress.md` (completion dates); Session 1 § Stakeholder Register (client) |
|
|
198
|
-
| 1 | Purpose and background | Session 1 § Business Vision Summary; Session 2 § Pain Points Register (top 3–5 by impact) |
|
|
199
|
-
| 2 | Objectives and success measures | Session 3 § Business Objectives |
|
|
200
|
-
| 3 | Scope | Session 3 § MVP Scope Boundary and § EPIC Register; counts from the roll-up block
|
|
243
|
+
| — | Front matter, document control | `_progress.md` (completion dates); Session 1 § Stakeholder Register (client); language per the rule above |
|
|
244
|
+
| 1 | Purpose and background | Session 1 § Business Vision Summary; Session 2 § Pain Points Register (top 3–5 by impact, `PP-` IDs in Source) |
|
|
245
|
+
| 2 | Objectives and success measures | Session 3 § Business Objectives (`BO-` IDs); a column the source table does not have (Baseline, say) reads `—` |
|
|
246
|
+
| 3 | Scope | Session 3 § MVP Scope Boundary and § EPIC Register (`E-` IDs, each with the requirement IDs it groups — from the register's requirement column when it has one, else from the Step Matrices' Requirements cells grouped by EPIC); out-of-scope items with their `D-` decision; counts from the roll-up block of `_requirements.md` |
|
|
201
247
|
| 4 | Stakeholders and users | Session 1 § Stakeholder Register; Session 4 § Refined Personas (else Session 2 § User Personas) |
|
|
202
|
-
| 5 |
|
|
203
|
-
| 6 |
|
|
204
|
-
| 7 |
|
|
205
|
-
| 8 |
|
|
206
|
-
| 9 |
|
|
207
|
-
| 10 |
|
|
208
|
-
| 11 |
|
|
209
|
-
| 12 |
|
|
210
|
-
| 13 |
|
|
211
|
-
| 14 |
|
|
248
|
+
| 5 | Approvals and role holders | Session 1 § Approval Matrix (one row each, Source `[vault: <path>]` or `room`); a Session 1 that predates the matrix gives the Stakeholder Register's decision-authority column instead. Role holders (privacy owner, security owner, incident contact, architect) from the Key Decision of any session that names one — `Not decided in Discovery — OI-n` when none does |
|
|
249
|
+
| 6 | Solution overview | Session 5 § Technology Stack Decisions (`D-05-n`) and § Architecture Decision Records; Session 8 § Integration Design Register (`IF-` IDs); Session 7 § IdP Integration Design |
|
|
250
|
+
| 7 | Deviations from standards | `_deviations.md` (`DEV-` IDs, every row — `charter-check` reports a row left out) when it exists; until then every **Deviation Record** table a session carries (Sessions 5–10, `ADR-` IDs, Status as signed or superseded) plus every Sessions 4–10 **Standards Applied** row whose Deviation is not `none`, each with its `D-ss-n` |
|
|
251
|
+
| 8 | Data | Session 6 § Data Classification Matrix, § Compliance Requirements Register, § Availability and DR Targets; Session 2 § Data Entity Map for personal data |
|
|
252
|
+
| 9 | Quality and acceptance | Session 9 § UAT Process and § Quality Gates; Session 10 § Go-Live Readiness Checklist |
|
|
253
|
+
| 10 | What was validated | `_feedback.md` (one row per round: verdict counts, whether every `Processing` cell is closed); `_screens.md` (required / deferred counts, and the number of MVP requirements in the no-screen bucket — uncovered requirements are always 0 once `screen-check` passes); `prototype/README.md` (flows, version) |
|
|
254
|
+
| 11 | Delivery plan | Session 11 § Milestone Plan, § Project Timeline, § EPIC Build Order |
|
|
255
|
+
| 12 | Team and governance | Session 12 § Team Structure and § Governance Structure; reporting cadence from Session 12 topic "Communication and reporting" |
|
|
256
|
+
| 13 | Budget, constraints and assumptions | Session 1 § Constraints and Risks Register (`CON-` IDs); any `[needs-business-input]` item still parked. IDs are copied as minted — an engagement that minted `C1`/`R1` without a hyphen keeps them, and those rows are then outside the families `charter-check` resolves |
|
|
257
|
+
| 14 | Risks | Session 11 § Risk Register plus open risks from Session 1 § Constraints and Risks Register (`R-` IDs, as minted) |
|
|
258
|
+
| 15 | Open items | Session 13 § Open Items Register, row for row, in the charter's six columns — `Source Session` and `Priority` stay in the register (`OI-` IDs) |
|
|
259
|
+
| 16 | Conditions | every condition attached to a `Go with conditions` (an Amber row under a plain `Go` is not a condition; it stays an open item); every section carrying `⚠️ CONDITIONAL — <RS-nn\|DG-nn>` (from the sessions' `conditional:` frontmatter); every open `Gates-MVP` row of `_research.md`; every `Dropped (D-ss-n)` row of `_requirements.md`; every Session 13 open item that must resolve before build and is still open |
|
|
260
|
+
| 17 | Go / No-Go recommendation | Session 13 § Go / No-Go Assessment, copied as recorded — the eight rows in order, status cells verbatim |
|
|
261
|
+
| 18 | Key decisions | § Key Decisions of every session — only decisions that change scope, architecture, cost or timeline |
|
|
262
|
+
| 19 | Sign-off | Session 1 § Stakeholder Register and § Approval Matrix — every party with approval authority gets a row |
|
|
263
|
+
| 20 | Version history | one row per version of this document; the last row's version equals the frontmatter `version` |
|
|
212
264
|
|
|
213
265
|
## Fill rules
|
|
214
266
|
|
|
215
267
|
- **Never invent.** Every statement traces to a session table above. A value Discovery did not settle is
|
|
216
|
-
written as `Not decided in Discovery — OI-n`, and that item appears in §
|
|
217
|
-
- **Keep the IDs.** Requirement, EPIC, decision (`D-<ss>-<n>`), risk
|
|
218
|
-
exactly as the session files write them
|
|
268
|
+
written as `Not decided in Discovery — OI-n`, and that item appears in § 15 Open items.
|
|
269
|
+
- **Keep the IDs.** Requirement, EPIC, decision (`D-<ss>-<n>`), risk, open-item, screen and deviation IDs
|
|
270
|
+
are copied exactly as the session files and registers write them. `charter-check` resolves every ID a
|
|
271
|
+
table cell cites; an ID nothing minted is a fault.
|
|
219
272
|
- **Condense, don't copy.** Tables carry the headline rows; the full detail stays in the session files.
|
|
220
273
|
Aim for a charter that reads in about fifteen minutes.
|
|
221
|
-
- **Fixed shape.** Keep all
|
|
222
|
-
says `None identified in Discovery.`
|
|
223
|
-
|
|
274
|
+
- **Fixed shape.** Keep all 20 sections, their keys, their order and their table columns. An empty table
|
|
275
|
+
stays in place with no rows, and the section's prose says `None identified in Discovery.` (in the
|
|
276
|
+
sprint language). The **Source files** footer names only the files that exist in this engagement.
|
|
277
|
+
- **Go / No-Go is recorded, not re-judged.** § 17 copies Session 13's assessment verbatim and the
|
|
278
|
+
frontmatter `go_no_go` equals its overall recommendation; `Pending` is allowed only while `status`
|
|
279
|
+
is `Draft`.
|
|
280
|
+
- **Conditions are the honest qualifiers of the sign-off.** A Session 13 open item marked
|
|
281
|
+
`Yes` under *Must resolve before build?* is either closed in Session 13 or listed in § 16.
|
|
224
282
|
- **Status follows the signatures.** `Draft` while being written, `For sign-off` once circulated,
|
|
225
|
-
`Signed` when every §
|
|
226
|
-
conditions, `Rejected` when any row rejects.
|
|
283
|
+
`Signed` when every § 19 row says `Approve`, `Signed with conditions` when any row approves with
|
|
284
|
+
conditions, `Rejected` when any row rejects.
|
|
285
|
+
- **A change is a new version.** Any edit after `For sign-off` adds a § 20 row, bumps `version`,
|
|
286
|
+
resets `status` to `Draft` and regenerates the exports (`workflows/discovery-sprint/charter.md`
|
|
287
|
+
§ Redraft). The markdown is the source; `PROJECT-CHARTER.docx` and `.pdf` next to it are renderings.
|
|
@@ -68,9 +68,9 @@ Common types: Tech stack, Timeline, Budget, Dependencies, Compatibility, Perform
|
|
|
68
68
|
|
|
69
69
|
<!-- Decisions that constrain future work. Add throughout project lifecycle. -->
|
|
70
70
|
|
|
71
|
-
| Decision | Rationale | Outcome |
|
|
72
|
-
|
|
73
|
-
| [Choice] | [Why] | [✓ Good / ⚠️ Revisit / — Pending] |
|
|
71
|
+
| ID | Decision | Rationale | Outcome |
|
|
72
|
+
|----|----------|-----------|---------|
|
|
73
|
+
| [D-<ss>-<n> from Discovery, or —] | [Choice] | [Why] | [✓ Good / ⚠️ Revisit / — Pending] |
|
|
74
74
|
|
|
75
75
|
---
|
|
76
76
|
*Last updated: [date] after [trigger]*
|
|
@@ -107,6 +107,24 @@ Which phases cover which requirements. Updated during roadmap creation.
|
|
|
107
107
|
- Complete: Requirement verified
|
|
108
108
|
- Blocked: Waiting on external factor
|
|
109
109
|
|
|
110
|
+
**Discovery variant (projects handed over by `/pp-discovery-to-build`):**
|
|
111
|
+
- Every line is one `_requirements.md` row with its minted ID; nothing is renumbered
|
|
112
|
+
- The description is followed by ` — <MoSCoW> · <Disposition> · <Provenance>` copied from the row
|
|
113
|
+
(`Must · MVP · [03 §2.1]`), and the acceptance criteria follow on an indented `- AC:` line, verbatim
|
|
114
|
+
- `MVP` rows are v1, `Later` rows are v2, `Dropped (D-ss-n)` rows are Out of Scope with the decision
|
|
115
|
+
as the reason; the `**ID**` lead keeps every existing parser working
|
|
116
|
+
|
|
117
|
+
```markdown
|
|
118
|
+
### Order Intake (E-01)
|
|
119
|
+
|
|
120
|
+
- [ ] **K-01**: User can create a task — Must · MVP · [03 §2.1]
|
|
121
|
+
- AC: A task appears in the list within one second of saving
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
The planner and verifier read the same rows through `pp_run query discovery.for-phase <N>`
|
|
125
|
+
(`references/discovery-build-consumption.md`); this file is the roadmap-side mirror, not a second
|
|
126
|
+
source.
|
|
127
|
+
|
|
110
128
|
</guidelines>
|
|
111
129
|
|
|
112
130
|
<evolution>
|
|
@@ -69,6 +69,22 @@ behavior_unverified_items: # Only if behavior_unverified > 0 — the truths abov
|
|
|
69
69
|
|
|
70
70
|
**Coverage:** {N}/{M} requirements satisfied
|
|
71
71
|
|
|
72
|
+
## Discovery conformance
|
|
73
|
+
|
|
74
|
+
{Only on a project that ran the Discovery Sprint — omit the whole section otherwise. The block is
|
|
75
|
+
rendered by `pp_run query discovery.for-phase {X} --conformance-template`, one row per Discovery
|
|
76
|
+
register row citing this phase's requirement IDs; the verifier fills Status and Evidence and checks
|
|
77
|
+
it with `--verify`. Status is exactly `honoured`, `amended (D-P<nn>-<n>)` or `missed`; a `missed`
|
|
78
|
+
row is a gap. Contract: `references/discovery-build-consumption.md`.}
|
|
79
|
+
|
|
80
|
+
<!-- discovery:conformance -->
|
|
81
|
+
| Artifact | Row | Status | Evidence |
|
|
82
|
+
|---|---|---|---|
|
|
83
|
+
| `_requirements.md` | {K-01} | honoured | {file:line or test that realises the acceptance criteria} |
|
|
84
|
+
| `_processes.md` | {MP-01 #3} | amended (D-P{XX}-{n}) | {the amended cell the build matches} |
|
|
85
|
+
| `_rules.md` | {BR-02} | missed | {what contradicts or is absent} |
|
|
86
|
+
<!-- /discovery:conformance -->
|
|
87
|
+
|
|
72
88
|
## Anti-Patterns Found
|
|
73
89
|
|
|
74
90
|
| File | Line | Pattern | Severity | Impact |
|
|
@@ -64,7 +64,7 @@ touch "${PHASE_DIR}/.gitkeep"
|
|
|
64
64
|
## Step 5: Commit
|
|
65
65
|
|
|
66
66
|
```bash
|
|
67
|
-
pp_run query commit "docs: add backlog item ${NEXT} — ${ARGUMENTS}" --files .planning/ROADMAP.md "${PHASE_DIR}/.gitkeep"
|
|
67
|
+
pp_run query commit "docs(planning): add backlog item ${NEXT} — ${ARGUMENTS}" --files .planning/ROADMAP.md "${PHASE_DIR}/.gitkeep"
|
|
68
68
|
```
|
|
69
69
|
|
|
70
70
|
## Step 6: Report
|