@sensigo/realm-testing 0.31.2 → 0.32.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/store/in-memory-store.d.ts +15 -1
- package/dist/store/in-memory-store.d.ts.map +1 -1
- package/dist/store/in-memory-store.js +42 -2
- package/dist/store/in-memory-store.js.map +1 -1
- package/dist/store/run-store-fidelity-contract.d.ts.map +1 -1
- package/dist/store/run-store-fidelity-contract.js +11 -0
- package/dist/store/run-store-fidelity-contract.js.map +1 -1
- package/dist/store/settlement-contract.d.ts +67 -0
- package/dist/store/settlement-contract.d.ts.map +1 -0
- package/dist/store/settlement-contract.js +1692 -0
- package/dist/store/settlement-contract.js.map +1 -0
- package/package.json +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -5,6 +5,8 @@ export { runStoreFidelityContract } from './store/run-store-fidelity-contract.js
|
|
|
5
5
|
export type { RunStoreFidelityLaw, RunStoreFidelityContractCase, RunStoreFidelityContractAdapter, } from './store/run-store-fidelity-contract.js';
|
|
6
6
|
export { fencedTraceBufferContract } from './store/fenced-trace-buffer-contract.js';
|
|
7
7
|
export type { FencedTraceBufferLaw, FencedTraceBufferContractCase, FencedTraceBufferContractAdapter, } from './store/fenced-trace-buffer-contract.js';
|
|
8
|
+
export { settlementContract, defaultSettlementFixture } from './store/settlement-contract.js';
|
|
9
|
+
export type { SettlementLaw, SettlementContractCase, SettlementContractAdapter, SettlementFixture, } from './store/settlement-contract.js';
|
|
8
10
|
export { loadFixtureFromFile, loadFixtureFromString, loadFixturesFromDir, } from './fixtures/fixture-loader.js';
|
|
9
11
|
export type { TestFixture, MockOperations } from './fixtures/fixture-loader.js';
|
|
10
12
|
export { MockServiceRecorder } from './mocks/mock-service.js';
|
|
@@ -19,5 +21,5 @@ export { runFixtureTests } from './runner/test-runner.js';
|
|
|
19
21
|
export type { TestResult, RunFixtureTestsOptions } from './runner/test-runner.js';
|
|
20
22
|
export { startGitHubMockServer } from './servers/github-mock-server.js';
|
|
21
23
|
export type { GitHubMockServerHandle } from './servers/github-mock-server.js';
|
|
22
|
-
export declare const VERSION = "0.
|
|
24
|
+
export declare const VERSION = "0.32.0";
|
|
23
25
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,2BAA2B,EAAE,MAAM,4CAA4C,CAAC;AACzF,YAAY,EACV,gBAAgB,EAChB,yBAAyB,EACzB,kCAAkC,GACnC,MAAM,4CAA4C,CAAC;AACpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AAClF,YAAY,EACV,mBAAmB,EACnB,4BAA4B,EAC5B,+BAA+B,GAChC,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,yBAAyB,EAAE,MAAM,yCAAyC,CAAC;AACpF,YAAY,EACV,oBAAoB,EACpB,6BAA6B,EAC7B,gCAAgC,GACjC,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,2BAA2B,EAAE,MAAM,4CAA4C,CAAC;AACzF,YAAY,EACV,gBAAgB,EAChB,yBAAyB,EACzB,kCAAkC,GACnC,MAAM,4CAA4C,CAAC;AACpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AAClF,YAAY,EACV,mBAAmB,EACnB,4BAA4B,EAC5B,+BAA+B,GAChC,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,yBAAyB,EAAE,MAAM,yCAAyC,CAAC;AACpF,YAAY,EACV,oBAAoB,EACpB,6BAA6B,EAC7B,gCAAgC,GACjC,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAC9F,YAAY,EACV,aAAa,EACb,sBAAsB,EACtB,yBAAyB,EACzB,iBAAiB,GAClB,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,8BAA8B,CAAC;AACtC,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAGhF,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,YAAY,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAG3D,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAGxD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,YAAY,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAGlF,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,YAAY,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAE9E,eAAO,MAAM,OAAO,WAAW,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -4,6 +4,7 @@ export { InMemoryStore } from './store/in-memory-store.js';
|
|
|
4
4
|
export { perRunArtifactStoreContract } from './store/per-run-artifact-store-contract.js';
|
|
5
5
|
export { runStoreFidelityContract } from './store/run-store-fidelity-contract.js';
|
|
6
6
|
export { fencedTraceBufferContract } from './store/fenced-trace-buffer-contract.js';
|
|
7
|
+
export { settlementContract, defaultSettlementFixture } from './store/settlement-contract.js';
|
|
7
8
|
// Fixtures
|
|
8
9
|
export { loadFixtureFromFile, loadFixtureFromString, loadFixturesFromDir, } from './fixtures/fixture-loader.js';
|
|
9
10
|
// Mocks
|
|
@@ -20,5 +21,5 @@ export { testAdapter } from './helpers/test-adapter.js';
|
|
|
20
21
|
export { runFixtureTests } from './runner/test-runner.js';
|
|
21
22
|
// Servers
|
|
22
23
|
export { startGitHubMockServer } from './servers/github-mock-server.js';
|
|
23
|
-
export const VERSION = '0.
|
|
24
|
+
export const VERSION = '0.32.0';
|
|
24
25
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,iEAAiE;AAEjE,QAAQ;AACR,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,2BAA2B,EAAE,MAAM,4CAA4C,CAAC;AAMzF,OAAO,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AAMlF,OAAO,EAAE,yBAAyB,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,iEAAiE;AAEjE,QAAQ;AACR,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,2BAA2B,EAAE,MAAM,4CAA4C,CAAC;AAMzF,OAAO,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AAMlF,OAAO,EAAE,yBAAyB,EAAE,MAAM,yCAAyC,CAAC;AAMpF,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAQ9F,WAAW;AACX,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,8BAA8B,CAAC;AAGtC,QAAQ;AACR,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAE9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D,aAAa;AACb,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,0BAA0B,CAAC;AAElC,oBAAoB;AACpB,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD,SAAS;AACT,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG1D,UAAU;AACV,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAGxE,MAAM,CAAC,MAAM,OAAO,GAAG,QAAQ,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type RunStore, type RunRecord, type CreateRunOptions, type WorkflowDefinition, type LoadBearingRunRecordField } from '@sensigo/realm';
|
|
1
|
+
import { type RunStore, type RunRecord, type CreateRunOptions, type WorkflowDefinition, type LoadBearingRunRecordField, type SettlementDelta, type SettlementResult } from '@sensigo/realm';
|
|
2
2
|
/** In-memory implementation of RunStore. Uses a Map keyed by run ID. No I/O, no locking. */
|
|
3
3
|
export declare class InMemoryStore implements RunStore {
|
|
4
4
|
private readonly runs;
|
|
@@ -16,6 +16,20 @@ export declare class InMemoryStore implements RunStore {
|
|
|
16
16
|
get(runId: string): Promise<RunRecord>;
|
|
17
17
|
update(record: RunRecord): Promise<RunRecord>;
|
|
18
18
|
claimStep(runId: string, stepName: string, definition: WorkflowDefinition): Promise<RunRecord>;
|
|
19
|
+
/**
|
|
20
|
+
* Atomically applies one `SettlementDelta` to this run's fresh state (issue #279, increment 1).
|
|
21
|
+
* DORMANT until PR-B — see `RunStore.settleStep`'s own JSDoc for the full contract.
|
|
22
|
+
*
|
|
23
|
+
* NO `await` between the read (`this.runs.get`) and the write (`this.runs.set`) — mirrors
|
|
24
|
+
* `claimStep`'s own documented no-await stretch above (issue #188's single-owner discipline):
|
|
25
|
+
* `applySettlement` is itself pure/synchronous, so calling it here does not introduce a
|
|
26
|
+
* microtask-yield point between the fresh read and the committing write. A behavioral overlap
|
|
27
|
+
* test (this package's own conformance suite) pins this directly: two disjoint concurrent
|
|
28
|
+
* settles via `Promise.all` both land, proving no interleaving window exists.
|
|
29
|
+
*/
|
|
30
|
+
settleStep(runId: string, delta: SettlementDelta, definition: WorkflowDefinition, options?: {
|
|
31
|
+
now?: Date;
|
|
32
|
+
}): Promise<SettlementResult>;
|
|
19
33
|
list(workflowId?: string): Promise<RunRecord[]>;
|
|
20
34
|
}
|
|
21
35
|
//# sourceMappingURL=in-memory-store.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"in-memory-store.d.ts","sourceRoot":"","sources":["../../src/store/in-memory-store.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"in-memory-store.d.ts","sourceRoot":"","sources":["../../src/store/in-memory-store.ts"],"names":[],"mappings":"AACA,OAAO,EAQL,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,yBAAyB,EAC9B,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACtB,MAAM,gBAAgB,CAAC;AAExB,4FAA4F;AAC5F,qBAAa,aAAc,YAAW,QAAQ;IAC5C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAgC;IACrD,sGAAsG;IACtG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA6B;IAEtD,iGAAiG;IACjG,QAAQ,CAAC,cAAc,QAAQ;IAE/B;wGACoG;IACpG,QAAQ,CAAC,wBAAwB,EAAE,WAAW,CAAC,yBAAyB,CAAC,CAStE;IAEG,MAAM,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC;QAAE,GAAG,EAAE,SAAS,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IA4ChF,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAatC,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IA6B7C,SAAS,CACb,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,kBAAkB,GAC7B,OAAO,CAAC,SAAS,CAAC;IAyDrB;;;;;;;;;;OAUG;IACG,UAAU,CACd,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,eAAe,EACtB,UAAU,EAAE,kBAAkB,EAC9B,OAAO,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,IAAI,CAAA;KAAE,GACvB,OAAO,CAAC,gBAAgB,CAAC;IAwBtB,IAAI,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;CAOtD"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// InMemoryStore — in-memory implementation of RunStore for use in tests.
|
|
2
|
-
import { WorkflowError, findEligibleSteps, deriveRunPhase, decideIdempotencyPolicy, computeClaimDeadline, isStepSettledOrInFlight, } from '@sensigo/realm';
|
|
2
|
+
import { WorkflowError, findEligibleSteps, deriveRunPhase, decideIdempotencyPolicy, computeClaimDeadline, isStepSettledOrInFlight, applySettlement, } from '@sensigo/realm';
|
|
3
3
|
/** In-memory implementation of RunStore. Uses a Map keyed by run ID. No I/O, no locking. */
|
|
4
4
|
export class InMemoryStore {
|
|
5
5
|
runs = new Map();
|
|
@@ -15,6 +15,9 @@ export class InMemoryStore {
|
|
|
15
15
|
'extension_identity',
|
|
16
16
|
'validation_rejections',
|
|
17
17
|
'defaulted_steps',
|
|
18
|
+
// issue #279 (increment 1, PR-A): declared alongside settleStep — declaration-coherence.
|
|
19
|
+
'settled',
|
|
20
|
+
'finalizer_ledger',
|
|
18
21
|
]);
|
|
19
22
|
async create(options) {
|
|
20
23
|
// Idempotency: a key match applies the re-encounter policy, like JsonFileStore.
|
|
@@ -140,10 +143,13 @@ export class InMemoryStore {
|
|
|
140
143
|
// Per-claim liveness clock (issue #101) — mirrors JsonFileStore.claimStep: stamp claims[S]
|
|
141
144
|
// atomically with the in_progress add (OVERWRITE, so a missed settle-site delete self-heals).
|
|
142
145
|
const deadline = computeClaimDeadline(definition, stepName, new Date());
|
|
146
|
+
// issue #279 (increment 1, PR-A): mint an acquirer-minted fencing token alongside the
|
|
147
|
+
// deadline, in the SAME synchronous stretch — dormant until PR-B's settleStep migration.
|
|
148
|
+
const token = crypto.randomUUID();
|
|
143
149
|
const updated = {
|
|
144
150
|
...run,
|
|
145
151
|
in_progress_steps: [...run.in_progress_steps, stepName],
|
|
146
|
-
claims: { ...run.claims, [stepName]: { deadline } },
|
|
152
|
+
claims: { ...run.claims, [stepName]: { deadline, token } },
|
|
147
153
|
run_phase: 'running',
|
|
148
154
|
version: run.version + 1,
|
|
149
155
|
updated_at: new Date().toISOString(),
|
|
@@ -151,6 +157,40 @@ export class InMemoryStore {
|
|
|
151
157
|
this.runs.set(updated.id, updated);
|
|
152
158
|
return updated;
|
|
153
159
|
}
|
|
160
|
+
/**
|
|
161
|
+
* Atomically applies one `SettlementDelta` to this run's fresh state (issue #279, increment 1).
|
|
162
|
+
* DORMANT until PR-B — see `RunStore.settleStep`'s own JSDoc for the full contract.
|
|
163
|
+
*
|
|
164
|
+
* NO `await` between the read (`this.runs.get`) and the write (`this.runs.set`) — mirrors
|
|
165
|
+
* `claimStep`'s own documented no-await stretch above (issue #188's single-owner discipline):
|
|
166
|
+
* `applySettlement` is itself pure/synchronous, so calling it here does not introduce a
|
|
167
|
+
* microtask-yield point between the fresh read and the committing write. A behavioral overlap
|
|
168
|
+
* test (this package's own conformance suite) pins this directly: two disjoint concurrent
|
|
169
|
+
* settles via `Promise.all` both land, proving no interleaving window exists.
|
|
170
|
+
*/
|
|
171
|
+
async settleStep(runId, delta, definition, options) {
|
|
172
|
+
const fresh = this.runs.get(runId);
|
|
173
|
+
if (fresh === undefined) {
|
|
174
|
+
throw new WorkflowError(`Run '${runId}' not found`, {
|
|
175
|
+
code: 'STATE_RUN_NOT_FOUND',
|
|
176
|
+
category: 'STATE',
|
|
177
|
+
agentAction: 'report_to_user',
|
|
178
|
+
retryable: false,
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
const outcome = applySettlement(fresh, delta, definition, options);
|
|
182
|
+
if (!outcome.applied) {
|
|
183
|
+
return outcome; // refusal/noop — fresh state, NO write (version unchanged)
|
|
184
|
+
}
|
|
185
|
+
const updated = {
|
|
186
|
+
...outcome.run,
|
|
187
|
+
run_phase: deriveRunPhase(outcome.run),
|
|
188
|
+
version: fresh.version + 1,
|
|
189
|
+
updated_at: new Date().toISOString(),
|
|
190
|
+
};
|
|
191
|
+
this.runs.set(updated.id, updated);
|
|
192
|
+
return { ...outcome, run: updated };
|
|
193
|
+
}
|
|
154
194
|
async list(workflowId) {
|
|
155
195
|
const all = [...this.runs.values()];
|
|
156
196
|
if (workflowId !== undefined) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"in-memory-store.js","sourceRoot":"","sources":["../../src/store/in-memory-store.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,uBAAuB,EACvB,oBAAoB,EACpB,uBAAuB,
|
|
1
|
+
{"version":3,"file":"in-memory-store.js","sourceRoot":"","sources":["../../src/store/in-memory-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-store-fidelity-contract.d.ts","sourceRoot":"","sources":["../../src/store/run-store-fidelity-contract.ts"],"names":[],"mappings":"AAcA,OAAO,EAEL,KAAK,QAAQ,
|
|
1
|
+
{"version":3,"file":"run-store-fidelity-contract.d.ts","sourceRoot":"","sources":["../../src/store/run-store-fidelity-contract.ts"],"names":[],"mappings":"AAcA,OAAO,EAEL,KAAK,QAAQ,EAGb,KAAK,kBAAkB,EACxB,MAAM,gBAAgB,CAAC;AAExB,8FAA8F;AAC9F,MAAM,MAAM,mBAAmB,GAAG,kBAAkB,GAAG,oBAAoB,CAAC;AAE5E;;;;GAIG;AACH,MAAM,WAAW,4BAA4B;IAC3C,GAAG,EAAE,mBAAmB,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAED,oGAAoG;AACpG,MAAM,WAAW,+BAA+B;IAC9C,4BAA4B;IAC5B,KAAK,EAAE,QAAQ,CAAC;IAChB;;;;OAIG;IACH,UAAU,EAAE,kBAAkB,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAwDD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,+BAA+B,GACvC,4BAA4B,EAAE,CAoEhC"}
|
|
@@ -18,6 +18,13 @@ import { WorkflowError, } from '@sensigo/realm';
|
|
|
18
18
|
* FIDELITY_HONESTY to actually exercise a round-trip. Deliberately real shapes (not `{}` or
|
|
19
19
|
* `null`), since a store that only round-trips empty/degenerate values would not actually prove
|
|
20
20
|
* fidelity for the shapes the engine truly writes.
|
|
21
|
+
*
|
|
22
|
+
* The type annotation is CLOSED over every key of `LoadBearingRunRecordField` — issue #279
|
|
23
|
+
* (increment 1) relies on this: widening that union to add `settled`/`finalizer_ledger` forced a
|
|
24
|
+
* compile error here until both got a sample value, which is deliberate (a store declaring
|
|
25
|
+
* `settleStep` gets these two FIDELITY_HONESTY cases automatically, everywhere
|
|
26
|
+
* `runStoreFidelityContract` already runs — including the byte-untouched CLI contract test file;
|
|
27
|
+
* see that file's own header for why it needs no edit).
|
|
21
28
|
*/
|
|
22
29
|
const SAMPLE_VALUES = {
|
|
23
30
|
capability_blocks: {
|
|
@@ -52,6 +59,10 @@ const SAMPLE_VALUES = {
|
|
|
52
59
|
],
|
|
53
60
|
validation_rejections: { 'tck-step': 3 },
|
|
54
61
|
defaulted_steps: ['tck-step'],
|
|
62
|
+
// issue #279 (increment 1): sample values for the two settlement fields — dormant data shapes
|
|
63
|
+
// (nothing writes these until PR-B), but real/valid ones per their own RunRecord doc.
|
|
64
|
+
settled: { 'tck-step': { token: 'tck-fidelity-token', outcome: 'complete' } },
|
|
65
|
+
finalizer_ledger: { 'tck-finalizer': { status: 'pending', rank: 0 } },
|
|
55
66
|
};
|
|
56
67
|
/**
|
|
57
68
|
* Builds the contract cases for `adapter`.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-store-fidelity-contract.js","sourceRoot":"","sources":["../../src/store/run-store-fidelity-contract.ts"],"names":[],"mappings":"AAAA,gGAAgG;AAChG,kFAAkF;AAClF,EAAE;AACF,+FAA+F;AAC/F,8FAA8F;AAC9F,6FAA6F;AAC7F,kGAAkG;AAClG,aAAa;AACb,EAAE;AACF,6FAA6F;AAC7F,8FAA8F;AAC9F,kGAAkG;AAClG,+FAA+F;AAC/F,wFAAwF;AACxF,OAAO,EACL,aAAa,
|
|
1
|
+
{"version":3,"file":"run-store-fidelity-contract.js","sourceRoot":"","sources":["../../src/store/run-store-fidelity-contract.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { type RunStore, type WorkflowDefinition, type StepDefinition } from '@sensigo/realm';
|
|
2
|
+
/** One of the PR-A-runnable settlement laws (design record §8, narrowed to the PR-A subset named
|
|
3
|
+
* in the hand-off prompt's D4 section — see this module's own header). */
|
|
4
|
+
export type SettlementLaw = 'FRESH_APPLICATION' | 'CONDITIONAL_NOOP' | 'CONDITIONAL_NOOP_GRANDFATHERED' | 'OWNERSHIP_REFUSAL' | 'LEDGER_MINT_ATOMICITY' | 'DRAIN_MARK_DEDUP' | 'TERMINAL_REFUSAL' | 'TERMINAL_STATE_ONLY' | 'CS_PURITY' | 'NEVER_DOWNGRADE' | 'SETTLE_OUTCOME_INTEGRITY' | 'SETTLED_ORPHAN_OVERWRITE' | 'TRANSFORM_FIDELITY' | 'RESULT_AS_APPLIED' | 'MARK_MEMBERSHIP' | 'REFUSAL_SWEEP' | 'MINT_FRESH' | 'SELF_IMAGE_IDEMPOTENCE' | 'TERMINAL_GATE_EXCLUSION' | 'COMPLETE_SEAL_PHASE' | 'WHEN_ROUTED_TERMINALIZATION' | 'G1_GATE_COEXISTENCE'
|
|
5
|
+
/** Not a real settlement law — a wiring-gap sentinel (see `settlementContract`'s own doc: a
|
|
6
|
+
* store declaring `settleStep` with no `settlementFixture` supplied gets ONE failing case
|
|
7
|
+
* tagged with this, never a silent zero-cases pass). */
|
|
8
|
+
| 'ADAPTER_WIRING';
|
|
9
|
+
/**
|
|
10
|
+
* A single, framework-agnostic contract case. `run()` throws (rejects) on failure — any test
|
|
11
|
+
* framework's `await run()` (rejecting fails the test) or `expect(run()).resolves...` maps
|
|
12
|
+
* directly onto this.
|
|
13
|
+
*/
|
|
14
|
+
export interface SettlementContractCase {
|
|
15
|
+
law: SettlementLaw;
|
|
16
|
+
name: string;
|
|
17
|
+
run: () => Promise<void>;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Definition-building hook a calling test file supplies so the store-exercising cases below never
|
|
21
|
+
* hand-roll their own `WorkflowDefinition`s inline — a concrete, named type (not a structural
|
|
22
|
+
* `Pick<>`/intersection), mirroring `runStoreFidelityContract`'s own adapter-supplied
|
|
23
|
+
* `definition`/`stepName` precedent, generalized to a factory since this TCK needs many distinct
|
|
24
|
+
* shapes (fan-out pairs, finalizer-bearing definitions, ranked finalizer pairs).
|
|
25
|
+
*/
|
|
26
|
+
export interface SettlementFixture {
|
|
27
|
+
/** A definition with the named agent steps, all immediately eligible (no `depends_on`). */
|
|
28
|
+
minimalDefinition(stepNames: string[]): WorkflowDefinition;
|
|
29
|
+
/** Adds one finalizer step (`execution: 'finalizer'`) to a definition built above. */
|
|
30
|
+
withFinalizer(def: WorkflowDefinition, finalizerName: string, onOutcome: NonNullable<StepDefinition['on_outcome']>): WorkflowDefinition;
|
|
31
|
+
}
|
|
32
|
+
/** Adapter a calling test file supplies to parameterize the contract against one concrete store. */
|
|
33
|
+
export interface SettlementContractAdapter {
|
|
34
|
+
/** The store under test. A store that does not declare `settleStep` gets zero cases (vacuous
|
|
35
|
+
* pass — mirrors the established optional-capability idiom, e.g.
|
|
36
|
+
* `runStoreFidelityContract`'s zero-cases-on-no-declaration). */
|
|
37
|
+
store: RunStore;
|
|
38
|
+
/** Descriptive label for case names (e.g. `'JsonFileStore'`, `'InMemoryStore'`). */
|
|
39
|
+
storeName: string;
|
|
40
|
+
/**
|
|
41
|
+
* Required for a store that DOES declare `settleStep` — the contract's own store-exercising
|
|
42
|
+
* cases are built from this. Omitting it (while the store declares `settleStep`) is a WIRING
|
|
43
|
+
* GAP, not a vacuous pass: `settlementContract` returns one explicit `ADAPTER_WIRING` failing
|
|
44
|
+
* case rather than silently skipping real conformance coverage. Both calling test files in this
|
|
45
|
+
* package pass `defaultSettlementFixture` (exported below) — a store needing bespoke definition
|
|
46
|
+
* shapes may supply its own.
|
|
47
|
+
*/
|
|
48
|
+
settlementFixture?: SettlementFixture;
|
|
49
|
+
}
|
|
50
|
+
/** Default settlement fixture — builds minimal agent-step / finalizer-step definitions with no
|
|
51
|
+
* store-specific requirements beyond `RunStore.create` never validating `workflowId` against an
|
|
52
|
+
* external registry. Suitable for JsonFileStore and InMemoryStore; both this package's own
|
|
53
|
+
* conformance test files wire this in directly. */
|
|
54
|
+
export declare const defaultSettlementFixture: SettlementFixture;
|
|
55
|
+
/**
|
|
56
|
+
* Builds every PR-A-runnable settlement contract case for `adapter`.
|
|
57
|
+
*
|
|
58
|
+
* - `adapter.store.settleStep` undeclared ⇒ **zero cases** (vacuous pass — mirrors the
|
|
59
|
+
* established optional-capability idiom, e.g. `runStoreFidelityContract`'s own
|
|
60
|
+
* zero-cases-on-no-declaration precedent for a store that opts out entirely).
|
|
61
|
+
* - `settleStep` declared but `adapter.settlementFixture` absent ⇒ **one `ADAPTER_WIRING`
|
|
62
|
+
* failing case**, never a silent zero-cases pass — a store that opts INTO settlement
|
|
63
|
+
* conformance must not be able to pass this TCK by accident of an unwired adapter.
|
|
64
|
+
* - Both present ⇒ the full law set below.
|
|
65
|
+
*/
|
|
66
|
+
export declare function settlementContract(adapter: SettlementContractAdapter): SettlementContractCase[];
|
|
67
|
+
//# sourceMappingURL=settlement-contract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settlement-contract.d.ts","sourceRoot":"","sources":["../../src/store/settlement-contract.ts"],"names":[],"mappings":"AAkBA,OAAO,EAEL,KAAK,QAAQ,EAEb,KAAK,kBAAkB,EACvB,KAAK,cAAc,EAIpB,MAAM,gBAAgB,CAAC;AAExB;2EAC2E;AAC3E,MAAM,MAAM,aAAa,GACrB,mBAAmB,GACnB,kBAAkB,GAClB,gCAAgC,GAChC,mBAAmB,GACnB,uBAAuB,GACvB,kBAAkB,GAClB,kBAAkB,GAClB,qBAAqB,GACrB,WAAW,GACX,iBAAiB,GACjB,0BAA0B,GAC1B,0BAA0B,GAC1B,oBAAoB,GACpB,mBAAmB,GACnB,iBAAiB,GACjB,eAAe,GACf,YAAY,GACZ,wBAAwB,GACxB,yBAAyB,GACzB,qBAAqB,GACrB,6BAA6B,GAC7B,qBAAqB;AACvB;;yDAEyD;GACvD,gBAAgB,CAAC;AAErB;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,aAAa,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB;IAChC,2FAA2F;IAC3F,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,kBAAkB,CAAC;IAC3D,sFAAsF;IACtF,aAAa,CACX,GAAG,EAAE,kBAAkB,EACvB,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,WAAW,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,GACnD,kBAAkB,CAAC;CACvB;AAED,oGAAoG;AACpG,MAAM,WAAW,yBAAyB;IACxC;;sEAEkE;IAClE,KAAK,EAAE,QAAQ,CAAC;IAChB,oFAAoF;IACpF,SAAS,EAAE,MAAM,CAAC;IAClB;;;;;;;OAOG;IACH,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;CACvC;AA0CD;;;oDAGoD;AACpD,eAAO,MAAM,wBAAwB,EAAE,iBAAwD,CAAC;AA+9DhG;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,yBAAyB,GAAG,sBAAsB,EAAE,CA0C/F"}
|