@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.
Files changed (126) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/agents/pp-nyquist-auditor.md +19 -14
  3. package/agents/pp-phase-researcher.md +10 -0
  4. package/agents/pp-plan-checker.md +59 -36
  5. package/agents/pp-planner.md +49 -53
  6. package/agents/pp-vault-reviewer.md +2 -0
  7. package/agents/pp-verifier.md +15 -60
  8. package/commands/pp-autonomous.md +2 -1
  9. package/commands/pp-discovery.md +3 -2
  10. package/commands/pp-plan-phase.md +2 -1
  11. package/commands/pp-plan-review-convergence.md +2 -1
  12. package/gemini-extension.json +1 -1
  13. package/package.json +6 -3
  14. package/pareto-skills/_shared/pp-claude-md-protocol.md +1 -1
  15. package/pareto-skills/pp-project-setup/SKILL.md +18 -343
  16. package/pp-core/bin/lib/capability-activation.cjs +77 -0
  17. package/pp-core/bin/lib/capability-registry.cjs +15 -15
  18. package/pp-core/bin/lib/capability-state.cjs +8 -18
  19. package/pp-core/bin/lib/ceremony.cjs +1342 -0
  20. package/pp-core/bin/lib/check-command-router.cjs +62 -1
  21. package/pp-core/bin/lib/commands.cjs +29 -3
  22. package/pp-core/bin/lib/config.cjs +5 -0
  23. package/pp-core/bin/lib/discovery-access.cjs +276 -0
  24. package/pp-core/bin/lib/discovery-charter.cjs +664 -0
  25. package/pp-core/bin/lib/discovery-deviations.cjs +264 -0
  26. package/pp-core/bin/lib/discovery-entities.cjs +323 -0
  27. package/pp-core/bin/lib/discovery-for-phase.cjs +628 -0
  28. package/pp-core/bin/lib/discovery-integrations.cjs +286 -0
  29. package/pp-core/bin/lib/discovery-migration.cjs +246 -0
  30. package/pp-core/bin/lib/discovery-phases.cjs +233 -0
  31. package/pp-core/bin/lib/discovery-processes.cjs +355 -0
  32. package/pp-core/bin/lib/discovery-research-track.cjs +5 -4
  33. package/pp-core/bin/lib/discovery-rollup.cjs +8 -7
  34. package/pp-core/bin/lib/discovery-rules.cjs +216 -0
  35. package/pp-core/bin/lib/discovery-screens.cjs +1 -1
  36. package/pp-core/bin/lib/discovery-session-check.cjs +264 -0
  37. package/pp-core/bin/lib/discovery-stories.cjs +273 -0
  38. package/pp-core/bin/lib/discovery-sweep.cjs +1 -1
  39. package/pp-core/bin/lib/discovery-table.cjs +55 -0
  40. package/pp-core/bin/lib/init.cjs +50 -1
  41. package/pp-core/bin/lib/io.cjs +24 -0
  42. package/pp-core/bin/lib/loop-resolver.cjs +26 -12
  43. package/pp-core/bin/lib/phase.cjs +39 -3
  44. package/pp-core/bin/lib/plan-sizing.cjs +346 -0
  45. package/pp-core/bin/lib/test-substance.cjs +3190 -0
  46. package/pp-core/bin/lib/timeline.cjs +605 -0
  47. package/pp-core/bin/lib/vault-standards-review.cjs +50 -2
  48. package/pp-core/bin/pp-tools.cjs +214 -5
  49. package/pp-core/bin/shared/ceremony-gates.json +17 -0
  50. package/pp-core/bin/shared/config-schema.manifest.json +1 -0
  51. package/pp-core/references/ceremony.md +81 -0
  52. package/pp-core/references/discovery-access.md +112 -0
  53. package/pp-core/references/discovery-build-consumption.md +256 -0
  54. package/pp-core/references/discovery-charter.md +127 -0
  55. package/pp-core/references/discovery-data-model.md +145 -0
  56. package/pp-core/references/discovery-id-conventions.md +50 -14
  57. package/pp-core/references/discovery-integrations.md +151 -0
  58. package/pp-core/references/discovery-processes.md +190 -0
  59. package/pp-core/references/discovery-rebaseline.md +2 -2
  60. package/pp-core/references/discovery-research-track.md +5 -6
  61. package/pp-core/references/discovery-session-output.md +70 -0
  62. package/pp-core/references/discovery-standards.md +107 -0
  63. package/pp-core/references/discovery-traceability.md +2 -2
  64. package/pp-core/references/few-shot-examples/plan-checker.md +8 -8
  65. package/pp-core/references/phase-timeline.md +107 -0
  66. package/pp-core/references/planner-antipatterns.md +32 -0
  67. package/pp-core/references/planner-discovery-extract.md +35 -0
  68. package/pp-core/references/planner-guidance.md +17 -14
  69. package/pp-core/references/planner-revision.md +1 -1
  70. package/pp-core/references/planning-config.md +3 -2
  71. package/pp-core/references/test-substance.md +324 -0
  72. package/pp-core/references/verifier-discovery-conformance.md +36 -0
  73. package/pp-core/references/verifier-stub-patterns.md +51 -0
  74. package/pp-core/templates/VALIDATION.md +1 -0
  75. package/pp-core/templates/phase-prompt.md +19 -7
  76. package/pp-core/templates/project-charter.md +161 -100
  77. package/pp-core/templates/project.md +3 -3
  78. package/pp-core/templates/requirements.md +18 -0
  79. package/pp-core/templates/roadmap.md +1 -1
  80. package/pp-core/templates/verification-report.md +17 -1
  81. package/pp-core/workflows/audit-milestone.md +4 -1
  82. package/pp-core/workflows/autonomous.md +11 -8
  83. package/pp-core/workflows/code-review.md +15 -6
  84. package/pp-core/workflows/discovery-sprint/charter.md +114 -0
  85. package/pp-core/workflows/discovery-sprint/prefill.md +1 -1
  86. package/pp-core/workflows/discovery-sprint/prototype.md +4 -4
  87. package/pp-core/workflows/discovery-sprint/session-13-gates.md +10 -0
  88. package/pp-core/workflows/discovery-sprint/sessions/01-kick-off.md +5 -2
  89. package/pp-core/workflows/discovery-sprint/sessions/02-as-is.md +27 -5
  90. package/pp-core/workflows/discovery-sprint/sessions/03-to-be.md +56 -31
  91. package/pp-core/workflows/discovery-sprint/sessions/04-ux-design.md +1 -1
  92. package/pp-core/workflows/discovery-sprint/sessions/05-architecture.md +42 -19
  93. package/pp-core/workflows/discovery-sprint/sessions/06-security.md +27 -12
  94. package/pp-core/workflows/discovery-sprint/sessions/07-identity.md +41 -23
  95. package/pp-core/workflows/discovery-sprint/sessions/08-integration.md +50 -23
  96. package/pp-core/workflows/discovery-sprint/sessions/09-qa.md +26 -11
  97. package/pp-core/workflows/discovery-sprint/sessions/10-infrastructure.md +28 -9
  98. package/pp-core/workflows/discovery-sprint/sessions/11-roadmap.md +21 -0
  99. package/pp-core/workflows/discovery-sprint/sessions/13-wrap-up.md +24 -9
  100. package/pp-core/workflows/discovery-sprint.md +12 -15
  101. package/pp-core/workflows/discovery-to-build/steps/architecture-deliverables.md +80 -29
  102. package/pp-core/workflows/discovery-to-build/steps/{screen-inventory-gate.md → handoff-gates.md} +111 -3
  103. package/pp-core/workflows/discovery-to-build/templates/discovery-references.md +12 -9
  104. package/pp-core/workflows/discovery-to-build/templates/pp-handoff.md +27 -26
  105. package/pp-core/workflows/discovery-to-build.md +70 -34
  106. package/pp-core/workflows/discuss-phase/discovery.md +83 -0
  107. package/pp-core/workflows/discuss-phase/templates/context.md +4 -0
  108. package/pp-core/workflows/discuss-phase.md +10 -7
  109. package/pp-core/workflows/execute-phase/steps/check-query-gate.md +7 -7
  110. package/pp-core/workflows/execute-phase/steps/codebase-drift-gate.md +3 -2
  111. package/pp-core/workflows/execute-phase.md +14 -3
  112. package/pp-core/workflows/new-project.md +3 -3
  113. package/pp-core/workflows/plan-phase/steps/chunked-planning.md +7 -3
  114. package/pp-core/workflows/plan-phase/steps/discovery-extract.md +41 -0
  115. package/pp-core/workflows/plan-phase/steps/prd-express.md +104 -0
  116. package/pp-core/workflows/plan-phase.md +62 -124
  117. package/pp-core/workflows/plan-review-convergence.md +6 -3
  118. package/pp-core/workflows/ship.md +2 -2
  119. package/pp-core/workflows/stats.md +19 -4
  120. package/pp-core/workflows/validate-phase.md +19 -4
  121. package/pp-core/workflows/vault-review.md +5 -0
  122. package/pp-core/workflows/verify-phase.md +1 -1
  123. package/pp-core/workflows/verify-work.md +1 -1
  124. package/scripts/gen-capability-registry.cjs +43 -45
  125. package/scripts/run-tests.cjs +54 -30
  126. package/pp-core/workflows/discovery-sprint/templates/context-template.md +0 -272
