.fastlane.toml does not name jostoph-rs, so its consumers have no fastlane #11

Closed
opened 2026-08-10 07:55:47 +00:00 by agent.teyla · 1 comment
Contributor

Source: swapping Ting/Vedanta's vendored jostoph-rs for the midgard/jostoph-rs mirror, 2026-08-10.

Ting/Vedanta now pins jostoph-rs as a flake input at git+https://jo.et0.pw/midgard/jostoph-rs.git (locked 029a102cf606, byte-identical to the tree it replaced) instead of carrying vendor/jostoph-rs in the repository. That was the whole point of #6's manifest: an input pinned to midgard names its development home there, and the seam turns that into --override-input.

.fastlane.toml currently lists four inputs — dendrite and the three nixops4-providers flakes. jostoph-rs is not among them. So a repo that develops against the substrate gets the published mirror and nothing else: just fastlane::assemble emits no override for it, and reaching lar.ad/jostoph-rs?ref=fastlane means passing --override-input by hand — the drift the manifest exists to end.

lar.ad/jostoph-rs is private, confirmed rather than assumed: git ls-remote over anonymous HTTPS with credential helpers disabled (GIT_CONFIG_GLOBAL=/dev/null) fails on could not read Username, where midgard/jostoph-rs answers under identical conditions. The manifest's ssh-name convention (git+ssh://[email protected]/…) is what makes the development side reachable at all, so this entry is not cosmetic.

In scope

  • One line in .fastlane.toml: jostoph-rs = "git+ssh://[email protected]/lar.ad/jostoph-rs", following the file's stated convention exactly — ssh name, no ?dir= (the flake is at the repository root), no ref (the seam sets it per invocation).

Out of scope

  • Any consuming repo's flake.nix. Ting/Vedanta already declares the input under the name jostoph-rs; the manifest only has to agree with the name. A consumer that does not declare it is inert, per the file's own header — nix warns on an unknown --override-input rather than failing.
  • This repository's own jostoph-rs input, which still pins the private canonical and is a separate finding, filed separately.
  • The mirror's freshness. Whether midgard/jostoph-rs keeps tracking lar.ad is #3's push-mirror reconciliation, not this ticket's.

Boundary

The manifest is fetched raw over anonymous HTTPS and cached beside every consumer's justfile on a one-day rule, so a wrong line here is wrong in every repo for up to a day and cannot be recalled — but it is also inert for any repo that does not declare the input, which bounds the blast radius of adding one to exactly the repos that asked for it.

The ref stays out of the manifest. Writing fastlane here would make the manifest, not the invocation, decide which branch an evaluation resolves against, which is the seam's job (just ref=<other> …).

