@principles/core 1.241.0 → 1.243.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 (84) hide show
  1. package/dist/runtime-v2/feature-flags/__tests__/context-manifest-budget-flag.test.d.ts +12 -0
  2. package/dist/runtime-v2/feature-flags/__tests__/context-manifest-budget-flag.test.d.ts.map +1 -0
  3. package/dist/runtime-v2/feature-flags/__tests__/context-manifest-budget-flag.test.js +114 -0
  4. package/dist/runtime-v2/feature-flags/__tests__/context-manifest-budget-flag.test.js.map +1 -0
  5. package/dist/runtime-v2/feature-flags/__tests__/progressive-evaluator-flag.test.d.ts +8 -0
  6. package/dist/runtime-v2/feature-flags/__tests__/progressive-evaluator-flag.test.d.ts.map +1 -0
  7. package/dist/runtime-v2/feature-flags/__tests__/progressive-evaluator-flag.test.js +56 -0
  8. package/dist/runtime-v2/feature-flags/__tests__/progressive-evaluator-flag.test.js.map +1 -0
  9. package/dist/runtime-v2/feature-flags/feature-flag-contract.d.ts.map +1 -1
  10. package/dist/runtime-v2/feature-flags/feature-flag-contract.js +14 -0
  11. package/dist/runtime-v2/feature-flags/feature-flag-contract.js.map +1 -1
  12. package/dist/runtime-v2/internalization/__tests__/candidate-lineage.property.test.d.ts +15 -0
  13. package/dist/runtime-v2/internalization/__tests__/candidate-lineage.property.test.d.ts.map +1 -0
  14. package/dist/runtime-v2/internalization/__tests__/candidate-lineage.property.test.js +301 -0
  15. package/dist/runtime-v2/internalization/__tests__/candidate-lineage.property.test.js.map +1 -0
  16. package/dist/runtime-v2/internalization/__tests__/context-manifest.property.test.d.ts +12 -0
  17. package/dist/runtime-v2/internalization/__tests__/context-manifest.property.test.d.ts.map +1 -0
  18. package/dist/runtime-v2/internalization/__tests__/context-manifest.property.test.js +176 -0
  19. package/dist/runtime-v2/internalization/__tests__/context-manifest.property.test.js.map +1 -0
  20. package/dist/runtime-v2/internalization/__tests__/progressive-evaluator.property.test.d.ts +11 -0
  21. package/dist/runtime-v2/internalization/__tests__/progressive-evaluator.property.test.d.ts.map +1 -0
  22. package/dist/runtime-v2/internalization/__tests__/progressive-evaluator.property.test.js +154 -0
  23. package/dist/runtime-v2/internalization/__tests__/progressive-evaluator.property.test.js.map +1 -0
  24. package/dist/runtime-v2/internalization/__tests__/prompt-budget-manager.property.test.d.ts +12 -0
  25. package/dist/runtime-v2/internalization/__tests__/prompt-budget-manager.property.test.d.ts.map +1 -0
  26. package/dist/runtime-v2/internalization/__tests__/prompt-budget-manager.property.test.js +254 -0
  27. package/dist/runtime-v2/internalization/__tests__/prompt-budget-manager.property.test.js.map +1 -0
  28. package/dist/runtime-v2/internalization/__tests__/resolve-injection.property.test.d.ts +15 -0
  29. package/dist/runtime-v2/internalization/__tests__/resolve-injection.property.test.d.ts.map +1 -0
  30. package/dist/runtime-v2/internalization/__tests__/resolve-injection.property.test.js +150 -0
  31. package/dist/runtime-v2/internalization/__tests__/resolve-injection.property.test.js.map +1 -0
  32. package/dist/runtime-v2/internalization/artificer-runner.d.ts.map +1 -1
  33. package/dist/runtime-v2/internalization/artificer-runner.js +12 -0
  34. package/dist/runtime-v2/internalization/artificer-runner.js.map +1 -1
  35. package/dist/runtime-v2/internalization/candidate-lineage.d.ts +136 -0
  36. package/dist/runtime-v2/internalization/candidate-lineage.d.ts.map +1 -0
  37. package/dist/runtime-v2/internalization/candidate-lineage.js +230 -0
  38. package/dist/runtime-v2/internalization/candidate-lineage.js.map +1 -0
  39. package/dist/runtime-v2/internalization/context-manifest.d.ts +117 -0
  40. package/dist/runtime-v2/internalization/context-manifest.d.ts.map +1 -0
  41. package/dist/runtime-v2/internalization/context-manifest.js +156 -0
  42. package/dist/runtime-v2/internalization/context-manifest.js.map +1 -0
  43. package/dist/runtime-v2/internalization/context-manifests.d.ts +74 -0
  44. package/dist/runtime-v2/internalization/context-manifests.d.ts.map +1 -0
  45. package/dist/runtime-v2/internalization/context-manifests.js +192 -0
  46. package/dist/runtime-v2/internalization/context-manifests.js.map +1 -0
  47. package/dist/runtime-v2/internalization/dimension-coverage-policy.d.ts +54 -0
  48. package/dist/runtime-v2/internalization/dimension-coverage-policy.d.ts.map +1 -0
  49. package/dist/runtime-v2/internalization/dimension-coverage-policy.js +70 -0
  50. package/dist/runtime-v2/internalization/dimension-coverage-policy.js.map +1 -0
  51. package/dist/runtime-v2/internalization/dreamer-runner.d.ts.map +1 -1
  52. package/dist/runtime-v2/internalization/dreamer-runner.js +13 -1
  53. package/dist/runtime-v2/internalization/dreamer-runner.js.map +1 -1
  54. package/dist/runtime-v2/internalization/evaluator-output.d.ts +26 -0
  55. package/dist/runtime-v2/internalization/evaluator-output.d.ts.map +1 -1
  56. package/dist/runtime-v2/internalization/evaluator-output.js +7 -1
  57. package/dist/runtime-v2/internalization/evaluator-output.js.map +1 -1
  58. package/dist/runtime-v2/internalization/evaluator-runner.d.ts.map +1 -1
  59. package/dist/runtime-v2/internalization/evaluator-runner.js +13 -0
  60. package/dist/runtime-v2/internalization/evaluator-runner.js.map +1 -1
  61. package/dist/runtime-v2/internalization/progressive-evaluator.d.ts +115 -0
  62. package/dist/runtime-v2/internalization/progressive-evaluator.d.ts.map +1 -0
  63. package/dist/runtime-v2/internalization/progressive-evaluator.js +248 -0
  64. package/dist/runtime-v2/internalization/progressive-evaluator.js.map +1 -0
  65. package/dist/runtime-v2/internalization/prompt-budget-manager.d.ts +90 -0
  66. package/dist/runtime-v2/internalization/prompt-budget-manager.d.ts.map +1 -0
  67. package/dist/runtime-v2/internalization/prompt-budget-manager.js +149 -0
  68. package/dist/runtime-v2/internalization/prompt-budget-manager.js.map +1 -0
  69. package/dist/runtime-v2/internalization/resolve-injection.d.ts +62 -0
  70. package/dist/runtime-v2/internalization/resolve-injection.d.ts.map +1 -0
  71. package/dist/runtime-v2/internalization/resolve-injection.js +78 -0
  72. package/dist/runtime-v2/internalization/resolve-injection.js.map +1 -0
  73. package/dist/runtime-v2/internalization/scribe-runner.d.ts.map +1 -1
  74. package/dist/runtime-v2/internalization/scribe-runner.js +10 -0
  75. package/dist/runtime-v2/internalization/scribe-runner.js.map +1 -1
  76. package/dist/runtime-v2/internalization/summary-field-reader.d.ts +38 -0
  77. package/dist/runtime-v2/internalization/summary-field-reader.d.ts.map +1 -0
  78. package/dist/runtime-v2/internalization/summary-field-reader.js +108 -0
  79. package/dist/runtime-v2/internalization/summary-field-reader.js.map +1 -0
  80. package/dist/runtime-v2/runner/base-peer-runner.d.ts +36 -0
  81. package/dist/runtime-v2/runner/base-peer-runner.d.ts.map +1 -1
  82. package/dist/runtime-v2/runner/base-peer-runner.js +71 -0
  83. package/dist/runtime-v2/runner/base-peer-runner.js.map +1 -1
  84. package/package.json +1 -1
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Feature-flag registration + production propagation test for Layer 1
3
+ * `context_manifest_budget` (design §8, task 5.9, ERR-024).
4
+ *
5
+ * Mirrors artifact-summary-redundancy-flag.test.ts: tests the REAL wiring path
6
+ * (config → effective config → feature flag), not just the leaf function.
7
+ *
8
+ * @see .kiro/specs/internalization-progressive-disclosure/design.md §8, §8.1
9
+ * @see .kiro/specs/internalization-progressive-disclosure/requirements.md Requirement 11.1, 11.2
10
+ */
11
+ export {};
12
+ //# sourceMappingURL=context-manifest-budget-flag.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-manifest-budget-flag.test.d.ts","sourceRoot":"","sources":["../../../../src/runtime-v2/feature-flags/__tests__/context-manifest-budget-flag.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
@@ -0,0 +1,114 @@
1
+ /**
2
+ * Feature-flag registration + production propagation test for Layer 1
3
+ * `context_manifest_budget` (design §8, task 5.9, ERR-024).
4
+ *
5
+ * Mirrors artifact-summary-redundancy-flag.test.ts: tests the REAL wiring path
6
+ * (config → effective config → feature flag), not just the leaf function.
7
+ *
8
+ * @see .kiro/specs/internalization-progressive-disclosure/design.md §8, §8.1
9
+ * @see .kiro/specs/internalization-progressive-disclosure/requirements.md Requirement 11.1, 11.2
10
+ */
11
+ import { describe, it, expect } from 'vitest';
12
+ import { DEFAULT_FEATURE_FLAGS, computeEffectiveFlags, } from '../feature-flag-contract.js';
13
+ import { getDefaultPdConfig, computeEffectivePdConfig, computeFeatureFlagsFromConfig, } from '../../config/index.js';
14
+ const FLAG_ID = 'context_manifest_budget';
15
+ function findFlag() {
16
+ const flag = DEFAULT_FEATURE_FLAGS.find((f) => f.id === FLAG_ID);
17
+ if (!flag) {
18
+ throw new Error(`${FLAG_ID} must be registered in DEFAULT_FEATURE_FLAGS`);
19
+ }
20
+ return flag;
21
+ }
22
+ describe('context_manifest_budget flag registration (Layer 1 / PR 2)', () => {
23
+ it('is registered in DEFAULT_FEATURE_FLAGS', () => {
24
+ expect(findFlag()).toBeDefined();
25
+ });
26
+ it('has category "quiet" (must not expand MVP-Core default-on set)', () => {
27
+ expect(findFlag().category).toBe('quiet');
28
+ });
29
+ it('defaults to enabled=false (default off)', () => {
30
+ expect(findFlag().enabled).toBe(false);
31
+ });
32
+ it('has since === 2026-07-26 (design approval date)', () => {
33
+ expect(findFlag().since).toBe('2026-07-26');
34
+ });
35
+ it('description references Layer 1 / manifest / budget / progressive disclosure', () => {
36
+ const desc = (findFlag().description ?? '').toLowerCase();
37
+ expect(desc.includes('layer 1')
38
+ || desc.includes('manifest')
39
+ || desc.includes('budget')
40
+ || desc.includes('progressive disclosure')).toBe(true);
41
+ });
42
+ it('is disabled by default at the contract layer with no overrides', () => {
43
+ const r = computeEffectiveFlags({}, DEFAULT_FEATURE_FLAGS, '/test/.pd/feature-flags.yaml');
44
+ expect(r.flags[FLAG_ID]?.enabled).toBe(false);
45
+ });
46
+ it('can be explicitly enabled at the contract layer', () => {
47
+ const r = computeEffectiveFlags({ [FLAG_ID]: { enabled: true } }, DEFAULT_FEATURE_FLAGS, '/test/.pd/feature-flags.yaml');
48
+ expect(r.flags[FLAG_ID]?.enabled).toBe(true);
49
+ });
50
+ });
51
+ describe('context_manifest_budget flag propagation through PD config (Layer 1 / PR 2)', () => {
52
+ it('is present in getDefaultPdConfig().features with quiet/false', () => {
53
+ const defaults = getDefaultPdConfig();
54
+ expect(Object.hasOwn(defaults.features, FLAG_ID)).toBe(true);
55
+ expect(defaults.features[FLAG_ID]).toEqual({ category: 'quiet', enabled: false });
56
+ });
57
+ it('is disabled by default when computing feature flags from a null config', () => {
58
+ const effective = computeEffectivePdConfig(null);
59
+ const result = computeFeatureFlagsFromConfig(effective);
60
+ expect(result.flags[FLAG_ID]?.enabled).toBe(false);
61
+ expect(result.flags[FLAG_ID]?.category).toBe('quiet');
62
+ });
63
+ it('can be enabled via PD config override', () => {
64
+ const rawConfig = getDefaultPdConfig();
65
+ rawConfig.features[FLAG_ID] = { category: 'quiet', enabled: true };
66
+ const effective = computeEffectivePdConfig(rawConfig);
67
+ const result = computeFeatureFlagsFromConfig(effective);
68
+ expect(result.flags[FLAG_ID]?.enabled).toBe(true);
69
+ expect(result.warnings.some((w) => w.includes(FLAG_ID) && w.includes('unknown flag')), 'flag must be registered (no "unknown flag" warning)').toBe(false);
70
+ });
71
+ });
72
+ // ── 5.12: switch independence (EXAMPLE) ───────────────────────────────────────
73
+ //
74
+ // design §8.1: context_manifest_budget and internalization_core_grounding are
75
+ // independent flags with no coupling or order dependency. Enumerate all 4
76
+ // value combinations and assert neither affects the other's resolution.
77
+ describe('5.12 — switch independence: context_manifest_budget × internalization_core_grounding', () => {
78
+ const GROUNDING = 'internalization_core_grounding';
79
+ it('both off: both resolve false/their-default', () => {
80
+ const effective = computeEffectivePdConfig(null);
81
+ const result = computeFeatureFlagsFromConfig(effective);
82
+ expect(result.flags[FLAG_ID]?.enabled).toBe(false);
83
+ // core_grounding defaults ON (quiet, default-on) — verify it's unaffected.
84
+ expect(result.flags[GROUNDING]?.enabled).toBe(true);
85
+ });
86
+ it('context_manifest_budget ON does not change core_grounding', () => {
87
+ const rawConfig = getDefaultPdConfig();
88
+ rawConfig.features[FLAG_ID] = { category: 'quiet', enabled: true };
89
+ const effective = computeEffectivePdConfig(rawConfig);
90
+ const result = computeFeatureFlagsFromConfig(effective);
91
+ expect(result.flags[FLAG_ID]?.enabled).toBe(true);
92
+ // core_grounding stays at its default (true), unaffected.
93
+ expect(result.flags[GROUNDING]?.enabled).toBe(true);
94
+ });
95
+ it('core_grounding OFF does not change context_manifest_budget', () => {
96
+ const rawConfig = getDefaultPdConfig();
97
+ rawConfig.features[GROUNDING] = { category: 'quiet', enabled: false };
98
+ const effective = computeEffectivePdConfig(rawConfig);
99
+ const result = computeFeatureFlagsFromConfig(effective);
100
+ expect(result.flags[GROUNDING]?.enabled).toBe(false);
101
+ // context_manifest_budget stays at its default (false), unaffected.
102
+ expect(result.flags[FLAG_ID]?.enabled).toBe(false);
103
+ });
104
+ it('both ON: each resolves independently (no coupling, no order dependency)', () => {
105
+ const rawConfig = getDefaultPdConfig();
106
+ rawConfig.features[FLAG_ID] = { category: 'quiet', enabled: true };
107
+ rawConfig.features[GROUNDING] = { category: 'quiet', enabled: true };
108
+ const effective = computeEffectivePdConfig(rawConfig);
109
+ const result = computeFeatureFlagsFromConfig(effective);
110
+ expect(result.flags[FLAG_ID]?.enabled).toBe(true);
111
+ expect(result.flags[GROUNDING]?.enabled).toBe(true);
112
+ });
113
+ });
114
+ //# sourceMappingURL=context-manifest-budget-flag.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-manifest-budget-flag.test.js","sourceRoot":"","sources":["../../../../src/runtime-v2/feature-flags/__tests__/context-manifest-budget-flag.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Feature-flag registration test for Layer 2 `progressive_evaluator`
3
+ * (design §8, task 9.11, ERR-024).
4
+ *
5
+ * @see .kiro/specs/internalization-progressive-disclosure/design.md §8
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=progressive-evaluator-flag.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progressive-evaluator-flag.test.d.ts","sourceRoot":"","sources":["../../../../src/runtime-v2/feature-flags/__tests__/progressive-evaluator-flag.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Feature-flag registration test for Layer 2 `progressive_evaluator`
3
+ * (design §8, task 9.11, ERR-024).
4
+ *
5
+ * @see .kiro/specs/internalization-progressive-disclosure/design.md §8
6
+ */
7
+ import { describe, it, expect } from 'vitest';
8
+ import { DEFAULT_FEATURE_FLAGS, computeEffectiveFlags, } from '../feature-flag-contract.js';
9
+ import { getDefaultPdConfig, computeEffectivePdConfig, computeFeatureFlagsFromConfig, } from '../../config/index.js';
10
+ const FLAG_ID = 'progressive_evaluator';
11
+ function findFlag() {
12
+ const flag = DEFAULT_FEATURE_FLAGS.find((f) => f.id === FLAG_ID);
13
+ if (!flag)
14
+ throw new Error(`${FLAG_ID} must be registered`);
15
+ return flag;
16
+ }
17
+ describe('progressive_evaluator flag registration (Layer 2 / PR 4)', () => {
18
+ it('is registered in DEFAULT_FEATURE_FLAGS', () => {
19
+ expect(findFlag()).toBeDefined();
20
+ });
21
+ it('has category "quiet"', () => {
22
+ expect(findFlag().category).toBe('quiet');
23
+ });
24
+ it('defaults to enabled=false', () => {
25
+ expect(findFlag().enabled).toBe(false);
26
+ });
27
+ it('has since === 2026-07-26', () => {
28
+ expect(findFlag().since).toBe('2026-07-26');
29
+ });
30
+ it('is disabled by default with no overrides', () => {
31
+ const r = computeEffectiveFlags({}, DEFAULT_FEATURE_FLAGS, '/test/.pd/feature-flags.yaml');
32
+ expect(r.flags[FLAG_ID]?.enabled).toBe(false);
33
+ });
34
+ it('can be enabled at the contract layer', () => {
35
+ const r = computeEffectiveFlags({ [FLAG_ID]: { enabled: true } }, DEFAULT_FEATURE_FLAGS, '/test');
36
+ expect(r.flags[FLAG_ID]?.enabled).toBe(true);
37
+ });
38
+ });
39
+ describe('progressive_evaluator flag propagation through PD config', () => {
40
+ it('is present in getDefaultPdConfig().features with quiet/false', () => {
41
+ const defaults = getDefaultPdConfig();
42
+ expect(Object.hasOwn(defaults.features, FLAG_ID)).toBe(true);
43
+ expect(defaults.features[FLAG_ID]).toEqual({ category: 'quiet', enabled: false });
44
+ });
45
+ it('is disabled by default from null config', () => {
46
+ const result = computeFeatureFlagsFromConfig(computeEffectivePdConfig(null));
47
+ expect(result.flags[FLAG_ID]?.enabled).toBe(false);
48
+ });
49
+ it('can be enabled via PD config override', () => {
50
+ const rawConfig = getDefaultPdConfig();
51
+ rawConfig.features[FLAG_ID] = { category: 'quiet', enabled: true };
52
+ const result = computeFeatureFlagsFromConfig(computeEffectivePdConfig(rawConfig));
53
+ expect(result.flags[FLAG_ID]?.enabled).toBe(true);
54
+ });
55
+ });
56
+ //# sourceMappingURL=progressive-evaluator-flag.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progressive-evaluator-flag.test.js","sourceRoot":"","sources":["../../../../src/runtime-v2/feature-flags/__tests__/progressive-evaluator-flag.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"feature-flag-contract.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/feature-flags/feature-flag-contract.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,gBAAgB,YAAI,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,eAAe,CAAU,CAAC;AACpF,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAIpE,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;IAC7C,MAAM,EAAE,UAAU,GAAG,gBAAgB,CAAC;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,IAAI,CAAC;IACT,KAAK,EAAE,qBAAqB,CAAC;CAC9B;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,KAAK,CAAC;IACV,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,gBAAgB,GAAG,kBAAkB,GAAG,mBAAmB,CAAC;AAExE,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,gBAAgB,CAkDrF;AAED,eAAO,MAAM,qBAAqB,EAAE,qBAAqB,EA6FxD,CAAC;AAEF,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,QAAQ,EAAE,qBAAqB,EAAE,EACjC,UAAU,EAAE,MAAM,GACjB,qBAAqB,CA2EvB"}
1
+ {"version":3,"file":"feature-flag-contract.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/feature-flags/feature-flag-contract.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,gBAAgB,YAAI,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,eAAe,CAAU,CAAC;AACpF,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAIpE,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;IAC7C,MAAM,EAAE,UAAU,GAAG,gBAAgB,CAAC;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,IAAI,CAAC;IACT,KAAK,EAAE,qBAAqB,CAAC;CAC9B;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,KAAK,CAAC;IACV,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,gBAAgB,GAAG,kBAAkB,GAAG,mBAAmB,CAAC;AAExE,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,gBAAgB,CAkDrF;AAED,eAAO,MAAM,qBAAqB,EAAE,qBAAqB,EA2GxD,CAAC;AAEF,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,QAAQ,EAAE,qBAAqB,EAAE,EACjC,UAAU,EAAE,MAAM,GACjB,qBAAqB,CA2EvB"}
@@ -126,6 +126,20 @@ export const DEFAULT_FEATURE_FLAGS = [
126
126
  // no `summary` / `predecessorSummary` fields written, byte-identical to
127
127
  // current contentJson shape (Requirement 11.5/11.8/11.9, CP-32).
128
128
  { id: 'artifact_summary_redundancy', category: 'quiet', enabled: false, since: '2026-07-26', description: 'Internalization progressive disclosure Layer 0 — writer-side ArtifactSummary + predecessorSummary envelope on all 8 SummaryRunnerKind stages. Default off; flag-off = current contentJson shape unchanged.' },
129
+ // Internalization progressive disclosure — Layer 1 (design §6.2/§6.3/§8, PR 2).
130
+ // Runners use a ContextManifest + PromptBudgetManager to focus injection with
131
+ // a token budget, with an information-floor fallback to the legacy
132
+ // full-predecessor injection when resolution is too sparse. Default off;
133
+ // flag-off = runners use the existing buildContext assembly (byte-identical).
134
+ // Independent of internalization_core_grounding (§8.1): budgetTokens covers
135
+ // ONLY manifest-declared fields, never core grounding text.
136
+ { id: 'context_manifest_budget', category: 'quiet', enabled: false, since: '2026-07-26', description: 'Internalization progressive disclosure Layer 1 — manifest + budget-driven context injection with information-floor fallback. Default off; flag-off = existing buildContext assembly unchanged.' },
137
+ // Internalization progressive disclosure — Layer 2 two-stage evaluation
138
+ // (design §6.5/§8, PR 4). Evaluator runs Stage 1 (summary) then optionally
139
+ // Stage 2 (tier2 full contentJson) when flagged/forced. Adds optional
140
+ // painCoverage / compressionFidelity to evaluator output. Default off;
141
+ // flag-off = single-stage evaluation (current behavior).
142
+ { id: 'progressive_evaluator', category: 'quiet', enabled: false, since: '2026-07-26', description: 'Internalization progressive disclosure Layer 2 — two-stage evaluation with flagged criteria + painCoverage/compressionFidelity output fields. Default off; flag-off = single-stage evaluation unchanged.' },
129
143
  // MVP-Gone — permanently disabled, cannot be re-enabled
130
144
  { id: 'nocturnal', category: 'gone', enabled: false, since: '2026-05-24', description: 'Nocturnal trinity pipeline (retired)' },
131
145
  { id: 'idle_trigger', category: 'gone', enabled: false, since: '2026-05-24', description: 'Idle trigger for background processing (retired)' },
@@ -1 +1 @@
1
- {"version":3,"file":"feature-flag-contract.js","sourceRoot":"","sources":["../../../src/runtime-v2/feature-flags/feature-flag-contract.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"feature-flag-contract.js","sourceRoot":"","sources":["../../../src/runtime-v2/feature-flags/feature-flag-contract.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Property tests for CandidateLineage (design §6.4, tasks 7.3–7.6).
3
+ *
4
+ * CP-17: stage attribution is determined solely by taskKind (not artifactKind)
5
+ * CP-18: lineage cache idempotency (each artifactId fetched at most once)
6
+ * CP-19: lineage error classification (corruption vs expected-absence)
7
+ * CP-20: lineage failures are never swallowed (caller must surface them)
8
+ *
9
+ * Uses stub artifact store + task reader (no real I/O).
10
+ *
11
+ * @see .kiro/specs/internalization-progressive-disclosure/design.md §6.4
12
+ * @see .kiro/specs/internalization-progressive-disclosure/requirements.md Requirement 6
13
+ */
14
+ export {};
15
+ //# sourceMappingURL=candidate-lineage.property.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"candidate-lineage.property.test.d.ts","sourceRoot":"","sources":["../../../../src/runtime-v2/internalization/__tests__/candidate-lineage.property.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG"}
@@ -0,0 +1,301 @@
1
+ /**
2
+ * Property tests for CandidateLineage (design §6.4, tasks 7.3–7.6).
3
+ *
4
+ * CP-17: stage attribution is determined solely by taskKind (not artifactKind)
5
+ * CP-18: lineage cache idempotency (each artifactId fetched at most once)
6
+ * CP-19: lineage error classification (corruption vs expected-absence)
7
+ * CP-20: lineage failures are never swallowed (caller must surface them)
8
+ *
9
+ * Uses stub artifact store + task reader (no real I/O).
10
+ *
11
+ * @see .kiro/specs/internalization-progressive-disclosure/design.md §6.4
12
+ * @see .kiro/specs/internalization-progressive-disclosure/requirements.md Requirement 6
13
+ */
14
+ import { describe, it, expect } from 'vitest';
15
+ import fc from 'fast-check';
16
+ import { CandidateLineage, } from '../candidate-lineage.js';
17
+ function makeStub(artifacts, tasks) {
18
+ const artifactMap = new Map(artifacts.map((a) => [a.artifactId, a]));
19
+ const taskMap = new Map(tasks.map((t) => [t.taskId, t]));
20
+ const artifactReads = new Map();
21
+ const taskReads = new Map();
22
+ const events = [];
23
+ return { artifacts: artifactMap, tasks: taskMap, artifactReads, taskReads, events };
24
+ }
25
+ function makeArtifact(artifactId, sourceTaskId, lineageArtifactIds = [], contentJson = { data: 'test' }, artifactKind = 'principle') {
26
+ return {
27
+ artifactId,
28
+ artifactKind,
29
+ sourceTaskId,
30
+ lineageArtifactIds,
31
+ validationStatus: 'validated',
32
+ contentJson: typeof contentJson === 'string' ? contentJson : JSON.stringify(contentJson),
33
+ createdAt: '2026-01-01T00:00:00Z',
34
+ updatedAt: '2026-01-01T00:00:00Z',
35
+ };
36
+ }
37
+ function makeLineage(deps, maxDepth) {
38
+ const artifactStore = {
39
+ getArtifactById: async (id) => {
40
+ deps.artifactReads.set(id, (deps.artifactReads.get(id) ?? 0) + 1);
41
+ return deps.artifacts.get(id) ?? null;
42
+ },
43
+ };
44
+ const taskReader = {
45
+ getTaskById: async (id) => {
46
+ deps.taskReads.set(id, (deps.taskReads.get(id) ?? 0) + 1);
47
+ return deps.tasks.get(id) ?? null;
48
+ },
49
+ };
50
+ return new CandidateLineage({
51
+ artifacts: artifactStore,
52
+ tasks: taskReader,
53
+ maxDepth,
54
+ emit: (e) => deps.events.push(e),
55
+ });
56
+ }
57
+ // ── CP-17: stage by taskKind only ────────────────────────────────────────────
58
+ describe('CP-17 — stage attribution determined solely by taskKind (F1)', () => {
59
+ it('artifactKind is irrelevant: same taskKind → same runnerKind regardless of artifactKind', async () => {
60
+ const artifactKinds = ['principle', 'rule', 'skill', 'patch'];
61
+ for (const kind of artifactKinds) {
62
+ const deps = makeStub([makeArtifact('art-1', 'task-1', [], { x: 1 }, kind)], [{ taskId: 'task-1', taskKind: 'dreamer' }]);
63
+ const lineage = makeLineage(deps);
64
+ const result = await lineage.resolve('art-1');
65
+ expect(result.ok).toBe(true);
66
+ if (result.ok) {
67
+ expect(result.value.nodes[0]?.runnerKind).toBe('dreamer');
68
+ expect(result.value.nodes[0]?.taskKind).toBe('dreamer');
69
+ }
70
+ }
71
+ });
72
+ it('property: artifactKind randomly mismatched with real stage → runnerKind still follows taskKind', async () => {
73
+ await fc.assert(fc.asyncProperty(fc.constantFrom('principle', 'rule', 'skill', 'patch'), fc.constantFrom('dreamer', 'scribe', 'artificer', 'evaluator', 'diag_router'), async (artifactKind, taskKind) => {
74
+ const deps = makeStub([makeArtifact('art-prop', 'task-prop', [], { v: 1 }, artifactKind)], [{ taskId: 'task-prop', taskKind }]);
75
+ const lineage = makeLineage(deps);
76
+ const result = await lineage.resolve('art-prop');
77
+ if (result.ok) {
78
+ expect(result.value.nodes[0]?.taskKind).toBe(taskKind);
79
+ }
80
+ }), { numRuns: 40 });
81
+ });
82
+ });
83
+ // ── CP-18: cache idempotency ─────────────────────────────────────────────────
84
+ describe('CP-18 — lineage cache idempotency', () => {
85
+ it('each artifactId is fetched from the store at most once', async () => {
86
+ // Diamond: A → B, A → C, B → D, C → D (D reachable via two paths).
87
+ const artifacts = [
88
+ makeArtifact('A', 'task-A', ['B', 'C']),
89
+ makeArtifact('B', 'task-B', ['D']),
90
+ makeArtifact('C', 'task-C', ['D']),
91
+ makeArtifact('D', 'task-D', []),
92
+ ];
93
+ const tasks = ['A', 'B', 'C', 'D'].map((t) => ({ taskId: `task-${t}`, taskKind: 'dreamer' }));
94
+ const deps = makeStub(artifacts, tasks);
95
+ const lineage = makeLineage(deps);
96
+ const r1 = await lineage.resolve('A');
97
+ const r2 = await lineage.resolve('A');
98
+ expect(r1.ok).toBe(true);
99
+ expect(r2.ok).toBe(true);
100
+ // Each artifact fetched exactly once across both resolve calls (cached).
101
+ for (const id of ['A', 'B', 'C', 'D']) {
102
+ expect(deps.artifactReads.get(id) ?? 0).toBe(1);
103
+ }
104
+ });
105
+ it('repeated resolve returns identical results', async () => {
106
+ const artifacts = [
107
+ makeArtifact('X', 'task-X', ['Y']),
108
+ makeArtifact('Y', 'task-Y', []),
109
+ ];
110
+ const tasks = [{ taskId: 'task-X', taskKind: 'dreamer' }, { taskId: 'task-Y', taskKind: 'scribe' }];
111
+ const deps = makeStub(artifacts, tasks);
112
+ const lineage = makeLineage(deps);
113
+ const r1 = await lineage.resolve('X');
114
+ const r2 = await lineage.resolve('X');
115
+ expect(JSON.stringify(r1)).toBe(JSON.stringify(r2));
116
+ });
117
+ it('findAncestorByTaskKind also uses the cache (no extra store reads)', async () => {
118
+ const artifacts = [
119
+ makeArtifact('P', 'task-P', ['Q']),
120
+ makeArtifact('Q', 'task-Q', []),
121
+ ];
122
+ const tasks = [
123
+ { taskId: 'task-P', taskKind: 'evaluator' },
124
+ { taskId: 'task-Q', taskKind: 'dreamer' },
125
+ ];
126
+ const deps = makeStub(artifacts, tasks);
127
+ const lineage = makeLineage(deps);
128
+ await lineage.resolve('P');
129
+ await lineage.findAncestorByTaskKind('P', 'dreamer');
130
+ for (const id of ['P', 'Q']) {
131
+ expect(deps.artifactReads.get(id) ?? 0).toBe(1);
132
+ }
133
+ });
134
+ });
135
+ // ── CP-19: error classification ──────────────────────────────────────────────
136
+ describe('CP-19 — lineage error classification', () => {
137
+ it('contentJson unparseable → ok:false + content_json_unparseable + lineage_data_corrupt', async () => {
138
+ const deps = makeStub([makeArtifact('bad', 'task-1', [], '{not valid json')], [{ taskId: 'task-1', taskKind: 'dreamer' }]);
139
+ const lineage = makeLineage(deps);
140
+ const result = await lineage.resolve('bad');
141
+ expect(result.ok).toBe(false);
142
+ if (!result.ok)
143
+ expect(result.error.kind).toBe('content_json_unparseable');
144
+ expect(deps.events.some((e) => e.type === 'lineage_data_corrupt')).toBe(true);
145
+ });
146
+ it('artifact missing sourceTaskId → ok:false + artifact_shape_invalid', async () => {
147
+ const badArtifact = {
148
+ ...makeArtifact('shapeless', 'task-1', []),
149
+ sourceTaskId: '',
150
+ };
151
+ const deps = makeStub([badArtifact], [{ taskId: 'task-1', taskKind: 'dreamer' }]);
152
+ const lineage = makeLineage(deps);
153
+ const result = await lineage.resolve('shapeless');
154
+ expect(result.ok).toBe(false);
155
+ if (!result.ok)
156
+ expect(result.error.kind).toBe('artifact_shape_invalid');
157
+ });
158
+ it('store throws → ok:false + store_failure + lineage_store_failure', async () => {
159
+ const deps = makeStub([], []);
160
+ const failingStore = {
161
+ getArtifactById: async () => { throw new Error('db connection lost'); },
162
+ };
163
+ const lineage = new CandidateLineage({
164
+ artifacts: failingStore,
165
+ tasks: { getTaskById: async () => null },
166
+ emit: (e) => deps.events.push(e),
167
+ });
168
+ const result = await lineage.resolve('any');
169
+ expect(result.ok).toBe(false);
170
+ if (!result.ok)
171
+ expect(result.error.kind).toBe('store_failure');
172
+ expect(deps.events.some((e) => e.type === 'lineage_store_failure')).toBe(true);
173
+ });
174
+ it('ancestor pruned (referenced but absent) → ok:true + partial + ancestor_pruned note', async () => {
175
+ const deps = makeStub([makeArtifact('start', 'task-1', ['ghost'])], // 'ghost' not in store
176
+ [{ taskId: 'task-1', taskKind: 'dreamer' }]);
177
+ const lineage = makeLineage(deps);
178
+ const result = await lineage.resolve('start');
179
+ expect(result.ok).toBe(true);
180
+ if (result.ok) {
181
+ expect(result.value.complete).toBe(false);
182
+ expect(result.value.notes.some((n) => n.code === 'ancestor_pruned')).toBe(true);
183
+ }
184
+ });
185
+ it('task missing → ok:true + partial + task_missing note + runnerKind unknown', async () => {
186
+ const deps = makeStub([makeArtifact('orphan', 'task-gone', [])], []);
187
+ const lineage = makeLineage(deps);
188
+ const result = await lineage.resolve('orphan');
189
+ expect(result.ok).toBe(true);
190
+ if (result.ok) {
191
+ expect(result.value.complete).toBe(false);
192
+ expect(result.value.nodes[0]?.runnerKind).toBe('unknown');
193
+ expect(result.value.notes.some((n) => n.code === 'task_missing')).toBe(true);
194
+ }
195
+ });
196
+ it('depth limit → ok:true + partial + depth_limit_reached note', async () => {
197
+ // Chain longer than maxDepth=2.
198
+ const artifacts = [
199
+ makeArtifact('n0', 't0', ['n1']),
200
+ makeArtifact('n1', 't1', ['n2']),
201
+ makeArtifact('n2', 't2', ['n3']),
202
+ makeArtifact('n3', 't3', []),
203
+ ];
204
+ const tasks = [0, 1, 2, 3].map((i) => ({ taskId: `t${i}`, taskKind: 'dreamer' }));
205
+ const deps = makeStub(artifacts, tasks);
206
+ const lineage = makeLineage(deps, 2);
207
+ const result = await lineage.resolve('n0');
208
+ expect(result.ok).toBe(true);
209
+ if (result.ok) {
210
+ expect(result.value.complete).toBe(false);
211
+ expect(result.value.notes.some((n) => n.code === 'depth_limit_reached')).toBe(true);
212
+ }
213
+ });
214
+ it('cycle → ok:true + partial + cycle_detected note', async () => {
215
+ // A → B → A (cycle).
216
+ const artifacts = [
217
+ makeArtifact('cyc-A', 't-A', ['cyc-B']),
218
+ makeArtifact('cyc-B', 't-B', ['cyc-A']),
219
+ ];
220
+ const tasks = [{ taskId: 't-A', taskKind: 'dreamer' }, { taskId: 't-B', taskKind: 'scribe' }];
221
+ const deps = makeStub(artifacts, tasks);
222
+ const lineage = makeLineage(deps);
223
+ const result = await lineage.resolve('cyc-A');
224
+ expect(result.ok).toBe(true);
225
+ if (result.ok) {
226
+ expect(result.value.notes.some((n) => n.code === 'cycle_detected')).toBe(true);
227
+ }
228
+ });
229
+ it('complete chain (no issues) → ok:true + complete + empty notes', async () => {
230
+ const artifacts = [
231
+ makeArtifact('ok-1', 't-1', ['ok-2']),
232
+ makeArtifact('ok-2', 't-2', []),
233
+ ];
234
+ const tasks = [{ taskId: 't-1', taskKind: 'dreamer' }, { taskId: 't-2', taskKind: 'scribe' }];
235
+ const deps = makeStub(artifacts, tasks);
236
+ const lineage = makeLineage(deps);
237
+ const result = await lineage.resolve('ok-1');
238
+ expect(result.ok).toBe(true);
239
+ if (result.ok) {
240
+ expect(result.value.complete).toBe(true);
241
+ expect(result.value.notes).toHaveLength(0);
242
+ expect(result.value.nodes).toHaveLength(2);
243
+ }
244
+ });
245
+ it('findAncestorByTaskKind miss → ok:true + node null', async () => {
246
+ const artifacts = [makeArtifact('solo', 't-1', [])];
247
+ const tasks = [{ taskId: 't-1', taskKind: 'dreamer' }];
248
+ const deps = makeStub(artifacts, tasks);
249
+ const lineage = makeLineage(deps);
250
+ const result = await lineage.findAncestorByTaskKind('solo', 'evaluator');
251
+ expect(result.ok).toBe(true);
252
+ if (result.ok)
253
+ expect(result.node).toBeNull();
254
+ });
255
+ it('contentJson stays unknown (not narrowed) on the returned node', async () => {
256
+ const deps = makeStub([makeArtifact('unk', 't-1', [], { complex: { nested: [1, 2] } })], [{ taskId: 't-1', taskKind: 'dreamer' }]);
257
+ const lineage = makeLineage(deps);
258
+ const result = await lineage.resolve('unk');
259
+ if (result.ok) {
260
+ // contentJson is typed `unknown` — we verify it's an object but the type
261
+ // system guarantees it was never cast to a specific shape.
262
+ expect(typeof result.value.nodes[0]?.contentJson).toBe('object');
263
+ }
264
+ });
265
+ });
266
+ // ── CP-20: failures never swallowed ──────────────────────────────────────────
267
+ describe('CP-20 — lineage failures never swallowed', () => {
268
+ it('all three LineageError kinds produce ok:false (never a silent ok:true)', async () => {
269
+ // content_json_unparseable
270
+ const r1 = await makeLineage(makeStub([makeArtifact('a', 't', [], 'bad{json')], [{ taskId: 't', taskKind: 'dreamer' }])).resolve('a');
271
+ expect(r1.ok).toBe(false);
272
+ // artifact_shape_invalid
273
+ const r2 = await makeLineage(makeStub([{ ...makeArtifact('b', 't', []), sourceTaskId: '' }], [{ taskId: 't', taskKind: 'dreamer' }])).resolve('b');
274
+ expect(r2.ok).toBe(false);
275
+ // store_failure
276
+ const r3 = await new CandidateLineage({
277
+ artifacts: { getArtifactById: async () => { throw new Error('boom'); } },
278
+ tasks: { getTaskById: async () => null },
279
+ }).resolve('c');
280
+ expect(r3.ok).toBe(false);
281
+ });
282
+ it('every ok:false result has a non-empty error.kind (no generic "unknown" failure)', async () => {
283
+ const results = [];
284
+ // Run all three failure modes.
285
+ for (const setup of [
286
+ { art: makeArtifact('x', 't', [], 'bad'), task: { taskId: 't', taskKind: 'dreamer' } },
287
+ { art: { ...makeArtifact('y', 't', []), sourceTaskId: '' }, task: { taskId: 't', taskKind: 'dreamer' } },
288
+ ]) {
289
+ const r = await makeLineage(makeStub([setup.art], [setup.task])).resolve(setup.art.artifactId);
290
+ results.push(r);
291
+ }
292
+ for (const r of results) {
293
+ expect(r.ok).toBe(false);
294
+ if (!r.ok) {
295
+ // error.kind is one of the three known kinds — never empty or undefined.
296
+ expect(['content_json_unparseable', 'artifact_shape_invalid', 'store_failure']).toContain(r.error.kind);
297
+ }
298
+ }
299
+ });
300
+ });
301
+ //# sourceMappingURL=candidate-lineage.property.test.js.map