create-principles-disciple 1.127.0 → 1.127.2

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 (74) hide show
  1. package/console/dist/server/config/pd-config-store.js +7 -2
  2. package/console/dist/server/routes/update.js +10 -2
  3. package/core/dist/runtime-v2/activation/__tests__/production-gate-deps.test.js +69 -0
  4. package/core/dist/runtime-v2/activation/__tests__/production-gate-deps.test.js.map +1 -1
  5. package/core/dist/runtime-v2/activation/production-gate-deps.d.ts.map +1 -1
  6. package/core/dist/runtime-v2/activation/production-gate-deps.js +13 -46
  7. package/core/dist/runtime-v2/activation/production-gate-deps.js.map +1 -1
  8. package/core/dist/runtime-v2/config/__tests__/pd-config-sparse-bootstrap.test.d.ts +2 -0
  9. package/core/dist/runtime-v2/config/__tests__/pd-config-sparse-bootstrap.test.d.ts.map +1 -0
  10. package/core/dist/runtime-v2/config/__tests__/pd-config-sparse-bootstrap.test.js +143 -0
  11. package/core/dist/runtime-v2/config/__tests__/pd-config-sparse-bootstrap.test.js.map +1 -0
  12. package/core/dist/runtime-v2/feature-flags/__tests__/installer-config-parity.test.js +44 -27
  13. package/core/dist/runtime-v2/feature-flags/__tests__/installer-config-parity.test.js.map +1 -1
  14. package/core/dist/runtime-v2/internalization/__tests__/adversarial-feedback.test.js +9 -0
  15. package/core/dist/runtime-v2/internalization/__tests__/adversarial-feedback.test.js.map +1 -1
  16. package/core/dist/runtime-v2/internalization/__tests__/artificer-prompt-builder.test.js +15 -5
  17. package/core/dist/runtime-v2/internalization/__tests__/artificer-prompt-builder.test.js.map +1 -1
  18. package/core/dist/runtime-v2/internalization/__tests__/evaluator-artificer-repair-replay.test.d.ts +2 -0
  19. package/core/dist/runtime-v2/internalization/__tests__/evaluator-artificer-repair-replay.test.d.ts.map +1 -0
  20. package/core/dist/runtime-v2/internalization/__tests__/evaluator-artificer-repair-replay.test.js +413 -0
  21. package/core/dist/runtime-v2/internalization/__tests__/evaluator-artificer-repair-replay.test.js.map +1 -0
  22. package/core/dist/runtime-v2/internalization/__tests__/evaluator-gate-authority.test.js +136 -0
  23. package/core/dist/runtime-v2/internalization/__tests__/evaluator-gate-authority.test.js.map +1 -1
  24. package/core/dist/runtime-v2/internalization/__tests__/repair-replay-resolver.test.d.ts +2 -0
  25. package/core/dist/runtime-v2/internalization/__tests__/repair-replay-resolver.test.d.ts.map +1 -0
  26. package/core/dist/runtime-v2/internalization/__tests__/repair-replay-resolver.test.js +340 -0
  27. package/core/dist/runtime-v2/internalization/__tests__/repair-replay-resolver.test.js.map +1 -0
  28. package/core/dist/runtime-v2/internalization/adversarial-feedback.d.ts.map +1 -1
  29. package/core/dist/runtime-v2/internalization/adversarial-feedback.js +7 -1
  30. package/core/dist/runtime-v2/internalization/adversarial-feedback.js.map +1 -1
  31. package/core/dist/runtime-v2/internalization/artificer-prompt-builder.d.ts +9 -2
  32. package/core/dist/runtime-v2/internalization/artificer-prompt-builder.d.ts.map +1 -1
  33. package/core/dist/runtime-v2/internalization/artificer-prompt-builder.js +19 -1
  34. package/core/dist/runtime-v2/internalization/artificer-prompt-builder.js.map +1 -1
  35. package/core/dist/runtime-v2/internalization/artificer-runner.d.ts.map +1 -1
  36. package/core/dist/runtime-v2/internalization/artificer-runner.js +84 -7
  37. package/core/dist/runtime-v2/internalization/artificer-runner.js.map +1 -1
  38. package/core/dist/runtime-v2/internalization/evaluator-output.d.ts +18 -1
  39. package/core/dist/runtime-v2/internalization/evaluator-output.d.ts.map +1 -1
  40. package/core/dist/runtime-v2/internalization/evaluator-output.js +12 -2
  41. package/core/dist/runtime-v2/internalization/evaluator-output.js.map +1 -1
  42. package/core/dist/runtime-v2/internalization/evaluator-runner.d.ts.map +1 -1
  43. package/core/dist/runtime-v2/internalization/evaluator-runner.js +99 -5
  44. package/core/dist/runtime-v2/internalization/evaluator-runner.js.map +1 -1
  45. package/core/dist/runtime-v2/internalization/refiner-sandbox-wrapper.d.ts +18 -1
  46. package/core/dist/runtime-v2/internalization/refiner-sandbox-wrapper.d.ts.map +1 -1
  47. package/core/dist/runtime-v2/internalization/refiner-sandbox-wrapper.js +20 -0
  48. package/core/dist/runtime-v2/internalization/refiner-sandbox-wrapper.js.map +1 -1
  49. package/core/dist/runtime-v2/internalization/repair-replay-resolver.d.ts +112 -0
  50. package/core/dist/runtime-v2/internalization/repair-replay-resolver.d.ts.map +1 -0
  51. package/core/dist/runtime-v2/internalization/repair-replay-resolver.js +332 -0
  52. package/core/dist/runtime-v2/internalization/repair-replay-resolver.js.map +1 -0
  53. package/core/dist/telemetry-event.d.ts +2 -2
  54. package/core/dist/telemetry-event.d.ts.map +1 -1
  55. package/core/dist/telemetry-event.js +14 -0
  56. package/core/dist/telemetry-event.js.map +1 -1
  57. package/dist/installer.d.ts.map +1 -1
  58. package/dist/installer.js +16 -12
  59. package/dist/installer.js.map +1 -1
  60. package/dist/mvp-config.d.ts +22 -15
  61. package/dist/mvp-config.d.ts.map +1 -1
  62. package/dist/mvp-config.js +48 -106
  63. package/dist/mvp-config.js.map +1 -1
  64. package/package.json +1 -1
  65. package/pd-cli/dist/commands/console.d.ts +13 -0
  66. package/pd-cli/dist/commands/console.d.ts.map +1 -1
  67. package/pd-cli/dist/commands/console.js +104 -0
  68. package/pd-cli/dist/commands/console.js.map +1 -1
  69. package/pd-cli/dist/commands/runtime-init.d.ts.map +1 -1
  70. package/pd-cli/dist/commands/runtime-init.js +8 -12
  71. package/pd-cli/dist/commands/runtime-init.js.map +1 -1
  72. package/plugin/dist/bundle.js +444 -432
  73. package/plugin/dist/governance-audit.js +126 -126
  74. package/plugin/dist/rulehost-evidence.js +135 -135
@@ -328,10 +328,13 @@ export function updateAgentBinding(workspaceDir, agentName, payload) {
328
328
  // the merged effective map. Defaults belong in the registry, not in config —
329
329
  // snapshotting `effective.config.features` here would materialize every
330
330
  // missing default flag into an immortal override on any agent-binding change.
331
+ // PRI-645: the only reachable fallback is "config file absent" (a malformed
332
+ // features section was already rejected by loadPdConfig above) — an empty
333
+ // map keeps the newly created config sparse; the resolver fills defaults.
331
334
  const updatedConfig = {
332
335
  ...rawConfig,
333
336
  version: effective.config.version,
334
- features: isRecord(rawConfig.features) ? rawConfig.features : { ...effective.config.features },
337
+ features: isRecord(rawConfig.features) ? rawConfig.features : {},
335
338
  runtimeProfiles: { ...effective.config.runtimeProfiles },
336
339
  internalAgents: {
337
340
  defaultRuntime: effective.config.internalAgents.defaultRuntime,
@@ -474,10 +477,12 @@ export function updateDefaultRuntime(workspaceDir, payload) {
474
477
  // Merge: update only defaultRuntime, preserve agent overrides.
475
478
  // PRI-637: preserve the file's own `features:` section (same rationale as
476
479
  // updateAgentBinding — never re-snapshot merged defaults into config).
480
+ // PRI-645: config-absent fallback writes an empty map, not a default
481
+ // snapshot — the resolver owns defaults.
477
482
  const updatedConfig = {
478
483
  ...rawConfig,
479
484
  version: effective.config.version,
480
- features: isRecord(rawConfig.features) ? rawConfig.features : { ...effective.config.features },
485
+ features: isRecord(rawConfig.features) ? rawConfig.features : {},
481
486
  runtimeProfiles: { ...effective.config.runtimeProfiles },
482
487
  internalAgents: {
483
488
  defaultRuntime: defaultRuntimeRaw,
@@ -564,7 +564,11 @@ async function doApplyUpdate(options, workspaceDir) {
564
564
  fs.writeFileSync(tarballPath, buffer);
565
565
  // EP-08: spawn tar via argv array — tarball/temp paths stay data, never
566
566
  // shell syntax (Mimosa command-injection finding, 2026-08-22).
567
- execFileSync('tar', ['xzf', tarballPath, '-C', tempDir, '--strip-components=1'], { stdio: 'pipe' });
567
+ // Use cwd + relative archive path: GNU tar on Windows (Git Bash) misparses
568
+ // absolute C:\... paths as remote host C: (host:path syntax), causing
569
+ // "tar: Cannot connect to C: resolve failed". Windows System32 bsdtar does
570
+ // not support GNU tar's --force-local, so relative path is the universal fix.
571
+ execFileSync('tar', ['xzf', 'package.tgz', '--strip-components=1'], { cwd: tempDir, stdio: 'pipe' });
568
572
  fs.unlinkSync(tarballPath);
569
573
  // 4. Compute diff and apply.
570
574
  // Fix 3: we ONLY apply modified + added files. We deliberately skip ALL
@@ -918,7 +922,11 @@ async function doInlineFullUpdate(workspaceDir) {
918
922
  fs.writeFileSync(tarballPath, buffer);
919
923
  // EP-08: spawn tar via argv array — tarball/temp paths stay data, never
920
924
  // shell syntax (Mimosa command-injection finding, 2026-08-22).
921
- execFileSync('tar', ['xzf', tarballPath, '-C', tempDir, '--strip-components=1'], { stdio: 'pipe' });
925
+ // Use cwd + relative archive path: GNU tar on Windows (Git Bash) misparses
926
+ // absolute C:\... paths as remote host C: (host:path syntax), causing
927
+ // "tar: Cannot connect to C: resolve failed". Windows System32 bsdtar does
928
+ // not support GNU tar's --force-local, so relative path is the universal fix.
929
+ execFileSync('tar', ['xzf', 'package.tgz', '--strip-components=1'], { cwd: tempDir, stdio: 'pipe' });
922
930
  fs.unlinkSync(tarballPath);
923
931
  // The tarball, not the installer package version, is the release we are
924
932
  // about to activate. Prove it advances the installed plugin BEFORE the
@@ -268,5 +268,74 @@ function evaluate(input, helpers) {
268
268
  expect(result.success).toBe(false);
269
269
  });
270
270
  });
271
+ // ── PRI-634 PR-A (Slice A): replay/live semantic authority convergence ──
272
+ // The replay path previously used a LOCAL isValidRuleHostResult that was a
273
+ // semantic SUBSET of the canonical validateRuleHostResult (live RuleHost
274
+ // authority). Most notably it ACCEPTED `matched=false` paired with a
275
+ // non-allow decision — a result the live RuleHost rejects. These tests pin
276
+ // the convergence: the replay gate now enforces the exact canonical verdict
277
+ // on the same unknown results (A-T01…A-T06 through the public boundary).
278
+ describe('PRI-634 Slice A: canonical validator convergence', () => {
279
+ const trace = () => createGoldenTraceFixture({
280
+ toolName: 'edit',
281
+ negativeParams: { filePath: '/etc/passwd' },
282
+ positiveParams: { filePath: '/src/index.ts' },
283
+ expectedDecision: 'block',
284
+ });
285
+ const evalWith = (returnExpr) => createProductionGateDeps().evaluateInSandbox(`function evaluate(input, helpers) { return ${returnExpr}; }`, trace());
286
+ it('A-T01: allow + matched=false is accepted by the replay path (both cases pass)', () => {
287
+ const result = evalWith(`{ decision: 'allow', matched: false, reason: 'no match' }`);
288
+ // positive-1 expects allow → passes; negative-1 expects block → fails.
289
+ // The shape itself must NOT be the failure: no runtime_error failures.
290
+ expect(result.failedCases.every((c) => c.errorType === 'validation_failed')).toBe(true);
291
+ });
292
+ it('A-T02: block + matched=false is REJECTED — static early-warning layer catches the literal form', () => {
293
+ const result = evalWith(`{ decision: 'block', matched: false, reason: 'contradictory' }`);
294
+ // The static pre-check (checkMatchedFalseDecisions) catches the literal
295
+ // before VM execution — preserved early-warning semantics (SPEC Slice A2).
296
+ expect(result.success).toBe(false);
297
+ expect(result.failedCases.some((c) => c.caseId === '__matched_false_decision__' && c.errorType === 'validation_failed')).toBe(true);
298
+ });
299
+ it('A-T02b: block + dynamically-computed matched=false is REJECTED by the canonical runtime validator (convergence)', () => {
300
+ // The static scan cannot see through a variable — pre-convergence the
301
+ // local replay guard ACCEPTED this shape while the live RuleHost
302
+ // rejected it. Post-convergence the canonical validator rejects it in
303
+ // replay too: every case fails as runtime_error with the canonical reason.
304
+ const deps = createProductionGateDeps();
305
+ const result = deps.evaluateInSandbox(`function evaluate(input, helpers) {
306
+ var m = (input.action.toolName === 'edit');
307
+ m = false;
308
+ return { decision: 'block', matched: m, reason: 'contradictory' };
309
+ }`, trace());
310
+ expect(result.success).toBe(false);
311
+ expect(result.failedCases.length).toBeGreaterThan(0);
312
+ expect(result.failedCases.every((c) => c.errorType === 'runtime_error')).toBe(true);
313
+ expect(result.failedCases.some((c) => c.message.includes("matched=false requires decision 'allow'"))).toBe(true);
314
+ });
315
+ it('A-T03: invalid decision enum (deny) is rejected', () => {
316
+ const result = evalWith(`{ decision: 'deny', matched: true, reason: 'bad enum' }`);
317
+ expect(result.success).toBe(false);
318
+ expect(result.failedCases.some((c) => c.errorType === 'runtime_error' && c.message.includes('decision must be one of'))).toBe(true);
319
+ });
320
+ it('A-T04: auto_correct + malformed correctionProposal is rejected with canonical errors', () => {
321
+ const result = evalWith(`{ decision: 'auto_correct', matched: true, reason: 'broken proposal', correctionProposal: { proposedParams: {} } }`);
322
+ expect(result.success).toBe(false);
323
+ expect(result.failedCases.some((c) => c.errorType === 'runtime_error' && c.message.includes('correctionProposal invalid'))).toBe(true);
324
+ });
325
+ it('A-T05: well-formed auto_correct result passes shape validation (failure, if any, is decision mismatch only)', () => {
326
+ const result = evalWith(`{ decision: 'auto_correct', matched: true, reason: 'ok', correctionProposal: { proposedParams: { filePath: '/safe.ts' }, correctedFields: [{ field: 'filePath', original: '/etc/passwd', proposed: '/safe.ts', reason: 'redirect' }], applicationMode: 'shadow', confidence: 0.9, ruleId: 'rule-001', notifyAgent: true } }`);
327
+ expect(result.failedCases.every((c) => c.errorType === 'validation_failed')).toBe(true);
328
+ });
329
+ it('A-T06: prototype-pollution keys in the result are rejected by the replay path (canonical-only check)', () => {
330
+ const result = evalWith(`{ decision: 'allow', matched: false, reason: 'pp', __proto__: undefined }`);
331
+ // A literal __proto__ own-property is hard to construct via object
332
+ // literal in strict vm code; if the shape still validates, the case
333
+ // outcome must at least never be runtime_error-free contradiction.
334
+ // The authoritative prototype-pollution rejection is pinned directly in
335
+ // rule-host-validator tests; here we pin the delegation is total (no
336
+ // crash, structured failure).
337
+ expect(result.success).toBe(false);
338
+ });
339
+ });
271
340
  });
272
341
  //# sourceMappingURL=production-gate-deps.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"production-gate-deps.test.js","sourceRoot":"","sources":["../../../../src/runtime-v2/activation/__tests__/production-gate-deps.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"production-gate-deps.test.js","sourceRoot":"","sources":["../../../../src/runtime-v2/activation/__tests__/production-gate-deps.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"production-gate-deps.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/activation/production-gate-deps.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAOH,OAAO,KAAK,EACV,uBAAuB,EACxB,MAAM,6CAA6C,CAAC;AAmIrD;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,IAAI,uBAAuB,CAoFlE"}
1
+ {"version":3,"file":"production-gate-deps.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/activation/production-gate-deps.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAOH,OAAO,KAAK,EACV,uBAAuB,EACxB,MAAM,6CAA6C,CAAC;AA+FrD;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,IAAI,uBAAuB,CAoFlE"}
@@ -22,53 +22,18 @@
22
22
  import * as vm from 'node:vm';
23
23
  import { evaluateInRefinerSandbox } from '../internalization/refiner-sandbox-wrapper.js';
24
24
  import { checkForbiddenPatterns, checkReturnStatementsMissingFields, checkMatchedFalseDecisions } from '../internalization/rule-code-validator.js';
25
- import { validateCorrectionProposal } from '../internalization/correction-proposal.js';
25
+ import { validateRuleHostResult } from '../internalization/rule-host-validator.js';
26
26
  import { safeStringifyPreview } from '../feedback/safe-stringify.js';
27
27
  /**
28
- * Valid decision enum values for RuleHostResult.
29
- * Used to validate untrusted vm sandbox output (P2 #6 fix).
30
- */
31
- const VALID_DECISIONS = new Set(['allow', 'block', 'requireApproval', 'auto_correct']);
32
- /**
33
- * Type guard: validate that a value from the untrusted vm sandbox has the
34
- * full RuleHostResult shape. Treats all sandbox output as unknown.
35
- *
36
- * P2 #6 fix: previously the code only checked `decision` was a string, then
37
- * used `as RuleHostResult` to accept the entire object. This bypassed
38
- * validation of the decision enum value and other required fields.
28
+ * PRI-634 PR-A (Slice A): type-narrowing adapter over the canonical
29
+ * validateRuleHostResult the ONE RuleHostResult semantic authority, shared
30
+ * with the live RuleHost (rule-host-evaluator.ts). This adapter adds no
31
+ * semantic checks of its own; verdict parity with the canonical validator is
32
+ * structural (pure delegation) and pinned by the table-driven regression in
33
+ * production-gate-deps.test.ts.
39
34
  */
40
35
  function isValidRuleHostResult(value) {
41
- if (typeof value !== 'object' || value === null)
42
- return false;
43
- // decision: required, must be one of the 4 valid enum values
44
- const decision = Reflect.get(value, 'decision');
45
- if (typeof decision !== 'string' || !VALID_DECISIONS.has(decision)) {
46
- return false;
47
- }
48
- // matched: required, must be a boolean
49
- const matched = Reflect.get(value, 'matched');
50
- if (typeof matched !== 'boolean')
51
- return false;
52
- // reason: required, must be a string
53
- const reason = Reflect.get(value, 'reason');
54
- if (typeof reason !== 'string')
55
- return false;
56
- // When decision is 'auto_correct', correctionProposal must be present
57
- // AND pass full structural validation (P2 #6 fix: previously only checked
58
- // presence + typeof object, allowing malformed proposals with missing
59
- // required fields like proposedParams, correctedFields, applicationMode,
60
- // confidence, ruleId, notifyAgent to flow into the activation path).
61
- if (decision === 'auto_correct') {
62
- const correctionProposal = Reflect.get(value, 'correctionProposal');
63
- if (correctionProposal === undefined || correctionProposal === null) {
64
- return false;
65
- }
66
- const proposalValidation = validateCorrectionProposal(correctionProposal);
67
- if (!proposalValidation.valid) {
68
- return false;
69
- }
70
- }
71
- return true;
36
+ return validateRuleHostResult(value).valid;
72
37
  }
73
38
  /**
74
39
  * Normalize rule source code: strip ES module export keywords so the code
@@ -117,10 +82,12 @@ function compileRuleCode(code, sourceLabel) {
117
82
  }
118
83
  return (input, helpers) => {
119
84
  const result = Reflect.apply(evaluateFn, undefined, [input, helpers]);
120
- // P2 #6 fix: validate the full RuleHostResult shape, not just `decision` is a string.
121
- // Previously used `as RuleHostResult` which bypassed enum + required field validation.
85
+ // PRI-634 PR-A (Slice A): canonical RuleHostResult authority. The failure
86
+ // message carries the canonical validator's specific errors so the
87
+ // write-test-fix loop receives actionable evidence (P-03).
122
88
  if (!isValidRuleHostResult(result)) {
123
- throw new Error(`[${sourceLabel}]: evaluate returned invalid RuleHostResult (got ${typeof result === 'object' && result !== null ? safeStringifyPreview(result) : String(result)})`);
89
+ const { errors } = validateRuleHostResult(result);
90
+ throw new Error(`[${sourceLabel}]: evaluate returned invalid RuleHostResult (${errors.join('; ')}) — got ${typeof result === 'object' && result !== null ? safeStringifyPreview(result) : String(result)}`);
124
91
  }
125
92
  return result;
126
93
  };
@@ -1 +1 @@
1
- {"version":3,"file":"production-gate-deps.js","sourceRoot":"","sources":["../../../src/runtime-v2/activation/production-gate-deps.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAS9B,OAAO,EAAE,wBAAwB,EAAE,MAAM,+CAA+C,CAAC;AACzF,OAAO,EAAE,sBAAsB,EAAE,kCAAkC,EAAE,0BAA0B,EAAE,MAAM,2CAA2C,CAAC;AACnJ,OAAO,EAAE,0BAA0B,EAAE,MAAM,2CAA2C,CAAC;AACvF,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAErE;;;GAGG;AACH,MAAM,eAAe,GAAG,IAAI,GAAG,CAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,cAAc,CAAC,CAAC,CAAC;AAEzG;;;;;;;GAOG;AACH,SAAS,qBAAqB,CAAC,KAAc;IAC3C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAE9D,6DAA6D;IAC7D,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAChD,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAA4B,CAAC,EAAE,CAAC;QACvF,OAAO,KAAK,CAAC;IACf,CAAC;IAED,uCAAuC;IACvC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAC9C,IAAI,OAAO,OAAO,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAE/C,qCAAqC;IACrC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC5C,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAE7C,sEAAsE;IACtE,0EAA0E;IAC1E,sEAAsE;IACtE,yEAAyE;IACzE,qEAAqE;IACrE,IAAI,QAAQ,KAAK,cAAc,EAAE,CAAC;QAChC,MAAM,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;QACpE,IAAI,kBAAkB,KAAK,SAAS,IAAI,kBAAkB,KAAK,IAAI,EAAE,CAAC;YACpE,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,kBAAkB,GAAG,0BAA0B,CAAC,kBAAkB,CAAC,CAAC;QAC1E,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,SAAS,eAAe,CAAC,UAAkB;IACzC,MAAM,cAAc,GAAG,UAAU;SAC9B,OAAO,CAAC,2BAA2B,EAAE,cAAc,CAAC;SACpD,OAAO,CAAC,mCAAmC,EAAE,oBAAoB,CAAC,CAAC;IAEtE,OAAO,GAAG,cAAc;;;;GAIvB,CAAC;AACJ,CAAC;AAOD;;;GAGG;AACH,SAAS,uBAAuB,CAAC,KAAc;IAC7C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC;AACrD,CAAC;AAED;;;;;;GAMG;AACH,SAAS,eAAe,CAAC,IAAY,EAAE,WAAmB;IACxD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzD,MAAM,IAAI,KAAK,CAAC,IAAI,WAAW,sCAAsC,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,IAAI,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC;IAE/E,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAErE,8EAA8E;IAC9E,MAAM,oBAAoB,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;IACpE,OAAO,CAAC,cAAc,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;IAElD,IAAI,CAAC,uBAAuB,CAAC,oBAAoB,CAAC,EAAE,CAAC;QACnD,MAAM,IAAI,KAAK,CAAC,IAAI,WAAW,2CAA2C,CAAC,CAAC;IAC9E,CAAC;IAED,MAAM,UAAU,GAAG,oBAAoB,CAAC,QAAQ,CAAC;IACjD,IAAI,OAAO,UAAU,KAAK,UAAU,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CACb,IAAI,WAAW,4CAA4C,CAC5D,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,KAAoB,EAAE,OAAwB,EAAkB,EAAE;QACxE,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,SAAS,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAY,CAAC;QACjF,sFAAsF;QACtF,uFAAuF;QACvF,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CACb,IAAI,WAAW,oDAAoD,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CACpK,CAAC;QACJ,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,wBAAwB;IACtC,OAAO;QACL,iBAAiB,EAAE,CACjB,IAAY,EACZ,WAAwB,EACxB,IAA4B,EACN,EAAE;YACxB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAE7B,oEAAoE;YACpE,4EAA4E;YAC5E,0EAA0E;YAC1E,uEAAuE;YACvE,oEAAoE;YACpE,2BAA2B;YAC3B,MAAM,mBAAmB,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;YACzD,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACnC,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,WAAW,EAAE,EAAE;oBACf,eAAe,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;oBACvC,0BAA0B,EAAE,mBAAmB;iBAChD,CAAC;YACJ,CAAC;YAED,wEAAwE;YACxE,uEAAuE;YACvE,qEAAqE;YACrE,oEAAoE;YACpE,MAAM,qBAAqB,GAAG,kCAAkC,CAAC,IAAI,CAAC,CAAC;YACvE,IAAI,qBAAqB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrC,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,WAAW,EAAE,qBAAqB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;wBAC/C,MAAM,EAAE,kBAAkB;wBAC1B,SAAS,EAAE,mBAA4B;wBACvC,OAAO,EAAE,GAAG;qBACb,CAAC,CAAC;oBACH,eAAe,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;oBACvC,0BAA0B,EAAE,EAAE;iBAC/B,CAAC;YACJ,CAAC;YAED,gEAAgE;YAChE,qEAAqE;YACrE,sEAAsE;YACtE,mDAAmD;YACnD,MAAM,sBAAsB,GAAG,0BAA0B,CAAC,IAAI,CAAC,CAAC;YAChE,IAAI,sBAAsB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtC,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,WAAW,EAAE,sBAAsB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;wBAChD,MAAM,EAAE,4BAA4B;wBACpC,SAAS,EAAE,mBAA4B;wBACvC,OAAO,EAAE,GAAG;qBACb,CAAC,CAAC;oBACH,eAAe,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;oBACvC,0BAA0B,EAAE,EAAE;iBAC/B,CAAC;YACJ,CAAC;YAED,IAAI,YAA8B,CAAC;YACnC,IAAI,CAAC;gBACH,YAAY,GAAG,eAAe,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC;YAC/D,CAAC;YAAC,OAAO,GAAY,EAAE,CAAC;gBACtB,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACjE,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,WAAW,EAAE,CAAC;4BACZ,MAAM,EAAE,aAAa;4BACrB,SAAS,EAAE,cAAc;4BACzB,OAAO;yBACR,CAAC;oBACF,eAAe,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;oBACvC,0BAA0B,EAAE,EAAE;iBAC/B,CAAC;YACJ,CAAC;YAED,OAAO,wBAAwB,CAAC,IAAI,EAAE,WAAW,EAAE;gBACjD,YAAY;gBACZ,GAAG,IAAI;aACR,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"production-gate-deps.js","sourceRoot":"","sources":["../../../src/runtime-v2/activation/production-gate-deps.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=pd-config-sparse-bootstrap.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pd-config-sparse-bootstrap.test.d.ts","sourceRoot":"","sources":["../../../../src/runtime-v2/config/__tests__/pd-config-sparse-bootstrap.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,143 @@
1
+ /**
2
+ * PRI-645 — sparse bootstrap config contracts.
3
+ *
4
+ * Fresh configs (installer template, `pd runtime init`) now carry
5
+ * `features: {}`; these tests lock the invariants that make that safe:
6
+ *
7
+ * 1. Effective parity — a sparse config resolves to EXACTLY the same
8
+ * effective flag map as the old dense default snapshot did.
9
+ * 2. Category semantics — absence follows registry defaults for
10
+ * core/quiet-on/quiet-off/gone flags, and gone stays un-resurrectable.
11
+ * 3. Registry authority — when the registry default flips, a sparse config
12
+ * follows the new default while an old-style default snapshot would pin
13
+ * the stale value (the hazard PRI-645 removes).
14
+ * 4. Observation-window compatibility — the PRI-638 legacy
15
+ * diagnostician_split_pipeline=false cutover and the PRI-609 aliases keep
16
+ * working on existing configs regardless of bootstrap sparsification.
17
+ */
18
+ import { describe, expect, it } from 'vitest';
19
+ import { computeEffectivePdConfig } from '../pd-config-effective.js';
20
+ import { getDefaultPdConfig } from '../pd-config-defaults.js';
21
+ import { DEFAULT_FEATURE_FLAGS, FEATURE_FLAG_ALIASES, computeEffectiveFlags, } from '../../feature-flags/feature-flag-contract.js';
22
+ function sparseConfig() {
23
+ return { ...getDefaultPdConfig(), features: {} };
24
+ }
25
+ /** Build a config whose features section is exactly the given overrides
26
+ * (typed parameter gives the literal contextual typing — a bare spread
27
+ * widens `category` to string). */
28
+ function withFeatures(features) {
29
+ return { ...getDefaultPdConfig(), features };
30
+ }
31
+ describe('PRI-645 effective parity — sparse vs dense bootstrap', () => {
32
+ it('features: {} resolves to exactly the registry defaults for ALL registered flags', () => {
33
+ const sparseEffective = computeEffectivePdConfig(sparseConfig());
34
+ // The pre-PRI-645 bootstrap shape: a full registry snapshot in raw config.
35
+ const denseEffective = computeEffectivePdConfig(getDefaultPdConfig());
36
+ expect(Object.keys(sparseEffective.config.features)).toHaveLength(DEFAULT_FEATURE_FLAGS.length);
37
+ for (const flag of DEFAULT_FEATURE_FLAGS) {
38
+ const effective = sparseEffective.config.features[flag.id];
39
+ expect(effective, `flag ${flag.id} missing from sparse effective map`).toBeDefined();
40
+ expect(effective).toEqual({ category: flag.category, enabled: flag.enabled });
41
+ // BEFORE == AFTER: identical to the dense-snapshot effective value.
42
+ expect(effective).toEqual(denseEffective.config.features[flag.id]);
43
+ }
44
+ // No flag may be reported as changed-from-default on a fresh sparse config.
45
+ expect(sparseEffective.featuresChangedFromDefault).toEqual([]);
46
+ });
47
+ it('registry defaults are the values sparse configs resolve to (registry snapshot, not a fixture)', () => {
48
+ // The expected map is read from the canonical registry — never a
49
+ // hand-maintained third copy of defaults (PRI-645 §21 anti-pattern).
50
+ const effective = computeEffectivePdConfig(sparseConfig());
51
+ const registryById = new Map(DEFAULT_FEATURE_FLAGS.map(f => [f.id, f]));
52
+ for (const [id, entry] of Object.entries(effective.config.features)) {
53
+ const def = registryById.get(id);
54
+ expect(def, `effective flag ${id} not registered`).toBeDefined();
55
+ expect(entry.category).toBe(def?.category);
56
+ expect(entry.enabled).toBe(def?.enabled);
57
+ }
58
+ });
59
+ });
60
+ describe('PRI-645 category semantics under config absence', () => {
61
+ it('core flag absence → registry default ON (prompt)', () => {
62
+ const effective = computeEffectivePdConfig(sparseConfig());
63
+ expect(effective.config.features.prompt).toEqual({ category: 'core', enabled: true });
64
+ });
65
+ it('quiet ON-default flag absence → registry default ON (feedback_channel)', () => {
66
+ const effective = computeEffectivePdConfig(sparseConfig());
67
+ const def = DEFAULT_FEATURE_FLAGS.find(f => f.id === 'feedback_channel');
68
+ expect(def?.enabled).toBe(true);
69
+ expect(effective.config.features.feedback_channel).toEqual({ category: 'quiet', enabled: true });
70
+ });
71
+ it('quiet OFF-default flag absence → registry default OFF (gfi)', () => {
72
+ const effective = computeEffectivePdConfig(sparseConfig());
73
+ const def = DEFAULT_FEATURE_FLAGS.find(f => f.id === 'gfi');
74
+ expect(def?.enabled).toBe(false);
75
+ expect(effective.config.features.gfi).toEqual({ category: 'quiet', enabled: false });
76
+ });
77
+ it('gone flag absence → gone behavior, and config cannot resurrect it', () => {
78
+ const absent = computeEffectivePdConfig(sparseConfig());
79
+ expect(absent.config.features.nocturnal).toEqual({ category: 'gone', enabled: false });
80
+ // Explicit resurrection attempt is refused observably — with or without
81
+ // a sparse bootstrap, gone semantics live in the resolver, never in
82
+ // config presence.
83
+ const resurrect = computeEffectivePdConfig(withFeatures({
84
+ nocturnal: { category: 'gone', enabled: true },
85
+ }));
86
+ expect(resurrect.config.features.nocturnal).toEqual({ category: 'gone', enabled: false });
87
+ expect(resurrect.warnings.some(w => w.includes("gone flag cannot be re-enabled"))).toBe(true);
88
+ });
89
+ });
90
+ describe('PRI-645 registry authority — sparse config does not pin old defaults', () => {
91
+ it('a registry default flip reaches sparse configs but not old default snapshots', () => {
92
+ // Pure merge seam: computeEffectiveFlags takes the registry as a
93
+ // parameter, so a graduation flip is simulated without rewriting the
94
+ // production constant (no brittle source rewriting).
95
+ const flippedRegistry = DEFAULT_FEATURE_FLAGS.map(f => f.id === 'gfi' ? { ...f, enabled: !f.enabled } : f);
96
+ const gfiDefaultBefore = DEFAULT_FEATURE_FLAGS.find(f => f.id === 'gfi')?.enabled;
97
+ const gfiDefaultAfter = flippedRegistry.find(f => f.id === 'gfi')?.enabled;
98
+ expect(gfiDefaultAfter).toBe(!gfiDefaultBefore);
99
+ // Sparse fresh config follows the NEW registry default.
100
+ const sparse = computeEffectiveFlags({}, flippedRegistry, 'sparse-test');
101
+ expect(sparse.flags.gfi?.enabled).toBe(gfiDefaultAfter);
102
+ // The pre-PRI-645 bootstrap shape (a materialized default snapshot)
103
+ // would keep serving the OLD value after the flip — frozen default.
104
+ const oldSnapshot = computeEffectiveFlags({ gfi: { category: 'quiet', enabled: gfiDefaultBefore ?? false } }, flippedRegistry, 'dense-test');
105
+ expect(oldSnapshot.flags.gfi?.enabled).toBe(gfiDefaultBefore);
106
+ });
107
+ });
108
+ describe('PRI-645 existing-config compatibility preserved', () => {
109
+ it('PRI-638 legacy diagnostician_split_pipeline=false still folds Diagnostician off', () => {
110
+ const config = withFeatures({
111
+ diagnostician_split_pipeline: { category: 'quiet', enabled: false },
112
+ });
113
+ const effective = computeEffectivePdConfig(config);
114
+ expect(effective.config.internalAgents.agents.diagnostician?.enabled).toBe(false);
115
+ expect(effective.warnings.some(w => w.includes('PRI-638 cutover'))).toBe(true);
116
+ });
117
+ it('PRI-609 snake_case aliases still normalize onto canonical IDs', () => {
118
+ expect(Object.keys(FEATURE_FLAG_ALIASES).length).toBeGreaterThan(0);
119
+ for (const [alias, canonical] of Object.entries(FEATURE_FLAG_ALIASES)) {
120
+ const config = withFeatures({
121
+ [alias]: { category: 'quiet', enabled: false },
122
+ });
123
+ const effective = computeEffectivePdConfig(config);
124
+ // Alias key controls the canonical flag's effective value.
125
+ expect(effective.config.features[canonical]?.enabled).toBe(false);
126
+ // The alias key itself never becomes a capability entry.
127
+ expect(Object.hasOwn(effective.config.features, alias)).toBe(false);
128
+ }
129
+ });
130
+ it('explicit owner overrides keep their source on a sparse-config workspace', () => {
131
+ const config = withFeatures({
132
+ intent_engineering: { category: 'quiet', enabled: true, source: 'owner' },
133
+ });
134
+ const effective = computeEffectivePdConfig(config);
135
+ expect(effective.config.features.intent_engineering).toEqual({
136
+ category: 'quiet',
137
+ enabled: true,
138
+ source: 'owner',
139
+ });
140
+ expect(effective.featuresChangedFromDefault).toContain('intent_engineering');
141
+ });
142
+ });
143
+ //# sourceMappingURL=pd-config-sparse-bootstrap.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pd-config-sparse-bootstrap.test.js","sourceRoot":"","sources":["../../../../src/runtime-v2/config/__tests__/pd-config-sparse-bootstrap.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,8CAA8C,CAAC;AAGtD,SAAS,YAAY;IACnB,OAAO,EAAE,GAAG,kBAAkB,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;AACnD,CAAC;AAED;;mCAEmC;AACnC,SAAS,YAAY,CAAC,QAA0C;IAC9D,OAAO,EAAE,GAAG,kBAAkB,EAAE,EAAE,QAAQ,EAAE,CAAC;AAC/C,CAAC;AAED,QAAQ,CAAC,sDAAsD,EAAE,GAAG,EAAE;IACpE,EAAE,CAAC,iFAAiF,EAAE,GAAG,EAAE;QACzF,MAAM,eAAe,GAAG,wBAAwB,CAAC,YAAY,EAAE,CAAC,CAAC;QACjE,2EAA2E;QAC3E,MAAM,cAAc,GAAG,wBAAwB,CAAC,kBAAkB,EAAE,CAAC,CAAC;QAEtE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAChG,KAAK,MAAM,IAAI,IAAI,qBAAqB,EAAE,CAAC;YACzC,MAAM,SAAS,GAAG,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC3D,MAAM,CAAC,SAAS,EAAE,QAAQ,IAAI,CAAC,EAAE,oCAAoC,CAAC,CAAC,WAAW,EAAE,CAAC;YACrF,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;YAC9E,oEAAoE;YACpE,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACrE,CAAC;QACD,4EAA4E;QAC5E,MAAM,CAAC,eAAe,CAAC,0BAA0B,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+FAA+F,EAAE,GAAG,EAAE;QACvG,iEAAiE;QACjE,qEAAqE;QACrE,MAAM,SAAS,GAAG,wBAAwB,CAAC,YAAY,EAAE,CAAC,CAAC;QAC3D,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACxE,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YACpE,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACjC,MAAM,CAAC,GAAG,EAAE,kBAAkB,EAAE,iBAAiB,CAAC,CAAC,WAAW,EAAE,CAAC;YACjE,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YAC3C,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,iDAAiD,EAAE,GAAG,EAAE;IAC/D,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,SAAS,GAAG,wBAAwB,CAAC,YAAY,EAAE,CAAC,CAAC;QAC3D,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACxF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wEAAwE,EAAE,GAAG,EAAE;QAChF,MAAM,SAAS,GAAG,wBAAwB,CAAC,YAAY,EAAE,CAAC,CAAC;QAC3D,MAAM,GAAG,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,kBAAkB,CAAC,CAAC;QACzE,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACnG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,MAAM,SAAS,GAAG,wBAAwB,CAAC,YAAY,EAAE,CAAC,CAAC;QAC3D,MAAM,GAAG,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC;QAC5D,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IACvF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;QAC3E,MAAM,MAAM,GAAG,wBAAwB,CAAC,YAAY,EAAE,CAAC,CAAC;QACxD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QAEvF,wEAAwE;QACxE,oEAAoE;QACpE,mBAAmB;QACnB,MAAM,SAAS,GAAG,wBAAwB,CAAC,YAAY,CAAC;YACtD,SAAS,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE;SAC/C,CAAC,CAAC,CAAC;QACJ,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QAC1F,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,gCAAgC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChG,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,sEAAsE,EAAE,GAAG,EAAE;IACpF,EAAE,CAAC,8EAA8E,EAAE,GAAG,EAAE;QACtF,iEAAiE;QACjE,qEAAqE;QACrE,qDAAqD;QACrD,MAAM,eAAe,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CACpD,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CACnD,CAAC;QACF,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,OAAO,CAAC;QAClF,MAAM,eAAe,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,OAAO,CAAC;QAC3E,MAAM,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,gBAAgB,CAAC,CAAC;QAEhD,wDAAwD;QACxD,MAAM,MAAM,GAAG,qBAAqB,CAAC,EAAE,EAAE,eAAe,EAAE,aAAa,CAAC,CAAC;QACzE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAExD,oEAAoE;QACpE,oEAAoE;QACpE,MAAM,WAAW,GAAG,qBAAqB,CACvC,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,gBAAgB,IAAI,KAAK,EAAE,EAAE,EAClE,eAAe,EACf,YAAY,CACb,CAAC;QACF,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,iDAAiD,EAAE,GAAG,EAAE;IAC/D,EAAE,CAAC,iFAAiF,EAAE,GAAG,EAAE;QACzF,MAAM,MAAM,GAAG,YAAY,CAAC;YAC1B,4BAA4B,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;SACpE,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAC;QACnD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClF,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACvE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACpE,KAAK,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAE,CAAC;YACtE,MAAM,MAAM,GAAG,YAAY,CAAC;gBAC1B,CAAC,KAAK,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;aAC/C,CAAC,CAAC;YACH,MAAM,SAAS,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAC;YACnD,2DAA2D;YAC3D,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClE,yDAAyD;YACzD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtE,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yEAAyE,EAAE,GAAG,EAAE;QACjF,MAAM,MAAM,GAAG,YAAY,CAAC;YAC1B,kBAAkB,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE;SAC1E,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAC;QACnD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC;YAC3D,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,OAAO;SAChB,CAAC,CAAC;QACH,MAAM,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -2,13 +2,15 @@ import { describe, expect, it } from 'vitest';
2
2
  import * as fs from 'node:fs';
3
3
  import * as path from 'node:path';
4
4
  import { DEFAULT_FEATURE_FLAGS } from '../feature-flag-contract.js';
5
- // PRI-574: prevent silent drift between the installer's hardcoded
6
- // .pd/config.yaml template (create-principles-disciple/src/mvp-config.ts)
7
- // and the runtime registry (DEFAULT_FEATURE_FLAGS). The installer package
8
- // deliberately has no dependency on @principles/core (independent
9
- // installability), so this contract lives on the core side and parses the
10
- // installer SOURCE instead of importing it.
11
- const REGISTRY_IDS = new Set(DEFAULT_FEATURE_FLAGS.map(f => f.id));
5
+ // PRI-645: the installer's hardcoded .pd/config.yaml template
6
+ // (create-principles-disciple/src/mvp-config.ts) must NOT duplicate registry
7
+ // defaults. The old PRI-574 contract kept a full default snapshot "aligned"
8
+ // with the registry; the converged contract is that the duplicate must not
9
+ // exist at all config records intent, the registry owns defaults.
10
+ //
11
+ // The installer package deliberately has no dependency on @principles/core
12
+ // (independent installability), so this contract lives on the core side and
13
+ // parses the installer SOURCE instead of importing it.
12
14
  const REGISTRY_BY_ID = new Map(DEFAULT_FEATURE_FLAGS.map(f => [f.id, f]));
13
15
  function findInstallerSource() {
14
16
  let dir = process.cwd();
@@ -28,7 +30,6 @@ function parseInstallerFeatures(source) {
28
30
  // Entries look like:
29
31
  // prompt: { category: 'core', enabled: true, source: 'system' },
30
32
  // 'host.codex': { category: 'core', enabled: true, source: 'system' },
31
- // (PRI-637: entries carry a system provenance label — tolerated, not required.)
32
33
  const entryPattern = /(^|\n)\s{6}'?([a-z0-9_.]+)'?:\s*\{\s*category:\s*'([a-z_]+)',\s*enabled:\s*(true|false),?\s*(?:source:\s*'[a-z_]+',?\s*)?\}/g;
33
34
  const entries = [];
34
35
  for (const match of source.matchAll(entryPattern)) {
@@ -39,31 +40,47 @@ function parseInstallerFeatures(source) {
39
40
  }
40
41
  entries.push({ id, category, enabled: enabledRaw === 'true' });
41
42
  }
42
- if (entries.length === 0) {
43
- throw new Error('parsed zero installer feature entries — mvp-config.ts template shape changed; update this parser');
44
- }
45
43
  return entries;
46
44
  }
47
- describe('PRI-574 installer config template runtime flag registry parity', () => {
45
+ describe('PRI-645 installer bootstrap config ↔ registry sparse-override contract', () => {
48
46
  const source = fs.readFileSync(findInstallerSource(), 'utf8');
49
47
  const entries = parseInstallerFeatures(source);
50
- it('every flag written by the installer exists in the runtime registry (no orphans)', () => {
51
- const orphans = entries.filter(e => !REGISTRY_IDS.has(e.id)).map(e => e.id);
52
- expect(orphans, `installer writes flags unknown to the registry: ${orphans.join(', ')}`).toEqual([]);
48
+ it("declares an empty features map in the fresh template (no snapshot of registry defaults)", () => {
49
+ // Template-shape guard: the literal `features: {}` must be present in
50
+ // generateConfigYamlContent. If this fails, the template shape changed —
51
+ // update this contract deliberately (an intentional bootstrap override is
52
+ // legal but must satisfy the contracts below).
53
+ expect(source).toContain('features: {},');
53
54
  });
54
- it('every installer flag category matches the registry category', () => {
55
- const mismatches = entries
56
- .filter(e => REGISTRY_IDS.has(e.id))
57
- .filter(e => REGISTRY_BY_ID.get(e.id)?.category !== e.category)
58
- .map(e => `${e.id}: installer=${e.category} registry=${REGISTRY_BY_ID.get(e.id)?.category}`);
59
- expect(mismatches, `category drift detected: ${mismatches.join('; ')}`).toEqual([]);
55
+ it('materializes zero default-equivalent registry entries (duplicate defaults must not exist)', () => {
56
+ // Contract A: any entry the installer writes whose category AND enabled
57
+ // equal the registry default is a forbidden default snapshot — it would
58
+ // freeze today's defaults against future registry flips.
59
+ const snapshots = entries
60
+ .filter(e => {
61
+ const def = REGISTRY_BY_ID.get(e.id);
62
+ return def !== undefined && def.category === e.category && def.enabled === e.enabled;
63
+ })
64
+ .map(e => e.id);
65
+ expect(snapshots, `installer materializes registry-default-equivalent entries: ${snapshots.join(', ')} — remove them; defaults belong to the registry`).toEqual([]);
66
+ });
67
+ it('every bootstrap entry exists in the runtime registry (no orphans)', () => {
68
+ const orphans = entries.filter(e => !REGISTRY_BY_ID.has(e.id)).map(e => e.id);
69
+ expect(orphans, `installer writes flags unknown to the registry: ${orphans.join(', ')}`).toEqual([]);
60
70
  });
61
- it('keeps installer enabled values aligned with runtime defaults', () => {
62
- const mismatches = entries
63
- .filter(e => REGISTRY_IDS.has(e.id))
64
- .filter(e => e.enabled !== REGISTRY_BY_ID.get(e.id)?.enabled)
65
- .map(e => `${e.id}: installer=${e.enabled} registry=${REGISTRY_BY_ID.get(e.id)?.enabled}`);
66
- expect(mismatches, `enabled-value drift detected: ${mismatches.join('; ')}`).toEqual([]);
71
+ it('every bootstrap entry differs from the registry default (intentional override only)', () => {
72
+ // Contract C: a bootstrap entry is legal only as a DELIBERATE deviation.
73
+ // There is no allowlist: if an entry equals the default, Contract A
74
+ // already fails it. This test keeps the intent explicit for future edits.
75
+ const equivalences = entries
76
+ .filter(e => {
77
+ const def = REGISTRY_BY_ID.get(e.id);
78
+ return def !== undefined && def.category === e.category && def.enabled === e.enabled;
79
+ })
80
+ .map(e => e.id);
81
+ expect(equivalences).toEqual([]);
82
+ // Current expected steady state: zero bootstrap overrides at all.
83
+ expect(entries, 'if adding a bootstrap override, document the product/safety reason in mvp-config.ts and update this expectation').toEqual([]);
67
84
  });
68
85
  });
69
86
  //# sourceMappingURL=installer-config-parity.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"installer-config-parity.test.js","sourceRoot":"","sources":["../../../../src/runtime-v2/feature-flags/__tests__/installer-config-parity.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"installer-config-parity.test.js","sourceRoot":"","sources":["../../../../src/runtime-v2/feature-flags/__tests__/installer-config-parity.test.ts"],"names":[],"mappings":"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"}
@@ -58,5 +58,14 @@ describe('formatAdversarialFeedback', () => {
58
58
  const b = formatAdversarialFeedback(cases);
59
59
  expect(a).toBe(b);
60
60
  });
61
+ it('PRI-634 PR-A: absent actualDecision renders the errorType, never "got undefined"', () => {
62
+ // SPEC §14 — a throw/timeout failure has NO actual decision. The line
63
+ // must surface the sandbox error classification instead.
64
+ const text = formatAdversarialFeedback([
65
+ makeFailedCase({ actualDecision: undefined, errorType: 'runtime_error', rationale: 'paramsSummary.includes is not a function' }),
66
+ ]);
67
+ expect(text).toContain('error runtime_error');
68
+ expect(text).not.toContain('undefined');
69
+ });
61
70
  });
62
71
  //# sourceMappingURL=adversarial-feedback.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"adversarial-feedback.test.js","sourceRoot":"","sources":["../../../../src/runtime-v2/internalization/__tests__/adversarial-feedback.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"adversarial-feedback.test.js","sourceRoot":"","sources":["../../../../src/runtime-v2/internalization/__tests__/adversarial-feedback.test.ts"],"names":[],"mappings":"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"}