@cotal-ai/core 0.22.0 → 0.24.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/checkpoint-answer.d.ts +46 -0
- package/dist/checkpoint-answer.d.ts.map +1 -0
- package/dist/checkpoint-answer.js +112 -0
- package/dist/checkpoint-answer.js.map +1 -0
- package/dist/endpoint-binding.d.ts +61 -0
- package/dist/endpoint-binding.d.ts.map +1 -1
- package/dist/endpoint-binding.js +109 -0
- package/dist/endpoint-binding.js.map +1 -1
- package/dist/endpoint-checkpoint.d.ts +21 -0
- package/dist/endpoint-checkpoint.d.ts.map +1 -1
- package/dist/endpoint-checkpoint.js +41 -3
- package/dist/endpoint-checkpoint.js.map +1 -1
- package/dist/endpoint-records.d.ts.map +1 -1
- package/dist/endpoint-records.js +86 -0
- package/dist/endpoint-records.js.map +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/provision.d.ts.map +1 -1
- package/dist/provision.js +7 -2
- package/dist/provision.js.map +1 -1
- package/dist/run-journal.d.ts +337 -0
- package/dist/run-journal.d.ts.map +1 -0
- package/dist/run-journal.js +703 -0
- package/dist/run-journal.js.map +1 -0
- package/dist/run-migration.d.ts +85 -0
- package/dist/run-migration.d.ts.map +1 -0
- package/dist/run-migration.js +201 -0
- package/dist/run-migration.js.map +1 -0
- package/dist/run-notice.d.ts +84 -0
- package/dist/run-notice.d.ts.map +1 -0
- package/dist/run-notice.js +212 -0
- package/dist/run-notice.js.map +1 -0
- package/dist/run-record.d.ts +104 -0
- package/dist/run-record.d.ts.map +1 -0
- package/dist/run-record.js +58 -0
- package/dist/run-record.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-journal.js","sourceRoot":"","sources":["../src/run-journal.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import type { KV } from "@nats-io/kv";
|
|
2
|
+
/** One journal entry the new source no longer reaches, as the record keeps it. */
|
|
3
|
+
export interface MigrationOrphanValue {
|
|
4
|
+
readonly step: string;
|
|
5
|
+
readonly kind: string;
|
|
6
|
+
readonly verdict: "ignored" | "kept" | "rejected";
|
|
7
|
+
readonly code?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface RunMigrationSpecValue {
|
|
10
|
+
readonly v: 1;
|
|
11
|
+
readonly run: string;
|
|
12
|
+
/**
|
|
13
|
+
* The program hash the run was on, as the CALLER states it.
|
|
14
|
+
*
|
|
15
|
+
* Optional, and the reason is a gap rather than a preference: a program-hash pin on the run
|
|
16
|
+
* record is declared and unbuilt, and `RunSpecValue` deliberately never invented one, so nothing
|
|
17
|
+
* here can VERIFY this. Recorded as the caller's claim when supplied and absent when not — an
|
|
18
|
+
* unverifiable field labelled as such beats one this file computes from a source it was never
|
|
19
|
+
* given.
|
|
20
|
+
*/
|
|
21
|
+
readonly fromHash?: string;
|
|
22
|
+
/** The hash of the source the run is moving TO. Computed from that source, so not a claim. */
|
|
23
|
+
readonly toHash: string;
|
|
24
|
+
readonly at: number;
|
|
25
|
+
/** How many recorded entries the walk accounted for. */
|
|
26
|
+
readonly consumedThrough: number;
|
|
27
|
+
readonly orphans: readonly MigrationOrphanValue[];
|
|
28
|
+
/** What the caller overrode, verbatim, because an override is a person's decision. */
|
|
29
|
+
readonly overrides: readonly string[];
|
|
30
|
+
readonly actor: string;
|
|
31
|
+
}
|
|
32
|
+
export interface RunMigrationStatusValue {
|
|
33
|
+
readonly v: 1;
|
|
34
|
+
/** When the run actually advanced. */
|
|
35
|
+
readonly appliedAt: number;
|
|
36
|
+
/** WHICH driver advanced it, so an application can be traced to the holder that made it. */
|
|
37
|
+
readonly by: string;
|
|
38
|
+
readonly observedSpecRevision: number;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* The id one migration is filed under: a digest of the report itself.
|
|
42
|
+
*
|
|
43
|
+
* Everything the decision consists of goes in, so a re-run of the same check over the same journal
|
|
44
|
+
* re-derives the same id and its create-only write lands on its own record. Change what was found
|
|
45
|
+
* or what was overridden and it is a different migration, which is exactly right — it is.
|
|
46
|
+
*/
|
|
47
|
+
export declare function runMigrationId(value: Omit<RunMigrationSpecValue, "at">): string;
|
|
48
|
+
/**
|
|
49
|
+
* File one migration's report, create-only.
|
|
50
|
+
*
|
|
51
|
+
* An identical retry is this attempt's own earlier write and is not a conflict. Differing content
|
|
52
|
+
* under one id would mean two decisions claiming one identity, which is refused rather than
|
|
53
|
+
* overwritten: a migration that could be rewritten would be a draft, and what it records is what a
|
|
54
|
+
* person authorised to discard.
|
|
55
|
+
*/
|
|
56
|
+
export declare function writeRunMigration(kv: KV, endpoint: string, migrationId: string, value: RunMigrationSpecValue): Promise<{
|
|
57
|
+
key: string;
|
|
58
|
+
created: boolean;
|
|
59
|
+
}>;
|
|
60
|
+
export interface RunMigrationRead {
|
|
61
|
+
readonly migrationId: string;
|
|
62
|
+
readonly spec: RunMigrationSpecValue;
|
|
63
|
+
readonly specRevision: number;
|
|
64
|
+
readonly applied?: RunMigrationStatusValue;
|
|
65
|
+
}
|
|
66
|
+
/** Read one migration with its application, or `undefined` when nothing was filed under this id. */
|
|
67
|
+
export declare function readRunMigration(kv: KV, endpoint: string, runId: string, migrationId: string): Promise<RunMigrationRead | undefined>;
|
|
68
|
+
/**
|
|
69
|
+
* Every migration filed on one run, oldest first.
|
|
70
|
+
*
|
|
71
|
+
* ORDER IS THE POINT of an append-only history: a run's second migration is only interpretable
|
|
72
|
+
* beside its first. `at` decides, then the id, so two filed in the same millisecond still come back
|
|
73
|
+
* in one fixed order rather than in whatever order the store enumerated its keys.
|
|
74
|
+
*/
|
|
75
|
+
export declare function listRunMigrations(kv: KV, endpoint: string, runId: string): Promise<RunMigrationRead[]>;
|
|
76
|
+
/**
|
|
77
|
+
* Record that a driver applied this migration.
|
|
78
|
+
*
|
|
79
|
+
* **The create-only CAS is the arbiter and it is the only one.** Two drivers racing to apply one
|
|
80
|
+
* migration both read no status and both write; the store decides, and the loser gets a loud
|
|
81
|
+
* conflict rather than a second belief about a run that moved once. A "has it been applied?" read
|
|
82
|
+
* before the write would be a fast path that lies under exactly the race it looks like it prevents.
|
|
83
|
+
*/
|
|
84
|
+
export declare function markRunMigrationApplied(kv: KV, endpoint: string, runId: string, migrationId: string, by: string, at: number): Promise<void>;
|
|
85
|
+
//# sourceMappingURL=run-migration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-migration.d.ts","sourceRoot":"","sources":["../src/run-migration.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAatC,kFAAkF;AAClF,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,SAAS,GAAG,MAAM,GAAG,UAAU,CAAC;IAClD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;IACd,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB;;;;;;;;OAQG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,8FAA8F;IAC9F,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,wDAAwD;IACxD,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,SAAS,oBAAoB,EAAE,CAAC;IAClD,sFAAsF;IACtF,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;IACd,sCAAsC;IACtC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,4FAA4F;IAC5F,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;CACvC;AAcD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,qBAAqB,EAAE,IAAI,CAAC,GAAG,MAAM,CAE/E;AAkDD;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACrC,EAAE,EAAE,EAAE,EACN,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,qBAAqB,GAC3B,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAgB5C;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAC;IACrC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,uBAAuB,CAAC;CAC5C;AAED,oGAAoG;AACpG,wBAAsB,gBAAgB,CACpC,EAAE,EAAE,EAAE,EACN,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAcvC;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,EAAE,EAAE,EAAE,EACN,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAkB7B;AAED;;;;;;;GAOG;AACH,wBAAsB,uBAAuB,CAC3C,EAAE,EAAE,EAAE,EACN,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,IAAI,CAAC,CA+Bf"}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The MIGRATION record: a run's move onto edited source, and who authorised what it discarded.
|
|
3
|
+
*
|
|
4
|
+
* **Why it is its own kind rather than a field on the run.** A records-KV record has two halves and
|
|
5
|
+
* a migration fits neither. The spec half is what a thing IS, decided once and never re-decided —
|
|
6
|
+
* a run's pins. The status half is what it is DOING, last-value-wins, rewritten by the driver on
|
|
7
|
+
* every state change. A migration is append-only HISTORY with an actor on it, and a run can be
|
|
8
|
+
* migrated more than once: putting it in the status half would let the second migration erase the
|
|
9
|
+
* first, and putting it in the spec half would collide with what the spec already says.
|
|
10
|
+
*
|
|
11
|
+
* **The id is derived from the report's own content.** A migration is decided by a dry walk that a
|
|
12
|
+
* crash can force to be re-run, so the same decision must land on the same record instead of filing
|
|
13
|
+
* a second one — and a counter would need somebody to allocate it, which is a second arbiter for a
|
|
14
|
+
* fact the content already determines. Identical retry, identical id, create-only write: the same
|
|
15
|
+
* shape as a notice, for the same reason.
|
|
16
|
+
*
|
|
17
|
+
* **Deciding and applying are separate, and the CAS is the arbiter of the second.** The spec is the
|
|
18
|
+
* report — what the check found, immutable. The status is the COMMIT: which driver actually
|
|
19
|
+
* advanced the run. Two drivers racing to apply one migration both find no status and both write;
|
|
20
|
+
* the store decides and the loser gets a conflict rather than a second belief.
|
|
21
|
+
*/
|
|
22
|
+
import { createHash } from "node:crypto";
|
|
23
|
+
import { EpEnvelopeError } from "./endpoint-envelope.js";
|
|
24
|
+
import { assertIdToken } from "./endpoint-subjects.js";
|
|
25
|
+
import { RECORD_KINDS, createRecordEntry, readRecord, recordSpecKey, recordStatusKey, assertStatusValue, } from "./endpoint-records.js";
|
|
26
|
+
import { canonicalJson } from "./canonical.js";
|
|
27
|
+
const SPEC_KEYS = ["v", "run", "fromHash", "toHash", "at", "consumedThrough", "orphans", "overrides", "actor"];
|
|
28
|
+
const STATUS_KEYS = ["v", "appliedAt", "by", "observedSpecRevision"];
|
|
29
|
+
function qualifiers(endpoint, runId, migrationId) {
|
|
30
|
+
return [endpoint, runId, migrationId];
|
|
31
|
+
}
|
|
32
|
+
/** base64url of the sha256, truncated to 43 — an `<id-token>` by construction, as elsewhere. */
|
|
33
|
+
function digestId(canonical) {
|
|
34
|
+
return createHash("sha256").update(canonical, "utf8").digest("base64url").slice(0, 43);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* The id one migration is filed under: a digest of the report itself.
|
|
38
|
+
*
|
|
39
|
+
* Everything the decision consists of goes in, so a re-run of the same check over the same journal
|
|
40
|
+
* re-derives the same id and its create-only write lands on its own record. Change what was found
|
|
41
|
+
* or what was overridden and it is a different migration, which is exactly right — it is.
|
|
42
|
+
*/
|
|
43
|
+
export function runMigrationId(value) {
|
|
44
|
+
return digestId(canonicalJson(value));
|
|
45
|
+
}
|
|
46
|
+
function parseSpec(raw, key) {
|
|
47
|
+
if (raw === null || typeof raw !== "object" || Array.isArray(raw))
|
|
48
|
+
throw new EpEnvelopeError("internal", `migration ${key} is not an object; garbled state never authorizes`);
|
|
49
|
+
const o = raw;
|
|
50
|
+
for (const k of Object.keys(o))
|
|
51
|
+
if (!SPEC_KEYS.includes(k))
|
|
52
|
+
throw new EpEnvelopeError("internal", `migration ${key} carries the unknown field "${k}"; record schemas are closed`);
|
|
53
|
+
if (o.v !== 1 || typeof o.run !== "string" || typeof o.toHash !== "string" || o.toHash.length === 0
|
|
54
|
+
|| typeof o.actor !== "string" || o.actor.length === 0
|
|
55
|
+
|| typeof o.at !== "number" || !Number.isSafeInteger(o.at) || o.at < 0
|
|
56
|
+
|| typeof o.consumedThrough !== "number" || !Number.isSafeInteger(o.consumedThrough) || o.consumedThrough < 0
|
|
57
|
+
|| !Array.isArray(o.orphans) || !Array.isArray(o.overrides)
|
|
58
|
+
|| (o.fromHash !== undefined && typeof o.fromHash !== "string")) {
|
|
59
|
+
throw new EpEnvelopeError("internal", `migration ${key} is malformed; garbled state never authorizes`);
|
|
60
|
+
}
|
|
61
|
+
return {
|
|
62
|
+
v: 1,
|
|
63
|
+
run: o.run,
|
|
64
|
+
...(o.fromHash !== undefined ? { fromHash: o.fromHash } : {}),
|
|
65
|
+
toHash: o.toHash,
|
|
66
|
+
at: o.at,
|
|
67
|
+
consumedThrough: o.consumedThrough,
|
|
68
|
+
orphans: o.orphans,
|
|
69
|
+
overrides: o.overrides,
|
|
70
|
+
actor: o.actor,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
function parseStatus(raw, key) {
|
|
74
|
+
if (raw === null || typeof raw !== "object" || Array.isArray(raw))
|
|
75
|
+
throw new EpEnvelopeError("internal", `migration status ${key} is not an object; garbled state never authorizes`);
|
|
76
|
+
const o = raw;
|
|
77
|
+
for (const k of Object.keys(o))
|
|
78
|
+
if (!STATUS_KEYS.includes(k))
|
|
79
|
+
throw new EpEnvelopeError("internal", `migration status ${key} carries the unknown field "${k}"; record schemas are closed`);
|
|
80
|
+
if (o.v !== 1 || typeof o.appliedAt !== "number" || !Number.isSafeInteger(o.appliedAt) || o.appliedAt < 0
|
|
81
|
+
|| typeof o.by !== "string" || o.by.length === 0)
|
|
82
|
+
throw new EpEnvelopeError("internal", `migration status ${key} is malformed; garbled state never authorizes`);
|
|
83
|
+
return {
|
|
84
|
+
v: 1,
|
|
85
|
+
appliedAt: o.appliedAt,
|
|
86
|
+
by: o.by,
|
|
87
|
+
observedSpecRevision: o.observedSpecRevision,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* File one migration's report, create-only.
|
|
92
|
+
*
|
|
93
|
+
* An identical retry is this attempt's own earlier write and is not a conflict. Differing content
|
|
94
|
+
* under one id would mean two decisions claiming one identity, which is refused rather than
|
|
95
|
+
* overwritten: a migration that could be rewritten would be a draft, and what it records is what a
|
|
96
|
+
* person authorised to discard.
|
|
97
|
+
*/
|
|
98
|
+
export async function writeRunMigration(kv, endpoint, migrationId, value) {
|
|
99
|
+
assertIdToken(migrationId, "migrationId");
|
|
100
|
+
const key = recordSpecKey(RECORD_KINDS.migration, qualifiers(endpoint, value.run, migrationId));
|
|
101
|
+
try {
|
|
102
|
+
await createRecordEntry(kv, key, value);
|
|
103
|
+
return { key, created: true };
|
|
104
|
+
}
|
|
105
|
+
catch (e) {
|
|
106
|
+
if (!(e instanceof EpEnvelopeError && e.code === "conflict"))
|
|
107
|
+
throw e;
|
|
108
|
+
const existing = await kv.get(key);
|
|
109
|
+
if (!existing || existing.operation !== "PUT")
|
|
110
|
+
throw new EpEnvelopeError("internal", `migration ${key} lost its create CAS but is not readable; reconcile the store`);
|
|
111
|
+
const parsed = parseSpec(JSON.parse(new TextDecoder().decode(existing.value)), key);
|
|
112
|
+
if (canonicalJson(parsed) !== canonicalJson(value))
|
|
113
|
+
throw new EpEnvelopeError("conflict", `migration ${key} already exists with a different report; a migration id is derived from what the check found, so a differing one under the same id is never overwritten`);
|
|
114
|
+
return { key, created: false };
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/** Read one migration with its application, or `undefined` when nothing was filed under this id. */
|
|
118
|
+
export async function readRunMigration(kv, endpoint, runId, migrationId) {
|
|
119
|
+
const q = qualifiers(endpoint, runId, migrationId);
|
|
120
|
+
const merged = await readRecord(kv, RECORD_KINDS.migration, q);
|
|
121
|
+
if (merged === undefined)
|
|
122
|
+
return undefined;
|
|
123
|
+
const spec = parseSpec(merged.spec.value, recordSpecKey(RECORD_KINDS.migration, q));
|
|
124
|
+
const status = merged.status === undefined
|
|
125
|
+
? undefined
|
|
126
|
+
: parseStatus(merged.status.value, recordStatusKey(RECORD_KINDS.migration, q));
|
|
127
|
+
return {
|
|
128
|
+
migrationId,
|
|
129
|
+
spec,
|
|
130
|
+
specRevision: merged.spec.revision,
|
|
131
|
+
...(status !== undefined ? { applied: status } : {}),
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Every migration filed on one run, oldest first.
|
|
136
|
+
*
|
|
137
|
+
* ORDER IS THE POINT of an append-only history: a run's second migration is only interpretable
|
|
138
|
+
* beside its first. `at` decides, then the id, so two filed in the same millisecond still come back
|
|
139
|
+
* in one fixed order rather than in whatever order the store enumerated its keys.
|
|
140
|
+
*/
|
|
141
|
+
export async function listRunMigrations(kv, endpoint, runId) {
|
|
142
|
+
const prefix = recordSpecKey(RECORD_KINDS.migration, qualifiers(endpoint, runId, "m")).slice(0, -"m.spec".length);
|
|
143
|
+
// ONE wildcard token: only the migration id varies under this prefix, and a KV filter's `*`
|
|
144
|
+
// matches exactly one token — one too few matches a key shape that does not exist and silently
|
|
145
|
+
// returns nothing.
|
|
146
|
+
const seen = await kv.keys(`${prefix}*.spec`);
|
|
147
|
+
const ids = [];
|
|
148
|
+
for await (const key of seen) {
|
|
149
|
+
const parts = key.split(".");
|
|
150
|
+
ids.push(parts[parts.length - 2]);
|
|
151
|
+
}
|
|
152
|
+
const found = [];
|
|
153
|
+
for (const id of ids) {
|
|
154
|
+
const one = await readRunMigration(kv, endpoint, runId, id);
|
|
155
|
+
if (one !== undefined)
|
|
156
|
+
found.push(one);
|
|
157
|
+
}
|
|
158
|
+
found.sort((a, b) => (a.spec.at - b.spec.at) || (a.migrationId < b.migrationId ? -1 : a.migrationId > b.migrationId ? 1 : 0));
|
|
159
|
+
return found;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Record that a driver applied this migration.
|
|
163
|
+
*
|
|
164
|
+
* **The create-only CAS is the arbiter and it is the only one.** Two drivers racing to apply one
|
|
165
|
+
* migration both read no status and both write; the store decides, and the loser gets a loud
|
|
166
|
+
* conflict rather than a second belief about a run that moved once. A "has it been applied?" read
|
|
167
|
+
* before the write would be a fast path that lies under exactly the race it looks like it prevents.
|
|
168
|
+
*/
|
|
169
|
+
export async function markRunMigrationApplied(kv, endpoint, runId, migrationId, by, at) {
|
|
170
|
+
const q = qualifiers(endpoint, runId, migrationId);
|
|
171
|
+
const specKey = recordSpecKey(RECORD_KINDS.migration, q);
|
|
172
|
+
const statusKey = recordStatusKey(RECORD_KINDS.migration, q);
|
|
173
|
+
const merged = await readRecord(kv, RECORD_KINDS.migration, q);
|
|
174
|
+
if (merged === undefined)
|
|
175
|
+
throw new EpEnvelopeError("failed-precondition", `no migration is filed at ${specKey}; an application names the migration it applied`);
|
|
176
|
+
const value = assertStatusValue({
|
|
177
|
+
v: 1,
|
|
178
|
+
appliedAt: at,
|
|
179
|
+
by,
|
|
180
|
+
observedSpecRevision: merged.spec.revision,
|
|
181
|
+
});
|
|
182
|
+
try {
|
|
183
|
+
await createRecordEntry(kv, statusKey, value);
|
|
184
|
+
}
|
|
185
|
+
catch (e) {
|
|
186
|
+
if (!(e instanceof EpEnvelopeError && e.code === "conflict"))
|
|
187
|
+
throw e;
|
|
188
|
+
// The CAS lost, and only NOW is anything read — the same shape as the notice writer, and for
|
|
189
|
+
// the same reason: a "has it been applied?" check before the write would be a fast path that
|
|
190
|
+
// lies under exactly the race it looks like it prevents. What the read decides is who lost. A
|
|
191
|
+
// driver that finds its OWN application is looking at its own earlier attempt, which is the
|
|
192
|
+
// retry a crash between the two writes forces, and that is not a conflict. A different driver
|
|
193
|
+
// is the real race, and it hears about it.
|
|
194
|
+
const existing = await readRecord(kv, RECORD_KINDS.migration, q);
|
|
195
|
+
const already = existing?.status === undefined ? undefined : parseStatus(existing.status.value, statusKey);
|
|
196
|
+
if (already?.by === by)
|
|
197
|
+
return;
|
|
198
|
+
throw new EpEnvelopeError("conflict", `migration ${specKey} was already applied by ${already?.by ?? "another driver"}; a run moves once, and the store decides which driver moved it`);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
//# sourceMappingURL=run-migration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-migration.js","sourceRoot":"","sources":["../src/run-migration.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import type { KV } from "@nats-io/kv";
|
|
2
|
+
/** The bounded decision itself. The bound is the language's (L3043) and is enforced before a
|
|
3
|
+
* notice is ever written; this type is the shape it arrives in. */
|
|
4
|
+
export interface RunNoticeFact {
|
|
5
|
+
readonly decision: string;
|
|
6
|
+
readonly outcome: string;
|
|
7
|
+
readonly detail?: Readonly<Record<string, string | number | boolean>>;
|
|
8
|
+
}
|
|
9
|
+
export interface RunNoticeSpecValue {
|
|
10
|
+
readonly v: 1;
|
|
11
|
+
readonly run: string;
|
|
12
|
+
/** The step that decided it, in the journal's own key vocabulary (`/notify:told#0`). */
|
|
13
|
+
readonly step: string;
|
|
14
|
+
/** The addressee's agent NAME, kept in the value because the key holds only its digest. */
|
|
15
|
+
readonly addressee: string;
|
|
16
|
+
readonly fact: RunNoticeFact;
|
|
17
|
+
readonly at: number;
|
|
18
|
+
}
|
|
19
|
+
export interface RunNoticeStatusValue {
|
|
20
|
+
readonly v: 1;
|
|
21
|
+
/** When the addressee's turn actually carried it. */
|
|
22
|
+
readonly consumedAt: number;
|
|
23
|
+
/** WHICH turn carried it, so a consumption can be traced to the goal that did it. */
|
|
24
|
+
readonly by: string;
|
|
25
|
+
readonly observedSpecRevision: number;
|
|
26
|
+
}
|
|
27
|
+
/** The key token standing for an agent. Derived from the name, never the name itself. */
|
|
28
|
+
export declare function noticeAddresseeId(agent: string): string;
|
|
29
|
+
/**
|
|
30
|
+
* The id one notice is filed under.
|
|
31
|
+
*
|
|
32
|
+
* Derived from the step's own request id and the addressee, so the same `notify` call re-run after
|
|
33
|
+
* a crash re-derives exactly the same ids and its create-only writes land on their own records. One
|
|
34
|
+
* call to N agents writes N notices, and the addressee is what separates them.
|
|
35
|
+
*/
|
|
36
|
+
export declare function runNoticeId(requestId: string, addressee: string): string;
|
|
37
|
+
/**
|
|
38
|
+
* File one notice, create-only.
|
|
39
|
+
*
|
|
40
|
+
* A retry of the same notice is not a conflict: the id is derived from the step's request id and
|
|
41
|
+
* the addressee, so an existing record with identical bytes is this run's own earlier attempt.
|
|
42
|
+
* Different bytes under the same id would mean two different decisions claiming one identity, which
|
|
43
|
+
* is refused rather than overwritten — a notice that could be rewritten would be a message.
|
|
44
|
+
*/
|
|
45
|
+
export declare function writeRunNotice(kv: KV, endpoint: string, noticeId: string, value: RunNoticeSpecValue): Promise<{
|
|
46
|
+
key: string;
|
|
47
|
+
created: boolean;
|
|
48
|
+
}>;
|
|
49
|
+
export interface RunNoticeRead {
|
|
50
|
+
readonly noticeId: string;
|
|
51
|
+
readonly spec: RunNoticeSpecValue;
|
|
52
|
+
readonly specRevision: number;
|
|
53
|
+
readonly consumed?: RunNoticeStatusValue;
|
|
54
|
+
}
|
|
55
|
+
/** Read one notice with its consumption, or `undefined` when nothing was filed under this id. */
|
|
56
|
+
export declare function readRunNotice(kv: KV, endpoint: string, runId: string, addressee: string, noticeId: string): Promise<RunNoticeRead | undefined>;
|
|
57
|
+
/**
|
|
58
|
+
* Every notice addressed to one agent on one run, oldest first.
|
|
59
|
+
*
|
|
60
|
+
* ORDER IS PART OF THE CONTRACT, because the render is a table a person or an agent reads top to
|
|
61
|
+
* bottom: `at` first, then the notice id, so two notices filed in the same millisecond still come
|
|
62
|
+
* back in one fixed order rather than in whatever order the store enumerated its keys.
|
|
63
|
+
*/
|
|
64
|
+
export declare function listRunNotices(kv: KV, endpoint: string, runId: string, addressee: string): Promise<RunNoticeRead[]>;
|
|
65
|
+
/**
|
|
66
|
+
* Every notice filed on one RUN, whoever it was addressed to, oldest first.
|
|
67
|
+
*
|
|
68
|
+
* The migrate rule asks a question the journal cannot answer on its own: a `notify` entry
|
|
69
|
+
* records an input HASH, not the agents it addressed, so "has this orphaned notify been consumed?"
|
|
70
|
+
* cannot be asked per addressee. It is asked per RUN, and each notice's own `step` says which entry
|
|
71
|
+
* it came from — which is why the step is in the value rather than only in the key.
|
|
72
|
+
*/
|
|
73
|
+
export declare function listRunNoticesForRun(kv: KV, endpoint: string, runId: string): Promise<RunNoticeRead[]>;
|
|
74
|
+
/**
|
|
75
|
+
* Record that a turn carried this notice.
|
|
76
|
+
*
|
|
77
|
+
* **The create-only CAS is the arbiter, and it is the only one.** Two turns racing to claim one
|
|
78
|
+
* notice both read no status and both write; the store decides, and the loser gets a loud conflict.
|
|
79
|
+
* A "has it been consumed already?" check before the write would be a fast path that lies under
|
|
80
|
+
* exactly the race it looks like it is preventing, so there is one gate rather than two — which
|
|
81
|
+
* turn delivered a notice is a fact about something that happened once.
|
|
82
|
+
*/
|
|
83
|
+
export declare function markRunNoticeConsumed(kv: KV, endpoint: string, runId: string, addressee: string, noticeId: string, by: string, at: number): Promise<void>;
|
|
84
|
+
//# sourceMappingURL=run-notice.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-notice.d.ts","sourceRoot":"","sources":["../src/run-notice.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAatC;oEACoE;AACpE,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;CACvE;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;IACd,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,wFAAwF;IACxF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,2FAA2F;IAC3F,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;IACd,qDAAqD;IACrD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,qFAAqF;IACrF,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;CACvC;AAeD,yFAAyF;AACzF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIvD;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAExE;AA6CD;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAClC,EAAE,EAAE,EAAE,EACN,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAiB5C;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,oBAAoB,CAAC;CAC1C;AAED,iGAAiG;AACjG,wBAAsB,aAAa,CACjC,EAAE,EAAE,EAAE,EACN,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAEpC;AAkBD;;;;;;GAMG;AACH,wBAAsB,cAAc,CAClC,EAAE,EAAE,EAAE,EACN,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,aAAa,EAAE,CAAC,CAK1B;AAED;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CACxC,EAAE,EAAE,EAAE,EACN,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,aAAa,EAAE,CAAC,CAK1B;AAsBD;;;;;;;;GAQG;AACH,wBAAsB,qBAAqB,CACzC,EAAE,EAAE,EAAE,EACN,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,IAAI,CAAC,CAcf"}
|