Skip to content

claude-ops: lane-launcher never captures launch commit, leaving refresh.md's staleness probe unfillable #792

Description

@kyle-sexton

Problem

plugins/claude-ops/skills/lanes/context/refresh.md's git staleness probe (added in #514 / PR #791) references a <lane-launch-commit> placeholder described as "the repo HEAD when lanes start/restart last ran" — but plugins/claude-ops/skills/lanes/scripts/lane-launcher.sh never captures this value anywhere (confirmed by inspection: the only rev-parse call in that script is rev-parse --show-toplevel for the repo root). An operator or future automation following the probe literally has no automated way to retrieve <lane-launch-commit> — it's advisory-only today.

Observed vs expected

Observed: the probe is conceptually correct (git log --oneline "<lane-launch-commit>..${default}" -- plugins/claude-ops/) but the placeholder has no producer.
Expected: lane-launcher.sh captures git rev-parse HEAD at launch time (after its pre-launch pull step) and persists it somewhere the probe doc can point at — e.g. ${CLAUDE_PLUGIN_DATA}/lanes/<lane>-launch-commit.

Fix direction (from two independent review passes on PR #791)

Launcher patch: after the pre-launch git pull, capture git rev-parse HEAD and write it to a per-lane file under ${CLAUDE_PLUGIN_DATA}/lanes/. Update context/refresh.md's probe instructions to read from that file instead of an unfilled placeholder. A hex-only SHA from git rev-parse HEAD carries no injection risk; if this is ever instead sourced from external/user-controlled input, that input must never be interpolated unquoted into the probe command — call this out explicitly in the doc once the launcher change lands.

Lighter-weight fallback if the launcher change is out of scope for now: document claude agents --json's startedAt field as a time-based approximation (git log --after="<startedAt>" origin/main -- plugins/claude-ops/).

Category

behavioral (documentation gap / incomplete automation surface, not a bug in shipped behavior — the probe is correctly labeled advisory)

Lane / source

work lane, 2026-07-21. Deferred VALID finding from PR #791's post-green review pass (two independent review-bot passes both flagged it, before and after a follow-up commit; both classified it non-blocking for a doc-only PR).

Work-class: C3 (bug-fix-shaped) — attended triage 2026-07-23, operator-ratified. 🤖

Metadata

Metadata

Assignees

No one assigned

    Labels

    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.priority: mediumReal value, no hard deadline; normal backlog flow.status: readyTriaged, unblocked, and fully specified; eligible to pick up.work-class: scopedA briefed fix or small feature; blast radius bounded by the brief, tests exist.

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions