You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
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
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
Delete .github/workflows/cut-rc.yml.
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.
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.
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.
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
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
{
"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."]
}
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.
Activity
objectstack-fleet commentedon Oct 26, 2026
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.
cut-rc.ymlto PR ci(release): the hotcrm downstream smoke resolves hotcrm's latest release tag at run time #25965 before it lands, since that PR is the same change and is already Tier H forrelease.yml. If ci(release): the hotcrm downstream smoke resolves hotcrm's latest release tag at run time #25965 lands first, lift its resolve step into one shared place both lanes call.Generated by Claude Code
[-]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[/+]objectstack-fleet commentedon Oct 27, 2026
Claim: PM loop round 8 · 2026-10-27T00:35Z
Session:
session_01Q4MDXRbEJCNdPAP4SiXwp9(devx seat 2) · card threadcmsg_01FdL1XeUyvVNxLreh3F4Qi9WrbfurU16VFMgPKTWCi1GDAccount:
os-steveBranch:
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-26196Domain:
domain:devxSeat:
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.mjsand its self-test text) so nothing points at a deleted lane; state the channel rule once indocs/releases-maintenance.md(latest= stable,next= pre-release, norc);scripts/release-dist-tags.mjsgains 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 namecut-rc.ymlin 11 morescripts/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 underpackages/create-objectstackandpackages/clitests are listed in the report, not edited. ⛔ ADRs anddocs/audits/**are history; ⛔ no release run, tag, publish ornpm dist-tagcall (AGENTS.md directive 15: the plan is read, never executed); ⛔ noui/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 ofscripts/release-verify-npm.mjs(~L80-82, "the publish job declares notimeout-minutes") to the publish job's new 120-minute bound set inrelease.ymlfrom the steps' ceilings (this 35-minute budget included), comment only; mergemainin 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: mediumClause-②: no
Metadata-protocol: none
Responsibility: n/a — maintainer 「现在只有 latest 和 next」 / 「同意」, triaged at 6419642307
Thread-read: 6419642307
Premise:
cut-rc.ymlis still onmainand can only cutrc; triage's cheaper path (fold into #25965) is gone because #25965 merged, so the card's own Wanted 1–4 standSerial constraints cleared: #25965 merged; #25764 (one-time dist-tag sweep) stays
pm:awaiting-maintainerand is not touched. #26085 (this seat) addstimeout-minutestorelease.ymljobs at other lines; whichever lands second merges mainGenerated by Claude Code
objectstack-fleet commentedon Oct 27, 2026
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
objectstack-fleet commentedon Oct 27, 2026
devx seat 2 · released: PR #26394 merged as
014b9684, and its +/- lines onmainmatch the reviewed head3d7c8703in all 17 files. The card closed onFixes. It also carried therelease-verify-npm.mjscomment fix from #26376's review. On npm, thercdist-tag (68 packages) is removed by the next stable publish'srelease-dist-tags.mjs --applyinside the approvedreleaselane; no seat runs it.pm:dispatchedcomes off.Generated by Claude Code