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
pm(scripts): retired lane aliases — mark domain:rest retired in ensure-pm-labels.sh, and have the relay rewrite domain:engine / services / cli / rest to domain:server at write time #30827
Filing gate: carrying a maintainer ruling into tooling. The maintainer answered 「车道的问题同意」 in the triage session on 2026-11-06, to triage's two proposals below. ⛔ Not a claim.
Why
The retired lane labels stay as objects by rule (.claude/skills/pm-dispatch/SKILL.md L169: 「退役 domain:* 只退流通,对象保留」), and GitHub's add-labels call silently creates a label that does not exist. So deleting them would neither keep the archive nor stop misuse.
scripts/pm/ensure-pm-labels.sh: add domain:rest to the retired block beside L539–541, with the same description shape: "Retired …, alias of domain:server (rest surface); …".
The write relay (scripts/pm/issue-create.mjs and fleet-writelabels_add): when a label in the request is a retired lane alias (domain:engine, domain:services, domain:cli, domain:rest), write domain:server in its place and say so on the read-back line, for example label domain:engine → domain:server (retired alias).
⛔ It rewrites and never refuses: under the standing rule 「新增门禁默认否」 this is not a new gate, and a write is never blocked on it.
One alias table, read by both doors, from the place the skill already names the aliases.
A self-test pins both: the rewrite, and that a live domain:* label passes untouched.
Reader: domain:skills (non-gate scripts/pm/**). The rewrite touches no merge gate.
Claim: PM loop round 1 · 2026-11-06T05:37Z
Session: session_01L9qibz5RLVEYDFco93jZ7u
Account: os-tesla (the card's assignee)
Branch: claude/project-thread-kupfnh (the card thread's designated branch; dev session session_01L9qibvJcUgxPPZNDodAhy1)
Worktree: objectstack-issue-30827
Domain: domain:skills
Seat: domain:skills#2
File surface: scripts/pm/ensure-pm-labels.sh (retired block), scripts/pm/issue-create.mjs, scripts/pm/fleet-write/{ops,validate,execute}.mjs as needed with their self-tests, at most one shared alias module under scripts/pm/. ⛔ .claude/skills/** text, ⛔ any new gate or workflow (stop on breach)
Container & model: S, mode:thread, model: TIER_DEFAULT (dispatch-gates --tier: no path-derived mandate), effort: high (p2)
Clause-②: no
Metadata-protocol: none
Responsibility: n/a — not a defect card (a maintainer ruling carried into tooling: 「车道的问题同意」, 2026-11-06, filed by triage#1)
Thread-read: none
Premise: holds: domain:rest is absent from the retired block of ensure-pm-labels.sh on origin/mainc17719dd; dev re-reads both write doors before editing
Serial constraints: seat 1 #30114 adds scripts/pm/fleet-write/** test rows; keep test edits additive, the later lander merges origin/main.
Not governed (check-governed-merges --test: 0 of the planned paths hit the register): ordinary queue landing after the seat's review.
File surface, as the dev measured it on origin/main before editing: scripts/pm/ensure-pm-labels.sh (the domain:rest retired row), scripts/pm/check-half-states.mjs (one LANE_LABEL_ALIASES row and its pin; that table already exists and both write doors import it, so no new module), scripts/pm/fleet-write/dispatch.mjs (rewrite for labels_add / issue_create / pr_create labels; labels_remove stays literal), scripts/pm/issue-create.mjs (rewrite in its plan step), scripts/pm/label-write.mjs (--add rewritten at parse, so its read-back still matches its target), each with its self-test cases. ⛔ fleet-write/{ops,validate,execute}.mjs, ⛔ .claude/skills/** text (stop on breach).
Governed: no (check-governed-merges --test on these five paths: 0 hit the register).
Residue, not in this card: .claude/skills/pm-dispatch/SKILL.md names three retired aliases, not four; the seat routes it.
{
"issue": 30827,
"status": "done",
"branch": "claude/project-thread-kupfnh",
"pr": "https://github.com/objectstack-ai/objectstack/pull/30841",
"session": "session_01L9qibvJcUgxPPZNDodAhy1",
"premise_still_valid": true,
"summary": "A retired lane alias (domain:engine / services / cli / rest) is written as domain:server at the three label doors: the fleet-write/dispatch.mjs CLI (labels_add, issue_create, pr_create; labels_remove left literal), issue-create.mjs planFrom (both transports), and label-write.mjs parseOptions (before step 2's target, so step 4's read-back stays clean). Each door prints `label domain:engine → domain:server (retired alias)`. It rewrites and never refuses. The one alias table is the existing LANE_LABEL_ALIASES in check-half-states.mjs, which gains a domain:rest row; ensure-pm-labels.sh gains the domain:rest retired row. The rewrite deliberately sits at the doors, not in packRequest, because label-write's read-back diffs against its own target. Card assignee and PR assignee/reviewer were not written (the frame forbids it; the harness's assignee/reviewer step was skipped).",
"tests": "Self-tests on head 95a02ba0, each exit 0: fleet-write/dispatch 331 cases / 28 batteries (new battery 13 cases, including a CLI dry run whose payload carries domain:server plus the stderr line); issue-create 64 / 9 (new battery 8, direct + relay); label-write 144 / 12 (new battery 8, direct + relay + triage relabel control); check-half-states 5253 (domain:server lane aliases 26/22, domain:rest case added); fleet-write/validate 337 / 17 and execute 276 / 23 re-run after merging origin/main. No ablation: script and tooling changes only (os-dev rule).",
"gates": "dispatch-gates --commands derived 57 commands; all 57 exit 0 on 95a02ba0 and earlier on e38a555d, with an identical derivation; --ran reconciliation: 57 run, 0 NOT-MEASURED. List: /mnt/project-files/skills-seat-2/r2026-11-06/out/30827-gates-ran-95a02ba0.list. Also check-label-desc-cap exit 0, bash -n exit 0, eslint on the four .mjs exit 0, check-governed-merges --test: 0 of 5 governed, size 222. PR CI check-runs: in_progress at report time.",
"dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
"mcp_calls": "4 — GitHub MCP reads only: issue_read x3 (30827 get, get_comments x2), pull_request_read get x1 (30841); plus subscribe_pr_activity on #30841 (harness, not a GitHub write). 0 GitHub write tools.",
"api_writes": "2 relay writes — fleet-write pr_create (run 42173483007, PR #30841, body read back identical 10805 bytes, label skip-changeset); this os-dev-report comment via post-stamped.mjs. Plus git push to the thread branch (not REST).",
"open_questions": [],
"security_findings": "none",
"out_of_scope_findings": [
"carrier: domain:skills#2 seat · the pm-dispatch SKILL.md retired-lane line (「…`domain:engine`/`domain:services`/`domain:cli` 读作 `domain:server`」) names three aliases while LANE_LABEL_ALIASES now holds four; .claude/skills text, left untouched per the order · noted, not filed",
"carrier: none · the rewrite is sender-side: a stale checkout or a raw repository_dispatch still writes the literal alias; execute.mjs is unchanged by design (no gate) · noted in Acceptance notes, not filed"
]
}
Landed · 2026-11-06T14:37Z · PR #30841 merged as 9e7fbd38 through the merge queue (ACCEPT 6678810629; not governed). Claim 6677853958 is discharged; pm:dispatched removed. Branch claude/project-thread-kupfnh is retired.
Residue routed by the seat, not this card: .claude/skills/pm-dispatch/SKILL.md names three retired aliases, not four.
Activity
objectstack-fleet commentedon Nov 6, 2026
domain:skills#2 · os-tesla · session_01L9qibz5RLVEYDFco93jZ7u
Claim: PM loop round 1 · 2026-11-06T05:37Z
Session:
session_01L9qibz5RLVEYDFco93jZ7uAccount:
os-tesla(the card's assignee)Branch:
claude/project-thread-kupfnh(the card thread's designated branch; dev sessionsession_01L9qibvJcUgxPPZNDodAhy1)Worktree:
objectstack-issue-30827Domain:
domain:skillsSeat:
domain:skills#2File surface:
scripts/pm/ensure-pm-labels.sh(retired block),scripts/pm/issue-create.mjs,scripts/pm/fleet-write/{ops,validate,execute}.mjsas needed with their self-tests, at most one shared alias module underscripts/pm/. ⛔.claude/skills/**text, ⛔ any new gate or workflow (stop on breach)Container & model:
S,mode:thread,model: TIER_DEFAULT(dispatch-gates --tier: no path-derived mandate),effort: high(p2)Clause-②: no
Metadata-protocol: none
Responsibility:
n/a — not a defect card(a maintainer ruling carried into tooling: 「车道的问题同意」, 2026-11-06, filed by triage#1)Thread-read: none
Premise: holds:
domain:restis absent from the retired block ofensure-pm-labels.shonorigin/mainc17719dd; dev re-reads both write doors before editingSerial constraints: seat 1 #30114 adds
scripts/pm/fleet-write/**test rows; keep test edits additive, the later lander mergesorigin/main.Not governed (
check-governed-merges --test: 0 of the planned paths hit the register): ordinary queue landing after the seat's review.Order:
/mnt/project-files/skills-seat-2/r2026-11-06/dispatch-30827.md(frameFRAME.mdbeside it).objectstack-fleet commentedon Nov 6, 2026
domain:skills#2 · os-tesla · session_01L9qibz5RLVEYDFco93jZ7u
Claim amendment · 2026-11-06T05:42Z · amends claim 6677853958 (same seat, same branch
claude/project-thread-kupfnh)File surface, as the dev measured it on
origin/mainbefore editing:scripts/pm/ensure-pm-labels.sh(thedomain:restretired row),scripts/pm/check-half-states.mjs(oneLANE_LABEL_ALIASESrow and its pin; that table already exists and both write doors import it, so no new module),scripts/pm/fleet-write/dispatch.mjs(rewrite forlabels_add/issue_create/pr_createlabels;labels_removestays literal),scripts/pm/issue-create.mjs(rewrite in its plan step),scripts/pm/label-write.mjs(--addrewritten at parse, so its read-back still matches its target), each with its self-test cases. ⛔fleet-write/{ops,validate,execute}.mjs, ⛔.claude/skills/**text (stop on breach).Governed: no (
check-governed-merges --teston these five paths: 0 hit the register).Residue, not in this card:
.claude/skills/pm-dispatch/SKILL.mdnames three retired aliases, not four; the seat routes it.objectstack-fleet commentedon Nov 6, 2026
domain:skills#2 · os-tesla · session_01L9qibvJcUgxPPZNDodAhy1
os-dev-report
{ "issue": 30827, "status": "done", "branch": "claude/project-thread-kupfnh", "pr": "https://github.com/objectstack-ai/objectstack/pull/30841", "session": "session_01L9qibvJcUgxPPZNDodAhy1", "premise_still_valid": true, "summary": "A retired lane alias (domain:engine / services / cli / rest) is written as domain:server at the three label doors: the fleet-write/dispatch.mjs CLI (labels_add, issue_create, pr_create; labels_remove left literal), issue-create.mjs planFrom (both transports), and label-write.mjs parseOptions (before step 2's target, so step 4's read-back stays clean). Each door prints `label domain:engine → domain:server (retired alias)`. It rewrites and never refuses. The one alias table is the existing LANE_LABEL_ALIASES in check-half-states.mjs, which gains a domain:rest row; ensure-pm-labels.sh gains the domain:rest retired row. The rewrite deliberately sits at the doors, not in packRequest, because label-write's read-back diffs against its own target. Card assignee and PR assignee/reviewer were not written (the frame forbids it; the harness's assignee/reviewer step was skipped).", "tests": "Self-tests on head 95a02ba0, each exit 0: fleet-write/dispatch 331 cases / 28 batteries (new battery 13 cases, including a CLI dry run whose payload carries domain:server plus the stderr line); issue-create 64 / 9 (new battery 8, direct + relay); label-write 144 / 12 (new battery 8, direct + relay + triage relabel control); check-half-states 5253 (domain:server lane aliases 26/22, domain:rest case added); fleet-write/validate 337 / 17 and execute 276 / 23 re-run after merging origin/main. No ablation: script and tooling changes only (os-dev rule).", "gates": "dispatch-gates --commands derived 57 commands; all 57 exit 0 on 95a02ba0 and earlier on e38a555d, with an identical derivation; --ran reconciliation: 57 run, 0 NOT-MEASURED. List: /mnt/project-files/skills-seat-2/r2026-11-06/out/30827-gates-ran-95a02ba0.list. Also check-label-desc-cap exit 0, bash -n exit 0, eslint on the four .mjs exit 0, check-governed-merges --test: 0 of 5 governed, size 222. PR CI check-runs: in_progress at report time.", "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm", "mcp_calls": "4 — GitHub MCP reads only: issue_read x3 (30827 get, get_comments x2), pull_request_read get x1 (30841); plus subscribe_pr_activity on #30841 (harness, not a GitHub write). 0 GitHub write tools.", "api_writes": "2 relay writes — fleet-write pr_create (run 42173483007, PR #30841, body read back identical 10805 bytes, label skip-changeset); this os-dev-report comment via post-stamped.mjs. Plus git push to the thread branch (not REST).", "open_questions": [], "security_findings": "none", "out_of_scope_findings": [ "carrier: domain:skills#2 seat · the pm-dispatch SKILL.md retired-lane line (「…`domain:engine`/`domain:services`/`domain:cli` 读作 `domain:server`」) names three aliases while LANE_LABEL_ALIASES now holds four; .claude/skills text, left untouched per the order · noted, not filed", "carrier: none · the rewrite is sender-side: a stale checkout or a raw repository_dispatch still writes the literal alias; execute.mjs is unchanged by design (no gate) · noted in Acceptance notes, not filed" ] }objectstack-fleet commentedon Nov 6, 2026
domain:skills#2 · os-tesla · session_01L9qibz5RLVEYDFco93jZ7u
Landed · 2026-11-06T14:37Z · PR #30841 merged as
9e7fbd38through the merge queue (ACCEPT 6678810629; not governed). Claim 6677853958 is discharged;pm:dispatchedremoved. Branchclaude/project-thread-kupfnhis retired.Residue routed by the seat, not this card:
.claude/skills/pm-dispatch/SKILL.mdnames three retired aliases, not four.