A manifest input whose development home lacks the ref breaks every consumer, and says nothing about fastlane #14
Labels
No labels
Compat/Breaking
Kind/Bug
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/Security
Kind/Testing
Meta/Campaign
Meta/Epic
Meta/Session
Priority/Critical
Priority/High
Priority/Low
Priority/Medium
Reviewed/Confirmed
Reviewed/Curated
Reviewed/Duplicate
Reviewed/Invalid
Reviewed/Won't Fix
Scope/Campaign
Status/Abandoned
Status/Blocked
Status/Conflicted
Status/In Progress
Status/In Review
Status/Need Grooming
Status/Need More Info
Status/Ready
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
Ting/Jostoph#14
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Source: the
midgard/jostoph-rscorrection on #11, 2026-08-10..fastlane.just'sassembleappends?ref={{ref}}to every manifest input, unconditionally — there is no per-input ref and no existence check. So the manifest silently assumes every listed repo carries afastlanebranch.That assumption is not free-standing: some repos are
main-only by design (owner, 2026-08-10 —jostoph-rsis consumed as published, not co-developed branch-for-branch). The manifest has no way to express one, so the rule is "leave it out" — an implicit rule, written down nowhere, enforced by nothing.When the rule is broken the failure is maximally unhelpful. Measured, not assumed:
fastlane, nor the manifest, nor the branch that is missing. Nothing in that message points at the file you have to edit.The file's own header explains that an undeclared input is inert ("nix warns on an unknown
--override-input, it does not fail"), which invites the reasonable and wrong inference that a bad input is inert too.This is the shape of drift the steward exists to catch: a hand-edited setting, correct today, that breaks things far from where it was written.
In scope
refbranch and warn, on stderr, naming the input, the repo, and the missing branch.Out of scope
flake_overrideruns the seam on everyjustinvocation in a wired repo. Per-invocation network probes would tax every command to catch a once-in-a-while steward typo. The refresh already pays a network cost once a day; the probe belongs there and nowhere else.ref, a[published]section). No input wants it: a repo consumed as published simply is not a development home, so the right entry is no entry. Building the schema for a case with no instances is inventing work.Boundary
This adds
gitto what the seam assumes. It has assumed onlynuandjust, deliberately, because it ships to every repo in the estate. Mitigated by making the probe entirely best-effort: nogit, no key, no network — the probe says nothing andassemblebehaves exactly as before. It may only ever add a warning, never change a flag or an exit status.The distinction that makes this safe is that
git ls-remote --exit-codeseparates the two failures: exit 2 is "connected fine, no such branch" — a fact about the manifest, worth saying. Exit 128 is unreachable or unauthenticated — a fact about the machine, and none of this file's business. Only exit 2 warns.The probe validates the default
ref.just ref=<other> assembleis unvalidated and still fails the old way; validating every possible ref is not a thing a cache can do.Acceptance
fastlanebranch produces a stderr warning naming the input, the repo and the branch — andassemblestill prints its flags and exits 0.gitabsent from PATH,assemblestill works and warns about nothing.Context