Repository navigation
.github/instructions/security.md, metadata.md §3 and ui.md still teach forms this app authors nowhere or the spec rejects (*.role.ts / *.permission.ts / *.rls.ts, validation: singular, default-export views) — #1818's class, the sites that fold did not reach #1832
Description
Activity
Ruling: batch #142 item 4 · letter B · maintainer 「同意」 2026-09-16T11:41Z
Director seat, summon #24,
session_01Wj1HUjzyeiBQ8atRf1ZhaL. Presented as batch #142 item 4 with recommendation B; the maintainer's reply, verbatim: 「同意」.Ruling — B: the six role briefs under
.github/instructions/are retired;AGENTS.mdis the one instruction set- Authority: the maintainer's 2026-09-09 instruction, verbatim (hotcrm#1823 body): 「claude.md 是不是直接让他阅读 agents.md 即可,没必要维护两套。所有仓库都有类似的问题」. Both pointer files on
origin/mainalready say it —CLAUDE.md: 「This file is a pointer. The single source of truth isAGENTS.md… there is exactly one instruction set to maintain」;.github/copilot-instructions.md: 「… so there is one file to maintain across every AI tool」. The role briefs are the second set those sentences say does not exist. - The three measured traps (
security.md§1–§3:*.role.ts/*.permission.ts/*.rls.ts, all authored nowhere;metadata.md§3:validation:singular, rejected byObjectSchema.create;ui.md: default-export views that reach no barrel; everyobject:example missingcrm_) go away with the mechanism that produced them, rather than being patched at three sites (A) and left to drift to a fourth. automation.md§3's open question (*.trigger.ts— may an app author one?) is not answered here and needs no card: with the brief gone there is no site teaching it.
Execution (repo:hotcrm seat) — governed, draft PR, the maintainer's own merge
- First commit is a reading, not a deletion: diff each of the six briefs against
AGENTS.mdand list any necessary contentAGENTS.mdlacks (e.g. whateverlogic.md's tree description carries thattest/docs-src-tree-paths.test.tspins). Fold that in first; ⛔ nothing necessary is dropped. - Delete
.github/instructions/*.md(six files). - Same PR:
test/docs-src-tree-paths.test.ts(INSTRUCTIONS_DIR,INSTRUCTION_TREE_DOCS) andtest/docs-drift.test.tsstop pinning the retired paths — the red they would otherwise throw is the loud leg of this ruling, ⛔ not to be skipped or quarantined;AGENTS.md:280drops.github/instructions/**from the governed-paths list. - The PR stays draft (governed paths:
AGENTS.md+.github/instructions/**) and carries the 维护者速读(草稿); the seat requests review from the approver accounts; merge is the maintainer's click.
- Card:
needs-user-decision→pm:queue.
Four-facet reading: as presented in batch #142.
Generated by Claude Code
- Authority: the maintainer's 2026-09-09 instruction, verbatim (hotcrm#1823 body): 「claude.md 是不是直接让他阅读 agents.md 即可,没必要维护两套。所有仓库都有类似的问题」. Both pointer files on
- addedpm:queueReady for the PM dispatch loopReady for the PM dispatch loopand removedneeds-user-decisionNeeds the maintainer's call before work proceedsNeeds the maintainer's call before work proceeds
on Sep 16, 2026 objectstack-fleet commented
on Sep 25, 2026 ContributorMore actionsrepo:hotcrmseat,session_01X8U3asekbiC7yWoEPWR4Dg· stock re-triage group 5 (maintainer-confirmed ten-card group; maintainer reply verbatim: 「同意」) · 2026-09-25T02:50ZStays
pm:queue— one scope addition for the dispatch orderThe same PR must also re-point the three
.github/tasks/*references to the retired briefs (at AGENTS.md). Ruling #142 item 4 (B) did not list them. Paths in the ruling predate #1910'ssrc/<pkg>/layout.
Generated by Claude Code
- addedpm:dispatchedDispatched to a dev agent by /pm-dispatchDispatched to a dev agent by /pm-dispatchand removedpm:queueReady for the PM dispatch loopReady for the PM dispatch loop
on Oct 1, 2026 objectstack-fleet commented
on Oct 1, 2026 ContributorMore actionsClaim: PM loop round R66 (serial dispatch, maintainer instruction verbatim: 「串行派发」) · 2026-10-01T02:17Z
Session:session_01X8U3asekbiC7yWoEPWR4Dg
Branch:claude/issue-1832-retire-role-briefs
Worktree:hotcrm-issue-1832
Domain:repo:hotcrm(single-lane repo — nodomain:*taxonomy)
Seat:repo:hotcrm#1
File surface:.github/instructions/*.md— the six files, deleted.AGENTS.md— necessary content the briefs carry that it lacks is folded in first;:280drops.github/instructions/**from the governed-paths list..github/tasks/*— references to the retired briefs are re-pointed atAGENTS.md.test/docs-src-tree-paths.test.ts(INSTRUCTIONS_DIR/INSTRUCTION_TREE_DOCS) andtest/docs-drift.test.ts— they stop pinning the retired paths.- One empty-frontmatter
.changeset/.
⛔ No new gate, test or lint rule. ⛔ No skip or quarantine.
Container & model:M,mode:subagent,model: opus— default judgement tier, hand-picked (dispatch-gates --tierrefuses hotcrm paths from the objectstack checkout)
Clause-②: no
Thread-read: 5825877235
Serial constraints cleared:- [Decision] What does a Chinese docs page do with a view name the app's own locale pack does not carry?
revenue/approvalsnames five plugin-owned views in English and #1329's ruling cannot reach them #1552 landed (docs(zh): approvals spells plugin-owned view and tab names from the owner zh-CN pack #1971 merged 2026-10-01T02:15Z). - No open hotcrm PR touches
.github/instructions/**,.github/tasks/**orAGENTS.md. - Governed paths (
AGENTS.md,.github/instructions/**): the PR stays DRAFT with a 维护者速读, and the merge is the maintainer's click (ruling item 4).
- added a commit that references this issue
on Oct 1, 2026 objectstack-fleet commented
on Oct 2, 2026 ContributorMore actionsRelease:
session_01X8U3asekbiC7yWoEPWR4Dg(claim5923400916, assigneeos-warren) · reason: the claiming session is unreachable. Its last output on this board was5923825391(2026-10-01T02:57Z), andget_sessionanswers not found · destination: taken over below by therepo:hotcrmseat · 2026-10-02T21:42Z. Provenance: the maintainer's summons of this seat, verbatim/pm-dispatch hotcrm, in the chat ofsession_01ER8ntXZhYebyQ66aXWdjfTat 2026-10-02T21:13Z. The seat-taking record is on the seat post,5961921626.Claim: PM loop round R69 (seat takeover of an in-flight card; review and landing window only, no new dev dispatch)
Session:session_01ER8ntXZhYebyQ66aXWdjfT
Account:hotlong(the seat's linked user asGET /useranswers it; always the card's assignee)
Branch:claude/issue-1832-retire-role-briefs
Worktree: none (no new dev; the seat reviews the pushed head)
Domain:repo:hotcrm(single-lane repo, nodomain:*taxonomy)
Seat:repo:hotcrm#1
File surface: unchanged from5923400916:.github/instructions/*.md(deleted),AGENTS.md,.github/tasks/*,.github/AGENT_GUIDE.md,test/docs-src-tree-paths.test.ts,test/docs-drift.test.ts, one.changeset/file (stop on breach; explain in the report)
Container & model:none, no dev is dispatched by this claim;dispatch-gates --tier --repo objectstack-ai/hotcrmanswers "no path-derived mandate … the tier stays the PM's per-card judgment call"; the seat reviews at its default judgement tier
Clause-②: no
Thread-read: 5923400916
Serial constraints cleared: no other open hotcrm PR touchesAGENTS.md,.github/instructions/**,.github/tasks/**or the two test files (read viapulls/N/files: #1981, #1963, #1962, #1953, #1950, #1058); since the PR's basea228df19,origin/maintouched none of the PR's files (only.changeset/additions), andgit merge-treeagainst39ba05e2is clean.Handover record
- The branch
claude/issue-1832-retire-role-briefslast pushed54c5bad3c4b2(draft PR docs(agents): retire the six role briefs under .github/instructions/ #1977,Fixes #1832, +25/−831, 13 files). - Status: CI is 9/9
successon that head, and no review was recorded before the claiming session went quiet. The seat reviews it now, on this card.
Generated by Claude Code
- The branch
objectstack-fleet commented
on Oct 2, 2026 ContributorMore actionsACCEPT: PR #1977 at
54c5bad3c4b2. The six role briefs are retired, andAGENTS.mdis the one instruction set (ruling batch #142 item 4, B).repo:hotcrmseat,session_01ER8ntXZhYebyQ66aXWdjfT, 2026-10-02T21:44Z.⚠️ Tier H (AGENTS.md), so the PR stays draft and the merge is the maintainer's click. Details are below the list.- Form: draft, base
main. The first line isFixes #1832, and it is the only closing keyword in the body. - Scope: 13 files, the claim's surface plus
.github/AGENT_GUIDE.md. The dev declared that file under Acceptance notes, and it falls inside the dispatch's re-point clause. Nothing undercontent/docs/releases/,src/or config. - Changeset:
.changeset/retire-role-briefs.mdhas empty frontmatter. That is this lane's legal zero-release form. - CI: 9 of 9 check runs
successon54c5bad3, the PR's currenthead.sha, read at 2026-10-02T21:32Z. The seat did not re-run the dev'spnpm verifytranscript. - Ruling conformance:
- The first commit,
ffb40366, is the reading. It foldslogic.md's two facts intoAGENTS.md. - The six briefs are deleted.
AGENTS.md's governed-paths list drops.github/instructions/**.- The
.github/tasks/*references are re-pointed. This is the scope addition in5825877235. - In
test/docs-src-tree-paths.test.ts, the removed .github/instructions/logic.md points its action example at packages/crm/src/ — a layout hotcrm does not have, and no gate covers that directory #1233 block guarded only.github/instructions/*.md. The rules that coverAGENTS.md(TREE_DOCS) are untouched. ⛔ Nothing is skipped or quarantined.
- The first commit,
- Spot readings of the folded claims, on
origin/main39ba05e2:src/sales/objects/_hook-api.tsdeclarescount: (q: HookCountQuery),HookQuery.top, andupdate: (doc: HookUpdateDoc, options: HookUpdateOptions).test/action-sandbox.test.ts:889iteratesallHooks.'api.read'/'api.write'appear at 10 sites undersrc/.src/revenue/objects/quote.hook.ts:89guards onctx.user?.id.
- Residual references:
git grep '.github/instructions'on the PR head, excludingCHANGELOG.md, finds only the changeset and the test's one-line retirement note. Control: the same grep onorigin/mainfinds 7 hits in 5 files. - Base drift:
mainmoved froma228df19to39ba05e2(17.5 → 17.6.0 upgrade, strict-validate cleanup, two docs PRs) and touched none of the PR's files.git merge-treeis clean, and the queue re-tests onmerge_group. - Size: +25/−831 = 856 lines, under the 5,000-line threshold.
- How this was accepted: the dispatching session's
os-devreport never reached GitHub, because that session is gone. This is the direct-accept fallback, and all three conditions hold: the draft PR is green; the session is confirmed gone and has not pushed for 2 h or more; the report is absent. The PR body served as the report, checked against the tree. - Deviations: none beyond
.github/AGENT_GUIDE.md, which the dev declared.
Endgame (Tier H):
needs-user-decisionon the PR, the final 维护者速读 posted on the PR, and review requested fromos-zhuangandhotlong. ⛔ The seat does not ready, enqueue or approve it. Once the maintainer merges it, the seat confirms #1832 closed and stripspm:dispatched.
Generated by Claude Code
- Form: draft, base
objectstack-fleet commented
on Oct 2, 2026 ContributorMore actionsCorrection to the takeover
5961945086. One of its stated reasons is not evidence, and the takeover stands without it.repo:hotcrmseat,session_01ER8ntXZhYebyQ66aXWdjfT, 2026-10-02T21:56Z.The Release line cited
get_sessionanswering not found forsession_01X8U3asekbiC7yWoEPWR4Dg. That answer carries no information. Session handles are account-scoped, so a session another account created answers not found exactly as a session that never existed would (dispatch-runbook.md: 「该答案与从不存在不可区分,⛔ 永不读作死亡信号」). The open-round marker5961921626on the seat post carries the same misreading.What the takeover rests on is the board reading alone. The claiming session's last output was
5923825391at 2026-10-01T02:57Z, about 42 h of silence on a card with an unreviewed PR. The takeover protocol takes over an unreachable claimant ⛔ without judging it dead. If that session is still alive and returns, its claim5923400916is the earlier one, and this seat hands the card back with everything read so far.
Generated by Claude Code
- removedpm:dispatchedDispatched to a dev agent by /pm-dispatchDispatched to a dev agent by /pm-dispatch
on Oct 3, 2026
Found while executing #1823 (the fold that corrected #1818's two
*.workflow.tssites), and deliberately not fixed there: the fold's declared surface wasAGENTS.md,CLAUDE.mdand #1818's two sites only, with the other briefs' overlap to be reported (it is, on PR #1830 under Acceptance notes). Filed unassigned, unlabelled, for the PM to grade.The finding
Three of the remaining
.github/instructions/*.mdbriefs still teach authoring forms this app authors nowhere, or that the installed spec rejects — the same class #852 retired fromAGENTS.mdand #1686 / #1818 retired from two other brief sites. Measured at0f446c1(PR #1830's head,@objectstack/*17.4.0), each zero paired with a control that must hit:security.md§1*.role.tsfilessrc/**/*.role.ts= 0src/**/*.sharing.ts= 4 (§4 is real)security.md§2*.permission.tsfiles,object: 'account'src/**/*.permission.ts= 0;AGENTS.mdnames the suffix as authored nowhere (permission sets aresrc/profiles/*.profile.ts, 7 files)security.md§3*.rls.tsfiles with SQL-ishrule:stringssrc/**/*.rls.ts= 0metadata.md§3validation: [{ formula: … }](singular key)ObjectSchema.createrejects it:unknown key(s) — validation; objects undersrc/spelling it that way = 0validations: [{ type: 'script', severity, message, condition }]form is accepted by the same call; 17 objects use itui.md§1–§3export defaultliterals for a view / an action,object: 'account'/'opportunity'unprefixed,type: 'grid'AGENTS.md§Schema Validation: views aredefineView({ … })named exports registered throughsrc/views/index.ts; a default export reaches no barrelsrc/views/*.view.tsall usedefineViewautomation.md§3*.trigger.ts"Trigger Registry"src/**/*.trigger.ts= 0 — butTriggerSchemadoes exist in@objectstack/spec/dist(26 files), so this row is a question (may an app author one?) rather than a proven defectWorkflowRuleSchemaundernode_modules/@objectstack/= 0 andFlowSchemaunderspec/dist= 34 re-confirmed on the same tree (the #1818 probes), proving the greps live.Why it is a trap and not tidiness
The harm is the one
AGENTS.mdnames outright: registration is explicit, file by file, so a*.role.ts/*.permission.ts/*.rls.tsauthored fromsecurity.mdis registered by nothing and validated by nothing — a success receipt for work the runtime never took.metadata.md§3 fails the other way:ObjectSchema.createrejects the key loudly, but only after an agent has authored the whole rule in a shape it then has to re-derive from a neighbour. Every one of these briefs also drops the mandatorycrm_prefix in itsobject:examples, the "compounds it" half #1818 recorded.What a fix decides —⚠️ a real choice, ask before writing
AGENTS.mdalready has (the.github/instructions/metadata.mdteachesreference_to:(an unrecognized key — the spec prescribesreference) and anObjectSchemaimport/export shape the repo never uses #1686 /.github/instructions/automation.md§1 and.github/tasks/autonomous_feature_dev.md:17still teach a*.workflow.tsmetadata type no installed package defines — #852's class, two surviving sites #1818 route):security.mdbecomes profiles + sharing rules only;metadata.md§3 becomes avalidations[]entry with ahas()-guardedcondition;ui.mdexamples becomedefineViewnamed exports withcrm_names.AGENTS.md(PR docs(agents): keep only what is necessary — metadata-application principle first, rules not narratives, no inventories; add CLAUDE.md pointer; correct the two *.workflow.ts briefs #1830) is the single necessary instruction set and.github/copilot-instructions.md/CLAUDE.mdpoint at it —.github/tasks/new-package.mdstill prescribes the retiredpackages/scaffold — #1518's class, the site that card did not reach #1819 already asks the same shape of question about.github/tasks/new-package.md, and the maintainer's 2026-09-09 instruction 「没必要维护两套」 bears on it.⛔ Not a gate, test or lint rule (
AGENTS.mdScope rule 3). ⛔.github/instructions/**is governed: draft PR, human merge.Dedup read before filing: REST listing of the 300 most recently updated issues (
state=all, back to 2026-08-06; pages 2–3 of the listing returned empty twice, so the read has a declared gap), local grep —instructions/security.md0,.role.ts0,.rls.ts0,.trigger.ts0; controlautomation.md10 hits including #1818.metadata.mdhits only #1686 / #1812 (thereference_tokey, a different site in the same file).Refs #1818 · #852 · #1686 · #1812 · #1819 · #1823 · PR #1830
Generated by Claude Code