@cleocode/contracts 2026.5.111 → 2026.5.113

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 (118) hide show
  1. package/dist/__tests__/cli-meta-suggested-next.test.d.ts +21 -0
  2. package/dist/__tests__/cli-meta-suggested-next.test.d.ts.map +1 -0
  3. package/dist/__tests__/cli-meta-suggested-next.test.js +70 -0
  4. package/dist/__tests__/cli-meta-suggested-next.test.js.map +1 -0
  5. package/dist/__tests__/evidence-atom-schema.test.d.ts +16 -0
  6. package/dist/__tests__/evidence-atom-schema.test.d.ts.map +1 -0
  7. package/dist/__tests__/evidence-atom-schema.test.js +394 -0
  8. package/dist/__tests__/evidence-atom-schema.test.js.map +1 -0
  9. package/dist/config/__tests__/manifest.test.d.ts +13 -0
  10. package/dist/config/__tests__/manifest.test.d.ts.map +1 -0
  11. package/dist/config/__tests__/manifest.test.js +143 -0
  12. package/dist/config/__tests__/manifest.test.js.map +1 -0
  13. package/dist/config/manifest.d.ts +158 -0
  14. package/dist/config/manifest.d.ts.map +1 -0
  15. package/dist/config/manifest.js +123 -0
  16. package/dist/config/manifest.js.map +1 -0
  17. package/dist/docs/__tests__/provenance.test.d.ts +14 -0
  18. package/dist/docs/__tests__/provenance.test.d.ts.map +1 -0
  19. package/dist/docs/__tests__/provenance.test.js +579 -0
  20. package/dist/docs/__tests__/provenance.test.js.map +1 -0
  21. package/dist/docs/provenance.d.ts +731 -0
  22. package/dist/docs/provenance.d.ts.map +1 -0
  23. package/dist/docs/provenance.js +258 -0
  24. package/dist/docs/provenance.js.map +1 -0
  25. package/dist/docs-taxonomy.d.ts +24 -0
  26. package/dist/docs-taxonomy.d.ts.map +1 -1
  27. package/dist/docs-taxonomy.js +27 -0
  28. package/dist/docs-taxonomy.js.map +1 -1
  29. package/dist/doctor.d.ts +101 -0
  30. package/dist/doctor.d.ts.map +1 -1
  31. package/dist/errors.d.ts +4 -0
  32. package/dist/errors.d.ts.map +1 -1
  33. package/dist/errors.js +4 -0
  34. package/dist/errors.js.map +1 -1
  35. package/dist/evidence-atom-schema.d.ts +407 -0
  36. package/dist/evidence-atom-schema.d.ts.map +1 -0
  37. package/dist/evidence-atom-schema.js +505 -0
  38. package/dist/evidence-atom-schema.js.map +1 -0
  39. package/dist/exit-codes.d.ts +37 -0
  40. package/dist/exit-codes.d.ts.map +1 -1
  41. package/dist/exit-codes.js +37 -0
  42. package/dist/exit-codes.js.map +1 -1
  43. package/dist/index.d.ts +13 -2
  44. package/dist/index.d.ts.map +1 -1
  45. package/dist/index.js +8 -1
  46. package/dist/index.js.map +1 -1
  47. package/dist/invariants/__tests__/adr-056-release.test.d.ts +16 -0
  48. package/dist/invariants/__tests__/adr-056-release.test.d.ts.map +1 -0
  49. package/dist/invariants/__tests__/adr-056-release.test.js +88 -0
  50. package/dist/invariants/__tests__/adr-056-release.test.js.map +1 -0
  51. package/dist/invariants/__tests__/adr-070-orchestration.test.d.ts +22 -0
  52. package/dist/invariants/__tests__/adr-070-orchestration.test.d.ts.map +1 -0
  53. package/dist/invariants/__tests__/adr-070-orchestration.test.js +151 -0
  54. package/dist/invariants/__tests__/adr-070-orchestration.test.js.map +1 -0
  55. package/dist/invariants/__tests__/registry.test.d.ts +14 -0
  56. package/dist/invariants/__tests__/registry.test.d.ts.map +1 -0
  57. package/dist/invariants/__tests__/registry.test.js +113 -0
  58. package/dist/invariants/__tests__/registry.test.js.map +1 -0
  59. package/dist/invariants/adr-056-release.d.ts +42 -0
  60. package/dist/invariants/adr-056-release.d.ts.map +1 -0
  61. package/dist/invariants/adr-056-release.js +143 -0
  62. package/dist/invariants/adr-056-release.js.map +1 -0
  63. package/dist/invariants/adr-070-orchestration.d.ts +73 -0
  64. package/dist/invariants/adr-070-orchestration.d.ts.map +1 -0
  65. package/dist/invariants/adr-070-orchestration.js +290 -0
  66. package/dist/invariants/adr-070-orchestration.js.map +1 -0
  67. package/dist/invariants/adr-073-saga.d.ts +32 -0
  68. package/dist/invariants/adr-073-saga.d.ts.map +1 -0
  69. package/dist/invariants/adr-073-saga.js +155 -0
  70. package/dist/invariants/adr-073-saga.js.map +1 -0
  71. package/dist/invariants/index.d.ts +162 -0
  72. package/dist/invariants/index.d.ts.map +1 -0
  73. package/dist/invariants/index.js +118 -0
  74. package/dist/invariants/index.js.map +1 -0
  75. package/dist/operations/__tests__/input-contract.test.d.ts +20 -0
  76. package/dist/operations/__tests__/input-contract.test.d.ts.map +1 -0
  77. package/dist/operations/__tests__/input-contract.test.js +158 -0
  78. package/dist/operations/__tests__/input-contract.test.js.map +1 -0
  79. package/dist/operations/docs.d.ts +16 -0
  80. package/dist/operations/docs.d.ts.map +1 -1
  81. package/dist/operations/input-contract.d.ts +267 -0
  82. package/dist/operations/input-contract.d.ts.map +1 -0
  83. package/dist/operations/input-contract.js +29 -0
  84. package/dist/operations/input-contract.js.map +1 -0
  85. package/dist/templates/__tests__/manifest.test.d.ts +18 -0
  86. package/dist/templates/__tests__/manifest.test.d.ts.map +1 -0
  87. package/dist/templates/__tests__/manifest.test.js +123 -0
  88. package/dist/templates/__tests__/manifest.test.js.map +1 -0
  89. package/dist/templates/manifest.d.ts +186 -0
  90. package/dist/templates/manifest.d.ts.map +1 -0
  91. package/dist/templates/manifest.js +165 -0
  92. package/dist/templates/manifest.js.map +1 -0
  93. package/package.json +2 -2
  94. package/src/__tests__/cli-meta-suggested-next.test.ts +76 -0
  95. package/src/__tests__/evidence-atom-schema.test.ts +499 -0
  96. package/src/config/__tests__/manifest.test.ts +176 -0
  97. package/src/config/manifest.ts +218 -0
  98. package/src/docs/__tests__/__snapshots__/provenance.test.ts.snap +252 -0
  99. package/src/docs/__tests__/provenance.test.ts +648 -0
  100. package/src/docs/provenance.ts +601 -0
  101. package/src/docs-taxonomy.ts +55 -0
  102. package/src/doctor.ts +111 -0
  103. package/src/errors.ts +4 -0
  104. package/src/evidence-atom-schema.ts +628 -0
  105. package/src/exit-codes.ts +39 -0
  106. package/src/index.ts +129 -0
  107. package/src/invariants/__tests__/adr-056-release.test.ts +102 -0
  108. package/src/invariants/__tests__/adr-070-orchestration.test.ts +186 -0
  109. package/src/invariants/__tests__/registry.test.ts +136 -0
  110. package/src/invariants/adr-056-release.ts +154 -0
  111. package/src/invariants/adr-070-orchestration.ts +317 -0
  112. package/src/invariants/adr-073-saga.ts +167 -0
  113. package/src/invariants/index.ts +222 -0
  114. package/src/operations/__tests__/input-contract.test.ts +188 -0
  115. package/src/operations/docs.ts +16 -0
  116. package/src/operations/input-contract.ts +301 -0
  117. package/src/templates/__tests__/manifest.test.ts +140 -0
  118. package/src/templates/manifest.ts +208 -0
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Type-shape contract test for the envelope-wide `meta.suggestedNext`
3
+ * field promoted in T9920 (Saga T9855 / E8.1).
4
+ *
5
+ * `CliMeta.suggestedNext` is the canonical LLM-next-action hint
6
+ * surfaced on every CLI envelope. This test asserts the type allows
7
+ * the optional `ReadonlyArray<string>` shape and never widens to
8
+ * `string | null` or to nested objects (which would re-introduce the
9
+ * pre-T9920 nexus-internal-only structured form at the envelope tier).
10
+ *
11
+ * The runtime `attachSuggestedNext` helper lives in
12
+ * `packages/core/src/dispatch/suggested-next.ts` and is exercised by
13
+ * `packages/core/src/dispatch/__tests__/suggested-next.test.ts` —
14
+ * contracts cannot import core without breaking the layering contract.
15
+ *
16
+ * @epic T9919
17
+ * @task T9920
18
+ * @saga T9855
19
+ */
20
+ export {};
21
+ //# sourceMappingURL=cli-meta-suggested-next.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-meta-suggested-next.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/cli-meta-suggested-next.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Type-shape contract test for the envelope-wide `meta.suggestedNext`
3
+ * field promoted in T9920 (Saga T9855 / E8.1).
4
+ *
5
+ * `CliMeta.suggestedNext` is the canonical LLM-next-action hint
6
+ * surfaced on every CLI envelope. This test asserts the type allows
7
+ * the optional `ReadonlyArray<string>` shape and never widens to
8
+ * `string | null` or to nested objects (which would re-introduce the
9
+ * pre-T9920 nexus-internal-only structured form at the envelope tier).
10
+ *
11
+ * The runtime `attachSuggestedNext` helper lives in
12
+ * `packages/core/src/dispatch/suggested-next.ts` and is exercised by
13
+ * `packages/core/src/dispatch/__tests__/suggested-next.test.ts` —
14
+ * contracts cannot import core without breaking the layering contract.
15
+ *
16
+ * @epic T9919
17
+ * @task T9920
18
+ * @saga T9855
19
+ */
20
+ import { describe, expect, expectTypeOf, it } from 'vitest';
21
+ describe('CliMeta.suggestedNext type shape (T9920)', () => {
22
+ it('allows ReadonlyArray<string>', () => {
23
+ const meta = {
24
+ operation: 'tasks.show',
25
+ requestId: '00000000-0000-0000-0000-000000000000',
26
+ duration_ms: 0,
27
+ timestamp: '2026-05-24T00:00:00.000Z',
28
+ suggestedNext: ['cleo focus T1234', 'cleo verify T1234'],
29
+ };
30
+ expect(meta.suggestedNext).toEqual(['cleo focus T1234', 'cleo verify T1234']);
31
+ });
32
+ it('is optional — omitting it leaves a valid CliMeta', () => {
33
+ const meta = {
34
+ operation: 'tasks.list',
35
+ requestId: '00000000-0000-0000-0000-000000000001',
36
+ duration_ms: 0,
37
+ timestamp: '2026-05-24T00:00:00.000Z',
38
+ };
39
+ expect(meta.suggestedNext).toBeUndefined();
40
+ });
41
+ it('accepts an empty array (explicit "no follow-up suggested")', () => {
42
+ const meta = {
43
+ operation: 'tasks.show',
44
+ requestId: '00000000-0000-0000-0000-000000000002',
45
+ duration_ms: 0,
46
+ timestamp: '2026-05-24T00:00:00.000Z',
47
+ suggestedNext: [],
48
+ };
49
+ expect(meta.suggestedNext).toEqual([]);
50
+ expect(Array.isArray(meta.suggestedNext)).toBe(true);
51
+ });
52
+ it('typechecks as ReadonlyArray<string> — never `null`, never nested objects', () => {
53
+ expectTypeOf().toEqualTypeOf();
54
+ });
55
+ it('flows through CliEnvelope<T>.meta verbatim', () => {
56
+ const envelope = {
57
+ success: true,
58
+ data: { taskId: 'T1234' },
59
+ meta: {
60
+ operation: 'tasks.show',
61
+ requestId: '00000000-0000-0000-0000-000000000003',
62
+ duration_ms: 1,
63
+ timestamp: '2026-05-24T00:00:00.000Z',
64
+ suggestedNext: ['cleo focus T1234'],
65
+ },
66
+ };
67
+ expect(envelope.meta.suggestedNext).toEqual(['cleo focus T1234']);
68
+ });
69
+ });
70
+ //# sourceMappingURL=cli-meta-suggested-next.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-meta-suggested-next.test.js","sourceRoot":"","sources":["../../src/__tests__/cli-meta-suggested-next.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE5D,QAAQ,CAAC,0CAA0C,EAAE,GAAG,EAAE;IACxD,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,IAAI,GAAY;YACpB,SAAS,EAAE,YAAY;YACvB,SAAS,EAAE,sCAAsC;YACjD,WAAW,EAAE,CAAC;YACd,SAAS,EAAE,0BAA0B;YACrC,aAAa,EAAE,CAAC,kBAAkB,EAAE,mBAAmB,CAAC;SACzD,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,kBAAkB,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAChF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,IAAI,GAAY;YACpB,SAAS,EAAE,YAAY;YACvB,SAAS,EAAE,sCAAsC;YACjD,WAAW,EAAE,CAAC;YACd,SAAS,EAAE,0BAA0B;SACtC,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,aAAa,EAAE,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,MAAM,IAAI,GAAY;YACpB,SAAS,EAAE,YAAY;YACvB,SAAS,EAAE,sCAAsC;YACjD,WAAW,EAAE,CAAC;YACd,SAAS,EAAE,0BAA0B;YACrC,aAAa,EAAE,EAAE;SAClB,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACvC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0EAA0E,EAAE,GAAG,EAAE;QAClF,YAAY,EAA4B,CAAC,aAAa,EAAqC,CAAC;IAC9F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,QAAQ,GAAoC;YAChD,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE;YACzB,IAAI,EAAE;gBACJ,SAAS,EAAE,YAAY;gBACvB,SAAS,EAAE,sCAAsC;gBACjD,WAAW,EAAE,CAAC;gBACd,SAAS,EAAE,0BAA0B;gBACrC,aAAa,EAAE,CAAC,kBAAkB,CAAC;aACpC;SACF,CAAC;QACF,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Tests for the ADR-051 evidence atom grammar schema (T10337).
3
+ *
4
+ * Coverage:
5
+ * - Per-atom-prefix valid + invalid parse cases.
6
+ * - Per-gate satisfying + insufficient atom sets.
7
+ * - Round-trip: parseEvidenceString output matches schema parse.
8
+ * - Behavior parity with the legacy `checkGateEvidenceMinimum` error
9
+ * message format.
10
+ *
11
+ * @task T10337
12
+ * @saga T10326
13
+ * @adr ADR-051
14
+ */
15
+ export {};
16
+ //# sourceMappingURL=evidence-atom-schema.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidence-atom-schema.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/evidence-atom-schema.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG"}
@@ -0,0 +1,394 @@
1
+ /**
2
+ * Tests for the ADR-051 evidence atom grammar schema (T10337).
3
+ *
4
+ * Coverage:
5
+ * - Per-atom-prefix valid + invalid parse cases.
6
+ * - Per-gate satisfying + insufficient atom sets.
7
+ * - Round-trip: parseEvidenceString output matches schema parse.
8
+ * - Behavior parity with the legacy `checkGateEvidenceMinimum` error
9
+ * message format.
10
+ *
11
+ * @task T10337
12
+ * @saga T10326
13
+ * @adr ADR-051
14
+ */
15
+ import { describe, expect, it } from 'vitest';
16
+ import { EvidenceAtomSchema, EvidenceParseError, formatGateRequirement, GATE_EVIDENCE_REQUIREMENTS, parseEvidenceString, validateEvidenceForGate, } from '../index.js';
17
+ describe('EvidenceAtomSchema (T10337)', () => {
18
+ // ─── Per-atom-prefix parse coverage ───────────────────────────────────────
19
+ describe('commit atom', () => {
20
+ it('accepts 7-40 hex SHA', () => {
21
+ const a = EvidenceAtomSchema.parse({ kind: 'commit', sha: 'abc1234' });
22
+ expect(a).toEqual({ kind: 'commit', sha: 'abc1234' });
23
+ const b = EvidenceAtomSchema.parse({
24
+ kind: 'commit',
25
+ sha: 'a'.repeat(40),
26
+ });
27
+ expect(b.kind).toBe('commit');
28
+ });
29
+ it('rejects short SHA', () => {
30
+ const r = EvidenceAtomSchema.safeParse({ kind: 'commit', sha: 'abc' });
31
+ expect(r.success).toBe(false);
32
+ });
33
+ it('rejects non-hex SHA', () => {
34
+ const r = EvidenceAtomSchema.safeParse({ kind: 'commit', sha: 'xyz1234' });
35
+ expect(r.success).toBe(false);
36
+ });
37
+ });
38
+ describe('files atom', () => {
39
+ it('accepts non-empty paths array', () => {
40
+ const a = EvidenceAtomSchema.parse({
41
+ kind: 'files',
42
+ paths: ['src/foo.ts', 'src/bar.ts'],
43
+ });
44
+ expect(a).toEqual({ kind: 'files', paths: ['src/foo.ts', 'src/bar.ts'] });
45
+ });
46
+ it('rejects empty paths array', () => {
47
+ const r = EvidenceAtomSchema.safeParse({ kind: 'files', paths: [] });
48
+ expect(r.success).toBe(false);
49
+ });
50
+ });
51
+ describe('test-run atom', () => {
52
+ it('accepts non-empty path', () => {
53
+ const a = EvidenceAtomSchema.parse({ kind: 'test-run', path: '/tmp/v.json' });
54
+ expect(a).toEqual({ kind: 'test-run', path: '/tmp/v.json' });
55
+ });
56
+ it('rejects empty path', () => {
57
+ const r = EvidenceAtomSchema.safeParse({ kind: 'test-run', path: '' });
58
+ expect(r.success).toBe(false);
59
+ });
60
+ });
61
+ describe('tool atom', () => {
62
+ it('accepts canonical and alias names', () => {
63
+ expect(EvidenceAtomSchema.parse({ kind: 'tool', tool: 'test' }).kind).toBe('tool');
64
+ expect(EvidenceAtomSchema.parse({ kind: 'tool', tool: 'pnpm-test' }).kind).toBe('tool');
65
+ });
66
+ it('rejects empty tool name', () => {
67
+ const r = EvidenceAtomSchema.safeParse({ kind: 'tool', tool: '' });
68
+ expect(r.success).toBe(false);
69
+ });
70
+ });
71
+ describe('url atom', () => {
72
+ it('accepts http and https', () => {
73
+ expect(EvidenceAtomSchema.parse({ kind: 'url', url: 'https://example.com/x' }).kind).toBe('url');
74
+ expect(EvidenceAtomSchema.parse({ kind: 'url', url: 'http://localhost:8080' }).kind).toBe('url');
75
+ });
76
+ it('rejects scheme-less url', () => {
77
+ const r = EvidenceAtomSchema.safeParse({ kind: 'url', url: 'example.com' });
78
+ expect(r.success).toBe(false);
79
+ });
80
+ });
81
+ describe('note atom', () => {
82
+ it('accepts 1-512 chars', () => {
83
+ expect(EvidenceAtomSchema.parse({ kind: 'note', note: 'x' }).kind).toBe('note');
84
+ expect(EvidenceAtomSchema.parse({ kind: 'note', note: 'a'.repeat(512) }).kind).toBe('note');
85
+ });
86
+ it('rejects empty and >512 char notes', () => {
87
+ expect(EvidenceAtomSchema.safeParse({ kind: 'note', note: '' }).success).toBe(false);
88
+ expect(EvidenceAtomSchema.safeParse({ kind: 'note', note: 'a'.repeat(513) }).success).toBe(false);
89
+ });
90
+ });
91
+ describe('decision atom', () => {
92
+ it('accepts non-empty decision ID', () => {
93
+ const a = EvidenceAtomSchema.parse({ kind: 'decision', decisionId: 'D-arch-001' });
94
+ expect(a).toEqual({ kind: 'decision', decisionId: 'D-arch-001' });
95
+ });
96
+ it('rejects empty decision ID', () => {
97
+ const r = EvidenceAtomSchema.safeParse({ kind: 'decision', decisionId: '' });
98
+ expect(r.success).toBe(false);
99
+ });
100
+ });
101
+ describe('pr atom', () => {
102
+ it('accepts positive integer', () => {
103
+ const a = EvidenceAtomSchema.parse({ kind: 'pr', prNumber: 357 });
104
+ expect(a).toEqual({ kind: 'pr', prNumber: 357 });
105
+ });
106
+ it('rejects zero, negatives, and non-integers', () => {
107
+ expect(EvidenceAtomSchema.safeParse({ kind: 'pr', prNumber: 0 }).success).toBe(false);
108
+ expect(EvidenceAtomSchema.safeParse({ kind: 'pr', prNumber: -1 }).success).toBe(false);
109
+ expect(EvidenceAtomSchema.safeParse({ kind: 'pr', prNumber: 1.5 }).success).toBe(false);
110
+ });
111
+ });
112
+ describe('loc-drop atom', () => {
113
+ it('accepts non-negative integers', () => {
114
+ const a = EvidenceAtomSchema.parse({
115
+ kind: 'loc-drop',
116
+ fromLines: 1200,
117
+ toLines: 800,
118
+ });
119
+ expect(a.kind).toBe('loc-drop');
120
+ });
121
+ it('rejects negative line counts', () => {
122
+ const r = EvidenceAtomSchema.safeParse({
123
+ kind: 'loc-drop',
124
+ fromLines: -1,
125
+ toLines: 0,
126
+ });
127
+ expect(r.success).toBe(false);
128
+ });
129
+ });
130
+ describe('callsite-coverage atom', () => {
131
+ it('accepts non-empty symbol + path', () => {
132
+ const a = EvidenceAtomSchema.parse({
133
+ kind: 'callsite-coverage',
134
+ symbolName: 'myFn',
135
+ relativeSourcePath: 'packages/core/src/myFn.ts',
136
+ });
137
+ expect(a.kind).toBe('callsite-coverage');
138
+ });
139
+ it('rejects empty symbol or path', () => {
140
+ expect(EvidenceAtomSchema.safeParse({
141
+ kind: 'callsite-coverage',
142
+ symbolName: '',
143
+ relativeSourcePath: 'x',
144
+ }).success).toBe(false);
145
+ expect(EvidenceAtomSchema.safeParse({
146
+ kind: 'callsite-coverage',
147
+ symbolName: 'x',
148
+ relativeSourcePath: '',
149
+ }).success).toBe(false);
150
+ });
151
+ });
152
+ it('rejects unknown atom kind', () => {
153
+ const r = EvidenceAtomSchema.safeParse({ kind: 'mystery', payload: 'x' });
154
+ expect(r.success).toBe(false);
155
+ });
156
+ });
157
+ // ─── parseEvidenceString — string → atom[] ─────────────────────────────────
158
+ describe('parseEvidenceString (T10337)', () => {
159
+ it('parses a single commit atom', () => {
160
+ expect(parseEvidenceString('commit:abc1234')).toEqual([{ kind: 'commit', sha: 'abc1234' }]);
161
+ });
162
+ it('parses files with comma-separated paths', () => {
163
+ expect(parseEvidenceString('files:a.ts,b.ts,c.ts')).toEqual([
164
+ { kind: 'files', paths: ['a.ts', 'b.ts', 'c.ts'] },
165
+ ]);
166
+ });
167
+ it('parses test-run, tool, url, note atoms', () => {
168
+ expect(parseEvidenceString('test-run:/tmp/v.json')).toEqual([
169
+ { kind: 'test-run', path: '/tmp/v.json' },
170
+ ]);
171
+ expect(parseEvidenceString('tool:lint')).toEqual([{ kind: 'tool', tool: 'lint' }]);
172
+ expect(parseEvidenceString('url:https://example.com')).toEqual([
173
+ { kind: 'url', url: 'https://example.com' },
174
+ ]);
175
+ expect(parseEvidenceString('note:no network surface')).toEqual([
176
+ { kind: 'note', note: 'no network surface' },
177
+ ]);
178
+ });
179
+ it('parses decision and pr atoms', () => {
180
+ expect(parseEvidenceString('decision:D-arch-001')).toEqual([
181
+ { kind: 'decision', decisionId: 'D-arch-001' },
182
+ ]);
183
+ expect(parseEvidenceString('pr:357')).toEqual([{ kind: 'pr', prNumber: 357 }]);
184
+ });
185
+ it('parses loc-drop and callsite-coverage atoms', () => {
186
+ expect(parseEvidenceString('loc-drop:1200:800')).toEqual([
187
+ { kind: 'loc-drop', fromLines: 1200, toLines: 800 },
188
+ ]);
189
+ expect(parseEvidenceString('callsite-coverage:myFn:packages/core/src/myFn.ts')).toEqual([
190
+ {
191
+ kind: 'callsite-coverage',
192
+ symbolName: 'myFn',
193
+ relativeSourcePath: 'packages/core/src/myFn.ts',
194
+ },
195
+ ]);
196
+ });
197
+ it('parses multi-atom evidence strings with semicolons', () => {
198
+ const atoms = parseEvidenceString('commit:abc1234;files:src/a.ts,src/b.ts;tool:lint');
199
+ expect(atoms).toEqual([
200
+ { kind: 'commit', sha: 'abc1234' },
201
+ { kind: 'files', paths: ['src/a.ts', 'src/b.ts'] },
202
+ { kind: 'tool', tool: 'lint' },
203
+ ]);
204
+ });
205
+ it('tolerates whitespace around separators', () => {
206
+ expect(parseEvidenceString(' commit:abc1234 ; tool:test ')).toEqual([
207
+ { kind: 'commit', sha: 'abc1234' },
208
+ { kind: 'tool', tool: 'test' },
209
+ ]);
210
+ });
211
+ it('consumes state:MERGED modifier in-place (no separate atom)', () => {
212
+ expect(parseEvidenceString('pr:357;state:MERGED')).toEqual([{ kind: 'pr', prNumber: 357 }]);
213
+ });
214
+ it('rejects state:MERGED without preceding pr atom', () => {
215
+ expect(() => parseEvidenceString('state:MERGED')).toThrow(EvidenceParseError);
216
+ });
217
+ it('rejects state with non-MERGED value', () => {
218
+ expect(() => parseEvidenceString('pr:357;state:OPEN')).toThrow(EvidenceParseError);
219
+ });
220
+ it('rejects empty evidence string', () => {
221
+ expect(() => parseEvidenceString('')).toThrow(EvidenceParseError);
222
+ expect(() => parseEvidenceString(';;;')).toThrow(EvidenceParseError);
223
+ });
224
+ it('rejects malformed atoms', () => {
225
+ expect(() => parseEvidenceString('justakind')).toThrow(EvidenceParseError);
226
+ expect(() => parseEvidenceString(':payloadonly')).toThrow(EvidenceParseError);
227
+ expect(() => parseEvidenceString('kind:')).toThrow(EvidenceParseError);
228
+ });
229
+ it('rejects unknown kinds', () => {
230
+ expect(() => parseEvidenceString('mystery:foo')).toThrow(EvidenceParseError);
231
+ });
232
+ it('rejects malformed loc-drop', () => {
233
+ expect(() => parseEvidenceString('loc-drop:notanumber:0')).toThrow(EvidenceParseError);
234
+ expect(() => parseEvidenceString('loc-drop:1200')).toThrow(EvidenceParseError);
235
+ expect(() => parseEvidenceString('loc-drop:-1:0')).toThrow(EvidenceParseError);
236
+ });
237
+ it('rejects malformed pr', () => {
238
+ expect(() => parseEvidenceString('pr:notanumber')).toThrow(EvidenceParseError);
239
+ expect(() => parseEvidenceString('pr:0')).toThrow(EvidenceParseError);
240
+ expect(() => parseEvidenceString('pr:-5')).toThrow(EvidenceParseError);
241
+ });
242
+ it('rejects malformed callsite-coverage', () => {
243
+ expect(() => parseEvidenceString('callsite-coverage:fn')).toThrow(EvidenceParseError);
244
+ expect(() => parseEvidenceString('callsite-coverage::p.ts')).toThrow(EvidenceParseError);
245
+ expect(() => parseEvidenceString('callsite-coverage:fn:')).toThrow(EvidenceParseError);
246
+ });
247
+ it('round-trip: every parseEvidenceString output validates under EvidenceAtomSchema', () => {
248
+ const inputs = [
249
+ 'commit:abc1234',
250
+ 'files:a.ts,b.ts',
251
+ 'test-run:/tmp/x.json',
252
+ 'tool:lint',
253
+ 'url:https://example.com',
254
+ 'note:waiver text',
255
+ 'decision:D-arch-001',
256
+ 'pr:357',
257
+ 'loc-drop:1200:800',
258
+ 'callsite-coverage:fn:src/fn.ts',
259
+ ];
260
+ for (const raw of inputs) {
261
+ const atoms = parseEvidenceString(raw);
262
+ for (const atom of atoms) {
263
+ const r = EvidenceAtomSchema.safeParse(atom);
264
+ expect(r.success, `${raw} -> ${JSON.stringify(atom)}`).toBe(true);
265
+ }
266
+ }
267
+ });
268
+ });
269
+ // ─── GATE_EVIDENCE_REQUIREMENTS — gate-to-atom mapping ─────────────────────
270
+ describe('GATE_EVIDENCE_REQUIREMENTS (T10337)', () => {
271
+ it('covers every VerificationGate', () => {
272
+ const expected = [
273
+ 'implemented',
274
+ 'testsPassed',
275
+ 'qaPassed',
276
+ 'documented',
277
+ 'securityPassed',
278
+ 'cleanupDone',
279
+ 'nexusImpact',
280
+ ];
281
+ for (const g of expected) {
282
+ expect(GATE_EVIDENCE_REQUIREMENTS[g]).toBeDefined();
283
+ expect(GATE_EVIDENCE_REQUIREMENTS[g].oneOf.length).toBeGreaterThan(0);
284
+ }
285
+ });
286
+ it('implemented accepts the 5 canonical combinations', () => {
287
+ const a = [
288
+ { kind: 'commit', sha: 'abc1234' },
289
+ { kind: 'files', paths: ['x.ts'] },
290
+ ];
291
+ expect(validateEvidenceForGate('implemented', a).ok).toBe(true);
292
+ const b = [
293
+ { kind: 'commit', sha: 'abc1234' },
294
+ { kind: 'note', note: 'deleted x.ts' },
295
+ ];
296
+ expect(validateEvidenceForGate('implemented', b).ok).toBe(true);
297
+ const c = [
298
+ { kind: 'decision', decisionId: 'D-1' },
299
+ { kind: 'files', paths: ['research.md'] },
300
+ ];
301
+ expect(validateEvidenceForGate('implemented', c).ok).toBe(true);
302
+ const d = [
303
+ { kind: 'decision', decisionId: 'D-1' },
304
+ { kind: 'note', note: 'decision-only' },
305
+ ];
306
+ expect(validateEvidenceForGate('implemented', d).ok).toBe(true);
307
+ const e = [{ kind: 'pr', prNumber: 357 }];
308
+ expect(validateEvidenceForGate('implemented', e).ok).toBe(true);
309
+ });
310
+ it('implemented rejects insufficient sets with the legacy error format', () => {
311
+ const r = validateEvidenceForGate('implemented', [
312
+ { kind: 'commit', sha: 'abc1234' },
313
+ ]);
314
+ expect(r.ok).toBe(false);
315
+ if (!r.ok) {
316
+ expect(r.message).toMatch(/^Gate 'implemented' requires evidence: /);
317
+ expect(r.message).toContain('[commit AND files]');
318
+ expect(r.message).toContain('[pr]');
319
+ }
320
+ });
321
+ it('testsPassed accepts test-run, tool, pr — single-atom alternatives', () => {
322
+ expect(validateEvidenceForGate('testsPassed', [
323
+ { kind: 'test-run', path: '/tmp/v.json' },
324
+ ]).ok).toBe(true);
325
+ expect(validateEvidenceForGate('testsPassed', [
326
+ { kind: 'tool', tool: 'test' },
327
+ ]).ok).toBe(true);
328
+ expect(validateEvidenceForGate('testsPassed', [{ kind: 'pr', prNumber: 357 }])
329
+ .ok).toBe(true);
330
+ });
331
+ it('testsPassed rejects empty evidence', () => {
332
+ expect(validateEvidenceForGate('testsPassed', []).ok).toBe(false);
333
+ });
334
+ it('qaPassed accepts a single tool atom (behavior parity with legacy)', () => {
335
+ // Critical parity check: GATE_EVIDENCE_REQUIREMENTS.qaPassed.oneOf is
336
+ // [['tool'], ['pr']] — not [['tool', 'tool']]. The legacy runtime did NOT
337
+ // count distinct tool names, so one tool atom passes.
338
+ expect(validateEvidenceForGate('qaPassed', [{ kind: 'tool', tool: 'lint' }])
339
+ .ok).toBe(true);
340
+ });
341
+ it('qaPassed also accepts pr atom', () => {
342
+ expect(validateEvidenceForGate('qaPassed', [{ kind: 'pr', prNumber: 357 }])
343
+ .ok).toBe(true);
344
+ });
345
+ it('documented accepts files or url', () => {
346
+ expect(validateEvidenceForGate('documented', [
347
+ { kind: 'files', paths: ['docs/x.md'] },
348
+ ]).ok).toBe(true);
349
+ expect(validateEvidenceForGate('documented', [
350
+ { kind: 'url', url: 'https://docs.example.com' },
351
+ ]).ok).toBe(true);
352
+ });
353
+ it('securityPassed accepts tool or note waiver', () => {
354
+ expect(validateEvidenceForGate('securityPassed', [
355
+ { kind: 'tool', tool: 'security-scan' },
356
+ ]).ok).toBe(true);
357
+ expect(validateEvidenceForGate('securityPassed', [
358
+ { kind: 'note', note: 'no network surface' },
359
+ ]).ok).toBe(true);
360
+ });
361
+ it('cleanupDone accepts only note', () => {
362
+ expect(validateEvidenceForGate('cleanupDone', [
363
+ { kind: 'note', note: 'removed dead branches' },
364
+ ]).ok).toBe(true);
365
+ expect(validateEvidenceForGate('cleanupDone', [
366
+ { kind: 'tool', tool: 'test' },
367
+ ]).ok).toBe(false);
368
+ });
369
+ it('nexusImpact accepts tool or note waiver', () => {
370
+ expect(validateEvidenceForGate('nexusImpact', [
371
+ { kind: 'tool', tool: 'nexus-impact-full' },
372
+ ]).ok).toBe(true);
373
+ expect(validateEvidenceForGate('nexusImpact', [
374
+ { kind: 'note', note: 'nexus gate disabled' },
375
+ ]).ok).toBe(true);
376
+ });
377
+ });
378
+ // ─── formatGateRequirement — error message helper ──────────────────────────
379
+ describe('formatGateRequirement (T10337)', () => {
380
+ it('formats implemented combinations as legacy string', () => {
381
+ const s = formatGateRequirement('implemented');
382
+ expect(s).toContain('[commit AND files]');
383
+ expect(s).toContain('[commit AND note]');
384
+ expect(s).toContain('[decision AND files]');
385
+ expect(s).toContain('[decision AND note]');
386
+ expect(s).toContain('[pr]');
387
+ // Joiner between combinations is ' OR '.
388
+ expect(s.split(' OR ').length).toBe(5);
389
+ });
390
+ it('formats single-element combination without AND', () => {
391
+ expect(formatGateRequirement('cleanupDone')).toBe('[note]');
392
+ });
393
+ });
394
+ //# sourceMappingURL=evidence-atom-schema.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidence-atom-schema.test.js","sourceRoot":"","sources":["../../src/__tests__/evidence-atom-schema.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Tests for the ConfigManifest contract (T9876 / Saga T9855 / ADR-076).
3
+ *
4
+ * Covers:
5
+ * - Schema round-trip for each of the 4 built-in entries.
6
+ * - Merge-precedence invariant (project > global > defaults).
7
+ * - Metadata-scope isolation (NOT in the merge chain).
8
+ * - {@link DriftDetection} exhaustiveness via a `never` fallback switch.
9
+ *
10
+ * @task T9876
11
+ */
12
+ export {};
13
+ //# sourceMappingURL=manifest.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.test.d.ts","sourceRoot":"","sources":["../../../src/config/__tests__/manifest.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG"}