ci!: remove issue-opening reusables, drift trackers and zero-caller Claude lanes - #585
Conversation
Owner decision 2026-09-14: no automated process opens GitHub issues on its own. Delete every reusable and scheduled workflow here that files or maintains issues, together with the scripts, tests, fixtures, CI steps, render targets and docs that exist only for them. Removed workflows: link-check.yml, pulumi-version-drift-check.yml, standards-sync-stuck-automerge-alert.yml, claude-lane-incident-aggregator.yml, release-gap-check.yml, release-tag-drift-check.yml, tool-version-drift-check.yml. Removed support: claude-lane-incident.cjs and its write gate, pinned job and mint step, aggregator tests and fixtures; find-tracking-issue.sh, its tests and the render-find-tracking-issue target; release-tag-drift.sh and osv-release-digest.sh with their tests. The Python-defaults agreement test is kept and renamed to python-version-agreement.test.cjs. Kept: issue-triage-label.yml, claude-assistant.yml, and the claude-lane-outcome and claude-lane-marker-comment actions (their class= annotation and PR comment stay; comments no longer describe an aggregator). BREAKING CHANGE: the reusable workflows link-check.yml, pulumi-version-drift-check.yml and standards-sync-stuck-automerge-alert.yml no longer exist on main. Callers pinned to an older SHA keep working until they re-pin; callers must be removed before re-pinning. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019mo9xaZ53JHHy4aBjgd8wK
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019mo9xaZ53JHHy4aBjgd8wK
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
Claude encountered an error after 0s —— View job I'll analyze this and get back to you. |
|
Claude encountered an error after 1s —— View job I'll analyze this and get back to you. |
|
Warning Automated security review did not complete — this is an infrastructure failure, not a review verdict. Treat any Claude comment on this PR (including a placeholder like "I'll analyze this and get back to you") as incomplete, not "no findings."
The check is green on purpose, and it is not evidence. It certifies that a security pass ran, and this one did not complete — but the cause is outside this PR's control, so merging is deliberately left unblocked rather than locking every merge for the length of the outage. Nothing was reviewed at this head. Where this check is required, it is satisfied without that evidence; a human should review security-sensitive changes here before merging. Re-run the job, or workflow_dispatch this workflow with the PR number, to retry the review (ci-workflows#227). A new push also retries it only if the caller's Re-running does NOT help for every class:
|
|
Warning Automated review did not complete — this is an infrastructure failure, not a review verdict. Treat any Claude comment on this PR (including a placeholder like "I'll analyze this and get back to you") as incomplete, not "no findings."
Re-run the job, or workflow_dispatch this workflow with the PR number, to retry the review. A new push re-triggers this lane only if the caller's |
…n reusables Owner direction 2026-09-14: delete stale automation. None of these reusables has a caller in any melodic-software repository. Removed: approval-agent.yml and approval-agent-self.yml with approval-agent-guardrails.cjs, its test, approval-agent-ADR.md and app-approval-count-probe.md; claude-assistant.yml and claude-assistant-self.yml with claude-assistant.test.cjs and claude-assistant-ADR.md; claude-e2e-verify.yml and claude-e2e-verify-self.yml with .github/test-fixtures/e2e-demo/; dependabot-lock-regen.yml. The retry-gate parity test now covers the two review lanes. README drops the removed entries and the e2e-specific lane contract text; PLAN.md gets a one-line amendment. BREAKING CHANGE: the reusable workflows approval-agent.yml, claude-assistant.yml, claude-e2e-verify.yml and dependabot-lock-regen.yml no longer exist on main. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019mo9xaZ53JHHy4aBjgd8wK
|
Claude encountered an error after 0s —— View job I'll analyze this and get back to you. |
…les (#569) Refs: melodic-software/ci-workflows#585 ## Summary ci-workflows #585 deleted the `link-check`, `pulumi-version-drift-check`, `standards-sync-stuck-automerge-alert`, `approval-agent`, `claude-assistant`, `claude-e2e-verify` and `dependabot-lock-regen` reusable workflows, and every caller across the org is already removed. This drops their contracts from the runner-policy allowlist. ## Fix - `components/runner-policy/policy.json`: removed all 26 `approvedReusableWorkflowContracts` entries for those paths (97 to 71). Only `link-check`, `pulumi-version-drift-check` and `standards-sync-stuck-automerge-alert` had entries; the other four never did. No other entry changed. - `components/runner-policy/runner-policy.test.mjs`: removed the assertions and the five tests whose subject was a removed contract (two Pulumi drift hosted tests, the link-check wave-tag caller, the two Pulumi convergence-tag tests). The generic hosted-only reference now points at `osv-scanner.yml@99ac2f8c`, which is still hosted-only with no inputs, so the three hosted-only tests keep testing the same rules. The wave-patch caller list drops `link-check` (7 to 6), and the sync-family absence test keeps `standards-sync` only. `hosted-exception-required` and `hosted-exception-category` stay covered by other tests. - `components/runner-policy/README.md`: replaced the sentence that kept these entries "as the record for other consumers" with an amendment saying none of those registrations is in force any more. - Deliberately untouched: `components/pin-comment-convention/fixtures/bad/workflow.yml` (generic pin-comment fixture), `docs/topics/standards-sync-audit/PLAN.md` (dated plan), and consumer copies under `.github/standards/runner-policy/` (the sync replaces them after merge). ## Verification - `npm run test:runner-policy`: 253/253 pass (258 before, minus the 5 removed tests). `npm run lint:runner-policy` passes. `repin-policy-lockstep.test.mjs`: 7/7 pass. Biome on `components/runner-policy`, `lint:md` and typos are clean. - Consumer check: ran this branch's `runner-policy.mjs` and `policy.json` against current `main` of every consumer, with `GITHUB_REPOSITORY` and the repository's visibility set. All pass: claude-code-plugins (public), dotfiles, github-iac, medley, provisioning (private), and standards itself. All six also passed against `origin/main`'s policy first. None of them calls the seven reusables from `.github/`. - A fresh-context verifier re-ran the diff review, tests, linters and consumer checks and returned PASS. ## Related - melodic-software/ci-workflows#585 deleted the reusables. - Caller removals: dotfiles#710, github-iac#486, provisioning#443, standards#568, claude-code-plugins#4166, .github#131, medley#1983, ci-runner#357. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_019mo9xaZ53JHHy4aBjgd8wK Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
The classify step's run block in osv-scanner.yml is now the guard's only copy. osv-scan-guard.test.sh extracts that block and runs every existing case against it, and fails if the block cannot be found. The standalone osv-scan-guard.sh, which nothing else used, is deleted. Refs: #585 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019mo9xaZ53JHHy4aBjgd8wK
…amework (#586) ## Summary Follow-up to #585: removes scripts, composite actions and the render framework that nothing uses any more. **Breaking:** the `lefthook-validate` and `tsc` composite actions are removed. No repository in the organization calls either one. **Merge order:** github-iac's `.github/governance-verify/expected-contract-only-gates.json` still lists `lefthook-validate` and `tsc` under `melodic-software/ci-workflows` (lines 161 and 171). Its `verify-predicate` job reads this repository's `ci.yml` on `main` and fails on any listed job that no longer exists. Those two entries need to come out of github-iac when this merges. That change is not part of this PR. ## Fix - Deleted `.github/scripts/check-run-reconcile.cjs` and its test. Nothing calls it. Removed its mention from `docs/topics/claude-review-lanes/security-review-absent-mitigation.md`. - Deleted `.github/scripts/resolve-cancelled-prerequisite.cjs` and its test. The only remaining mention anywhere is a github-iac plan doc. - Deleted the `lefthook-validate` and `tsc` composite actions: - removed `.github/actions/lefthook-validate/` (including fixtures), `.github/actions/tsc/`, `.github/scripts/lefthook-validate.test.sh` and `fixtures/typescript/good/tsconfig.json`, which only the `tsc` lane used - removed the `tsc` and `lefthook-validate` jobs from `ci.yml`, plus their `ci-status` `needs` and `results` entries, the `lefthook-validate` change filter and the `**/tsconfig.json` filter pattern - removed `lefthook-validate` from the cached-install list in `network-timeout-policy.test.cjs` - removed both README entries and their link definitions, and updated the `.cursor/install.sh` header comment - Removed the render framework: `render.cjs`, `render-compose.cjs`, `render-compose.test.cjs` and `render-osv-scan-guard.cjs`. - Its only target was the OSV scan guard block in `osv-scanner.yml`. That block stays inline with its content unchanged; only the BEGIN, Source and END generator marker comments are gone. - `osv-scanner-pin.test.cjs` no longer runs the renderer `--check` or asserts the Source marker. Its fail-closed content assertions are kept. - Shape tests: every `.github/scripts/*.test.cjs` without a source module tests a workflow that still exists, so none were deleted. `workflow-yaml.cjs` stays because four tests use it. - Not touched: `release.yml`, `.github/standards/**`, SYNC-MANAGED files, and the dated `docs/topics/ci-fanout-consolidation/ADR.md` record. ## Verification - `node --test .github/scripts/*.test.cjs`: 235/235 pass. `node --test .github/actions/claude-lane-outcome/*.test.cjs`: 15/15 pass. - `osv-scan-guard.test.sh` and `change-detection/match.test.sh` pass. - biome 2.5.11 `ci` over `fixtures/typescript/good .github/scripts` passes. `actionlint -shellcheck=` passes on all workflows. shellcheck on `.cursor/install.sh`, markdownlint on both edited markdown files, and typos are clean. - zizmor on `ci.yml` and `osv-scanner.yml`: 51 findings, all low. `main` has 55 for the same two files, so no new findings. - Composite callers: searched GitHub code search across the org for `ci-workflows/.github/actions/lefthook-validate` and `.../tsc`, and grepped `origin/main` in every canonical clone. There are no callers outside this repository. - A fresh-context verifier checked the diff, reran the suites, checked the `ci-status` wiring and searched for callers again. It returned PASS and found the github-iac gates entry noted above. - The inline guard in `osv-scanner.yml` currently matches `.github/scripts/osv-scan-guard.sh` line for line. `osv-scan-guard.test.sh` still tests the `.sh` file, but with the renderer gone nothing keeps the two copies in sync. ## Related Refs: #585 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_019mo9xaZ53JHHy4aBjgd8wK --------- Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
No related issue: comment-only correction of a claim that the fleet-wide reusable deletion left false. ## Summary `ci-workflows#585` deleted the scheduled link-check reusable fleet-wide. The comments in the root `lychee.toml` still describe an "online advisory lane" and two further "online lane" mentions, so every consumer that receives the synced file now carries a description of a lane that does not exist. The component README, the `lychee.test.sh` header, and the good fixture's heading prose carry the same claim. `lychee.toml` is the synced payload: `distribution/sync-manifest.yml` maps the whole `lychee` component as `lychee.toml: lychee.toml`, and nothing under `components/lychee/` is synced. ## Fix Comments and prose only. Every mention of the deleted lane now describes a manual online run instead: - `lychee.toml` — the header comment, the `exclude` list's introductory comment, and the private-repo comment inside that list. - `components/lychee/README.md` — the lane sentence and the private-repo exclusion paragraph. The sentence that described an online scheduled workflow now states that external URLs are checked only by a manual online run. - `components/lychee/lychee.test.sh` — the file header. - `components/lychee/fixtures/good/Exclusions.md` — the heading prose, where the phrase wrapped across a newline. The `exclude` list itself is untouched. The two GENERATED `melodic-software/` alternations are byte-identical to `main`, as are every non-comment line of `lychee.toml` and every URL line of the fixture. The only scheduled lychee workflow that remains, `lychee-private-inventory.yml`, checks inventory drift rather than links, so every reference to it is still accurate and is left alone. ## Verification - `bash harness/shell/run-tests.sh components/lychee/lychee.test.sh` — 1 passed. - `bash harness/shell/run-tests.sh components/lychee/private-repo-inventory.test.sh` — 1 passed. - `bash components/lychee/private-repo-inventory.sh check --config lychee.toml` — rc=0, inventory agrees with every visibility fact checked. - `npm run lint:md` — 122 files, 0 issues. - `shellcheck components/lychee/lychee.test.sh`, `typos`, `editorconfig-checker` — all rc=0. - Non-comment lines of `lychee.toml` diff clean against `origin/main`. - All pre-commit hooks passed. A fresh-context verifier reviewed the branch against this scope and returned PASS after the fixture wording was corrected. ## Related Refs: melodic-software/ci-workflows#585 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01XwY46aTKXzw9wrLhVC1Azz --------- Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Summary
Owner decision 2026-09-14: no automated process opens GitHub issues on its own, and stale or overengineered automation goes. This removes every issue-opening reusable and scheduled tracker in ci-workflows, plus the scripts, tests, fixtures, CI steps, render targets and docs that existed only for them.
Consumers pin this repository by SHA, so nothing changes for a caller until it re-pins.
Fix
Removed workflows:
link-check.yml(reusable)pulumi-version-drift-check.yml(reusable)standards-sync-stuck-automerge-alert.yml(reusable)claude-lane-incident-aggregator.ymlrelease-gap-check.yml,release-tag-drift-check.yml,tool-version-drift-check.ymlRemoved zero-caller reusables (owner direction 2026-09-14: delete stale automation; no org repository calls them):
approval-agent.yml,approval-agent-self.yml,approval-agent-guardrails.cjsand test,approval-agent-ADR.md,app-approval-count-probe.mdclaude-assistant.yml,claude-assistant-self.yml,claude-assistant.test.cjs,claude-assistant-ADR.md(medley keeps its own local copy)claude-e2e-verify.yml,claude-e2e-verify-self.yml,.github/test-fixtures/e2e-demo/dependabot-lock-regen.ymlRemoved support files:
claude-lane-incident.cjs,claude-lane-incident.test.cjs,claude-lane-incident-write-gate.cjs,claude-lane-incident-write-job.pinned.yml,claude-lane-incident-mint-step.pinned.yml,claude-lane-incident-aggregator.test.cjs,fixtures/claude-lane-incident-write-gate/find-tracking-issue.sh,find-tracking-issue.test.sh,find-tracking-issue-render.test.cjs,render-find-tracking-issue.cjs(and itsrender.cjstarget)release-tag-drift.shand test,osv-release-digest.shand test (used only bytool-version-drift-check.yml)link-check.test.cjs,link-check-tracking-author.test.cjs,standards-sync-stuck-automerge-alert.test.cjsCoupled edits:
ci.yml: dropped the three removed shell test steps.Contract tests (
network-timeout-policy,pulumi-deploy-guard,go-quality,osv-scanner-pin,render-compose): dropped assertions against the deleted workflows.tool-version-drift-contract.test.cjskept only its Python-defaults test, renamedpython-version-agreement.test.cjs.claude-lane-outcome/outcome-step.test.cjsasserts theclass=token directly instead of through the deleted incident parser. The action's annotation and the marker comment are unchanged; comments in the action,classify.cjs,claude-security-review.ymland README no longer describe an aggregator.osv-scanner-pin.jsondropsupdate.driftWorkflow;CODEOWNERSdrops the aggregator entry.README,
SECURITY.md, and stale comments inmarkdown/action.yml,check-action-metadata-filename.sh,composite-run-shellcheck.sh,claude-e2e-verify.yml,standards-sync.yml,.gitignore.One-line amendment notes in
docs/topics/claude-review-lanes/PLAN.md(Phase 4 and step 3d) anddocs/topics/ci-fanout-consolidation/ADR.md.claude-lane-retry-gate.test.cjschecks parity across the two review lanes; README drops the e2e/assistant lane contract text;PLAN.mdTLDR gets an amendment line.Kept:
issue-triage-label.yml,claude-lane-marker-comment,claude-lane-outcome.Left as is:
release.yml:126still namesrelease-tag-drift-check.ymlin an error message;release.ymlis out of scope for this change.lychee.tomllines 2-3 and 32 still mention an "online advisory lane". The file is a standards-synced component (every commit to it ischore: sync standards components), so that wording must change inmelodic-software/standardscomponents/lychee, not here.Secrets and labels left for cleanup (not deleted here):
CLAUDE_LANE_INCIDENT_APP_CLIENT_IDandCLAUDE_LANE_INCIDENT_APP_PRIVATE_KEY(used only by the aggregator).claude-lane-incidentlabel, declared in github-iac (GovernedRepositories.cs,LabelContractTests.cs).PUSH_TOKEN(Dependabot secret, lock-regen),MELODIC_APP_ID/MELODIC_PRIVATE_KEY(approval-agent dogfood caller), variablesCLAUDE_E2E_VERIFY_DISABLEDandCLAUDE_ASSISTANT_DISABLED.CLAUDE_CODE_OAUTH_TOKENandCLAUDE_LANES_DISABLEDstay in use by the review lanes.Verification
node --test .github/scripts/*.test.cjs: 272 pass, 0 fail (307 before the zero-caller removals)node --test .github/actions/claude-lane-outcome/*.test.cjs: 15 pass, 0 failnode .github/scripts/render.cjs --check: cleanactionlint -config-file .github/actionlint.yaml(embedded shellcheck disabled locally): cleanshellcheckon the two edited shell scripts: cleangit grepfor every deleted name: onlyrelease.ymland the dated amendment context indocs/topicsremainRelated
Callers are being removed in parallel PRs in
.github,ci-runner,claude-code-plugins,dotfiles,github-iac,medley,provisioningandstandards. This PR should merge after those.Refs: #583
Refs: #511
🤖 Generated with Claude Code
https://claude.ai/code/session_019mo9xaZ53JHHy4aBjgd8wK