Skip to content

Capture execution-phase edits as typed ExecutionDelta objects (issue #7)#10

Merged
IanMayo merged 1 commit into
mainfrom
claude/vibrant-volta-j0e264
Jun 12, 2026
Merged

Capture execution-phase edits as typed ExecutionDelta objects (issue #7)#10
IanMayo merged 1 commit into
mainfrom
claude/vibrant-volta-j0e264

Conversation

@IanMayo

@IanMayo IanMayo commented Jun 12, 2026

Copy link
Copy Markdown
Contributor

What & why

Closes #7. During Execute, the operator can perturb a live run — drop a +5/+25 min obstruction in the vehicle's path, or block the next cell and force an in-flight re-route. Both already appended a prose Observation to 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, unlike SteeringDelta (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 enum ExecutionEventKind (obstruction | block) and a HexCell value object (h3 + optional lat/lng), the hex-grid successor to Waypoint.
  • schema/records.yaml — new concrete ExecutionDelta (is_a: Delta): event, at_min, cell, delay_min, rv_min, absorbed_min. Regenerated schema/gen/ (JSON Schema + TS) and the HTML reference (62→64 classes, 20→21 enums) via schema/generate.shgenerated, not hand-shaped (ADR-0012).
  • app/js/wingman/wingman.jsshareExecutionDelta() calls seam.putObject('ExecutionDelta', …) on each obstruction/block, attributed to the operator wearing the Ops hat, mirroring SteeringDelta. 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 min obstruction lands a typed ExecutionDelta in the store (event/cell/delay_min) and surfaces in the Data Analysis monitor.
  • Docs/memory: ADR-0025, work-log row, and 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. See specs/004-capture-execution-deltas/evidence/screenshots/01-execution-delta.png.

Out of scope

  • Replay re-application — re-running a stamp does not yet re-apply the captured perturbations (they're exogenous operator acts). Capturing the structured inputs is the prerequisite; automatic re-application is a noted follow-up.
  • HexCell is now the natural type to migrate the documented square-vs-hex Constraint.cells drift in SteeringDelta onto (bugs.md).

Verification

  • npm run typecheck0 errors (the imported ExecutionDelta type resolves from gen/).
  • npm run test:unit12 golden/unit tests green (kernel set-pieces unchanged).
  • node run-playwright.mjs13 e2e green (the existing lap + the new capture test).

https://claude.ai/code/session_01DhuYTVRy3iJ9j9ha15FcUC


Generated by Claude Code

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
@github-actions

github-actions Bot commented Jun 12, 2026

Copy link
Copy Markdown
Contributor
PR Preview Action v1.8.1
Preview removed because the pull request was closed.
2026-06-12 21:05 UTC

@IanMayo IanMayo merged commit bfefd30 into main Jun 12, 2026
3 checks passed
@IanMayo IanMayo deleted the claude/vibrant-volta-j0e264 branch June 12, 2026 21:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Execution phase data changes

2 participants