@zelari/core 1.49.0 → 2.0.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/dist/experimental.d.ts +17 -0
  2. package/dist/experimental.d.ts.map +1 -0
  3. package/dist/experimental.js +31 -0
  4. package/dist/experimental.js.map +1 -0
  5. package/dist/index.d.ts +5 -0
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +10 -0
  8. package/dist/index.js.map +1 -1
  9. package/dist/mission/index.d.ts +5 -0
  10. package/dist/mission/index.d.ts.map +1 -0
  11. package/dist/mission/index.js +5 -0
  12. package/dist/mission/index.js.map +1 -0
  13. package/dist/mission/missionState.d.ts +37 -0
  14. package/dist/mission/missionState.d.ts.map +1 -0
  15. package/dist/mission/missionState.js +61 -0
  16. package/dist/mission/missionState.js.map +1 -0
  17. package/dist/runtime/executionContext.d.ts +46 -0
  18. package/dist/runtime/executionContext.d.ts.map +1 -0
  19. package/dist/runtime/executionContext.js +63 -0
  20. package/dist/runtime/executionContext.js.map +1 -0
  21. package/dist/runtime/index.d.ts +10 -0
  22. package/dist/runtime/index.d.ts.map +1 -0
  23. package/dist/runtime/index.js +10 -0
  24. package/dist/runtime/index.js.map +1 -0
  25. package/dist/runtime/memoryProviders.d.ts +27 -0
  26. package/dist/runtime/memoryProviders.d.ts.map +1 -0
  27. package/dist/runtime/memoryProviders.js +64 -0
  28. package/dist/runtime/memoryProviders.js.map +1 -0
  29. package/dist/runtime/nodeProviders.d.ts +21 -0
  30. package/dist/runtime/nodeProviders.d.ts.map +1 -0
  31. package/dist/runtime/nodeProviders.js +138 -0
  32. package/dist/runtime/nodeProviders.js.map +1 -0
  33. package/dist/runtime/profiles.d.ts +44 -0
  34. package/dist/runtime/profiles.d.ts.map +1 -0
  35. package/dist/runtime/profiles.js +91 -0
  36. package/dist/runtime/profiles.js.map +1 -0
  37. package/dist/runtime/providers.d.ts +85 -0
  38. package/dist/runtime/providers.d.ts.map +1 -0
  39. package/dist/runtime/providers.js +58 -0
  40. package/dist/runtime/providers.js.map +1 -0
  41. package/dist/runtime/worktreeWorkspace.d.ts +38 -0
  42. package/dist/runtime/worktreeWorkspace.d.ts.map +1 -0
  43. package/dist/runtime/worktreeWorkspace.js +80 -0
  44. package/dist/runtime/worktreeWorkspace.js.map +1 -0
  45. package/dist/session/exportSession.d.ts +31 -0
  46. package/dist/session/exportSession.d.ts.map +1 -0
  47. package/dist/session/exportSession.js +37 -0
  48. package/dist/session/exportSession.js.map +1 -0
  49. package/dist/session/index.d.ts +15 -0
  50. package/dist/session/index.d.ts.map +1 -0
  51. package/dist/session/index.js +15 -0
  52. package/dist/session/index.js.map +1 -0
  53. package/dist/session/lineage.d.ts +38 -0
  54. package/dist/session/lineage.d.ts.map +1 -0
  55. package/dist/session/lineage.js +69 -0
  56. package/dist/session/lineage.js.map +1 -0
  57. package/dist/session/modelSurface.d.ts +43 -0
  58. package/dist/session/modelSurface.d.ts.map +1 -0
  59. package/dist/session/modelSurface.js +96 -0
  60. package/dist/session/modelSurface.js.map +1 -0
  61. package/dist/session/replay.d.ts +61 -0
  62. package/dist/session/replay.d.ts.map +1 -0
  63. package/dist/session/replay.js +137 -0
  64. package/dist/session/replay.js.map +1 -0
  65. package/dist/session/store.d.ts +60 -0
  66. package/dist/session/store.d.ts.map +1 -0
  67. package/dist/session/store.js +117 -0
  68. package/dist/session/store.js.map +1 -0
  69. package/dist/session/types.d.ts +85 -0
  70. package/dist/session/types.d.ts.map +1 -0
  71. package/dist/session/types.js +62 -0
  72. package/dist/session/types.js.map +1 -0
  73. package/dist/session/writer.d.ts +44 -0
  74. package/dist/session/writer.d.ts.map +1 -0
  75. package/dist/session/writer.js +114 -0
  76. package/dist/session/writer.js.map +1 -0
  77. package/dist/verification/completionPolicy.d.ts +33 -0
  78. package/dist/verification/completionPolicy.d.ts.map +1 -0
  79. package/dist/verification/completionPolicy.js +68 -0
  80. package/dist/verification/completionPolicy.js.map +1 -0
  81. package/dist/verification/criteriaPack.v1.d.ts +27 -0
  82. package/dist/verification/criteriaPack.v1.d.ts.map +1 -0
  83. package/dist/verification/criteriaPack.v1.js +58 -0
  84. package/dist/verification/criteriaPack.v1.js.map +1 -0
  85. package/dist/verification/engine.d.ts +38 -0
  86. package/dist/verification/engine.d.ts.map +1 -0
  87. package/dist/verification/engine.js +163 -0
  88. package/dist/verification/engine.js.map +1 -0
  89. package/dist/verification/index.d.ts +11 -0
  90. package/dist/verification/index.d.ts.map +1 -0
  91. package/dist/verification/index.js +11 -0
  92. package/dist/verification/index.js.map +1 -0
  93. package/dist/verification/metrics.d.ts +26 -0
  94. package/dist/verification/metrics.d.ts.map +1 -0
  95. package/dist/verification/metrics.js +29 -0
  96. package/dist/verification/metrics.js.map +1 -0
  97. package/dist/verification/types.d.ts +161 -0
  98. package/dist/verification/types.d.ts.map +1 -0
  99. package/dist/verification/types.js +92 -0
  100. package/dist/verification/types.js.map +1 -0
  101. package/dist/verification/verifier.d.ts +133 -0
  102. package/dist/verification/verifier.d.ts.map +1 -0
  103. package/dist/verification/verifier.js +215 -0
  104. package/dist/verification/verifier.js.map +1 -0
  105. package/package.json +17 -1
