@allocator-one/rcl 4.5.8 → 4.5.9
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/README.md +5 -4
- package/dist/consensus/semantic-deduper.d.ts +2 -1
- package/dist/consensus/semantic-deduper.js +21 -10
- package/dist/consensus/semantic-deduper.js.map +1 -1
- package/dist/converge/attempt-budget.d.ts +11 -0
- package/dist/converge/attempt-budget.js +119 -61
- package/dist/converge/attempt-budget.js.map +1 -1
- package/dist/converge/delivery-reconciliation.d.ts +2 -1
- package/dist/converge/delivery-reconciliation.js +17 -9
- package/dist/converge/delivery-reconciliation.js.map +1 -1
- package/dist/converge/launch-guard.d.ts +3 -0
- package/dist/converge/launch-guard.js +53 -17
- package/dist/converge/launch-guard.js.map +1 -1
- package/dist/converge/recovered-production.d.ts +14 -0
- package/dist/converge/recovered-production.js +61 -0
- package/dist/converge/recovered-production.js.map +1 -0
- package/dist/converge/recovery-launch.js +82 -35
- package/dist/converge/recovery-launch.js.map +1 -1
- package/dist/converge/run-state.d.ts +2 -0
- package/dist/converge/run-state.js +26 -12
- package/dist/converge/run-state.js.map +1 -1
- package/dist/converge/semantic-state.js +18 -4
- package/dist/converge/semantic-state.js.map +1 -1
- package/dist/coordination/registry-lock.d.ts +2 -0
- package/dist/coordination/registry-lock.js +42 -13
- package/dist/coordination/registry-lock.js.map +1 -1
- package/dist/evidence/claim-recovery/delivery.d.ts +25 -0
- package/dist/evidence/claim-recovery/delivery.js +100 -0
- package/dist/evidence/claim-recovery/delivery.js.map +1 -0
- package/dist/evidence/claim-recovery/public-adoption.d.ts +31 -0
- package/dist/evidence/claim-recovery/public-adoption.js +177 -0
- package/dist/evidence/claim-recovery/public-adoption.js.map +1 -0
- package/dist/evidence/claim-recovery/public-manifest.d.ts +114 -0
- package/dist/evidence/claim-recovery/public-manifest.js +11 -0
- package/dist/evidence/claim-recovery/public-manifest.js.map +1 -0
- package/dist/evidence/claim-recovery/public-model.d.ts +85 -0
- package/dist/evidence/claim-recovery/public-model.js +177 -0
- package/dist/evidence/claim-recovery/public-model.js.map +1 -0
- package/dist/evidence/original-run/journal.d.ts +10 -0
- package/dist/evidence/original-run/journal.js +55 -3
- package/dist/evidence/original-run/journal.js.map +1 -1
- package/dist/evidence/original-run/lock.js +22 -9
- package/dist/evidence/original-run/lock.js.map +1 -1
- package/dist/evidence/recover-claim.d.ts +21 -0
- package/dist/evidence/recover-claim.js +504 -0
- package/dist/evidence/recover-claim.js.map +1 -0
- package/dist/index.js +228 -136
- package/dist/index.js.map +1 -1
- package/dist/report/assembly.d.ts +2 -0
- package/dist/report/assembly.js +1 -0
- package/dist/report/assembly.js.map +1 -1
- package/dist/report/consensus-assembly.d.ts +2 -0
- package/dist/report/consensus-assembly.js +6 -3
- package/dist/report/consensus-assembly.js.map +1 -1
- package/dist/report/reviewer-artifact.js +3 -1
- package/dist/report/reviewer-artifact.js.map +1 -1
- package/dist/report/run-header.js +2 -0
- package/dist/report/run-header.js.map +1 -1
- package/dist/telemetry/deliver.d.ts +8 -0
- package/dist/telemetry/deliver.js +55 -8
- package/dist/telemetry/deliver.js.map +1 -1
- package/dist/telemetry/events.js +2 -0
- package/dist/telemetry/events.js.map +1 -1
- package/dist/telemetry/outbox.d.ts +20 -0
- package/dist/telemetry/outbox.js +324 -103
- package/dist/telemetry/outbox.js.map +1 -1
- package/dist/telemetry/reviewer-delivery.d.ts +95 -3
- package/dist/telemetry/reviewer-delivery.js +600 -12
- package/dist/telemetry/reviewer-delivery.js.map +1 -1
- package/dist/telemetry/sink.d.ts +14 -0
- package/dist/telemetry/sink.js +44 -2
- package/dist/telemetry/sink.js.map +1 -1
- package/dist/telemetry/terminal-reviewer-delivery.d.ts +154 -5
- package/dist/telemetry/terminal-reviewer-delivery.js +196 -21
- package/dist/telemetry/terminal-reviewer-delivery.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,504 @@
|
|
|
1
|
+
import { manifestSchema } from './claim-recovery/public-manifest.js';
|
|
2
|
+
import { prepareClaimAdoption, verifyAdoptionFiles, verifyReplacedAbsence } from './claim-recovery/public-adoption.js';
|
|
3
|
+
import { readClaimProof, writeClaimProof } from './claim-recovery/proof-storage.js';
|
|
4
|
+
import { scrubDeep } from '../telemetry/scrub.js';
|
|
5
|
+
import { randomUUID } from 'node:crypto';
|
|
6
|
+
import { lstat, realpath } from 'node:fs/promises';
|
|
7
|
+
import { dirname } from 'node:path';
|
|
8
|
+
import { isDeepStrictEqual } from 'node:util';
|
|
9
|
+
import { resolveGitCommonDir } from '../converge/attempt-budget.js';
|
|
10
|
+
import { loadConvergeRunStateEvidence, convergeRunStatePath } from '../converge/run-state.js';
|
|
11
|
+
import { withRecoveryTarget } from '../converge/target-ownership.js';
|
|
12
|
+
import { applyNativeRecovery, deriveNativeRecovery, nativeRecoveryPlanProjectionVersion, readNativeRecoverySourceJsons, readNativeRecoveryMaterials, recoveryAnchors } from '../converge/recovery-state.js';
|
|
13
|
+
import { correctionAnchor } from '../converge/correction-anchors.js';
|
|
14
|
+
import { prepareClaimSplit } from './claim-split.js';
|
|
15
|
+
import { prepareObligationTransfer, prepareClaimDisposition, validatePreservedDispositionSubject } from './claim-recovery/validation/occurrence.js';
|
|
16
|
+
import { validateOccurrenceSource } from './claim-recovery/validation/occurrence-source.js';
|
|
17
|
+
import { projectOccurrenceCarrier } from './claim-recovery/validation/carrier-projection.js';
|
|
18
|
+
import { readClaimTargetHistory, claimHistoryContent, sameClaimHistoryEvidence } from './claim-recovery/carrier-inventory.js';
|
|
19
|
+
import { publicClaimSelectionSchema, historySource, historyContext, claimRunHistory, claimCarriers, assertHistoryExtension, assertUnusedClaimIdentity } from './claim-recovery/public-model.js';
|
|
20
|
+
import { deliverPreparedClaimEvent } from './claim-recovery/delivery.js';
|
|
21
|
+
import { decodeRecoveryDocument, decodeOriginalReport } from './original-run/decode.js';
|
|
22
|
+
import { inspectRecoveryDirectory } from './original-run/lock-path.js';
|
|
23
|
+
import { openJournal, writeExclusive, MAX_RECOVERY_DOCUMENT_BYTES } from './original-run/journal.js';
|
|
24
|
+
import { platformPath, readStable, sha256 } from '../telemetry/recovery/files.js';
|
|
25
|
+
import { matchesPreparedEventReceipt } from './event-receipts.js';
|
|
26
|
+
import { openSink } from './status.js';
|
|
27
|
+
import { RecoveryRequestBudget } from '../telemetry/recovery-request-budget.js';
|
|
28
|
+
const MAX_MATERIAL = 64 * 1024 * 1024;
|
|
29
|
+
function decode(text) { return decodeRecoveryDocument(text); }
|
|
30
|
+
async function exists(path) {
|
|
31
|
+
try {
|
|
32
|
+
await lstat(path);
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
catch (e) {
|
|
36
|
+
if (e.code === 'ENOENT')
|
|
37
|
+
return false;
|
|
38
|
+
throw e;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
function splitInput(selection, material, manifest, history) {
|
|
42
|
+
const source = historySource(history, selection.source);
|
|
43
|
+
const bound = validateOccurrenceSource(source);
|
|
44
|
+
const member = bound.members.find(m => m.ref === selection.findingRef);
|
|
45
|
+
if (!member || member.unresolvedReason || member.identity !== selection.previousIdentity)
|
|
46
|
+
throw new Error('claim_original_mapping_unavailable');
|
|
47
|
+
return {
|
|
48
|
+
scope: selection.source.scope, target: selection.source.target, eventId: manifest.stages[0].id, occurredAt: manifest.createdAt,
|
|
49
|
+
nativeJson: material.nativeJson, nativeSourceJsons: material.nativeSourceJsons, recoveryMaterials: material.recoveryMaterials, reportJson: source.reportJson, findingRef: selection.findingRef,
|
|
50
|
+
previousIdentity: selection.previousIdentity, identity: selection.identity, descriptor: selection.descriptor, reason: selection.reason,
|
|
51
|
+
expectedEventSequence: historyContext(history, selection.source).eventSequence, classificationId: source.classification.id,
|
|
52
|
+
...(member.correction ? { correctionId: member.correction.id } : {}), sourceReceipts: [source.classification, ...(member.correction ? [member.correction] : [])]
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
function errorCode(e) { const m = e instanceof Error ? e.message : ''; return /^[a-z][a-z0-9_]+$/.test(m) ? m : 'claim_recovery_refused'; }
|
|
56
|
+
/** Public Mode B. Ordinary authenticated reads, exact durable events and the
|
|
57
|
+
* same native target; no review, accounting reset, outbox or original rewrite. */
|
|
58
|
+
export async function runPublicClaimRecovery(options, deps) {
|
|
59
|
+
let stage = 'input';
|
|
60
|
+
const requestBudget = new RecoveryRequestBudget(deps.requestClock, ms => deps.stderr(`Recovery request budget: waiting ${Math.ceil(ms / 1000)}s before the next request.`));
|
|
61
|
+
try {
|
|
62
|
+
if ([options.preview, options.apply, options.resume].filter(Boolean).length !== 1)
|
|
63
|
+
throw new Error('choose_exactly_one_recovery_mode');
|
|
64
|
+
const path = platformPath(options.manifest);
|
|
65
|
+
const pool = `${path}.proofs`;
|
|
66
|
+
await inspectRecoveryDirectory(dirname(path), true);
|
|
67
|
+
const commonDir = await realpath(await resolveGitCommonDir(deps.cwd));
|
|
68
|
+
let manifest;
|
|
69
|
+
let material;
|
|
70
|
+
let manifestSha;
|
|
71
|
+
if (options.preview) {
|
|
72
|
+
if (options.manifestSha256 || Boolean(options.selection) === Boolean(options.adoptManifest) || Boolean(options.adoptManifest) !== Boolean(options.adoptManifestSha256))
|
|
73
|
+
throw new Error('preview_requires_selection_or_adoption');
|
|
74
|
+
if (await exists(path) || await exists(`${path}.material`))
|
|
75
|
+
throw new Error('manifest_already_exists');
|
|
76
|
+
const oldPath = options.adoptManifest ? platformPath(options.adoptManifest) : undefined;
|
|
77
|
+
const oldRaw = oldPath ? await readStable(oldPath, MAX_RECOVERY_DOCUMENT_BYTES) : undefined;
|
|
78
|
+
if (oldRaw && oldRaw.sha256 !== options.adoptManifestSha256)
|
|
79
|
+
throw new Error('manifest_digest_mismatch');
|
|
80
|
+
const oldManifest = oldRaw ? manifestSchema.parse(decode(oldRaw.text)) : undefined;
|
|
81
|
+
if (oldManifest && oldManifest.gitCommonDir !== commonDir)
|
|
82
|
+
throw new Error('native_repository_conflict');
|
|
83
|
+
const selection = oldManifest?.selection ?? publicClaimSelectionSchema.parse(decodeOriginalReport((await readStable(platformPath(options.selection), MAX_RECOVERY_DOCUMENT_BYTES)).text, { exactNumbers: true }).value);
|
|
84
|
+
const native = await loadConvergeRunStateEvidence(commonDir, selection.source.target);
|
|
85
|
+
if (!native)
|
|
86
|
+
throw new Error('native_target_unavailable');
|
|
87
|
+
const nativeRaw = await readStable(convergeRunStatePath(commonDir, selection.source.target), MAX_MATERIAL);
|
|
88
|
+
if (nativeRaw.sha256 !== native.sha256)
|
|
89
|
+
throw new Error('native_source_changed');
|
|
90
|
+
const ancestors = await readNativeRecoverySourceJsons(commonDir, native.state);
|
|
91
|
+
stage = 'remote';
|
|
92
|
+
const sink = await openSink(deps, requestBudget);
|
|
93
|
+
if (!sink)
|
|
94
|
+
return 3;
|
|
95
|
+
const read = await readClaimTargetHistory(sink, selection.source);
|
|
96
|
+
if (read.kind !== 'ok')
|
|
97
|
+
throw new Error('claim_history_unanswered');
|
|
98
|
+
const history = claimHistoryContent(read.value);
|
|
99
|
+
if (selection.action === 'split' && !oldManifest)
|
|
100
|
+
assertUnusedClaimIdentity(history, selection.identity);
|
|
101
|
+
material = { nativeJson: nativeRaw.text, nativeSourceJsons: ancestors, recoveryMaterials: await readNativeRecoveryMaterials(commonDir, native.state), history };
|
|
102
|
+
const carriers = claimCarriers(history, selection);
|
|
103
|
+
if (!carriers.length)
|
|
104
|
+
throw new Error('claim_carrier_unavailable');
|
|
105
|
+
if (selection.action === 'disposition' && !selection.disposition || selection.action === 'refresh' && selection.disposition)
|
|
106
|
+
throw new Error('claim_action_disposition_conflict');
|
|
107
|
+
let stages = [...(selection.action === 'split' ? [{ id: randomUUID(), kind: 'split' }, ...carriers.map((_, carrierIndex) => ({ id: randomUUID(), kind: 'transfer', carrierIndex }))] : []),
|
|
108
|
+
...(selection.disposition ? [{ id: randomUUID(), kind: 'disposition' }] : [])];
|
|
109
|
+
const createdAt = new Date().toISOString();
|
|
110
|
+
if (oldManifest) {
|
|
111
|
+
if (oldManifest.nativeSha256 !== nativeRaw.sha256)
|
|
112
|
+
throw new Error('native_source_changed');
|
|
113
|
+
const adoption = await prepareClaimAdoption({ path: oldPath, manifest: oldManifest, manifestSha: oldRaw.sha256, current: history, stages, sink, validate: validatePreparation, splitEvidence });
|
|
114
|
+
material.adoption = adoption.proof;
|
|
115
|
+
stages = adoption.stages;
|
|
116
|
+
}
|
|
117
|
+
const adoptedSplit = stages[0]?.kind === 'split' ? material.adoption?.accepted.find(s => s.id === stages[0]?.id) : undefined;
|
|
118
|
+
const prepared = adoptedSplit ? prepareClaimSplit(adoptedSplit.preparation) : selection.action === 'split' ? prepareClaimSplit(splitInput(selection, material, { stages, createdAt }, history)) :
|
|
119
|
+
prepareClaimSplit(existingSplit(selection, material, history).selection);
|
|
120
|
+
if (adoptedSplit && selection.disposition && !material.adoption?.accepted.some(a => a.id === stages.at(-1)?.id))
|
|
121
|
+
prepareClaimDisposition(dispositionInput(selection, history, splitEvidence(material, selection, adoptedSplit.preparation, adoptedSplit.receipt), stages.at(-1).id, createdAt, history.actorUserId));
|
|
122
|
+
else if (!adoptedSplit)
|
|
123
|
+
validateDispositionIntent(selection, history, stages.at(-1)?.id, material, createdAt);
|
|
124
|
+
const preview = {
|
|
125
|
+
source: prepared.source, newIdentity: selection.identity, carriers: carriers.map(carrier => projectOccurrenceCarrier({
|
|
126
|
+
carrier,
|
|
127
|
+
inventoryStatus: 'complete', sources: history.sources, transfers: [], nativePredecessors: [{ sourceJson: material.nativeJson, nativeSourceJsons: ancestors }]
|
|
128
|
+
})),
|
|
129
|
+
disposition: selection.disposition ?? null, legacyVerdicts: 'retained without inherited semantic approval', accounting: 'unchanged; same target and rounds',
|
|
130
|
+
...(material.adoption ? { adoption: { previous_manifest: oldPath, previous_manifest_sha256: oldRaw.sha256, accepted_event_ids: material.adoption.accepted.map(a => a.id), replacements: material.adoption.replacements } } : {})
|
|
131
|
+
};
|
|
132
|
+
if ((await readStable(convergeRunStatePath(commonDir, selection.source.target), MAX_MATERIAL)).sha256 !== nativeRaw.sha256)
|
|
133
|
+
throw new Error('native_source_changed');
|
|
134
|
+
stage = 'journal';
|
|
135
|
+
await writeClaimProof(`${path}.material`, pool, material);
|
|
136
|
+
const stored = await readStable(`${path}.material`, MAX_MATERIAL);
|
|
137
|
+
manifest = {
|
|
138
|
+
kind: 'rcl-public-claim-recovery', version: material.adoption ? 3 : 2, operationId: randomUUID(), createdAt, rclVersion: deps.rclVersion, gitCommonDir: commonDir,
|
|
139
|
+
selection, actorUserId: history.actorUserId, materialSha256: stored.sha256, nativeSha256: nativeRaw.sha256, stages, preview
|
|
140
|
+
};
|
|
141
|
+
await writeExclusive(path, manifest, MAX_RECOVERY_DOCUMENT_BYTES);
|
|
142
|
+
manifestSha = (await readStable(path, MAX_RECOVERY_DOCUMENT_BYTES)).sha256;
|
|
143
|
+
deps.stdout(JSON.stringify({ status: 'prepared', manifest: path, manifest_sha256: manifestSha, operation_id: manifest.operationId, preview }));
|
|
144
|
+
return 0;
|
|
145
|
+
}
|
|
146
|
+
if (options.selection || options.adoptManifest || options.adoptManifestSha256 || !options.manifestSha256)
|
|
147
|
+
throw new Error('apply_requires_exact_manifest');
|
|
148
|
+
const retained = await readStable(path, MAX_RECOVERY_DOCUMENT_BYTES);
|
|
149
|
+
if (retained.sha256 !== options.manifestSha256)
|
|
150
|
+
throw new Error('manifest_digest_mismatch');
|
|
151
|
+
manifest = manifestSchema.parse(decode(retained.text));
|
|
152
|
+
manifestSha = retained.sha256;
|
|
153
|
+
if (manifest.gitCommonDir !== commonDir)
|
|
154
|
+
throw new Error('native_repository_conflict');
|
|
155
|
+
const rawMaterial = await readStable(`${path}.material`, MAX_MATERIAL);
|
|
156
|
+
if (rawMaterial.sha256 !== manifest.materialSha256)
|
|
157
|
+
throw new Error('claim_material_changed');
|
|
158
|
+
material = await readClaimProof(`${path}.material`, pool);
|
|
159
|
+
if (sha256(material.nativeJson) !== manifest.nativeSha256)
|
|
160
|
+
throw new Error('native_source_conflict');
|
|
161
|
+
const selection = manifest.selection;
|
|
162
|
+
if (Boolean(material.adoption) !== (manifest.version === 3))
|
|
163
|
+
throw new Error('claim_adoption_version_conflict');
|
|
164
|
+
if (material.adoption)
|
|
165
|
+
await verifyAdoptionFiles(material.adoption);
|
|
166
|
+
const adoptedSplit = manifest.stages[0]?.kind === 'split' ? material.adoption?.accepted.find(s => s.id === manifest.stages[0]?.id) : undefined;
|
|
167
|
+
if (selection.action === 'split' && !adoptedSplit)
|
|
168
|
+
assertUnusedClaimIdentity(material.history, selection.identity);
|
|
169
|
+
const carriers = claimCarriers(material.history, selection);
|
|
170
|
+
const expectedKinds = [...(selection.action === 'split' ? ['split', ...carriers.map(() => 'transfer')] : []), ...(selection.disposition ? ['disposition'] : [])];
|
|
171
|
+
if (!isDeepStrictEqual(manifest.stages.map(s => s.kind), expectedKinds) || new Set(manifest.stages.map(s => s.id)).size !== manifest.stages.length ||
|
|
172
|
+
selection.action === 'split' && carriers.some((_, i) => manifest.stages[i + 1].carrierIndex !== i))
|
|
173
|
+
throw new Error('claim_manifest_stage_conflict');
|
|
174
|
+
if (!adoptedSplit)
|
|
175
|
+
validateDispositionIntent(selection, material.history, manifest.stages.at(-1)?.id, material, manifest.createdAt);
|
|
176
|
+
// Re-prove the pinned original before acquiring authority or contacting HTTP.
|
|
177
|
+
if (selection.action === 'split')
|
|
178
|
+
prepareClaimSplit(adoptedSplit ? adoptedSplit.preparation : splitInput(selection, material, manifest, material.history));
|
|
179
|
+
else
|
|
180
|
+
existingSplit(selection, material, material.history);
|
|
181
|
+
stage = 'remote';
|
|
182
|
+
const sink = await openSink(deps, requestBudget);
|
|
183
|
+
if (!sink)
|
|
184
|
+
return 3;
|
|
185
|
+
const output = await withRecoveryTarget(commonDir, selection.source.target, async (ownership) => {
|
|
186
|
+
stage = 'journal';
|
|
187
|
+
const journal = await openJournal(`${path}.journal`, manifestSha, manifest.operationId, options.apply ? 'apply' : 'resume', deps.beforeCheckpoint);
|
|
188
|
+
const owned = new Map(material.adoption?.accepted.map(a => [a.id, a.eventJson]));
|
|
189
|
+
// Existing packets are immutable and are the only receipts permitted to
|
|
190
|
+
// extend the preview. Never regenerate a payload after uncertain delivery.
|
|
191
|
+
for (const item of manifest.stages) {
|
|
192
|
+
const packetPath = `${path}.${item.id}.packet`;
|
|
193
|
+
if (await exists(packetPath)) {
|
|
194
|
+
const packet = decode((await readStable(packetPath, MAX_RECOVERY_DOCUMENT_BYTES)).text);
|
|
195
|
+
owned.set(item.id, packet.event_json);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
let history = material.history;
|
|
199
|
+
let historyToken;
|
|
200
|
+
const fresh = async () => {
|
|
201
|
+
if ((await readStable(path, MAX_RECOVERY_DOCUMENT_BYTES)).sha256 !== manifestSha ||
|
|
202
|
+
(await readStable(`${path}.material`, MAX_MATERIAL)).sha256 !== manifest.materialSha256)
|
|
203
|
+
throw new Error('claim_manifest_changed');
|
|
204
|
+
if (material.adoption) {
|
|
205
|
+
await verifyAdoptionFiles(material.adoption);
|
|
206
|
+
await verifyReplacedAbsence(material.adoption, sink);
|
|
207
|
+
}
|
|
208
|
+
const read = await readClaimTargetHistory(sink, selection.source, manifest.actorUserId);
|
|
209
|
+
if (read.kind !== 'ok')
|
|
210
|
+
throw new Error('claim_history_unanswered');
|
|
211
|
+
const current = claimHistoryContent(read.value);
|
|
212
|
+
assertHistoryExtension(material.history, current, owned);
|
|
213
|
+
for (const h of current.histories)
|
|
214
|
+
for (const receipt of h.receipts) {
|
|
215
|
+
const event = owned.get(receipt.id);
|
|
216
|
+
if (event &&
|
|
217
|
+
!matchesPreparedEventReceipt(receipt, event, { ...selection.source.scope, run_id: h.runId }, manifest.actorUserId))
|
|
218
|
+
throw new Error('claim_receipt_conflict');
|
|
219
|
+
}
|
|
220
|
+
history = current;
|
|
221
|
+
historyToken = read.value;
|
|
222
|
+
};
|
|
223
|
+
await fresh();
|
|
224
|
+
const stateBefore = await readStable(convergeRunStatePath(commonDir, selection.source.target), MAX_MATERIAL);
|
|
225
|
+
const savedPlanPath = `${path}.native-plan`;
|
|
226
|
+
if (stateBefore.sha256 !== manifest.nativeSha256 && !(await exists(savedPlanPath)))
|
|
227
|
+
throw new Error('native_source_changed');
|
|
228
|
+
const transfers = [];
|
|
229
|
+
const dispositions = [];
|
|
230
|
+
let acceptedSplit = selection.action === 'split' ? undefined : existingSplit(selection, material, history);
|
|
231
|
+
for (const item of manifest.stages) {
|
|
232
|
+
stage = 'remote';
|
|
233
|
+
await fresh();
|
|
234
|
+
const inputPath = `${path}.${item.id}.input`;
|
|
235
|
+
let preparation;
|
|
236
|
+
const inputExists = await exists(inputPath);
|
|
237
|
+
const adopted = material.adoption?.accepted.find(a => a.id === item.id);
|
|
238
|
+
if (adopted) {
|
|
239
|
+
preparation = adopted.preparation;
|
|
240
|
+
if (inputExists && !isDeepStrictEqual(await readClaimProof(inputPath, pool), preparation))
|
|
241
|
+
throw new Error('claim_preparation_conflict');
|
|
242
|
+
}
|
|
243
|
+
else if (inputExists)
|
|
244
|
+
preparation = await readClaimProof(inputPath, pool);
|
|
245
|
+
else if (item.kind === 'split')
|
|
246
|
+
preparation = splitInput(selection, material, manifest, history);
|
|
247
|
+
else {
|
|
248
|
+
if (!acceptedSplit)
|
|
249
|
+
throw new Error('claim_split_receipt_missing');
|
|
250
|
+
const common = { eventId: item.id, occurredAt: manifest.createdAt, actorUserId: manifest.actorUserId, split: acceptedSplit, sourceContext: historyContext(history, selection.source) };
|
|
251
|
+
if (item.kind === 'transfer') {
|
|
252
|
+
const carrier = carriers[item.carrierIndex];
|
|
253
|
+
preparation = { ...common, carrier: historySource(history, carrier), carrierContext: historyContext(history, carrier), carrierKind: carrier.kind, carrierIdentity: carrier.identity, reason: selection.reason };
|
|
254
|
+
}
|
|
255
|
+
else {
|
|
256
|
+
preparation = dispositionInput(selection, history, acceptedSplit, item.id, manifest.createdAt, manifest.actorUserId);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
validatePreparation(manifest, material, adopted?.validationStage ?? item, preparation, adopted?.history ?? history, acceptedSplit, adopted?.createdAt ?? manifest.createdAt);
|
|
260
|
+
const event = item.kind === 'split' ? prepareClaimSplit(preparation).event :
|
|
261
|
+
item.kind === 'transfer' ? prepareObligationTransfer(preparation).event : prepareClaimDisposition(preparation).event;
|
|
262
|
+
const eventJson = JSON.stringify(event);
|
|
263
|
+
if (adopted && eventJson !== adopted.eventJson)
|
|
264
|
+
throw new Error('claim_adoption_event_conflict');
|
|
265
|
+
const packetPath = `${path}.${item.id}.packet`;
|
|
266
|
+
if (!inputExists)
|
|
267
|
+
await writeClaimProof(inputPath, pool, preparation);
|
|
268
|
+
owned.set(item.id, eventJson);
|
|
269
|
+
const receipt = await deliverPreparedClaimEvent({
|
|
270
|
+
gitCommonDir: commonDir, target: selection.source.target, ownership,
|
|
271
|
+
operationId: manifest.operationId, manifestSha256: manifestSha, packetPath, mode: await exists(packetPath) ? 'resume' : 'apply',
|
|
272
|
+
scope: { ...selection.source.scope, run_id: event.run_id }, actor: manifest.actorUserId, eventJson, sink, journal, verifyContext: fresh, allowPost: !adopted
|
|
273
|
+
});
|
|
274
|
+
if (item.kind === 'split') {
|
|
275
|
+
const p = preparation;
|
|
276
|
+
acceptedSplit = {
|
|
277
|
+
selection: p, receipt, actorUserId: manifest.actorUserId,
|
|
278
|
+
source: historySource(history, selection.source), native: {
|
|
279
|
+
sourceJson: material.nativeJson, target: selection.source.target, nativeSourceJsons: material.nativeSourceJsons, recoveryMaterials: material.recoveryMaterials,
|
|
280
|
+
reports: nativeReports(material)
|
|
281
|
+
}
|
|
282
|
+
};
|
|
283
|
+
}
|
|
284
|
+
else if (item.kind === 'transfer')
|
|
285
|
+
transfers.push({ preparation: preparation, receipt, actorUserId: manifest.actorUserId });
|
|
286
|
+
else
|
|
287
|
+
dispositions.push({ preparation: preparation, receipt, actorUserId: manifest.actorUserId });
|
|
288
|
+
}
|
|
289
|
+
await fresh();
|
|
290
|
+
if (!acceptedSplit)
|
|
291
|
+
throw new Error('claim_split_receipt_missing');
|
|
292
|
+
let projectionVersion = 2;
|
|
293
|
+
if (await exists(savedPlanPath)) {
|
|
294
|
+
const saved = await readClaimProof(savedPlanPath, pool);
|
|
295
|
+
if (!saved.currentHistory || !sameClaimHistoryEvidence(saved.currentHistory, history))
|
|
296
|
+
throw new Error('native_plan_history_changed');
|
|
297
|
+
projectionVersion = nativeRecoveryPlanProjectionVersion(saved);
|
|
298
|
+
history = { ...history, readWindow: saved.currentHistory.readWindow };
|
|
299
|
+
}
|
|
300
|
+
const input = {
|
|
301
|
+
sourceJson: material.nativeJson, externalMaterial: true, recoveryMaterials: material.recoveryMaterials, currentHistory: history, nativeSourceJsons: material.nativeSourceJsons, target: selection.source.target, operationId: manifest.operationId,
|
|
302
|
+
anchors: selection.action === 'split' ? [correctionAnchor(acceptedSplit.selection, acceptedSplit.receipt, manifest.actorUserId, manifest.operationId)] : [], reports: selection.action === 'split' ? [acceptedSplit.source.reportJson] : [],
|
|
303
|
+
sourceReceipts: selection.action === 'split' ? acceptedSplit.selection.sourceReceipts : [], transfers, dispositions, carriers: carriers.map(carrier => ({ carrier, inventoryStatus: 'complete', sources: history.sources }))
|
|
304
|
+
};
|
|
305
|
+
const plan = deriveNativeRecovery(input, projectionVersion);
|
|
306
|
+
if (await exists(savedPlanPath)) {
|
|
307
|
+
if (!isDeepStrictEqual(await readClaimProof(savedPlanPath, pool), plan))
|
|
308
|
+
throw new Error('native_plan_conflict');
|
|
309
|
+
}
|
|
310
|
+
else
|
|
311
|
+
await writeClaimProof(savedPlanPath, pool, plan);
|
|
312
|
+
await journal.append('claim_native_intent', { source_sha256: plan.sourceSha256, result_sha256: plan.resultSha256 });
|
|
313
|
+
await fresh();
|
|
314
|
+
const result = await applyNativeRecovery({ gitCommonDir: commonDir, plan, ownership, history: historyToken });
|
|
315
|
+
await journal.append('claim_native_verified', result);
|
|
316
|
+
return {
|
|
317
|
+
status: 'acknowledged', operation_id: manifest.operationId, native: result, actionable_identities: plan.actionableIdentities,
|
|
318
|
+
accounting: 'rounds, attempts and original findings unchanged', projection_freshness: { read_window: plan.currentHistory?.readWindow, qualification: 'authenticated snapshot; not current server approval' }, receipt_ids: manifest.stages.map(s => s.id)
|
|
319
|
+
};
|
|
320
|
+
});
|
|
321
|
+
deps.stdout(JSON.stringify(output));
|
|
322
|
+
return 0;
|
|
323
|
+
}
|
|
324
|
+
catch (error) {
|
|
325
|
+
deps.stdout(JSON.stringify({ status: 'refused', reason: errorCode(error), stage }));
|
|
326
|
+
return stage === 'input' ? 2 : stage === 'journal' ? 5 : 4;
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
function nativeReports(material) {
|
|
330
|
+
const states = [material.nativeJson, ...material.nativeSourceJsons].map(s => decode(s));
|
|
331
|
+
const digests = new Set();
|
|
332
|
+
for (const state of states) {
|
|
333
|
+
for (const round of state.rounds ?? [])
|
|
334
|
+
if (round.reportBinding?.reportSha256)
|
|
335
|
+
digests.add(round.reportBinding.reportSha256);
|
|
336
|
+
for (const op of state.recovery?.operations ?? [])
|
|
337
|
+
for (const anchor of op.anchors ?? [])
|
|
338
|
+
digests.add(anchor.source.reportSha256);
|
|
339
|
+
}
|
|
340
|
+
return [...digests].map(digest => {
|
|
341
|
+
const source = material.history.sources.find(s => s.selector.reportSha256 === digest);
|
|
342
|
+
if (!source?.reportJson)
|
|
343
|
+
throw new Error('native_original_report_unavailable');
|
|
344
|
+
return source.reportJson;
|
|
345
|
+
});
|
|
346
|
+
}
|
|
347
|
+
function existingSplit(selection, material, history) {
|
|
348
|
+
const state = decode(material.nativeJson);
|
|
349
|
+
const candidates = recoveryAnchors(state).filter(a => a.identity === selection.identity);
|
|
350
|
+
if (candidates.length !== 1)
|
|
351
|
+
throw new Error('existing_claim_anchor_unavailable');
|
|
352
|
+
const anchor = candidates[0];
|
|
353
|
+
if (anchor.source.findingRef !== selection.findingRef || anchor.source.previousIdentity !== selection.previousIdentity ||
|
|
354
|
+
anchor.source.reportSha256 !== selection.source.reportSha256 || anchor.source.runId !== selection.source.scope.run_id ||
|
|
355
|
+
!isDeepStrictEqual(anchor.descriptor, selection.descriptor) || !isDeepStrictEqual(anchor.destination, selection.source.scope))
|
|
356
|
+
throw new Error('existing_claim_anchor_conflict');
|
|
357
|
+
const receipt = history.histories.flatMap(h => h.receipts).find(r => r.id === anchor.receipt.id);
|
|
358
|
+
if (!receipt || !isDeepStrictEqual(receipt, anchor.receipt) || !receipt.actor_user_id)
|
|
359
|
+
throw new Error('existing_claim_receipt_unavailable');
|
|
360
|
+
const snapshotMap = new Map([material.nativeJson, ...material.nativeSourceJsons].map(text => [sha256(text), text]));
|
|
361
|
+
const nativeJson = snapshotMap.get(anchor.nativeSource.sha256);
|
|
362
|
+
if (!nativeJson)
|
|
363
|
+
throw new Error('existing_claim_native_source_unavailable');
|
|
364
|
+
const snapshots = [];
|
|
365
|
+
let sourceState = decode(nativeJson);
|
|
366
|
+
const seen = new Set();
|
|
367
|
+
for (;;) {
|
|
368
|
+
const digest = sourceState.version === 3 ? sourceState.recovery?.operations?.at(-1)?.sourceSha256 : sourceState.version === 2 ? sourceState.migration?.sourceSha256 : undefined;
|
|
369
|
+
if (!digest)
|
|
370
|
+
break;
|
|
371
|
+
const text = snapshotMap.get(digest);
|
|
372
|
+
if (!text || seen.has(digest))
|
|
373
|
+
throw new Error('existing_claim_native_source_unavailable');
|
|
374
|
+
seen.add(digest);
|
|
375
|
+
snapshots.push(text);
|
|
376
|
+
sourceState = decode(text);
|
|
377
|
+
}
|
|
378
|
+
const event = decode(anchor.eventJson);
|
|
379
|
+
const payload = event.payload;
|
|
380
|
+
const source = historySource(history, selection.source);
|
|
381
|
+
const eventIds = payload.source_event_ids;
|
|
382
|
+
const sourceReceipts = eventIds.map(id => {
|
|
383
|
+
const r = history.histories.flatMap(h => h.receipts).find(r => r.id === id);
|
|
384
|
+
if (!r)
|
|
385
|
+
throw new Error('existing_claim_receipt_unavailable');
|
|
386
|
+
return r;
|
|
387
|
+
});
|
|
388
|
+
const input = {
|
|
389
|
+
scope: anchor.destination, target: selection.source.target, eventId: event.id, occurredAt: event.occurred_at, nativeJson, nativeSourceJsons: snapshots,
|
|
390
|
+
recoveryMaterials: material.recoveryMaterials, reportJson: source.reportJson, findingRef: selection.findingRef, previousIdentity: selection.previousIdentity,
|
|
391
|
+
identity: selection.identity, descriptor: selection.descriptor, reason: payload.reason, expectedEventSequence: payload.expected_event_sequence,
|
|
392
|
+
classificationId: eventIds[0], ...(eventIds[1] ? { correctionId: eventIds[1] } : {}), sourceReceipts
|
|
393
|
+
};
|
|
394
|
+
if (!isDeepStrictEqual(correctionAnchor(input, receipt, receipt.actor_user_id, anchor.operationId), anchor))
|
|
395
|
+
throw new Error('existing_claim_anchor_conflict');
|
|
396
|
+
const oldMaterial = { ...material, nativeJson, nativeSourceJsons: snapshots };
|
|
397
|
+
return {
|
|
398
|
+
selection: input, receipt, actorUserId: receipt.actor_user_id, source, native: {
|
|
399
|
+
sourceJson: nativeJson, nativeSourceJsons: snapshots,
|
|
400
|
+
recoveryMaterials: material.recoveryMaterials, target: selection.source.target, reports: nativeReports(oldMaterial)
|
|
401
|
+
}
|
|
402
|
+
};
|
|
403
|
+
}
|
|
404
|
+
function validateDispositionIntent(selection, history, eventId, material, occurredAt) {
|
|
405
|
+
const request = selection.disposition;
|
|
406
|
+
if (!request)
|
|
407
|
+
return;
|
|
408
|
+
if (!isDeepStrictEqual(scrubDeep(request), request))
|
|
409
|
+
throw new Error('claim_disposition_redaction_conflict');
|
|
410
|
+
const source = validateOccurrenceSource(historySource(history, selection.source));
|
|
411
|
+
const member = source.members.find(m => m.ref === selection.findingRef);
|
|
412
|
+
if (!member || member.unresolvedReason)
|
|
413
|
+
throw new Error('claim_original_mapping_unavailable');
|
|
414
|
+
if (request.mode === 'fresh' && request.originalVerdictEventId)
|
|
415
|
+
throw new Error('fresh_disposition_has_original_verdict');
|
|
416
|
+
if (selection.action !== 'split') {
|
|
417
|
+
prepareClaimDisposition(dispositionInput(selection, history, existingSplit(selection, material, history), eventId, occurredAt, history.actorUserId));
|
|
418
|
+
return;
|
|
419
|
+
}
|
|
420
|
+
if (member.severity === 'critical' && member.gating !== 'none' && request.severity !== 'critical')
|
|
421
|
+
throw new Error('claim_critical_disposition_required');
|
|
422
|
+
if (request.mode === 'fresh')
|
|
423
|
+
return;
|
|
424
|
+
const receipt = history.histories.find(h => h.runId === selection.source.scope.run_id)?.receipts.find(r => r.id === request.originalVerdictEventId);
|
|
425
|
+
validatePreservedDispositionSubject({
|
|
426
|
+
source, member, descriptor: selection.descriptor, eventId: eventId, verdict: request.verdict,
|
|
427
|
+
severity: request.severity, reason: request.reason, originalVerdict: receipt, originalVerdictActorUserId: receipt?.actor_user_id ?? undefined
|
|
428
|
+
});
|
|
429
|
+
}
|
|
430
|
+
function dispositionInput(selection, history, split, eventId, occurredAt, actorUserId) {
|
|
431
|
+
const request = selection.disposition;
|
|
432
|
+
const rows = claimRunHistory(history, selection.source).receipts;
|
|
433
|
+
const prior = rows.filter(r => r.kind === 'finding_claim_disposition' && r.payload.claim_identity === selection.identity).at(-1);
|
|
434
|
+
const original = request.originalVerdictEventId ? rows.find(r => r.id === request.originalVerdictEventId) : undefined;
|
|
435
|
+
return {
|
|
436
|
+
eventId, occurredAt, actorUserId, split, sourceContext: historyContext(history, selection.source),
|
|
437
|
+
mode: request.mode, verdict: request.verdict, severity: request.severity, reason: request.reason,
|
|
438
|
+
previousDispositionEventId: prior?.id ?? null, ...(prior ? { previousDisposition: prior } : {}),
|
|
439
|
+
...(original ? { originalVerdict: original, originalVerdictActorUserId: original.actor_user_id ?? undefined } : {}),
|
|
440
|
+
laterSources: history.sources.filter(s => s.selector.round > selection.source.round).flatMap(s => {
|
|
441
|
+
let source;
|
|
442
|
+
try {
|
|
443
|
+
source = historySource(history, s.selector);
|
|
444
|
+
}
|
|
445
|
+
catch {
|
|
446
|
+
return [];
|
|
447
|
+
}
|
|
448
|
+
return validateOccurrenceSource(source).members.some(m => m.identity === selection.identity) ? [source] : [];
|
|
449
|
+
})
|
|
450
|
+
};
|
|
451
|
+
}
|
|
452
|
+
function validatePreparation(manifest, material, item, preparation, history, acceptedSplit, createdAt = manifest.createdAt) {
|
|
453
|
+
const selection = manifest.selection;
|
|
454
|
+
const carriers = claimCarriers(history, selection);
|
|
455
|
+
if (preparation.eventId !== item.id || preparation.occurredAt !== createdAt)
|
|
456
|
+
throw new Error('claim_preparation_conflict');
|
|
457
|
+
if (item.kind === 'split') {
|
|
458
|
+
const p = preparation;
|
|
459
|
+
const expected = splitInput(selection, material, { ...manifest, createdAt }, history);
|
|
460
|
+
if (!isDeepStrictEqual({ ...p, expectedEventSequence: expected.expectedEventSequence }, expected))
|
|
461
|
+
throw new Error('claim_preparation_conflict');
|
|
462
|
+
}
|
|
463
|
+
else {
|
|
464
|
+
const p = preparation;
|
|
465
|
+
if (!isDeepStrictEqual(p.split, acceptedSplit) || p.actorUserId !== manifest.actorUserId ||
|
|
466
|
+
!isDeepStrictEqual({ ...p.sourceContext, eventSequence: 0 }, { ...historyContext(history, selection.source), eventSequence: 0 }))
|
|
467
|
+
throw new Error('claim_preparation_conflict');
|
|
468
|
+
if (item.kind === 'transfer') {
|
|
469
|
+
const t = p;
|
|
470
|
+
const carrier = carriers[item.carrierIndex];
|
|
471
|
+
if (t.reason !== selection.reason || t.carrierKind !== carrier.kind || t.carrierIdentity !== carrier.identity ||
|
|
472
|
+
!isDeepStrictEqual(t.carrier, historySource(history, carrier)) || !isDeepStrictEqual({ ...t.carrierContext, eventSequence: 0 }, { ...historyContext(history, carrier), eventSequence: 0 }))
|
|
473
|
+
throw new Error('claim_preparation_conflict');
|
|
474
|
+
}
|
|
475
|
+
else {
|
|
476
|
+
const d = p;
|
|
477
|
+
const request = selection.disposition;
|
|
478
|
+
if (d.mode !== request.mode || d.verdict !== request.verdict || d.severity !== request.severity || d.reason !== request.reason ||
|
|
479
|
+
(d.originalVerdict?.id ?? null) !== (request.originalVerdictEventId ?? null))
|
|
480
|
+
throw new Error('claim_preparation_conflict');
|
|
481
|
+
const rows = history.histories.find(h => h.runId === selection.source.scope.run_id).receipts;
|
|
482
|
+
const prior = rows.filter(r => r.kind === 'finding_claim_disposition' && r.payload.claim_identity === selection.identity &&
|
|
483
|
+
r.sequence <= d.sourceContext.eventSequence).at(-1);
|
|
484
|
+
const original = request.originalVerdictEventId ? rows.find(r => r.id === request.originalVerdictEventId) : undefined;
|
|
485
|
+
const later = history.sources.filter(s => s.selector.round > selection.source.round).flatMap(s => {
|
|
486
|
+
let source;
|
|
487
|
+
try {
|
|
488
|
+
source = historySource(history, s.selector);
|
|
489
|
+
}
|
|
490
|
+
catch {
|
|
491
|
+
return [];
|
|
492
|
+
}
|
|
493
|
+
return validateOccurrenceSource(source).members.some(m => m.identity === selection.identity) ? [source] : [];
|
|
494
|
+
});
|
|
495
|
+
if (d.previousDispositionEventId !== (prior?.id ?? null) || !isDeepStrictEqual(d.previousDisposition, prior) ||
|
|
496
|
+
!isDeepStrictEqual(d.originalVerdict, original) || !isDeepStrictEqual(d.laterSources ?? [], later))
|
|
497
|
+
throw new Error('claim_preparation_conflict');
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
function splitEvidence(material, selection, p, receipt) {
|
|
502
|
+
return { selection: p, receipt, actorUserId: material.history.actorUserId, source: historySource(material.history, selection.source), native: { sourceJson: material.nativeJson, target: selection.source.target, nativeSourceJsons: material.nativeSourceJsons, recoveryMaterials: material.recoveryMaterials, reports: nativeReports(material) } };
|
|
503
|
+
}
|
|
504
|
+
//# sourceMappingURL=recover-claim.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recover-claim.js","sourceRoot":"","sources":["../../src/evidence/recover-claim.ts"],"names":[],"mappings":"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"}
|