Capture execution-phase edits as typed ExecutionDelta objects (issue #7)#10
Merged
Conversation
In-flight obstructions and blocks during Execute appended a prose
Observation to the append-only log but never reached the
content-addressed object store, so their structured inputs were
invisible to the Data Analysis monitor and absent for replay (NF3) —
unlike SteeringDelta, the first DEC-61 write.
Model them in LinkML and write them via the same attributed-delta path:
- schema/common.yaml: ExecutionEventKind (obstruction|block) + a HexCell
value object (the hex successor to Waypoint).
- schema/records.yaml: ExecutionDelta (is_a Delta) — event, at_min, cell,
delay_min, rv_min, absorbed_min. Regenerated schema/gen/ + HTML ref.
- app/js/wingman/wingman.js: shareExecutionDelta() calls
seam.putObject('ExecutionDelta', ...) on each edit, attributed to the
operator on the Ops hat. Prose log kept; share is non-fatal.
The edits now surface in Data Analysis (with change-glow) and are kept
structurally for replay. Replay re-application is deferred (follow-up).
New e2e capture test; 0 typecheck errors, 12 unit + 13 e2e green.
ADR-0025; specs/004-capture-execution-deltas/.
https://claude.ai/code/session_01DhuYTVRy3iJ9j9ha15FcUC
Contributor
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What & why
Closes #7. During Execute, the operator can perturb a live run — drop a
+5/+25 minobstruction in the vehicle's path, or block the next cell and force an in-flight re-route. Both already appended a proseObservationto the append-only execution log, but their structured inputs (which cell, how many minutes, the resulting RV) lived only in transient wingman UI state. Nothing reached the content-addressed object store — so, unlikeSteeringDelta(the first DEC-61 write), the perturbations were invisible to the Data Analysis monitor and carried no structured inputs for replay (NF3).The maintainer asked: "they aren't captured in the model. Should they be?" — Yes. This models the perturbation in LinkML and writes it via the existing DEC-61 attributed-delta path.
Changes
schema/common.yaml— new enumExecutionEventKind(obstruction|block) and aHexCellvalue object (h3+ optionallat/lng), the hex-grid successor toWaypoint.schema/records.yaml— new concreteExecutionDelta (is_a: Delta):event,at_min,cell,delay_min,rv_min,absorbed_min. Regeneratedschema/gen/(JSON Schema + TS) and the HTML reference (62→64 classes, 20→21 enums) viaschema/generate.sh— generated, not hand-shaped (ADR-0012).app/js/wingman/wingman.js—shareExecutionDelta()callsseam.putObject('ExecutionDelta', …)on each obstruction/block, attributed to the operator wearing the Ops hat, mirroringSteeringDelta. The prose log entry is kept; the share is non-fatal (the append-only log already recorded the event, so a failed write never breaks the live loop).e2e/skeleton.spec.ts— new test: a+25 minobstruction lands a typedExecutionDeltain the store (event/cell/delay_min) and surfaces in the Data Analysis monitor.specs/004-capture-execution-deltas/(spec + blog post + evidence).Evidence
The obstruction captured as a typed
ExecutionDelta, drilled down in the Data Analysis monitor —scope: execution,event: obstruction,at_min: 70,cell {h3, lat, lng},delay_min: 25,rv_min: 106.2,absorbed_min: 4.6. Seespecs/004-capture-execution-deltas/evidence/screenshots/01-execution-delta.png.Out of scope
HexCellis now the natural type to migrate the documented square-vs-hexConstraint.cellsdrift inSteeringDeltaonto (bugs.md).Verification
npm run typecheck— 0 errors (the importedExecutionDeltatype resolves fromgen/).npm run test:unit— 12 golden/unit tests green (kernel set-pieces unchanged).node run-playwright.mjs— 13 e2e green (the existing lap + the new capture test).https://claude.ai/code/session_01DhuYTVRy3iJ9j9ha15FcUC
Generated by Claude Code