Skip to content

ci(release): retire the rc channel — delete cut-rc.yml, state the two channels (latest, next), and have release-dist-tags remove the retired rc tag instead of moving it #26196

Closed

Description

@objectstack-fleet

Filing gate ③: a maintainer-directed task. The maintainer, in the triage seat thread on 2026-10-26: 「现在只有 latest 和 next」, then 「同意」 to retiring the rc lane. This replaces this card's first scope, which was to fix cut-rc.yml's pinned hotcrm smoke. Filed by the triage seat (session_01AavokzJ5DndAwitDXvKy4U, seat post #6015). ⛔ Not a claim.

Business reason: the release channels are now latest (stable) and next (pre-release) only. The Cut RC lane (.github/workflows/cut-rc.yml) cuts nothing else but X.Y.Z-rc.N. It refuses to run unless .changeset/pre.json is mode: pre, tag: rc (cut-rc.yml:138–141, :212–219), and it last ran on 2026-08-10 (a failure). The 18.x pre-releases (18.0.0-next.0 … next.5) went through release.yml. A lane that can only cut a channel that no longer exists misleads every reader, human or AI, into thinking rc is live. Meanwhile npm still serves rc: 17.0.0-rc.6 on all 73 packages (#25764).

Reader who acts: the domain:devx seat, one PR. Tier H (.github/workflows/**); it lands by the maintainer's hand.

Wanted

  1. Delete .github/workflows/cut-rc.yml.
  2. Reword the live references so nothing points at a deleted lane. The current ones (git grep -n cut-rc on main) are .github/workflows/lint.yml:1863, .github/workflows/release.yml:386,400,657 (comments only, which describe a surface release.yml keeps), docs/releases-maintenance.md (:50, :182, :193–201, :248), and scripts/check-changeset-no-major.mjs (:1942, :2241, :3771 and the matching self-test text). Every self-test those scripts carry stays green. ADRs and docs/audits/** are history and stay as written.
  3. State the channel rule once in docs/releases-maintenance.md: latest = stable, next = pre-release (cut through release.yml in pre mode, tag next). No rc.
  4. scripts/release-dist-tags.mjs: today it moves every stale pre-release tag up to the stable version ("Moved rather than removed", its header). It gains a retired-tag list (rc) whose tags are removed (npm dist-tag rm), not moved. The plan output and --self-test cover both kinds, and next keeps moving as today. That makes release: one-time npm dist-tag sweep for the pre-release tags that 18.1.0 left stale (maintainer-run) #25764's one-time sweep and every later stable publish (release.yml's publish job runs this script) agree on two channels.

Acceptance

Supersedes this card's first scope (cut-rc's hotcrm pin). That pin leaves with the file.


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage: first grade — ci/cd · priority:p3 · domain:devx · area:devpath · pm:queue · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-26T15:14Z

    ⛔ Not a claim, ⛔ not a dispatch.


    Generated by Claude Code

  2. changed the title [-]ci(cut-rc): the hotcrm downstream smoke in the Cut RC lane resolves hotcrm's latest release at run time too (cut-rc.yml still pins v2.1.0)[/-] [+]ci(release): retire the rc channel — delete cut-rc.yml, state the two channels (latest, next), and have release-dist-tags remove the retired rc tag instead of moving it[/+] on Oct 26, 2026
  3. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 8 · 2026-10-27T00:35Z
    Session: session_01Q4MDXRbEJCNdPAP4SiXwp9 (devx seat 2) · card thread cmsg_01FdL1XeUyvVNxLreh3F4Qi9WrbfurU16VFMgPKTWCi1GD
    Account: os-steve
    Branch: claude/project-thread-pjabey (the harness-pinned branch of the card thread; it names no issue, so this claim is the identity record; amended on spawn)
    Worktree: objectstack-issue-26196
    Domain: domain:devx
    Seat: domain:devx#2 (seat post #20163)
    File surface: delete .github/workflows/cut-rc.yml; reword the live references (.github/workflows/lint.yml ~L1817, .github/workflows/release.yml ~L386/400/657 comments, docs/releases-maintenance.md, scripts/check-changeset-no-major.mjs and its self-test text) so nothing points at a deleted lane; state the channel rule once in docs/releases-maintenance.md (latest = stable, next = pre-release, no rc); scripts/release-dist-tags.mjs gains a retired-tag list (rc) that is REMOVED, not moved, covered by its plan output and --self-test. Amended at the thread's measurement: the comment and self-test description strings that name cut-rc.yml in 11 more scripts/ files (check-docs-image-tag.mjs, check-self-test-wired.mjs, check-skill-compatibility-version.mjs, docs-audit/README.md, pm/clause2-line.mjs, pm/dispatch-gates.self-test.mjs, pm/release-rehearsal-clone.mjs, release-spec-changes.sh, sync-release-index-currency.mjs, sync-template-versions.mjs; pm/check-half-states.mjs's card-title string is history and stays, listed in the PR) — wording only, no behaviour change; the 5 comments under packages/create-objectstack and packages/cli tests are listed in the report, not edited. ⛔ ADRs and docs/audits/** are history; ⛔ no release run, tag, publish or npm dist-tag call (AGENTS.md directive 15: the plan is read, never executed); ⛔ no ui/ path (stop on breach; explain in the report). ⛔ Tier H: draft until a GOVERNED_APPROVERS approval Amended again at seat review of PR #26376 (#26085): once #26376 has merged, also rewrite the header comment of scripts/release-verify-npm.mjs (~L80-82, "the publish job declares no timeout-minutes") to the publish job's new 120-minute bound set in release.yml from the steps' ceilings (this 35-minute budget included), comment only; merge main in first so the bound is on the branch.
    Container & model: M, mode:thread, model: default tier (TIER_DEFAULT, from dispatch-gates --tier: no path-derived mandate), effort: medium
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a — maintainer 「现在只有 latest 和 next」 / 「同意」, triaged at 6419642307
    Thread-read: 6419642307
    Premise: cut-rc.yml is still on main and can only cut rc; triage's cheaper path (fold into #25965) is gone because #25965 merged, so the card's own Wanted 1–4 stand
    Serial constraints cleared: #25965 merged; #25764 (one-time dist-tag sweep) stays pm:awaiting-maintainer and is not touched. #26085 (this seat) adds timeout-minutes to release.yml jobs at other lines; whichever lands second merges main


    Generated by Claude Code

  4. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 26196,
      "status": "done",
      "branch": "claude/project-thread-pjabey",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/26394",
      "session": "session_01ADHkmS6EcuQGiiD6cwnYUT",
      "premise_still_valid": true,
      "summary": "Draft PR #26394 (Tier H, left draft; waits on a GOVERNED_APPROVERS approval from os-zhuang or hotlong). Deletes .github/workflows/cut-rc.yml; states the channel rule once in docs/releases-maintenance.md (latest = stable, next = pre-release via release.yml in pre mode, no rc) and removes the rc snapshot-flow section; scripts/release-dist-tags.mjs gains RETIRED_TAGS = ['rc'], removed with npm dist-tag rm and never moved, plan output and a new self-test battery cover both kinds while next keeps moving; check-changeset-no-major's wiring pins over cut-rc.yml are replaced by pins over every workflow (only pr-automation.yml calls the script, and only from a pull_request-triggered workflow). Comment-only rewording in lint.yml, release.yml and the 11 scripts files the seat added to the claim, plus the release-verify-npm.mjs 120-minute comment from the seat's #26376 check (applied after #26376 merged). Premise verified on origin/main 6390fe52: cut-rc.yml present, only cuts rc.",
      "tests": "node scripts/release-dist-tags.mjs --self-test: exit 0, 54 cases across 7 batteries (new battery 7, 9 cases; roster floor 6 to 7). node scripts/check-changeset-no-major.mjs --self-test: exit 0, 456 assertions (wiring battery 22 at its floor: 4 removed, 4 added). node scripts/release-verify-npm.mjs --self-test: exit 0, 131 cases. Read-only plan against registry.npmjs.org: 111 packages, 73 next moves (18.0.0-next.5 to 18.1.0), 68 rc removals (17.0.0-rc.6), 0 skipped, 0 failures; never run with --apply. No ablation: scripts and workflows only.",
      "gates": "dispatch-gates --commands on 2b9dd3d0 (merge base 756220c4): 81 derived, all exit 0 (stdin /dev/null, exit captured before any pipe; dts-closure and dual-build-cjs-loads after turbo build under the verify lock, VERDICT command-exit 0); check-comment-mask-corpus first hit the loop's 300 s cap under build load (exit 124), re-run alone exit 0. --ran: 81 derived, 81 run, 0 NOT-MEASURED, 0 UNRUN (derived zero). Final head 3d7c8703 is a merge of origin/main abb90460 to clear a conflict in docs/releases-maintenance.md (main edited a line inside the rc section this PR deletes; resolved to the deletion, the channel section byte-identical to 2b9dd3d0). Same 81 families derived on 3d7c8703; scoped re-checks there all exit 0: check-changeset-no-major --self-test, release-dist-tags --self-test, release-verify-npm --self-test, check:doc-authoring, check:changeset-gate-self-tests, check:type-check-coverage, check:stall-guard-budget, check:stall-guard-headroom, check:declared-population-live, check:required-contexts, check-self-test-wired. check:type-check-debt on 3d7c8703: NOT MEASURED locally (400 s cap hit, exit 124; green on 2b9dd3d0); CI's TypeScript Type Check is the reading. CI check-runs: in_progress at report time.",
      "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
      "mcp_calls": "6 — issue_read x3 (get, get_comments x2), pull_request_read x3 (get #26313, #26376, #26394); no MCP write",
      "api_writes": "3 — git push (not REST); relay pr_create objectstack-ai/objectstack#26394 (draft, assignee os-steve, label skip-changeset, governed reviewers requested by the relay); this os-dev-report comment via post-stamped",
      "line_budget": "17 files, +235 / -1104 vs origin/main (cut-rc.yml -877); under the 3000-line threshold",
      "files_changed": [".github/workflows/cut-rc.yml (deleted)", ".github/workflows/lint.yml", ".github/workflows/release.yml", "docs/releases-maintenance.md", "scripts/check-changeset-no-major.mjs", "scripts/release-dist-tags.mjs", "scripts/release-verify-npm.mjs", "scripts/check-docs-image-tag.mjs", "scripts/check-self-test-wired.mjs", "scripts/check-skill-compatibility-version.mjs", "scripts/docs-audit/README.md", "scripts/pm/clause2-line.mjs", "scripts/pm/dispatch-gates.self-test.mjs", "scripts/pm/release-rehearsal-clone.mjs", "scripts/release-spec-changes.sh", "scripts/sync-release-index-currency.mjs", "scripts/sync-template-versions.mjs"],
      "deviations": ["File surface widened twice by the seat before the edits: 11 scripts files (comment and self-test description text only) and scripts/release-verify-npm.mjs (comment only, the seat's prepared commit from #26376's check).", "Two merges of origin/main: 756220c4 to carry #26376 for the release-verify-npm comment, abb90460 to clear a GitHub-reported conflict.", "PR body follows the new .github/PULL_REQUEST_TEMPLATE.md (from #26375) plus the 维护者速读 block; Human Minimum items 3, 8 and the Before Submitting line left unticked with the reason written beside each."],
      "open_questions": [],
      "out_of_scope_findings": ["carrier: none · noted, not filed — scripts/release-spec-changes.sh --generate has no workflow caller after cut-rc.yml is gone (release.yml uses --prepare/--verify/--attach); dormant mode, PR Acceptance notes.", "carrier: none · noted, not filed — cut-rc.yml mentions left in package test comments outside the acceptance grep: packages/cli/test/scaffold-exact-objectstack-pin.test.ts:12, packages/create-objectstack/src/runtime-image.test.ts:237, template-consistency.test.ts:799, template-version-stamps.test.ts:11,51,274,338,387.", "carrier: none · noted, not filed — scripts/pm/check-half-states.mjs:26115 keeps the recorded title of card #9828 (history).", "carrier: none · noted, not filed — the registry carries rc on 68 packages, not 73 as the card says; connector-imap, organizations, service-mailbox, service-print and skills carry next only."]
    }

    Generated by Claude Code

  5. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    devx seat 2 · released: PR #26394 merged as 014b9684, and its +/- lines on main match the reviewed head 3d7c8703 in all 17 files. The card closed on Fixes. It also carried the release-verify-npm.mjs comment fix from #26376's review. On npm, the rc dist-tag (68 packages) is removed by the next stable publish's release-dist-tags.mjs --apply inside the approved release lane; no seat runs it. pm:dispatched comes off.


    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

Labels

area:devpathThe road — create, dev, verify, publish/install, connect an agent, iterateci/cddomain:devxpriority:p2Medium: important, M3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions