fix(environment): own JSON fields across capture, state and replay

This commit is contained in:
morluto committed 2026-10-26 18:27:30 +08:00
1 parent cc5a96933a
commit e54bf1006e
57 files changed
+1019 -389

No files matched your search

@@ -1,6 +1,7 @@
import { jsonTextCodeUnits } from "../jsonSerialization.js";
import type { JsonValue } from "../jsonValue.js";
import {
ownMember,
isObject,
locateItem,
at,
@@ -103,7 +104,7 @@ export const clockEvidence = (
draft: WriteDraft,
field: string,
): JsonValue | undefined =>
draft.fixedWidth.get(field) ?? draft.observed?.[field];
draft.fixedWidth.get(field) ?? ownMember(draft.observed, field);
/** A write observation plus the fields its selected read view actually covers, if any. */
type UpdateObservation = Observed & {
@@ -599,8 +600,8 @@ export const updateEntity = (
(rule) =>
recordedGeneratedValue(
rule,
entity.fields[rule.field],
after.object[rule.field],
ownMember(entity.fields, rule.field),
ownMember(after.object, rule.field),
),
referencedIn(context),
);
@@ -663,7 +664,7 @@ const fitUpdateClocks = (
return rule;
const format = fittedClockFormat(
rule.format,
after[rule.field],
ownMember(after, rule.field),
clockEvidence(draft, rule.field),
);
return format === undefined ? rule : { ...rule, format };
@@ -682,7 +683,10 @@ const fitUpdateClocks = (
const held = planned.get(rule.field);
return rule.rule === "clock" &&
held?.rule === "clock" &&
matchesClockFormat(held.format, readClock(after[rule.field]))
matchesClockFormat(
held.format,
readClock(ownMember(after, rule.field)),
)
? { ...rule, format: held.format }
: rule;
}),
@@ -710,7 +714,7 @@ const contradictsGeneratedClock = (
)
)
return false;
const previous = readClock(before[rule.field]);
const previous = readClock(ownMember(before, rule.field));
if (previous === undefined) return false;
const next = readClock(after[rule.field]);
return (