Acceptance

  • In a repo declaring a jostoph-rs input, just fastlane::assemble emits --override-input jostoph-rs git+ssh://[email protected]/lar.ad/jostoph-rs?ref=fastlane alongside the existing four.
  • That override resolves and the consumer builds green against it — verified on Ting/Vedanta, where the equivalent override was already exercised by hand (nix build .#default --override-input jostoph-rs path:… builds a working binary, so the override path itself is live).
  • A repo with no jostoph-rs input is unaffected: nix warns, the build proceeds.
  • With the seam absent, the same repo still builds against midgard from the lock.

Context

  • #6 — the manifest and seam this extends.
  • #3 — the push mirror that keeps midgard/jostoph-rs current; this entry assumes it does.
  • Ting/Vedanta PR #2 — the vendoring this swap retires, and its own note that "the real distribution model ... is still undecided."
Source: swapping `Ting/Vedanta`'s vendored `jostoph-rs` for the `midgard/jostoph-rs` mirror, 2026-08-10. `Ting/Vedanta` now pins `jostoph-rs` as a flake input at `git+https://jo.et0.pw/midgard/jostoph-rs.git` (locked `029a102cf606`, byte-identical to the tree it replaced) instead of carrying `vendor/jostoph-rs` in the repository. That was the whole point of #6's manifest: an input pinned to midgard names its development home there, and the seam turns that into `--override-input`. `.fastlane.toml` currently lists four inputs — `dendrite` and the three `nixops4-providers` flakes. `jostoph-rs` is not among them. So a repo that develops against the substrate gets the published mirror and nothing else: `just fastlane::assemble` emits no override for it, and reaching `lar.ad/jostoph-rs?ref=fastlane` means passing `--override-input` by hand — the drift the manifest exists to end. `lar.ad/jostoph-rs` is private, confirmed rather than assumed: `git ls-remote` over anonymous HTTPS with credential helpers disabled (`GIT_CONFIG_GLOBAL=/dev/null`) fails on `could not read Username`, where `midgard/jostoph-rs` answers under identical conditions. The manifest's ssh-name convention (`git+ssh://[email protected]/…`) is what makes the development side reachable at all, so this entry is not cosmetic. ## In scope - One line in `.fastlane.toml`: `jostoph-rs = "git+ssh://[email protected]/lar.ad/jostoph-rs"`, following the file's stated convention exactly — ssh name, no `?dir=` (the flake is at the repository root), no `ref` (the seam sets it per invocation). ## Out of scope - **Any consuming repo's `flake.nix`.** `Ting/Vedanta` already declares the input under the name `jostoph-rs`; the manifest only has to agree with the name. A consumer that does not declare it is inert, per the file's own header — nix warns on an unknown `--override-input` rather than failing. - **This repository's own `jostoph-rs` input**, which still pins the private canonical and is a separate finding, filed separately. - **The mirror's freshness.** Whether `midgard/jostoph-rs` keeps tracking `lar.ad` is #3's push-mirror reconciliation, not this ticket's. ## Boundary The manifest is fetched raw over anonymous HTTPS and cached beside every consumer's justfile on a one-day rule, so a wrong line here is wrong in every repo for up to a day and cannot be recalled — but it is also inert for any repo that does not declare the input, which bounds the blast radius of adding one to exactly the repos that asked for it. The `ref` stays out of the manifest. Writing `fastlane` here would make the manifest, not the invocation, decide which branch an evaluation resolves against, which is the seam's job (`just ref=<other> …`). ## Acceptance - In a repo declaring a `jostoph-rs` input, `just fastlane::assemble` emits `--override-input jostoph-rs git+ssh://[email protected]/lar.ad/jostoph-rs?ref=fastlane` alongside the existing four. - That override resolves and the consumer builds green against it — verified on `Ting/Vedanta`, where the equivalent override was already exercised by hand (`nix build .#default --override-input jostoph-rs path:…` builds a working binary, so the override path itself is live). - A repo with no `jostoph-rs` input is unaffected: nix warns, the build proceeds. - With the seam absent, the same repo still builds against `midgard` from the lock. ## Context - #6 — the manifest and seam this extends. - #3 — the push mirror that keeps `midgard/jostoph-rs` current; this entry assumes it does. - `Ting/Vedanta` PR #2 — the vendoring this swap retires, and its own note that "the real distribution model ... is still undecided."
Author
Contributor

Closing — this ticket's premise is wrong.

Owner, 2026-08-10: midgard/jostoph-rs carries main only, by design. The substrate is consumed as published, not co-developed branch-for-branch with its consumers, so it does not belong in the development manifest at all. I filed this from the assumption that every midgard-pinned input has a lar.ad fastlane counterpart; that is true of the four inputs already listed and is not true here.

I also acted on that wrong premise before it was corrected: I created a fastlane branch on lar.ad/jostoph-rs to make the manifest entry resolve. That branch has been deletedlar.ad/jostoph-rs is back to main only, as it should be.

One measured finding from this is worth keeping, because it is a real constraint on the seam and cost nothing to establish:

.fastlane.just's assemble appends ?ref={{ref}} to every manifest input unconditionally — there is no per-input ref and no existence check. An input whose repository lacks that branch does not degrade: the whole nix invocation fails with error: Failed to fetch git repository.

So the manifest cannot currently express a main-only input, and a repo that is published-not-co-developed must simply stay out of it. That is fine as a rule, but it is an implicit one — the file's header explains that an undeclared input is inert, and says nothing about an input whose ref does not exist. If a main-only repo is ever added by mistake, it breaks every consumer that declares it, which is exactly the kind of silent-until-it-isn't drift the steward exists to catch. Left as an observation here rather than reopened as its own ticket; #3's remit is closer to it than mine.

The half of this that survives is #12 — pinning midgard/jostoph-rs and committing the lock — which is done and up as #13. The manifest is untouched there, and the reasoning is recorded in the input's own comment so nobody re-derives this.

Closing — this ticket's premise is wrong. Owner, 2026-08-10: **`midgard/jostoph-rs` carries `main` only, by design.** The substrate is consumed as published, not co-developed branch-for-branch with its consumers, so it does not belong in the development manifest at all. I filed this from the assumption that every midgard-pinned input has a `lar.ad` fastlane counterpart; that is true of the four inputs already listed and is not true here. I also acted on that wrong premise before it was corrected: I created a `fastlane` branch on `lar.ad/jostoph-rs` to make the manifest entry resolve. **That branch has been deleted** — `lar.ad/jostoph-rs` is back to `main` only, as it should be. One measured finding from this is worth keeping, because it is a real constraint on the seam and cost nothing to establish: > `.fastlane.just`'s `assemble` appends `?ref={{ref}}` to **every** manifest input unconditionally — there is no per-input ref and no existence check. An input whose repository lacks that branch does not degrade: the whole nix invocation fails with `error: Failed to fetch git repository`. So the manifest cannot currently express a main-only input, and a repo that is published-not-co-developed must simply stay out of it. That is fine as a rule, but it is an implicit one — the file's header explains that an *undeclared* input is inert, and says nothing about an input whose *ref* does not exist. If a main-only repo is ever added by mistake, it breaks every consumer that declares it, which is exactly the kind of silent-until-it-isn't drift the steward exists to catch. Left as an observation here rather than reopened as its own ticket; #3's remit is closer to it than mine. The half of this that survives is #12 — pinning `midgard/jostoph-rs` and committing the lock — which is done and up as #13. The manifest is untouched there, and the reasoning is recorded in the input's own comment so nobody re-derives this.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
Ting/Jostoph#11
No description provided.