chore(ci): delete duplicated and dead checks, one sdlc workflow, accurate badges - #454
chore(ci): delete duplicated and dead checks, one sdlc workflow, accurate badges#454rita-aga wants to merge 5 commits into
Conversation
…rate badges Pre-push hook removed (its four gates already run in CI; it flaked on ARN-440 and cost 20+ min per push). Nightly cron removed (main pushes run DST full mode). badges.yml removed (expired gist token, README never showed its output); README badges are now shields.io dynamic-TOML reads of Cargo.toml. verification-contract job removed (it tested the hook installer on the runner, not temper). Bench compile moves to bench.yml, weekly + dispatch. The four SDLC gate workflows are one file, sdlc.yml, with the same four job names so branch protection is unchanged. Refs: ARN-453 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019u3vf9EcwtfEP1FeDf5c4o
Proof record - ARN-453commit: |
…heal, review-only concurrency - DST matrix: cells select binaries by exclusion, so every dst_* binary runs somewhere; three (entity_key_index, entity_vector_index, genesis_install_rollback) had no cell and the Tests job skipped every test named dst_*, including lib unit tests. The deleted pre-push hook had been the only place they ran. - setup-hooks.sh and the pre-commit hook remove the stale pre-push wrapper left by the old installer (its target no longer exists). - sdlc.yml: concurrency group on the review job only, as before the merge. - verify skill: dev-harness feature entry; stale pre-push mentions fixed. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Proof record - ARN-453commit: |
Proof of implementation — ARN-453: PASS
Full report attached as the Full report: the |
…s, actionlint job, worktree-safe installer - dst-matrix-setup: the -E expressions are JSON-escaped double quotes (the nested single quotes were a bash syntax error; matrix setup failed on 1afb3a9); exclusions are anchored regexes; the Tests job's exclusion is scoped to temper-server so other crates' dst_ binaries still run. Verified with cargo nextest list: core 8 + consistency 3 + boot + random = all 13 dst_ binaries; the Tests job keeps the 11 lib dst_ tests. - workflows-lint job: actionlint on every run (catches the class above). - setup-hooks.sh resolves the hooks dir via git rev-parse --git-path, so it works in linked worktrees where .git is a file. - AGENTS.md no longer claims tests run at push time. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
|
RESOLVE: .github/workflows/ci.yml:190 doctests do run - the Tests job has an explicit Round 2 act-on items are fixed in 7c359b5: matrix generator quoting (CI's matrix setup failed on 1afb3a9, confirmed), anchored exclusions, worktree-safe installer, plus an actionlint job so the quoting class cannot merge again. |
Proof record - ARN-453commit: |
…nd self-report say what the hooks do - setup-hooks.sh: hooks dir from git -C $WORKSPACE_ROOT (round 2 used the caller's cwd, so an absolute-path run from another repo would have written temper's hooks there). Driven from a foreign cwd after the fix. - HARNESS.md: no pre-push gate anywhere (overview, hook row, lifecycle); Component 6 records a push-completed marker and runs no tests; Component 7 is disabled in settings and checks cargo check only. The self-report's evidence.push_post_verify check looked for markers nothing writes: removed (16 checks, validates). - AGENTS.md: CI runs on pull requests and main/staging pushes, not 'every push'. - ci.yml workflows-lint: installer pinned to the v1.7.7 tag, contents: read. bench.yml: contents: read; toolchain from rust-toolchain.toml. - ADR-0079 amended: nightly retired, bench weekly. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Local review record - FAILPanel: codex, fable · open act-on: 4 · synthesis: panel-runner (non-author) · tier: cloud-sandbox |
|
RESOLVE: scripts/setup-hooks.sh:9 fixed in 0ad5ae2 - HOOKS_DIR is resolved with Round 3 record above is for 7c359b5. This PR has now been through three panel rounds; per the convergence rule the next step is the owner's decision, not a round 4 started by the implementer. |
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Proof record - ARN-453commit: |
CI and the local hooks carried checks that were duplicated, dead, or inaccurate: the pre-push hook re-ran four gates CI already runs (20+ min per push, flaky on ARN-440); a nightly cron duplicated what every main push runs; badges.yml was failing on an expired gist token and produced badges the README never showed while the README's own badges were hardcoded; the verification-contract job validated a report about hook installation on the CI runner; bench compile ran on every main push (~16 min); the SDLC gates were four workflow files.
This PR deletes the pre-push hook, the nightly cron, badges.yml (plus its var and secret on the repo), and the verification-contract job; replaces the README badges with shields.io dynamic-TOML reads of Cargo.toml on main; moves bench compile to bench.yml (weekly + dispatch); and folds the four gate workflows into one sdlc.yml with the same four job names, so branch protection is unchanged. Canonical copy landed in stack (08cebb3, d8f8733), together with the scripts that re-run gates by workflow name.
Panel round 1 also surfaced a real CI gap this PR now closes: three DST test binaries were in no matrix cell and the Tests job skipped every test named
dst_*, so the deleted pre-push hook had been the only thing running them. Matrix cells now select binaries by exclusion.Decisions & Tradeoffs
Decision: Delete the badges workflow and make the README badges dynamic instead of repairing the gist pipeline.
Came up because: badges.yml failed on an expired gist token, and the README never displayed the three badges it generated; its own Rust/version badges were hardcoded (Rita: badges must be accurate).
Options: (a) rotate the token, keep gist badges the README ignores; (b) delete the workflow, switch the README to shields.io dynamic-TOML badges reading Cargo.toml.
Chose (b) over (a) because: accuracy by construction with zero moving parts (no workflow, no secret, no drift); dropped the test-count and crate-count badges as vanity metrics.
Where: README.md badge block; badges.yml removed; BADGE_GIST_ID var + GIST_SECRET deleted.
Decision: Delete the verification-contract CI job rather than adapt it to the missing pre-push hook.
Came up because: removing the pre-push hook broke the job's expectations; auditing it showed it validates a self-report of hook installation on the CI runner.
Options: (a) adapt the checks; (b) delete the job, keep the scripts as a local harness self-report.
Chose (b) over (a) because: the job carried no signal about temper's code — it tested the installer.
Where: ci.yml; docs/HARNESS.md contract section.
Decision: Bench compile moves to a separate weekly+dispatch workflow instead of a schedule inside ci.yml.
Came up because: the nightly schedule is being removed; a weekly schedule inside ci.yml would run every job weekly and need if-gates on all of them.
Options: (a) weekly schedule in ci.yml with if-gates; (b) manual-only; (c) its own small workflow.
Chose (c) over (a)/(b) because: distinct trigger = distinct file (same reasoning as decision-intake); manual-only rots silently.
Where: .github/workflows/bench.yml.
Decision: Consolidate the four gate workflows into one file with four jobs; workflow-level concurrency per PR.
Came up because: Rita's ruling; four files each cloning stack.
Options: (a) one job with four steps (one clone); (b) one workflow, four jobs.
Chose (b) over (a) because: branch protection requires four separate check contexts; (a) would collapse them to one. Runtime is unchanged (each job is its own runner); the win is one file to read and vendor. Re-run scripts that referenced sdlc-review / sdlc-verification by workflow name now target the combined workflow (a rerun re-executes all four gates — acceptable, they are cheap).
Where: stack gates/sdlc.yml (canonical), temper .github/workflows/sdlc.yml; stack proof/post-proof-record.sh, gates/sdlc-decision-intake.yml.
Decision: DST matrix cells select binaries by exclusion (
binary(/^dst_/) and not ...) instead of listing them; the Tests job excludes the dst_ binaries instead of test names containingdst_.Came up because: review (codex) found three dst_ integration binaries (entity_key_index, entity_vector_index, genesis_install_rollback) that no matrix cell ran while the Tests job skipped every test named
dst_*; the deleted pre-push hook's fullcargo test --workspacehad been the only place they ran. The name filter also dropped lib unit tests withdst_in their name.Options: (a) add the three binaries to the core cell; (b) define cells by exclusion so an unlisted binary cannot exist.
Chose (b) over (a) because: (a) fixes three instances and leaves the next new dst_ binary uncovered again.
Where: .github/workflows/ci.yml Tests step and dst-matrix-setup.
Decision: Only the review job keeps a concurrency group; the workflow-level group was removed.
Came up because: review (fable) noted the four singles had no shared group; a shared cancel-in-progress let an
editedevent cancel a proof render mid-Vercel-deploy.Options: (a) shared group without cancel; (b) job-level group on review only, as before.
Chose (b) over (a) because: it is the previous behavior exactly; the other three jobs are seconds long and idempotent.
Where: sdlc.yml review job (temper and stack).
Decision: Stale pre-push wrappers are removed by both the installer and the pre-commit hook itself.
Came up because: review (codex, fable) - a checkout that ran the old installer has
.git/hooks/pre-pushexec'ing a script this PR deletes, so its next push fails with exit 127. Reproduced locally.Options: (a) tell people to re-run setup-hooks.sh; (b) installer removes it; (c) also self-heal from the tracked pre-commit hook, which every such checkout already runs.
Chose (c) over (a)/(b) because: it needs no human step; the commit that precedes the push removes the wrapper.
Where: scripts/setup-hooks.sh, .claude/hooks/pre-commit.sh.
Decision: The Tests job's exclusion is scoped to temper-server (
not (package(temper-server) and binary(/^dst_/))) instead of making the core matrix cell workspace-wide.Came up because: round 2 (codex) - the matrix only runs temper-server, so a dst_ binary in another crate would have been excluded by the Tests job and run nowhere.
Options: (a) core cell
--workspace(compiles every crate's tests in that cell too); (b) scope the Tests-job exclusion to the package the matrix covers.Chose (b) over (a) because: complete coverage in both directions at no extra compile; other crates' dst_ binaries run in the Tests job like any other test.
Where: .github/workflows/ci.yml Tests step.
Decision: Matrix exclusions are anchored regexes (
/^dst_platform_boot$/), and the generator's-Eexpressions are JSON-escaped double quotes inside the single-quoted SUITES string.Came up because: round 2 - fable found the single-quote nesting was a bash syntax error (CI's matrix setup failed on 1afb3a9; I had pushed a
run:block without executing it), and the barebinary(dst_platform_boot)exclusion was a substring match.Options: none for the syntax error; for the match, bare vs anchored.
Chose anchored because: a future
dst_platform_boot_replaybinary would otherwise be silently dropped from platform-consistency.Where: ci.yml dst-matrix-setup. The generator step is now executed locally before push, and a
workflows-lintCI job (actionlint) makes the class of error un-mergeable.Decision: Add an actionlint job to CI.
Came up because: the quoting bug above; actionlint catches it (verified against the broken head), and I had run it only before the matrix edit.
Options: (a) rely on running actionlint by hand; (b) a seconds-long CI job.
Chose (b) over (a) because: a rule I already had and skipped once is not a control; the job is.
Where: .github/workflows/ci.yml job workflows-lint.
Decision: The installer resolves the hooks directory against the repository the script lives in (
git -C "$WORKSPACE_ROOT"), not the caller's cwd.Came up because: round 3 (codex, fable) - my round-2 worktree fix used the cwd's repository, so running the installer by absolute path from another repo would have written temper's hooks there. Reproduced, then driven from a foreign cwd after the fix (foreign repo untouched, temper hooks installed).
Options: (a)
cd "$WORKSPACE_ROOT"at the top; (b)git -C.Chose (b) because: one expression, no cwd side effect for the rest of the script.
Where: scripts/setup-hooks.sh.
Decision: Remove the
evidence.push_post_verifyself-report check and describe the post-push hook as what it is: apush-completedtrace marker, no tests.Came up because: round 3 (codex) - the report looked for
push-pending/test-verifiedmarkers that nothing writes; HARNESS.md said the post-push hook runscargo test. Both were fiction; the check could only ever "skip".Options: (a) make the hook write the markers the report wants (re-adding push-time tests locally); (b) delete the check and correct the docs.
Chose (b) over (a) because: CI verifies pushed code; a local test run at push time is the thing this effort removed.
Where: scripts/verification-v1-report.sh, docs/internal/verification.v1.mapping.md, docs/HARNESS.md (overview diagram, hook row, Component 6, marker flow, lifecycle diagram).
Decision: The actionlint installer script is fetched from the v1.7.7 tag, not main; the lint and bench jobs declare
contents: read; bench.yml installs the toolchain from rust-toolchain.toml instead of a second hard-coded pin.Came up because: round 3 (fable) - an unpinned script piped to bash in a job with the default token; duplicated nightly pin.
Options: none worth recording for the pin; for the toolchain, (a) duplicate the env var, (b) let rustup read the file.
Chose (b) because: the file is already the source of truth for developers.
Where: .github/workflows/ci.yml workflows-lint, .github/workflows/bench.yml.
Decision: Branch protection is out of scope for this PR and surfaced to the owner instead.
Came up because: round 3 (fable) asked whether required contexts were updated. Checked: nerdsane/temper main has NO branch protection and no rulesets (GitHub API 404 / empty), so no context is required and none blocks a merge today.
Options: (a) add a ruleset from this session; (b) report it.
Chose (b) because: repository settings are the owner's call and were never part of this effort's intent; the gates are enforced by process, not by GitHub, until she decides.
Where: PR #454 completion report.
Decision: ADR-0079 amended in place rather than superseded.
Came up because: round 3 (codex) - the ADR still required the nightly and bench-on-every-non-PR-event.
Options: (a) a new ADR; (b) an amendment section.
Chose (b) because: the rest of ADR-0079 (PR smoke mode, seed shards, concurrency) still stands.
Where: docs/adrs/0079-ci-pr-smoke-and-dst-matrix.md.
Proof
Workflow-only change. Proof is this PR's own run: every kept ci.yml job green, the combined sdlc workflow reporting all four contexts, and the README badges rendering live values from Cargo.toml (rust 1.92+, version 0.1.0) at https://github.com/nerdsane/temper/blob/claude/arn-453-ci-cleanup/README.md.
Author: Claude Fable 5.1 via Claude Code (team lead session, hands-on with Rita).
🤖 Generated with Claude Code
https://claude.ai/code/session_019u3vf9EcwtfEP1FeDf5c4o
Greptile Summary
The PR removes duplicated or obsolete local and CI checks while consolidating the four SDLC gates without changing their job identities. It also restores complete DST test coverage and moves bench compilation to a dedicated weekly workflow.
temper-serverDST binaries by exclusion and keeps library and other-package tests in the workspace Tests job.Confidence Score: 5/5
The PR appears safe to merge; no concrete changed-code defect remains after checking workflow parity, DST coverage, and stale-hook cleanup.
The consolidated SDLC jobs preserve the former gate behavior, the revised test filters cover every current DST binary exactly once without excluding library tests, and obsolete hook installations are cleaned up through repository-resolved paths.
Important Files Changed
Flowchart
%%{init: {'theme': 'neutral'}}%% flowchart TD PR[Pull request event] --> SDLC[sdlc workflow] SDLC --> Planning[planning] SDLC --> Decisions[decision-log] SDLC --> Proof[proof] SDLC --> Review[review] Push[PR or main/staging push] --> CI[CI workflow] CI --> Lint[workflow lint] CI --> Workspace[workspace tests excluding temper-server DST binaries] CI --> Matrix[DST matrix] Matrix --> Core[core DST] Matrix --> Boot[platform boot] Matrix --> Consistency[platform consistency] Matrix --> Random[platform random shards] Schedule[Weekly schedule or dispatch] --> Bench[bench build workflow]Reviews (1): Last reviewed commit: "docs(hooks): post-push comment states th..." | Re-trigger Greptile