@pareto4/pp-core 1.19.0 → 1.21.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-nyquist-auditor.md +19 -14
- package/agents/pp-phase-researcher.md +10 -0
- package/agents/pp-plan-checker.md +59 -36
- package/agents/pp-planner.md +49 -53
- package/agents/pp-vault-reviewer.md +2 -0
- package/agents/pp-verifier.md +15 -60
- package/commands/pp-autonomous.md +2 -1
- package/commands/pp-discovery.md +3 -2
- package/commands/pp-plan-phase.md +2 -1
- package/commands/pp-plan-review-convergence.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-activation.cjs +77 -0
- package/pp-core/bin/lib/capability-registry.cjs +15 -15
- package/pp-core/bin/lib/capability-state.cjs +8 -18
- package/pp-core/bin/lib/ceremony.cjs +1342 -0
- package/pp-core/bin/lib/check-command-router.cjs +62 -1
- package/pp-core/bin/lib/commands.cjs +29 -3
- package/pp-core/bin/lib/config.cjs +5 -0
- 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 +8 -7
- package/pp-core/bin/lib/discovery-rules.cjs +216 -0
- package/pp-core/bin/lib/discovery-screens.cjs +1 -1
- 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 +1 -1
- package/pp-core/bin/lib/discovery-table.cjs +55 -0
- package/pp-core/bin/lib/init.cjs +50 -1
- package/pp-core/bin/lib/io.cjs +24 -0
- package/pp-core/bin/lib/loop-resolver.cjs +26 -12
- package/pp-core/bin/lib/phase.cjs +39 -3
- package/pp-core/bin/lib/plan-sizing.cjs +346 -0
- package/pp-core/bin/lib/test-substance.cjs +3190 -0
- package/pp-core/bin/lib/timeline.cjs +605 -0
- package/pp-core/bin/lib/vault-standards-review.cjs +50 -2
- package/pp-core/bin/pp-tools.cjs +214 -5
- package/pp-core/bin/shared/ceremony-gates.json +17 -0
- package/pp-core/bin/shared/config-schema.manifest.json +1 -0
- package/pp-core/references/ceremony.md +81 -0
- 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 +50 -14
- 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/few-shot-examples/plan-checker.md +8 -8
- package/pp-core/references/phase-timeline.md +107 -0
- package/pp-core/references/planner-antipatterns.md +32 -0
- package/pp-core/references/planner-discovery-extract.md +35 -0
- package/pp-core/references/planner-guidance.md +17 -14
- package/pp-core/references/planner-revision.md +1 -1
- package/pp-core/references/planning-config.md +3 -2
- package/pp-core/references/test-substance.md +324 -0
- package/pp-core/references/verifier-discovery-conformance.md +36 -0
- package/pp-core/references/verifier-stub-patterns.md +51 -0
- package/pp-core/templates/VALIDATION.md +1 -0
- package/pp-core/templates/phase-prompt.md +19 -7
- 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/roadmap.md +1 -1
- package/pp-core/templates/verification-report.md +17 -1
- package/pp-core/workflows/audit-milestone.md +4 -1
- package/pp-core/workflows/autonomous.md +11 -8
- package/pp-core/workflows/code-review.md +15 -6
- 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 +10 -0
- package/pp-core/workflows/discovery-sprint/sessions/01-kick-off.md +5 -2
- package/pp-core/workflows/discovery-sprint/sessions/02-as-is.md +27 -5
- package/pp-core/workflows/discovery-sprint/sessions/03-to-be.md +56 -31
- package/pp-core/workflows/discovery-sprint/sessions/04-ux-design.md +1 -1
- package/pp-core/workflows/discovery-sprint/sessions/05-architecture.md +42 -19
- package/pp-core/workflows/discovery-sprint/sessions/06-security.md +27 -12
- package/pp-core/workflows/discovery-sprint/sessions/07-identity.md +41 -23
- package/pp-core/workflows/discovery-sprint/sessions/08-integration.md +50 -23
- package/pp-core/workflows/discovery-sprint/sessions/09-qa.md +26 -11
- package/pp-core/workflows/discovery-sprint/sessions/10-infrastructure.md +28 -9
- package/pp-core/workflows/discovery-sprint/sessions/11-roadmap.md +21 -0
- package/pp-core/workflows/discovery-sprint/sessions/13-wrap-up.md +24 -9
- package/pp-core/workflows/discovery-sprint.md +12 -15
- package/pp-core/workflows/discovery-to-build/steps/architecture-deliverables.md +80 -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.md +10 -7
- package/pp-core/workflows/execute-phase/steps/check-query-gate.md +7 -7
- package/pp-core/workflows/execute-phase/steps/codebase-drift-gate.md +3 -2
- package/pp-core/workflows/execute-phase.md +14 -3
- package/pp-core/workflows/new-project.md +3 -3
- package/pp-core/workflows/plan-phase/steps/chunked-planning.md +7 -3
- package/pp-core/workflows/plan-phase/steps/discovery-extract.md +41 -0
- package/pp-core/workflows/plan-phase/steps/prd-express.md +104 -0
- package/pp-core/workflows/plan-phase.md +62 -124
- package/pp-core/workflows/plan-review-convergence.md +6 -3
- package/pp-core/workflows/ship.md +2 -2
- package/pp-core/workflows/stats.md +19 -4
- package/pp-core/workflows/validate-phase.md +19 -4
- package/pp-core/workflows/vault-review.md +5 -0
- package/pp-core/workflows/verify-phase.md +1 -1
- package/pp-core/workflows/verify-work.md +1 -1
- package/scripts/gen-capability-registry.cjs +43 -45
- package/scripts/run-tests.cjs +54 -30
- package/pp-core/workflows/discovery-sprint/templates/context-template.md +0 -272
|
@@ -5,43 +5,42 @@
|
|
|
5
5
|
|
|
6
6
|
### Session 6: Security & Compliance Setup
|
|
7
7
|
|
|
8
|
-
**Goal:** Define data classification, establish the compliance framework, determine encryption and network access strategies, design audit logging, and set availability SLAs.
|
|
8
|
+
**Goal:** Define data classification, establish the compliance framework, determine encryption and network access strategies, design audit logging, and set availability SLAs — against the client's security and compliance standards.
|
|
9
|
+
|
|
10
|
+
**Standards first.** Where a document this session's `## Vault Context` record names already fixes a classification scheme, a compliance obligation, an encryption, key-management, network, logging or availability rule, do not ask the open question: present the vault's answer — "the vault fixes X `[vault: <path>]` — does this product deviate, and why?" — and record the standard in the **Standards Applied** row for that area. A deviation is one `DEV-<nn>` row of `.planning/discovery/_deviations.md` (template and grammar: `${PP_TOOLS%/bin/pp-tools.cjs}/references/discovery-standards.md`; create the file on first need) plus a Key Decisions row `D-06-<n>`, both cited in the Standards Applied row; never recommend an alternative the standards rule out. An area no standard covers reads `not in vault` and keeps its question open. With no vault bound, every question below stays open-ended.
|
|
9
11
|
|
|
10
12
|
**What We Cover:**
|
|
11
13
|
|
|
12
14
|
1. **Data classification**
|
|
13
15
|
*Why it matters: classification drives every encryption, retention, and access decision below. Skip when: never — even a "no sensitive data" answer is a data point worth recording.*
|
|
14
|
-
-
|
|
16
|
+
- Classification scheme: the vault's compliance standard fixes the levels when bound — the sprint uses them as they are. Otherwise: which scheme does the client follow (public, internal, confidential, restricted)?
|
|
17
|
+
- Which level does each entity of `_entities.md` get?
|
|
15
18
|
- Does the system handle PII (personally identifiable information)?
|
|
16
19
|
- Does the system handle financial, health, or other regulated data?
|
|
17
|
-
- What data classification scheme does the client follow?
|
|
18
20
|
|
|
19
21
|
2. **Compliance framework**
|
|
20
22
|
*Why it matters: named frameworks set hard requirements the architecture and audit design must satisfy. Skip when: internal tool with no external data subjects or regulatory exposure.*
|
|
21
|
-
-
|
|
23
|
+
- Regulatory frameworks: the vault's compliance standard names the ones the client is bound to when bound — which apply to this product beyond them? Otherwise: GDPR, SOC 2, ISO 27001, HIPAA, PCI-DSS? [needs-business-input]
|
|
22
24
|
- Are there industry-specific compliance requirements? [needs-business-input]
|
|
23
25
|
- What is the current compliance posture and certification status?
|
|
24
26
|
- What are the audit requirements and cadence?
|
|
25
27
|
|
|
26
28
|
3. **Encryption strategy**
|
|
27
29
|
*Why it matters: key management choices here constrain infrastructure options in Session 10. Skip when: the key management service of the platform Session 1 recorded already covers requirements with no exceptions.*
|
|
28
|
-
-
|
|
29
|
-
-
|
|
30
|
-
- How will encryption keys be managed (HSM, KMS, Vault)?
|
|
30
|
+
- Encryption at rest and in transit: the vault's security standard fixes both when bound — does this product deviate, and why? Otherwise: AES-256, TDE; TLS 1.2+, mTLS?
|
|
31
|
+
- Key management: the vault fixes the key service when bound — does this product deviate? Otherwise: HSM, KMS, Vault?
|
|
31
32
|
- Are there requirements for field-level or application-level encryption?
|
|
32
33
|
|
|
33
34
|
4. **Network and access security**
|
|
34
35
|
*Why it matters: perimeter decisions shape the infrastructure architecture built in Session 10. Skip when: internal-only tool behind an existing corporate VPN with no new exposure.*
|
|
35
|
-
-
|
|
36
|
-
- What perimeter security requirements exist (WAF, DDoS protection)?
|
|
36
|
+
- Network segmentation and perimeter: the vault's governance standard fixes them when bound — does this product deviate? Otherwise: VPCs, subnets, firewalls; WAF, DDoS protection?
|
|
37
37
|
- How will IP whitelisting or geo-blocking be handled?
|
|
38
38
|
- What VPN or private connectivity requirements exist?
|
|
39
39
|
|
|
40
40
|
5. **Audit logging and monitoring**
|
|
41
41
|
*Why it matters: logging requirements feed Session 10's monitoring/alerting design. Skip when: no compliance or audit obligation drives logging beyond application defaults.*
|
|
42
|
-
-
|
|
43
|
-
-
|
|
44
|
-
- What SIEM or security monitoring tool will be used?
|
|
42
|
+
- Audit events and retention: the vault's security standard fixes the audit trail when bound — does this product deviate, and what does it add? Otherwise: which events (login, data access, admin actions) and how long?
|
|
43
|
+
- Security monitoring: the vault fixes the platform's SIEM when bound — does this product deviate? Otherwise: which tool?
|
|
45
44
|
- How will security incidents be detected and escalated?
|
|
46
45
|
|
|
47
46
|
6. **Availability and SLAs**
|
|
@@ -53,12 +52,28 @@
|
|
|
53
52
|
|
|
54
53
|
**Notes Template:**
|
|
55
54
|
|
|
55
|
+
**Standards Applied**
|
|
56
|
+
|
|
57
|
+
| Area | Standard | Deviation | Decision |
|
|
58
|
+
|------|----------|-----------|----------|
|
|
59
|
+
| Data classification scheme | | | |
|
|
60
|
+
| Compliance frameworks | | | |
|
|
61
|
+
| Encryption at rest and in transit | | | |
|
|
62
|
+
| Secrets and key management | | | |
|
|
63
|
+
| Network and perimeter | | | |
|
|
64
|
+
| Audit logging and retention | | | |
|
|
65
|
+
| Backup, availability and DR | | | |
|
|
66
|
+
|
|
67
|
+
**Standard** is the governing document's `[vault: <rel path>]` citation, or `not in vault`. **Deviation** is `none` or the `DEV-<nn>` of the `_deviations.md` row. **Decision** is `—` or the `D-06-<n>` that records the deviation or the decision taken for an uncovered area (`references/discovery-standards.md`).
|
|
68
|
+
|
|
56
69
|
**Data Classification Matrix**
|
|
57
70
|
|
|
58
71
|
| Data Entity | Classification | PII | Regulated | Encryption Required | Retention Period | Notes |
|
|
59
72
|
|-------------|----------------|-----|-----------|--------------------|--------------------|-------|
|
|
60
73
|
| | | | | | | |
|
|
61
74
|
|
|
75
|
+
**Data Entity** is an entity of `.planning/discovery/_entities.md`, spelled the same; **Classification** is one of the vault's four levels — `Public`, `Internal`, `Confidential`, `Restricted` (`[vault: security/compliance.md]` when bound). Copy every row's Classification and Retention Period into that entity's `_entities.md` row (its `—` cells from Sessions 2–5), then run `pp_run query discovery.entity-check` — exit 0, or fix the rows it names. The data model is what the build and the charter § 8 read; this matrix keeps the PII, regulation and encryption facts beside it.
|
|
76
|
+
|
|
62
77
|
**Compliance Requirements Register**
|
|
63
78
|
|
|
64
79
|
| ID | Framework | Requirement | Applicability | Current Status | Gap | Action Required |
|
|
@@ -5,23 +5,27 @@
|
|
|
5
5
|
|
|
6
6
|
### Session 7: User & Identity Management
|
|
7
7
|
|
|
8
|
-
**Goal:**
|
|
8
|
+
**Goal:** Record the roles and what each may do in `_roles.md`, plan Identity Provider (IdP) integration, define the user lifecycle, and map authentication and authorization flows — against the client's identity and security standards.
|
|
9
|
+
|
|
10
|
+
**Inputs — read before topic 1.** `session-02.md` **User Personas**; `.planning/discovery/_processes.md` § Steps (the `Actor` column — every role is an actor the process already has); `.planning/discovery/_entities.md` § Entities; `.planning/discovery/_screens.md` § Screens; `_requirements.md`.
|
|
11
|
+
|
|
12
|
+
**Standards first.** Where a document this session's `## Vault Context` record names already fixes the identity provider, the authentication protocol, the authorization model, role recovery, session or token rules, do not ask the open question: present the vault's answer — "the vault fixes X `[vault: <path>]` — does this product deviate, and why?" — and record the standard in the **Standards Applied** row for that area. A deviation is one `DEV-<nn>` row of `.planning/discovery/_deviations.md` (template and grammar: `${PP_TOOLS%/bin/pp-tools.cjs}/references/discovery-standards.md`; create the file on first need) plus a Key Decisions row `D-07-<n>`, both cited in the Standards Applied row; never recommend an alternative the standards rule out. An area no standard covers reads `not in vault` and keeps its question open. With no vault bound, every question below stays open-ended.
|
|
9
13
|
|
|
10
14
|
**What We Cover:**
|
|
11
15
|
|
|
12
|
-
1. **
|
|
13
|
-
*Why it matters:
|
|
14
|
-
-
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
- Do permissions vary by data scope (e.g., a manager sees only their department's data)?
|
|
16
|
+
1. **Roles and permissions**
|
|
17
|
+
*Why it matters: `_roles.md` is what Sessions 8/9 test authorization against and what the build's auth phase and forbidden-path tests read. Skip when: a single-role application with no differentiated access — record the one role.*
|
|
18
|
+
- Propose the roles from the actors the Session 3 step matrices name and the Session 2 personas; the client confirms, merges or renames. A role is a persona, a step-matrix actor or `System`, spelled the same — `roles-check` refuses a role nobody plays.
|
|
19
|
+
- For each role and entity it touches: which operations (`create`, `read`, `update`, `delete`, `assign`, `export`, …), under which condition (own team only, assignee or lead), realising which requirements? One `## Permissions` row per role and entity.
|
|
20
|
+
- What is each role's data scope, and how is the role recovered when its last holder leaves or is locked out? The vault's security standard fixes role recovery when bound — does this product deviate?
|
|
18
21
|
- How will role assignment and delegation work?
|
|
22
|
+
- Write `.planning/discovery/_roles.md` § Roles and § Permissions — create the file from the template in `${PP_TOOLS%/bin/pp-tools.cjs}/references/discovery-access.md` on first need — then run `pp_run query discovery.roles-check` — exit 0, or fix the rows it names.
|
|
19
23
|
|
|
20
24
|
2. **Identity Provider (IdP) integration**
|
|
21
25
|
*Why it matters: IdP choice determines auth flow complexity and Session 10 infra dependencies. Skip when: the client mandates a single existing IdP with no alternatives to weigh.*
|
|
22
|
-
-
|
|
26
|
+
- Identity provider: the vault's security standard fixes it when bound — does this product deviate, and why? Otherwise: Azure AD / Entra ID, Okta, Auth0, Keycloak?
|
|
23
27
|
- Will the solution federate with the existing IdP or manage its own user store?
|
|
24
|
-
-
|
|
28
|
+
- SSO and protocol: the vault fixes them when bound — does this product deviate? Otherwise: SAML 2.0 or OIDC?
|
|
25
29
|
- Are there multiple IdPs for different user populations (internal vs. external)?
|
|
26
30
|
|
|
27
31
|
3. **User lifecycle management**
|
|
@@ -33,28 +37,42 @@
|
|
|
33
37
|
|
|
34
38
|
4. **Authentication flows**
|
|
35
39
|
*Why it matters: authentication method choice affects UX (Session 4) and compliance (Session 6). Skip when: a platform-standard SSO is mandatory with no other options.*
|
|
36
|
-
-
|
|
37
|
-
-
|
|
38
|
-
-
|
|
39
|
-
-
|
|
40
|
+
- Authentication methods and MFA: the vault's security standard fixes them when bound — does this product deviate? Otherwise: password, MFA, biometric, certificate; MFA for whom?
|
|
41
|
+
- Session and tokens: the vault fixes lifetimes, refresh and revocation when bound — does this product deviate? Otherwise: token lifetime, refresh, idle timeout?
|
|
42
|
+
- How is password policy enforced (complexity, rotation, history) — when the IdP does not own it?
|
|
43
|
+
- Which role may open which screen? Write one `## Screens` row per role and `SCR-nn` into `_roles.md` from `_screens.md`; the forbidden-path tests are written from these rows.
|
|
40
44
|
|
|
41
45
|
5. **Authorization patterns**
|
|
42
46
|
*Why it matters: fine-grained authorization design directly shapes API contract work in Session 8. Skip when: RBAC alone (Topic 1) is sufficient with no attribute-based rules needed.*
|
|
43
|
-
- How are fine-grained permissions evaluated (attribute-based, policy-based)?
|
|
47
|
+
- How are fine-grained permissions evaluated (attribute-based, policy-based)? The `Condition` column of `_roles.md` § Permissions carries the answer per permission.
|
|
44
48
|
- Are there data-level access controls (row-level security, field masking)?
|
|
45
|
-
-
|
|
46
|
-
-
|
|
49
|
+
- API protection: the vault's API rules fix auth per operation when bound — does this product deviate? Otherwise: OAuth 2.0 scopes, API keys?
|
|
50
|
+
- Service-to-service authentication: the vault fixes it when bound — does this product deviate? Otherwise: which approach?
|
|
47
51
|
|
|
48
52
|
**Notes Template:**
|
|
49
53
|
|
|
50
|
-
**
|
|
54
|
+
> **Artifact this session creates (first run only):** copy the bootstrap template verbatim, replacing `[PROJECT_NAME]` — `.planning/discovery/_roles.md` from `${PP_TOOLS%/bin/pp-tools.cjs}/references/discovery-access.md`. It is the canonical access model; the table below summarises it and is never the place a fact is first written.
|
|
55
|
+
|
|
56
|
+
**Standards Applied**
|
|
57
|
+
|
|
58
|
+
| Area | Standard | Deviation | Decision |
|
|
59
|
+
|------|----------|-----------|----------|
|
|
60
|
+
| Identity provider and SSO | | | |
|
|
61
|
+
| Authentication protocol and MFA | | | |
|
|
62
|
+
| Authorization model | | | |
|
|
63
|
+
| Role recovery | | | |
|
|
64
|
+
| Session and token handling | | | |
|
|
65
|
+
| Service-to-service authentication | | | |
|
|
66
|
+
|
|
67
|
+
**Standard** is the governing document's `[vault: <rel path>]` citation, or `not in vault`. **Deviation** is `none` or the `DEV-<nn>` of the `_deviations.md` row. **Decision** is `—` or the `D-07-<n>` that records the deviation or the decision taken for an uncovered area (`references/discovery-standards.md`).
|
|
68
|
+
|
|
69
|
+
**Roles**
|
|
70
|
+
|
|
71
|
+
The canonical rows live in `.planning/discovery/_roles.md` — § Roles (`Role | Description | Scope | Recovery path | Source`), § Permissions (one row per role and entity, operations as a list, condition, requirements) and § Screens (`Role | Screen`). This table is a reading summary — one row per role, never the place a fact is first written:
|
|
51
72
|
|
|
52
|
-
| Role |
|
|
53
|
-
|
|
54
|
-
|
|
|
55
|
-
| Manager | | | | | |
|
|
56
|
-
| User | | | | | |
|
|
57
|
-
| Viewer | | | | | |
|
|
73
|
+
| Role | Permissions in one line | Data scope |
|
|
74
|
+
|------|-------------------------|------------|
|
|
75
|
+
| | | |
|
|
58
76
|
|
|
59
77
|
**IdP Integration Design**
|
|
60
78
|
|
|
@@ -5,64 +5,85 @@
|
|
|
5
5
|
|
|
6
6
|
### Session 8: Integration & Interface Design
|
|
7
7
|
|
|
8
|
-
**Goal:**
|
|
8
|
+
**Goal:** Complete the interfaces Session 5 registered in `_integrations.md` — protocols, contracts, error handling, idempotency — against the client's integration standards, and design the data migration and cut-over in `_migration.md`.
|
|
9
|
+
|
|
10
|
+
**Inputs — read before topic 1.** `.planning/discovery/_integrations.md` § Interfaces (the `IF-` rows Session 5 minted); `.planning/discovery/_processes.md` § Steps (the `Integration` cells); `.planning/discovery/_migration.md` when Session 2 created it; `session-05.md` **Component Inventory**; `_requirements.md`.
|
|
11
|
+
|
|
12
|
+
**Standards first.** Where a document this session's `## Vault Context` record names already fixes an integration pattern, API exposure, contract and versioning rules, error handling, idempotency or monitoring, do not ask the open question: present the vault's answer — "the vault fixes X `[vault: <path>]` — does this product deviate, and why?" — and record the standard in the **Standards Applied** row for that area. A deviation is one `DEV-<nn>` row of `.planning/discovery/_deviations.md` (template and grammar: `${PP_TOOLS%/bin/pp-tools.cjs}/references/discovery-standards.md`; create the file on first need) plus a Key Decisions row `D-08-<n>`, both cited in the Standards Applied row; never recommend an alternative the standards rule out. An area no standard covers reads `not in vault` and keeps its question open. With no vault bound, every question below stays open-ended.
|
|
9
13
|
|
|
10
14
|
**What We Cover:**
|
|
11
15
|
|
|
12
16
|
1. **External systems inventory**
|
|
13
17
|
*Why it matters: this is the master list every interface pattern, error strategy, and SLA below is defined against. Skip when: no external integrations exist for this solution.*
|
|
14
|
-
-
|
|
18
|
+
- Walk the `IF-` rows of `_integrations.md` § Interfaces: is the list complete, is every step matrix `Integration` cell linked to one? Add a row for a system Session 5 missed — never a second numbering.
|
|
15
19
|
- For each system, who is the technical owner and what is their availability?
|
|
16
20
|
- What is the maturity of each system's API (well-documented, legacy, in development)?
|
|
17
21
|
- Are there licensing or access constraints for any system?
|
|
18
22
|
|
|
19
23
|
2. **Interface patterns and protocols**
|
|
20
24
|
*Why it matters: protocol choices determine what the dev team must build and test. Skip when: a single well-established pattern (e.g. REST) already applies to every integration.*
|
|
21
|
-
-
|
|
22
|
-
-
|
|
23
|
-
-
|
|
24
|
-
- How will API versioning be handled?
|
|
25
|
+
- Pattern and protocol per interface: the vault's integration and inter-service rules fix them when bound (sync versus async, API exposure) — does this product deviate, and why? Otherwise: request/reply, publish/subscribe, file transfer, webhook; REST, SOAP, gRPC, SFTP, AMQP? Fill `Protocol` on the `IF-` row.
|
|
26
|
+
- Middleware: the vault fixes API exposure through a gateway when bound — does this product deviate? Otherwise: integration middleware or ESB?
|
|
27
|
+
- API versioning: the vault's API rules fix it when bound — does this product deviate? Otherwise: which scheme?
|
|
25
28
|
|
|
26
29
|
3. **Data exchange formats and contracts**
|
|
27
30
|
*Why it matters: format/contract decisions prevent breaking changes once integration work begins. Skip when: contracts already exist and are stable (e.g. a documented OpenAPI spec).*
|
|
28
|
-
-
|
|
29
|
-
-
|
|
30
|
-
-
|
|
31
|
+
- Format per interface: the vault's API rules fix it when bound — does this product deviate? Otherwise: JSON, XML, CSV, Avro, Protobuf? Fill `Format` on the `IF-` row.
|
|
32
|
+
- Contract definition: the vault fixes OpenAPI when bound — does this product deviate? Otherwise: OpenAPI, JSON Schema, WSDL?
|
|
33
|
+
- Which fields does each interface exchange, with which type, mapping and validation? One `## Contract` row per field in `_integrations.md`.
|
|
31
34
|
- How will schema evolution and backward compatibility be handled?
|
|
32
35
|
|
|
33
36
|
4. **Error handling and retry strategy**
|
|
34
37
|
*Why it matters: undefined retry/failure behavior becomes a production incident during go-live. Skip when: never — always define at least a default policy.*
|
|
35
|
-
-
|
|
38
|
+
- Failure handling: the vault's integration rules fix failures and monitoring when bound — does this product deviate? Otherwise: retry, dead-letter queue, manual intervention?
|
|
36
39
|
- What retry policies apply (exponential backoff, max retries, circuit breaker)?
|
|
40
|
+
- Which failures can each interface meet, and how is each handled, retried, dead-lettered and alerted? One `## Errors` row per failure in `_integrations.md`.
|
|
37
41
|
- How will failed messages be monitored and reprocessed?
|
|
38
|
-
- What alerting is needed for integration failures?
|
|
39
42
|
|
|
40
43
|
5. **Data synchronization and consistency**
|
|
41
44
|
*Why it matters: the consistency model choice affects correctness guarantees the QA plan (Session 9) must test. Skip when: all integrations are synchronous request/reply with no async sync needed.*
|
|
42
45
|
- What is the consistency model (eventual consistency, strong consistency)?
|
|
43
|
-
- How will data conflicts between systems be resolved?
|
|
44
|
-
-
|
|
46
|
+
- How will data conflicts between systems be resolved? The vault's integration rules fix the source of truth and business keys when bound — does this product deviate?
|
|
47
|
+
- Idempotency per interface: the vault's API rules fix it when bound — does this product deviate? Otherwise: which key and window? Fill `Idempotency` on the `IF-` row, then run `pp_run query discovery.integrations-check --require-cited` — exit 0, or fix the rows it names.
|
|
45
48
|
- Are there batch synchronization requirements (daily feeds, nightly reconciliation)?
|
|
46
49
|
|
|
50
|
+
6. **Migration and cut-over**
|
|
51
|
+
*Why it matters: Session 2 named the data that moves; without a mapping, a cut-over strategy and a reconciliation the migration phase cannot be planned or proven. Skip when: `_migration.md` does not exist — nothing moves.*
|
|
52
|
+
- For each `MG-` row of `.planning/discovery/_migration.md`: how does each source field map onto the target entity, and which values need cleaning or translation?
|
|
53
|
+
- Cut-over: big bang, parallel run or phased per entity? When does the source system go read-only, and what is the rollback?
|
|
54
|
+
- Reconciliation: which counts, totals and spot checks prove the move, and who signs it off?
|
|
55
|
+
- Which requirements does each row realise? Back-fill `Requirements`, fill `Mapping`, `Cut-over` and `Reconciliation`, then run `pp_run query discovery.migration-check --require-cited` — exit 0, or fix the rows it names.
|
|
56
|
+
|
|
47
57
|
**Notes Template:**
|
|
48
58
|
|
|
59
|
+
**Standards Applied**
|
|
60
|
+
|
|
61
|
+
| Area | Standard | Deviation | Decision |
|
|
62
|
+
|------|----------|-----------|----------|
|
|
63
|
+
| Integration pattern (sync / async) | | | |
|
|
64
|
+
| API exposure and gateway | | | |
|
|
65
|
+
| Contracts and versioning | | | |
|
|
66
|
+
| Error handling and retries | | | |
|
|
67
|
+
| Idempotency | | | |
|
|
68
|
+
| Integration monitoring | | | |
|
|
69
|
+
|
|
70
|
+
**Standard** is the governing document's `[vault: <rel path>]` citation, or `not in vault`. **Deviation** is `none` or the `DEV-<nn>` of the `_deviations.md` row. **Decision** is `—` or the `D-08-<n>` that records the deviation or the decision taken for an uncovered area (`references/discovery-standards.md`).
|
|
71
|
+
|
|
49
72
|
**Integration Design Register**
|
|
50
73
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
|
74
|
+
The canonical rows live in `.planning/discovery/_integrations.md` § Interfaces (`IF-<nn>` — `references/discovery-integrations.md`), completed in this session. This table is a reading summary — one row per interface, never the place a fact is first written:
|
|
75
|
+
|
|
76
|
+
| Interface ID | Interface name | What the register row does not hold (frequency, SLA, versioning) |
|
|
77
|
+
|--------------|----------------|-------------------------------------------------------------------|
|
|
78
|
+
| IF-01 | | |
|
|
54
79
|
|
|
55
80
|
**Data Transformation Map**
|
|
56
81
|
|
|
57
|
-
|
|
58
|
-
|-----------|------------|-------------|---------------------|------------|-------|
|
|
59
|
-
| IF-01 | | | | | |
|
|
82
|
+
The field-level contract lives in `.planning/discovery/_integrations.md` § Contract (`Interface | Field | Type | Required | Mapping | Validation`). Record here only what the contract table cannot hold — schema evolution, compatibility rules, the contract artifact's location (OpenAPI file, schema registry).
|
|
60
83
|
|
|
61
84
|
**Error Handling Strategy**
|
|
62
85
|
|
|
63
|
-
|
|
64
|
-
|-----------|-----------------|-----------------|-------------|-------------|-------|------------|
|
|
65
|
-
| IF-01 | | | | | | |
|
|
86
|
+
The failures live in `.planning/discovery/_integrations.md` § Errors (`Interface | Failure | Handling | Retry | Dead letter | Alert`). Record here only the escalation path and the reprocessing procedure the table cannot hold.
|
|
66
87
|
|
|
67
88
|
**Data Synchronization Approach**
|
|
68
89
|
|
|
@@ -70,6 +91,10 @@
|
|
|
70
91
|
|-------------|-------------|--------------|-------------|-----------|--------------------|-----------------|
|
|
71
92
|
| | | | | | | |
|
|
72
93
|
|
|
94
|
+
**Migration and Cut-over**
|
|
95
|
+
|
|
96
|
+
The canonical rows live in `.planning/discovery/_migration.md` § Migration (`MG-<nn>` — `references/discovery-integrations.md` § `_migration.md`), completed in topic 6. Record here the cut-over timeline and who signs the reconciliation; write `None identified in Discovery.` when nothing moves.
|
|
97
|
+
|
|
73
98
|
**Key Decisions**
|
|
74
99
|
|
|
75
100
|
| ID | Decision | Rationale | Owner | Date |
|
|
@@ -92,4 +117,6 @@ Filled by the Closing Step below: the findings count by severity, each fix appli
|
|
|
92
117
|
|
|
93
118
|
1. Read `${PP_TOOLS%/bin/pp-tools.cjs}/workflows/discovery-sprint/sessions/13-wrap-up.md` § **Step 0** and run 0a to 0e over Sessions 1–8 only: the **Business Functional** and **Technical** groups. Skip the engine gates and the checklist rows that need Sessions 9–12.
|
|
94
119
|
2. Check every amended decision against the back-amend rule (Flow 2 Step 6): the original line carries `→ amended by D-<ss>-<n>`. Fix any line that does not.
|
|
95
|
-
3.
|
|
120
|
+
3. Run the artifact checks: `pp_run query discovery.entity-check`, `pp_run query discovery.process-check`, `pp_run query discovery.rules-check`, `pp_run query discovery.roles-check`, `pp_run query discovery.integrations-check`, `pp_run query discovery.migration-check` and `pp_run query discovery.deviations-check`. Each exits 0 or names the rows to fix — fix them now, in the artifact, before Sessions 9–12 build on them. An artifact that does not exist exits 0 by itself; the strict flags (`--require-cited`, `--require-approved`) belong to the handoff, not here.
|
|
121
|
+
4. Record the results in this session's **Mid-Sprint Cross-Reference** notes. Session 13 re-checks the findings left open here.
|
|
122
|
+
5. Run `pp_run query discovery.session-check --all` over Sessions 1–8: every Notes Template section present once with a data row, prose or `None identified in Discovery.` (`references/discovery-session-output.md`). Non-zero → fill the sections it names in their session file, now, before Sessions 9–12 read them.
|
|
@@ -5,35 +5,35 @@
|
|
|
5
5
|
|
|
6
6
|
### Session 9: Quality Assurance & Testing Strategy
|
|
7
7
|
|
|
8
|
-
**Goal:** Define the overall test strategy,
|
|
8
|
+
**Goal:** Define the overall test strategy, confirm the testing tooling and quality gates against the client's standards, plan test environments, and design the UAT approach.
|
|
9
|
+
|
|
10
|
+
**Standards first.** Where a document this session's `## Vault Context` record names already fixes a test level, a coverage bar, a tool, the environments, a merge or release gate, do not ask the open question: present the vault's answer — "the vault fixes X `[vault: <path>]` — does this product deviate, and why?" — and record the standard in the **Standards Applied** row for that area. A deviation is one `DEV-<nn>` row of `.planning/discovery/_deviations.md` (template and grammar: `${PP_TOOLS%/bin/pp-tools.cjs}/references/discovery-standards.md`; create the file on first need) plus a Key Decisions row `D-09-<n>`, both cited in the Standards Applied row; never recommend an alternative the standards rule out. An area no standard covers reads `not in vault` and keeps its question open. With no vault bound, every question below stays open-ended.
|
|
9
11
|
|
|
10
12
|
**What We Cover:**
|
|
11
13
|
|
|
12
14
|
1. **Test strategy and approach**
|
|
13
15
|
*Why it matters: sets the coverage bar every EPIC (Session 3) gets built and verified against. Skip when: the client has an existing enterprise test strategy this project simply inherits.*
|
|
14
|
-
-
|
|
15
|
-
- What is the expected test coverage target for each level?
|
|
16
|
+
- Test levels and coverage: the vault's coding standards and quality gates fix them when bound — does this product deviate, and why? Otherwise: unit, integration, system, E2E, performance, security, and which target per level?
|
|
16
17
|
- How will TDD or BDD be applied?
|
|
17
18
|
- What is the approach to regression testing?
|
|
18
19
|
- How will non-functional testing be addressed (load, stress, soak, accessibility)?
|
|
19
20
|
|
|
20
21
|
2. **Testing tools and frameworks**
|
|
21
|
-
*Why it matters: tooling choice affects CI/CD pipeline design in Session 10. Skip when:
|
|
22
|
-
-
|
|
23
|
-
-
|
|
24
|
-
-
|
|
25
|
-
- What security testing tools will be applied (OWASP ZAP, Snyk, SonarQube)?
|
|
22
|
+
*Why it matters: tooling choice affects CI/CD pipeline design in Session 10. Skip when: the vault's stack and quality gates fix every tool and the client deviates nowhere — record the rows and move on.*
|
|
23
|
+
- Unit and E2E tooling: the vault's language standards fix the frameworks when bound — does this product deviate? Otherwise: Jest, xUnit, JUnit, PyTest; Cypress, Playwright, Selenium?
|
|
24
|
+
- Performance tooling: the vault's sizing and release rules fix the performance test when bound — does this product deviate? Otherwise: k6, JMeter, Gatling?
|
|
25
|
+
- Security scanning: the vault's quality gates fix the scanners when bound — does this product deviate, and with which substitute? Otherwise: OWASP ZAP, Snyk, SonarQube?
|
|
26
26
|
|
|
27
27
|
3. **Test environments**
|
|
28
28
|
*Why it matters: environment count and refresh cadence feed Session 10's infrastructure sizing. Skip when: a single shared environment is acceptable for this scale of project.*
|
|
29
|
-
- How many test environments are needed (dev, test, staging, pre-prod)
|
|
29
|
+
- How many test environments are needed? When a vault is bound, start from the environments its naming standard defines and record only deviations; otherwise choose (dev, test, staging, pre-prod).
|
|
30
30
|
- How will test data be provisioned (synthetic data, anonymized production data, seed scripts)?
|
|
31
31
|
- How will environments be kept in sync with production?
|
|
32
32
|
|
|
33
33
|
4. **Quality gates and CI/CD integration**
|
|
34
34
|
*Why it matters: gates here become the literal pass/fail criteria in Session 10's deployment pipeline. Skip when: never — always define at least a minimal merge gate.*
|
|
35
|
-
-
|
|
36
|
-
-
|
|
35
|
+
- Merge gates: the vault's quality gates fix them when bound — does this product deviate, and why? Otherwise: code review, linting, unit tests, coverage threshold?
|
|
36
|
+
- Release gates: the vault's release rules fix them when bound — does this product deviate? Otherwise: what must pass before a release is promoted?
|
|
37
37
|
- How will automated testing be integrated into the CI/CD pipeline?
|
|
38
38
|
|
|
39
39
|
5. **UAT approach**
|
|
@@ -45,6 +45,19 @@
|
|
|
45
45
|
|
|
46
46
|
**Notes Template:**
|
|
47
47
|
|
|
48
|
+
**Standards Applied**
|
|
49
|
+
|
|
50
|
+
| Area | Standard | Deviation | Decision |
|
|
51
|
+
|------|----------|-----------|----------|
|
|
52
|
+
| Test levels and coverage | | | |
|
|
53
|
+
| Test tooling | | | |
|
|
54
|
+
| Environments | | | |
|
|
55
|
+
| Merge gates | | | |
|
|
56
|
+
| Release gates | | | |
|
|
57
|
+
| UAT and sign-off | | | |
|
|
58
|
+
|
|
59
|
+
**Standard** is the governing document's `[vault: <rel path>]` citation, or `not in vault`. **Deviation** is `none` or the `DEV-<nn>` of the `_deviations.md` row. **Decision** is `—` or the `D-09-<n>` that records the deviation or the decision taken for an uncovered area (`references/discovery-standards.md`).
|
|
60
|
+
|
|
48
61
|
**Test Strategy Matrix**
|
|
49
62
|
|
|
50
63
|
| Test Level | Scope | Coverage Target | Automation Level | Tools | Responsible | When Executed |
|
|
@@ -68,6 +81,8 @@
|
|
|
68
81
|
|
|
69
82
|
**Test Environment Plan**
|
|
70
83
|
|
|
84
|
+
> **Environments:** when the bound vault names the environments (its naming standard, cited `[vault: <path>]` in this session's record), the rows below carry those names, in the vault's promotion order, and no others — an extra or renamed environment is a Key Decisions row `D-09-<n>`. The preset rows stand only when no vault is bound.
|
|
85
|
+
|
|
71
86
|
| Environment | Purpose | Data Strategy | Refresh Cadence | Access | Infrastructure | Owner |
|
|
72
87
|
|-------------|---------|---------------|-----------------|--------|---------------|-------|
|
|
73
88
|
| Dev | | | | | | |
|
|
@@ -5,7 +5,9 @@
|
|
|
5
5
|
|
|
6
6
|
### Session 10: Infrastructure & Deployment Readiness
|
|
7
7
|
|
|
8
|
-
**Goal:**
|
|
8
|
+
**Goal:** Confirm the hosting, deployment, monitoring and recovery approach against the client's platform standards, record the deviations, and assess go-live readiness criteria.
|
|
9
|
+
|
|
10
|
+
**Standards first.** Where a document this session's `## Vault Context` record names already fixes the hosting platform, the pipeline, infrastructure as code, naming, monitoring, backup or recovery, do not ask the open question: present the vault's answer — "the vault fixes X `[vault: <path>]` — does this product deviate, and why?" — and record the standard in the **Standards Applied** row for that area. A deviation is one `DEV-<nn>` row of `.planning/discovery/_deviations.md` (template and grammar: `${PP_TOOLS%/bin/pp-tools.cjs}/references/discovery-standards.md`; create the file on first need) plus a Key Decisions row `D-10-<n>`, both cited in the Standards Applied row; never recommend an alternative the standards rule out. An area no standard covers reads `not in vault` and keeps its question open. With no vault bound, every question below stays open-ended.
|
|
9
11
|
|
|
10
12
|
**What We Cover:**
|
|
11
13
|
|
|
@@ -19,24 +21,24 @@
|
|
|
19
21
|
|
|
20
22
|
2. **Deployment strategy**
|
|
21
23
|
*Why it matters: deployment model determines rollback risk and go-live readiness criteria (Session 13). Skip when: the mandated platform's CI/CD pipeline already fixes this by default.*
|
|
22
|
-
-
|
|
23
|
-
-
|
|
24
|
-
-
|
|
25
|
-
-
|
|
26
|
-
- What is the approach to containerization (the platform's managed container or Kubernetes service, Kubernetes on-premises, or none)?
|
|
24
|
+
- Deployment model: the vault's release rules fix stages and gates when bound — does this product deviate? Otherwise: blue-green, canary, rolling, immutable?
|
|
25
|
+
- Pipeline structure and tool: the vault's pipeline standard fixes them when bound — does this product deviate? Otherwise: GitHub Actions, GitLab CI, Azure DevOps, Jenkins? Take the platform's pipeline when Session 1 recorded one.
|
|
26
|
+
- Infrastructure as code: the vault's IaC standard fixes it when bound — does this product deviate? Otherwise: Terraform, Pulumi, CloudFormation?
|
|
27
|
+
- Resource naming: the vault's naming convention fixes it when bound — record the standard; a name outside it is a deviation.
|
|
28
|
+
- What is the approach to containerization (the platform's managed container or Kubernetes service, Kubernetes on-premises, or none)? The vault's container rules apply when bound.
|
|
27
29
|
|
|
28
30
|
3. **Monitoring, logging, and alerting**
|
|
29
31
|
*Why it matters: alerting design determines who gets paged and how incidents are caught pre-go-live. Skip when: the mandated platform's observability stack already covers requirements.*
|
|
30
|
-
-
|
|
32
|
+
- Monitoring platform: the vault's default stack fixes observability when bound — does this product deviate? Otherwise: the platform's native monitoring and logging, or Datadog, New Relic, Grafana?
|
|
31
33
|
- What metrics will be tracked (latency, error rate, throughput, saturation)?
|
|
32
34
|
- What is the alerting strategy (thresholds, escalation chains, on-call rotation)?
|
|
33
35
|
- How will application logs be aggregated and queried?
|
|
34
36
|
|
|
35
37
|
4. **Backup and disaster recovery**
|
|
36
38
|
*Why it matters: DR strategy directly answers Session 6's RTO/RPO targets with a concrete implementation. Skip when: non-critical internal tool with no formal DR requirement.*
|
|
37
|
-
-
|
|
39
|
+
- Backup strategy: the vault's governance and compliance rules fix frequency, retention and location when bound — does this product deviate? Otherwise: which?
|
|
38
40
|
- How will backups be tested and validated?
|
|
39
|
-
-
|
|
41
|
+
- DR strategy: the vault fixes the tier per criticality when bound — does this product deviate? Otherwise: active-passive, active-active, pilot light?
|
|
40
42
|
- How often will DR drills be conducted?
|
|
41
43
|
|
|
42
44
|
5. **Go-live readiness criteria**
|
|
@@ -50,6 +52,21 @@
|
|
|
50
52
|
|
|
51
53
|
> **Platform:** fill the tables below against the platform Session 1 recorded (its `D-01-<n>` platform decision, citing the vault's platform standard when there is one): its cloud provider, CI/CD pipeline and observability stack. A choice that departs from it is a Key Decisions row `D-10-<n>`. When Session 1 recorded the platform as open, the choices are made here.
|
|
52
54
|
|
|
55
|
+
**Standards Applied**
|
|
56
|
+
|
|
57
|
+
| Area | Standard | Deviation | Decision |
|
|
58
|
+
|------|----------|-----------|----------|
|
|
59
|
+
| Hosting platform and landing zone | | | |
|
|
60
|
+
| Environments and promotion | | | |
|
|
61
|
+
| CI/CD pipeline | | | |
|
|
62
|
+
| Infrastructure as code | | | |
|
|
63
|
+
| Resource naming | | | |
|
|
64
|
+
| Monitoring and alerting | | | |
|
|
65
|
+
| Backup and disaster recovery | | | |
|
|
66
|
+
| Sizing and cost | | | |
|
|
67
|
+
|
|
68
|
+
**Standard** is the governing document's `[vault: <rel path>]` citation, or `not in vault`. **Deviation** is `none` or the `DEV-<nn>` of the `_deviations.md` row. **Decision** is `—` or the `D-10-<n>` that records the deviation or the decision taken for an uncovered area (`references/discovery-standards.md`).
|
|
69
|
+
|
|
53
70
|
**Infrastructure Architecture**
|
|
54
71
|
|
|
55
72
|
| Component | Service / Product | Region | Tier / SKU | Redundancy | Est. Monthly Cost | Notes |
|
|
@@ -62,6 +79,8 @@
|
|
|
62
79
|
|
|
63
80
|
**Deployment Pipeline Design**
|
|
64
81
|
|
|
82
|
+
> **Environments:** the deploy stages name the environments Session 9's Test Environment Plan recorded — the bound vault's names when one is bound (its naming standard, cited `[vault: <path>]`), one `Deploy to <env>` row per environment in promotion order. The preset rows stand only when no vault is bound.
|
|
83
|
+
|
|
65
84
|
| Stage | Trigger | Actions | Quality Gate | Environment | Duration |
|
|
66
85
|
|-------|---------|---------|-------------|-------------|----------|
|
|
67
86
|
| Build | | | | | |
|
|
@@ -29,6 +29,7 @@
|
|
|
29
29
|
- What are the technical dependencies between EPICs?
|
|
30
30
|
- Are there infrastructure or integration prerequisites that must be ready first?
|
|
31
31
|
- What is the critical path?
|
|
32
|
+
- Which requirement IDs does each phase realise, and what must be observably true when it is done? The answers are the **Phase Plan** (`.planning/discovery/_phases.md`, Closing Step) — the literal source of ROADMAP.md; every MVP requirement belongs to exactly one phase.
|
|
32
33
|
|
|
33
34
|
4. **Milestones and release plan**
|
|
34
35
|
*Why it matters: milestone criteria are what stakeholder demos and Session 13's transition plan are scheduled against. Skip when: a single go-live milestone applies with no phased rollout.*
|
|
@@ -65,6 +66,10 @@
|
|
|
65
66
|
|
|
66
67
|
**Iteration(s)** names sprints (`S1–S2`) or pp-core phases (`Phase 3`), following the iteration model chosen in topic 1.
|
|
67
68
|
|
|
69
|
+
**Phase Plan** (populated via the Closing Step)
|
|
70
|
+
|
|
71
|
+
One row per pp-core phase in `.planning/discovery/_phases.md` § Phases — `Phase | Goal | EPICs | Requirement IDs | Success criteria | Depends on`. Record here only what the table cannot hold (why a requirement moved phase, what was debated).
|
|
72
|
+
|
|
68
73
|
**Milestone Plan**
|
|
69
74
|
|
|
70
75
|
| Milestone | Target Date | Included EPICs / Features | Entry Criteria | Exit Criteria | Stakeholder Demo? |
|
|
@@ -91,3 +96,19 @@
|
|
|
91
96
|
| ID | Action | Owner | Due Date | Status |
|
|
92
97
|
|---|--------|-------|----------|--------|
|
|
93
98
|
| | | | | |
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## Session 11: Phase Plan
|
|
103
|
+
|
|
104
|
+
**Closing Step — Phase Plan.** Run it after Step 7 and before Step 8, every time Session 11 completes, including a redo. The EPIC Build Order says in what order; the Phase Plan says what each phase delivers, by requirement ID, so `/pp-discovery-to-build` copies it into ROADMAP.md verbatim and every build phase can read its discovery rows (`references/discovery-build-consumption.md`).
|
|
105
|
+
|
|
106
|
+
1. Create `.planning/discovery/_phases.md` from the bootstrap template in `${PP_TOOLS%/bin/pp-tools.cjs}/references/discovery-build-consumption.md` § `_phases.md` when it does not exist.
|
|
107
|
+
2. Write one row per pp-core phase, in build order, following the iteration model from topic 1 (one iteration = one phase when that was chosen; otherwise one phase per EPIC Build Order row, several sprints to a phase being fine). pp-core phases count from 1: a "Phase 0", "Sprint 0" or "Setup" row of this session becomes Phase 1 and every later row shifts by one — record the mapping (`Session 11 phase 0 → pp-core Phase 1`) under **Phase Plan** in the Notes Template so the two numberings never meet unexplained:
|
|
108
|
+
- **Goal** — one sentence, the phase's deliverable;
|
|
109
|
+
- **EPICs** — the `E-nn` rows the phase realises, or `—`;
|
|
110
|
+
- **Requirement IDs** — every `_requirements.md` ID the phase realises: each EPIC's requirements from Session 3, the `N-`/`T-` rows that belong with them; an `MVP` requirement goes in exactly one phase, a `Later` one in none unless the plan reaches it, a `Dropped` one never. A requirement the build order splits across phases ("basic list" now, "filters" later) belongs to the phase where its acceptance criteria are fully met — the earlier phase names the partial work in its Goal, not in this column. A cross-cutting process or validation requirement that every phase exercises belongs to the phase that establishes it. A setup or infrastructure phase that realises no requirement writes `—`;
|
|
111
|
+
- **Success criteria** — two to five observable statements separated by ` · `, written from the user's seat ("A clerk closes a task and it leaves the list");
|
|
112
|
+
- **Depends on** — the earlier phase numbers whose output this phase needs, or `—`.
|
|
113
|
+
3. Run `pp_run query discovery.phases-check` — exit 0, or fix the rows it names: `mvp_requirement_unplanned` is an MVP requirement no phase owns, `requirement_in_multiple_phases` a requirement two phases both claim.
|
|
114
|
+
4. Smoke the join: `pp_run query discovery.for-phase 1 --markdown` renders the rows Phase 1 will read. An empty section is a fact to settle now (no step cites those IDs, no screen covers them), not a rendering fault.
|