@@ -0,0 +1,58 @@
1
+ /**
2
+ * verification/criteriaPack.v1.ts — Zelari Coding Criteria Pack v1.
3
+ *
4
+ * Category ids follow the plan §3A.4 taxonomy:
5
+ * correctness.{specification, observable-output, error-signals}
6
+ * quality.{scope-discipline, regression-risk}
7
+ * evidence.verification-quality
8
+ *
9
+ * Commands are repo-overridable; passing `null` leaves the criterion without
10
+ * a deterministic check → honestly `unknown` (advisory), never `pass`.
11
+ */
12
+ export const ZELARI_CODING_PACK_ID = 'zelari-coding/v1';
13
+ export function codingCriteriaPack(options = {}) {
14
+ const timeoutMs = options.commandTimeoutMs ?? 600_000;
15
+ const command = (command) => command ? { kind: 'command', command, timeoutMs } : undefined;
16
+ const criteria = [
17
+ {
18
+ id: 'correctness.error-signals',
19
+ text: 'Static checks (typecheck) pass with no new errors.',
20
+ source: 'criteria-pack',
21
+ required: true,
22
+ check: command(options.typecheckCommand ?? 'npm run typecheck'),
23
+ },
24
+ {
25
+ id: 'correctness.specification',
26
+ text: 'The test suite passes — behavior matches the specification.',
27
+ source: 'criteria-pack',
28
+ required: true,
29
+ check: command(options.testCommand ?? 'npm run test'),
30
+ },
31
+ {
32
+ id: 'correctness.observable-output',
33
+ text: 'The project builds successfully (observable output artifact).',
34
+ source: 'criteria-pack',
35
+ required: true,
36
+ check: command(options.buildCommand ?? 'npm run build'),
37
+ },
38
+ {
39
+ id: 'quality.scope-discipline',
40
+ text: 'No unrelated files changed (minimal diff discipline).',
41
+ source: 'criteria-pack',
42
+ required: false,
43
+ check: command(options.scopeCommand),
44
+ },
45
+ {
46
+ id: 'evidence.verification-quality',
47
+ text: 'Verification evidence is traceable to the original tool output.',
48
+ source: 'criteria-pack',
49
+ required: false,
50
+ check: {
51
+ kind: 'none',
52
+ reason: 'advisory: audited via EvidenceRef digests on the session spine',
53
+ },
54
+ },
55
+ ];
56
+ return { id: ZELARI_CODING_PACK_ID, criteria };
57
+ }
58
+ //# sourceMappingURL=criteriaPack.v1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"criteriaPack.v1.js","sourceRoot":"","sources":["../../src/verification/criteriaPack.v1.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,MAAM,CAAC,MAAM,qBAAqB,GAAG,kBAAkB,CAAC;AAgBxD,MAAM,UAAU,kBAAkB,CAAC,UAA6B,EAAE;IAChE,MAAM,SAAS,GAAG,OAAO,CAAC,gBAAgB,IAAI,OAAO,CAAC;IACtD,MAAM,OAAO,GAAG,CAAC,OAAkC,EAAsB,EAAE,CACzE,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAEhE,MAAM,QAAQ,GAAgB;QAC5B;YACE,EAAE,EAAE,2BAA2B;YAC/B,IAAI,EAAE,oDAAoD;YAC1D,MAAM,EAAE,eAAe;YACvB,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,gBAAgB,IAAI,mBAAmB,CAAC;SAChE;QACD;YACE,EAAE,EAAE,2BAA2B;YAC/B,IAAI,EAAE,6DAA6D;YACnE,MAAM,EAAE,eAAe;YACvB,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,WAAW,IAAI,cAAc,CAAC;SACtD;QACD;YACE,EAAE,EAAE,+BAA+B;YACnC,IAAI,EAAE,+DAA+D;YACrE,MAAM,EAAE,eAAe;YACvB,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,YAAY,IAAI,eAAe,CAAC;SACxD;QACD;YACE,EAAE,EAAE,0BAA0B;YAC9B,IAAI,EAAE,uDAAuD;YAC7D,MAAM,EAAE,eAAe;YACvB,QAAQ,EAAE,KAAK;YACf,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC;SACrC;QACD;YACE,EAAE,EAAE,+BAA+B;YACnC,IAAI,EAAE,iEAAiE;YACvE,MAAM,EAAE,eAAe;YACvB,QAAQ,EAAE,KAAK;YACf,KAAK,EAAE;gBACL,IAAI,EAAE,MAAM;gBACZ,MAAM,EAAE,gEAAgE;aACzE;SACF;KACF,CAAC;IAEF,OAAO,EAAE,EAAE,EAAE,qBAAqB,EAAE,QAAQ,EAAE,CAAC;AACjD,CAAC"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * verification/engine.ts — deterministic VerificationEngine (ADR-0023).
3
+ *
4
+ * Zero LLM: criteria with a deterministic check are evaluated via the
5
+ * injected Shell/Fs providers; everything else (no check, provider missing,
6
+ * timeout) is honestly `unknown`. Every result carries EvidenceRef with a
7
+ * sha256 digest of the captured output, and a `verification.run` event is
8
+ * appended to the session spine when an emitter is configured.
9
+ */
10
+ import type { FsProvider, ShellProvider } from '../runtime/providers.js';
11
+ import type { SessionEventInput } from '../session/types.js';
12
+ import type { Criterion, VerificationResult } from './types.js';
13
+ export interface VerificationServices {
14
+ shell?: ShellProvider;
15
+ fs?: FsProvider;
16
+ }
17
+ export interface VerificationEngineOptions {
18
+ /** Session spine emitter (ExecutionContext.appendSessionEvent). */
19
+ emit?: (input: SessionEventInput) => Promise<unknown>;
20
+ now?: () => number;
21
+ sha256?: (input: string) => string;
22
+ }
23
+ export declare class VerificationEngine {
24
+ private readonly services;
25
+ private readonly options;
26
+ constructor(services?: VerificationServices, options?: VerificationEngineOptions);
27
+ /** Evaluate criteria deterministically; optionally emit the spine event. */
28
+ evaluate(criteria: readonly Criterion[], context?: {
29
+ packId?: string;
30
+ }): Promise<VerificationResult[]>;
31
+ private evaluateOne;
32
+ private evalCommand;
33
+ private fsEvidence;
34
+ private evalFileExists;
35
+ private evalFileAbsent;
36
+ private evalFileContains;
37
+ }
38
+ //# sourceMappingURL=engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/verification/engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAe,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAE7E,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,EAAE,CAAC,EAAE,UAAU,CAAC;CACjB;AAED,MAAM,WAAW,yBAAyB;IACxC,mEAAmE;IACnE,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACtD,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CACpC;AAUD,qBAAa,kBAAkB;IAE3B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBADP,QAAQ,GAAE,oBAAyB,EACnC,OAAO,GAAE,yBAA8B;IAG1D,4EAA4E;IACtE,QAAQ,CAAC,QAAQ,EAAE,SAAS,SAAS,EAAE,EAAE,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;YAuBlG,WAAW;YAqCX,WAAW;IAuCzB,OAAO,CAAC,UAAU;YAIJ,cAAc;YAad,cAAc;YAYd,gBAAgB;CAwB/B"}
@@ -0,0 +1,163 @@
1
+ /**
2
+ * verification/engine.ts — deterministic VerificationEngine (ADR-0023).
3
+ *
4
+ * Zero LLM: criteria with a deterministic check are evaluated via the
5
+ * injected Shell/Fs providers; everything else (no check, provider missing,
6
+ * timeout) is honestly `unknown`. Every result carries EvidenceRef with a
7
+ * sha256 digest of the captured output, and a `verification.run` event is
8
+ * appended to the session spine when an emitter is configured.
9
+ */
10
+ import { createHash } from 'node:crypto';
11
+ function defaultSha256(input) {
12
+ return createHash('sha256').update(input).digest('hex');
13
+ }
14
+ function tail(text, max = 400) {
15
+ return text.length > max ? `…${text.slice(text.length - max)}` : text;
16
+ }
17
+ export class VerificationEngine {
18
+ services;
19
+ options;
20
+ constructor(services = {}, options = {}) {
21
+ this.services = services;
22
+ this.options = options;
23
+ }
24
+ /** Evaluate criteria deterministically; optionally emit the spine event. */
25
+ async evaluate(criteria, context = {}) {
26
+ const results = [];
27
+ for (const criterion of criteria) {
28
+ results.push(await this.evaluateOne(criterion));
29
+ }
30
+ if (this.options.emit) {
31
+ await this.options.emit({
32
+ kind: 'verification.run',
33
+ actor: { type: 'system', role: 'verification' },
34
+ data: {
35
+ source: 'deterministic-engine',
36
+ packId: context.packId,
37
+ results: results.map((r) => ({
38
+ criterionId: r.criterionId,
39
+ status: r.status,
40
+ evidence: r.evidence.map((e) => ({ tier: e.tier, ref: e.ref, digest: e.digest })),
41
+ })),
42
+ },
43
+ });
44
+ }
45
+ return results;
46
+ }
47
+ async evaluateOne(criterion) {
48
+ const started = this.options.now?.() ?? Date.now();
49
+ const base = {
50
+ criterionId: criterion.id,
51
+ source: 'deterministic-engine',
52
+ evaluatedAt: started,
53
+ };
54
+ const done = (patch) => ({
55
+ ...base,
56
+ ...patch,
57
+ durationMs: Math.max(0, (this.options.now?.() ?? Date.now()) - started),
58
+ });
59
+ const check = criterion.check;
60
+ if (!check || check.kind === 'none') {
61
+ return done({
62
+ status: 'unknown',
63
+ evidence: [],
64
+ detail: check?.kind === 'none' && check.reason
65
+ ? check.reason
66
+ : 'no deterministic check bound — unknown ≠ pass',
67
+ });
68
+ }
69
+ switch (check.kind) {
70
+ case 'command':
71
+ return await this.evalCommand(check, done);
72
+ case 'file-exists':
73
+ return await this.evalFileExists(check, done);
74
+ case 'file-contains':
75
+ return await this.evalFileContains(check, done);
76
+ case 'file-absent':
77
+ return await this.evalFileAbsent(check, done);
78
+ }
79
+ }
80
+ async evalCommand(check, done) {
81
+ const sha256 = this.options.sha256 ?? defaultSha256;
82
+ const shell = this.services.shell;
83
+ if (!shell) {
84
+ return done({ status: 'unknown', evidence: [], detail: 'shell provider unavailable' });
85
+ }
86
+ const result = await shell.exec(check.command, { timeoutMs: check.timeoutMs });
87
+ const evidence = [
88
+ {
89
+ tier: 'command-output',
90
+ ref: `${check.command} → exit ${result.exitCode ?? 'signal'}`,
91
+ capturedAt: Date.now(),
92
+ digest: sha256(result.stdout),
93
+ },
94
+ ];
95
+ if (result.timedOut) {
96
+ return done({ status: 'unknown', evidence, detail: `command timed out (${check.timeoutMs ?? 'default'}ms)` });
97
+ }
98
+ const expectExit = check.expectExit ?? 0;
99
+ if (result.exitCode !== expectExit) {
100
+ return done({
101
+ status: 'fail',
102
+ evidence,
103
+ detail: `exit ${result.exitCode} (expected ${expectExit}) — stderr: ${tail(result.stderr)}`,
104
+ });
105
+ }
106
+ if (check.expectStdoutIncludes && !result.stdout.includes(check.expectStdoutIncludes)) {
107
+ return done({
108
+ status: 'fail',
109
+ evidence,
110
+ detail: `stdout missing "${check.expectStdoutIncludes}" — got: ${tail(result.stdout)}`,
111
+ });
112
+ }
113
+ return done({ status: 'pass', evidence });
114
+ }
115
+ fsEvidence(path, content, sha256) {
116
+ return { tier: 'fs-observation', ref: path, capturedAt: Date.now(), digest: sha256(content) };
117
+ }
118
+ async evalFileExists(check, done) {
119
+ const sha256 = this.options.sha256 ?? defaultSha256;
120
+ const fs = this.services.fs;
121
+ if (!fs)
122
+ return done({ status: 'unknown', evidence: [], detail: 'fs provider unavailable' });
123
+ const exists = await fs.exists(check.path);
124
+ if (!exists)
125
+ return done({ status: 'fail', evidence: [], detail: `file not found: ${check.path}` });
126
+ const content = await fs.readFile(check.path).catch(() => '');
127
+ return done({ status: 'pass', evidence: [this.fsEvidence(check.path, content, sha256)] });
128
+ }
129
+ async evalFileAbsent(check, done) {
130
+ const fs = this.services.fs;
131
+ if (!fs)
132
+ return done({ status: 'unknown', evidence: [], detail: 'fs provider unavailable' });
133
+ const exists = await fs.exists(check.path);
134
+ return exists
135
+ ? done({ status: 'fail', evidence: [], detail: `file still present: ${check.path}` })
136
+ : done({ status: 'pass', evidence: [{ tier: 'fs-observation', ref: check.path, capturedAt: Date.now() }] });
137
+ }
138
+ async evalFileContains(check, done) {
139
+ const sha256 = this.options.sha256 ?? defaultSha256;
140
+ const fs = this.services.fs;
141
+ if (!fs)
142
+ return done({ status: 'unknown', evidence: [], detail: 'fs provider unavailable' });
143
+ let content;
144
+ try {
145
+ content = await fs.readFile(check.path);
146
+ }
147
+ catch {
148
+ return done({ status: 'fail', evidence: [], detail: `file not readable: ${check.path}` });
149
+ }
150
+ const evidence = [this.fsEvidence(check.path, content, sha256)];
151
+ let hit;
152
+ try {
153
+ hit = new RegExp(check.pattern, 'm').test(content);
154
+ }
155
+ catch {
156
+ hit = content.includes(check.pattern);
157
+ }
158
+ return hit
159
+ ? done({ status: 'pass', evidence })
160
+ : done({ status: 'fail', evidence, detail: `pattern not found in ${check.path}: ${tail(check.pattern)}` });
161
+ }
162
+ }
163
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/verification/engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @zelari/core/verification — deterministic evidence contract + optional
3
+ * LLM VerifierService (ADR-0023).
4
+ */
5
+ export * from './types.js';
6
+ export * from './engine.js';
7
+ export * from './completionPolicy.js';
8
+ export * from './criteriaPack.v1.js';
9
+ export * from './metrics.js';
10
+ export * from './verifier.js';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/verification/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @zelari/core/verification — deterministic evidence contract + optional
3
+ * LLM VerifierService (ADR-0023).
4
+ */
5
+ export * from './types.js';
6
+ export * from './engine.js';
7
+ export * from './completionPolicy.js';
8
+ export * from './criteriaPack.v1.js';
9
+ export * from './metrics.js';
10
+ export * from './verifier.js';
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/verification/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * verification/metrics.ts — false-done and verification-cost metrics (plan §23).
3
+ *
4
+ * North star: average cost per verified solved task. These helpers feed the
5
+ * harness-delta benchmark reports (minimal vs kraken vs +verification).
6
+ */
7
+ export interface TaskOutcomeSample {
8
+ taskId: string;
9
+ /** The agent claimed the task done. */
10
+ claimedDone: boolean;
11
+ /** Deterministic verification verdict (undefined = not verified). */
12
+ verified?: boolean;
13
+ }
14
+ export interface FalseDoneStats {
15
+ claimed: number;
16
+ falseDone: number;
17
+ /** falseDone / claimed (0 when nothing was claimed). */
18
+ rate: number;
19
+ }
20
+ /** Share of claimed-done tasks that did NOT survive deterministic verification. */
21
+ export declare function computeFalseDoneRate(samples: readonly TaskOutcomeSample[]): FalseDoneStats;
22
+ /** Verified solve rate over all tasks (verified / total). */
23
+ export declare function verifiedSolveRate(samples: readonly TaskOutcomeSample[]): number;
24
+ /** Verification cost ratio; null when total time is unknown/zero. */
25
+ export declare function verificationCostRatio(verificationMs: number, totalMs: number): number | null;
26
+ //# sourceMappingURL=metrics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/verification/metrics.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,WAAW,EAAE,OAAO,CAAC;IACrB,qEAAqE;IACrE,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,wDAAwD;IACxD,IAAI,EAAE,MAAM,CAAC;CACd;AAED,mFAAmF;AACnF,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,SAAS,iBAAiB,EAAE,GAAG,cAAc,CAQ1F;AAED,6DAA6D;AAC7D,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,SAAS,iBAAiB,EAAE,GAAG,MAAM,CAG/E;AAED,qEAAqE;AACrE,wBAAgB,qBAAqB,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG5F"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * verification/metrics.ts — false-done and verification-cost metrics (plan §23).
3
+ *
4
+ * North star: average cost per verified solved task. These helpers feed the
5
+ * harness-delta benchmark reports (minimal vs kraken vs +verification).
6
+ */
7
+ /** Share of claimed-done tasks that did NOT survive deterministic verification. */
8
+ export function computeFalseDoneRate(samples) {
9
+ const claimed = samples.filter((s) => s.claimedDone);
10
+ const falseDone = claimed.filter((s) => s.verified !== true);
11
+ return {
12
+ claimed: claimed.length,
13
+ falseDone: falseDone.length,
14
+ rate: claimed.length === 0 ? 0 : falseDone.length / claimed.length,
15
+ };
16
+ }
17
+ /** Verified solve rate over all tasks (verified / total). */
18
+ export function verifiedSolveRate(samples) {
19
+ if (samples.length === 0)
20
+ return 0;
21
+ return samples.filter((s) => s.verified === true).length / samples.length;
22
+ }
23
+ /** Verification cost ratio; null when total time is unknown/zero. */
24
+ export function verificationCostRatio(verificationMs, totalMs) {
25
+ if (totalMs <= 0)
26
+ return null;
27
+ return verificationMs / totalMs;
28
+ }
29
+ //# sourceMappingURL=metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/verification/metrics.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAiBH,mFAAmF;AACnF,MAAM,UAAU,oBAAoB,CAAC,OAAqC;IACxE,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IACrD,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC;IAC7D,OAAO;QACL,OAAO,EAAE,OAAO,CAAC,MAAM;QACvB,SAAS,EAAE,SAAS,CAAC,MAAM;QAC3B,IAAI,EAAE,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM;KACnE,CAAC;AACJ,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,iBAAiB,CAAC,OAAqC;IACrE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACnC,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;AAC5E,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,qBAAqB,CAAC,cAAsB,EAAE,OAAe;IAC3E,IAAI,OAAO,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9B,OAAO,cAAc,GAAG,OAAO,CAAC;AAClC,CAAC"}
@@ -0,0 +1,161 @@
1
+ /**
2
+ * verification/types.ts — the evidence contract (ADR-0023).
3
+ *
4
+ * Criterion → VerificationResult → EvidenceRef → session event → original
5
+ * tool output. `unknown ≠ pass` everywhere: a criterion that cannot be
6
+ * evaluated deterministically is `unknown`, never `pass`.
7
+ */
8
+ import { z } from 'zod';
9
+ export declare const CriterionSourceSchema: z.ZodEnum<{
10
+ plan: "plan";
11
+ task: "task";
12
+ mission: "mission";
13
+ "kraken-selection": "kraken-selection";
14
+ "criteria-pack": "criteria-pack";
15
+ }>;
16
+ export type CriterionSource = z.infer<typeof CriterionSourceSchema>;
17
+ export declare const CommandCheckSchema: z.ZodObject<{
18
+ kind: z.ZodLiteral<"command">;
19
+ command: z.ZodString;
20
+ expectExit: z.ZodOptional<z.ZodNumber>;
21
+ expectStdoutIncludes: z.ZodOptional<z.ZodString>;
22
+ timeoutMs: z.ZodOptional<z.ZodNumber>;
23
+ }, z.core.$strip>;
24
+ export declare const FileExistsCheckSchema: z.ZodObject<{
25
+ kind: z.ZodLiteral<"file-exists">;
26
+ path: z.ZodString;
27
+ }, z.core.$strip>;
28
+ export declare const FileContainsCheckSchema: z.ZodObject<{
29
+ kind: z.ZodLiteral<"file-contains">;
30
+ path: z.ZodString;
31
+ pattern: z.ZodString;
32
+ }, z.core.$strip>;
33
+ export declare const FileAbsentCheckSchema: z.ZodObject<{
34
+ kind: z.ZodLiteral<"file-absent">;
35
+ path: z.ZodString;
36
+ }, z.core.$strip>;
37
+ export declare const NoneCheckSchema: z.ZodObject<{
38
+ kind: z.ZodLiteral<"none">;
39
+ reason: z.ZodOptional<z.ZodString>;
40
+ }, z.core.$strip>;
41
+ export declare const DeterministicCheckSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
42
+ kind: z.ZodLiteral<"command">;
43
+ command: z.ZodString;
44
+ expectExit: z.ZodOptional<z.ZodNumber>;
45
+ expectStdoutIncludes: z.ZodOptional<z.ZodString>;
46
+ timeoutMs: z.ZodOptional<z.ZodNumber>;
47
+ }, z.core.$strip>, z.ZodObject<{
48
+ kind: z.ZodLiteral<"file-exists">;
49
+ path: z.ZodString;
50
+ }, z.core.$strip>, z.ZodObject<{
51
+ kind: z.ZodLiteral<"file-contains">;
52
+ path: z.ZodString;
53
+ pattern: z.ZodString;
54
+ }, z.core.$strip>, z.ZodObject<{
55
+ kind: z.ZodLiteral<"file-absent">;
56
+ path: z.ZodString;
57
+ }, z.core.$strip>, z.ZodObject<{
58
+ kind: z.ZodLiteral<"none">;
59
+ reason: z.ZodOptional<z.ZodString>;
60
+ }, z.core.$strip>], "kind">;
61
+ export type DeterministicCheck = z.infer<typeof DeterministicCheckSchema>;
62
+ export declare const CriterionSchema: z.ZodObject<{
63
+ id: z.ZodString;
64
+ text: z.ZodString;
65
+ source: z.ZodEnum<{
66
+ plan: "plan";
67
+ task: "task";
68
+ mission: "mission";
69
+ "kraken-selection": "kraken-selection";
70
+ "criteria-pack": "criteria-pack";
71
+ }>;
72
+ required: z.ZodBoolean;
73
+ check: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
74
+ kind: z.ZodLiteral<"command">;
75
+ command: z.ZodString;
76
+ expectExit: z.ZodOptional<z.ZodNumber>;
77
+ expectStdoutIncludes: z.ZodOptional<z.ZodString>;
78
+ timeoutMs: z.ZodOptional<z.ZodNumber>;
79
+ }, z.core.$strip>, z.ZodObject<{
80
+ kind: z.ZodLiteral<"file-exists">;
81
+ path: z.ZodString;
82
+ }, z.core.$strip>, z.ZodObject<{
83
+ kind: z.ZodLiteral<"file-contains">;
84
+ path: z.ZodString;
85
+ pattern: z.ZodString;
86
+ }, z.core.$strip>, z.ZodObject<{
87
+ kind: z.ZodLiteral<"file-absent">;
88
+ path: z.ZodString;
89
+ }, z.core.$strip>, z.ZodObject<{
90
+ kind: z.ZodLiteral<"none">;
91
+ reason: z.ZodOptional<z.ZodString>;
92
+ }, z.core.$strip>], "kind">>;
93
+ }, z.core.$strip>;
94
+ export type Criterion = z.infer<typeof CriterionSchema>;
95
+ export declare const EvidenceTierSchema: z.ZodEnum<{
96
+ "tool-output": "tool-output";
97
+ "command-output": "command-output";
98
+ "fs-observation": "fs-observation";
99
+ "verifier-llm": "verifier-llm";
100
+ human: "human";
101
+ }>;
102
+ export type EvidenceRefTier = z.infer<typeof EvidenceTierSchema>;
103
+ export declare const EvidenceRefSchema: z.ZodObject<{
104
+ seq: z.ZodOptional<z.ZodNumber>;
105
+ tier: z.ZodEnum<{
106
+ "tool-output": "tool-output";
107
+ "command-output": "command-output";
108
+ "fs-observation": "fs-observation";
109
+ "verifier-llm": "verifier-llm";
110
+ human: "human";
111
+ }>;
112
+ ref: z.ZodString;
113
+ capturedAt: z.ZodNumber;
114
+ digest: z.ZodOptional<z.ZodString>;
115
+ }, z.core.$strip>;
116
+ export type EvidenceRef = z.infer<typeof EvidenceRefSchema>;
117
+ export declare const VerificationStatusSchema: z.ZodEnum<{
118
+ unknown: "unknown";
119
+ pass: "pass";
120
+ fail: "fail";
121
+ }>;
122
+ export type VerificationStatus = z.infer<typeof VerificationStatusSchema>;
123
+ export declare const VerificationSourceSchema: z.ZodEnum<{
124
+ human: "human";
125
+ "deterministic-engine": "deterministic-engine";
126
+ "verify-agent": "verify-agent";
127
+ "verifier-model": "verifier-model";
128
+ }>;
129
+ export type VerificationSource = z.infer<typeof VerificationSourceSchema>;
130
+ export declare const VerificationResultSchema: z.ZodObject<{
131
+ criterionId: z.ZodString;
132
+ status: z.ZodEnum<{
133
+ unknown: "unknown";
134
+ pass: "pass";
135
+ fail: "fail";
136
+ }>;
137
+ source: z.ZodEnum<{
138
+ human: "human";
139
+ "deterministic-engine": "deterministic-engine";
140
+ "verify-agent": "verify-agent";
141
+ "verifier-model": "verifier-model";
142
+ }>;
143
+ evidence: z.ZodArray<z.ZodObject<{
144
+ seq: z.ZodOptional<z.ZodNumber>;
145
+ tier: z.ZodEnum<{
146
+ "tool-output": "tool-output";
147
+ "command-output": "command-output";
148
+ "fs-observation": "fs-observation";
149
+ "verifier-llm": "verifier-llm";
150
+ human: "human";
151
+ }>;
152
+ ref: z.ZodString;
153
+ capturedAt: z.ZodNumber;
154
+ digest: z.ZodOptional<z.ZodString>;
155
+ }, z.core.$strip>>;
156
+ evaluatedAt: z.ZodNumber;
157
+ durationMs: z.ZodNumber;
158
+ detail: z.ZodOptional<z.ZodString>;
159
+ }, z.core.$strip>;
160
+ export type VerificationResult = z.infer<typeof VerificationResultSchema>;
161
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/verification/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,qBAAqB;;;;;;EAMhC,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,eAAO,MAAM,kBAAkB;;;;;;iBAQ7B,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;iBAGhC,CAAC;AAEH,eAAO,MAAM,uBAAuB;;;;iBAKlC,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;iBAGhC,CAAC;AAEH,eAAO,MAAM,eAAe;;;iBAG1B,CAAC;AAEH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;2BAMnC,CAAC;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAQ1B,CAAC;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAExD,eAAO,MAAM,kBAAkB;;;;;;EAM7B,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAEjE,eAAO,MAAM,iBAAiB;;;;;;;;;;;;iBAS5B,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,eAAO,MAAM,wBAAwB;;;;EAAsC,CAAC;AAC5E,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E,eAAO,MAAM,wBAAwB;;;;;EAKnC,CAAC;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAQnC,CAAC;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * verification/types.ts — the evidence contract (ADR-0023).
3
+ *
4
+ * Criterion → VerificationResult → EvidenceRef → session event → original
5
+ * tool output. `unknown ≠ pass` everywhere: a criterion that cannot be
6
+ * evaluated deterministically is `unknown`, never `pass`.
7
+ */
8
+ import { z } from 'zod';
9
+ export const CriterionSourceSchema = z.enum([
10
+ 'task',
11
+ 'plan',
12
+ 'kraken-selection',
13
+ 'mission',
14
+ 'criteria-pack',
15
+ ]);
16
+ export const CommandCheckSchema = z.object({
17
+ kind: z.literal('command'),
18
+ command: z.string().min(1),
19
+ /** Expected exit code (default 0). */
20
+ expectExit: z.number().int().optional(),
21
+ /** Required stdout substring. */
22
+ expectStdoutIncludes: z.string().optional(),
23
+ timeoutMs: z.number().int().positive().optional(),
24
+ });
25
+ export const FileExistsCheckSchema = z.object({
26
+ kind: z.literal('file-exists'),
27
+ path: z.string().min(1),
28
+ });
29
+ export const FileContainsCheckSchema = z.object({
30
+ kind: z.literal('file-contains'),
31
+ path: z.string().min(1),
32
+ /** Substring or valid regex source. */
33
+ pattern: z.string().min(1),
34
+ });
35
+ export const FileAbsentCheckSchema = z.object({
36
+ kind: z.literal('file-absent'),
37
+ path: z.string().min(1),
38
+ });
39
+ export const NoneCheckSchema = z.object({
40
+ kind: z.literal('none'),
41
+ reason: z.string().optional(),
42
+ });
43
+ export const DeterministicCheckSchema = z.discriminatedUnion('kind', [
44
+ CommandCheckSchema,
45
+ FileExistsCheckSchema,
46
+ FileContainsCheckSchema,
47
+ FileAbsentCheckSchema,
48
+ NoneCheckSchema,
49
+ ]);
50
+ export const CriterionSchema = z.object({
51
+ id: z.string().min(1),
52
+ /** Human-readable statement of what "done" means for this criterion. */
53
+ text: z.string().min(1),
54
+ source: CriterionSourceSchema,
55
+ /** Required criteria gate completion; optional ones are advisory. */
56
+ required: z.boolean(),
57
+ check: DeterministicCheckSchema.optional(),
58
+ });
59
+ export const EvidenceTierSchema = z.enum([
60
+ 'tool-output',
61
+ 'command-output',
62
+ 'fs-observation',
63
+ 'verifier-llm',
64
+ 'human',
65
+ ]);
66
+ export const EvidenceRefSchema = z.object({
67
+ /** Seq of the originating session event, when the evidence is logged. */
68
+ seq: z.number().int().positive().optional(),
69
+ tier: EvidenceTierSchema,
70
+ /** Human-readable pointer: command line, file path, tool call id… */
71
+ ref: z.string().min(1),
72
+ capturedAt: z.number().int().nonnegative(),
73
+ /** sha256 of the captured output (audit chain). */
74
+ digest: z.string().optional(),
75
+ });
76
+ export const VerificationStatusSchema = z.enum(['pass', 'fail', 'unknown']);
77
+ export const VerificationSourceSchema = z.enum([
78
+ 'deterministic-engine',
79
+ 'verify-agent',
80
+ 'verifier-model',
81
+ 'human',
82
+ ]);
83
+ export const VerificationResultSchema = z.object({
84
+ criterionId: z.string().min(1),
85
+ status: VerificationStatusSchema,
86
+ source: VerificationSourceSchema,
87
+ evidence: z.array(EvidenceRefSchema),
88
+ evaluatedAt: z.number().int().nonnegative(),
89
+ durationMs: z.number().int().nonnegative(),
90
+ detail: z.string().optional(),
91
+ });
92
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/verification/types.ts"],"names":[],"mappings":"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"}