Skip to content

ci: remove the scheduled link-check issue caller - #4166

Merged
kyle-sexton merged 2 commits into
mainfrom
ci/remove-link-check-caller
Sep 14, 2026
Merged

kyle-sexton merged 2 commits into
mainfrom
ci/remove-link-check-caller

Conversation

@kyle-sexton

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

Copy link
Copy Markdown
Contributor

No linked issue

Summary

Owner decision 2026-09-14: remove every automated process that opens GitHub issues on its own. link-check.yml was the only local caller of the ci-workflows reusable link-check.yml, whose sole output is a rolling tracking issue filed on failure.

Fix

  • Deleted .github/workflows/link-check.yml (the scheduled caller).
  • Removed the now-dead file entry from .github/workflows/ci.yml's workflow-schema validation list and dropped the stale link-check.yml comparisons in .github/workflows/silent-revert-canary.yml and .github/workflows/video-digest-source-liveness.yml.
  • Updated docs/architecture/landscape.json and docs/architecture/landscape.md to match reference-edges.sh's actual output for the ci-workflows uses-workflow edge (count 23 across 5 files, including managed-files-guard.yml, which had fallen out of the row's 5-file cap behind link-check.yml).
  • Recorded the lane's removal in docs/specs/provenance-convention-engagement.md (the dead-pointer round-trip wiring this repo's weekly lane fed is now dormant here).
  • .github/runner-policy.json (local) has no exceptions entries, so there was no job grant to remove there.
  • Left .github/standards/runner-policy/policy.json untouched per scope (.github/standards/** is off-limits to this PR). It still carries several melodic-software/ci-workflows/.github/workflows/link-check.yml@<sha> grants, including the pinned SHA the deleted caller used; those are now orphaned and worth pruning in a standards-owned change.
  • Left lychee.toml untouched: it's SYNC-MANAGED (the lychee component in melodic-software/standards's distribution/sync-manifest.yml, guarded by managed-files-guard.yml). Its "the online advisory lane reuses this file" comment is now stale fleet-wide under the same owner decision and needs a standards-repo change, not a local edit.
  • Left issue-triage-label.yml untouched, and left the generic "link-check lane" prose in docs/specs/provenance-design-threads.md, docs/specs/provenance-capability-matrix.md, plugins/provenance/**, plugins/docs-hygiene/**, docs/conventions/standards/README.md, plugins/planning/reference/standards-contract.md, and plugins/review/reference/standards-contract.md alone — those describe the general convention/lane pattern and the plugin-vs-consuming-repo ownership boundary, not an enumeration of this specific caller file.

Verification

  • git diff --stat across both commits: .github/workflows/link-check.yml deleted, plus targeted edits to 7 other files.
  • npm ci completed successfully in the worktree before committing.
  • Grepped the repository for link-check (case-insensitive) and reviewed every hit.
  • Ran plugins/architecture/skills/map-landscape/scripts/reference-edges.sh . --owner melodic-software to verify the corrected landscape edge matches ground truth exactly.
  • CI green on the final commit (ci-status, ci-lanes, and all other required checks passing); one hook-utils failure on the first push was a pre-existing flake (two begin: FILE_DIR/FILE_BASE assertions unrelated to this diff) confirmed by a clean rerun.
  • Both Codex review threads addressed and resolved.

Related

Owner decision 2026-09-14: no automated process should open GitHub
issues on its own. link-check.yml only ever produced a rolling
tracking issue from the ci-workflows reusable link-check workflow, so
delete the caller and its stale references.

Refs: melodic-software/claude-code-plugins

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-14T18:01:57.290786Z 87cd17d 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.

@claude

claude Bot commented Sep 14, 2026

Copy link
Copy Markdown
Contributor

Claude encountered an error after 1s —— View job


I'll analyze this and get back to you.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 87cd17d270

ℹ️ 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".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread docs/architecture/landscape.json Outdated
Comment thread .github/workflows/link-check.yml
@claude

claude Bot commented Sep 14, 2026

Copy link
Copy Markdown
Contributor

Claude encountered an error after 0s —— View job


I'll analyze this and get back to you.

@github-actions

Copy link
Copy Markdown
Contributor

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
Contributor

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).

Follow-up to the link-check.yml deletion: regenerate the ci-workflows
uses-workflow edge to match reference-edges.sh (managed-files-guard.yml
had fallen out of the FILE_CAP window behind link-check.yml, count 23
across 5 files, not 4) and record the dead-pointer wiring's removal in
provenance-convention-engagement.md.

Refs: melodic-software/claude-code-plugins

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019mo9xaZ53JHHy4aBjgd8wK
@kyle-sexton
kyle-sexton merged commit 1935ab0 into main Sep 14, 2026
21 checks passed
@kyle-sexton
kyle-sexton deleted the ci/remove-link-check-caller branch September 14, 2026 18:33
kyle-sexton added a commit to melodic-software/.github that referenced this pull request Sep 14, 2026
No related issue: owner decision 2026-09-14 to remove every automated
process that opens GitHub issues on its own; this is org-wide cleanup,
not a tracked bug or feature.

## Summary

`link-check.yml` was the last local caller of the ci-workflows reusable
`link-check.yml`, whose sole output is a rolling tracking issue filed on
failure.

## Fix

- Deleted `.github/workflows/link-check.yml` (the scheduled caller).
- Updated `README.md`'s CI description to drop the paragraph describing
`link-check.yml` as "the one remaining caller of a ci-workflows reusable
workflow" and the now-moot note about that reusable-workflow pin's
update path (Dependabot only tracks composite-action pins, not
reusable-workflow pins, and this repo no longer has any
reusable-workflow caller).
- This repo has no `.github/runner-policy.json` and no
`.github/standards/**` tree, so there was no job grant or
standards-owned file to touch.
- Left `.github/dependabot.yml` alone; it never pinned the
reusable-workflow ref.
- Left `lychee.toml` untouched: it's SYNC-MANAGED (the `lychee`
component in `melodic-software/standards`'s
`distribution/sync-manifest.yml`). Its "the online advisory lane reuses
this file" comment is now stale fleet-wide (this repo and
`claude-code-plugins`, companion PR
melodic-software/claude-code-plugins#4166, both lost their sole online
caller under the same owner decision) and needs a standards-repo change,
not a local edit here.

## Verification

- `git diff --stat` on the commit: 2 files changed, 2 insertions(+), 39
deletions(-), including `delete mode 100644
.github/workflows/link-check.yml`.
- Grepped the repository for `link-check` (case-insensitive); the only
remaining hit is `lychee.toml`'s generic "link-checking config" comment,
which does not name this workflow and still applies to the offline
lychee lane in `ci.yml`.
- CI green: `ci-status` and every other check passing on the head
commit.

## Related

- Refs melodic-software/claude-code-plugins#4166 (companion PR removing
the same caller in the `claude-code-plugins` repo)

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
kyle-sexton added a commit that referenced this pull request Sep 14, 2026
Clears check-stale-base-overlap: #4166 also touched .github/workflows/ci.yml.

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 14, 2026
…4170)

Closes #3705

## Summary

On a push to main, `test-linux` used to run the whole plugin contract
corpus in one job, which took about 550 s. This PR splits the corpus
across four `test-linux` legs on every event, the same way the affected
selection is already split on a pull request. The job key does not
change, so the six-job layout, `ci-status.needs` and lane coverage all
stay the same.

Two metrics move: how long the test-linux lane takes on push, and how
long a push waits for `ci-status` to go green. The whole push run does
not get shorter. `test-windows` is not in `ci-status`'s needs, and it
took 713 s on run 34815969269, 603 s of that in the
`apply-rename.test.sh` step. The run's total time stays tied to
`test-windows` until the separate PR that cuts that suite lands.

## Fix

- `scripts/run-plugin-tests.sh` has a new `--shard I/N` option. It
splits the sorted list of discovered suites by index modulo N, which is
how `affected-tests.sh --shard` already works:
- No suite lands on two legs, and the legs together cover the whole
corpus.
  - A leg with no suites exits 0.
- The check for stale serial-allowlist entries still compares against
every discovered suite, not just the leg's.
  - Each leg runs its own serial suites first.
- `ci.yml` `test-linux`:
- The matrix is now `leg: [0, 1, 2, 3]` on every event. `LEG` and `LEGS`
are set once at job level.
- On push, the contract step runs `scripts/run-plugin-tests.sh --jobs 3
--shard "$LEG/$LEGS"`.
- On a PR, the UNMAPPED fallback uses the same shard on every leg. It no
longer runs only on leg 0.
- Every step after the contract step now runs on leg 0 only, on both
events. That covers the scripts/ suites, manifest validation, the sync
`--check`/`--check-bump` steps, the Node sub-projects and disk-hygiene.
Before, they ran on all four legs of a PR and once on the single push
leg.
- The leg check is a first line `[ "$LEG" = 0 ] || exit 0`, not a step
`if:`. `scripts/check-docs-only-gate.sh` accepts exactly one condition
form on a gated step. A step that exits 0 reports `success`, never
`skipped`, and `ci-status` fails on `skipped`.
  - The comment above the matrix is rewritten to match.

## Verification

Local checks:
- `bash scripts/run-plugin-tests.test.sh`: PASS=67 FAIL=0. The new cases
check that:
- the legs do not overlap and together equal the unsharded run,
including when an allowlisted suite sits on another leg
  - a leg's serial subset runs
  - an empty leg exits 0
  - the bad specs `2/2`, `x`, `1`, `1/0` and `''` exit 2
- `bash scripts/affected-tests.test.sh`: PASS=76 FAIL=0. It includes the
live check that ci.yml passes the leg into `--shard`.
- `scripts/check-docs-only-gate.sh --check` passes.
`scripts/check-lane-coverage.sh --check` passes. Their test suites pass
64/0 and 40/0.
- `actionlint`, `zizmor --offline`, `shellcheck`, `shfmt -d` and
`check-shell-portability.sh --paths` all pass.

Live measurement: the probe commit b0c544f, reverted in 8e98db1,
forced this PR's contract step onto the push branch. Run 34884762048,
all four legs green:

| leg | job wall | contract step | suites (serial) |
|---|---|---|---|
| 0 | 192 s | 79 s | 87 (3) |
| 1 | 205 s | 146 s | 87 (4) |
| 2 | 156 s | 110 s | 87 (3) |
| 3 | 158 s | 120 s | 86 (8) |

The legs sum to 347 suites, which is the whole corpus. The serial counts
sum to 18, the whole allowlist. Leg 0 also carries the roughly 80 s of
steps that run only once. Leg 1 is the slowest at 205 s and runs none of
them. Moving those steps to any other leg would push that leg above 205
s, so leg 0 is the best place for them.

Before, on push:
- Run 34815969269: `test-linux` 556 s, of which the contract step took
444 s. `ci-status` finished 583 s into the run.
- Run 34750258935: `test-linux` 549 s. `ci-status` finished 584 s into
the run.

After:
- The test-linux lane takes as long as its slowest leg, 205 s, down from
549 to 556 s.
- The wait for `ci-status` on push is now set by `lint`, which finished
516 s and 512 s into those same two runs. I expect `ci-status` to finish
around 515 s into a push run instead of 583 s, about 65 to 70 s sooner.
This is an estimate: nothing has run on a push to main yet. Making lint
faster is out of scope here.

The probe run's `lint` failed only on `check-stale-base-overlap`,
because #4166 landed on main and also touched `ci.yml`. Merging main in
fixed it.

## Related

- Refs melodic-software/github-iac#378
- #3696 (six-job consolidation), #3693 (`--jobs 3`), #3694

🤖 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 15, 2026
No linked issue: owner direction 2026-09-14 to delete stale and
overengineered automation.

## Summary

This deletes two advisory workflows whose output nobody reads, removes
the timing branches and helpers that existed only for one of them, and
removes the pull-request self-test trigger from the silent-revert
canary. None of these lanes is part of `ci-status`.

## Fix

- **`video-digest-source-liveness.yml`** (scheduled runs red 5 weeks
running, not in `ci-status`): deleted, together with:
- `plugins/knowledge/skills/video-digest/extraction/liveness/**` (the
harness, its manifest, fixtures, test and `LIVENESS.md`). A repository
grep found no user of the harness outside that directory and the
workflow: no skill, no other test, no import. Its own
`run-source-liveness.test.js` was picked up by the extraction package's
vitest glob, but it tested only the harness.
- `.github/requirements-video-digest-liveness.txt`, which only the
workflow read.
- The `liveness:offline` and `liveness:live` scripts in the extraction
`package.json`.
- Its glob in `scripts/em-dash-purged-paths.txt`. The purge gate fails
on stale globs.
- **`hook-utils-timing.yml`** (2 runs, results unread): deleted.
- In `lib/hook-utils.test.sh`, removed both `HOOK_UTILS_TIMING`-gated
clock comparisons: late-EOF and stall overshoot. Also removed the
helpers only they used (`bs_median`, `bs_paired_estimate`,
`bs_paired_verdict`, `bs_samples`, `bs_time_late_eof`, `bs_reads_on`)
and Test 18b(i), which exercised only that estimator.
- The load-independent chunk-boundary engagement probe and stall
read-count probe stay as the regression guards (#2105). Comments that
described the removed comparisons are updated.
- **`silent-revert-canary.yml`**: removed only the `pull_request`
trigger, the two `if: github.event_name != 'pull_request'` gates it made
necessary, and the comments that explained it. The push-to-main canary
is unchanged: self-test, incident replay, range scan and restoration
assertion.
- **`ci.yml`**: removed only the `hook-utils-timing.yml` entry from the
workflow-schema file list.
- **Docs**:
  - `docs/ci-runner-routing.md` now names one Windows lane.
- `docs/architecture/landscape.json` and `landscape.md` are updated to
`reference-edges.sh` output for the edges this changes:
`actions/checkout` 15 → 11, `actions/setup-node` 5 → 3, and the
`actions/upload-artifact` edge removed. The rest of the record is left
as generated.
- **Checked, no change needed:**
`docs/specs/provenance-convention-engagement.md` does not reference
these workflows.
- **Left as dated records:** the findings row naming `LIVENESS.md` in
`docs/specs/docs-hygiene-sweep-unapplied-remediations.md`, and the
`plugins/knowledge/CHANGELOG.md` history.

## Verification

- `bash lib/hook-utils.test.sh`: `PASS=462 FAIL=0`.
- `bash -n` and `shellcheck lib/hook-utils.test.sh`: clean.
- `actionlint`: exit 0, including after rebasing onto #4167.
- `markdownlint-cli2` on `docs/ci-runner-routing.md` and
`docs/architecture/landscape.md`: 0 issues.
- `jq empty` on the changed JSON: OK.
- `reference-edges.sh` on `origin/main` and on this branch: they differ
only in the three workflow edges above.
- Not run locally: `scripts/check-purged-em-dashes.sh` hangs on this
Windows host, so CI runs it. A script check confirmed that every
remaining allowlist glob matches a tracked file.
- A fresh-context verifier checked the branch against this scope. Its
first pass named two stale comments in `lib/hook-utils.test.sh`; both
are fixed. It passed on re-verification after the rebase.

## Related

- #2105 (the load-independent probes that remain the guards)
- #4166 (the same owner direction applied to `link-check.yml`)

🤖 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>
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