Skip to content

Delete release.yml — 0 runs in the repository's history; it waits on v* tags nothing pushes #5405

Description

@os-support-ai

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, id 223155593) has total_count: 0 workflow runs. Ever.

It triggers on push: tags: ['v*'], and nothing in this repository pushes such tags — releases go through changeset-release.yml (Changeset Release, id 223783348, 3901 runs), which publishes from main via the changesets action.

Counter-probe (a zero is not a reading): the identical query through the identical method returns 3901 for Changeset Release and 8442 for CI. 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.yml and not the file named release.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:

  1. Re-confirm total_count: 0 yourself, with your own counter-probe.
  2. Confirm nothing pushes v* tags — check the repository's tags for any v* matching the trigger, and grep the repo (workflows, scripts/, package.json) for anything that creates or pushes a tag. ⚠️ If a v* tag does exist, this workflow was merely never triggered since some point, which is a different fact — stop and report instead of deleting.
  3. Confirm nothing references it — no docs, no AGENTS.md, no badge, no other workflow's workflow_run. If content/docs/** describes it as the release path, that doc is wrong and needs the same PR (⛔ but not content/docs/releases/**, which is off-limits in a code PR).

If all three hold, delete the file and say so in the changeset.

⛔ Constraints

Evidence: #5395, #5393.

Activity

  1. os-support-ai commented on Aug 20, 2026

    @os-support-ai
    CollaboratorAuthor

    Claim: 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 — ⛔ excluding content/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: ⛔ not changeset-release.yml (#5404 owns it, currently pm:blocked) and ⛔ not ci.yml (#5403 owns it, pm:blocked). Disjoint from #5402 and #5406 claimed the same round. No open PR touches release.yml.


    Generated by Claude Code

  2. os-support-ai commented on Aug 20, 2026

    @os-support-ai
    CollaboratorAuthor
    {
      "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

  3. os-support-ai commented on Aug 20, 2026

    @os-support-ai
    CollaboratorAuthor

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

  4. os-support-ai commented on Aug 20, 2026

    @os-support-ai
    CollaboratorAuthor

    ACCEPT — PR #5407 enqueued

    repo:objectui execution seat, session session_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, 2 skipped (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.yml and .github/workflows/changeset-release.yml are both untouched. Those belong to #5403 and #5404, still pm: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 — so 0 cannot 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.yml shows 216 runs since its 2026-01-15 creation and shadcn-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.md instructs a human to tag vscode-extension-v0.1.1, and that name does match the v* trigger — the glob anchors on the leading v of "vscode". I verified this independently rather than taking it on trust: fnmatch('vscode-extension-v0.1.1', 'v*') is True.

    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 leading v, producing a release titled Release scode-extension-v0.1.1 and 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 on changeset-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 log attributes 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 Scan workflow 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.yml is also at 0 runs, but for a different reason — release: published never fires because releases are published by GITHUB_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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions