create-principles-disciple 1.127.1 → 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.
- package/console/dist/server/config/pd-config-store.js +7 -2
- package/core/dist/runtime-v2/activation/__tests__/production-gate-deps.test.js +69 -0
- package/core/dist/runtime-v2/activation/__tests__/production-gate-deps.test.js.map +1 -1
- package/core/dist/runtime-v2/activation/production-gate-deps.d.ts.map +1 -1
- package/core/dist/runtime-v2/activation/production-gate-deps.js +13 -46
- package/core/dist/runtime-v2/activation/production-gate-deps.js.map +1 -1
- package/core/dist/runtime-v2/config/__tests__/pd-config-sparse-bootstrap.test.d.ts +2 -0
- package/core/dist/runtime-v2/config/__tests__/pd-config-sparse-bootstrap.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/config/__tests__/pd-config-sparse-bootstrap.test.js +143 -0
- package/core/dist/runtime-v2/config/__tests__/pd-config-sparse-bootstrap.test.js.map +1 -0
- package/core/dist/runtime-v2/feature-flags/__tests__/installer-config-parity.test.js +44 -27
- package/core/dist/runtime-v2/feature-flags/__tests__/installer-config-parity.test.js.map +1 -1
- package/core/dist/runtime-v2/internalization/__tests__/adversarial-feedback.test.js +9 -0
- package/core/dist/runtime-v2/internalization/__tests__/adversarial-feedback.test.js.map +1 -1
- package/core/dist/runtime-v2/internalization/__tests__/artificer-prompt-builder.test.js +15 -5
- package/core/dist/runtime-v2/internalization/__tests__/artificer-prompt-builder.test.js.map +1 -1
- package/core/dist/runtime-v2/internalization/__tests__/evaluator-artificer-repair-replay.test.d.ts +2 -0
- package/core/dist/runtime-v2/internalization/__tests__/evaluator-artificer-repair-replay.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/internalization/__tests__/evaluator-artificer-repair-replay.test.js +413 -0
- package/core/dist/runtime-v2/internalization/__tests__/evaluator-artificer-repair-replay.test.js.map +1 -0
- package/core/dist/runtime-v2/internalization/__tests__/evaluator-gate-authority.test.js +136 -0
- package/core/dist/runtime-v2/internalization/__tests__/evaluator-gate-authority.test.js.map +1 -1
- package/core/dist/runtime-v2/internalization/__tests__/repair-replay-resolver.test.d.ts +2 -0
- package/core/dist/runtime-v2/internalization/__tests__/repair-replay-resolver.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/internalization/__tests__/repair-replay-resolver.test.js +340 -0
- package/core/dist/runtime-v2/internalization/__tests__/repair-replay-resolver.test.js.map +1 -0
- package/core/dist/runtime-v2/internalization/adversarial-feedback.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/adversarial-feedback.js +7 -1
- package/core/dist/runtime-v2/internalization/adversarial-feedback.js.map +1 -1
- package/core/dist/runtime-v2/internalization/artificer-prompt-builder.d.ts +9 -2
- package/core/dist/runtime-v2/internalization/artificer-prompt-builder.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/artificer-prompt-builder.js +19 -1
- package/core/dist/runtime-v2/internalization/artificer-prompt-builder.js.map +1 -1
- package/core/dist/runtime-v2/internalization/artificer-runner.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/artificer-runner.js +84 -7
- package/core/dist/runtime-v2/internalization/artificer-runner.js.map +1 -1
- package/core/dist/runtime-v2/internalization/evaluator-output.d.ts +18 -1
- package/core/dist/runtime-v2/internalization/evaluator-output.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/evaluator-output.js +12 -2
- package/core/dist/runtime-v2/internalization/evaluator-output.js.map +1 -1
- package/core/dist/runtime-v2/internalization/evaluator-runner.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/evaluator-runner.js +99 -5
- package/core/dist/runtime-v2/internalization/evaluator-runner.js.map +1 -1
- package/core/dist/runtime-v2/internalization/refiner-sandbox-wrapper.d.ts +18 -1
- package/core/dist/runtime-v2/internalization/refiner-sandbox-wrapper.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/refiner-sandbox-wrapper.js +20 -0
- package/core/dist/runtime-v2/internalization/refiner-sandbox-wrapper.js.map +1 -1
- package/core/dist/runtime-v2/internalization/repair-replay-resolver.d.ts +112 -0
- package/core/dist/runtime-v2/internalization/repair-replay-resolver.d.ts.map +1 -0
- package/core/dist/runtime-v2/internalization/repair-replay-resolver.js +332 -0
- package/core/dist/runtime-v2/internalization/repair-replay-resolver.js.map +1 -0
- package/core/dist/telemetry-event.d.ts +2 -2
- package/core/dist/telemetry-event.d.ts.map +1 -1
- package/core/dist/telemetry-event.js +14 -0
- package/core/dist/telemetry-event.js.map +1 -1
- package/dist/installer.d.ts.map +1 -1
- package/dist/installer.js +16 -12
- package/dist/installer.js.map +1 -1
- package/dist/mvp-config.d.ts +22 -15
- package/dist/mvp-config.d.ts.map +1 -1
- package/dist/mvp-config.js +48 -106
- package/dist/mvp-config.js.map +1 -1
- package/package.json +1 -1
- package/pd-cli/dist/commands/console.d.ts +13 -0
- package/pd-cli/dist/commands/console.d.ts.map +1 -1
- package/pd-cli/dist/commands/console.js +104 -0
- package/pd-cli/dist/commands/console.js.map +1 -1
- package/pd-cli/dist/commands/runtime-init.d.ts.map +1 -1
- package/pd-cli/dist/commands/runtime-init.js +8 -12
- package/pd-cli/dist/commands/runtime-init.js.map +1 -1
- package/plugin/dist/bundle.js +444 -432
- package/plugin/dist/governance-audit.js +126 -126
- 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 : {
|
|
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 : {
|
|
485
|
+
features: isRecord(rawConfig.features) ? rawConfig.features : {},
|
|
481
486
|
runtimeProfiles: { ...effective.config.runtimeProfiles },
|
|
482
487
|
internalAgents: {
|
|
483
488
|
defaultRuntime: defaultRuntimeRaw,
|
|
@@ -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;
|
|
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 {
|
|
25
|
+
import { validateRuleHostResult } from '../internalization/rule-host-validator.js';
|
|
26
26
|
import { safeStringifyPreview } from '../feedback/safe-stringify.js';
|
|
27
27
|
/**
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
*
|
|
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
|
-
|
|
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
|
-
//
|
|
121
|
-
//
|
|
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
|
-
|
|
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,
|
|
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 @@
|
|
|
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":"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"}
|
|
@@ -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-
|
|
6
|
-
//
|
|
7
|
-
//
|
|
8
|
-
//
|
|
9
|
-
//
|
|
10
|
-
//
|
|
11
|
-
|
|
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-
|
|
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(
|
|
51
|
-
|
|
52
|
-
|
|
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('
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
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('
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
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":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAEpE,
|
|
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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"}
|