Skip to content

The dogfood release gate is unrunnable for every sibling repo whenever aprender is not on main #2701

Closed as not planned

Description

@noahgift

Found while running pmat's 3.32.0 pre-release protocol. This is the revisit trigger the shim itself names, and it has now fired.

Reproduction, today

$ cd /home/noah/src/aprender && git rev-parse --abbrev-ref HEAD
fix/benchmark-matrix-determinism

$ ls scripts/dogfood.sh
ls: cannot access 'scripts/dogfood.sh': No such file or directory

$ git cat-file -e origin/main:scripts/dogfood.sh && echo present-on-main
present-on-main          # 1,419 lines

$ bash ~/.claude/skills/dogfood/dogfood.sh
dogfood: the canonical runner is not reachable.
  looked for: /home/noah/src/aprender/scripts/dogfood.sh
exit 2

The file is not deleted. It is on main, and the checkout is on a feature branch. A release gate for the entire fleet is therefore a function of which branch an unrelated repository happens to have checked out.

Why this is the trigger, not a new problem

~/.claude/skills/dogfood/dogfood.sh says so itself, verbatim:

REVISIT TRIGGER — the one signal that this arrangement has outgrown itself: the first time dogfood is invoked on a crate whose OWN repo is checked out but aprender is NOT. That means the protocol is being asked to serve the fleet from a repo that is not present, and the correct answer is to move it into shared infra — not to copy the runner back here.

That condition is now met — with a nuance worth recording, because it is worse than the one anticipated: aprender is checked out. It is simply on the wrong branch. The trigger as written checks for an absent repository; the failure mode that actually occurs is an absent file in a present repository, which is far easier to hit and gives no signal that anything is wrong until a release is blocked.

History says this recurs

aprender#2640 removed a second divergent copy of this runner (nine silent divergences, every hunk a real hardening, neither copy safe to delete). The fix chosen there was this shim. That got the diagnosis right — one canon, not two — and the cure wrong: the target is a path in another repository's working tree.

It has already cost a real release once. Measured 2026-08-23, mid-release: aprender sat on fix/wgpu-feature-surface-contract, scripts/dogfood.sh was absent, and pmat's release gate exited 2. Three edits to shared directories were silently lost the same day for the same underlying reason.

pmat's response was to vendor the protocol into its own repo (scripts/dogfood/, files prefixed pmat- so symlinks into a shared skills dir cannot collide). That works, and it means pmat is not blocked — but it is one crate solving it for itself. Every other repo reaching for this skill today gets a release gate that cannot run, and a release protocol that cannot run is indistinguishable from no release protocol.

Ask

Move the runner somewhere its availability does not depend on a working tree — shared infra, an installed artifact, or a per-repo vendored copy on pmat's model. Explicitly not a second copy under ~/.claude/skills/: not in git, not PR-reviewed, not CI-reachable, not diffable, which is what produced #2361 and #2640.

Whatever is chosen, two properties are worth making non-negotiable, because both were absent here:

  • Resolution must not depend on any repository's checked-out branch. Reading from git show main:scripts/dogfood.sh would already be strictly better than reading the working tree, if the shim stays.
  • The shim's own guard must detect the failure that actually happens. It checks "is aprender present"; it needs to check "is the runner reachable", which is the weaker and correct precondition.

Filed from pmat's 3.32.0 pre-release, where this was hit and worked around rather than fixed.

Activity

  1. added this to the 0.69.0 milestone on Sep 10, 2026
  2. added
    automationBot-maintained dashboard, not a defect — skip in triage
    P0Critical priority
    on Sep 11, 2026
  3. modified the milestones: 0.69.0, 0.71.0, 0.70.0 on Sep 17, 2026
  4. modified the milestones: 0.70.0, 0.70.1 on Sep 24, 2026
  5. noahgift commented on Sep 24, 2026

    @noahgift
    MemberAuthor

    Milestone 0.70.0 → 0.70.1 (gate triage). 0.70.0 now holds only the operator's release gate: "FULL ontology spec and all aprender binary working" + "0.70 to crates.io" (ONT-001, every [[bin]] build+smoke, the publish cascade), plus P0s and operator-ruled rows. This issue isn't needed for any of those. Evidence: evidence/m070-gate-triage-1835.md. If that's wrong, move it back to 0.70.0 and say which gate it serves.

  6. noahgift commented on Sep 25, 2026

    @noahgift
    MemberAuthor

    Fix pushed on fix/2701-dogfood-canon-ref @1b6cc1c23.

    • What changed: the reference shim now runs scripts/dogfood.sh at a pinned git ref (DOGFOOD_CANON_REF, default origin/main) instead of the aprender checkout's working tree. That commit's scripts/ is extracted once per SHA into ~/.cache/dogfood-canon/, and the shim prints the SHA it ran. DOGFOOD_CANON_REF=worktree still runs the working tree, for editing the runner. The shim still fails closed and names the revisit trigger.
    • Guard: check_dogfood_shim.sh gains behavioural row 3e (a fixture checkout whose branch lacks the runner while main has it) and self-test row 10 (the old working-tree shim is rejected by 3e alone).
    • Contract: F-DOG1-029.
    • After merge: redeploy with cp scripts/.dogfood-shim-reference.sh ~/.claude/skills/dogfood/dogfood.sh.
  7. noahgift commented on Sep 25, 2026

    @noahgift
    MemberAuthor

    The fix is on stage/0.70.1 as 2289808. This stays open on the 0.70.1 milestone and closes when 0.70.1 releases. (aprender-d1, on the cop's triage row)

  8. modified the milestones: 0.70.1, 0.71.0 on Oct 4, 2026
  9. added
    P1High priority
    and removed
    P0Critical priority
    on Oct 14, 2026
  10. noahgift commented on Oct 14, 2026

    @noahgift
    MemberAuthor

    P0 to P1 (2026-10-14 P0 triage): P0 now means it blocks the next release or carries the operator's own words on it; this issue does neither, so it stays on the 0.71.0 milestone at P1.

  11. noahgift commented on Oct 14, 2026

    @noahgift
    MemberAuthor

    Folded into #2582 as a checklist row (TRIAGE-100, 2026-10-14): the open-ticket cap is 100, so this ticket is now tracked on that master and closed as not planned. Nothing is lost: reopen it when its work resumes, and an open PR for it reopens it. Pushed branch: fix/2701-dogfood-canon-ref, fix/2701-dogfood-canon-ref-port.

    Agent: aprender-clerk

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    P1High priorityautomationBot-maintained dashboard, not a defect — skip in triageowner:aprender-a7owner sessionsize:MK̂ 3-4 h

    Type

    No type

    Projects

    No projects

      Milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions