Skip to content

ci!: remove issue-opening reusables, drift trackers and zero-caller Claude lanes - #585

Merged
kyle-sexton merged 3 commits into
mainfrom
ci/remove-issue-openers
Sep 14, 2026
Merged

kyle-sexton merged 3 commits into
mainfrom
ci/remove-issue-openers

Conversation

@kyle-sexton

@kyle-sexton kyle-sexton commented Sep 14, 2026

Copy link
Copy Markdown
Contributor

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.yml
  • release-gap-check.yml, release-tag-drift-check.yml, tool-version-drift-check.yml

Removed 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.cjs and test, approval-agent-ADR.md, app-approval-count-probe.md
  • claude-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.yml

Removed 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 its render.cjs target)
  • release-tag-drift.sh and test, osv-release-digest.sh and test (used only by tool-version-drift-check.yml)
  • link-check.test.cjs, link-check-tracking-author.test.cjs, standards-sync-stuck-automerge-alert.test.cjs

Coupled 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.cjs kept only its Python-defaults test, renamed python-version-agreement.test.cjs.

  • claude-lane-outcome/outcome-step.test.cjs asserts the class= 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.yml and README no longer describe an aggregator.

  • osv-scanner-pin.json drops update.driftWorkflow; CODEOWNERS drops the aggregator entry.

  • README, SECURITY.md, and stale comments in markdown/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) and docs/topics/ci-fanout-consolidation/ADR.md.

  • claude-lane-retry-gate.test.cjs checks parity across the two review lanes; README drops the e2e/assistant lane contract text; PLAN.md TLDR gets an amendment line.

Kept: issue-triage-label.yml, claude-lane-marker-comment, claude-lane-outcome.

Left as is:

  • release.yml:126 still names release-tag-drift-check.yml in an error message; release.yml is out of scope for this change.
  • lychee.toml lines 2-3 and 32 still mention an "online advisory lane". The file is a standards-synced component (every commit to it is chore: sync standards components), so that wording must change in melodic-software/standards components/lychee, not here.

Secrets and labels left for cleanup (not deleted here):

  • Repository secrets CLAUDE_LANE_INCIDENT_APP_CLIENT_ID and CLAUDE_LANE_INCIDENT_APP_PRIVATE_KEY (used only by the aggregator).
  • The standards caller of the stuck-automerge alert passes its own App client ID and private key secrets; those belong to that caller's cleanup.
  • The claude-lane-incident label, declared in github-iac (GovernedRepositories.cs, LabelContractTests.cs).
  • Now referenced by no workflow here: PUSH_TOKEN (Dependabot secret, lock-regen), MELODIC_APP_ID / MELODIC_PRIVATE_KEY (approval-agent dogfood caller), variables CLAUDE_E2E_VERIFY_DISABLED and CLAUDE_ASSISTANT_DISABLED. CLAUDE_CODE_OAUTH_TOKEN and CLAUDE_LANES_DISABLED stay in use by the review lanes.
  • Open issues filed by the removed automation, for the coordinator to close after merge: [Incident] Claude lane infrastructure failure #584 (lane incident), [Maintenance] Unreleased main: release gap #583 (release gap), [Maintenance] Tool-version drift #511 (tool-version drift).

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 fail
  • node .github/scripts/render.cjs --check: clean
  • actionlint -config-file .github/actionlint.yaml (embedded shellcheck disabled locally): clean
  • shellcheck on the two edited shell scripts: clean
  • git grep for every deleted name: only release.yml and the dated amendment context in docs/topics remain

Related

Callers are being removed in parallel PRs in .github, ci-runner, claude-code-plugins, dotfiles, github-iac, medley, provisioning and standards. This PR should merge after those.

Refs: #583
Refs: #511

🤖 Generated with Claude Code

https://claude.ai/code/session_019mo9xaZ53JHHy4aBjgd8wK

kyle-sexton and others added 2 commits September 14, 2026 14:39
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
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 14, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review Completed 2026-09-14T19:01:33.974232Z 6665010 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@github-actions github-actions Bot deleted a comment from claude Bot Sep 14, 2026
@github-actions github-actions Bot deleted a comment from claude Bot Sep 14, 2026
@claude

claude Bot commented Sep 14, 2026

Copy link
Copy Markdown

Claude encountered an error after 0s —— View job


I'll analyze this and get back to you.

@claude

claude Bot commented Sep 14, 2026

Copy link
Copy Markdown

Claude encountered an error after 1s —— View job


I'll analyze this and get back to you.

@github-actions

github-actions Bot commented Sep 14, 2026

Copy link
Copy Markdown

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 pull_request triggers include synchronize (the canonical security caller keeps it). An automatic retry may already have run — it is skipped when a partial review could duplicate comments, or when the failure class needs an operator.

Re-running does NOT help for every class:

  • rate-limit that persists across re-runs, or auth — the credential or usage budget needs an operator; retrying will not clear it.
  • a run that exhausted its turn budget ("subtype":"error_max_turns" above) will exhaust it again. As the PR author, split the change into smaller PRs; raising --max-turns is a change to the caller workflow, not something you can set on this PR.

@github-actions

Copy link
Copy Markdown

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 pull_request triggers include synchronize (the canonical caller omits it).
An automatic retry may already have run — it is skipped when a partial review could duplicate comments, or when the failure class needs an operator (auth).

…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
@github-actions github-actions Bot deleted a comment from claude Bot Sep 14, 2026
@kyle-sexton kyle-sexton changed the title ci!: remove issue-opening reusables and scheduled drift trackers ci!: remove issue-opening reusables, drift trackers and zero-caller Claude lanes Sep 14, 2026
@claude

claude Bot commented Sep 14, 2026

Copy link
Copy Markdown

Claude encountered an error after 0s —— View job


I'll analyze this and get back to you.

@kyle-sexton
kyle-sexton merged commit 7af4ab8 into main Sep 14, 2026
52 checks passed
@kyle-sexton
kyle-sexton deleted the ci/remove-issue-openers branch September 14, 2026 19:18
kyle-sexton added a commit to melodic-software/standards that referenced this pull request Sep 14, 2026
…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>
kyle-sexton added a commit that referenced this pull request Sep 14, 2026
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
kyle-sexton added a commit that referenced this pull request Sep 15, 2026
…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>
kyle-sexton added a commit to melodic-software/standards that referenced this pull request Sep 15, 2026
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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant