@secondlayer/shared 11.11.0 → 11.11.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.
- package/dist/src/coverage/index.js +5 -3
- package/dist/src/coverage/index.js.map +3 -3
- package/dist/src/db/index.d.ts +18 -1
- package/dist/src/db/index.js +4 -1
- package/dist/src/db/index.js.map +3 -3
- package/dist/src/db/queries/chain-reorgs.js.map +2 -2
- package/dist/src/index-http.d.ts +18 -6
- package/dist/src/index-http.js +14 -3
- package/dist/src/index-http.js.map +3 -3
- package/dist/src/index.d.ts +18 -1
- package/dist/src/index.js +4 -1
- package/dist/src/index.js.map +3 -3
- package/dist/src/queue/listener.d.ts +14 -6
- package/dist/src/queue/listener.js +964 -5
- package/dist/src/queue/listener.js.map +12 -4
- package/package.json +1 -1
|
@@ -956,13 +956,15 @@ async function upsertRegistry(tx, stageId) {
|
|
|
956
956
|
async function writeCheckpoint(tx, decoderName, cursor) {
|
|
957
957
|
if (cursor === null)
|
|
958
958
|
return;
|
|
959
|
-
await tx.insertInto("decoder_checkpoints").values({
|
|
959
|
+
const written = await tx.insertInto("decoder_checkpoints").values({
|
|
960
960
|
decoder_name: decoderName,
|
|
961
961
|
last_cursor: cursor
|
|
962
962
|
}).onConflict((oc) => oc.column("decoder_name").doUpdateSet({
|
|
963
963
|
last_cursor: cursor,
|
|
964
964
|
updated_at: new Date
|
|
965
|
-
})).execute();
|
|
965
|
+
}).where("decoder_checkpoints.last_cursor", "is distinct from", cursor)).returning("last_cursor").execute();
|
|
966
|
+
if (written.length === 0)
|
|
967
|
+
return;
|
|
966
968
|
await sql`SELECT pg_notify('index:tip', ${decoderName})`.execute(tx);
|
|
967
969
|
}
|
|
968
970
|
async function writeReceipts(tx, stageId, runId, receipts) {
|
|
@@ -1467,5 +1469,5 @@ export {
|
|
|
1467
1469
|
versionsEqual
|
|
1468
1470
|
};
|
|
1469
1471
|
|
|
1470
|
-
//# debugId=
|
|
1472
|
+
//# debugId=67A673CA618D58BA64756E2164756E21
|
|
1471
1473
|
//# sourceMappingURL=index.js.map
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"/**\n * Coverage evaluator — one library for stage state.\n *\n * Pure. Callers assemble evidence; this file does not touch the database.\n * `complete` is coverage through the recorded target, not currency.\n * `caught_up` additionally requires a fresh source tip and coverage through\n * the finalized boundary. `complete_through` is never conflated with\n * `source_tip`.\n */\n\nimport { decodeStreamsCursor } from \"../streams-cursor.ts\";\nimport {\n\ttype CoverageRange,\n\ttype FailureClass,\n\ttype FailureUnit,\n\ttype NativeClock,\n\ttype RepairMode,\n\ttype RetryState,\n\ttype RunStatus,\n\ttype StageKind,\n\trangeIsOrdered,\n} from \"./constraints.ts\";\n\nexport const COVERAGE_REPORT_SCHEMA_VERSION = 1 as const;\n\nexport const COVERAGE_STATES = [\n\t\"complete\",\n\t\"syncing\",\n\t\"lagging\",\n\t\"gap\",\n\t\"stale\",\n\t\"failed\",\n\t\"unverified_import\",\n\t\"unanchored\",\n\t\"source_unavailable\",\n\t\"out_of_scope\",\n\t\"disabled\",\n] as const;\nexport type CoverageState = (typeof COVERAGE_STATES)[number];\n\nconst HARD_DEP_STATES = new Set<CoverageState>([\n\t\"disabled\",\n\t\"failed\",\n\t\"source_unavailable\",\n\t\"out_of_scope\",\n\t\"unverified_import\",\n\t\"unanchored\",\n\t\"gap\",\n]);\n\nconst DEFAULT_MAX_BLOCKS_BEHIND_FINALIZED = 256;\nconst DEFAULT_MAX_SOURCE_AGE_SECONDS = 300;\n\nexport type BootstrapSource = \"archive\" | \"genesis\" | \"import\";\n\nexport type SyncScope = {\n\tnetwork: string;\n\tstart_height: number;\n\ttarget_height: number | null;\n\tbootstrap: {\n\t\tsource: BootstrapSource;\n\t\tmanifest_digest: string | null;\n\t\tgenesis_hash: string | null;\n\t};\n};\n\nexport type StageDeclaration = {\n\tid: string;\n\tkind: StageKind;\n\tdepends_on: string | null;\n\tnative_clock: NativeClock;\n\tproducer_version: string;\n\trepair_mode: RepairMode;\n\tenabled: boolean;\n};\n\nexport type StageRunView = {\n\tstage_id: string;\n\tcode_hash: string;\n\tconfig_hash: string;\n\thandler_hash: string | null;\n\ttarget_height: number | null;\n\ttarget_cursor: string | null;\n\tstatus: RunStatus;\n\tcomplete_through: number | null;\n};\n\nexport type OpenFailure = {\n\tunit_kind: FailureUnit;\n\tclass: FailureClass;\n\tretry_state: Exclude<RetryState, \"resolved\">;\n\tfrom_height: number | null;\n\tto_height: number | null;\n};\n\nexport type QueueCounters = {\n\taccepted: number;\n\tdecided: number;\n\tenqueued: number;\n\tdelivered: number;\n\tdead: number;\n\tfence_cursor: string | null;\n};\n\nexport type StageEvidence = {\n\tstage_id: string;\n\tranges: CoverageRange[];\n\topen_failures: OpenFailure[];\n\tcursor: string | null;\n\tqueue: QueueCounters | null;\n\tunanchored: boolean;\n\tunverified_import: boolean;\n\t/** False when this stage's native source (node, bitcoin RPC, …) is down. */\n\tsource_available: boolean;\n};\n\nexport type SourceClock = {\n\ttip_height: number | null;\n\tfinalized_height: number | null;\n\tobserved_at: string | null;\n};\n\nexport type EvaluatorOptions = {\n\tnow: Date;\n\tmaxBlocksBehindFinalized?: number;\n\tmaxSourceAgeSeconds?: number;\n};\n\nexport type EvaluatorInput = {\n\tscope: SyncScope;\n\tstages: StageDeclaration[];\n\truns: StageRunView[];\n\tevidence: StageEvidence[];\n\tsource: SourceClock;\n\toptions: EvaluatorOptions;\n};\n\nexport type StageCoverage = {\n\tstage_id: string;\n\tkind: StageKind;\n\tnative_clock: NativeClock;\n\tdepends_on: string | null;\n\tstate: CoverageState;\n\tdetail: string;\n\tcomplete_through: number | null;\n\tsource_tip: number | null;\n\tfinalized_height: number | null;\n\trecorded_target: number | null;\n\tdeclared_range: { from_height: number; to_height: number } | null;\n\tgaps: CoverageRange[];\n\tcaught_up: boolean;\n\tblocked_by: string | null;\n};\n\nexport type CoverageReport = {\n\tschema_version: typeof COVERAGE_REPORT_SCHEMA_VERSION;\n\tnetwork: string;\n\tgenerated_at: string;\n\tsource_tip: number | null;\n\tfinalized_height: number | null;\n\tstages: StageCoverage[];\n\tevaluation_order: string[];\n\tcycles: string[][];\n};\n\nexport function mergeRanges(ranges: readonly CoverageRange[]): CoverageRange[] {\n\tconst sorted = ranges\n\t\t.filter((r) => rangeIsOrdered(r.from_height, r.to_height))\n\t\t.map((r) => ({ from_height: r.from_height, to_height: r.to_height }))\n\t\t.sort((a, b) => a.from_height - b.from_height || a.to_height - b.to_height);\n\tconst out: CoverageRange[] = [];\n\tfor (const range of sorted) {\n\t\tconst last = out[out.length - 1];\n\t\tif (last && range.from_height <= last.to_height + 1) {\n\t\t\tlast.to_height = Math.max(last.to_height, range.to_height);\n\t\t} else {\n\t\t\tout.push(range);\n\t\t}\n\t}\n\treturn out;\n}\n\n/** Highest height reachable from `start` without a hole. */\nexport function contiguousThrough(\n\tranges: readonly CoverageRange[],\n\tstart: number,\n): number | null {\n\tconst merged = mergeRanges(ranges);\n\tlet through: number | null = null;\n\tlet need = start;\n\tfor (const range of merged) {\n\t\tif (range.to_height < need) continue;\n\t\tif (range.from_height > need) break;\n\t\tthrough = range.to_height;\n\t\tneed = range.to_height + 1;\n\t}\n\treturn through;\n}\n\nexport function findRangeGaps(\n\tranges: readonly CoverageRange[],\n\tfrom: number,\n\tto: number,\n): CoverageRange[] {\n\tif (to < from) return [];\n\tconst merged = mergeRanges(ranges);\n\tconst gaps: CoverageRange[] = [];\n\tlet cursor = from;\n\tfor (const range of merged) {\n\t\tif (range.to_height < from) continue;\n\t\tif (range.from_height > to) break;\n\t\tif (range.from_height > cursor) {\n\t\t\tgaps.push({\n\t\t\t\tfrom_height: cursor,\n\t\t\t\tto_height: Math.min(range.from_height - 1, to),\n\t\t\t});\n\t\t}\n\t\tcursor = Math.max(cursor, range.to_height + 1);\n\t\tif (cursor > to) break;\n\t}\n\tif (cursor <= to) {\n\t\tgaps.push({ from_height: cursor, to_height: to });\n\t}\n\treturn gaps;\n}\n\nexport function cursorHeight(cursor: string | null): number | null {\n\tif (!cursor) return null;\n\ttry {\n\t\treturn decodeStreamsCursor(cursor).block_height;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nexport function topoSort(stages: readonly StageDeclaration[]): {\n\torder: string[];\n\tcycles: string[][];\n} {\n\tconst ids = new Set(stages.map((s) => s.id));\n\tconst incoming = new Map<string, number>();\n\tconst outgoing = new Map<string, string[]>();\n\tfor (const stage of stages) {\n\t\tincoming.set(stage.id, 0);\n\t\toutgoing.set(stage.id, []);\n\t}\n\tfor (const stage of stages) {\n\t\tif (!stage.depends_on || !ids.has(stage.depends_on)) continue;\n\t\toutgoing.get(stage.depends_on)?.push(stage.id);\n\t\tincoming.set(stage.id, (incoming.get(stage.id) ?? 0) + 1);\n\t}\n\tconst queue = [...incoming.entries()]\n\t\t.filter(([, n]) => n === 0)\n\t\t.map(([id]) => id)\n\t\t.sort();\n\tconst order: string[] = [];\n\twhile (queue.length > 0) {\n\t\tconst id = queue.shift();\n\t\tif (!id) break;\n\t\torder.push(id);\n\t\tfor (const next of outgoing.get(id) ?? []) {\n\t\t\tconst left = (incoming.get(next) ?? 1) - 1;\n\t\t\tincoming.set(next, left);\n\t\t\tif (left === 0) queue.push(next);\n\t\t\tqueue.sort();\n\t\t}\n\t}\n\tconst leftover = stages.map((s) => s.id).filter((id) => !order.includes(id));\n\treturn { order, cycles: leftover.length > 0 ? [leftover.sort()] : [] };\n}\n\nfunction lastByStage<T extends { stage_id: string }>(\n\trows: readonly T[],\n): Map<string, T> {\n\tconst map = new Map<string, T>();\n\tfor (const row of rows) map.set(row.stage_id, row);\n\treturn map;\n}\n\nfunction emptyEvidence(stageId: string): StageEvidence {\n\treturn {\n\t\tstage_id: stageId,\n\t\tranges: [],\n\t\topen_failures: [],\n\t\tcursor: null,\n\t\tqueue: null,\n\t\tunanchored: false,\n\t\tunverified_import: false,\n\t\tsource_available: true,\n\t};\n}\n\nfunction declaredEnd(args: {\n\trun: StageRunView | undefined;\n\tscope: SyncScope;\n\tsource: SourceClock;\n}): number | null {\n\treturn (\n\t\targs.run?.target_height ??\n\t\targs.scope.target_height ??\n\t\targs.source.finalized_height ??\n\t\targs.source.tip_height\n\t);\n}\n\nfunction clockRanges(\n\tstage: StageDeclaration,\n\tevidence: StageEvidence,\n): {\n\tranges: CoverageRange[];\n\tinvalidCursor: boolean;\n} {\n\tif (stage.native_clock === \"block\") {\n\t\treturn { ranges: evidence.ranges, invalidCursor: false };\n\t}\n\tconst cursor =\n\t\tstage.native_clock === \"cursor\"\n\t\t\t? evidence.cursor\n\t\t\t: (evidence.queue?.fence_cursor ?? null);\n\tif (!cursor) return { ranges: evidence.ranges, invalidCursor: false };\n\tconst height = cursorHeight(cursor);\n\tif (height === null) return { ranges: evidence.ranges, invalidCursor: true };\n\treturn {\n\t\tranges: mergeRanges([\n\t\t\t...evidence.ranges,\n\t\t\t{ from_height: 0, to_height: height },\n\t\t]),\n\t\tinvalidCursor: false,\n\t};\n}\n\nfunction queueCaught(queue: QueueCounters | null): boolean {\n\tif (!queue) return false;\n\treturn (\n\t\tqueue.accepted === queue.decided &&\n\t\tqueue.delivered + queue.dead === queue.accepted\n\t);\n}\n\nfunction sourceAgeSeconds(source: SourceClock, now: Date): number | null {\n\tif (!source.observed_at) return source.tip_height === null ? null : 0;\n\tconst observed = Date.parse(source.observed_at);\n\tif (Number.isNaN(observed)) return null;\n\treturn Math.max(0, Math.round((now.getTime() - observed) / 1000));\n}\n\nfunction evaluateOne(\n\tstage: StageDeclaration,\n\tinput: EvaluatorInput,\n\trun: StageRunView | undefined,\n\tevidence: StageEvidence,\n\tdep: StageCoverage | null,\n\tmissingDep: boolean,\n\tinCycle: boolean,\n): StageCoverage {\n\tconst sourceTip = input.source.tip_height;\n\tconst finalized = input.source.finalized_height;\n\tconst recordedTarget = run?.target_height ?? input.scope.target_height;\n\tconst maxBehind =\n\t\tinput.options.maxBlocksBehindFinalized ??\n\t\tDEFAULT_MAX_BLOCKS_BEHIND_FINALIZED;\n\tconst maxAge =\n\t\tinput.options.maxSourceAgeSeconds ?? DEFAULT_MAX_SOURCE_AGE_SECONDS;\n\tconst age = sourceAgeSeconds(input.source, input.options.now);\n\tconst sourceFresh =\n\t\tsourceTip !== null && finalized !== null && (age === null || age <= maxAge);\n\n\tconst base = {\n\t\tstage_id: stage.id,\n\t\tkind: stage.kind,\n\t\tnative_clock: stage.native_clock,\n\t\tdepends_on: stage.depends_on,\n\t\tsource_tip: sourceTip,\n\t\tfinalized_height: finalized,\n\t\trecorded_target: recordedTarget,\n\t};\n\n\tconst done = (\n\t\tstate: CoverageState,\n\t\tdetail: string,\n\t\textra: Partial<StageCoverage> = {},\n\t): StageCoverage => {\n\t\tconst completeThrough = extra.complete_through ?? null;\n\t\tconst caughtUp =\n\t\t\textra.caught_up ??\n\t\t\t(state !== \"disabled\" &&\n\t\t\t\tstate !== \"failed\" &&\n\t\t\t\tstate !== \"gap\" &&\n\t\t\t\tstate !== \"out_of_scope\" &&\n\t\t\t\tstate !== \"unverified_import\" &&\n\t\t\t\tstate !== \"unanchored\" &&\n\t\t\t\tstate !== \"source_unavailable\" &&\n\t\t\t\tcompleteThrough !== null &&\n\t\t\t\tfinalized !== null &&\n\t\t\t\tcompleteThrough >= finalized &&\n\t\t\t\tsourceFresh);\n\t\treturn {\n\t\t\t...base,\n\t\t\tstate,\n\t\t\tdetail,\n\t\t\tcomplete_through: completeThrough,\n\t\t\tdeclared_range: extra.declared_range ?? null,\n\t\t\tgaps: extra.gaps ?? [],\n\t\t\tcaught_up: caughtUp,\n\t\t\tblocked_by: extra.blocked_by ?? null,\n\t\t};\n\t};\n\n\tif (!stage.enabled) {\n\t\treturn done(\"disabled\", \"stage is disabled\");\n\t}\n\tif (inCycle) {\n\t\treturn done(\"failed\", \"dependency cycle\");\n\t}\n\tif (missingDep) {\n\t\treturn done(\"failed\", `depends on unknown stage ${stage.depends_on}`);\n\t}\n\tif (dep && HARD_DEP_STATES.has(dep.state)) {\n\t\treturn done(dep.state, `blocked by ${dep.stage_id}: ${dep.detail}`, {\n\t\t\tcomplete_through: dep.complete_through,\n\t\t\tblocked_by: dep.stage_id,\n\t\t\tdeclared_range: dep.declared_range,\n\t\t\tgaps: dep.gaps,\n\t\t\tcaught_up: false,\n\t\t});\n\t}\n\n\tif (evidence.open_failures.length > 0 || run?.status === \"failed\") {\n\t\tconst first = evidence.open_failures[0];\n\t\treturn done(\n\t\t\t\"failed\",\n\t\t\tfirst\n\t\t\t\t? `open ${first.class} failure (${first.retry_state})`\n\t\t\t\t: \"run marked failed\",\n\t\t);\n\t}\n\tif (evidence.unverified_import || run?.status === \"unverified_import\") {\n\t\treturn done(\"unverified_import\", \"imported data has not been audited\");\n\t}\n\tif (evidence.unanchored || run?.status === \"unanchored\") {\n\t\treturn done(\n\t\t\t\"unanchored\",\n\t\t\t\"receipts are missing a block hash or node anchor\",\n\t\t);\n\t}\n\tif (!evidence.source_available) {\n\t\treturn done(\"source_unavailable\", \"native source is unavailable\");\n\t}\n\n\tconst { ranges, invalidCursor } = clockRanges(stage, evidence);\n\tif (invalidCursor) {\n\t\treturn done(\"failed\", \"native clock cursor is not a valid streams cursor\");\n\t}\n\n\tconst end = declaredEnd({ run, scope: input.scope, source: input.source });\n\tif (end !== null && end < input.scope.start_height) {\n\t\treturn done(\"out_of_scope\", \"recorded target is below the instance start\");\n\t}\n\n\tconst sourceSilent =\n\t\tsourceTip === null && finalized === null && recordedTarget === null;\n\tif (sourceSilent) {\n\t\treturn done(\n\t\t\t\"source_unavailable\",\n\t\t\t\"the chain source could not be reached, so the declared range is unknown\",\n\t\t);\n\t}\n\n\tif (end === null) {\n\t\treturn done(\n\t\t\t\"source_unavailable\",\n\t\t\t\"no recorded target and the source tip is unknown\",\n\t\t);\n\t}\n\n\tconst declaredRange = {\n\t\tfrom_height: input.scope.start_height,\n\t\tto_height: end,\n\t};\n\tlet completeThrough = contiguousThrough(ranges, input.scope.start_height);\n\tif (dep?.complete_through !== null && dep?.complete_through !== undefined) {\n\t\tif (completeThrough === null) {\n\t\t\t// stay null\n\t\t} else {\n\t\t\tcompleteThrough = Math.min(completeThrough, dep.complete_through);\n\t\t}\n\t} else if (dep && dep.complete_through === null) {\n\t\tcompleteThrough = null;\n\t}\n\n\tconst gaps = findRangeGaps(\n\t\tranges,\n\t\tdeclaredRange.from_height,\n\t\tdeclaredRange.to_height,\n\t);\n\tconst tiled =\n\t\tgaps.length === 0 &&\n\t\tcompleteThrough !== null &&\n\t\tcompleteThrough >= declaredRange.to_height;\n\t// A single suffix still ahead of the prefix is unfinished work, not a hole.\n\tconst trailingGap =\n\t\tgaps.length === 1 &&\n\t\tgaps[0].to_height === declaredRange.to_height &&\n\t\t(completeThrough === null\n\t\t\t? gaps[0].from_height === declaredRange.from_height\n\t\t\t: gaps[0].from_height === completeThrough + 1);\n\n\tconst queueIncomplete =\n\t\tstage.native_clock === \"queue\" && !queueCaught(evidence.queue);\n\n\tif (gaps.length > 0 && !trailingGap) {\n\t\tconst first = gaps[0];\n\t\treturn done(\"gap\", `missing ${first.from_height}–${first.to_height}`, {\n\t\t\tcomplete_through: completeThrough,\n\t\t\tdeclared_range: declaredRange,\n\t\t\tgaps,\n\t\t\tcaught_up: false,\n\t\t});\n\t}\n\n\tif (queueIncomplete || !tiled) {\n\t\treturn done(\n\t\t\t\"syncing\",\n\t\t\t\"contiguous from start, not yet through the recorded target\",\n\t\t\t{\n\t\t\t\tcomplete_through: completeThrough,\n\t\t\t\tdeclared_range: declaredRange,\n\t\t\t\tgaps,\n\t\t\t\tcaught_up: false,\n\t\t\t},\n\t\t);\n\t}\n\n\tconst sourceStale = age !== null && age > maxAge;\n\tconst behindFinalized =\n\t\tfinalized !== null && completeThrough !== null\n\t\t\t? Math.max(0, finalized - completeThrough)\n\t\t\t: null;\n\tconst behindTip =\n\t\tsourceTip !== null && completeThrough !== null\n\t\t\t? Math.max(0, sourceTip - completeThrough)\n\t\t\t: null;\n\t// A target below the current finalized height is a pin, not a live follow.\n\t// That instance is complete through what it asked for — not lagging.\n\tconst pinned =\n\t\trecordedTarget !== null && finalized !== null && recordedTarget < finalized;\n\n\tif (sourceStale) {\n\t\treturn done(\n\t\t\t\"stale\",\n\t\t\t`source observation is ${age}s old, beyond the ${maxAge}s freshness objective`,\n\t\t\t{\n\t\t\t\tcomplete_through: completeThrough,\n\t\t\t\tdeclared_range: declaredRange,\n\t\t\t\tgaps,\n\t\t\t\tcaught_up: false,\n\t\t\t},\n\t\t);\n\t}\n\n\tif (behindFinalized !== null && behindFinalized > maxBehind) {\n\t\treturn done(\n\t\t\t\"stale\",\n\t\t\t`${behindFinalized} blocks behind the finalized height, beyond the ${maxBehind} threshold`,\n\t\t\t{\n\t\t\t\tcomplete_through: completeThrough,\n\t\t\t\tdeclared_range: declaredRange,\n\t\t\t\tgaps,\n\t\t\t\tcaught_up: false,\n\t\t\t},\n\t\t);\n\t}\n\n\tif (!pinned && behindFinalized !== null && behindFinalized > 0) {\n\t\treturn done(\n\t\t\t\"lagging\",\n\t\t\t`${behindFinalized} blocks behind the finalized height`,\n\t\t\t{\n\t\t\t\tcomplete_through: completeThrough,\n\t\t\t\tdeclared_range: declaredRange,\n\t\t\t\tgaps,\n\t\t\t\tcaught_up: false,\n\t\t\t},\n\t\t);\n\t}\n\n\tif (!pinned && behindTip !== null && behindTip > 0) {\n\t\treturn done(\"lagging\", `${behindTip} blocks behind the chain tip`, {\n\t\t\tcomplete_through: completeThrough,\n\t\t\tdeclared_range: declaredRange,\n\t\t\tgaps,\n\t\t});\n\t}\n\n\treturn done(\"complete\", \"processed every unit through the recorded target\", {\n\t\tcomplete_through: completeThrough,\n\t\tdeclared_range: declaredRange,\n\t\tgaps,\n\t});\n}\n\nexport function evaluateCoverage(input: EvaluatorInput): CoverageReport {\n\tconst { order, cycles } = topoSort(input.stages);\n\tconst cyclic = new Set(cycles.flat());\n\tconst known = new Set(input.stages.map((s) => s.id));\n\tconst runs = lastByStage(input.runs);\n\tconst evidence = lastByStage(input.evidence);\n\tconst byId = new Map(input.stages.map((s) => [s.id, s]));\n\tconst evaluated = new Map<string, StageCoverage>();\n\n\tconst visit = (id: string): void => {\n\t\tconst stage = byId.get(id);\n\t\tif (!stage || evaluated.has(id)) return;\n\t\tconst depId = stage.depends_on;\n\t\tconst missingDep = Boolean(depId && !known.has(depId));\n\t\tconst dep = depId && !missingDep ? (evaluated.get(depId) ?? null) : null;\n\t\tevaluated.set(\n\t\t\tid,\n\t\t\tevaluateOne(\n\t\t\t\tstage,\n\t\t\t\tinput,\n\t\t\t\truns.get(id),\n\t\t\t\tevidence.get(id) ?? emptyEvidence(id),\n\t\t\t\tdep,\n\t\t\t\tmissingDep,\n\t\t\t\tcyclic.has(id),\n\t\t\t),\n\t\t);\n\t};\n\n\tfor (const id of order) visit(id);\n\tfor (const id of cyclic) visit(id);\n\n\tconst stages = [...evaluated.values()].sort((a, b) =>\n\t\ta.stage_id.localeCompare(b.stage_id),\n\t);\n\n\treturn {\n\t\tschema_version: COVERAGE_REPORT_SCHEMA_VERSION,\n\t\tnetwork: input.scope.network,\n\t\tgenerated_at: input.options.now.toISOString(),\n\t\tsource_tip: input.source.tip_height,\n\t\tfinalized_height: input.source.finalized_height,\n\t\tstages,\n\t\tevaluation_order: order,\n\t\tcycles,\n\t};\n}\n",
|
|
8
8
|
"/**\n * Stage runner state machine.\n *\n * Pure. Adapters (P4.5+) persist the returned state and effects.\n * Acknowledgements are ordered; a reorg invalidates overlapping receipts\n * before any replacement ack is accepted. A version change cannot continue\n * the current run — it seals or halts and asks for a new one.\n */\n\nimport type { FailureClass, FailureUnit, RetryState } from \"./constraints.ts\";\nimport type { CoverageRange } from \"./constraints.ts\";\n\nexport const RUNNER_STATUSES = [\n\t\"pending\",\n\t\"running\",\n\t\"complete\",\n\t\"failed\",\n\t\"halted\",\n] as const;\nexport type RunnerStatus = (typeof RUNNER_STATUSES)[number];\n\nexport const RUNNER_EVENT_TYPES = [\n\t\"start\",\n\t\"ack\",\n\t\"fail\",\n\t\"retry\",\n\t\"halt\",\n\t\"resume\",\n\t\"reorg\",\n\t\"version\",\n\t\"finish\",\n] as const;\nexport type RunnerEventType = (typeof RUNNER_EVENT_TYPES)[number];\n\nexport const DEFAULT_MAX_RETRIES = 3;\n\nexport type RunnerVersion = {\n\tcode_hash: string;\n\tconfig_hash: string;\n\thandler_hash: string | null;\n};\n\nexport type RunnerFailure = {\n\tunit_kind: FailureUnit;\n\tclass: FailureClass;\n\tretry_state: Exclude<RetryState, \"resolved\">;\n\tfrom_height: number | null;\n\tto_height: number | null;\n\terror: string | null;\n};\n\nexport type RunnerState = {\n\tstage_id: string;\n\tstatus: RunnerStatus;\n\tversion: RunnerVersion;\n\tstart_height: number;\n\ttarget_height: number | null;\n\tcomplete_through: number | null;\n\tlast_acked_hash: string | null;\n\tretry_count: number;\n\topen_failure: RunnerFailure | null;\n};\n\nexport type RunnerEvent =\n\t| { type: \"start\" }\n\t| {\n\t\t\ttype: \"ack\";\n\t\t\theight: number;\n\t\t\thash: string;\n\t\t\tinput_count: number;\n\t\t\tinput_digest: string;\n\t\t\teffect_digest: string;\n\t }\n\t| {\n\t\t\ttype: \"fail\";\n\t\t\tunit_kind: FailureUnit;\n\t\t\tclass: FailureClass;\n\t\t\tfrom_height: number | null;\n\t\t\tto_height: number | null;\n\t\t\terror: string | null;\n\t }\n\t| { type: \"retry\" }\n\t| { type: \"halt\" }\n\t| { type: \"resume\" }\n\t| { type: \"reorg\"; fork_point: number }\n\t| { type: \"version\"; version: RunnerVersion }\n\t| { type: \"finish\" };\n\nexport type RunnerEffect =\n\t| { type: \"invalidate_receipts\"; range: CoverageRange }\n\t| { type: \"spawn_run\"; version: RunnerVersion }\n\t| { type: \"open_failure\"; failure: RunnerFailure }\n\t| { type: \"resolve_failure\" };\n\nexport type RunnerResult =\n\t| { ok: true; state: RunnerState; effects: RunnerEffect[] }\n\t| { ok: false; reason: string; state: RunnerState };\n\nexport type TransitionRule = {\n\tfrom: RunnerStatus;\n\tevent: RunnerEventType;\n\tto: RunnerStatus | \"reject\";\n};\n\n/**\n * Structural transition table. Guards (order, retry budget, version\n * equality, reorg overlap) are applied on top in `applyRunnerEvent`.\n */\nexport const RUNNER_TRANSITION_TABLE: readonly TransitionRule[] = [\n\t{ from: \"pending\", event: \"start\", to: \"running\" },\n\t{ from: \"pending\", event: \"ack\", to: \"reject\" },\n\t{ from: \"pending\", event: \"fail\", to: \"reject\" },\n\t{ from: \"pending\", event: \"retry\", to: \"reject\" },\n\t{ from: \"pending\", event: \"halt\", to: \"reject\" },\n\t{ from: \"pending\", event: \"resume\", to: \"reject\" },\n\t{ from: \"pending\", event: \"reorg\", to: \"reject\" },\n\t{ from: \"pending\", event: \"version\", to: \"pending\" },\n\t{ from: \"pending\", event: \"finish\", to: \"reject\" },\n\n\t{ from: \"running\", event: \"start\", to: \"reject\" },\n\t{ from: \"running\", event: \"ack\", to: \"running\" },\n\t{ from: \"running\", event: \"fail\", to: \"failed\" },\n\t{ from: \"running\", event: \"retry\", to: \"reject\" },\n\t{ from: \"running\", event: \"halt\", to: \"halted\" },\n\t{ from: \"running\", event: \"resume\", to: \"running\" },\n\t{ from: \"running\", event: \"reorg\", to: \"running\" },\n\t{ from: \"running\", event: \"version\", to: \"halted\" },\n\t{ from: \"running\", event: \"finish\", to: \"complete\" },\n\n\t{ from: \"complete\", event: \"start\", to: \"reject\" },\n\t{ from: \"complete\", event: \"ack\", to: \"reject\" },\n\t{ from: \"complete\", event: \"fail\", to: \"reject\" },\n\t{ from: \"complete\", event: \"retry\", to: \"reject\" },\n\t{ from: \"complete\", event: \"halt\", to: \"reject\" },\n\t{ from: \"complete\", event: \"resume\", to: \"reject\" },\n\t{ from: \"complete\", event: \"reorg\", to: \"running\" },\n\t{ from: \"complete\", event: \"version\", to: \"complete\" },\n\t{ from: \"complete\", event: \"finish\", to: \"complete\" },\n\n\t{ from: \"failed\", event: \"start\", to: \"reject\" },\n\t{ from: \"failed\", event: \"ack\", to: \"reject\" },\n\t{ from: \"failed\", event: \"fail\", to: \"reject\" },\n\t{ from: \"failed\", event: \"retry\", to: \"running\" },\n\t{ from: \"failed\", event: \"halt\", to: \"halted\" },\n\t{ from: \"failed\", event: \"resume\", to: \"running\" },\n\t{ from: \"failed\", event: \"reorg\", to: \"failed\" },\n\t{ from: \"failed\", event: \"version\", to: \"halted\" },\n\t{ from: \"failed\", event: \"finish\", to: \"reject\" },\n\n\t{ from: \"halted\", event: \"start\", to: \"reject\" },\n\t{ from: \"halted\", event: \"ack\", to: \"reject\" },\n\t{ from: \"halted\", event: \"fail\", to: \"reject\" },\n\t{ from: \"halted\", event: \"retry\", to: \"running\" },\n\t{ from: \"halted\", event: \"halt\", to: \"halted\" },\n\t{ from: \"halted\", event: \"resume\", to: \"running\" },\n\t{ from: \"halted\", event: \"reorg\", to: \"halted\" },\n\t{ from: \"halted\", event: \"version\", to: \"halted\" },\n\t{ from: \"halted\", event: \"finish\", to: \"reject\" },\n];\n\nconst RULE_INDEX = new Map<string, TransitionRule>(\n\tRUNNER_TRANSITION_TABLE.map((rule) => [`${rule.from}:${rule.event}`, rule]),\n);\n\nexport function lookupTransition(\n\tfrom: RunnerStatus,\n\tevent: RunnerEventType,\n): TransitionRule {\n\tconst rule = RULE_INDEX.get(`${from}:${event}`);\n\tif (!rule) {\n\t\tthrow new Error(`missing transition ${from} + ${event}`);\n\t}\n\treturn rule;\n}\n\nexport function versionsEqual(a: RunnerVersion, b: RunnerVersion): boolean {\n\treturn (\n\t\ta.code_hash === b.code_hash &&\n\t\ta.config_hash === b.config_hash &&\n\t\ta.handler_hash === b.handler_hash\n\t);\n}\n\n/** Next height this run must acknowledge. */\nexport function expectedAckHeight(state: RunnerState): number {\n\treturn state.complete_through === null\n\t\t? state.start_height\n\t\t: state.complete_through + 1;\n}\n\nexport function createRunnerState(init: {\n\tstage_id: string;\n\tstart_height: number;\n\ttarget_height?: number | null;\n\tversion: RunnerVersion;\n}): RunnerState {\n\treturn {\n\t\tstage_id: init.stage_id,\n\t\tstatus: \"pending\",\n\t\tversion: init.version,\n\t\tstart_height: init.start_height,\n\t\ttarget_height: init.target_height ?? null,\n\t\tcomplete_through: null,\n\t\tlast_acked_hash: null,\n\t\tretry_count: 0,\n\t\topen_failure: null,\n\t};\n}\n\nfunction ok(state: RunnerState, effects: RunnerEffect[] = []): RunnerResult {\n\treturn { ok: true, state, effects };\n}\n\nfunction reject(state: RunnerState, reason: string): RunnerResult {\n\treturn { ok: false, reason, state };\n}\n\nfunction clone(state: RunnerState, patch: Partial<RunnerState>): RunnerState {\n\treturn { ...state, ...patch };\n}\n\nfunction rewind(\n\tstate: RunnerState,\n\tforkPoint: number,\n): { next: RunnerState; effects: RunnerEffect[] } {\n\tconst from = Math.max(forkPoint, state.start_height);\n\tconst through = state.complete_through;\n\tif (through === null || through < from) {\n\t\treturn { next: state, effects: [] };\n\t}\n\tconst completeThrough = from <= state.start_height ? null : from - 1;\n\treturn {\n\t\tnext: clone(state, {\n\t\t\tcomplete_through: completeThrough,\n\t\t\tlast_acked_hash: null,\n\t\t}),\n\t\teffects: [\n\t\t\t{\n\t\t\t\ttype: \"invalidate_receipts\",\n\t\t\t\trange: { from_height: from, to_height: through },\n\t\t\t},\n\t\t],\n\t};\n}\n\nfunction applyRetry(state: RunnerState, maxRetries: number): RunnerResult {\n\tif (state.retry_count >= maxRetries) {\n\t\tconst failure = state.open_failure\n\t\t\t? { ...state.open_failure, retry_state: \"halted\" as const }\n\t\t\t: null;\n\t\treturn ok(clone(state, { status: \"halted\", open_failure: failure }));\n\t}\n\tconst failure = state.open_failure\n\t\t? { ...state.open_failure, retry_state: \"retrying\" as const }\n\t\t: null;\n\treturn ok(\n\t\tclone(state, {\n\t\t\tstatus: \"running\",\n\t\t\tretry_count: state.retry_count + 1,\n\t\t\topen_failure: failure,\n\t\t}),\n\t);\n}\n\nexport function applyRunnerEvent(\n\tstate: RunnerState,\n\tevent: RunnerEvent,\n\topts?: { maxRetries?: number },\n): RunnerResult {\n\tconst maxRetries = opts?.maxRetries ?? DEFAULT_MAX_RETRIES;\n\tconst rule = lookupTransition(state.status, event.type);\n\tif (rule.to === \"reject\") {\n\t\treturn reject(state, `${state.status} cannot ${event.type}`);\n\t}\n\tconst nextStatus = rule.to;\n\n\tswitch (event.type) {\n\t\tcase \"start\":\n\t\t\treturn ok(clone(state, { status: \"running\" }));\n\n\t\tcase \"ack\": {\n\t\t\tif (event.height === state.complete_through) {\n\t\t\t\tif (event.hash === state.last_acked_hash) return ok(state);\n\t\t\t\treturn reject(\n\t\t\t\t\tstate,\n\t\t\t\t\t`ack at ${event.height} has a different hash; reorg first`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst expected = expectedAckHeight(state);\n\t\t\tif (event.height !== expected) {\n\t\t\t\treturn reject(\n\t\t\t\t\tstate,\n\t\t\t\t\t`ack at ${event.height} skips ${expected}; acknowledgements must be ordered`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst effects: RunnerEffect[] = [];\n\t\t\tconst failure = state.open_failure;\n\t\t\tconst coversFailure =\n\t\t\t\tfailure &&\n\t\t\t\tfailure.from_height !== null &&\n\t\t\t\tevent.height >= failure.from_height &&\n\t\t\t\t(failure.to_height === null || event.height <= failure.to_height);\n\t\t\tif (coversFailure) effects.push({ type: \"resolve_failure\" });\n\t\t\treturn ok(\n\t\t\t\tclone(state, {\n\t\t\t\t\tstatus: \"running\",\n\t\t\t\t\tcomplete_through: event.height,\n\t\t\t\t\tlast_acked_hash: event.hash,\n\t\t\t\t\topen_failure: coversFailure ? null : failure,\n\t\t\t\t}),\n\t\t\t\teffects,\n\t\t\t);\n\t\t}\n\n\t\tcase \"fail\": {\n\t\t\tconst failure: RunnerFailure = {\n\t\t\t\tunit_kind: event.unit_kind,\n\t\t\t\tclass: event.class,\n\t\t\t\tretry_state: \"open\",\n\t\t\t\tfrom_height: event.from_height,\n\t\t\t\tto_height: event.to_height,\n\t\t\t\terror: event.error,\n\t\t\t};\n\t\t\treturn ok(clone(state, { status: \"failed\", open_failure: failure }), [\n\t\t\t\t{ type: \"open_failure\", failure },\n\t\t\t]);\n\t\t}\n\n\t\tcase \"retry\":\n\t\t\treturn applyRetry(state, maxRetries);\n\n\t\tcase \"halt\": {\n\t\t\tconst failure = state.open_failure\n\t\t\t\t? { ...state.open_failure, retry_state: \"halted\" as const }\n\t\t\t\t: state.open_failure;\n\t\t\treturn ok(clone(state, { status: \"halted\", open_failure: failure }));\n\t\t}\n\n\t\tcase \"resume\":\n\t\t\tif (state.status === \"running\") return ok(state);\n\t\t\tif (state.open_failure) return applyRetry(state, maxRetries);\n\t\t\treturn ok(clone(state, { status: \"running\" }));\n\n\t\tcase \"reorg\": {\n\t\t\tif (event.fork_point < state.start_height) {\n\t\t\t\treturn reject(\n\t\t\t\t\tstate,\n\t\t\t\t\t`reorg fork ${event.fork_point} is below start ${state.start_height}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst { next, effects } = rewind(state, event.fork_point);\n\t\t\tif (effects.length === 0) return ok(state);\n\t\t\treturn ok(clone(next, { status: nextStatus }), effects);\n\t\t}\n\n\t\tcase \"version\": {\n\t\t\tif (versionsEqual(state.version, event.version)) return ok(state);\n\t\t\tif (state.status === \"pending\") {\n\t\t\t\treturn ok(clone(state, { version: event.version }));\n\t\t\t}\n\t\t\tconst sealed: RunnerStatus =\n\t\t\t\tstate.status === \"complete\" ? \"complete\" : \"halted\";\n\t\t\treturn ok(clone(state, { status: sealed }), [\n\t\t\t\t{ type: \"spawn_run\", version: event.version },\n\t\t\t]);\n\t\t}\n\n\t\tcase \"finish\": {\n\t\t\tif (state.status === \"complete\") return ok(state);\n\t\t\tif (state.target_height === null) {\n\t\t\t\treturn reject(state, \"cannot finish a follow-the-chain run\");\n\t\t\t}\n\t\t\tif (\n\t\t\t\tstate.complete_through === null ||\n\t\t\t\tstate.complete_through < state.target_height\n\t\t\t) {\n\t\t\t\treturn reject(\n\t\t\t\t\tstate,\n\t\t\t\t\t`cannot finish: complete_through ${state.complete_through} is short of target ${state.target_height}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn ok(clone(state, { status: \"complete\" }));\n\t\t}\n\t}\n}\n",
|
|
9
9
|
"/**\n * Decoder clock — pair Streams cursor order with per-block receipts.\n *\n * A filtered firehose can jump from `100:5` to `105:0` and never mention\n * 101–104. Coverage still needs a receipt for every canonical height,\n * including no-match blocks. This library is that seam: cursors stay\n * monotonic, receipts stay one-per-height, empty blocks still ack.\n *\n * Only fully closed blocks in `(from_cursor, to_cursor]` emit receipts.\n * Mid-block resumes wait until the cursor is past the block.\n */\n\nimport { createHash } from \"node:crypto\";\nimport {\n\ttype StreamsCursor,\n\tblockEndCursor,\n\tcompareStreamsCursor,\n\tdecodeStreamsCursor,\n\tencodeStreamsCursor,\n\tisEmptyRangeCursor,\n} from \"../streams-cursor.ts\";\n\nexport type CanonicalBlock = {\n\theight: number;\n\thash: string;\n};\n\nexport type DecoderClockEvent = {\n\tcursor: string;\n\tblock_hash: string;\n\tmatched: boolean;\n};\n\nexport type DecoderClockInput = {\n\tstart_height: number;\n\t/** Exclusive. Null = before `start_height`. */\n\tfrom_cursor: string | null;\n\t/** Exclusive high-water after this batch. */\n\tto_cursor: string;\n\tblocks: readonly CanonicalBlock[];\n\tevents: readonly DecoderClockEvent[];\n};\n\nexport type DecoderClockReceipt = {\n\theight: number;\n\thash: string;\n\tinput_count: number;\n\tinput_cursors: string[];\n\tinput_digest: string;\n\tthrough_cursor: string;\n\tno_match: boolean;\n};\n\nexport type DecoderClockResult =\n\t| { ok: true; receipts: DecoderClockReceipt[]; through_cursor: string }\n\t| { ok: false; reason: string; receipts: DecoderClockReceipt[] };\n\nexport function inputDigest(cursors: readonly string[]): string {\n\tif (cursors.length === 0) {\n\t\treturn createHash(\"sha256\").update(\"no-match\\n\").digest(\"hex\");\n\t}\n\tconst hash = createHash(\"sha256\");\n\tfor (const cursor of cursors) hash.update(`${cursor}\\n`);\n\treturn hash.digest(\"hex\");\n}\n\nexport function cursorIsAfterBlock(\n\tcursor: StreamsCursor,\n\theight: number,\n): boolean {\n\treturn compareStreamsCursor(cursor, blockEndCursor(height)) >= 0;\n}\n\n/** True when `from` is strictly before the first event that can live in `height`. */\nexport function cursorIsBeforeBlock(\n\tcursor: StreamsCursor,\n\theight: number,\n): boolean {\n\treturn cursor.block_height < height;\n}\n\nfunction parseCursor(\n\tvalue: string,\n\tlabel: string,\n): { ok: true; cursor: StreamsCursor } | { ok: false; reason: string } {\n\ttry {\n\t\treturn { ok: true, cursor: decodeStreamsCursor(value) };\n\t} catch {\n\t\treturn { ok: false, reason: `${label} is not a valid streams cursor` };\n\t}\n}\n\nexport function planDecoderReceipts(\n\tinput: DecoderClockInput,\n): DecoderClockResult {\n\tconst to = parseCursor(input.to_cursor, \"to_cursor\");\n\tif (!to.ok) return { ok: false, reason: to.reason, receipts: [] };\n\n\tlet from: StreamsCursor | null = null;\n\tif (input.from_cursor !== null) {\n\t\tconst parsed = parseCursor(input.from_cursor, \"from_cursor\");\n\t\tif (!parsed.ok) return { ok: false, reason: parsed.reason, receipts: [] };\n\t\tfrom = parsed.cursor;\n\t\tif (compareStreamsCursor(from, to.cursor) >= 0) {\n\t\t\treturn {\n\t\t\t\tok: false,\n\t\t\t\treason: \"to_cursor must be after from_cursor\",\n\t\t\t\treceipts: [],\n\t\t\t};\n\t\t}\n\t}\n\n\t// A mid-block from_cursor (100:2) or a closed one (100:SENTINEL) both\n\t// mean the next fully-visible block is 101. Receipts are whole blocks.\n\tconst startFull = from === null ? input.start_height : from.block_height + 1;\n\tconst lastFull = isEmptyRangeCursor(to.cursor)\n\t\t? to.cursor.block_height\n\t\t: to.cursor.block_height - 1;\n\n\tif (lastFull < startFull) {\n\t\treturn { ok: true, receipts: [], through_cursor: input.to_cursor };\n\t}\n\n\tif (startFull < input.start_height) {\n\t\treturn {\n\t\t\tok: false,\n\t\t\treason: `window starts at ${startFull}, below start_height ${input.start_height}`,\n\t\t\treceipts: [],\n\t\t};\n\t}\n\n\tconst byHeight = new Map<number, CanonicalBlock>();\n\tlet prevHeight: number | null = null;\n\tfor (const block of input.blocks) {\n\t\tif (prevHeight !== null && block.height !== prevHeight + 1) {\n\t\t\treturn {\n\t\t\t\tok: false,\n\t\t\t\treason: `blocks are not contiguous (${prevHeight} → ${block.height})`,\n\t\t\t\treceipts: [],\n\t\t\t};\n\t\t}\n\t\tif (byHeight.has(block.height)) {\n\t\t\treturn {\n\t\t\t\tok: false,\n\t\t\t\treason: `duplicate canonical height ${block.height}`,\n\t\t\t\treceipts: [],\n\t\t\t};\n\t\t}\n\t\tbyHeight.set(block.height, block);\n\t\tprevHeight = block.height;\n\t}\n\n\tfor (let height = startFull; height <= lastFull; height++) {\n\t\tif (!byHeight.has(height)) {\n\t\t\treturn {\n\t\t\t\tok: false,\n\t\t\t\treason: `missing canonical block ${height}`,\n\t\t\t\treceipts: [],\n\t\t\t};\n\t\t}\n\t}\n\n\tconst decoded: {\n\t\tcursor: StreamsCursor;\n\t\tencoded: string;\n\t\tblock_hash: string;\n\t\tmatched: boolean;\n\t}[] = [];\n\tlet previous: StreamsCursor | null = from;\n\tfor (const event of input.events) {\n\t\tconst parsed = parseCursor(event.cursor, \"event.cursor\");\n\t\tif (!parsed.ok) return { ok: false, reason: parsed.reason, receipts: [] };\n\t\tif (previous && compareStreamsCursor(parsed.cursor, previous) <= 0) {\n\t\t\treturn {\n\t\t\t\tok: false,\n\t\t\t\treason: `event cursor ${event.cursor} is not after ${encodeStreamsCursor(previous)}`,\n\t\t\t\treceipts: [],\n\t\t\t};\n\t\t}\n\t\tif (compareStreamsCursor(parsed.cursor, to.cursor) >= 0) {\n\t\t\treturn {\n\t\t\t\tok: false,\n\t\t\t\treason: `event cursor ${event.cursor} is not before to_cursor`,\n\t\t\t\treceipts: [],\n\t\t\t};\n\t\t}\n\t\tif (from && compareStreamsCursor(parsed.cursor, from) <= 0) {\n\t\t\treturn {\n\t\t\t\tok: false,\n\t\t\t\treason: `event cursor ${event.cursor} is not after from_cursor`,\n\t\t\t\treceipts: [],\n\t\t\t};\n\t\t}\n\t\tconst block = byHeight.get(parsed.cursor.block_height);\n\t\tif (!block) {\n\t\t\treturn {\n\t\t\t\tok: false,\n\t\t\t\treason: `event ${event.cursor} has no canonical block`,\n\t\t\t\treceipts: [],\n\t\t\t};\n\t\t}\n\t\tif (block.hash !== event.block_hash) {\n\t\t\treturn {\n\t\t\t\tok: false,\n\t\t\t\treason: `event ${event.cursor} hash ${event.block_hash} does not match canonical ${block.hash}`,\n\t\t\t\treceipts: [],\n\t\t\t};\n\t\t}\n\t\tdecoded.push({\n\t\t\tcursor: parsed.cursor,\n\t\t\tencoded: event.cursor,\n\t\t\tblock_hash: event.block_hash,\n\t\t\tmatched: event.matched,\n\t\t});\n\t\tprevious = parsed.cursor;\n\t}\n\n\tconst receipts: DecoderClockReceipt[] = [];\n\tfor (let height = startFull; height <= lastFull; height++) {\n\t\tconst block = byHeight.get(height);\n\t\tif (!block) {\n\t\t\treturn {\n\t\t\t\tok: false,\n\t\t\t\treason: `missing canonical block ${height}`,\n\t\t\t\treceipts,\n\t\t\t};\n\t\t}\n\t\tconst inBlock = decoded.filter((e) => e.cursor.block_height === height);\n\t\tconst matched = inBlock.filter((e) => e.matched);\n\t\tconst last = inBlock[inBlock.length - 1];\n\t\tconst through = last\n\t\t\t? last.encoded\n\t\t\t: encodeStreamsCursor(blockEndCursor(height));\n\t\treceipts.push({\n\t\t\theight,\n\t\t\thash: block.hash,\n\t\t\tinput_count: matched.length,\n\t\t\tinput_cursors: matched.map((e) => e.encoded),\n\t\t\tinput_digest: inputDigest(matched.map((e) => e.encoded)),\n\t\t\tthrough_cursor: through,\n\t\t\tno_match: matched.length === 0,\n\t\t});\n\t}\n\n\treturn { ok: true, receipts, through_cursor: input.to_cursor };\n}\n",
|
|
10
|
-
"/**\n * Atomic decoder adapter.\n *\n * One transaction writes decoded output, the decoder checkpoint, block\n * receipts, and an optional failure. A crash after any step rolls all\n * four back — the property `commitDecodedBatch` already had for rows+\n * checkpoint, now covering the coverage kernel too.\n *\n * `crashAfter` is a test probe. It throws inside the transaction so the\n * matrix can abort after each step without simulating a real process kill.\n */\n\nimport { sql } from \"kysely\";\nimport type { Kysely } from \"kysely\";\nimport type { Database } from \"../db/types.ts\";\nimport type { FailureClass, FailureUnit, RetryState } from \"./constraints.ts\";\nimport type { DecoderClockReceipt } from \"./decoder-clock.ts\";\nimport {\n\ttype RunnerEvent,\n\ttype RunnerResult,\n\ttype RunnerState,\n\tapplyRunnerEvent,\n} from \"./runner.ts\";\n\nexport const DECODER_COMMIT_STEPS = [\n\t\"output\",\n\t\"checkpoint\",\n\t\"receipt\",\n\t\"failure\",\n] as const;\nexport type DecoderCommitStep = (typeof DECODER_COMMIT_STEPS)[number];\n\nexport class DecoderAdapterCrash extends Error {\n\treadonly name = \"DecoderAdapterCrash\";\n\tconstructor(readonly step: DecoderCommitStep) {\n\t\tsuper(`decoder adapter crash after ${step}`);\n\t}\n}\n\nexport type DecoderAdapterFailure = {\n\tunit_kind: FailureUnit;\n\tclass: FailureClass;\n\tretry_state: Exclude<RetryState, \"resolved\">;\n\tfrom_height: number | null;\n\tto_height: number | null;\n\terror: string | null;\n\tretry_count?: number;\n};\n\nexport type DecoderAdapterReceipt = DecoderClockReceipt & {\n\teffect_digest: string;\n};\n\nexport type DecoderAdapterCommit = {\n\tstage_id: string;\n\trun_id?: string | null;\n\tdecoder_name: string;\n\t/** Null = do not move the checkpoint (empty page). */\n\tcheckpoint_cursor: string | null;\n\treceipts: readonly DecoderAdapterReceipt[];\n\tfailure?: DecoderAdapterFailure | null;\n\twriteOutput: (tx: Kysely<Database>) => Promise<void>;\n\tcrashAfter?: DecoderCommitStep;\n};\n\nexport async function runDecoderCommitSteps(\n\tsteps: Record<DecoderCommitStep, () => Promise<void>>,\n\tcrashAfter?: DecoderCommitStep,\n): Promise<void> {\n\tfor (const step of DECODER_COMMIT_STEPS) {\n\t\tawait steps[step]();\n\t\tif (crashAfter === step) throw new DecoderAdapterCrash(step);\n\t}\n}\n\nexport function applyDecoderReceipts(\n\tstate: RunnerState,\n\treceipts: readonly DecoderAdapterReceipt[],\n): RunnerResult {\n\tlet current = state;\n\tif (current.status === \"pending\") {\n\t\tconst started = applyRunnerEvent(current, { type: \"start\" });\n\t\tif (!started.ok) return started;\n\t\tcurrent = started.state;\n\t}\n\tfor (const receipt of receipts) {\n\t\tconst event: RunnerEvent = {\n\t\t\ttype: \"ack\",\n\t\t\theight: receipt.height,\n\t\t\thash: receipt.hash,\n\t\t\tinput_count: receipt.input_count,\n\t\t\tinput_digest: receipt.input_digest,\n\t\t\teffect_digest: receipt.effect_digest,\n\t\t};\n\t\tconst next = applyRunnerEvent(current, event);\n\t\tif (!next.ok) return next;\n\t\tcurrent = next.state;\n\t}\n\treturn { ok: true, state: current, effects: [] };\n}\n\nasync function upsertRegistry(\n\ttx: Kysely<Database>,\n\tstageId: string,\n): Promise<void> {\n\tawait tx\n\t\t.insertInto(\"stage_registry\")\n\t\t.values({\n\t\t\tid: stageId,\n\t\t\tkind: \"decode\",\n\t\t\tdepends_on: null,\n\t\t\tnative_clock: \"block\",\n\t\t\tproducer_version: \"v1\",\n\t\t\trepair_mode: \"full_reindex\",\n\t\t})\n\t\t.onConflict((oc) => oc.column(\"id\").doNothing())\n\t\t.execute();\n}\n\nasync function writeCheckpoint(\n\ttx: Kysely<Database>,\n\tdecoderName: string,\n\tcursor: string | null,\n): Promise<void> {\n\tif (cursor === null) return;\n\
|
|
10
|
+
"/**\n * Atomic decoder adapter.\n *\n * One transaction writes decoded output, the decoder checkpoint, block\n * receipts, and an optional failure. A crash after any step rolls all\n * four back — the property `commitDecodedBatch` already had for rows+\n * checkpoint, now covering the coverage kernel too.\n *\n * `crashAfter` is a test probe. It throws inside the transaction so the\n * matrix can abort after each step without simulating a real process kill.\n */\n\nimport { sql } from \"kysely\";\nimport type { Kysely } from \"kysely\";\nimport type { Database } from \"../db/types.ts\";\nimport type { FailureClass, FailureUnit, RetryState } from \"./constraints.ts\";\nimport type { DecoderClockReceipt } from \"./decoder-clock.ts\";\nimport {\n\ttype RunnerEvent,\n\ttype RunnerResult,\n\ttype RunnerState,\n\tapplyRunnerEvent,\n} from \"./runner.ts\";\n\nexport const DECODER_COMMIT_STEPS = [\n\t\"output\",\n\t\"checkpoint\",\n\t\"receipt\",\n\t\"failure\",\n] as const;\nexport type DecoderCommitStep = (typeof DECODER_COMMIT_STEPS)[number];\n\nexport class DecoderAdapterCrash extends Error {\n\treadonly name = \"DecoderAdapterCrash\";\n\tconstructor(readonly step: DecoderCommitStep) {\n\t\tsuper(`decoder adapter crash after ${step}`);\n\t}\n}\n\nexport type DecoderAdapterFailure = {\n\tunit_kind: FailureUnit;\n\tclass: FailureClass;\n\tretry_state: Exclude<RetryState, \"resolved\">;\n\tfrom_height: number | null;\n\tto_height: number | null;\n\terror: string | null;\n\tretry_count?: number;\n};\n\nexport type DecoderAdapterReceipt = DecoderClockReceipt & {\n\teffect_digest: string;\n};\n\nexport type DecoderAdapterCommit = {\n\tstage_id: string;\n\trun_id?: string | null;\n\tdecoder_name: string;\n\t/** Null = do not move the checkpoint (empty page). */\n\tcheckpoint_cursor: string | null;\n\treceipts: readonly DecoderAdapterReceipt[];\n\tfailure?: DecoderAdapterFailure | null;\n\twriteOutput: (tx: Kysely<Database>) => Promise<void>;\n\tcrashAfter?: DecoderCommitStep;\n};\n\nexport async function runDecoderCommitSteps(\n\tsteps: Record<DecoderCommitStep, () => Promise<void>>,\n\tcrashAfter?: DecoderCommitStep,\n): Promise<void> {\n\tfor (const step of DECODER_COMMIT_STEPS) {\n\t\tawait steps[step]();\n\t\tif (crashAfter === step) throw new DecoderAdapterCrash(step);\n\t}\n}\n\nexport function applyDecoderReceipts(\n\tstate: RunnerState,\n\treceipts: readonly DecoderAdapterReceipt[],\n): RunnerResult {\n\tlet current = state;\n\tif (current.status === \"pending\") {\n\t\tconst started = applyRunnerEvent(current, { type: \"start\" });\n\t\tif (!started.ok) return started;\n\t\tcurrent = started.state;\n\t}\n\tfor (const receipt of receipts) {\n\t\tconst event: RunnerEvent = {\n\t\t\ttype: \"ack\",\n\t\t\theight: receipt.height,\n\t\t\thash: receipt.hash,\n\t\t\tinput_count: receipt.input_count,\n\t\t\tinput_digest: receipt.input_digest,\n\t\t\teffect_digest: receipt.effect_digest,\n\t\t};\n\t\tconst next = applyRunnerEvent(current, event);\n\t\tif (!next.ok) return next;\n\t\tcurrent = next.state;\n\t}\n\treturn { ok: true, state: current, effects: [] };\n}\n\nasync function upsertRegistry(\n\ttx: Kysely<Database>,\n\tstageId: string,\n): Promise<void> {\n\tawait tx\n\t\t.insertInto(\"stage_registry\")\n\t\t.values({\n\t\t\tid: stageId,\n\t\t\tkind: \"decode\",\n\t\t\tdepends_on: null,\n\t\t\tnative_clock: \"block\",\n\t\t\tproducer_version: \"v1\",\n\t\t\trepair_mode: \"full_reindex\",\n\t\t})\n\t\t.onConflict((oc) => oc.column(\"id\").doNothing())\n\t\t.execute();\n}\n\nasync function writeCheckpoint(\n\ttx: Kysely<Database>,\n\tdecoderName: string,\n\tcursor: string | null,\n): Promise<void> {\n\tif (cursor === null) return;\n\t// An idle decoder still calls onBatch on every empty poll (the SDK's\n\t// no-sink consume loop, packages/sdk/src/streams/consumer.ts, invokes it\n\t// unconditionally — see `onBatch` in the no-sink branch), which re-commits\n\t// the SAME cursor every `DECODER_EMPTY_BACKOFF_MS`. With ~15 decoders\n\t// idling on ~1s backoff, an unconditional write+NOTIFY here fired\n\t// `index:tip` up to ~15x/sec with ZERO actual progress, waking every\n\t// pending Index long-poll to recheck for nothing. The `WHERE` makes \"did\n\t// this actually change\" an atomic compare-and-skip at the database: the\n\t// conflicting row is left untouched (and `RETURNING` yields nothing)\n\t// whenever the incoming cursor matches what's already stored, so a\n\t// no-op poll costs one INSERT attempt, not a write + a NOTIFY fan-out.\n\t// `IS DISTINCT FROM`, not `!=`: `last_cursor` starts out NULL for a\n\t// decoder that has never committed, and SQL's `NULL != x` evaluates to\n\t// NULL (falsy in a WHERE) — a plain `!=` silently treated \"still unset\"\n\t// as \"unchanged\" and dropped a decoder's very first commit entirely.\n\tconst written = await tx\n\t\t.insertInto(\"decoder_checkpoints\")\n\t\t.values({\n\t\t\tdecoder_name: decoderName,\n\t\t\tlast_cursor: cursor,\n\t\t})\n\t\t.onConflict((oc) =>\n\t\t\toc\n\t\t\t\t.column(\"decoder_name\")\n\t\t\t\t.doUpdateSet({\n\t\t\t\t\tlast_cursor: cursor,\n\t\t\t\t\tupdated_at: new Date(),\n\t\t\t\t})\n\t\t\t\t.where(\"decoder_checkpoints.last_cursor\", \"is distinct from\", cursor),\n\t\t)\n\t\t.returning(\"last_cursor\")\n\t\t.execute();\n\tif (written.length === 0) return;\n\n\t// Every decoder (classic + protocol) funnels its checkpoint write through\n\t// here, so this is the one place a `index:tip` NOTIFY can cover the whole\n\t// decoder set. Postgres defers delivery until the transaction commits,\n\t// so a rewound/rolled-back commit never fires it. A caller (the Index\n\t// API's long-poll wake, plan-063) only needs to know \"something committed,\n\t// go recheck\" — it re-reads the real committed height itself, so the\n\t// payload doesn't need to be more specific than the decoder name.\n\tawait sql`SELECT pg_notify('index:tip', ${decoderName})`.execute(tx);\n}\n\nasync function writeReceipts(\n\ttx: Kysely<Database>,\n\tstageId: string,\n\trunId: string | null,\n\treceipts: readonly DecoderAdapterReceipt[],\n): Promise<void> {\n\tif (receipts.length === 0) return;\n\tawait tx\n\t\t.insertInto(\"stage_block_receipts\")\n\t\t.values(\n\t\t\treceipts.map((receipt) => ({\n\t\t\t\tstage_id: stageId,\n\t\t\t\trun_id: runId,\n\t\t\t\tblock_height: receipt.height,\n\t\t\t\tblock_hash: receipt.hash,\n\t\t\t\tinput_count: receipt.input_count,\n\t\t\t\tinput_digest: receipt.input_digest,\n\t\t\t\teffect_digest: receipt.effect_digest,\n\t\t\t})),\n\t\t)\n\t\t.onConflict((oc) =>\n\t\t\toc\n\t\t\t\t.columns([\"stage_id\", \"block_height\", \"block_hash\"])\n\t\t\t\t.doUpdateSet((eb) => ({\n\t\t\t\t\tinput_count: eb.ref(\"excluded.input_count\"),\n\t\t\t\t\tinput_digest: eb.ref(\"excluded.input_digest\"),\n\t\t\t\t\teffect_digest: eb.ref(\"excluded.effect_digest\"),\n\t\t\t\t\trun_id: eb.ref(\"excluded.run_id\"),\n\t\t\t\t})),\n\t\t)\n\t\t.execute();\n}\n\nasync function writeFailure(\n\ttx: Kysely<Database>,\n\tstageId: string,\n\trunId: string | null,\n\tfailure: DecoderAdapterFailure,\n): Promise<void> {\n\tawait tx\n\t\t.insertInto(\"stage_failures\")\n\t\t.values({\n\t\t\tstage_id: stageId,\n\t\t\trun_id: runId,\n\t\t\tunit_kind: failure.unit_kind,\n\t\t\tfrom_height: failure.from_height,\n\t\t\tto_height: failure.to_height,\n\t\t\tclass: failure.class,\n\t\t\tretry_state: failure.retry_state,\n\t\t\tretry_count: failure.retry_count ?? 0,\n\t\t\tlast_error: failure.error,\n\t\t})\n\t\t.execute();\n}\n\n/**\n * Persist output + checkpoint + receipts + failure in one transaction.\n * Runner validation is the caller's job (`applyDecoderReceipts`) so a\n * rejected ack never opens a transaction.\n */\nexport async function commitDecoderAdapter(\n\tdb: Kysely<Database>,\n\tinput: DecoderAdapterCommit,\n): Promise<void> {\n\tconst runId = input.run_id ?? null;\n\tconst failure = input.failure ?? null;\n\tawait db.transaction().execute(async (tx) => {\n\t\tawait upsertRegistry(tx, input.stage_id);\n\t\tawait runDecoderCommitSteps(\n\t\t\t{\n\t\t\t\toutput: () => input.writeOutput(tx),\n\t\t\t\tcheckpoint: () =>\n\t\t\t\t\twriteCheckpoint(tx, input.decoder_name, input.checkpoint_cursor),\n\t\t\t\treceipt: () => writeReceipts(tx, input.stage_id, runId, input.receipts),\n\t\t\t\tfailure: () =>\n\t\t\t\t\tfailure\n\t\t\t\t\t\t? writeFailure(tx, input.stage_id, runId, failure)\n\t\t\t\t\t\t: Promise.resolve(),\n\t\t\t},\n\t\t\tinput.crashAfter,\n\t\t);\n\t});\n}\n",
|
|
11
11
|
"/**\n * Segment sealer — compact only finalized receipts after recomputing\n * range digests. A crash or deep reorg must not leave a sealed green\n * range over unfinalized or invalidated receipts.\n */\n\nimport { createHash } from \"node:crypto\";\nimport type { CoverageRange } from \"./constraints.ts\";\nimport type { DecoderClockReceipt } from \"./decoder-clock.ts\";\n\nexport type SealableReceipt = {\n\theight: number;\n\thash: string;\n\tinput_digest: string;\n\teffect_digest: string;\n\tfinalized: boolean;\n};\n\nexport type SealedSegment = {\n\tfrom_height: number;\n\tto_height: number;\n\tchain_digest: string;\n\tinput_digest: string;\n\toutput_digest: string;\n};\n\nexport type SealResult =\n\t| { ok: true; segment: SealedSegment; compacted: number }\n\t| { ok: false; reason: string };\n\nexport function rangeDigestOf(parts: readonly string[]): string {\n\tconst hash = createHash(\"sha256\");\n\tfor (const part of parts) hash.update(`${part}\\n`);\n\treturn hash.digest(\"hex\");\n}\n\nexport function sealFinalizedRange(\n\treceipts: readonly SealableReceipt[],\n\trange: CoverageRange,\n): SealResult {\n\tconst inRange = receipts\n\t\t.filter((r) => r.height >= range.from_height && r.height <= range.to_height)\n\t\t.sort((a, b) => a.height - b.height);\n\tif (inRange.length === 0) {\n\t\treturn { ok: false, reason: \"no receipts in range\" };\n\t}\n\tlet expected = range.from_height;\n\tfor (const receipt of inRange) {\n\t\tif (!receipt.finalized) {\n\t\t\treturn { ok: false, reason: `unfinalized receipt at ${receipt.height}` };\n\t\t}\n\t\tif (receipt.height !== expected) {\n\t\t\treturn {\n\t\t\t\tok: false,\n\t\t\t\treason: `gap at ${expected} before ${receipt.height}`,\n\t\t\t};\n\t\t}\n\t\texpected += 1;\n\t}\n\tif (inRange[inRange.length - 1]?.height !== range.to_height) {\n\t\treturn { ok: false, reason: \"range is not fully covered\" };\n\t}\n\treturn {\n\t\tok: true,\n\t\tcompacted: inRange.length,\n\t\tsegment: {\n\t\t\tfrom_height: range.from_height,\n\t\t\tto_height: range.to_height,\n\t\t\tchain_digest: rangeDigestOf(inRange.map((r) => `${r.height}:${r.hash}`)),\n\t\t\tinput_digest: rangeDigestOf(inRange.map((r) => r.input_digest)),\n\t\t\toutput_digest: rangeDigestOf(inRange.map((r) => r.effect_digest)),\n\t\t},\n\t};\n}\n\n/** After a reorg at `fork`, any sealed segment that overlaps cannot stay green. */\nexport function segmentsSurviveReorg(\n\tsegments: readonly SealedSegment[],\n\tfork: number,\n): SealedSegment[] {\n\treturn segments.filter((s) => s.to_height < fork);\n}\n\nexport function receiptsAfterReorg(\n\treceipts: readonly SealableReceipt[],\n\tfork: number,\n): SealableReceipt[] {\n\treturn receipts.filter((r) => r.height < fork);\n}\n\nexport type ClockReceipt = DecoderClockReceipt;\n",
|
|
12
12
|
"/**\n * Effect manifests — canonical hash of ordered subgraph mutations per block.\n * Retry and equivalent reorderings of the same ops are stable; a historical\n * defect (different op, table, key, or value) differs.\n */\n\nimport { createHash } from \"node:crypto\";\n\nexport type EffectOp = \"insert\" | \"update\" | \"delete\" | \"increment\";\n\nexport type EffectMutation = {\n\top: EffectOp;\n\ttable: string;\n\tkey: Record<string, string | number | boolean | null>;\n\tvalue?: Record<string, string | number | boolean | null>;\n};\n\nexport function canonicalizeMutations(\n\tops: readonly EffectMutation[],\n): EffectMutation[] {\n\treturn ops.map((op) => ({\n\t\top: op.op,\n\t\ttable: op.table,\n\t\tkey: sortRecord(op.key),\n\t\tvalue: op.value ? sortRecord(op.value) : undefined,\n\t}));\n}\n\nfunction sortRecord(\n\trecord: Record<string, string | number | boolean | null>,\n): Record<string, string | number | boolean | null> {\n\tconst out: Record<string, string | number | boolean | null> = {};\n\tfor (const key of Object.keys(record).sort()) out[key] = record[key] ?? null;\n\treturn out;\n}\n\nexport function hashEffectManifest(ops: readonly EffectMutation[]): string {\n\tconst canonical = canonicalizeMutations(ops);\n\tconst hash = createHash(\"sha256\");\n\thash.update(JSON.stringify(canonical));\n\treturn hash.digest(\"hex\");\n}\n\nexport function manifestsEqual(\n\ta: readonly EffectMutation[],\n\tb: readonly EffectMutation[],\n): boolean {\n\treturn hashEffectManifest(a) === hashEffectManifest(b);\n}\n",
|
|
13
13
|
"/**\n * Atomic subgraph adapter — commit effects, rows, journal, cursor,\n * receipt, and failure in one transaction.\n */\n\nimport type { DecoderAdapterFailure } from \"./adapter.ts\";\nimport type { DecoderClockReceipt } from \"./decoder-clock.ts\";\nimport type { EffectMutation } from \"./effect-manifest.ts\";\n\nexport const SUBGRAPH_COMMIT_STEPS = [\n\t\"effects\",\n\t\"rows\",\n\t\"journal\",\n\t\"cursor\",\n\t\"receipt\",\n\t\"failure\",\n] as const;\nexport type SubgraphCommitStep = (typeof SUBGRAPH_COMMIT_STEPS)[number];\n\nexport class SubgraphAdapterCrash extends Error {\n\treadonly name = \"SubgraphAdapterCrash\";\n\tconstructor(readonly step: SubgraphCommitStep) {\n\t\tsuper(`subgraph adapter crash after ${step}`);\n\t}\n}\n\nexport type SubgraphCommitInput = {\n\tstage_id: string;\n\teffects: readonly EffectMutation[];\n\treceipts: readonly (DecoderClockReceipt & { effect_digest: string })[];\n\tfailure?: DecoderAdapterFailure | null;\n\twriteEffects: () => Promise<void>;\n\twriteRows: () => Promise<void>;\n\twriteJournal: () => Promise<void>;\n\twriteCursor: () => Promise<void>;\n\twriteReceipts: () => Promise<void>;\n\twriteFailure: () => Promise<void>;\n\tcrashAfter?: SubgraphCommitStep;\n};\n\nexport async function runSubgraphCommitSteps(\n\tsteps: Record<SubgraphCommitStep, () => Promise<void>>,\n\tcrashAfter?: SubgraphCommitStep,\n): Promise<void> {\n\tfor (const step of SUBGRAPH_COMMIT_STEPS) {\n\t\tawait steps[step]();\n\t\tif (crashAfter === step) throw new SubgraphAdapterCrash(step);\n\t}\n}\n\nexport async function commitSubgraphAdapter(\n\tinput: SubgraphCommitInput,\n\twrap: (fn: () => Promise<void>) => Promise<void> = (fn) => fn(),\n): Promise<void> {\n\tawait wrap(() =>\n\t\trunSubgraphCommitSteps(\n\t\t\t{\n\t\t\t\teffects: input.writeEffects,\n\t\t\t\trows: input.writeRows,\n\t\t\t\tjournal: input.writeJournal,\n\t\t\t\tcursor: input.writeCursor,\n\t\t\t\treceipt: input.writeReceipts,\n\t\t\t\tfailure: input.writeFailure,\n\t\t\t},\n\t\t\tinput.crashAfter,\n\t\t),\n\t);\n}\n",
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"/**\n * Repair SAFETY GATE — decides whether a proposed repair is allowed to run.\n * Only registered safe modes pass; unsafe ranges and mode/defect mismatches are\n * refused.\n *\n * This file plans and refuses. It does not repair. The executor that actually\n * writes is `secondlayer repair --apply` (packages/cli/src/commands/repair.ts),\n * which rewrites blocks from a signed archive inside a transaction.\n *\n * There used to be an `applyRepair` here that returned `{applied: true}`\n * without touching anything. It was removed in 2026-08 rather than\n * implemented: a second executor would have been a fake one, and drills that\n * \"recovered\" through it would have proven nothing.\n */\n\nimport type { RepairMode } from \"./constraints.ts\";\nimport type { CoverageRange } from \"./constraints.ts\";\n\nexport const SAFE_REPAIR_MODES: readonly RepairMode[] = [\n\t\"range_safe\",\n\t\"full_reindex\",\n\t\"archive_replay\",\n];\n\nexport type RepairDefect =\n\t| \"gap\"\n\t| \"digest_mismatch\"\n\t| \"omission\"\n\t| \"version\"\n\t| \"reorg\"\n\t| \"source_gap\";\n\nexport type RepairPlan = {\n\tstage_id: string;\n\trange: CoverageRange;\n\tmode: RepairMode;\n\tdefect: RepairDefect;\n\tsafe: boolean;\n\treason: string;\n};\n\nexport function planRepair(input: {\n\tstage_id: string;\n\trange: CoverageRange;\n\tmode: RepairMode;\n\tdefect: RepairDefect;\n\trange_safe_proven?: boolean;\n}): RepairPlan {\n\tif (input.range.from_height > input.range.to_height) {\n\t\treturn {\n\t\t\t...input,\n\t\t\tsafe: false,\n\t\t\treason: \"inverted range\",\n\t\t};\n\t}\n\tif (!(SAFE_REPAIR_MODES as readonly string[]).includes(input.mode)) {\n\t\treturn {\n\t\t\t...input,\n\t\t\tsafe: false,\n\t\t\treason: `mode ${input.mode} is not registered`,\n\t\t};\n\t}\n\tif (input.mode === \"range_safe\" && !input.range_safe_proven) {\n\t\treturn {\n\t\t\t...input,\n\t\t\tsafe: false,\n\t\t\treason: \"range_safe requires a proven range\",\n\t\t};\n\t}\n\tif (input.defect === \"source_gap\" && input.mode !== \"archive_replay\") {\n\t\treturn {\n\t\t\t...input,\n\t\t\tsafe: false,\n\t\t\treason: \"raw/source gaps require archive_replay\",\n\t\t};\n\t}\n\treturn {\n\t\t...input,\n\t\tsafe: true,\n\t\treason: `dry-run ${input.mode} for ${input.defect}`,\n\t};\n}\n",
|
|
18
18
|
"/**\n * Unified verify targets — library used by CLI (and REST later).\n * Exit codes match `sl verify`: 0 clean, 1 diverged, 2 unanchored.\n */\n\nexport const VERIFY_EXIT = {\n\tCLEAN: 0,\n\tDIVERGED: 1,\n\tUNANCHORED: 2,\n} as const;\nexport type VerifyExit = (typeof VERIFY_EXIT)[keyof typeof VERIFY_EXIT];\n\nexport type VerifyTarget =\n\t| { kind: \"all\" }\n\t| { kind: \"raw\" }\n\t| { kind: \"decode\"; name: string }\n\t| { kind: \"subgraph\"; name: string };\n\nexport type VerifyMode = \"quick\" | \"deep\" | \"anchor\";\n\nexport function parseVerifyTarget(value: string | undefined): VerifyTarget {\n\tconst raw = (value ?? \"raw\").trim();\n\tif (raw === \"all\") return { kind: \"all\" };\n\tif (raw === \"raw\" || raw === \"\") return { kind: \"raw\" };\n\tif (raw.startsWith(\"decode:\")) {\n\t\tconst name = raw.slice(\"decode:\".length).trim();\n\t\tif (!name) throw new Error(\"decode: target needs a decoder name\");\n\t\treturn { kind: \"decode\", name };\n\t}\n\tif (raw.startsWith(\"subgraph:\")) {\n\t\tconst name = raw.slice(\"subgraph:\".length).trim();\n\t\tif (!name) throw new Error(\"subgraph: target needs a subgraph name\");\n\t\treturn { kind: \"subgraph\", name };\n\t}\n\tthrow new Error(\n\t\t`verify target must be all | raw | decode:<name> | subgraph:<name> (got ${value})`,\n\t);\n}\n\nconst RAW_DATASETS = new Set([\"blocks\", \"transactions\", \"events\"]);\n\n/** Whether an archive/coverage dataset belongs to this verify target. */\nexport function datasetMatchesTarget(\n\tdataset: string,\n\ttarget: VerifyTarget,\n): boolean {\n\tif (target.kind === \"all\") return true;\n\tconst name = dataset.toLowerCase();\n\tif (target.kind === \"raw\") return RAW_DATASETS.has(name);\n\tif (target.kind === \"decode\") {\n\t\treturn (\n\t\t\tname === target.name.toLowerCase() ||\n\t\t\tname === `decode:${target.name.toLowerCase()}` ||\n\t\t\tname.endsWith(`_${target.name.toLowerCase()}`)\n\t\t);\n\t}\n\treturn (\n\t\tname === target.name.toLowerCase() ||\n\t\tname === `subgraph:${target.name.toLowerCase()}` ||\n\t\tname.startsWith(`${target.name.toLowerCase()}_`)\n\t);\n}\n\nexport type VerifyReport = {\n\ttarget: VerifyTarget;\n\tmode: VerifyMode;\n\texit: VerifyExit;\n\tstatus: \"clean\" | \"diverged\" | \"unanchored\";\n\tdetail: string;\n};\n\nexport function reportVerify(opts: {\n\ttarget: VerifyTarget;\n\tmode?: VerifyMode;\n\tanchored?: boolean;\n\tdiverged?: boolean;\n\tdetail?: string;\n}): VerifyReport {\n\tconst mode = opts.mode ?? \"quick\";\n\tif (opts.anchored === false) {\n\t\treturn {\n\t\t\ttarget: opts.target,\n\t\t\tmode,\n\t\t\texit: VERIFY_EXIT.UNANCHORED,\n\t\t\tstatus: \"unanchored\",\n\t\t\tdetail: opts.detail ?? \"reference unavailable or unverifiable\",\n\t\t};\n\t}\n\tif (opts.diverged) {\n\t\treturn {\n\t\t\ttarget: opts.target,\n\t\t\tmode,\n\t\t\texit: VERIFY_EXIT.DIVERGED,\n\t\t\tstatus: \"diverged\",\n\t\t\tdetail: opts.detail ?? \"coverage or archive diverged\",\n\t\t};\n\t}\n\tconst label =\n\t\topts.target.kind === \"decode\"\n\t\t\t? `decode:${opts.target.name}`\n\t\t\t: opts.target.kind === \"subgraph\"\n\t\t\t\t? `subgraph:${opts.target.name}`\n\t\t\t\t: opts.target.kind;\n\treturn {\n\t\ttarget: opts.target,\n\t\tmode,\n\t\texit: VERIFY_EXIT.CLEAN,\n\t\tstatus: \"clean\",\n\t\tdetail: opts.detail ?? `${label} ${mode} is clean`,\n\t};\n}\n"
|
|
19
19
|
],
|
|
20
|
-
"mappings": "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",
|
|
21
|
-
"debugId": "
|
|
20
|
+
"mappings": "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",
|
|
21
|
+
"debugId": "67A673CA618D58BA64756E2164756E21",
|
|
22
22
|
"names": []
|
|
23
23
|
}
|
package/dist/src/db/index.d.ts
CHANGED
|
@@ -1991,6 +1991,23 @@ declare const TABLE_TO_DB: {
|
|
|
1991
1991
|
};
|
|
1992
1992
|
/** OSS: one application URL. SOURCE_/TARGET_ are hosted split only. */
|
|
1993
1993
|
declare function applicationDatabaseUrl(): string;
|
|
1994
|
+
/**
|
|
1995
|
+
* Canonical source-DB URL — the ONE place that decides it. Exported so a
|
|
1996
|
+
* LISTEN connection (`queue/listener.ts`) resolves the same database a write
|
|
1997
|
+
* through `getSourceDb()` commits to; a second, hand-duplicated resolution
|
|
1998
|
+
* that skips the `isPlatformMode()` gate silently listens on the wrong
|
|
1999
|
+
* database whenever a process isn't in platform mode but `SOURCE_DATABASE_URL`
|
|
2000
|
+
* happens to be set anyway (a shared env template, a staging box) — a NOTIFY
|
|
2001
|
+
* on the real (gated) URL then never reaches it.
|
|
2002
|
+
*/
|
|
2003
|
+
declare function resolveSourceUrl(): string;
|
|
2004
|
+
/** Canonical target-DB URL — see {@link resolveSourceUrl}. */
|
|
2005
|
+
declare function resolveTargetUrl(): string;
|
|
2006
|
+
/** Host[:port]/dbname for a connection URL — credentials stripped. Exported
|
|
2007
|
+
* so anything logging which database it connected to (a LISTEN channel's
|
|
2008
|
+
* startup log, an ops health check) can describe it without ever printing a
|
|
2009
|
+
* password. */
|
|
2010
|
+
declare function describeDbUrl(url: string): string;
|
|
1994
2011
|
interface DbSplitStatus {
|
|
1995
2012
|
/** "split" when source/target resolve to different DBs, else "single". */
|
|
1996
2013
|
mode: "split" | "single";
|
|
@@ -2058,4 +2075,4 @@ declare function getRawClient(role?: "source" | "target"): ReturnType<typeof pos
|
|
|
2058
2075
|
declare function getRawClientFor(url: string): ReturnType<typeof postgres>;
|
|
2059
2076
|
/** Close all DB connection pools. Call in CLI commands to allow process exit. */
|
|
2060
2077
|
declare function closeDb(): Promise<void>;
|
|
2061
|
-
export { Account, AccountCredits, AccountCreditsTable, AccountSpendCap, AccountSpendCapsTable, AccountsTable, ApiKey, ApiKeysTable, ArchiveFetch, ArchiveFetchesTable, Block, BlocksTable, BnsMarketplaceAction, BnsMarketplaceEventsTable, BnsNameEventTopic, BnsNameEventsTable, BnsNamesTable, BnsNamespaceEventStatus, BnsNamespaceEventsTable, BnsNamespacesTable, BurnBlockRewardSlotsTable, BurnBlockRewardsTable, ChainReadCacheTable, ChainReorgsTable, Contract, ContractsTable, CoverageSegmentsTable, Database, DbPlane, DbReadRow, DbSplitStatus, DeadLetterEventsTable, DecodedEventsTable, DecoderCheckpointsTable, Event, EventsArchiveTable, EventsTable, FailureClass, FailureUnit, IndexColumn, IndexColumnType, IndexPrimaryKey, IndexProgress, IndexProgressTable, InsertAccount, InsertAccountCredits, InsertAccountSpendCap, InsertApiKey, InsertArchiveFetch, InsertBlock, InsertContract, InsertEvent, InsertIndexProgress, InsertMagicLink, InsertMempoolTransaction, InsertSession, InsertSubgraph, InsertSubgraphGap, InsertSubgraphHealthSnapshot, InsertSubgraphOperation, InsertTransaction, InsertUsageLedgerRow, InsertVmEvent, InsertWaitlistSignup, InsertWebhook, InsertWebhookDelivery, InsertWebhookOutbox, InstancesTable, MagicLink, MagicLinksTable, MempoolTransaction, MempoolTransactionsTable, MigrationRole, NativeClock, NumericAsText, ObserverJournalStatus, ObserverJournalTable, OutboxStatus, PendingForkBlocksTable, Pox4CallsTable, Pox4FunctionName, Pox5EventTopic, Pox5EventsTable, ProcessedStripeEventsTable, RepairMode, RetryState, RunStatus, SOURCE_READ_COLUMNS, SOURCE_READ_PKS, SOURCE_READ_TYPES, SbtcEventTopic, SbtcEventsTable, SbtcSettlementsTable, SbtcTokenEventType, SbtcTokenEventsTable, ServiceHeartbeatsTable, Session, SessionsTable, StageBlockReceiptsTable, StageFailuresTable, StageKind, StageRegistryTable, StageRunsTable, Subgraph, SubgraphGap, SubgraphGapsTable, SubgraphHealthSnapshot, SubgraphHealthSnapshotsTable, SubgraphOperation, SubgraphOperationKind, SubgraphOperationStatus, SubgraphOperationsTable, SubgraphProcessingStatsTable, SubgraphViolationsTable, SubgraphsTable, SyncScopesTable, TABLE_TO_DB, Transaction, TransactionsArchiveTable, TransactionsTable, TriggerEvaluatorState, TriggerEvaluatorStateTable, UpdateAccountCredits, UpdateAccountSpendCap, UpdateApiKey, UpdateArchiveFetch, UpdateBlock, UpdateContract, UpdateEvent, UpdateIndexProgress, UpdateSubgraph, UpdateSubgraphOperation, UpdateTransaction, UpdateUsageLedgerRow, UpdateVmEvent, UpdateWebhook, UpdateWebhookOutbox, UsageLedgerRow, UsageLedgerTable, VmEvent, VmEventsArchiveTable, VmEventsTable, Waitlist, WaitlistSignup, WaitlistSignupsTable, WaitlistsTable, Webhook, WebhookDeliveriesTable, WebhookDelivery, WebhookFormat, WebhookKind, WebhookOutbox, WebhookOutboxTable, WebhookRuntime, WebhookStatus, WebhooksTable, applicationDatabaseUrl, assertDbSplit, closeDb, getDb, getDbSplitStatus, getMigrationRole, getRawClient, getRawClientFor, getSourceDb, getTargetDb, jsonb, onChainPlane, onControlPlane, parseJsonb, setMigrationRole, sql };
|
|
2078
|
+
export { Account, AccountCredits, AccountCreditsTable, AccountSpendCap, AccountSpendCapsTable, AccountsTable, ApiKey, ApiKeysTable, ArchiveFetch, ArchiveFetchesTable, Block, BlocksTable, BnsMarketplaceAction, BnsMarketplaceEventsTable, BnsNameEventTopic, BnsNameEventsTable, BnsNamesTable, BnsNamespaceEventStatus, BnsNamespaceEventsTable, BnsNamespacesTable, BurnBlockRewardSlotsTable, BurnBlockRewardsTable, ChainReadCacheTable, ChainReorgsTable, Contract, ContractsTable, CoverageSegmentsTable, Database, DbPlane, DbReadRow, DbSplitStatus, DeadLetterEventsTable, DecodedEventsTable, DecoderCheckpointsTable, Event, EventsArchiveTable, EventsTable, FailureClass, FailureUnit, IndexColumn, IndexColumnType, IndexPrimaryKey, IndexProgress, IndexProgressTable, InsertAccount, InsertAccountCredits, InsertAccountSpendCap, InsertApiKey, InsertArchiveFetch, InsertBlock, InsertContract, InsertEvent, InsertIndexProgress, InsertMagicLink, InsertMempoolTransaction, InsertSession, InsertSubgraph, InsertSubgraphGap, InsertSubgraphHealthSnapshot, InsertSubgraphOperation, InsertTransaction, InsertUsageLedgerRow, InsertVmEvent, InsertWaitlistSignup, InsertWebhook, InsertWebhookDelivery, InsertWebhookOutbox, InstancesTable, MagicLink, MagicLinksTable, MempoolTransaction, MempoolTransactionsTable, MigrationRole, NativeClock, NumericAsText, ObserverJournalStatus, ObserverJournalTable, OutboxStatus, PendingForkBlocksTable, Pox4CallsTable, Pox4FunctionName, Pox5EventTopic, Pox5EventsTable, ProcessedStripeEventsTable, RepairMode, RetryState, RunStatus, SOURCE_READ_COLUMNS, SOURCE_READ_PKS, SOURCE_READ_TYPES, SbtcEventTopic, SbtcEventsTable, SbtcSettlementsTable, SbtcTokenEventType, SbtcTokenEventsTable, ServiceHeartbeatsTable, Session, SessionsTable, StageBlockReceiptsTable, StageFailuresTable, StageKind, StageRegistryTable, StageRunsTable, Subgraph, SubgraphGap, SubgraphGapsTable, SubgraphHealthSnapshot, SubgraphHealthSnapshotsTable, SubgraphOperation, SubgraphOperationKind, SubgraphOperationStatus, SubgraphOperationsTable, SubgraphProcessingStatsTable, SubgraphViolationsTable, SubgraphsTable, SyncScopesTable, TABLE_TO_DB, Transaction, TransactionsArchiveTable, TransactionsTable, TriggerEvaluatorState, TriggerEvaluatorStateTable, UpdateAccountCredits, UpdateAccountSpendCap, UpdateApiKey, UpdateArchiveFetch, UpdateBlock, UpdateContract, UpdateEvent, UpdateIndexProgress, UpdateSubgraph, UpdateSubgraphOperation, UpdateTransaction, UpdateUsageLedgerRow, UpdateVmEvent, UpdateWebhook, UpdateWebhookOutbox, UsageLedgerRow, UsageLedgerTable, VmEvent, VmEventsArchiveTable, VmEventsTable, Waitlist, WaitlistSignup, WaitlistSignupsTable, WaitlistsTable, Webhook, WebhookDeliveriesTable, WebhookDelivery, WebhookFormat, WebhookKind, WebhookOutbox, WebhookOutboxTable, WebhookRuntime, WebhookStatus, WebhooksTable, applicationDatabaseUrl, assertDbSplit, closeDb, describeDbUrl, getDb, getDbSplitStatus, getMigrationRole, getRawClient, getRawClientFor, getSourceDb, getTargetDb, jsonb, onChainPlane, onControlPlane, parseJsonb, resolveSourceUrl, resolveTargetUrl, setMigrationRole, sql };
|
package/dist/src/db/index.js
CHANGED
|
@@ -963,6 +963,7 @@ export {
|
|
|
963
963
|
applicationDatabaseUrl,
|
|
964
964
|
assertDbSplit,
|
|
965
965
|
closeDb,
|
|
966
|
+
describeDbUrl,
|
|
966
967
|
getDb,
|
|
967
968
|
getDbSplitStatus,
|
|
968
969
|
getMigrationRole,
|
|
@@ -974,9 +975,11 @@ export {
|
|
|
974
975
|
onChainPlane,
|
|
975
976
|
onControlPlane,
|
|
976
977
|
parseJsonb,
|
|
978
|
+
resolveSourceUrl,
|
|
979
|
+
resolveTargetUrl,
|
|
977
980
|
setMigrationRole,
|
|
978
981
|
sql2 as sql
|
|
979
982
|
};
|
|
980
983
|
|
|
981
|
-
//# debugId=
|
|
984
|
+
//# debugId=AD548AB47C78322F64756E2164756E21
|
|
982
985
|
//# sourceMappingURL=index.js.map
|