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
Seat register for the repo:hotclm execution seat. This body is the authority; the title and
assignee are derived views. Only the sitting PM edits it. Comments are audit only and carry no state.
Charter: objectstack-ai/objectstack → .claude/skills/pm-dispatch/references/lanes/hotcrm.md
(⚠️ named for the sibling repo — see 说明). Repo-binding rules: this repo's AGENTS.md, which beats
the skill where they differ.
1 · Current PM
GitHub account
zhuangjianguo (get_me, 2026-09-09T13:50Z)
Session
session_01R3n3GGzobdegM4HUzah1iR
Seated at
2026-09-09T13:54Z
Round marker
R1 closed 14:5xZ · R2 closed 17:1xZ · charter shas at seating: SKILL.md + core-rules.md @ 06d38fb, lanes/hotcrm.md @ 3c27a43
Devs in flight
0
Seating readings are in this post's first revision (first seating, contested-then-cleared: prior seat hotlong / session_01KcrVDXSptwDukFsHPHPR1V, ≈35 h idle, zero in flight).
⚠️Account change across seats. Every closed card and merged PR before R1 is assigned to hotlong. Cross-account assignees — ⛔ not to be touched.
2 · Ledger
🎉 M3 is complete. Cards 09, 10 and 11 all delivered; M3's acceptance —
「演示数据下无空图;到期、逾期提醒在收件箱可见」 — has a browser behind both halves for the first
time, because until R2 the reminder layer did not exist. M1 · M2 · M3 done; M4 (cards 12 · 13 · 14)
not started.
Round
Landed
R1
#35@objectstack/* 17.3.0 → 17.4.0 (maintainer directive) + #34 as its declared rider → 5d5a254
R2
#39card 09 — the whole reminder layer, closing #39/#6/#10/#14 → a7b7db5. src/flows/ went 3 → 11.
R2 also: the maintainer ruled decision batch 1 (#6 A · #10 1A+2A · #14 A · #31 1C+2B · #11 Q1 A),
verbatim 「第 1 批 平台的问题去平台修,业务的问题按照你的意见。」 Two platform-side cards were filed
under that ruling; two more came out of the 17.4 bump; two more out of card 09.
⚠️A dev died to a container restart mid-card-09. Its worktree survived on disk with 539 lines
uncommitted and nothing pushed. Rescued as WIP bebd0f7 (INCOMPLETE AND UNREVIEWED), then
re-dispatched onto the same claim with instructions to audit rather than trust it. That audit found three defects that passed every gate — termination_reason locked unwritable by a group-derived
FLS rule (making active → terminated unreachable by anyone), the F14 freeze naming audit columns this
object does not carry, and start_renewal with no button. All three needed the app run to find.
⇒ Two standing lessons for this lane: the worktree survives a container restart, so salvage before
re-dispatching; and push early — a dead run's unpushed work is one rm -rf from gone.
Filed to objectstack-ai/objectstack this shift: #17175 · #17176 · #17177 (from the 17.4 bump) ·
#17189 (the everyone-anchor capability gap, under the batch-1 ruling). Downstream-consumer note
recorded on objectstack#16737.
State at R2 close (2026-09-09T17:1xZ) — list_issues, returned 10 == totalCount 10:
⛔ #44 is deliberately not dispatched. It is a one-word §06 F14 fix (「除 notes 外只读」 → 「除 summary 外只读」). One word does not earn an issue-branch-PR-CI-merge cycle — the lesson #34 taught this repo. Hold it as a declared rider for the next card that touches DESIGN.md, and name it in that dispatch order as a declared increment.
src/**
free
card 09 released it on merge
4 · Notes
Merge authority is delegated by AGENTS.md, not the skill (maintainer 2026-09-07:
「你自己派发自己合并」 / 「改策略,让循环真的无人值守」). Four conditions, all verified per PR before
merging. Overrides the generic ⛔ 永不合自己的 PR for this repo only. Covers merging, never
deciding. No merge queue here (ci.yml alone), so the direct squash AGENTS.md names is the path.
⛔ No changeset gate in this repo — no changeset-check.yml, no .changeset/, no @changesets
dep, no skip-changeset label. R1's dispatch order wrongly required one (imported from lanes/hotcrm.md, which describes hotcrm); the dev refused it and was right. Corrected on Upgrade the @objectstack/* dependencies from 17.3.0 to 17.4.0 #35.
⚠️ Two seat errors this shift, both recorded on the cards rather than quietly fixed: the
changeset criterion above, and R2's claim on Card 09 — F9 activation · F3/F4/F10–F14 scheduled jobs · F16 executed upload (M3) #39 declaring a file surface narrower than the card's
own scope (it omitted src/actions/, src/profiles/, src/pages/, all of which the rulings force).
Neither was charged to a dev.
The charter-naming trap is confirmed live, twice now.lanes/hotcrm.md is the only lane charter
and it describes a different product. Worth a skills-lane card.
No half-state patrol anchor (no half-state-patrol.yml); replaced by the manual half — before
any new dispatch, read every open card and check each pm:dispatched card's PR is merged or closed.
Label vocabulary incomplete vs ensure-pm-labels.sh: pm:seat did not exist (auto-created by
the issues API when applied); pm:awaiting-maintainer and skip-changeset still do not. Running
that script here is an open landing step.
Director seat: summoned 2026-09-09, parked below tier — served claude-opus-5 vs CONTRACT_REVIEW_TIERclaude-fable-5-1 (exact comparison). 免档整理 only; audit on objectstack#12708. ⛔ Nothing adjudicated by that seat; batch 1 was ruled by the maintainer directly.
Seat register for the
repo:hotclmexecution seat. This body is the authority; the title andassignee are derived views. Only the sitting PM edits it. Comments are audit only and carry no state.
Charter:⚠️ named for the sibling repo — see 说明). Repo-binding rules: this repo's
objectstack-ai/objectstack→.claude/skills/pm-dispatch/references/lanes/hotcrm.md(
AGENTS.md, which beatsthe skill where they differ.
1 · Current PM
zhuangjianguo(get_me, 2026-09-09T13:50Z)session_01R3n3GGzobdegM4HUzah1iRSKILL.md+core-rules.md@06d38fb,lanes/hotcrm.md@3c27a43Seating readings are in this post's first revision (first seating, contested-then-cleared: prior seat
hotlong/session_01KcrVDXSptwDukFsHPHPR1V, ≈35 h idle, zero in flight).hotlong. Cross-account assignees — ⛔ not to be touched.2 · Ledger
🎉 M3 is complete. Cards 09, 10 and 11 all delivered; M3's acceptance —
「演示数据下无空图;到期、逾期提醒在收件箱可见」 — has a browser behind both halves for the first
time, because until R2 the reminder layer did not exist. M1 · M2 · M3 done; M4 (cards 12 · 13 · 14)
not started.
@objectstack/*17.3.0 → 17.4.0 (maintainer directive) + #34 as its declared rider →5d5a254a7b7db5.src/flows/went 3 → 11.R2 also: the maintainer ruled decision batch 1 (#6 A · #10 1A+2A · #14 A · #31 1C+2B · #11 Q1 A),
verbatim 「第 1 批 平台的问题去平台修,业务的问题按照你的意见。」 Two platform-side cards were filed
under that ruling; two more came out of the 17.4 bump; two more out of card 09.
uncommitted and nothing pushed. Rescued as WIP
bebd0f7(INCOMPLETE AND UNREVIEWED), thenre-dispatched onto the same claim with instructions to audit rather than trust it. That audit found
three defects that passed every gate —
termination_reasonlocked unwritable by a group-derivedFLS rule (making
active → terminatedunreachable by anyone), the F14 freeze naming audit columns thisobject does not carry, and
start_renewalwith no button. All three needed the app run to find.⇒ Two standing lessons for this lane: the worktree survives a container restart, so salvage before
re-dispatching; and push early — a dead run's unpushed work is one
rm -rffrom gone.Filed to
objectstack-ai/objectstackthis shift: #17175 · #17176 · #17177 (from the 17.4 bump) ·#17189 (the
everyone-anchor capability gap, under the batch-1 ruling). Downstream-consumer noterecorded on
objectstack#16737.State at R2 close (2026-09-09T17:1xZ) —
list_issues, returned 10 ==totalCount10:pm:queuepm:dispatchedpm:blockedobjectstack#16737needs-user-decision3 · Hot-file serial queue
DESIGN.mdDESIGN.md, and name it in that dispatch order as a declared increment.src/**4 · Notes
AGENTS.md, not the skill (maintainer 2026-09-07:「你自己派发自己合并」 / 「改策略,让循环真的无人值守」). Four conditions, all verified per PR before
merging. Overrides the generic
⛔ 永不合自己的 PRfor this repo only. Covers merging, neverdeciding. No merge queue here (
ci.ymlalone), so the direct squashAGENTS.mdnames is the path.DESIGN.md§01–§04 ·AGENTS.md·CLAUDE.md·LICENSE·CHANGELOG.md·docs/design/**. PR Record four maintainer rulings in DESIGN.md §03, §06 and §09 #40 is on that path and is why it sits open.changeset-check.yml, no.changeset/, no@changesetsdep, no
skip-changesetlabel. R1's dispatch order wrongly required one (imported fromlanes/hotcrm.md, which describes hotcrm); the dev refused it and was right. Corrected on Upgrade the@objectstack/*dependencies from 17.3.0 to 17.4.0 #35.changeset criterion above, and R2's claim on Card 09 — F9 activation · F3/F4/F10–F14 scheduled jobs · F16 executed upload (M3) #39 declaring a file surface narrower than the card's
own scope (it omitted
src/actions/,src/profiles/,src/pages/, all of which the rulings force).Neither was charged to a dev.
lanes/hotcrm.mdis the only lane charterand it describes a different product. Worth a skills-lane card.
half-state-patrol.yml); replaced by the manual half — beforeany new dispatch, read every open card and check each
pm:dispatchedcard's PR is merged or closed.ensure-pm-labels.sh:pm:seatdid not exist (auto-created bythe issues API when applied);
pm:awaiting-maintainerandskip-changesetstill do not. Runningthat script here is an open landing step.
claude-opus-5vsCONTRACT_REVIEW_TIERclaude-fable-5-1(exact comparison). 免档整理 only; audit onobjectstack#12708. ⛔ Nothing adjudicated by that seat; batch 1 was ruled by the maintainer directly.DESIGN.md§04 makesclm_requesterevery employee's default, but a set that grantsclm_requester.accesscannot bind toeveryone#11 is in the box for its second question only (whichpermission sets hold the six action gates) — its first is ruled A. That second question declares
itself a security/permission boundary, which is a ⛔ manual floor: no self-adjudication channel
reaches it. [Decision]
pnpm demo开箱即用时没有任何账号能打开「我的合同」——要不要让脚本建账号,与 #11 第一问耦合 #28's options are already narrowed by [Decision]DESIGN.md§04 makesclm_requesterevery employee's default, but a set that grantsclm_requester.accesscannot bind toeveryone#11 Q1's ruling: option C is out.