Skip to content

feat: Extends pr-workflow domain - /lane-graphs skill - #107

Draft
MajorLift wants to merge 2 commits into
mainfrom
jongsun/add/lane-graphs
Draft

feat: Extends pr-workflow domain - /lane-graphs skill#107
MajorLift wants to merge 2 commits into
mainfrom
jongsun/add/lane-graphs

Conversation

@MajorLift

@MajorLift MajorLift commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

Overview

An evidence lane is a documented procedure for proving one claim about a pull request. This adds lane-graphs: a router contract, three prose lanes converted to executable graphs, and an interpreter holding runs to them.

Five nodes — preconditions, baseline, treatment (read back what was applied), prediction, capture. mutation-power, base-branch-proof and render-delta each publish a does_not_cover list: a deterministic graph fails identically forever and reads as evidence, so naming what it declined to measure is the mitigation.

Router contract. No-match is a first-class result — a graph run on a claim it does not measure goes green on a question nobody asked. An unrouted read runs regardless of what matched — the catalog holds only questions someone already thought of.

The interpreter is scripts/graph-run.mjs. A graph's check, run and expect fields are natural language; nothing evaluates them — verdicts come from whoever ran the node. Mechanized: a verdict per node, evidence on every pass, absent reported not dropped, no complete while a node is unanswered.

The three graph files here are temporary — they have moved to a standalone runners repository (v0.1.0), now the source, kept only until its review lands. Two copies already failed once: four fixes landed on the copy CI read, none reached the copy under review; check-duplicates.sh does not yet cover the graphs. Also open is layout, not content: whether a graph belongs to the skill or the runners — the contract, node shape and ledger rules do not depend on it.

Motivation

Prose lanes are run by hand, and the mechanical parts fail while producing a clean artifact: $SHA^..$SHA rather than the pull request's range measured a twenty-sixth of a change; a probe whose imports did not resolve reported success, measuring nothing; an awk -v escaping bug published a falsification for a line it never wrote; 22 of 27 runs published to already-merged pull requests, median 22 days late.

Routing is judgment; execution is not.

Showcase

Controls: three graphs validate and a full ledger exits 0; blank ledger, removed node, evidence-less pass, unknown ledger entry each exit 1.

A lone checkout has dead cross-branch references; they are not defects — the installer resolves one source directory and does not follow ## Related, so forward references across open PRs warn rather than error. It merges clean onto main with ship-hooks-and-trigger-check, pr-validate-falsifying-test and audit-skills, 0 lint errors.

#44724 (gated benchmark legs), from the evidence showcase: 2 of 17 gate-carrying legs red, 15 green; the 2 re-executed at new timestamps, the 15 inherited. The matrix was not re-run — the inherited legs are the control.

…cedure

Determinism belongs on the envelope and not on the inquiry. Computing a
merge-base, checking a probe loaded, verifying a mutation landed where it was
aimed — none of that needs judgement, and all of it has been got wrong by hand.
Which measurement answers a claim still does.

Five nodes per graph, two of which exist only because they were missing when
something published anyway: reading the treatment back off disk, and naming the
observation it should produce. A run whose mutation silently changed shape, or
that went red somewhere other than where it aimed, satisfied every other check.

The router contract carries the part that keeps routing honest. A router over
enough lanes always finds a best score, so no-match has to be a first-class
result rather than a fallback into the nearest lane, and an unrouted read of the
mechanism runs regardless of what matched — the catalog is a list of questions
someone already thought of, and the findings worth having sit outside it.

Three lanes converted from prose: mutation power, base-against-branch, and render
delta. Each states its own blind spot in its output, because a green result that
does not say what it declined to measure reads as broader than it is.
…aring a schema

The three .graph.json specs name an `executor` and nothing parses them. A run
could skip a node and still describe itself as having followed the graph,
because nothing held the description to the file — which is the failure the
whole package is about, one level up.

What this can and cannot do is worth being exact about, since overstating it
would reproduce that failure. The check, run and expect fields are natural
language; no interpreter evaluates them and this one does not pretend to. A
node's verdict is supplied by whoever ran it.

What is mechanised is the part that was actually being skipped:

  - every node must carry a verdict
  - a pass must name its evidence, because a pass with an empty evidence field
    is a claim about a run, which is refused everywhere else in this package
  - `absent` is a first-class outcome, reported rather than silently dropped
  - a ledger entry naming no node in the graph is an error, not ignored
  - a graph with an unanswered node cannot report complete

Structural validation refuses a graph missing a baseline or a prediction,
those being the shape of every vacuous run: a treatment applied to nothing, or
a result compared to no stated expectation.

  graph-run.mjs <graph.json>                    validate structure
  graph-run.mjs <graph.json> --scaffold         emit a blank ledger
  graph-run.mjs <graph.json> --ledger <l.json>  check a filled-in ledger

Controls: all three graphs validate; blank ledger exit 1; fully answered exit
0; one node silently removed exit 1; pass with empty evidence exit 1; unknown
ledger entry exit 1.
@MajorLift MajorLift changed the title feat(pr-workflow): add lane-graphs — a router contract and three executable lanes feat: Extends pr-workflow domain - lane graphs router contract and lanes Aug 31, 2026
@MajorLift MajorLift changed the title feat: Extends pr-workflow domain - lane graphs router contract and lanes feat: Extends pr-workflow domain - /lane-graphs skill Aug 31, 2026
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.

1 participant