@principles/core 1.240.2 → 1.240.4

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.
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=principle-injector.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"principle-injector.test.d.ts","sourceRoot":"","sources":["../src/principle-injector.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,158 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { DefaultPrincipleInjector } from './principle-injector.js';
3
+ function makeP(id, text, opts = {}) {
4
+ return {
5
+ id,
6
+ text,
7
+ priority: opts.priority ?? 'P1',
8
+ createdAt: opts.createdAt ?? '2026-01-01T00:00:00.000Z',
9
+ };
10
+ }
11
+ describe('DefaultPrincipleInjector', () => {
12
+ describe('formatForInjection', () => {
13
+ it('formats principle with id and text', () => {
14
+ const injector = new DefaultPrincipleInjector();
15
+ expect(injector.formatForInjection(makeP('P0-001', 'Be careful'))).toBe('- [P0-001] Be careful');
16
+ });
17
+ it('handles empty text', () => {
18
+ const injector = new DefaultPrincipleInjector();
19
+ expect(injector.formatForInjection(makeP('P1-001', ''))).toBe('- [P1-001] ');
20
+ });
21
+ });
22
+ describe('getRelevantPrinciples', () => {
23
+ it('returns empty array for empty input', () => {
24
+ const injector = new DefaultPrincipleInjector();
25
+ const context = { domain: 'test', sessionId: 's1', budgetChars: 4000 };
26
+ const result = injector.getRelevantPrinciples([], context);
27
+ expect(result).toEqual([]);
28
+ });
29
+ it('returns empty array for null input', () => {
30
+ const injector = new DefaultPrincipleInjector();
31
+ const context = { domain: 'test', sessionId: 's1', budgetChars: 4000 };
32
+ const result = injector.getRelevantPrinciples(null, context);
33
+ expect(result).toEqual([]);
34
+ });
35
+ it('P0 principles are always included (forced)', () => {
36
+ const injector = new DefaultPrincipleInjector();
37
+ const p0 = makeP('P0-001', 'Critical principle', { priority: 'P0' });
38
+ const p1 = makeP('P1-001', 'Normal principle', { priority: 'P1' });
39
+ const context = { domain: 'test', sessionId: 's1', budgetChars: 4000 };
40
+ const result = injector.getRelevantPrinciples([p0, p1], context);
41
+ expect(result).toContainEqual(expect.objectContaining({ id: 'P0-001' }));
42
+ });
43
+ it('P0 included even when exceeding budget', () => {
44
+ const injector = new DefaultPrincipleInjector();
45
+ const p0 = makeP('P0-001', 'X'.repeat(5000), { priority: 'P0' });
46
+ const context = { domain: 'test', sessionId: 's1', budgetChars: 100 };
47
+ const result = injector.getRelevantPrinciples([p0], context);
48
+ expect(result).toHaveLength(1);
49
+ expect(result[0]?.id).toBe('P0-001');
50
+ });
51
+ it('P0 principles sorted by createdAt (oldest first)', () => {
52
+ const injector = new DefaultPrincipleInjector();
53
+ const p0Old = makeP('P0-001', 'Old', { priority: 'P0', createdAt: '2026-01-01T00:00:00.000Z' });
54
+ const p0New = makeP('P0-002', 'New', { priority: 'P0', createdAt: '2026-06-01T00:00:00.000Z' });
55
+ const context = { domain: 'test', sessionId: 's1', budgetChars: 4000 };
56
+ const result = injector.getRelevantPrinciples([p0New, p0Old], context);
57
+ expect(result[0]?.id).toBe('P0-001');
58
+ expect(result[1]?.id).toBe('P0-002');
59
+ });
60
+ it('P1 principles sorted by priority then createdAt', () => {
61
+ const injector = new DefaultPrincipleInjector();
62
+ const p1Old = makeP('P1-001', 'Old', { priority: 'P1', createdAt: '2026-01-01T00:00:00.000Z' });
63
+ const p1New = makeP('P1-002', 'New', { priority: 'P1', createdAt: '2026-06-01T00:00:00.000Z' });
64
+ const context = { domain: 'test', sessionId: 's1', budgetChars: 4000 };
65
+ const result = injector.getRelevantPrinciples([p1New, p1Old], context);
66
+ expect(result[0]?.id).toBe('P1-001');
67
+ expect(result[1]?.id).toBe('P1-002');
68
+ });
69
+ it('maskedPrincipleIds filters out excluded principles', () => {
70
+ const injector = new DefaultPrincipleInjector();
71
+ const p0 = makeP('P0-001', 'Critical', { priority: 'P0' });
72
+ const p1 = makeP('P1-001', 'Masked', { priority: 'P1' });
73
+ const context = {
74
+ domain: 'test',
75
+ sessionId: 's1',
76
+ budgetChars: 4000,
77
+ maskedPrincipleIds: new Set(['P1-001']),
78
+ };
79
+ const result = injector.getRelevantPrinciples([p0, p1], context);
80
+ expect(result).toHaveLength(1);
81
+ expect(result[0]?.id).toBe('P0-001');
82
+ });
83
+ it('maskedPrincipleIds empty set has no effect', () => {
84
+ const injector = new DefaultPrincipleInjector();
85
+ const p0 = makeP('P0-001', 'Critical', { priority: 'P0' });
86
+ const p1 = makeP('P1-001', 'Normal', { priority: 'P1' });
87
+ const context = {
88
+ domain: 'test',
89
+ sessionId: 's1',
90
+ budgetChars: 4000,
91
+ maskedPrincipleIds: new Set(),
92
+ };
93
+ const result = injector.getRelevantPrinciples([p0, p1], context);
94
+ expect(result).toHaveLength(2);
95
+ });
96
+ it('all masked principles returns empty', () => {
97
+ const injector = new DefaultPrincipleInjector();
98
+ const p0 = makeP('P0-001', 'Critical', { priority: 'P0' });
99
+ const context = {
100
+ domain: 'test',
101
+ sessionId: 's1',
102
+ budgetChars: 4000,
103
+ maskedPrincipleIds: new Set(['P0-001']),
104
+ };
105
+ const result = injector.getRelevantPrinciples([p0], context);
106
+ expect(result).toEqual([]);
107
+ });
108
+ it('throws on unknown priority', () => {
109
+ const injector = new DefaultPrincipleInjector();
110
+ const invalidP = { id: 'P9-001', text: 'Invalid', priority: 'P9', createdAt: '2026-01-01T00:00:00.000Z' };
111
+ const context = { domain: 'test', sessionId: 's1', budgetChars: 4000 };
112
+ expect(() => injector.getRelevantPrinciples([invalidP], context)).toThrow('Unknown principle priority: P9');
113
+ });
114
+ it('undefined priority defaults to P1', () => {
115
+ const injector = new DefaultPrincipleInjector();
116
+ // Construct directly without `makeP` so the `priority` field is genuinely
117
+ // absent. `makeP` applies `opts.priority ?? 'P1'`, which would mask the
118
+ // undefined-priority branch (priorityValue() falls back to 'P1').
119
+ const p = { id: 'P-001', text: 'Default', createdAt: '2026-01-01T00:00:00.000Z' };
120
+ const context = { domain: 'test', sessionId: 's1', budgetChars: 4000 };
121
+ const result = injector.getRelevantPrinciples([p], context);
122
+ expect(result).toHaveLength(1);
123
+ });
124
+ it('P1 before P2 in priority order', () => {
125
+ const injector = new DefaultPrincipleInjector();
126
+ const p1 = makeP('P1-001', 'P1', { priority: 'P1' });
127
+ const p2 = makeP('P2-001', 'P2', { priority: 'P2' });
128
+ const context = { domain: 'test', sessionId: 's1', budgetChars: 4000 };
129
+ const result = injector.getRelevantPrinciples([p2, p1], context);
130
+ expect(result[0]?.id).toBe('P1-001');
131
+ expect(result[1]?.id).toBe('P2-001');
132
+ });
133
+ it('P0 fills budget first, then P1/P2', () => {
134
+ const injector = new DefaultPrincipleInjector();
135
+ const p0 = makeP('P0-001', 'Critical', { priority: 'P0' });
136
+ const p1a = makeP('P1-001', 'A'.repeat(100), { priority: 'P1' });
137
+ const p1b = makeP('P1-002', 'B'.repeat(100), { priority: 'P1' });
138
+ const context = { domain: 'test', sessionId: 's1', budgetChars: 300 };
139
+ const result = injector.getRelevantPrinciples([p1a, p0, p1b], context);
140
+ expect(result[0]?.id).toBe('P0-001');
141
+ expect(result.length).toBeGreaterThanOrEqual(2);
142
+ });
143
+ it('returns empty when all principles are masked', () => {
144
+ const injector = new DefaultPrincipleInjector();
145
+ const p0 = makeP('P0-001', 'P0', { priority: 'P0' });
146
+ const p1 = makeP('P1-001', 'P1', { priority: 'P1' });
147
+ const context = {
148
+ domain: 'test',
149
+ sessionId: 's1',
150
+ budgetChars: 4000,
151
+ maskedPrincipleIds: new Set(['P0-001', 'P1-001']),
152
+ };
153
+ const result = injector.getRelevantPrinciples([p0, p1], context);
154
+ expect(result).toEqual([]);
155
+ });
156
+ });
157
+ });
158
+ //# sourceMappingURL=principle-injector.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"principle-injector.test.js","sourceRoot":"","sources":["../src/principle-injector.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,wBAAwB,EAAyB,MAAM,yBAAyB,CAAC;AAS1F,SAAS,KAAK,CACZ,EAAU,EACV,IAAY,EACZ,OAA8D,EAAE;IAEhE,OAAO;QACL,EAAE;QACF,IAAI;QACJ,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI;QAC/B,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,0BAA0B;KACxD,CAAC;AACJ,CAAC;AAED,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAClC,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;YAC5C,MAAM,QAAQ,GAAG,IAAI,wBAAwB,EAAE,CAAC;YAChD,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,KAAK,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CACrE,uBAAuB,CACxB,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;YAC5B,MAAM,QAAQ,GAAG,IAAI,wBAAwB,EAAE,CAAC;YAChD,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC/E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;QACrC,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC7C,MAAM,QAAQ,GAAG,IAAI,wBAAwB,EAAE,CAAC;YAChD,MAAM,OAAO,GAAqB,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;YACzF,MAAM,MAAM,GAAG,QAAQ,CAAC,qBAAqB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;YAC3D,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;YAC5C,MAAM,QAAQ,GAAG,IAAI,wBAAwB,EAAE,CAAC;YAChD,MAAM,OAAO,GAAqB,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;YACzF,MAAM,MAAM,GAAG,QAAQ,CAAC,qBAAqB,CAAC,IAAkC,EAAE,OAAO,CAAC,CAAC;YAC3F,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACpD,MAAM,QAAQ,GAAG,IAAI,wBAAwB,EAAE,CAAC;YAChD,MAAM,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,oBAAoB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YACrE,MAAM,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YACnE,MAAM,OAAO,GAAqB,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;YACzF,MAAM,MAAM,GAAG,QAAQ,CAAC,qBAAqB,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;YACjE,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAChD,MAAM,QAAQ,GAAG,IAAI,wBAAwB,EAAE,CAAC;YAChD,MAAM,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YACjE,MAAM,OAAO,GAAqB,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC;YACxF,MAAM,MAAM,GAAG,QAAQ,CAAC,qBAAqB,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;YAC7D,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;YAC1D,MAAM,QAAQ,GAAG,IAAI,wBAAwB,EAAE,CAAC;YAChD,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,0BAA0B,EAAE,CAAC,CAAC;YAChG,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,0BAA0B,EAAE,CAAC,CAAC;YAChG,MAAM,OAAO,GAAqB,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;YACzF,MAAM,MAAM,GAAG,QAAQ,CAAC,qBAAqB,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;YACvE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACrC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;YACzD,MAAM,QAAQ,GAAG,IAAI,wBAAwB,EAAE,CAAC;YAChD,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,0BAA0B,EAAE,CAAC,CAAC;YAChG,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,0BAA0B,EAAE,CAAC,CAAC;YAChG,MAAM,OAAO,GAAqB,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;YACzF,MAAM,MAAM,GAAG,QAAQ,CAAC,qBAAqB,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;YACvE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACrC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;YAC5D,MAAM,QAAQ,GAAG,IAAI,wBAAwB,EAAE,CAAC;YAChD,MAAM,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3D,MAAM,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YACzD,MAAM,OAAO,GAAqB;gBAChC,MAAM,EAAE,MAAM;gBACd,SAAS,EAAE,IAAI;gBACf,WAAW,EAAE,IAAI;gBACjB,kBAAkB,EAAE,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;aACxC,CAAC;YACF,MAAM,MAAM,GAAG,QAAQ,CAAC,qBAAqB,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;YACjE,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACpD,MAAM,QAAQ,GAAG,IAAI,wBAAwB,EAAE,CAAC;YAChD,MAAM,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3D,MAAM,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YACzD,MAAM,OAAO,GAAqB;gBAChC,MAAM,EAAE,MAAM;gBACd,SAAS,EAAE,IAAI;gBACf,WAAW,EAAE,IAAI;gBACjB,kBAAkB,EAAE,IAAI,GAAG,EAAE;aAC9B,CAAC;YACF,MAAM,MAAM,GAAG,QAAQ,CAAC,qBAAqB,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;YACjE,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC7C,MAAM,QAAQ,GAAG,IAAI,wBAAwB,EAAE,CAAC;YAChD,MAAM,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3D,MAAM,OAAO,GAAqB;gBAChC,MAAM,EAAE,MAAM;gBACd,SAAS,EAAE,IAAI;gBACf,WAAW,EAAE,IAAI;gBACjB,kBAAkB,EAAE,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;aACxC,CAAC;YACF,MAAM,MAAM,GAAG,QAAQ,CAAC,qBAAqB,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;YAC7D,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;YACpC,MAAM,QAAQ,GAAG,IAAI,wBAAwB,EAAE,CAAC;YAChD,MAAM,QAAQ,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAY,EAAE,SAAS,EAAE,0BAA0B,EAAE,CAAC;YAClH,MAAM,OAAO,GAAqB,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;YACzF,MAAM,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,gCAAgC,CAAC,CAAC;QAC9G,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;YAC3C,MAAM,QAAQ,GAAG,IAAI,wBAAwB,EAAE,CAAC;YAChD,0EAA0E;YAC1E,wEAAwE;YACxE,kEAAkE;YAClE,MAAM,CAAC,GAAkB,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,0BAA0B,EAAE,CAAC;YACjG,MAAM,OAAO,GAAqB,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;YACzF,MAAM,MAAM,GAAG,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YAC5D,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;YACxC,MAAM,QAAQ,GAAG,IAAI,wBAAwB,EAAE,CAAC;YAChD,MAAM,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YACrD,MAAM,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YACrD,MAAM,OAAO,GAAqB,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;YACzF,MAAM,MAAM,GAAG,QAAQ,CAAC,qBAAqB,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;YACjE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACrC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;YAC3C,MAAM,QAAQ,GAAG,IAAI,wBAAwB,EAAE,CAAC;YAChD,MAAM,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3D,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YACjE,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YACjE,MAAM,OAAO,GAAqB,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC;YACxF,MAAM,MAAM,GAAG,QAAQ,CAAC,qBAAqB,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;YACvE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACrC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;YACtD,MAAM,QAAQ,GAAG,IAAI,wBAAwB,EAAE,CAAC;YAChD,MAAM,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YACrD,MAAM,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YACrD,MAAM,OAAO,GAAqB;gBAChC,MAAM,EAAE,MAAM;gBACd,SAAS,EAAE,IAAI;gBACf,WAAW,EAAE,IAAI;gBACjB,kBAAkB,EAAE,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;aAClD,CAAC;YACF,MAAM,MAAM,GAAG,QAAQ,CAAC,qBAAqB,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;YACjE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Bridge Result Shaper Tests — Core Package
3
+ *
4
+ * Direct unit tests for the pure shapeBridgeResult() function.
5
+ *
6
+ * This module centralizes the status decision tree for PainSignalBridge,
7
+ * used by both the fresh diagnosis path and the existing-task idempotent path.
8
+ *
9
+ * Tests verify every branch in the decision tree:
10
+ * - Fresh path: no candidates → failed
11
+ * - Fresh path: admitted but no ledger → failed
12
+ * - Fresh path: all gated → degraded
13
+ * - Fresh path: partial admission → degraded
14
+ * - Fresh path: success with seed failure note → degraded
15
+ * - Fresh path: clean success → succeeded
16
+ * - Existing path: no candidates → failed
17
+ * - Existing path: no ledger → failed
18
+ * - Existing path: clean success → succeeded
19
+ *
20
+ * ERR checklist:
21
+ * - ERR-007 / EP-02: single source for status decision (unit test proves all branches)
22
+ * - ERR-002 / EP-03: every degraded/failed branch carries a structured message
23
+ * - ERR-004 / ERR-008 / EP-07: lineage fields pass through untouched
24
+ */
25
+ export {};
26
+ //# sourceMappingURL=bridge-result-shaper.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge-result-shaper.test.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/__tests__/bridge-result-shaper.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG"}
@@ -0,0 +1,402 @@
1
+ /**
2
+ * Bridge Result Shaper Tests — Core Package
3
+ *
4
+ * Direct unit tests for the pure shapeBridgeResult() function.
5
+ *
6
+ * This module centralizes the status decision tree for PainSignalBridge,
7
+ * used by both the fresh diagnosis path and the existing-task idempotent path.
8
+ *
9
+ * Tests verify every branch in the decision tree:
10
+ * - Fresh path: no candidates → failed
11
+ * - Fresh path: admitted but no ledger → failed
12
+ * - Fresh path: all gated → degraded
13
+ * - Fresh path: partial admission → degraded
14
+ * - Fresh path: success with seed failure note → degraded
15
+ * - Fresh path: clean success → succeeded
16
+ * - Existing path: no candidates → failed
17
+ * - Existing path: no ledger → failed
18
+ * - Existing path: clean success → succeeded
19
+ *
20
+ * ERR checklist:
21
+ * - ERR-007 / EP-02: single source for status decision (unit test proves all branches)
22
+ * - ERR-002 / EP-03: every degraded/failed branch carries a structured message
23
+ * - ERR-004 / ERR-008 / EP-07: lineage fields pass through untouched
24
+ */
25
+ import { describe, it, expect } from 'vitest';
26
+ import { shapeBridgeResult } from '../bridge-result-shaper.js';
27
+ const PAIN_ID = 'pain-test-001';
28
+ const TASK_ID = 'diagnosis_pain-test-001';
29
+ const RUN_ID = 'run-test-1';
30
+ const ARTIFACT_ID = 'artifact-test-1';
31
+ function makeAdmissionResult(candidateId, decision) {
32
+ return {
33
+ candidateId,
34
+ recommendationKind: 'principle',
35
+ admission: {
36
+ decision,
37
+ reason: decision === 'admitted' ? 'evidence_sufficient' : 'input_evidence_empty',
38
+ nextAction: decision === 'admitted' ? 'none' : 'collect_evidence_before_diagnosis',
39
+ evidenceStatus: 'automatic_hook',
40
+ },
41
+ };
42
+ }
43
+ describe('shapeBridgeResult — fresh path', () => {
44
+ it('returns failed when no candidates produced', () => {
45
+ const input = {
46
+ path: 'fresh',
47
+ painId: PAIN_ID,
48
+ taskId: TASK_ID,
49
+ runId: RUN_ID,
50
+ candidateIds: [],
51
+ ledgerEntryIds: [],
52
+ admissionResults: [],
53
+ seedFailureNote: '',
54
+ autoIntakeEnabled: true,
55
+ };
56
+ const result = shapeBridgeResult(input);
57
+ expect(result.status).toBe('failed');
58
+ expect(result.painId).toBe(PAIN_ID);
59
+ expect(result.taskId).toBe(TASK_ID);
60
+ expect(result.runId).toBe(RUN_ID);
61
+ expect(result.candidateIds).toEqual([]);
62
+ expect(result.ledgerEntryIds).toEqual([]);
63
+ expect(result.admissionResults).toEqual([]);
64
+ expect(result.message).toBe('Diagnostician succeeded but produced no principle candidates');
65
+ });
66
+ it('returns failed when candidates admitted but intake produced no ledger entries', () => {
67
+ const admissionResults = [
68
+ makeAdmissionResult('cand-1', 'admitted'),
69
+ makeAdmissionResult('cand-2', 'admitted'),
70
+ ];
71
+ const input = {
72
+ path: 'fresh',
73
+ painId: PAIN_ID,
74
+ taskId: TASK_ID,
75
+ runId: RUN_ID,
76
+ artifactId: ARTIFACT_ID,
77
+ candidateIds: ['cand-1', 'cand-2'],
78
+ ledgerEntryIds: [],
79
+ admissionResults,
80
+ seedFailureNote: '',
81
+ autoIntakeEnabled: true,
82
+ };
83
+ const result = shapeBridgeResult(input);
84
+ expect(result.status).toBe('failed');
85
+ expect(result.painId).toBe(PAIN_ID);
86
+ expect(result.artifactId).toBe(ARTIFACT_ID);
87
+ expect(result.candidateIds).toEqual(['cand-1', 'cand-2']);
88
+ expect(result.ledgerEntryIds).toEqual([]);
89
+ expect(result.message).toBe('Candidate intake did not produce a ledger entry');
90
+ });
91
+ it('does NOT fail on no-ledger when autoIntake is disabled', () => {
92
+ const admissionResults = [
93
+ makeAdmissionResult('cand-1', 'admitted'),
94
+ ];
95
+ const input = {
96
+ path: 'fresh',
97
+ painId: PAIN_ID,
98
+ taskId: TASK_ID,
99
+ runId: RUN_ID,
100
+ artifactId: ARTIFACT_ID,
101
+ candidateIds: ['cand-1'],
102
+ ledgerEntryIds: [],
103
+ admissionResults,
104
+ seedFailureNote: '',
105
+ autoIntakeEnabled: false,
106
+ };
107
+ const result = shapeBridgeResult(input);
108
+ expect(result.status).toBe('succeeded');
109
+ expect(result.ledgerEntryIds).toEqual([]);
110
+ });
111
+ it('returns degraded when all candidates are gated (none admitted)', () => {
112
+ const admissionResults = [
113
+ makeAdmissionResult('cand-1', 'needs_evidence'),
114
+ makeAdmissionResult('cand-2', 'deferred'),
115
+ ];
116
+ const input = {
117
+ path: 'fresh',
118
+ painId: PAIN_ID,
119
+ taskId: TASK_ID,
120
+ runId: RUN_ID,
121
+ artifactId: ARTIFACT_ID,
122
+ candidateIds: ['cand-1', 'cand-2'],
123
+ ledgerEntryIds: [],
124
+ admissionResults,
125
+ seedFailureNote: '',
126
+ autoIntakeEnabled: true,
127
+ };
128
+ const result = shapeBridgeResult(input);
129
+ expect(result.status).toBe('degraded');
130
+ expect(result.message).toContain('all_candidates_gated');
131
+ expect(result.message).toContain('cand-1=needs_evidence');
132
+ expect(result.message).toContain('cand-2=deferred');
133
+ });
134
+ it('returns degraded with seed failure note appended when all gated + seed failed', () => {
135
+ const admissionResults = [
136
+ makeAdmissionResult('cand-1', 'needs_evidence'),
137
+ ];
138
+ const input = {
139
+ path: 'fresh',
140
+ painId: PAIN_ID,
141
+ taskId: TASK_ID,
142
+ runId: RUN_ID,
143
+ artifactId: ARTIFACT_ID,
144
+ candidateIds: ['cand-1'],
145
+ ledgerEntryIds: [],
146
+ admissionResults,
147
+ seedFailureNote: 'dreamer seed failed: timeout',
148
+ autoIntakeEnabled: true,
149
+ };
150
+ const result = shapeBridgeResult(input);
151
+ expect(result.status).toBe('degraded');
152
+ expect(result.message).toContain('all_candidates_gated');
153
+ expect(result.message).toContain('dreamer seed failed: timeout');
154
+ });
155
+ it('returns degraded when partial admission (some admitted, some gated)', () => {
156
+ const admissionResults = [
157
+ makeAdmissionResult('cand-1', 'admitted'),
158
+ makeAdmissionResult('cand-2', 'needs_evidence'),
159
+ makeAdmissionResult('cand-3', 'deferred'),
160
+ ];
161
+ const input = {
162
+ path: 'fresh',
163
+ painId: PAIN_ID,
164
+ taskId: TASK_ID,
165
+ runId: RUN_ID,
166
+ artifactId: ARTIFACT_ID,
167
+ candidateIds: ['cand-1', 'cand-2', 'cand-3'],
168
+ ledgerEntryIds: ['ledger-1'],
169
+ admissionResults,
170
+ seedFailureNote: '',
171
+ autoIntakeEnabled: true,
172
+ };
173
+ const result = shapeBridgeResult(input);
174
+ expect(result.status).toBe('degraded');
175
+ expect(result.message).toContain('partial_admission');
176
+ expect(result.message).toContain('1_admitted_2_gated');
177
+ });
178
+ it('returns degraded with seed failure note on partial admission', () => {
179
+ const admissionResults = [
180
+ makeAdmissionResult('cand-1', 'admitted'),
181
+ makeAdmissionResult('cand-2', 'needs_evidence'),
182
+ ];
183
+ const input = {
184
+ path: 'fresh',
185
+ painId: PAIN_ID,
186
+ taskId: TASK_ID,
187
+ runId: RUN_ID,
188
+ artifactId: ARTIFACT_ID,
189
+ candidateIds: ['cand-1', 'cand-2'],
190
+ ledgerEntryIds: ['ledger-1'],
191
+ admissionResults,
192
+ seedFailureNote: 'some seeds failed: rate limit',
193
+ autoIntakeEnabled: true,
194
+ };
195
+ const result = shapeBridgeResult(input);
196
+ expect(result.status).toBe('degraded');
197
+ expect(result.message).toContain('partial_admission');
198
+ expect(result.message).toContain('some seeds failed: rate limit');
199
+ });
200
+ it('returns succeeded when all candidates admitted and ledger produced', () => {
201
+ const admissionResults = [
202
+ makeAdmissionResult('cand-1', 'admitted'),
203
+ makeAdmissionResult('cand-2', 'admitted'),
204
+ ];
205
+ const input = {
206
+ path: 'fresh',
207
+ painId: PAIN_ID,
208
+ taskId: TASK_ID,
209
+ runId: RUN_ID,
210
+ artifactId: ARTIFACT_ID,
211
+ candidateIds: ['cand-1', 'cand-2'],
212
+ ledgerEntryIds: ['ledger-1', 'ledger-2'],
213
+ admissionResults,
214
+ seedFailureNote: '',
215
+ autoIntakeEnabled: true,
216
+ };
217
+ const result = shapeBridgeResult(input);
218
+ expect(result.status).toBe('succeeded');
219
+ expect(result.painId).toBe(PAIN_ID);
220
+ expect(result.taskId).toBe(TASK_ID);
221
+ expect(result.runId).toBe(RUN_ID);
222
+ expect(result.artifactId).toBe(ARTIFACT_ID);
223
+ expect(result.candidateIds).toEqual(['cand-1', 'cand-2']);
224
+ expect(result.ledgerEntryIds).toEqual(['ledger-1', 'ledger-2']);
225
+ expect(result.admissionResults).toEqual(admissionResults);
226
+ expect(result.message).toBeUndefined();
227
+ });
228
+ it('returns degraded when seed failure note is present (even with full admission)', () => {
229
+ const admissionResults = [
230
+ makeAdmissionResult('cand-1', 'admitted'),
231
+ ];
232
+ const input = {
233
+ path: 'fresh',
234
+ painId: PAIN_ID,
235
+ taskId: TASK_ID,
236
+ runId: RUN_ID,
237
+ artifactId: ARTIFACT_ID,
238
+ candidateIds: ['cand-1'],
239
+ ledgerEntryIds: ['ledger-1'],
240
+ admissionResults,
241
+ seedFailureNote: 'dreamer seed failed: LLM error',
242
+ autoIntakeEnabled: true,
243
+ };
244
+ const result = shapeBridgeResult(input);
245
+ expect(result.status).toBe('degraded');
246
+ expect(result.message).toBe('dreamer seed failed: LLM error');
247
+ });
248
+ it('passes through lineage fields untouched (fresh path)', () => {
249
+ const admissionResults = [makeAdmissionResult('cand-1', 'admitted')];
250
+ const input = {
251
+ path: 'fresh',
252
+ painId: PAIN_ID,
253
+ taskId: TASK_ID,
254
+ runId: RUN_ID,
255
+ artifactId: ARTIFACT_ID,
256
+ candidateIds: ['cand-1'],
257
+ ledgerEntryIds: ['ledger-1'],
258
+ admissionResults,
259
+ seedFailureNote: '',
260
+ autoIntakeEnabled: true,
261
+ };
262
+ const result = shapeBridgeResult(input);
263
+ expect(result.painId).toBe(PAIN_ID);
264
+ expect(result.taskId).toBe(TASK_ID);
265
+ expect(result.runId).toBe(RUN_ID);
266
+ expect(result.artifactId).toBe(ARTIFACT_ID);
267
+ expect(result.candidateIds).toBe(input.candidateIds);
268
+ expect(result.ledgerEntryIds).toBe(input.ledgerEntryIds);
269
+ expect(result.admissionResults).toBe(input.admissionResults);
270
+ });
271
+ });
272
+ describe('shapeBridgeResult — existing path', () => {
273
+ it('returns failed when no candidates', () => {
274
+ const input = {
275
+ path: 'existing',
276
+ painId: PAIN_ID,
277
+ taskId: TASK_ID,
278
+ runId: RUN_ID,
279
+ candidateIds: [],
280
+ ledgerEntryIds: [],
281
+ autoIntakeEnabled: true,
282
+ };
283
+ const result = shapeBridgeResult(input);
284
+ expect(result.status).toBe('failed');
285
+ expect(result.message).toBe('Task has no principle candidates — treating as failed');
286
+ expect(result.admissionResults).toBeUndefined();
287
+ });
288
+ it('returns failed when candidates exist but no ledger entries (autoIntake enabled)', () => {
289
+ const input = {
290
+ path: 'existing',
291
+ painId: PAIN_ID,
292
+ taskId: TASK_ID,
293
+ runId: RUN_ID,
294
+ artifactId: ARTIFACT_ID,
295
+ candidateIds: ['cand-1', 'cand-2'],
296
+ ledgerEntryIds: [],
297
+ autoIntakeEnabled: true,
298
+ };
299
+ const result = shapeBridgeResult(input);
300
+ expect(result.status).toBe('failed');
301
+ expect(result.message).toBe('Candidate intake did not produce a ledger entry — treating as failed');
302
+ });
303
+ it('returns succeeded when candidates exist but no ledger (autoIntake disabled)', () => {
304
+ const input = {
305
+ path: 'existing',
306
+ painId: PAIN_ID,
307
+ taskId: TASK_ID,
308
+ runId: RUN_ID,
309
+ artifactId: ARTIFACT_ID,
310
+ candidateIds: ['cand-1'],
311
+ ledgerEntryIds: [],
312
+ autoIntakeEnabled: false,
313
+ };
314
+ const result = shapeBridgeResult(input);
315
+ expect(result.status).toBe('succeeded');
316
+ expect(result.message).toBe('Task already succeeded');
317
+ });
318
+ it('returns succeeded when candidates and ledger entries exist', () => {
319
+ const input = {
320
+ path: 'existing',
321
+ painId: PAIN_ID,
322
+ taskId: TASK_ID,
323
+ runId: RUN_ID,
324
+ artifactId: ARTIFACT_ID,
325
+ candidateIds: ['cand-1', 'cand-2'],
326
+ ledgerEntryIds: ['ledger-1', 'ledger-2'],
327
+ autoIntakeEnabled: true,
328
+ };
329
+ const result = shapeBridgeResult(input);
330
+ expect(result.status).toBe('succeeded');
331
+ expect(result.message).toBe('Task already succeeded');
332
+ expect(result.admissionResults).toBeUndefined();
333
+ });
334
+ it('passes through lineage fields untouched (existing path)', () => {
335
+ const input = {
336
+ path: 'existing',
337
+ painId: PAIN_ID,
338
+ taskId: TASK_ID,
339
+ runId: RUN_ID,
340
+ artifactId: ARTIFACT_ID,
341
+ candidateIds: ['cand-1'],
342
+ ledgerEntryIds: ['ledger-1'],
343
+ autoIntakeEnabled: true,
344
+ };
345
+ const result = shapeBridgeResult(input);
346
+ expect(result.painId).toBe(PAIN_ID);
347
+ expect(result.taskId).toBe(TASK_ID);
348
+ expect(result.runId).toBe(RUN_ID);
349
+ expect(result.artifactId).toBe(ARTIFACT_ID);
350
+ expect(result.candidateIds).toBe(input.candidateIds);
351
+ expect(result.ledgerEntryIds).toBe(input.ledgerEntryIds);
352
+ });
353
+ });
354
+ describe('shapeBridgeResult — cross-path consistency', () => {
355
+ it('fresh and existing paths use different messages for same semantic state', () => {
356
+ const freshNoCandidates = shapeBridgeResult({
357
+ path: 'fresh',
358
+ painId: PAIN_ID,
359
+ taskId: TASK_ID,
360
+ candidateIds: [],
361
+ ledgerEntryIds: [],
362
+ admissionResults: [],
363
+ seedFailureNote: '',
364
+ autoIntakeEnabled: true,
365
+ });
366
+ const existingNoCandidates = shapeBridgeResult({
367
+ path: 'existing',
368
+ painId: PAIN_ID,
369
+ taskId: TASK_ID,
370
+ candidateIds: [],
371
+ ledgerEntryIds: [],
372
+ autoIntakeEnabled: true,
373
+ });
374
+ expect(freshNoCandidates.status).toBe('failed');
375
+ expect(existingNoCandidates.status).toBe('failed');
376
+ expect(freshNoCandidates.message).not.toBe(existingNoCandidates.message);
377
+ });
378
+ it('fresh path includes admissionResults, existing path does not', () => {
379
+ const admissionResults = [makeAdmissionResult('cand-1', 'admitted')];
380
+ const freshSuccess = shapeBridgeResult({
381
+ path: 'fresh',
382
+ painId: PAIN_ID,
383
+ taskId: TASK_ID,
384
+ candidateIds: ['cand-1'],
385
+ ledgerEntryIds: ['ledger-1'],
386
+ admissionResults,
387
+ seedFailureNote: '',
388
+ autoIntakeEnabled: true,
389
+ });
390
+ const existingSuccess = shapeBridgeResult({
391
+ path: 'existing',
392
+ painId: PAIN_ID,
393
+ taskId: TASK_ID,
394
+ candidateIds: ['cand-1'],
395
+ ledgerEntryIds: ['ledger-1'],
396
+ autoIntakeEnabled: true,
397
+ });
398
+ expect(freshSuccess.admissionResults).toBeDefined();
399
+ expect(existingSuccess.admissionResults).toBeUndefined();
400
+ });
401
+ });
402
+ //# sourceMappingURL=bridge-result-shaper.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge-result-shaper.test.js","sourceRoot":"","sources":["../../../src/runtime-v2/__tests__/bridge-result-shaper.test.ts"],"names":[],"mappings":"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"}