Appearance
Repository operations
This project runs itself as far as possible. Every automated process is a GitHub Actions workflow under .github/workflows/, and every decision the workflows make that is worth unit-testing lives in scripts/ with Vitest coverage. This document is the operator manual.
Workflows at a glance
| Workflow | File | Trigger | Permissions | What it does on failure |
|---|---|---|---|---|
| CI — Lint | ci.yml | PRs, push to master | read-only | blocks merge; fix reported lint/spell issues |
| CI — Guard | ci.yml | PRs, push to master | read-only | fails if any action is not SHA-pinned |
| CI — Tests | ci.yml | PRs, push to master | read-only | blocks merge; Windows/Ubuntu matrix |
| Release | release.yml | push to master | contents/pr write | opens/updates the rolling Release PR |
| Publish | publish.yml | called by Release; workflow_dispatch | contents write, id-token write | fails fast before publishing when tag/version/CHANGELOG disagree |
| Deploy Pages | pages-deploy.yml | push to master; dispatch | pages write, id-token write | previous site stays live; next Monthly deep check reports it |
| Weekly QA | qa-weekly.yml | cron Mon 04:00 UTC; dispatch | issues write for report jobs | audit findings / outdated deps posted to their issues |
| Monthly deep check | qa-monthly.yml | cron 1st of month 05:00 UTC; dispatch | issues write for healthcheck | opens issue Pages healthcheck failing (label ci-failure) |
| PR hygiene | pr-hygiene.yml | pull_request events | minimal per job | required title check fails the PR; Docs-Gate blocks feat: PRs that change src/ without a docs update |
| Stale | stale.yml | cron daily 03:17 UTC; dispatch | issues/prs write | nothing to do |
The release chain
- Merge Conventional-Commit PRs (
feat:,fix:...) intomaster. Feature PRs labeledautomergemerge themselves once checks are green — no manual merge click needed. Release(release-please) maintains one rolling Release PR with the version bump and CHANGELOG entry.- Green checks → the Release PR merges itself (label
autorelease) — unless the repo variableRELEASE_AUTOMERGEis set tooff, which parks the Release PR so several stories can batch into one release. Re-enable withgh variable set RELEASE_AUTOMERGE --body on, then re-arm via a label touch orgh pr merge <n> --auto --squash. - The merge creates tag
v<x.y.z>; becauseGITHUB_TOKENevents cannot trigger other workflows,Releaseimmediately calls the reusablePublishworkflow instead of waiting for a tag event. Publishre-verifies everything (scripts/verify-release.mjs,scripts/check-pack-list.mjs), publishes with OIDC provenance (no stored npm token), and cuts the GitHub Release from the CHANGELOG.
Issue automation
npm audit findings: created/updated weekly byscripts/report-audit.mjs.Dependency Health: one long-lived issue updated weekly byscripts/report-health.mjs.Pages healthcheck failing: created by the monthly probe, labelci-failure.- All reports deduplicate: an existing open issue with the same title gets a dated comment instead of spawning new issues (
scripts/report-to-issue.mjs).
One-time setup checklist
- [x] Dependabot alerts + automated security fixes enabled.
- [x] Secret scanning + push protection enabled.
- [x] Branch protection on
master(required checks: Lint, Guard, Tests; linear history; no force pushes). Deliberately not requiring PRs: solo maintainer cannot self-review; revisit when collaborators join. - [ ] Register npm trusted publisher for package
super-backlog(npmjs.com → package settings → trusted publisher: repoadam-s-k-i/super-backlog, workflowpublish.yml). Until then, publish runs fail fast atnpm publish --provenance. - [x] GitHub Pages enabled with "GitHub Actions" build source.
- [x] Labels ensured:
ci-failure,autorelease,dependencies,ci,docs,cli,tests,qa,security,pages.
Dry-run evidence
Recorded during rollout via workflow_dispatch; see the checklist comments in this task's Backlog history for run URLs.
Local equivalents
bash
npm test # build + vitest suite
npm run lint # markdownlint + cspell
node scripts/check-action-pinning.mjs # workflow pinning guard
node scripts/check-pr-title.mjs "feat: x" # conventional title guard
npm pack --dry-run --json | node scripts/check-pack-list.mjs