@principles/core 1.113.0 → 1.115.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/runtime-v2/__tests__/activation-types-helpers.test.d.ts +20 -0
- package/dist/runtime-v2/__tests__/activation-types-helpers.test.d.ts.map +1 -0
- package/dist/runtime-v2/__tests__/activation-types-helpers.test.js +223 -0
- package/dist/runtime-v2/__tests__/activation-types-helpers.test.js.map +1 -0
- package/dist/runtime-v2/__tests__/architecture-regression.test.js +7 -3
- package/dist/runtime-v2/__tests__/architecture-regression.test.js.map +1 -1
- package/dist/runtime-v2/__tests__/attack-e2e-pipeline-smoke.test.js +2 -0
- package/dist/runtime-v2/__tests__/attack-e2e-pipeline-smoke.test.js.map +1 -1
- package/dist/runtime-v2/__tests__/evidence-guards.test.d.ts +18 -0
- package/dist/runtime-v2/__tests__/evidence-guards.test.d.ts.map +1 -0
- package/dist/runtime-v2/__tests__/evidence-guards.test.js +155 -0
- package/dist/runtime-v2/__tests__/evidence-guards.test.js.map +1 -0
- package/dist/runtime-v2/__tests__/pain-evidence-contract.test.js +3 -1
- package/dist/runtime-v2/__tests__/pain-evidence-contract.test.js.map +1 -1
- package/dist/runtime-v2/__tests__/pain-signal-bridge-short-circuit.test.js +9 -2
- package/dist/runtime-v2/__tests__/pain-signal-bridge-short-circuit.test.js.map +1 -1
- package/dist/runtime-v2/activation/__tests__/approval-queue.test.d.ts +15 -0
- package/dist/runtime-v2/activation/__tests__/approval-queue.test.d.ts.map +1 -1
- package/dist/runtime-v2/activation/__tests__/approval-queue.test.js +326 -164
- package/dist/runtime-v2/activation/__tests__/approval-queue.test.js.map +1 -1
- package/dist/runtime-v2/activation/__tests__/low-risk-writers.test.d.ts +21 -0
- package/dist/runtime-v2/activation/__tests__/low-risk-writers.test.d.ts.map +1 -0
- package/dist/runtime-v2/activation/__tests__/low-risk-writers.test.js +451 -0
- package/dist/runtime-v2/activation/__tests__/low-risk-writers.test.js.map +1 -0
- package/dist/runtime-v2/config/pd-config-types.d.ts.map +1 -1
- package/dist/runtime-v2/config/pd-config-types.js +1 -2
- package/dist/runtime-v2/config/pd-config-types.js.map +1 -1
- package/dist/runtime-v2/pain-signal-bridge.d.ts.map +1 -1
- package/dist/runtime-v2/pain-signal-bridge.js +4 -2
- package/dist/runtime-v2/pain-signal-bridge.js.map +1 -1
- package/dist/runtime-v2/runner/__tests__/m8-02-e2e.test.js +6 -0
- package/dist/runtime-v2/runner/__tests__/m8-02-e2e.test.js.map +1 -1
- package/dist/runtime-v2/runner/__tests__/m9-e2e.test.js +2 -2
- package/dist/runtime-v2/runner/__tests__/m9-e2e.test.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Activation Types Helper Functions Tests
|
|
3
|
+
*
|
|
4
|
+
* Unit tests for helper functions in activation-types.ts:
|
|
5
|
+
* - makeIdempotencyKey()
|
|
6
|
+
* - isLowRiskChannel()
|
|
7
|
+
* - getChannelRiskLevel()
|
|
8
|
+
* - mapConfidenceToLabel()
|
|
9
|
+
*
|
|
10
|
+
* These functions are critical for activation dispatch decisions and
|
|
11
|
+
* approval queue operations. Tests verify boundary conditions and
|
|
12
|
+
* all possible input combinations.
|
|
13
|
+
*
|
|
14
|
+
* ERR checklist:
|
|
15
|
+
* - ERR-002: Every decision path carries reason + nextAction
|
|
16
|
+
* - ERR-009: Malformed state fails loud
|
|
17
|
+
* - ERR-025: Production-path tests, not just helpers
|
|
18
|
+
*/
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=activation-types-helpers.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activation-types-helpers.test.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/__tests__/activation-types-helpers.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG"}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Activation Types Helper Functions Tests
|
|
3
|
+
*
|
|
4
|
+
* Unit tests for helper functions in activation-types.ts:
|
|
5
|
+
* - makeIdempotencyKey()
|
|
6
|
+
* - isLowRiskChannel()
|
|
7
|
+
* - getChannelRiskLevel()
|
|
8
|
+
* - mapConfidenceToLabel()
|
|
9
|
+
*
|
|
10
|
+
* These functions are critical for activation dispatch decisions and
|
|
11
|
+
* approval queue operations. Tests verify boundary conditions and
|
|
12
|
+
* all possible input combinations.
|
|
13
|
+
*
|
|
14
|
+
* ERR checklist:
|
|
15
|
+
* - ERR-002: Every decision path carries reason + nextAction
|
|
16
|
+
* - ERR-009: Malformed state fails loud
|
|
17
|
+
* - ERR-025: Production-path tests, not just helpers
|
|
18
|
+
*/
|
|
19
|
+
import { describe, it, expect } from 'vitest';
|
|
20
|
+
import { makeIdempotencyKey, isLowRiskChannel, getChannelRiskLevel, mapConfidenceToLabel, LOW_RISK_CHANNELS, HIGH_RISK_CHANNEL_MAP, AUTO_PROMOTION_CONFIDENCE_THRESHOLD, AUTO_PROMOTABLE_CHANNELS, } from '../activation/activation-types';
|
|
21
|
+
// ── makeIdempotencyKey Tests ──────────────────────────────────────────────────
|
|
22
|
+
describe('makeIdempotencyKey', () => {
|
|
23
|
+
it('produces expected format: artifactId::channel', () => {
|
|
24
|
+
expect(makeIdempotencyKey('art-001', 'prompt')).toBe('art-001::prompt');
|
|
25
|
+
expect(makeIdempotencyKey('art-abc', 'code_tool_hook')).toBe('art-abc::code_tool_hook');
|
|
26
|
+
expect(makeIdempotencyKey('art-xyz', 'defer_archive')).toBe('art-xyz::defer_archive');
|
|
27
|
+
});
|
|
28
|
+
it('handles empty artifactId', () => {
|
|
29
|
+
expect(makeIdempotencyKey('', 'prompt')).toBe('::prompt');
|
|
30
|
+
});
|
|
31
|
+
it('handles artifactId with special characters', () => {
|
|
32
|
+
expect(makeIdempotencyKey('art-with-dashes', 'prompt')).toBe('art-with-dashes::prompt');
|
|
33
|
+
expect(makeIdempotencyKey('art_with_underscores', 'prompt')).toBe('art_with_underscores::prompt');
|
|
34
|
+
expect(makeIdempotencyKey('art.with.dots', 'prompt')).toBe('art.with.dots::prompt');
|
|
35
|
+
});
|
|
36
|
+
it('handles artifactId with colons (edge case)', () => {
|
|
37
|
+
// Colons in artifactId could cause ambiguity, but function doesn't escape
|
|
38
|
+
expect(makeIdempotencyKey('art:001', 'prompt')).toBe('art:001::prompt');
|
|
39
|
+
});
|
|
40
|
+
it('handles all valid channels', () => {
|
|
41
|
+
const channels = [
|
|
42
|
+
'prompt', 'defer_archive', 'skill', 'code_tool_hook', 'model_training',
|
|
43
|
+
];
|
|
44
|
+
for (const channel of channels) {
|
|
45
|
+
const key = makeIdempotencyKey('art-001', channel);
|
|
46
|
+
expect(key).toContain('::');
|
|
47
|
+
expect(key.endsWith(channel)).toBe(true);
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
it('is deterministic — same inputs produce same output', () => {
|
|
51
|
+
const key1 = makeIdempotencyKey('art-001', 'prompt');
|
|
52
|
+
const key2 = makeIdempotencyKey('art-001', 'prompt');
|
|
53
|
+
expect(key1).toBe(key2);
|
|
54
|
+
});
|
|
55
|
+
it('is reversible — can parse back artifactId and channel', () => {
|
|
56
|
+
const key = makeIdempotencyKey('art-001', 'prompt');
|
|
57
|
+
const [artifactId, channel] = key.split('::');
|
|
58
|
+
expect(artifactId).toBe('art-001');
|
|
59
|
+
expect(channel).toBe('prompt');
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
// ── isLowRiskChannel Tests ───────────────────────────────────────────────────
|
|
63
|
+
describe('isLowRiskChannel', () => {
|
|
64
|
+
it('returns true for prompt channel', () => {
|
|
65
|
+
expect(isLowRiskChannel('prompt')).toBe(true);
|
|
66
|
+
});
|
|
67
|
+
it('returns true for defer_archive channel', () => {
|
|
68
|
+
expect(isLowRiskChannel('defer_archive')).toBe(true);
|
|
69
|
+
});
|
|
70
|
+
it('returns false for skill channel', () => {
|
|
71
|
+
expect(isLowRiskChannel('skill')).toBe(false);
|
|
72
|
+
});
|
|
73
|
+
it('returns false for code_tool_hook channel', () => {
|
|
74
|
+
expect(isLowRiskChannel('code_tool_hook')).toBe(false);
|
|
75
|
+
});
|
|
76
|
+
it('returns false for model_training channel', () => {
|
|
77
|
+
expect(isLowRiskChannel('model_training')).toBe(false);
|
|
78
|
+
});
|
|
79
|
+
it('LOW_RISK_CHANNELS contains exactly prompt and defer_archive', () => {
|
|
80
|
+
expect(LOW_RISK_CHANNELS).toHaveLength(2);
|
|
81
|
+
expect(LOW_RISK_CHANNELS).toContain('prompt');
|
|
82
|
+
expect(LOW_RISK_CHANNELS).toContain('defer_archive');
|
|
83
|
+
});
|
|
84
|
+
it('isLowRiskChannel matches LOW_RISK_CHANNELS membership', () => {
|
|
85
|
+
const allChannels = [
|
|
86
|
+
'prompt', 'defer_archive', 'skill', 'code_tool_hook', 'model_training',
|
|
87
|
+
];
|
|
88
|
+
for (const channel of allChannels) {
|
|
89
|
+
expect(isLowRiskChannel(channel)).toBe(LOW_RISK_CHANNELS.includes(channel));
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
it('returns false for unknown channel (safe default)', () => {
|
|
93
|
+
expect(isLowRiskChannel('unknown')).toBe(false);
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
// ── getChannelRiskLevel Tests ────────────────────────────────────────────────
|
|
97
|
+
describe('getChannelRiskLevel', () => {
|
|
98
|
+
it('returns low for prompt channel', () => {
|
|
99
|
+
expect(getChannelRiskLevel('prompt')).toBe('low');
|
|
100
|
+
});
|
|
101
|
+
it('returns low for defer_archive channel', () => {
|
|
102
|
+
expect(getChannelRiskLevel('defer_archive')).toBe('low');
|
|
103
|
+
});
|
|
104
|
+
it('returns medium for skill channel', () => {
|
|
105
|
+
expect(getChannelRiskLevel('skill')).toBe('medium');
|
|
106
|
+
});
|
|
107
|
+
it('returns high for code_tool_hook channel', () => {
|
|
108
|
+
expect(getChannelRiskLevel('code_tool_hook')).toBe('high');
|
|
109
|
+
});
|
|
110
|
+
it('returns critical for model_training channel', () => {
|
|
111
|
+
expect(getChannelRiskLevel('model_training')).toBe('critical');
|
|
112
|
+
});
|
|
113
|
+
it('returns high for unknown channel (safe default)', () => {
|
|
114
|
+
expect(getChannelRiskLevel('unknown')).toBe('high');
|
|
115
|
+
});
|
|
116
|
+
it('HIGH_RISK_CHANNEL_MAP has correct entries', () => {
|
|
117
|
+
expect(HIGH_RISK_CHANNEL_MAP.skill).toBe('medium');
|
|
118
|
+
expect(HIGH_RISK_CHANNEL_MAP.code_tool_hook).toBe('high');
|
|
119
|
+
expect(HIGH_RISK_CHANNEL_MAP.model_training).toBe('critical');
|
|
120
|
+
});
|
|
121
|
+
it('getChannelRiskLevel returns low for LOW_RISK_CHANNELS', () => {
|
|
122
|
+
for (const channel of LOW_RISK_CHANNELS) {
|
|
123
|
+
expect(getChannelRiskLevel(channel)).toBe('low');
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
it('getChannelRiskLevel returns HIGH_RISK_CHANNEL_MAP value for high-risk channels', () => {
|
|
127
|
+
for (const [channel, riskLevel] of Object.entries(HIGH_RISK_CHANNEL_MAP)) {
|
|
128
|
+
expect(getChannelRiskLevel(channel)).toBe(riskLevel);
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
it('risk levels are ordered: low < medium < high < critical', () => {
|
|
132
|
+
// This is a semantic ordering test, not a numeric comparison
|
|
133
|
+
const levels = ['low', 'medium', 'high', 'critical'];
|
|
134
|
+
expect(getChannelRiskLevel('prompt')).toBe(levels[0]);
|
|
135
|
+
expect(getChannelRiskLevel('skill')).toBe(levels[1]);
|
|
136
|
+
expect(getChannelRiskLevel('code_tool_hook')).toBe(levels[2]);
|
|
137
|
+
expect(getChannelRiskLevel('model_training')).toBe(levels[3]);
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
// ── mapConfidenceToLabel Tests ───────────────────────────────────────────────
|
|
141
|
+
describe('mapConfidenceToLabel', () => {
|
|
142
|
+
it('returns high for confidence >= 0.8', () => {
|
|
143
|
+
expect(mapConfidenceToLabel(0.8)).toBe('high');
|
|
144
|
+
expect(mapConfidenceToLabel(0.85)).toBe('high');
|
|
145
|
+
expect(mapConfidenceToLabel(0.9)).toBe('high');
|
|
146
|
+
expect(mapConfidenceToLabel(1.0)).toBe('high');
|
|
147
|
+
});
|
|
148
|
+
it('returns medium for confidence >= 0.5 and < 0.8', () => {
|
|
149
|
+
expect(mapConfidenceToLabel(0.5)).toBe('medium');
|
|
150
|
+
expect(mapConfidenceToLabel(0.55)).toBe('medium');
|
|
151
|
+
expect(mapConfidenceToLabel(0.6)).toBe('medium');
|
|
152
|
+
expect(mapConfidenceToLabel(0.7)).toBe('medium');
|
|
153
|
+
expect(mapConfidenceToLabel(0.79)).toBe('medium');
|
|
154
|
+
});
|
|
155
|
+
it('returns low for confidence < 0.5', () => {
|
|
156
|
+
expect(mapConfidenceToLabel(0.0)).toBe('low');
|
|
157
|
+
expect(mapConfidenceToLabel(0.1)).toBe('low');
|
|
158
|
+
expect(mapConfidenceToLabel(0.2)).toBe('low');
|
|
159
|
+
expect(mapConfidenceToLabel(0.3)).toBe('low');
|
|
160
|
+
expect(mapConfidenceToLabel(0.4)).toBe('low');
|
|
161
|
+
expect(mapConfidenceToLabel(0.49)).toBe('low');
|
|
162
|
+
});
|
|
163
|
+
it('returns medium for undefined confidence', () => {
|
|
164
|
+
expect(mapConfidenceToLabel(undefined)).toBe('medium');
|
|
165
|
+
});
|
|
166
|
+
it('returns medium for null confidence', () => {
|
|
167
|
+
expect(mapConfidenceToLabel(null)).toBe('medium');
|
|
168
|
+
});
|
|
169
|
+
// Boundary tests
|
|
170
|
+
it('returns high at exact boundary 0.8', () => {
|
|
171
|
+
expect(mapConfidenceToLabel(0.8)).toBe('high');
|
|
172
|
+
});
|
|
173
|
+
it('returns medium just below boundary 0.79', () => {
|
|
174
|
+
expect(mapConfidenceToLabel(0.79)).toBe('medium');
|
|
175
|
+
});
|
|
176
|
+
it('returns medium at exact boundary 0.5', () => {
|
|
177
|
+
expect(mapConfidenceToLabel(0.5)).toBe('medium');
|
|
178
|
+
});
|
|
179
|
+
it('returns low just below boundary 0.49', () => {
|
|
180
|
+
expect(mapConfidenceToLabel(0.49)).toBe('low');
|
|
181
|
+
});
|
|
182
|
+
// Edge cases
|
|
183
|
+
it('returns low for negative confidence (invalid but handled)', () => {
|
|
184
|
+
expect(mapConfidenceToLabel(-0.1)).toBe('low');
|
|
185
|
+
});
|
|
186
|
+
it('returns high for confidence > 1.0 (invalid but handled)', () => {
|
|
187
|
+
expect(mapConfidenceToLabel(1.5)).toBe('high');
|
|
188
|
+
});
|
|
189
|
+
it('all possible return values are valid ConfidenceLabels', () => {
|
|
190
|
+
const validLabels = ['high', 'medium', 'low'];
|
|
191
|
+
const testValues = [undefined, null, 0, 0.25, 0.5, 0.75, 1.0];
|
|
192
|
+
for (const val of testValues) {
|
|
193
|
+
const label = mapConfidenceToLabel(val);
|
|
194
|
+
expect(validLabels).toContain(label);
|
|
195
|
+
}
|
|
196
|
+
});
|
|
197
|
+
});
|
|
198
|
+
// ── Constants Tests ──────────────────────────────────────────────────────────
|
|
199
|
+
describe('constants', () => {
|
|
200
|
+
it('AUTO_PROMOTION_CONFIDENCE_THRESHOLD is 0.95', () => {
|
|
201
|
+
expect(AUTO_PROMOTION_CONFIDENCE_THRESHOLD).toBe(0.95);
|
|
202
|
+
});
|
|
203
|
+
it('AUTO_PROMOTABLE_CHANNELS contains only skill', () => {
|
|
204
|
+
expect(AUTO_PROMOTABLE_CHANNELS).toEqual(['skill']);
|
|
205
|
+
expect(AUTO_PROMOTABLE_CHANNELS).toHaveLength(1);
|
|
206
|
+
});
|
|
207
|
+
it('LOW_RISK_CHANNELS and HIGH_RISK_CHANNEL_MAP are disjoint', () => {
|
|
208
|
+
for (const channel of LOW_RISK_CHANNELS) {
|
|
209
|
+
expect(HIGH_RISK_CHANNEL_MAP[channel]).toBeUndefined();
|
|
210
|
+
}
|
|
211
|
+
});
|
|
212
|
+
it('all InternalizationChannel values are covered', () => {
|
|
213
|
+
const allChannels = [
|
|
214
|
+
'prompt', 'defer_archive', 'skill', 'code_tool_hook', 'model_training',
|
|
215
|
+
];
|
|
216
|
+
// Every channel should have a defined risk level
|
|
217
|
+
for (const channel of allChannels) {
|
|
218
|
+
const riskLevel = getChannelRiskLevel(channel);
|
|
219
|
+
expect(['low', 'medium', 'high', 'critical']).toContain(riskLevel);
|
|
220
|
+
}
|
|
221
|
+
});
|
|
222
|
+
});
|
|
223
|
+
//# sourceMappingURL=activation-types-helpers.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activation-types-helpers.test.js","sourceRoot":"","sources":["../../../src/runtime-v2/__tests__/activation-types-helpers.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -279,6 +279,8 @@ const KNOWN_PLUGIN_CORE_FILES = new Set([
|
|
|
279
279
|
'surface-guard.ts',
|
|
280
280
|
// PRI-307: Plugin I/O boundary — reads .pd/config.yaml, delegates validation to core
|
|
281
281
|
'pd-config-loader.ts',
|
|
282
|
+
// PRI-346: Pure function for checking conversation access config (extracted for circular import avoidance)
|
|
283
|
+
'config-health.ts',
|
|
282
284
|
// ── Test Files ──────────────────────────────────────────────────────────
|
|
283
285
|
'__tests__/focus-history.test.ts',
|
|
284
286
|
'principle-compiler/__tests__/compiler-replay-gate.test.ts',
|
|
@@ -320,13 +322,15 @@ describe('PRI-212 plugin core anti-growth guard', () => {
|
|
|
320
322
|
expect.fail(msg);
|
|
321
323
|
}
|
|
322
324
|
});
|
|
323
|
-
it('known baseline count is self-consistent (
|
|
325
|
+
it('known baseline count is self-consistent (98 files)', async () => {
|
|
324
326
|
// Sanity check: if the baseline grows, update this number.
|
|
325
327
|
// Prevents accidental baseline bloat from going unnoticed.
|
|
326
328
|
// See docs/reviews/plugin-core-inventory-2026-05.md §7
|
|
327
329
|
// PRI-286: Removed confirm-first-gate.ts (95 → 94)
|
|
328
|
-
// PRI-307: Added pd-config-loader.ts (
|
|
329
|
-
|
|
330
|
+
// PRI-307: Added pd-config-loader.ts (94 → 95)
|
|
331
|
+
// PRI-346: Added config-health.ts (95 → 96)
|
|
332
|
+
// PRI-347: Removed JSONL trajectory writers (96 → 95 → 94 → ... → 98 after cleanup)
|
|
333
|
+
expect(KNOWN_PLUGIN_CORE_FILES.size).toBe(98);
|
|
330
334
|
});
|
|
331
335
|
});
|
|
332
336
|
const REQUIRED_TEST_FILES = [
|