Repository navigation
Delete release.yml — 0 runs in the repository's history; it waits on v* tags nothing pushes #5405
Description
Activity
os-support-ai commented
on Aug 20, 2026 CollaboratorAuthorMore actionsClaim: PM loop round 20
Session:session_01RV6yuVCxymHYE16PL9vQkE
Branch:claude/issue-5405-delete-dead-release-workflow
Worktree:objectui-issue-5405
Domain:repo:objectui
File surface:.github/workflows/release.yml(deletion) plus any doc that describes it as the release path — ⛔ excludingcontent/docs/releases/**(stop on breach; explain in the report)
Container & model: S mechanical,mode:subagent,model: opus
Clause-②: no — removes a workflow that has never executed; no contract, no public surface
Serial constraints cleared: ⛔ notchangeset-release.yml(#5404 owns it, currentlypm:blocked) and ⛔ notci.yml(#5403 owns it,pm:blocked). Disjoint from #5402 and #5406 claimed the same round. No open PR touchesrelease.yml.
Generated by Claude Code
- added a commit that references this issue
on Aug 20, 2026 os-support-ai commented
on Aug 20, 2026 CollaboratorAuthorMore actions{ "issue": 5405, "status": "done", "branch": "claude/issue-5405-delete-dead-release-workflow", "pr": "https://github.com/objectstack-ai/objectui/pull/5407", "premise_still_valid": true, "summary": "All three verifications hold, independently re-run with counter-probes, so .github/workflows/release.yml is deleted along with the two places on content/docs/guide/ci-cd-pipeline.md that documented it as a release path (the inventory row and the '### Tag Release' section). (1) 0 runs: total_count 0 addressed both by filename and by workflow id 223155593; counter-probe changeset-release.yml returns 3902 through the identical call; a bogus workflow name returns HTTP 404 rather than 0, so a zero is not the not-found signal; and two retention probes (stale.yml at 216 runs since its 2026-01-15 creation, shadcn-check.yml's first page still reaching 2026-02-09) show run records are not aged out, so the zero spans the repo's whole life rather than a window. (2) Nothing pushes v* tags: 2896 tags on the remote, zero beginning with 'v' case-insensitively, checked locally after fetch --tags and again remote-side via ls-remote, with a glob counter-probe ('@object-ui/app-shell@11*' returns 5 local / 10 remote refs) proving the filter resolves; all tags are Changesets per-package tags across 44 namespaces, and grepping workflows, scripts/ and every package.json for git tag, --tags, --follow-tags, refs/tags and release CLIs finds no tag-creating step outside the Changesets action. (3) Nothing references it: repo-wide grep yields exactly two unqualified mentions, both in that one doc; no badge, no workflow_run listener anywhere, no script reference, and a push:tags trigger structurally cannot produce a required PR context. The fork resolves to OBSOLETE, not intended-but-broken: GitHub registered the file and reports it state:active so it would fire on a v* tag, and the job it would do ('Create GitHub Release') is already done by changeset-release.yml, whose Changesets action publishes GitHub Releases tagged @object-ui/PKG@VERSION (latest 2026-08-14, authored by github-actions[bot]); its own npm publish step was still commented out under 'Uncomment the following steps when ready to publish to npm' while the repo has published through Changesets for months, and its one-version-for-the-whole-repo model never matched the 39-package fixed group. Changeset uses empty frontmatter, this repo's first-class way to declare 'publishes nothing' (objectui has no skip-changeset label mechanism; none was created or applied). Two caveats stated rather than smoothed over: (a) git log attributes both workflows to one 2026-08-10 commit, which is a shallow-clone graft artifact and unusable as evidence, so creation dates come from the Actions API instead; (b) packages/vscode-extension/PUBLISHING.md tells a human to tag 'vscode-extension-v0.1.1', which DOES match the v* glob, but it is manual, automated nowhere, and has never been executed (zero such tags local and remote) — had it ever run, this workflow would have misfired, since ${GITHUB_REF#refs/tags/v} strips the leading v of 'vscode-' and would have titled the release 'Release scode-extension-v0.1.1'.", "tests": "All at fe329892d (final commit, clean tree; union re-run after the last commit so the sha matches the tree actually tested). Root-run `pnpm exec vitest run scripts/ --maxWorkers=2` -> 'Test Files 58 passed (58) / Tests 1549 passed (1549)', exit 0. The whole scripts/ suite was the right scope rather than one file: 20+ scripts read .github/workflows/, so a deletion's blast radius is the suite. Gates re-derived from the paths actually changed (objectui has no scripts/pm/dispatch-gates.mjs), all exit 0: check-control-bytes 'OK (scanned 4483 tracked text file(s))'; check-doc-links 'Links are valid across 13 scan roots'; check-changeset-presence 'Compared the working tree with fd227eae1 (merge-base with origin/main): 3 file(s) changed, 0 of them under the src/ of a package the release covers, 1 changeset(s) added'; check-changeset-no-major 'No changeset declares a major bump'; check-doc-component-types '183 doc file(s) (.mdx + .md), 887 type literal(s) ... Every documented component type is registered' (run because it covers .md, not only .mdx). check-doc-snippet-types was reasoned about rather than run: it compiles against built dist/, and the diff removes no code fence at all, so that file's compilable-snippet set is byte-identical to main. REVERSE VERIFICATION of the doc pin, run from the committed state: re-introducing one unqualified 'release.yml' mention with the file still deleted went RED as predicted, 1 failed / 31 passed, 'AssertionError: ci-cd-pipeline.md documents release.yml, which is not in .github/workflows/'; restored via git checkout HEAD -- , confirmed byte-identical to the commit, re-run green 32/32. No rebuild applies to either leg and none was needed: this test reads the doc and the workflow dir from disk via fs.readFileSync, so there is no dist/ resolution a stale build could make vacuously green. CI status at report time: in_progress (mergeable_state 'unstable') — reported at draft-PR time per the standing clause; not waited on.", "open_questions": [], "out_of_scope_findings": [ "filed as #5408: README.md line 11 badges a 'CodeQL Security Scan' workflow that does not exist — no codeql.yml anywhere under .github/, and none of the 31 registered workflows carries that name or path; filed unassigned and unlabeled for triage, noting the fix forks on whether CodeQL 'default setup' is enabled in repo settings (which runs with no committed workflow file and cannot be settled from inside the checkout)", "filed as #5409 (label: finding, ci/cd): changelog.yml is also at 0 runs, but for a different reason than #5405 and so with a different fix — it listens on release:published, and every release here is published by github-actions[bot] via GITHUB_TOKEN, which by design starts no further workflow runs; the root CHANGELOG.md has therefore never been auto-updated. Left for a maintainer because the choice between deleting it, re-triggering it from the release path, or documenting it as dispatch-only is a judgement call, not a mechanical deletion" ] }
Generated by Claude Code
Generated by Claude Code
os-support-ai commented
on Aug 20, 2026 CollaboratorAuthorMore actionsos-dev-report
(Supersedes the previous comment, which carried this same JSON behind an HTML-comment marker. Read-back confirmed the sanitizer stripped that marker at write time, leaving the report invisible to a marker scan. Marker restored here as literal text; the JSON below is unchanged.)
{ "issue": 5405, "status": "done", "branch": "claude/issue-5405-delete-dead-release-workflow", "pr": "https://github.com/objectstack-ai/objectui/pull/5407", "premise_still_valid": true, "summary": "All three verifications hold, independently re-run with counter-probes, so .github/workflows/release.yml is deleted along with the two places on content/docs/guide/ci-cd-pipeline.md that documented it as a release path (the inventory row and the '### Tag Release' section). (1) 0 runs: total_count 0 addressed both by filename and by workflow id 223155593; counter-probe changeset-release.yml returns 3902 through the identical call; a bogus workflow name returns HTTP 404 rather than 0, so a zero is not the not-found signal; and two retention probes (stale.yml at 216 runs since its 2026-01-15 creation, shadcn-check.yml's first page still reaching 2026-02-09) show run records are not aged out, so the zero spans the repo's whole life rather than a window. (2) Nothing pushes v* tags: 2896 tags on the remote, zero beginning with 'v' case-insensitively, checked locally after fetch --tags and again remote-side via ls-remote, with a glob counter-probe ('@object-ui/app-shell@11*' returns 5 local / 10 remote refs) proving the filter resolves; all tags are Changesets per-package tags across 44 namespaces, and grepping workflows, scripts/ and every package.json for git tag, --tags, --follow-tags, refs/tags and release CLIs finds no tag-creating step outside the Changesets action. (3) Nothing references it: repo-wide grep yields exactly two unqualified mentions, both in that one doc; no badge, no workflow_run listener anywhere, no script reference, and a push:tags trigger structurally cannot produce a required PR context. The fork resolves to OBSOLETE, not intended-but-broken: GitHub registered the file and reports it state:active so it would fire on a v* tag, and the job it would do ('Create GitHub Release') is already done by changeset-release.yml, whose Changesets action publishes GitHub Releases tagged @object-ui/PKG@VERSION (latest 2026-08-14, authored by github-actions[bot]); its own npm publish step was still commented out under 'Uncomment the following steps when ready to publish to npm' while the repo has published through Changesets for months, and its one-version-for-the-whole-repo model never matched the 39-package fixed group. Changeset uses empty frontmatter, this repo's first-class way to declare 'publishes nothing' (objectui has no skip-changeset label mechanism; none was created or applied). Two caveats stated rather than smoothed over: (a) git log attributes both workflows to one 2026-08-10 commit, which is a shallow-clone graft artifact and unusable as evidence, so creation dates come from the Actions API instead; (b) packages/vscode-extension/PUBLISHING.md tells a human to tag 'vscode-extension-v0.1.1', which DOES match the v* glob, but it is manual, automated nowhere, and has never been executed (zero such tags local and remote) — had it ever run, this workflow would have misfired, since ${GITHUB_REF#refs/tags/v} strips the leading v of 'vscode-' and would have titled the release 'Release scode-extension-v0.1.1'.", "tests": "All at fe329892d (final commit, clean tree; union re-run after the last commit so the sha matches the tree actually tested). Root-run `pnpm exec vitest run scripts/ --maxWorkers=2` gives 'Test Files 58 passed (58) / Tests 1549 passed (1549)', exit 0. The whole scripts/ suite was the right scope rather than one file: 20+ scripts read .github/workflows/, so a deletion's blast radius is the suite. Gates re-derived from the paths actually changed (objectui has no scripts/pm/dispatch-gates.mjs), all exit 0: check-control-bytes 'OK (scanned 4483 tracked text file(s))'; check-doc-links 'Links are valid across 13 scan roots'; check-changeset-presence 'Compared the working tree with fd227eae1 (merge-base with origin/main): 3 file(s) changed, 0 of them under the src/ of a package the release covers, 1 changeset(s) added'; check-changeset-no-major 'No changeset declares a major bump'; check-doc-component-types '183 doc file(s) (.mdx + .md), 887 type literal(s) ... Every documented component type is registered' (run because it covers .md, not only .mdx). check-doc-snippet-types was reasoned about rather than run: it compiles against built dist/, and the diff removes no code fence at all, so that file's compilable-snippet set is byte-identical to main. REVERSE VERIFICATION of the doc pin, run from the committed state: re-introducing one unqualified 'release.yml' mention with the file still deleted went RED as predicted, 1 failed / 31 passed, 'AssertionError: ci-cd-pipeline.md documents release.yml, which is not in .github/workflows/'; restored via git checkout HEAD, confirmed byte-identical to the commit, re-run green 32/32. No rebuild applies to either leg and none was needed: this test reads the doc and the workflow dir from disk via fs.readFileSync, so there is no dist/ resolution a stale build could make vacuously green. CI status at report time: in_progress (mergeable_state 'unstable') — reported at draft-PR time per the standing clause; not waited on.", "open_questions": [], "out_of_scope_findings": [ "filed as #5408: README.md line 11 badges a 'CodeQL Security Scan' workflow that does not exist — no codeql.yml anywhere under .github/, and none of the 31 registered workflows carries that name or path; filed unassigned and unlabeled for triage, noting the fix forks on whether CodeQL 'default setup' is enabled in repo settings (which runs with no committed workflow file and cannot be settled from inside the checkout)", "filed as #5409 (label: finding, ci/cd): changelog.yml is also at 0 runs, but for a different reason than #5405 and so with a different fix — it listens on release:published, and every release here is published by github-actions[bot] via GITHUB_TOKEN, which by design starts no further workflow runs; the root CHANGELOG.md has therefore never been auto-updated. Left for a maintainer because the choice between deleting it, re-triggering it from the release path, or documenting it as dispatch-only is a judgement call, not a mechanical deletion" ] }
Generated by Claude Code
Generated by Claude Code
os-support-ai commented
on Aug 20, 2026 CollaboratorAuthorMore actionsACCEPT — PR #5407 enqueued
repo:objectuiexecution seat, sessionsession_01RV6yuVCxymHYE16PL9vQkE. Marked ready, then auto-merge (SQUASH) — that order, since auto-merge does not survive a draft conversion.Gates
All 20 check runs completed: 18
success, 2skipped(Test (coverage),dependabot— conditional jobs that did not apply). Shards, from their own timestamps: 1/4 8m02s · 2/4 10m00s · 3/4 8m56s · 4/4 9m16s. Type Check 6m04s, Lint 4m42s.Surface, verified by the PM
git diff --name-status origin/main...<pr>returns exactly three paths —D .github/workflows/release.yml,M content/docs/guide/ci-cd-pipeline.md,A .changeset/….⛔ The serial constraint held:
.github/workflows/ci.ymland.github/workflows/changeset-release.ymlare both untouched. Those belong to #5403 and #5404, stillpm:blocked, so nothing was editing them concurrently — a collision on the release path is the one thing this card could have caused and did not.The verification is why this card took as long as it did, and it was worth it
The deletion is one
git rm. Establishing the file was dead is the deliverable, and the dev's method exceeded what the dispatch asked for:- The bogus-workflow-name probe turns the zero into a reading. An unknown workflow name returns HTTP 404, not
0— so0cannot also be the "not found" signal. The dispatch only asked for a known-present counter-probe; this closes a hole that one would have left open. - Retention probes, which the dispatch did not think to ask for: a zero would be worthless if Actions aged run records out.
stale.ymlshows 216 runs since its 2026-01-15 creation andshadcn-check.yml's first page still reaches 2026-02-09, so records span the repo's life. The zero means never, not "not lately". - Tags checked both locally and remote-side (
git ls-remote), so the answer does not depend on local ref state, with a glob counter-probe proving the filter resolves.
The edge the dev surfaced rather than smoothed over
packages/vscode-extension/PUBLISHING.mdinstructs a human to tagvscode-extension-v0.1.1, and that name does match thev*trigger — the glob anchors on the leadingvof "vscode". I verified this independently rather than taking it on trust:fnmatch('vscode-extension-v0.1.1', 'v*')isTrue.It has never been executed (zero such tags, local and remote), and had it been, this workflow would have misfired:
${GITHUB_REF#refs/tags/v}strips that leadingv, producing a release titledRelease scode-extension-v0.1.1and a build of the whole monorepo. So the deletion removes a latent footgun, not merely dead weight — a stronger argument than the card made.The fork resolved with evidence, in the right direction
"Never ran because obsolete" and "never ran because misconfigured" have opposite fixes. The evidence points to obsolete: GitHub reports the workflow
state: active(so it would fire), the job it would do is already performed by the Changesets action onchangeset-release.yml(GitHub Releases tagged@object-ui/PKG@VERSION, most recent 2026-08-14), its npm-publish step is still commented out under "Uncomment … when ready to publish to npm" while this repo has published through Changesets for months, and its one-version-for-the-whole-repo model never matched a 39-package fixed group.⚠️ Also recorded:git logattributes both workflows to a single 2026-08-10 commit — a shallow-clone graft artifact, not real history, and correctly discarded as evidence in favour of the Actions API creation dates. Noticing that an instrument is lying and swapping instruments is the behaviour this lane wants.Follow-ups filed, not folded in
#5408 (README badges a
CodeQL Security Scanworkflow that does not exist — with the fix forking on whether CodeQL "default setup" is enabled in repo settings, unknowable from inside a checkout) and #5409 (changelog.ymlis also at 0 runs, but for a different reason —release: publishednever fires because releases are published byGITHUB_TOKEN— so it needs a judgement call, not a deletion). Both filed unassigned with no choice made. ⛔ Correctly kept out of this PR.Card closes on merge via
Fixes #5405.
Generated by Claude Code
- The bogus-workflow-name probe turns the zero into a reading. An unknown workflow name returns HTTP 404, not
- added a commit that references this issue
on Aug 23, 2026
Ruled by the maintainer on 2026-08-20 (#5393, verbatim 「接受你的所有建议,现在开始处理。」). Item 4 of 5. Independent of the others — touches only its own file.
Measured
The workflow named "Release" (
.github/workflows/release.yml, id223155593) hastotal_count: 0workflow runs. Ever.It triggers on
push: tags: ['v*'], and nothing in this repository pushes such tags — releases go throughchangeset-release.yml(Changeset Release, id223783348, 3901 runs), which publishes frommainvia the changesets action.Counter-probe (a zero is not a reading): the identical query through the identical method returns 3901 for
Changeset Releaseand 8442 forCI. The method resolves; the zero is real.Why it is worth deleting rather than leaving
A dead workflow is not free. It reads as a live release path to anyone — human or agent — trying to understand how this repo ships, and this issue's parent (#5393) was opened with "especially release", where the first thing to establish was that "release" means
changeset-release.ymland not the file namedrelease.yml. It also duplicates the publish surface, so a future edit could plausibly land in the file that never runs.What to verify before deleting
Deleting is trivial; establishing that it is dead is the actual work. Do not take this card's word for any of it:
total_count: 0yourself, with your own counter-probe.v*tags — check the repository's tags for anyv*matching the trigger, and grep the repo (workflows,scripts/,package.json) for anything that creates or pushes a tag.v*tag does exist, this workflow was merely never triggered since some point, which is a different fact — stop and report instead of deleting.AGENTS.md, no badge, no other workflow'sworkflow_run. Ifcontent/docs/**describes it as the release path, that doc is wrong and needs the same PR (⛔ but notcontent/docs/releases/**, which is off-limits in a code PR).If all three hold, delete the file and say so in the changeset.
⛔ Constraints
release.ymland any doc that describes it. ⛔ Do not modifychangeset-release.yml— that ischangeset-release.yml: drop the duplicatepnpm test, and stop concurrency discarding release runs (95 of 200 never executed) #5404, in flight separately, and a collision there is a merge conflict on the release path.majorin the changeset.Evidence: #5395, #5393.