@@ -34,6 +34,12 @@ const SCHEMA_VERSION = '1';
34
34
  // registry generator and the loop-host-contract generator share one source of truth.
35
35
  const { LOOP_HOST_CONTRACT } = require('../pp-core/bin/lib/loop-host-contract.cjs');
36
36
 
37
+ // Ceremony gate vocabulary (Phase 37, D-14) — a hook `when` conjunct `ceremony.<gate>`
38
+ // must name a gate declared here.
39
+ const CEREMONY_GATE_NAMES = new Set(
40
+ require('../pp-core/bin/shared/ceremony-gates.json').gates.map((g) => g.key),
41
+ );
42
+
37
43
  // Wired-points helper — tells us which points actually have render-hooks call sites.
38
44
  const { getWiredLoopPoints } = require('./gen-loop-host-contract.cjs');
39
45
 
@@ -1241,6 +1247,38 @@ function validateGate(gate, prefix) {
1241
1247
 
1242
1248
  // ─── Contract validation ──────────────────────────────────────────────────────
1243
1249
 
1250
+ /**
1251
+ * Validate a hook `when` (Phase 37, D-14). A `when` is one or more conjuncts joined
1252
+ * by `&&`; each is a config key the capability declares, or `ceremony.<gate>` with
1253
+ * the gate named in pp-core/bin/shared/ceremony-gates.json. A non-string `when` is
1254
+ * already reported by the schema checks and is skipped here. Pushes onto `errors`.
1255
+ * `where` is the message prefix, e.g. `capability "x" step.when`, so the message of
1256
+ * a single undeclared key stays `<where> "<key>" is not defined in capability config keys`.
1257
+ */
1258
+ function validateWhen(when, cap, where, errors) {
1259
+ if (typeof when !== 'string') return;
1260
+ for (const raw of when.split('&&')) {
1261
+ const conjunct = raw.trim();
1262
+ if (conjunct === '') {
1263
+ errors.push(where + ' has an empty conjunct');
1264
+ continue;
1265
+ }
1266
+ if (conjunct.startsWith('ceremony.')) {
1267
+ if (!CEREMONY_GATE_NAMES.has(conjunct.slice('ceremony.'.length))) {
1268
+ errors.push(where + ' "' + conjunct + '" is not a ceremony gate');
1269
+ }
1270
+ continue;
1271
+ }
1272
+ if (
1273
+ typeof cap.config === 'object' &&
1274
+ cap.config !== null &&
1275
+ !Object.prototype.hasOwnProperty.call(cap.config, conjunct)
1276
+ ) {
1277
+ errors.push(where + ' "' + conjunct + '" is not defined in capability config keys');
1278
+ }
1279
+ }
1280
+ }
1281
+
1244
1282
  /**
1245
1283
  * Validate per-capability contract constraints against the Loop Host Contract.
1246
1284
  * This covers:
@@ -1281,51 +1319,10 @@ function validateAgainstContract(cap, capId, knownAgentIds) {
1281
1319
  }
1282
1320
  }
1283
1321
 
1284
- // when references a plausibly-valid config key (string — we require it's in cap.config)
1285
- for (const step of cap.steps) {
1286
- if (step.when !== undefined) {
1287
- if (typeof step.when !== 'string') continue; // already reported above
1288
- if (
1289
- typeof cap.config === 'object' &&
1290
- cap.config !== null &&
1291
- !Object.prototype.hasOwnProperty.call(cap.config, step.when)
1292
- ) {
1293
- errors.push(
1294
- prefix + ' step.when "' + step.when + '" is not defined in capability config keys',
1295
- );
1296
- }
1297
- }
1298
- }
1299
-
1300
- for (const contrib of cap.contributions) {
1301
- if (contrib.when !== undefined) {
1302
- if (typeof contrib.when !== 'string') continue;
1303
- if (
1304
- typeof cap.config === 'object' &&
1305
- cap.config !== null &&
1306
- !Object.prototype.hasOwnProperty.call(cap.config, contrib.when)
1307
- ) {
1308
- errors.push(
1309
- prefix + ' contribution.when "' + contrib.when + '" is not defined in capability config keys',
1310
- );
1311
- }
1312
- }
1313
- }
1314
-
1315
- for (const gate of cap.gates) {
1316
- if (gate.when !== undefined) {
1317
- if (typeof gate.when !== 'string') continue;
1318
- if (
1319
- typeof cap.config === 'object' &&
1320
- cap.config !== null &&
1321
- !Object.prototype.hasOwnProperty.call(cap.config, gate.when)
1322
- ) {
1323
- errors.push(
1324
- prefix + ' gate.when "' + gate.when + '" is not defined in capability config keys',
1325
- );
1326
- }
1327
- }
1328
- }
1322
+ // when: one or more `&&` conjuncts, each a declared config key or `ceremony.<gate>`
1323
+ for (const step of cap.steps) validateWhen(step.when, cap, prefix + ' step.when', errors);
1324
+ for (const contrib of cap.contributions) validateWhen(contrib.when, cap, prefix + ' contribution.when', errors);
1325
+ for (const gate of cap.gates) validateWhen(gate.when, cap, prefix + ' gate.when', errors);
1329
1326
 
1330
1327
  return errors;
1331
1328
  }
@@ -2759,6 +2756,7 @@ function main() {
2759
2756
  module.exports = {
2760
2757
  validateCapability,
2761
2758
  validateAgainstContract,
2759
+ validateWhen,
2762
2760
  validateConsumesGlobal,
2763
2761
  validateCrossCapability,
2764
2762
  validateSealField,
@@ -31,7 +31,7 @@
31
31
 
32
32
  const { readdirSync } = require('fs');
33
33
  const { join, basename } = require('path');
34
- const { execFileSync } = require('child_process');
34
+ const { execFileSync, spawnSync } = require('child_process');
35
35
  const { ExitError, runMain } = require('./lib/cli-exit.cjs');
36
36
 
37
37
  const SUITES = ['all', 'unit', 'integration', 'install', 'security', 'slow'];
@@ -548,42 +548,66 @@ function main() {
548
548
  if (chunks.length > 1) {
549
549
  console.error(`run-tests: chunk ${i + 1}/${chunks.length} — ${chunks[i].length} files`);
550
550
  }
551
- try {
552
- execFileSync(
553
- process.execPath,
554
- ['--test', ...(forceExit ? ['--test-force-exit'] : []), concurrency, ...chunks[i]],
555
- {
556
- stdio: 'inherit',
557
- env: { ...process.env },
558
- timeout: chunkTimeoutMs,
559
- },
551
+ const chunkFiles = chunks[i].map(f => f.split(/[\\/]/).pop()).join(' ');
552
+ // stdout is captured, not inherited, so the chunk's node:test summary can be
553
+ // checked; it is written through unchanged once the chunk ends. stderr stays
554
+ // live. A chunk can exit 0 with its output cut off and no summary — on CI
555
+ // (2026-10-28) two of five chunks did, and ~1,000 tests never reported while
556
+ // the job stayed green — so a missing summary fails the run.
557
+ const result = spawnSync(
558
+ process.execPath,
559
+ ['--test', ...(forceExit ? ['--test-force-exit'] : []), concurrency, ...chunks[i]],
560
+ {
561
+ stdio: ['inherit', 'pipe', 'inherit'],
562
+ env: { ...process.env },
563
+ timeout: chunkTimeoutMs,
564
+ maxBuffer: 1024 * 1024 * 1024,
565
+ },
566
+ );
567
+ if (result.stdout && result.stdout.length > 0) process.stdout.write(result.stdout);
568
+ // When the per-chunk timeout fires, spawnSync kills the child and reports
569
+ // error.code === 'ETIMEDOUT' (POSIX) and/or a kill signal (platform-dependent).
570
+ // Check both so detection holds on Windows and POSIX.
571
+ const timedOut = (result.error && result.error.code === 'ETIMEDOUT') ||
572
+ (result.signal !== null && result.status === null && !result.error);
573
+ let code = result.status === null ? 1 : result.status;
574
+ if (result.error && result.error.code === 'ETIMEDOUT') code = 1;
575
+ if (timedOut) {
576
+ console.error(
577
+ `run-tests: chunk ${i + 1}/${chunks.length} exceeded the per-chunk timeout ` +
578
+ `of ${chunkTimeoutMs}ms and was killed — a test in this chunk is likely leaking ` +
579
+ `an open handle (un-terminated Worker, un-killed child process, or ref'd timer) ` +
580
+ `so node --test never exits. Files: ${chunkFiles}`,
560
581
  );
561
- } catch (err) {
562
- // When the per-chunk timeout fires, execFileSync kills the child and
563
- // surfaces it as err.code === 'ETIMEDOUT' (POSIX) and/or err.killed === true
564
- // (platform-dependent). Check both so detection holds on Windows and POSIX.
565
- const timedOut = err.killed === true || err.code === 'ETIMEDOUT';
566
- if (timedOut) {
567
- console.error(
568
- `run-tests: chunk ${i + 1}/${chunks.length} exceeded the per-chunk timeout ` +
569
- `of ${chunkTimeoutMs}ms and was killed — a test in this chunk is likely leaking ` +
570
- `an open handle (un-terminated Worker, un-killed child process, or ref'd timer) ` +
571
- `so node --test never exits. Files: ${chunks[i]
572
- .map(f => f.split(/[\\/]/).pop())
573
- .join(' ')}`,
574
- );
575
- }
576
- const code = err.status || 1;
577
- // Run every chunk so the operator sees all failures in one pass; report
578
- // the first non-zero exit at the end.
579
- if (firstFailureExit === 0) firstFailureExit = code;
582
+ } else if (result.error) {
583
+ console.error(`run-tests: chunk ${i + 1}/${chunks.length} could not run: ${result.error.message}`);
584
+ code = 1;
585
+ } else if (code === 0 && !hasTestSummary(result.stdout)) {
586
+ console.error(
587
+ `run-tests: chunk ${i + 1}/${chunks.length} exited without a test summary ` +
588
+ `(no "ℹ tests N" / "ℹ fail N" lines) — its output was cut off, so some of its ` +
589
+ `tests never reported. Files: ${chunkFiles}`,
590
+ );
591
+ code = 1;
580
592
  }
593
+ // Run every chunk so the operator sees all failures in one pass; report
594
+ // the first non-zero exit at the end.
595
+ if (code !== 0 && firstFailureExit === 0) firstFailureExit = code;
581
596
  }
582
597
  if (firstFailureExit !== 0) return firstFailureExit;
583
598
  }
584
599
 
600
+ /**
601
+ * Whether a chunk's stdout carries node:test's closing summary: both the
602
+ * `tests N` and `fail N` lines, from the spec reporter (`ℹ`) or TAP (`#`).
603
+ */
604
+ function hasTestSummary(stdout) {
605
+ const text = stdout ? stdout.toString('utf8') : '';
606
+ return /^(?:ℹ|#) tests \d+\s*$/m.test(text) && /^(?:ℹ|#) fail \d+\s*$/m.test(text);
607
+ }
608
+
585
609
  if (require.main === module) {
586
610
  runMain(main);
587
611
  }
588
612
 
589
- module.exports = { suiteOf, ensureBuiltArtifacts, parseShardArg, selectShard };
613
+ module.exports = { suiteOf, ensureBuiltArtifacts, parseShardArg, selectShard, hasTestSummary };
@@ -1,272 +0,0 @@
1
- # Bootstrap Template — .planning/discovery/_context.md
2
-
3
- > **Lazy-loaded.** Read this file from `workflows/discovery-sprint.md` — from
4
- > Flow 2 Step 1, or from the Bootstrap Templates section — when
5
- > `.planning/discovery/_context.md` is absent (first-ever session on this
6
- > project). Create that file verbatim from the fenced schema below. The path is
7
- > fixed under `.planning/discovery/` (T-04-03): never a root-level directory,
8
- > never an absolute path, never a path containing `..`.
9
-
10
- **`.planning/discovery/_context.md`:**
11
-
12
- ```markdown
13
- # Cross-Session Context — [PROJECT_NAME]
14
-
15
- This file accumulates key outputs from each completed session to provide context for subsequent sessions. It is automatically maintained as sessions are completed.
16
-
17
- ---
18
-
19
- ## Session 1: Kick-off Outputs
20
- _Populated after Session 1 completion_
21
-
22
- ### Project Context
23
- <!-- Notes about the rationale and context -->
24
-
25
- ### Business Vision
26
- <!-- Business vision summary, KPIs -->
27
-
28
- ### Stakeholders
29
- <!-- Key stakeholder list with roles -->
30
-
31
- ### Approval Routes
32
- <!-- Who approves scope, budget, architecture and security deviations, go-live -->
33
-
34
- ### Platform and Team Shape
35
- <!-- Mandated platform (D-01-n) or "open"; team shape for the build -->
36
-
37
- ### Discovery Sprint Scope
38
- **In Scope:**
39
- -
40
-
41
- **Out of Scope:**
42
- -
43
-
44
- ---
45
-
46
- ## Session 2: As-Is Outputs
47
- _Populated after Session 2 completion_
48
-
49
- ### Core Processes
50
- <!-- Current business processes -->
51
-
52
- ### Pain Points
53
- <!-- Prioritized pain points -->
54
-
55
- ### User Personas
56
- <!-- Key personas and their journeys -->
57
-
58
- ### Current Systems
59
- <!-- Systems landscape -->
60
-
61
- ### Data Flows
62
- <!-- How information moves today -->
63
-
64
- ---
65
-
66
- ## Session 3: To-Be Outputs
67
- _Populated after Session 3 completion_
68
-
69
- ### Business Objectives
70
- <!-- Measurable outcomes and KPIs -->
71
-
72
- ### MVP Scope
73
- <!-- What's in/out for MVP -->
74
-
75
- ### EPICs Summary
76
- <!-- EPIC registry table -->
77
-
78
- ### User Stories Summary
79
- <!-- Story count and distribution -->
80
-
81
- ### Requirements Summary
82
- <!-- Copy the rollup:auto totals table verbatim from .planning/discovery/_requirements.md — never hand-count -->
83
-
84
- ---
85
-
86
- ## Session 4: UX Design Outputs
87
- _Populated after Session 4 completion_
88
-
89
- ### Design Principles
90
- <!-- Numbered design principles -->
91
-
92
- ### UX Standards
93
- <!-- Standards Applied: the frontend standard citations and every D-04 deviation -->
94
-
95
- ### Key Personas (Refined)
96
- <!-- Persona categories and interaction patterns -->
97
-
98
- ### Key Screen Decisions
99
- <!-- Screen layout decisions -->
100
-
101
- ### Prototype
102
- <!-- Session 4 Closing Step answer; per /pp-discovery prototype round: flows validated, open feedback count -->
103
-
104
- ---
105
-
106
- ## Session 5: Architecture Outputs
107
- _Populated after Session 5 completion_
108
-
109
- ### Target Architecture
110
- <!-- Platform, architecture style, ownership -->
111
-
112
- ### Technology Stack
113
- <!-- Full stack listing -->
114
-
115
- ### Key Components
116
- <!-- Module/component list -->
117
-
118
- ### Integration Points
119
- <!-- External system integrations -->
120
-
121
- ### ADRs
122
- <!-- Architecture Decision Records -->
123
-
124
- ### Domain Model / Entity Register
125
- <!-- Entity, key attributes, relationships, owner module -->
126
-
127
- ---
128
-
129
- ## Session 6: Security Outputs
130
- _Populated after Session 6 completion_
131
-
132
- ### Data Classification
133
- <!-- Data sensitivity levels -->
134
-
135
- ### Compliance Framework
136
- <!-- Standards and regulations -->
137
-
138
- ### Encryption
139
- <!-- In-transit, at-rest, key management -->
140
-
141
- ### Network & Access
142
- <!-- Network security approach -->
143
-
144
- ### Audit Logging
145
- <!-- Logging strategy and retention -->
146
-
147
- ### Availability
148
- <!-- SLA targets -->
149
-
150
- ---
151
-
152
- ## Session 7: Identity Management Outputs
153
- _Populated after Session 7 completion_
154
-
155
- ### RBAC Model
156
- <!-- Roles and permissions summary -->
157
-
158
- ### IdP Integration
159
- <!-- Identity provider details -->
160
-
161
- ### User Lifecycle
162
- <!-- Provisioning approach -->
163
-
164
- ---
165
-
166
- ## Session 8: Integration Outputs
167
- _Populated after Session 8 completion_
168
-
169
- ### External Systems
170
- <!-- Systems and their interfaces -->
171
-
172
- ### Interface Patterns
173
- <!-- Chosen patterns and protocols -->
174
-
175
- ### Data Exchange
176
- <!-- Key data flows and formats -->
177
-
178
- ---
179
-
180
- ## Session 9: QA Outputs
181
- _Populated after Session 9 completion_
182
-
183
- ### Test Strategy
184
- <!-- Testing approach -->
185
-
186
- ### Tooling
187
- <!-- Test management and automation tools -->
188
-
189
- ### Test Environments
190
- <!-- Environment list and purposes -->
191
-
192
- ### Quality Gates
193
- <!-- Gate definitions -->
194
-
195
- ### UAT
196
- <!-- UAT participants, period, criteria -->
197
-
198
- ---
199
-
200
- ## Session 10: Infrastructure Outputs
201
- _Populated after Session 10 completion_
202
-
203
- ### Infrastructure
204
- <!-- Cloud/hosting setup -->
205
-
206
- ### Deployment
207
- <!-- Deployment strategy -->
208
-
209
- ### Monitoring
210
- <!-- Monitoring and alerting approach -->
211
-
212
- ### Backup & DR
213
- <!-- Backup and disaster recovery -->
214
-
215
- ### Go-Live Readiness
216
- <!-- Readiness checklist status -->
217
-
218
- ---
219
-
220
- ## Session 11: Roadmap Outputs
221
- _Populated after Session 11 completion_
222
-
223
- ### Project Phases
224
- <!-- Phase breakdown -->
225
-
226
- ### Timeline
227
- <!-- Iteration model (sprints or pp-core phases) and key dates -->
228
-
229
- ### MVP Scope (Confirmed)
230
- <!-- Must-have vs nice-to-have -->
231
-
232
- ### Build Order
233
- <!-- Iteration-by-iteration plan -->
234
-
235
- ### Key Milestones
236
- <!-- Milestone dates -->
237
-
238
- ### Risks
239
- <!-- Top risks and mitigations -->
240
-
241
- ---
242
-
243
- ## Session 12: Delivery Model Outputs
244
- _Populated after Session 12 completion_
245
-
246
- ### Team Structure
247
- <!-- Key roles and people -->
248
-
249
- ### Governance
250
- <!-- Governance framework summary -->
251
-
252
- ### Ceremonies
253
- <!-- Iteration cadence and the meetings held -->
254
-
255
- ### Support Model
256
- <!-- Post-go-live support approach -->
257
-
258
- ---
259
-
260
- ## Session 13: Wrap-up Outputs
261
- _Populated after Session 13 completion_
262
-
263
- ### Decision Readiness
264
- <!-- Go / Conditional Go / No-Go assessment -->
265
-
266
- ### Open Items
267
- <!-- Items carried forward -->
268
-
269
- ### Next Steps
270
- <!-- Transition plan to execution -->
271
- ```
272
-