docs(audits): gate census 2026-09 — 225 rows on one table, retirement list, report-only (ruling F) - #18497
Conversation
Every scripts/**/check-*.mjs and packages/*/scripts/check-*.mjs (182), every root check:* that is not a thin alias (26), every .claude/hooks/* (12) and every required context on main (7) on one six-column table, with the retirement list, the report-only list and the method + limits. Real catches sampled over the last 30 days of failed PR runs (1,230 runs, 1,287 failed jobs, step-level attribution with self-PR exclusion). No gate is removed, disabled or edited. Claude-Session: https://claude.ai/code/session_01Wj1HUjzyeiBQ8atRf1ZhaL Co-authored-by: Claude <noreply@anthropic.com>
origin/main moved seven commits before the PR opened; one of them removed the client-side enqueue guard hook and its self-test, so the hook inventory is 10 and the union 225. Adds a Drift paragraph naming what moved and re-reads the five changed scripts/pm gates from the merged tree. Claude-Session: https://claude.ai/code/session_01Wj1HUjzyeiBQ8atRf1ZhaL Co-authored-by: Claude <noreply@anthropic.com>
维护者速读(终稿)总监席, 改了什么 新增一份审计 拆除清单压成五组,每组一个建议(拆 = 删文件、删
为什么改 你的裁决 F:「门禁用的太重了」。两个月里 182 个 check 脚本,168 个不满十周;上周 42% 的合并是机器在管机器。 风险与代价(含回滚) 本 PR 零风险(只加一个文档)。拆除批的风险:某道被拆的流程门禁守的东西再出错,只能靠人眼 —— 我按「不守契约、零命中」筛,这正是你要的取舍。回滚 = 恢复被删文件的一个 revert。 你要做的 一个字:「认可」(在这里 Approve,或直接对我说)= 五组按建议办。要改哪组,写组号 + 改法(例:「①拆」「④保留 docs 那几个」)。之后我落地本 PR、立拆除批卡。 Generated by Claude Code |
|
门禁竟然已经开发了,拆的意义是什么? |
|
答你 2026-09-16T16:45Z 的问题「门禁竟然已经开发了,拆的意义是什么?」—— 总监席, 「已经开发了」不等于「不再花钱」。 我刚按文件逐个读了拆除清单上 56 个脚本文件的提交历史(REST
每一次提交 = 一张 PR、一轮席位复核、一遍 CI —— 这就是一道建成的门禁的持续成本:树一变形,它就要被改一次;它守的东西越"流程",树变形得越勤,改得越勤。455 次里绝大多数不是在抓 bug,是在修门禁自己。 所以拆的意义有三条,都是往后省的,不是往回省的:① 这 455 次那样的维护提交停掉;② 每张特性 PR 本地少跑几个家族、CI 少跑几十步;③ 舰队的注意力少分给「让门禁绿」。 两处按这个读数改口: 我速读里建议保留的第②组(两个协议棘轮)—— 它们是全表最贵的两个(87 + 30 次提交),而 拆除批本身不花你的时间: 删的是 请回一个字: 「拆」= 席位立拆除批(五组按速读,②改为拆)/ 「懒拆」= 不立批,下次改到再删 / 「不拆」= 普查只做记录。这份普查文档你已 Approve,与拆不拆无关,我先落地它。 Generated by Claude Code |
|
Landing note — director seat, Approved by The 「拆的意义」 answer is the comment above; the retirement batch waits on the one word there and is independent of this PR landing. Generated by Claude Code |
Fixes #18472
skip-changeset: the diff is one file underdocs/audits/, which no released package'sfiles[]ships.What this is
The gate census the maintainer's ruling F asked for, verbatim 「F」 on 「现在有各种门禁的开发在浪费我的各种时间,我们的项目是不是门禁用的太重了。有这个必要吗?」 — one table, report-only. No gate is removed, disabled or edited by this PR; the retirement batch is its own card(s) after the maintainer's one-word 「认可」 on the table.
docs/audits/gate-census-2026-09.md:scripts/**/check-*.mjs178 +packages/*/scripts/check-*.mjs4) · ② 26 rootcheck:*scripts that are not a thin alias (of 164; 138 collapse onto their file row) · ③ 10 hooks (5 PreToolUse guards + 5 self-tests; the base tree had 12 — chore(hooks): remove the client-side enqueue guard hook — the merge_group queue guard is the line #18478 removed the enqueue guard onmainafter the base) · ④ 7 required contexts (read fromGET /repos/objectstack-ai/objectstack/rules/branches/main) → union = 225 rows, the table has 225 rows.retire (ruled)forcheck-reference-carrier-shape.mjs, objectstack#18095 E) · report-only 16 · keep 150 (133 plain, 2 ruled — the governed queue guard and its context —, 5 too new to judge, 5 session hooks + 5 hook self-tests).unmeasurednames why; no count is guessed.file:line, count of other references to fix; a nine-row CI-integrity sub-group presented as one decision), report-only list, method + limits (incl. what is outside the four inventories: 70 per-packagecheck:*, 31 workflow-direct non-check-*steps, two inline workflow gates — the inlineRequire a changesetstep alone reddened 107 PRs).packages/spec/ the runtime is the product, out of scope, said in one line.Standing verdicts recorded as given:
check-governed-queue-guard.mjs=keep (ruled);check-reference-carrier-shape.mjs=retire (ruled).Acceptance notes
node scripts/pm/dispatch-gates.mjs --commands docs/audits/gate-census-2026-09.md, 17 families) all exit 0 on the merged tree exceptpnpm check:cross-package-test-inputs(exit 1, at the base and again on the merged tree): its finding namespackages/cli/test/init-created-files-summary.e2e.test.tswalkingpackages/spec/dist/with no declared glob — not a path this diff touches (one docs file). Reported to the seat in the dev report for filing; not fixed here (scope rule).pnpm --filter @objectstack/lint run check:doc-formula-expressionsfirst answered exit 3 (PREREQUISITE NOT MET:@objectstack/formulaand@objectstack/lintnot built) — built both through the verify lock and re-ran: exit 0.Docs anchors resolve to real headingsstep failures could not be attributed betweencheck-doc-anchors.mjsandcheck-system-context-census.mjs(no tag in the annotation); recorded asunmeasuredon the doc-anchors row. 承接者: none.origin/mainmoved seven commits before this PR opened; the branch mergedbf61f0a1and the census was re-derived on the merged tree (Drift paragraph in the file). docs(pm-skill): flip the gate asymmetry — adding a required gate/hook/ratchet joins the human floor; census-marked retirement becomes class-1 (ruling F) #18481 (the protocol flip: a census-marked retirement becomes class-1) landed in that range and is the other half of ruling F.packages/spec,@objectstack/formulaand@objectstack/lintwere built only as prerequisites of the derived gates. Repo-wide scans (pnpm lint) are CI's.维护者速读(草稿)
改了什么:新增一份审计文档
docs/audits/gate-census-2026-09.md,把仓库里全部门禁放到一张表上:182 个check-*.mjs、26 个非别名的根check:*脚本、10 个.claude/hooks文件、7 个 main 分支必过的 CI 上下文,合计 225 行。每行六列:名字、类别(contract / correctness / process)、守的是什么契约、是否必过与波及面、落地以来真实抓到过几次(近 30 天 1,230 次失败的 PR 运行逐步归因,去掉门禁自己的 PR)、结论。⛔ 本 PR 不删、不停、不改任何门禁。为什么改:您在直连通道的裁决 F(「门禁是不是用的太重了」→ 先普查、再按表退役)。这张表就是普查结果:59 行建议退役(其中 1 行
check-reference-carrier-shape是 #18095 已裁 E),16 行只是报告不拦合并,150 行保留(含您已裁定保留的治理队列守卫)。波及面最大的三处:check-changeset-no-major(Clause-② 等级规则,30 天红了 74 个 PR)、check-partof-closing-keyword(31 个 PR,但它只在非必过的工作流里跑)、check-system-context-census(必过、全仓,21 个 PR)。表外还有一个最大的红源:pr-automation.yml里的内联「Require a changeset」步骤,30 天红了 107 个 PR。风险与代价(含回滚):本 PR 只加一份文档,零运行时改动,回滚即删除该文件。真正的代价在下一步:退役清单里有 9 行是「CI 自身接线」的守卫(必过上下文名字钉、聚合器 needs 花名册、Node/pnpm 获取、self-test 接线等),按规则它们 30 天零抓获所以列为退役,但它们的价值是威慑而非抓获——表里把这 9 行单独成组,供您一次决定。抽样只有 30 天:一季度才响一次的门禁会读成零。
席位意见:(留空,席位定稿)
你要做的:读表,认可则回一个字「认可」;若对某行有异议(尤其 CI 接线 9 行组、以及 5 个会话 hook 的保留),点名该行即可,director 会把退役批次按您的意见立卡。
Generated by Claude Code