Skip to content

Release hygiene: fix config drift and close gold-standard gaps #182

Description

@dean0x

Rescoped 2026-08-09 against 113f472.

What changed:


An audit used this repo as the reference template for release-readiness of another project. It's a strong template, but some gaps against a "gold standard" release bar surfaced. This issue tracks those remaining gaps.

Config drift — RESOLVED, no longer in scope

All five originally-filed drift items are closed out as of 113f472:

  1. Repo homepage points at the wrong slugsatisfied. gh api repos/dean0x/mdscript reports homepage: https://github.com/dean0x/mdscript#readme.
  2. .github/ISSUE_TEMPLATE/config.yml links to /discussions while Discussions is disabledsatisfied. No /discussions link remains anywhere in .github/ISSUE_TEMPLATE/ (grep exits 1), and has_discussions: false — so the templates and the repo settings now agree.
  3. SECURITY.md supported-versions table is stale (0.1.x)satisfied. No 0.1.x row remains; SECURITY.md:23-28 now carries the rolling statement instead of a version table, so it can't rot again.
  4. CODE_OF_CONDUCT.md still missingstruck from this issue. Tracked standalone in Add CODE_OF_CONDUCT.md (Contributor Covenant 2.1) #38, which is already scheduled on Wave 1. Folding it in here only duplicated the tracking.
  5. workflow_dispatch release path broken against protected main (release: workflow_dispatch path fails GH006 on protected main (prepare can't push) #127)satisfied. release: workflow_dispatch path fails GH006 on protected main (prepare can't push) #127 is closed, release.yml no longer has a prepare job, and workflow_dispatch: {} is dry-run-only (builds + A3 gate, publishes nothing). The failure mode was designed out in favor of the tag-driven flow.

Gold-standard gaps

The bar used for the audit:

  • (a) Every public claim is CI-verified — declared MSRV is checked (✅ already done here), claimed commit conventions are enforced, docs can't silently drift from settings.
  • (b) Supply chain — all actions SHA-pinned with Dependabot keeping pins fresh; OIDC trusted publishing (no long-lived registry tokens); npm provenance; cargo-deny gating advisories/licenses.
  • (c) Release integrity — checksummed release artifacts + build-provenance attestations; a dry-run path exercising the full build matrix (✅ already done here); idempotent, safely re-runnable publish steps.
  • (d) Self-consistency — repo settings, templates, and health files agree with each other (✅ now satisfied — see the resolved drift items above).
  • (e) Protection that doesn't fight automation — branch protection with the release path designed around it (✅ now satisfied — tag-driven release).

Against that bar, the remaining work:

  • Registry auth uses long-lived secrets (CARGO_REGISTRY_TOKEN, NPM_TOKEN); both crates.io and npm support OIDC trusted publishing — switch, then delete the tokens.
  • GitHub Releases carry no artifacts or checksums — attach a SHA256SUMS (and optionally the platform artifacts), and add build-provenance attestations (actions/attest-build-provenance).
  • publish-crates waits on the index with sleep 30 between mds-core and mds-cli — replace with a poll of the crates.io index for the exact version.
  • Publish failures are downgraded to warnings ("may already exist") — replace with explicit idempotency checks (query the registry for the exact version; skip if present, hard-fail on anything else).
  • Conventional Commits are claimed in CONTRIBUTING and the PR template but not enforced — add a PR-title lint or soften the claim.
  • Optional: OpenSSF Scorecard workflow + badge; coverage reporting.

Tracked elsewhere — not part of this issue

Do not re-add either of those to this checklist; close them in their own issues.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions