fix: retire the private-repo slug from the shipped scaffold and the vuln-metrics default - #14
Merged
Conversation
…ts attestations `messagefoundry init` scaffolds a fail-closed CI gate that runs `gh attestation verify --repo ...` before installing the pinned engine wheel. It named `wshallwshall/MessageFoundry` -- the retired private vault, which no adopter can read and which no longer builds releases. Every project scaffolded by the next release would ship a supply-chain gate that fails for its own owner. Every other reference in the repo already names MEFORORG/MessageFoundry (release.yml, README, INSTALL-GUIDE, EARLY-ADOPTER-GUIDE, SUPPLY-CHAIN, MENTAL-MODEL); scaffold.py was the lone outlier, so this is a correction to it rather than a change of policy. The test pinned the wrong slug, which meant the broken state was actively enforced. It now pins the correct one and the negative -- the retired slug must never reappear in a scaffolded gate. Verified by mutation: reverting the source string fails the test, so the assertion is not green for free.
vuln-metrics.yml invokes vuln_metrics.py with no --repo, so the argparse default silently decided what the weekly KPI run measured -- and it named the private vault. A public GITHUB_TOKEN cannot read that repo's Dependabot PRs, so the seven KPIs were computed over an empty window instead of failing loudly. Default to $GITHUB_REPOSITORY so the job always measures the repo it runs in; the literal slug is now only a local-run fallback. Still stdlib-only (os), which the workflow requires -- it runs the script with no install.
…irror The test matrix branches on $GITHUB_REPOSITORY == MEFORORG/MessageFoundry. The logic is correct after the cutover, but the comments still described a private-repo / public-mirror split that no longer exists -- so the branch reads as a stale guard someone will eventually "fix" in the wrong direction. Restate what the branch actually does, and record why a fork PR cannot wedge the required Windows contexts: a fork PR runs in this repo's context, so it gets the full matrix and the required contexts are always present. Comments only -- no logic change.
wshallwshall
enabled auto-merge (squash)
July 27, 2026 19:00
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The cutover's slug rewrite left three places still naming the retired private vault. Two of them are live defects, not stale strings.
1. The scaffolded provenance gate — ships inside the release
messagefoundry initwrites a fail-closed CI gate that runsgh attestation verify --repo ...before installing the pinned engine wheel. It namedwshallwshall/MessageFoundry: a repo no adopter can read, and which no longer builds releases. Every project scaffolded from that build gets a supply-chain gate that fails for its own owner.Every other reference in the repo already names
MEFORORG/MessageFoundry—release.yml,README,INSTALL-GUIDE,EARLY-ADOPTER-GUIDE,SUPPLY-CHAIN,MENTAL-MODEL.scaffold.pywas the lone outlier, so this corrects it rather than changing policy.The test pinned the wrong slug, so the broken state was actively enforced — the same shape as the inverted release guard fixed in #7. It now pins the correct value plus the negative (the retired slug must never reappear in a scaffolded gate).
2. vuln-metrics measured the wrong repo
vuln-metrics.ymlinvokesvuln_metrics.pywith no--repo, so the argparse default silently decided what the weekly KPI run measured — and it named the private vault. A publicGITHUB_TOKENcannot read that repo's Dependabot PRs, so the seven KPIs were computed over an empty window rather than failing loudly.Now defaults to
$GITHUB_REPOSITORY, so the job always measures the repo it runs in; the literal is only a local-run fallback. Still stdlib-only (os), which the workflow requires — it runs the script with no install.3. ci.yml comments (no logic change)
The matrix branch on
$GITHUB_REPOSITORYis correct post-cutover, but the comments still described a private-repo/public-mirror split that no longer exists, so it read as a stale guard someone would eventually "fix" in the wrong direction. Restated, and now records why a fork PR cannot wedge the required Windows contexts: a fork PR runs in this repo's context, so it gets the full matrix.Verification
ruff format --check/ruff checkclean;mypyclean on the changed script.test_scaffold,test_csv_formula_consistency,test_release_pipeline), plus the three suites that readci.yml: 64 passed.ci.ymlstill parses (10 jobs).test_scaffold.py. The new assertion is not green for free.loaded names=7, estate=13, estate_file_scanned=12, site_prefixes=1.Follow-up for the owner
v0.3.1 shipped with defect 1. A user who scaffolds from 0.3.1 gets a CI gate that fails on the provenance step. Worth deciding whether that warrants a 0.3.2 or just a release note — the workaround is a one-line edit, or setting
MEFOR_VERIFY_ENGINE=off.🤖 Generated with Claude Code