@cavelang/scenario 0.29.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/Authors.md ADDED
@@ -0,0 +1,5 @@
1
+ # Authors
2
+
3
+ By adding their name to this file, all listed authors confirm they have copyright over their contributions to this project and are waiving these rights, placing their work in the public domain in accordance with the CC0 1.0 Universal Public Domain Dedication.
4
+
5
+ - Mirek Rusin (Switzerland)
package/License.md ADDED
@@ -0,0 +1,6 @@
1
+ # CC0 1.0 Universal (CC0 1.0) Public Domain Dedication
2
+
3
+ To the extent possible under law, the authors listed in [Authors.md](./Authors.md) have waived all copyright and related or neighboring rights to this software and associated documentation files (the "Software").
4
+
5
+ For more information, please see:
6
+ https://creativecommons.org/publicdomain/zero/1.0/
package/README.md ADDED
@@ -0,0 +1,146 @@
1
+ # `@cavelang/scenario`
2
+
3
+ Typed, replayable inputs for decision evaluators and formal solver models.
4
+ The package binds ordinary CAVE-Q patterns against an explicit transaction-
5
+ and valid-time snapshot, then overlays hypothetical CAVE claims inside a
6
+ rolled-back savepoint. The returned record is plain immutable data; no
7
+ database transaction remains open while an evaluator or Wasm solver runs.
8
+
9
+ ```ts
10
+ import { bind, explanationContext, Model } from '@cavelang/scenario'
11
+
12
+ const definition: Model.Definition = {
13
+ id: 'architecture-choice',
14
+ modelDigest: `sha256:${'0'.repeat(64)}`, // use the real model digest
15
+ snapshot: {
16
+ aliases: 'exact',
17
+ resolution: 'winner',
18
+ minimumConfidence: 0.5
19
+ },
20
+ overlay: 'system HAS team-size: 12 people',
21
+ bindings: [{
22
+ id: 'team-size',
23
+ query: 'system HAS team-size: ?n',
24
+ select: 'n',
25
+ expected: { kind: 'integer', unit: 'people' },
26
+ cardinality: 'one',
27
+ scenarioOverride: true,
28
+ policies: {
29
+ missing: 'reject',
30
+ contested: 'reject',
31
+ retracted: 'exclude',
32
+ unresolved: 'reject'
33
+ }
34
+ }]
35
+ }
36
+
37
+ const inputs = bind(store, definition)
38
+ // inputs.values['team-size'] is exact integer 12; the store still says 8.
39
+ ```
40
+
41
+ ## Contracts
42
+
43
+ - `asOf`, `at`, alias handling, resolution, and minimum confidence are frozen
44
+ into every input record. Omitting `asOf` records the exact current head.
45
+ - Cardinality and missing/contested/retracted/unresolved behavior are explicit.
46
+ `many` additionally requires `all`, `min`, `max`, or `sum`; there is no
47
+ implicit first-row policy.
48
+ - Authored decimals and multiplier spellings become exact rationals without a
49
+ JavaScript `number` round trip. Unit changes require a declared exact
50
+ conversion. Approximation, uncertainty, sigma level, and confidence remain
51
+ separate fields and never become solver weights automatically.
52
+ - Durable evidence uses exact CAVE row IDs. Rolled-back assumptions use stable
53
+ `scenario:<scenario-id>:<overlay-digest>#<claim>` IDs, so replay identity
54
+ does not depend on transient SQLite row IDs.
55
+ - Overlay patterns are currently non-transitive and match hypothetical claims
56
+ by their authored entity names. This prevents current alias state from
57
+ leaking into a historical snapshot; transitive overlay composition waits on
58
+ the shared snapshot-query primitives tracked in the backlog.
59
+
60
+ Use `run(store, definition, evaluate)` when convenient. It calls `bind`
61
+ synchronously and invokes `evaluate` only after the overlay and verb registry
62
+ have been restored, including when the evaluator later times out or crashes.
63
+
64
+ For solver runs, `explanationContext(definition, inputs)` converts the frozen
65
+ record into `@cavelang/solver` explanation metadata. It retains every binding's
66
+ query, typed and authored value, exact belief/scenario evidence IDs, snapshot
67
+ policy, input-record digest, and overlay digest. Passing that context to
68
+ `Solve.runWithExplanation` also rejects replay against a different canonical
69
+ model digest.
70
+
71
+ ```ts
72
+ const inputs = bind(store, definition)
73
+ const report = await Solve.runWithExplanation(
74
+ adapter,
75
+ model,
76
+ { unsatCore: true },
77
+ explanationContext(definition, inputs)
78
+ )
79
+ ```
80
+
81
+ ## Explicit result governance
82
+
83
+ Evaluation remains ephemeral. The `Record` API is the only transition from a
84
+ plain solver report or ordinary evaluator output into durable CAVE history:
85
+
86
+ ```ts
87
+ import { Record } from '@cavelang/scenario'
88
+
89
+ Record.result(store, {
90
+ schema: Record.resultSchema,
91
+ id: 'architecture-2026-07-15',
92
+ report
93
+ })
94
+ ```
95
+
96
+ An ordinary deterministic evaluator uses the same frozen input record and a
97
+ separately versioned result—no solver is required:
98
+
99
+ ```ts
100
+ const evaluation = await run(store, definition, inputs => ({
101
+ schema: Record.evaluationSchema,
102
+ id: 'architecture-evaluation',
103
+ inputs,
104
+ evaluator: { name: 'architecture-threshold', version: '1.0.0' },
105
+ output: { architecture: 'monolith' }
106
+ } satisfies Record.Evaluation))
107
+
108
+ Record.result(store, evaluation)
109
+ Record.recommendation(store, {
110
+ schema: Record.recommendationSchema,
111
+ id: 'architecture-recommendation',
112
+ resultId: evaluation.id,
113
+ value: evaluation.output
114
+ })
115
+ Record.decision(store, {
116
+ schema: Record.decisionSchema,
117
+ id: 'architecture-decision',
118
+ resultId: evaluation.id,
119
+ recommendationId: 'architecture-recommendation',
120
+ selected: evaluation.output,
121
+ decidedBy: 'human/mirek'
122
+ })
123
+ ```
124
+
125
+ `cave.scenario/evaluation@1` records the exact `inputs` (snapshot, overlay,
126
+ evidence, and digest), evaluator name/version, and JSON output. The evaluator
127
+ runs only after rollback; recording, recommendation, and human decision remain
128
+ three explicit operations. The package test suite exercises this complete
129
+ non-solver architecture-choice workflow.
130
+
131
+ Each stable ID owns one append-only artifact series. Re-recording identical
132
+ content returns `existing`; reusing the ID for different content throws
133
+ `RecordConflictError`. The write is one atomic claim, with canonical JSON
134
+ encoded as a code value so export, backup, and sync preserve the complete
135
+ model digest, backend/version, snapshot, inputs, evidence, limits, and outcome.
136
+
137
+ `Record.recommendation`, `Record.decision`, `Record.action`, and
138
+ `Record.externalEffect` use different versioned schemas and entity namespaces.
139
+ Each checks its predecessor before appending. These latter two are audit
140
+ records only: they never invoke `@cavelang/act` or a hook. Governed action
141
+ execution remains the sole authority for an external effect.
142
+
143
+ `Record.replay` reads an immutable solver report without solving again and returns
144
+ explicit incompatibility reasons for a different model digest, backend, or
145
+ solver version. External evaluations retain their exact evaluator identity and
146
+ input digest through `Record.read`; they are never mistaken for solver replay.
@@ -0,0 +1,6 @@
1
+ import type { Store } from '@cavelang/store';
2
+ import { type Definition, type InputRecord } from './model.ts';
3
+ export declare const bind: (store: Store, definition: Definition) => InputRecord;
4
+ /** Materializes and rolls back inputs before `evaluate` is invoked. */
5
+ export declare const run: <Result>(store: Store, definition: Definition, evaluate: (inputs: InputRecord) => Result | Promise<Result>) => Promise<Result>;
6
+ //# sourceMappingURL=bind.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bind.d.ts","sourceRoot":"","sources":["../../src/bind.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAG5C,OAAO,EAKL,KAAK,UAAU,EAGf,KAAK,WAAW,EAIjB,MAAM,YAAY,CAAA;AAoUnB,eAAO,MAAM,IAAI,GAAI,OAAO,KAAK,EAAE,YAAY,UAAU,KAAG,WAiD3D,CAAA;AAED,uEAAuE;AACvE,eAAO,MAAM,GAAG,GAAU,MAAM,EAC9B,OAAO,KAAK,EACZ,YAAY,UAAU,EACtB,UAAU,CAAC,MAAM,EAAE,WAAW,KAAK,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,KAC1D,OAAO,CAAC,MAAM,CAAsC,CAAA"}
@@ -0,0 +1,347 @@
1
+ import { createHash } from 'node:crypto';
2
+ import * as Canonical from '@cavelang/canonical';
3
+ import { Uuidv7 } from '@cavelang/core';
4
+ import { Pattern, query } from '@cavelang/query';
5
+ import { Exact } from '@cavelang/solver';
6
+ import { ScenarioInputError } from "./error.js";
7
+ import * as Numeric from "./exact.js";
8
+ import { schema } from "./model.js";
9
+ const compareText = (left, right) => left < right ? -1 : left > right ? 1 : 0;
10
+ const stableStringify = (value) => {
11
+ if (value === null || typeof value !== 'object')
12
+ return JSON.stringify(value);
13
+ if (Array.isArray(value))
14
+ return `[${value.map(stableStringify).join(',')}]`;
15
+ const record = value;
16
+ return `{${Object.keys(record).sort().map(key => `${JSON.stringify(key)}:${stableStringify(record[key])}`).join(',')}}`;
17
+ };
18
+ const sha256 = (text) => `sha256:${createHash('sha256').update(text).digest('hex')}`;
19
+ const identifierPattern = /^[A-Za-z0-9][A-Za-z0-9._/-]*$/;
20
+ const invalid = (message, bindingId) => {
21
+ throw new ScenarioInputError('invalid-definition', message, bindingId);
22
+ };
23
+ const validateBinding = (binding) => {
24
+ if (!identifierPattern.test(binding.id))
25
+ invalid('identifier must use letters, numbers, dot, underscore, slash, or dash', binding.id);
26
+ if (binding.expected.kind !== 'boolean' && binding.select === undefined) {
27
+ invalid('select is required for non-Boolean inputs', binding.id);
28
+ }
29
+ if (binding.cardinality === 'one' && binding.policies.missing !== 'reject') {
30
+ invalid('cardinality one requires missing: reject', binding.id);
31
+ }
32
+ if (binding.cardinality === 'optional' && binding.policies.missing === 'empty') {
33
+ invalid('cardinality optional supports missing: reject or omit', binding.id);
34
+ }
35
+ if (binding.cardinality === 'many' && binding.policies.missing === 'omit') {
36
+ invalid('cardinality many supports missing: reject or empty', binding.id);
37
+ }
38
+ if (binding.cardinality === 'many' && binding.reduce !== 'all' &&
39
+ binding.expected.kind !== 'number' && binding.expected.kind !== 'integer') {
40
+ invalid(`reduction ${binding.reduce} requires a numeric input`, binding.id);
41
+ }
42
+ if (binding.expected.kind === 'enum') {
43
+ if (binding.expected.values.length === 0 || new Set(binding.expected.values).size !== binding.expected.values.length) {
44
+ invalid('enum values must be non-empty and unique', binding.id);
45
+ }
46
+ }
47
+ if (binding.expected.kind === 'number' || binding.expected.kind === 'integer') {
48
+ for (const conversion of binding.expected.conversions ?? []) {
49
+ if (conversion.from === conversion.to)
50
+ invalid('unit conversion must change the unit', binding.id);
51
+ if (Exact.compare(conversion.factor, '0') <= 0)
52
+ invalid('unit conversion factor must be positive', binding.id);
53
+ }
54
+ }
55
+ const pattern = (() => {
56
+ try {
57
+ return Pattern.parse(binding.query);
58
+ }
59
+ catch (error) {
60
+ return invalid(`invalid CAVE-Q pattern: ${error instanceof Error ? error.message : String(error)}`, binding.id);
61
+ }
62
+ })();
63
+ if (pattern.verb.kind === 'verb' && pattern.verb.transitive) {
64
+ invalid('transitive bindings are deferred until snapshot-aware shared query primitives are available', binding.id);
65
+ }
66
+ };
67
+ const validateDefinition = (definition) => {
68
+ if (!identifierPattern.test(definition.id))
69
+ invalid('scenario identifier must use letters, numbers, dot, underscore, slash, or dash');
70
+ if (!/^sha256:[0-9a-f]{64}$/.test(definition.modelDigest))
71
+ invalid('modelDigest must be a lowercase SHA-256 digest');
72
+ if (!Number.isFinite(definition.snapshot.minimumConfidence) ||
73
+ definition.snapshot.minimumConfidence < 0 || definition.snapshot.minimumConfidence > 1) {
74
+ invalid('minimumConfidence must be between 0 and 1');
75
+ }
76
+ const ids = new Set();
77
+ for (const binding of definition.bindings) {
78
+ if (ids.has(binding.id))
79
+ invalid(`duplicate binding identifier ${JSON.stringify(binding.id)}`);
80
+ ids.add(binding.id);
81
+ validateBinding(binding);
82
+ }
83
+ };
84
+ const boundaryUpper = (text) => {
85
+ const start = Date.parse(text.includes('T') ? text : `${text}T00:00:00Z`);
86
+ if (Number.isNaN(start))
87
+ throw new ScenarioInputError('invalid-definition', `cannot parse as-of boundary ${JSON.stringify(text)}`);
88
+ return Uuidv7.at(start + (text.includes('T') ? 1_000 : 86_400_000), 0, new Uint8Array(8));
89
+ };
90
+ const transactionTime = (store, asOf) => {
91
+ if (asOf === undefined) {
92
+ return store.db.prepare('SELECT MAX(tx) AS tx FROM cave_claim').get().tx;
93
+ }
94
+ const id = asOf.toLowerCase();
95
+ return Uuidv7.is(id) ?
96
+ store.db.prepare('SELECT MAX(tx) AS tx FROM cave_claim WHERE tx <= ?').get(id).tx :
97
+ store.db.prepare('SELECT MAX(tx) AS tx FROM cave_claim WHERE tx < ?').get(boundaryUpper(asOf)).tx;
98
+ };
99
+ const queryOptions = (snapshot, resolve) => ({
100
+ ...(snapshot.asOf === undefined ? {} : { asOf: snapshot.asOf }),
101
+ ...(snapshot.at === undefined ? {} : { at: snapshot.at }),
102
+ aliases: snapshot.aliases === 'closure',
103
+ resolve,
104
+ support: true
105
+ });
106
+ /** Explicit confidence filter opts CAVE-Q into returning current `@ 0%` rows. */
107
+ const includingRetractions = (input) => `${input}\nWHERE conf >= 0`;
108
+ const supportIds = (match) => match.row === undefined ? (match.rows ?? []).map(row => row.id) : [match.row.id];
109
+ const rawBaseCandidates = (store, binding, snapshot) => {
110
+ const pattern = includingRetractions(binding.query);
111
+ const unresolved = query(store, pattern, queryOptions(snapshot, false));
112
+ const winners = query(store, pattern, queryOptions(snapshot, true));
113
+ const winnerIds = new Set(winners.flatMap(supportIds));
114
+ const selected = snapshot.resolution === 'winner' ? winners : unresolved;
115
+ return selected.map(match => {
116
+ const ids = supportIds(match);
117
+ return {
118
+ match,
119
+ origin: 'belief',
120
+ contested: snapshot.resolution === 'coexisting' && ids.some(id => !winnerIds.has(id)),
121
+ retracted: match.row?.conf === 0,
122
+ unresolved: ids.length === 0
123
+ };
124
+ });
125
+ };
126
+ const overlayResult = (store, definition, canonical, stableIds) => {
127
+ if (canonical.claims.length === 0)
128
+ return {};
129
+ const rolledBack = Symbol('cave-scenario-overlay');
130
+ try {
131
+ return store.transaction(() => {
132
+ const inserted = store.insertResult(canonical, {
133
+ source: `scenario/${definition.id}`,
134
+ lifecycle: true
135
+ });
136
+ const stableByRow = new Map(inserted.ids.map((id, index) => [id, stableIds[index]]));
137
+ const result = {};
138
+ for (const binding of definition.bindings) {
139
+ // Overlay claims are matched as authored. Base aliases and historical
140
+ // rows cannot make a hypothetical claim appear under a different name.
141
+ const matches = query(store, includingRetractions(binding.query), {
142
+ ...(definition.snapshot.at === undefined ? {} : { at: definition.snapshot.at }),
143
+ all: true,
144
+ aliases: false,
145
+ support: true
146
+ }).filter(match => match.row !== undefined && stableByRow.has(match.row.id));
147
+ result[binding.id] = matches.map(match => ({
148
+ match,
149
+ origin: 'scenario',
150
+ contested: false,
151
+ retracted: match.row?.conf === 0,
152
+ unresolved: false,
153
+ scenarioClaimId: stableByRow.get(match.row.id)
154
+ }));
155
+ }
156
+ throw Object.assign(new Error('scenario overlay materialized'), { [rolledBack]: result });
157
+ });
158
+ }
159
+ catch (error) {
160
+ if (error instanceof Error && rolledBack in error)
161
+ return error[rolledBack];
162
+ throw error;
163
+ }
164
+ };
165
+ const selectedText = (candidate, binding) => {
166
+ if (binding.select !== undefined)
167
+ return candidate.match.bindings[binding.select];
168
+ if (binding.expected.kind === 'boolean')
169
+ return undefined;
170
+ return candidate.match.at?.text ?? candidate.match.row?.value_text ?? undefined;
171
+ };
172
+ const plain = (text) => text.length >= 2 && ((text.startsWith('"') && text.endsWith('"')) || (text.startsWith('`') && text.endsWith('`'))) ?
173
+ text.slice(1, -1) : text;
174
+ const uncertainty = (candidate, expected, bindingId) => {
175
+ const row = candidate.match.row;
176
+ if (row?.delta_text === null || row?.delta_text === undefined)
177
+ return undefined;
178
+ const parsed = Numeric.convert(Numeric.parse(row.delta_text, bindingId), expected.unit, expected.conversions, bindingId);
179
+ return {
180
+ authored: row.delta_text,
181
+ exact: parsed.exact,
182
+ ...(parsed.unit === undefined ? {} : { unit: parsed.unit }),
183
+ sigmaLevel: row.sigma_level ?? 2
184
+ };
185
+ };
186
+ const valueOf = (candidate, binding) => {
187
+ const expected = binding.expected;
188
+ const text = selectedText(candidate, binding);
189
+ switch (expected.kind) {
190
+ case 'boolean': {
191
+ if (binding.select === undefined)
192
+ return { kind: 'boolean', value: true };
193
+ if (text === undefined)
194
+ throw new ScenarioInputError('invalid-value', `query did not bind ?${binding.select}`, binding.id);
195
+ const value = plain(text);
196
+ const yes = expected.trueValue ?? 'true';
197
+ const no = expected.falseValue ?? 'false';
198
+ if (value !== yes && value !== no) {
199
+ throw new ScenarioInputError('invalid-value', `expected ${JSON.stringify(yes)} or ${JSON.stringify(no)}, received ${JSON.stringify(value)}`, binding.id);
200
+ }
201
+ return { kind: 'boolean', value: value === yes };
202
+ }
203
+ case 'enum': {
204
+ if (text === undefined)
205
+ throw new ScenarioInputError('invalid-value', `query did not bind ?${binding.select}`, binding.id);
206
+ const value = plain(text);
207
+ if (!expected.values.includes(value)) {
208
+ throw new ScenarioInputError('invalid-value', `value ${JSON.stringify(value)} is outside [${expected.values.join(', ')}]`, binding.id);
209
+ }
210
+ return { kind: 'enum', value };
211
+ }
212
+ case 'text':
213
+ if (text === undefined)
214
+ throw new ScenarioInputError('invalid-value', `query did not bind ?${binding.select}`, binding.id);
215
+ return { kind: 'text', value: plain(text) };
216
+ case 'integer':
217
+ case 'number': {
218
+ const authored = candidate.match.at?.text ?? candidate.match.row?.value_text ?? text;
219
+ if (authored === undefined)
220
+ throw new ScenarioInputError('invalid-value', 'matched row has no numeric value', binding.id);
221
+ const parsed = Numeric.convert(Numeric.parse(authored, binding.id), expected.unit, expected.conversions, binding.id);
222
+ const uncertainty_ = uncertainty(candidate, expected, binding.id);
223
+ const common = {
224
+ ...(parsed.unit === undefined ? {} : { unit: parsed.unit }),
225
+ authored,
226
+ approximate: parsed.approximate,
227
+ ...(uncertainty_ === undefined ? {} : { uncertainty: uncertainty_ })
228
+ };
229
+ if (expected.kind === 'integer') {
230
+ if (parsed.exact.denominator !== '1') {
231
+ throw new ScenarioInputError('invalid-value', `expected an integer, received ${JSON.stringify(authored)}`, binding.id);
232
+ }
233
+ return { kind: 'integer', value: parsed.exact.numerator, ...common };
234
+ }
235
+ return { kind: 'number', value: parsed.exact, ...common };
236
+ }
237
+ }
238
+ };
239
+ const evidenceOf = (candidate) => candidate.origin === 'scenario' ?
240
+ [{ origin: 'scenario', claimIds: [candidate.scenarioClaimId] }] :
241
+ [{ origin: 'belief', rowIds: supportIds(candidate.match) }];
242
+ const publicCandidate = (candidate, binding) => ({
243
+ value: valueOf(candidate, binding),
244
+ confidence: candidate.match.row?.conf ?? 1,
245
+ evidence: evidenceOf(candidate)
246
+ });
247
+ const evidenceKey = (candidate) => candidate.origin === 'scenario' ?
248
+ `scenario:${candidate.scenarioClaimId}` : `belief:${supportIds(candidate.match).join(',')}`;
249
+ const reduce = (values, binding) => {
250
+ if (binding.cardinality !== 'many' || binding.reduce === 'all')
251
+ return values;
252
+ const numeric = values;
253
+ if (binding.reduce === 'sum') {
254
+ const exact = numeric.reduce((total, value) => Numeric.add(total, value.kind === 'integer' ? { numerator: value.value, denominator: '1' } : value.value), { numerator: '0', denominator: '1' });
255
+ const unit = numeric[0]?.unit;
256
+ const approximate = numeric.some(value => value.approximate);
257
+ return binding.expected.kind === 'integer' ?
258
+ { kind: 'integer', value: exact.numerator, ...(unit === undefined ? {} : { unit }), approximate } :
259
+ { kind: 'number', value: exact, ...(unit === undefined ? {} : { unit }), approximate };
260
+ }
261
+ let selected = numeric[0];
262
+ for (const value of numeric.slice(1)) {
263
+ const left = selected.kind === 'integer' ? { numerator: selected.value, denominator: '1' } : selected.value;
264
+ const right = value.kind === 'integer' ? { numerator: value.value, denominator: '1' } : value.value;
265
+ const comparison = Numeric.compare(right, left);
266
+ if ((binding.reduce === 'min' && comparison < 0) || (binding.reduce === 'max' && comparison > 0))
267
+ selected = value;
268
+ }
269
+ return selected;
270
+ };
271
+ const bindOne = (binding, base, overlay, minimumConfidence) => {
272
+ const eligible = (values) => values
273
+ .filter(candidate => candidate.retracted && binding.policies.retracted === 'reject' ||
274
+ candidate.match.row === undefined || candidate.match.row.conf >= minimumConfidence)
275
+ .filter(candidate => binding.policies.retracted !== 'exclude' || !candidate.retracted);
276
+ const baseEligible = eligible(base);
277
+ const overlayEligible = eligible(overlay);
278
+ const selected = (binding.scenarioOverride && overlayEligible.length > 0 ? overlayEligible : [...baseEligible, ...overlayEligible])
279
+ .sort((left, right) => compareText(evidenceKey(left), evidenceKey(right)));
280
+ const rejected = selected.find(candidate => candidate.retracted && binding.policies.retracted === 'reject');
281
+ if (rejected !== undefined)
282
+ throw new ScenarioInputError('retracted-input', 'matched a retracted belief', binding.id);
283
+ if (binding.policies.contested === 'reject' && selected.some(candidate => candidate.contested)) {
284
+ throw new ScenarioInputError('contested-input', 'matched coexisting beliefs that do not win resolution', binding.id);
285
+ }
286
+ if (binding.policies.unresolved === 'reject' && selected.some(candidate => candidate.unresolved)) {
287
+ throw new ScenarioInputError('unresolved-input', 'query result has no supporting claim row', binding.id);
288
+ }
289
+ const countOk = binding.cardinality === 'many' || selected.length <= 1;
290
+ if (!countOk)
291
+ throw new ScenarioInputError('ambiguous-input', `expected ${binding.cardinality}, matched ${selected.length} values`, binding.id);
292
+ if (selected.length === 0 && binding.policies.missing === 'reject') {
293
+ throw new ScenarioInputError('missing-input', 'query matched no eligible value', binding.id);
294
+ }
295
+ const candidates = selected.map(candidate => publicCandidate(candidate, binding));
296
+ if (selected.length === 0 && binding.policies.missing === 'omit')
297
+ return { id: binding.id, candidates };
298
+ if (selected.length === 0)
299
+ return { id: binding.id, candidates, value: [] };
300
+ const values = candidates.map(candidate => candidate.value);
301
+ if (binding.cardinality === 'many')
302
+ return { id: binding.id, candidates, value: reduce(values, binding) };
303
+ return { id: binding.id, candidates, ...(values[0] === undefined ? {} : { value: values[0] }) };
304
+ };
305
+ export const bind = (store, definition) => {
306
+ validateDefinition(definition);
307
+ const frozenTx = transactionTime(store, definition.snapshot.asOf);
308
+ const effectiveSnapshot = definition.snapshot.asOf === undefined && frozenTx !== null ?
309
+ { ...definition.snapshot, asOf: frozenTx } : definition.snapshot;
310
+ const registry = effectiveSnapshot.asOf === undefined ? store.registry() : store.registryAsOf(effectiveSnapshot.asOf);
311
+ const canonical = Canonical.canonicalizeText(definition.overlay ?? '', registry);
312
+ if (canonical.problems.length > 0) {
313
+ const details = canonical.problems.map(problem => `line ${problem.line}: ${problem.message}`).join('; ');
314
+ throw new ScenarioInputError('invalid-overlay', `overlay has ${canonical.problems.length} problem(s): ${details}`);
315
+ }
316
+ const overlayText = Canonical.emit(canonical);
317
+ const overlayDigest = sha256(overlayText);
318
+ const claimIds = canonical.claims.map((_, index) => `scenario:${definition.id}:${overlayDigest.slice(7)}#${index + 1}`);
319
+ const base = Object.fromEntries(definition.bindings.map(binding => [
320
+ binding.id,
321
+ rawBaseCandidates(store, binding, effectiveSnapshot)
322
+ ]));
323
+ const overlay = overlayResult(store, { ...definition, snapshot: effectiveSnapshot }, canonical, claimIds);
324
+ const bindings = definition.bindings.map(binding => bindOne(binding, base[binding.id] ?? [], overlay[binding.id] ?? [], definition.snapshot.minimumConfidence));
325
+ const values = {};
326
+ for (const binding of bindings)
327
+ if (binding.value !== undefined)
328
+ values[binding.id] = binding.value;
329
+ const supportingRowIds = [...new Set(bindings.flatMap(binding => binding.candidates.flatMap(candidate => candidate.evidence.flatMap(evidence => evidence.origin === 'belief' ? evidence.rowIds : []))))].sort(compareText);
330
+ const scenarioClaimIds = [...new Set(bindings.flatMap(binding => binding.candidates.flatMap(candidate => candidate.evidence.flatMap(evidence => evidence.origin === 'scenario' ? evidence.claimIds : []))))].sort(compareText);
331
+ const withoutDigest = {
332
+ schema,
333
+ scenarioId: definition.id,
334
+ modelDigest: definition.modelDigest,
335
+ snapshot: { ...definition.snapshot, transactionTime: frozenTx },
336
+ overlay: { digest: overlayDigest, source: `scenario/${definition.id}`, claimIds },
337
+ values,
338
+ bindings,
339
+ supportingRowIds,
340
+ scenarioClaimIds
341
+ };
342
+ const digest = sha256(stableStringify(withoutDigest));
343
+ return { ...withoutDigest, digest };
344
+ };
345
+ /** Materializes and rolls back inputs before `evaluate` is invoked. */
346
+ export const run = async (store, definition, evaluate) => evaluate(bind(store, definition));
347
+ //# sourceMappingURL=bind.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bind.js","sourceRoot":"","sources":["../../src/bind.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export type Code = 'invalid-definition' | 'invalid-overlay' | 'missing-input' | 'ambiguous-input' | 'contested-input' | 'retracted-input' | 'unresolved-input' | 'invalid-value' | 'incompatible-unit';
2
+ export declare class ScenarioInputError extends Error {
3
+ readonly code: Code;
4
+ readonly bindingId?: string;
5
+ constructor(code: Code, message: string, bindingId?: string);
6
+ }
7
+ //# sourceMappingURL=error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../src/error.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,IAAI,GACZ,oBAAoB,GACpB,iBAAiB,GACjB,eAAe,GACf,iBAAiB,GACjB,iBAAiB,GACjB,iBAAiB,GACjB,kBAAkB,GAClB,eAAe,GACf,mBAAmB,CAAA;AAEvB,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAA;IACnB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;gBAEf,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;CAM5D"}
@@ -0,0 +1,11 @@
1
+ export class ScenarioInputError extends Error {
2
+ code;
3
+ bindingId;
4
+ constructor(code, message, bindingId) {
5
+ super(bindingId === undefined ? message : `scenario input ${JSON.stringify(bindingId)}: ${message}`);
6
+ this.name = 'ScenarioInputError';
7
+ this.code = code;
8
+ this.bindingId = bindingId;
9
+ }
10
+ }
11
+ //# sourceMappingURL=error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.js","sourceRoot":"","sources":["../../src/error.ts"],"names":[],"mappings":"AAWA,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAClC,IAAI,CAAM;IACV,SAAS,CAAS;IAE3B,YAAY,IAAU,EAAE,OAAe,EAAE,SAAkB;QACzD,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,OAAO,EAAE,CAAC,CAAA;QACpG,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAA;QAChC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;IAC5B,CAAC;CACF"}
@@ -0,0 +1,13 @@
1
+ import type { Conversion, ExactNumber } from './model.ts';
2
+ type Parsed = {
3
+ readonly exact: ExactNumber;
4
+ readonly unit?: string;
5
+ readonly approximate: boolean;
6
+ };
7
+ export declare const add: (left: ExactNumber, right: ExactNumber) => ExactNumber;
8
+ export declare const compare: (left: ExactNumber, right: ExactNumber) => number;
9
+ /** Parses CAVE's exact scalar spelling without passing the digits through `number`. */
10
+ export declare const parse: (authored: string, bindingId: string) => Parsed;
11
+ export declare const convert: (parsed: Parsed, expectedUnit: string | undefined, conversions: readonly Conversion[] | undefined, bindingId: string) => Parsed;
12
+ export {};
13
+ //# sourceMappingURL=exact.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exact.d.ts","sourceRoot":"","sources":["../../src/exact.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAYzD,KAAK,MAAM,GAAG;IACZ,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAA;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAA;CAC9B,CAAA;AAmBD,eAAO,MAAM,GAAG,GAAI,MAAM,WAAW,EAAE,OAAO,WAAW,KAAG,WAIzD,CAAA;AAEH,eAAO,MAAM,OAAO,GAAI,MAAM,WAAW,EAAE,OAAO,WAAW,KAAG,MAEmD,CAAA;AAInH,uFAAuF;AACvF,eAAO,MAAM,KAAK,GAAI,UAAU,MAAM,EAAE,WAAW,MAAM,KAAG,MAsB3D,CAAA;AAED,eAAO,MAAM,OAAO,GAClB,QAAQ,MAAM,EACd,cAAc,MAAM,GAAG,SAAS,EAChC,aAAa,SAAS,UAAU,EAAE,GAAG,SAAS,EAC9C,WAAW,MAAM,KAChB,MAcF,CAAA"}