Repository navigation
v7.15.0
Security
- GitHub now refuses a tag-pinned action in every Core-vendoring repo, and
make fleet-protectiongoes red if one stops.sha_pinning_requiredwas on in only
dotfiles-coreanddotfiles-MacBook. It is now on in all eleven repos the script
audits, which makes GitHub enforce rule 3 of the CI floor server-side: on sibling repos'
own workflows, and on anything that reachesmainwithout the text gate. The moving
major survives. GitHub exempts reusable workflows ("can still be referenced by tag"), and
a re-run ofdotfiles-Alpine'slint-call.yml@v7passed under enforcement. The new
--require-sha-pinmode turns it on idempotently, keeps each repo'sallowed_actions,
and re-reads the server before it reports success. The admin report now fails a repo
whose setting is off or cannot be read. It also reportsallowed_actionsand the count
of Actions execution-protection policies, without gating either. CI's--rulesets-only
run still skips the block, because it has no repo admin. Composite actions are not
exempt, sodotfiles-nvimfirst SHA-pinned itssetup-core-tools@v7references
(dotgibson/dotfiles-nvim#9) and then turned the setting on too (#1226).
Added
-
TOOLS_OPTIN=nonesays "nothing is opt-in". A repo that installs every tool
core-doctorprobes had no way to declare it. An emptyTOOLS_OPTINmeans "not declared"
and falls back to the default opt-in list, so on such a box a failed install oflnav,
ouch,jnvand the rest rendered·instead of✗.none, alone, is now the explicit
empty set:_core_doctor_optintreats every probed tool as expected, in the render and in
--json.check-capabilities.shaccepts it and refusesnonemixed with tool names. Empty
keeps its meaning. A Core that predates this readsnoneas a list naming one nonexistent
tool, which gives the same answer, so a repo can declare it before every box has upgraded.
dotfiles-Fedorais the first user. -
A Core PR is checked against the real sibling repos before it merges. The new
fleet-gatesjob inci.ymlclones the fleet beside Core and runs the audit's fleet-wide
gates (§5f, §9m-§9p, theme and desktop-parity drift) that every other leg skips because it
checks out Core alone. That gap let #1210 merge green and then refuse the v7.14.0 fan-out
on dotfiles-Debian's staleTOOLS_OPTIN(#1239). The job is meant to be a required check,
so it judges a delta:scripts/fleet-gate-delta.shaudits the PR's base and head against
the same clones and fails only on a failure the PR adds. A sibling that drifts on its own
therefore cannot block unrelated Core PRs. A failure already onmainis a warning. A red
means the sibling fix lands first, which is the fleet ratchets' existing order. The job holds
no token, because the gates run sibling code (#1240).
Changed
-
PORTING-MATRIX.mdcatches up with dotgibson/dotfiles-openSUSE#229. openSUSE's
install/packages.txtnow lists Core's opt-in set:hyperfine,ShellCheck,shfmt,
lnav,git-absorb,gping,watchexecandpython3-uv;jnvcomes from a
bootstrap.shcargo build.lnavinstalls on Tumbleweed only: Leap 16.0/16.1 do not ship
it, so zypper skips it there and Leap'sTOOLS_OPTINkeeps it opt-in. Each of the eight openSUSE cells ingen-porting-matrix.shis now
derived (=). Before that,gen-porting-matrix.sh --checkexited 2 against the live fleet,
which also hid every other drift check. Theuvcell drops its ²¹ mark. That was openSUSE's
last cell-level mark, so theTOOLS_OPTINgate no longer demands that openSUSE list Core's
whole opt-in set. Footnote ²¹'s coverage table gives openSUSE its own column and counts four
repos whosebootstrap.shinstalls from the family. Footnote ³⁰ no longer says openSUSE skips
uv. TheTOOLS_OPTINgate's tests read the real matrix and keyed on thatuvcell, so they
now use Gentoo's column, whosejjandast-grepmarks also exercise the alias path. -
PORTING-MATRIX.mdnow records that Arch installsjujutsu,difftasticand
ast-grep. dotgibson/dotfiles-Arch#201 adds all three to Arch'sinstall/packages.txt.
dotfiles-Arch declares noTOOLS_OPTIN, socore-doctorfalls back to
_CORE_DOCTOR_OPTIN, which lists none of them, and showed a ✗ on every fresh Arch box.
Arch's three cells ingen-porting-matrix.share now derived (=), not asserted; the
rendered table is unchanged. Footnote ⁸ no longer says Arch listsjj"only as a
commented opt-in" (#1262). -
PORTING-MATRIX.mdfootnote ²¹ now counts Fedora among the repos that install this
family. dotgibson/dotfiles-Fedora#209 putshyperfine,ShellCheck,shfmt,lnavand
git-absorbin Fedora'sinstall/packages.txt. Itsbootstrap.shcargo-buildsouch,
gpingandwatchexec. The footnote said "two repos'bootstrap.sh" and "the other seven
repos", and its table grouped Fedora with the detect-only repos. The table now has its own
Fedora column, the counts read three and six, and new notes cover two Fedora specifics:
ouchis built withoutunrar/bzip3, and Fedora has no--no-extrasto decline these
tools. Footnotes ⁸ (jj), ¹¹ (ast-grep), ¹⁷ (jnv), ¹⁹ (gping), ²⁴ (lnav),
²⁵ (watchexec), ²⁶ (git-absorb) and ³⁰ (uv) made the same per-repo claims and now name
Fedora too. ³⁰ also records thatmise exec go@latestno longer downloads Go under Core's
auto_install = false, so the five bootstraps that use it (Arch, openSUSE, Alpine, Gentoo,
Fedora) needmise install go@latestfirst. The ²¹ notes and the_CORE_DOCTOR_OPTIN
comment inzsh/30-functions.zshsay howcore-doctorclassifies these rows on Fedora:
it declaresTOOLS_OPTIN=none(dotgibson/dotfiles-Fedora#212), the empty-set form added
in this release, so a failed install there shows✗, not·. -
/release-readinessactually checks the editor pin. The scheduled job allows
./scripts/check-nvim-freshness.shas a literal command, but the routine only named the
script loosely. The first run (#1245) ran neither form: it reached forgh release list, was
refused, and reported a currentnvim.lockas unverified. Step 4 now lists the three
fleet-state commands exactly as the job grants them, says no other tool is needed for the
editor row, and spells out the exit codes. Exit 0 with✓means current, exit 0 with a
SKIP means unverified, exit 2 means behind, and exit 1 means the lock is broken. -
/release-readinesschecks the fleet-wide gates against the sibling repos before a
tag. A Core PR's CI checks out Core alone, so every gate that reads a sibling (§9m-§9p,
theme and desktop-parity drift) skips there. Until now the first run that could see a
sibling break wassync-fanout's pre-fan-out audit, after the tag was cut. That is how
#1210's correct Kali matrix cells merged green and then redded the v7.14.0 fan-out on
dotfiles-Debian's staleTOOLS_OPTIN(#1239). The weekly job now checks Core out beside
the fleet and runsaudit-core.sh --scope nonebefore the routine, with both tokens
withheld from that step because the gates run sibling code. Any✗there is a HOLD, and
a gate that could not see its sibling is reported as unverified, not as a pass. This is
the fallback half of #1240. The PR-time half is thefleet-gatesjob (#1243, under
Added), which closed #1240. -
RELEASE-STRATEGY.mdno longer lists makingaudit-archandaudit-alpinerequired
checks as future work. Themainruleset already requires both, alongside the Ubuntu and
macOS audit legs, and it binds admins too. The "Still worth doing" item still pointed at the
classic branch-protection settings page that the fleet retired. The CI bullet now says what
the ruleset enforces.
Fixed
-
Three Arch version stamps in
PORTING-MATRIX.mdhad fallen behindextra. Re-checked
2026-10-11 againstarchlinux.org:- Footnote ²⁵'s Arch/Homebrew
watchexecbullet goes from 2.7.3 (2.7.3-1) to 2.8.0
(2.8.0-1).formulae.brew.shalso has 2.8.0, so the two moved together again and the
shared bullet stays shared. - Footnote ³²'s Arch
direnvstamp goes from 2.37.1-1 to 2.38.2-1. - The Arch
neovimrow inscripts/fleet-package-versions.tsvgoes from 0.12.5 to
0.12.6. The rendered table is regenerated withgen-porting-matrix.sh --local; it is
still above the ≥ 0.12.0 floor.
None of these changes a package name or a cell. Surfaced by
/os-package-availability arch
(dotgibson/dotfiles-Arch#197). The AUR names that report could not reach (carapace-bin,
sesh-bin,1password-cli,viddy) were checked separately through the AUR RPC, and all
four still resolve. - Footnote ²⁵'s Arch/Homebrew