8000 Release-job CLI invocations have no pre-merge coverage — a breaking `min`/`mip` change only surfaces on a release run · Issue #1035 · gominimal/minimal · GitHub
[go: up one dir, main page]

Skip to content

Release-job CLI invocations have no pre-merge coverage — a breaking min/mip change only surfaces on a release run #1035

Open

Description

@norrietaylor

Surface: .github/workflows/release.yml (release job) · Class: CI coverage gap

gominimal/minimal#1009 split min completions <shell> into completions print and completions install. The release job's Generate completions step still called the flat form. Nothing caught it until a release was dispatched twenty days later — run 30425725370 — where it exited 2 and took the GCS archive upload, the GitHub Release, and the whole stage-installer job down with it. Every build job in that run was green; only packaging broke, after ~1h of build time. Fixed in gominimal/minimal#1034.

The general shape: the release job shells out to freshly-built binaries, and those invocations are only executed on a workflow_dispatch release. A breaking CLI change passes every PR gate, merges, and sits until someone cuts a release.

release.yml:724-732   9 invocations across mip / min / minimald

Fix

Give those invocations a pre-merge gate. Sketch, cheapest first:

  • Move the completions generation into a scripts/ helper the release job calls, and exercise that helper against target/debug binaries in just ci. Fits the test-extension contract in CONTRIBUTING.md — .github/workflows/ is frozen, so the logic belongs in scripts/ anyway.
  • Or a smoke test that runs each shipped binary's release-path subcommands and asserts exit 0. Cheap, no restructuring, catches exactly this class.
  • Assert the content too, not just the exit code: the generated min shim registers the command min, so the file it is written to has to be named min/_min/min.fish. That mismatch shipped silently from the #737 binary rename until #1034 — an exit-code-only check would not have found it.

Worth auditing the rest of the release and stage-installer jobs for other unexercised CLI calls while in there.


Follow-up from gominimal/minimal#1034, which fixed the immediate break.

Activity

  1. gominimal-aw-bot commented on Jul 29, 2026

    @gominimal-aw-bot
    Contributor

    Routing triage — #1035

    Kind: chore · Route: work · Confidence: 0.88
    Target: gominimal/minimal — release.yml, min/mip/minimald binaries, scripts/ fix location, and just ci contract are all in minimal.

    Evidence

    Route rationale

    work rather than patch: the fix requires a design choice between three approaches (scripts/ helper, standalone smoke test, or content-asserting check) and the author explicitly includes an audit scope for other unexercised release-job calls. Not an unambiguous single-file fix. Confidence 0.88 on gominimal/minimal as sole target.

    [inbox-route:decision]

    {"schema":"inbox-route/v1","issue":409,"issue_node_id":"I_kwDOSUhdos8AAAABKm1IpQ","dry_run":false,"kind":"chore","route":"work","confidence":0.88,"targets":[{"repo":"gominimal/minimal","reason":"release.yml, min/mip/minimald binaries, scripts/ fix location, and just ci contract are all in minimal"}],"labels":["kind:chore","priority:should-have"],"patch":null,"work_issue":{"title":"chore: add pre-merge smoke coverage for release-job CLI invocations","body":"## Summary\n\nThe release job shells out to freshly-built binaries (9 invocations in `release.yml:724-73
    8000
    2` across min, mip, and minimald), but these calls are never exercised before a release is dispatched. A breaking CLI change passes all PR gates and sits undetected until someone cuts a release.\n\n## Details\n\nThe pattern surfaced when `completions print`/`completions install` replaced the flat `min completions <shell>` form (minimal#1009) — the release job kept calling the old form, exited 2, and took GCS upload, the GitHub Release, and stage-installer down with it. Fixed in minimal#1034, but the structural gap remains for all release-path subcommands at `release.yml:724-732`.\n\nCONTRIBUTING.md freezes `.github/workflows/`, so the fix belongs in `scripts/`.\n\nApproaches (cheapest first): (1) move completions generation into a `scripts/` helper, exercise it against `target/debug` binaries in `just ci`; (2) standalone smoke test asserting exit 0 for each release-path subcommand; (3) also assert content — e.g. the generated shim file is named correctly for the binary (an exit-code-only gate would not have caught the #737 rename mismatch).\n\nAuthor recommends auditing the rest of the release and stage-installer jobs for other unexercised CLI calls.\n\nRelated: #687 (open CI refactor epic) has PR9b planned for post-release artifact smoke — this is the complementary pre-merge gate.\n\n## Suggested next step\n\nImplement the `scripts/` helper approach or the standalone smoke test, wire into `just ci`, and verify it would have caught the minimal#1009 regression. Then audit `release.yml:724-732` and the stage-installer job for other unexercised CLI calls."},"related":[{"repo":"gominimal/minimal","number":687,"relation":"related"}],"rationale":"The issue describes a CI coverage gap in gominimal/minimal: 9 CLI invocations in release.yml:724-732 are exercised only during a workflow_dispatch release, so a breaking CLI change can merge undetected. The vocabulary (min, mip, minimald, release.yml, scripts/, just ci, CONTRIBUTING.md) is entirely within minimal. No prior routing or duplicates found in the inbox or in minimal; minimal#687 (open CI refactor epic) has a thematically related but distinct open PR9b subtask for post-release artifact smoke — this issue is the complementary pre-merge gate. Route is work rather than patch: the fix requires choosing between three design approaches and includes an audit scope, not an unambiguous single-file change. Precedent search returned F2 outcomes for minimal patches, consistent with routing design-judgment items as work. Confidence 0.88 on gominimal/minimal as sole target."}

    Generated by inbox-route for issue #1035 · ◷

  2. added
    kind:choreMaintenance, refactor, or internal improvement. Applied by the inbox-route classifier.
    on Jul 29, 2026
  3. gominimal-aw-bot commented on Jul 29, 2026

    @gominimal-aw-bot
    Contributor

    [inbox-route:ledger]
    Routed from #1035 by inbox-route (https://github.com/gominimal/inbox/actions/runs/30432905669)
    Routing-Key: inbox-route/I_kwDOSUhdos8AAAABKm1IpQ
    Route: work
    Work-Issue: #1035 (in-place — the transferred issue is the deliverable)

  4. transferred this issue fromon Jul 29, 2026
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

    kind:choreMaintenance, refactor, or internal improvement. Applied by the inbox-route classifier.priority:should-haveShould be done. Applied by the inbox-route classifier or a human.routed

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

      0