docs(pm-skill): rules-only rewrite of the readings ledger, the REST table and the eight lane job descriptions - #15641
Conversation
One fact per line: the platform behaviour plus what a seat does because of it. Numbers a seat acts on stay; how they were measured does not. Four folded readings land here: the MCP list_issues labels array is a union and its totalCount is the disjunction; the container GitHub egress is proxy-credentialed; the job-log endpoint is refused by that proxy while the check-run annotations endpoint carries the exit code; enable_pr_auto_merge stores merge whatever was requested and the branch rule governs the landing method. The clause-2 checker reading that no longer reproduces is restated as its current reading rather than kept with a since-then tail. 397 -> 359 lines; 0 dates, 0 corner quotes, 0 non-table lines over 120 bytes. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019RfFHiRCSs3JXLK4cwcfox
Per-operation channel ownership stays; the per-row provenance dates and the
measurement narrative go. The check mark keeps its operative meaning — this
shape was actually executed from a gate-open seat — because two rows are
documented-but-never-called and a reader has to be able to tell them apart.
Adds the update-branch route folded in from its own card: PUT on
pulls/{n}/update-branch is the zero-file-write way to merge origin/main into
a PR head, expected_head_sha must be the full 40-character SHA, and a base
that has not moved answers 422 with nothing to do rather than a failure.
88 -> 82 lines; 0 dates, 0 corner quotes, 0 lines over 120 bytes.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019RfFHiRCSs3JXLK4cwcfox
Each lane keeps scope, duties per round, hand-offs and its never-list, in plain lines a reviewer can read. What goes: the ruling citations and their dates, the supersession ledgers recording which ruling moved a duty when, the charter quotations, and the incident stories behind a rule. Where a story IS a rule's condition it survives as one clause. No scope moves in either direction; no current-state values (the cli lane's dispatch-to-draft-PR baseline number goes, since the main file already says the baseline is read from the lane's own record and is never a constant). The skills lane's tier line now names tiers instead of model identifiers. cli 31->29, devx 39->38, director 72->72, engine 36->32, hotcrm 57->53, services 28->27, skills 35->33, spec 46->43; every file 0 dates, 0 corner quotes, 0 lines over 120 bytes, no decision-frame fingerprint. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019RfFHiRCSs3JXLK4cwcfox
release-aftercare keeps every duty and every number a seat acts on — the latency-to-server-time shape, the 200ms gate boundary, the waker-follows physics and the fixed protocol order — and drops the two-day operations log that produced them. Where a failure mode IS the rule's condition it survives as one clause with no date. true-green keeps the per-repo invocation, the gates a CI-log grep cannot see and the local preflight, one fact per line. compile-surfaces keeps its lookup table. The surface rows are unchanged byte for byte, so the widest-table-row pin stays where it is; only the thawed row loses its two dates and the retired in-scope wording, and the prose around the table loses its measurement provenance. release-aftercare 58->50, true-green 33->32, compile-surfaces 26->24. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019RfFHiRCSs3JXLK4cwcfox
All thirteen fall, none rises: platform-readings 397->359, rest-channel 88->82, release-aftercare 58->50, true-green 34->32, compile-surfaces 26->24, lanes engine 40->32, services 28->27, cli 31->29, devx 39->38, skills 35->33, spec 46->43, hotcrm 57->53, director 77->72. Every widest table-row pin is untouched, compile-surfaces included, because its widest row is unchanged byte for byte. The cross-file move declared on platform-readings needed one maintenance edit the header itself prescribes. Its destination no longer stands 73 lines above the 314 it moved from — the rewrite handed 38 of those ruled lines back — so the two ruledRaises records together read as an over-claim and the gate refused them. The third-increment record is retired, which is the header's own remedy for a ruled raise since given back; the intake record stays, so the declaration reads +11 against a net source decrease of 20 for a move that took +10. Under-pricing the move is the failure the header warns about, and this errs the other way. The move's `was`, its sources and their pre-move ceilings are untouched. Ratchet green including its 155-case self-test; check-published-list-mirrors, check-ratchet-remedy-authority, check-skills-token-ratchet and dispatch-gates (1445 cases) all green on the edited script. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019RfFHiRCSs3JXLK4cwcfox
…und missing Every backticked token in the thirteen old files was checked against the thirteen new ones, the rewritten SKILL.md and the rewritten seven references. Six of the misses were load-bearing spellings rather than narrative, and each is restored inside an existing line so no ceiling moves: the unexpanded matrix placeholder, the dev scratch directory name, the full large-datasets pagination message, the merge-main command that is the only fix for a stale rerun, the repository setting behind the auto-merge method read-back, and the fully qualified spec zod path. Eighteen misses stand and are listed in the PR body by reason: deliberate tombstones, provenance the rules-only rewrite removes, spellings the rewritten sibling files already carry, and equivalent short forms. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019RfFHiRCSs3JXLK4cwcfox
Table 1 — every surviving rule line (part B:
|
| file | # | the rule as it now reads | stripped |
|---|---|---|---|
platform-readings.md |
1 | 见 SKILL.md 〈平台读数纪律〉;本表是 GitHub API 与工具行为的读数事实,操作时查阅。 | quotation |
platform-readings.md |
2 | 本仓是否强制队列是仓库 ruleset 事实;grep merge_group 答的是队列内是否重跑 CI,两者独立。 |
date + quotation |
platform-readings.md |
3 | 缺席不构成反证:有仓 ruleset 强制而无 trigger,队列照收 PR;新仓靠实测,⛔ 不由缺席推断。 | date + quotation |
platform-readings.md |
4 | 权威读数 = 合并尝试本身(回 405 Changes must be made through the merge queue)或 rulesets API。 |
date + quotation |
platform-readings.md |
5 | 判在不在合并队列的决断读数是 timeline 事件 added_to_merge_queue / removed_from_merge_queue。 |
reworded |
platform-readings.md |
6 | 拼写 GET /repos/{o}/{r}/issues/{pr}/timeline:可按需重查、一次调用双向答。 |
new |
platform-readings.md |
7 | 它分得开从未入队与入队后被踢;pull_request.enqueued webhook 推送式不可重读,只作旁证。 |
new |
platform-readings.md |
8 | auto_merge 字段不只是空,是不稳定:同一 PR 一分钟内先 set 后 None,入队后又回落 off。 |
new |
platform-readings.md |
9 | ⛔ 永不据它判没挂上而重挂 —— 重挂踢队重排。 | new |
platform-readings.md |
10 | 成功序列读间隔不读事件名:removed_from_merge_queue 后 ~1 秒内跟 merged 是落地不是被踢。 |
narrative |
platform-readings.md |
11 | 真被踢是其后无 merged、几分钟后 PR 仍 open。 |
narrative |
platform-readings.md |
12 | 不在 origin/main 上是二义读数:在队列里等 / 没入队,两者处置相反。 |
new |
platform-readings.md |
13 | ⇒ 落地检查恒两个读数:队列成员资格 和 origin/main,缺一不可。 |
new |
platform-readings.md |
14 | origin/main 按内容读(grep 本 PR 的产物),⛔ 不按 head sha 祖先性、不按 merged 布尔。 |
new |
platform-readings.md |
15 | 队列落的是另一个提交:git merge-base --is-ancestor pr-head origin/main 对已完全合入的 PR 答 NO。 |
date + quotation |
platform-readings.md |
16 | 同 PR 的 list_pull_requests 会回 merged: false 与 merged_at 并存 ⇒ 只读布尔即读成没合。 |
date + quotation |
platform-readings.md |
17 | mergeable_state 惰性计算,unknown 不是读数 —— 挂 unknown 等于挂在可能脏的头上。 |
new |
platform-readings.md |
18 | dirty 即队列入口否决(冲突对象是当前 main);draft PR 恒回 draft。 |
new |
platform-readings.md |
19 | 判头脏走零配额本地试合并:fetch PR ref 后 git merge-tree --write-tree origin/main ref。 |
new |
platform-readings.md |
20 | 它直接列出冲突文件;读数随 fetch 老化,重跑先 fetch。 | new |
platform-readings.md |
21 | 它只答默认文本合并,不套 .gitattributes 的 merge driver。 |
new |
platform-readings.md |
22 | ⇒ 两侧同动一条 merge=os-regen 路径时系统性低报,方向危险:报干净而真合并会停。 |
new |
platform-readings.md |
23 | 这类 diff 由 mergeable_state 或 scratch worktree 里的真 git merge 定夺。 |
new |
platform-readings.md |
24 | 入队决策点才整对象 get 一次;挂了 flip 定点到点读,⛔ 不又查又等。 |
new |
platform-readings.md |
25 | 状态核验用最小字段(search/list 加 fields)或等事件。 |
new |
platform-readings.md |
26 | 聚合读数(blocked/dirty)只作阴性筛查再定位;放行按名定向读单条 job,⛔ 不拉全表。 |
date + marker |
platform-readings.md |
27 | 按名定位失败才拉全表;订阅来的 check_suite.completed 是唤醒不是放行读数。 |
date + marker |
platform-readings.md |
28 | 转 draft 不是可靠的踢队手段:两向相反读数并存,处置按最坏走。 | new |
platform-readings.md |
29 | 本仓转 draft 同时掉 auto-merge 与队列成员资格,不自动恢复,转正后重挂;姊妹仓曾保位照合。 | new |
platform-readings.md |
30 | 补救:转 draft 与 disable_pr_auto_merge 都做 —— 本仓 disable 单独不踢队。 |
date + quotation |
platform-readings.md |
31 | 出队按队列 ref 阳性探针答不在队向,加未落地;ref 缺席只作旁证,⛔ 永不承载结论。 | new |
platform-readings.md |
32 | update_pull_request 不管传不传都发送 draft 位 ⇒ 任何调用必须显式带 draft: true。 |
new |
platform-readings.md |
33 | reviewers/title/body/labels 的单字段调用同坑,曾把治理面 draft 发布进合并队列。 | new |
platform-readings.md |
34 | 请审专用路 = REST POST /pulls/{n}/requested_reviewers,载荷只有 reviewers/team_reviewers。 |
new |
platform-readings.md |
35 | 它不碰 draft 位;门开席位优先走它,MCP-only 席才用 update 加显式 draft: true。 |
new |
platform-readings.md |
36 | undraft 可用路径只有 MCP 这条:传 draft: false 落地。 |
new |
platform-readings.md |
37 | 裸 GraphQL 在会话内被拒,它建议的改用 REST 对 undraft 是错的。 | new |
platform-readings.md |
38 | 裸 REST PATCH /pulls/{n} 传 draft: false 回 200 而无操作 ⇒ 接口性质,池 0 只能等重置。 |
new |
platform-readings.md |
39 | enable_pr_auto_merge 恒显式传 mergeMethod: "SQUASH";不传静默退回被禁的 merge-commit = 无操作。 |
date + quotation |
platform-readings.md |
40 | 它存的方法恒为 merge,不论请求了什么;REST auto_merge.merge_method 读回 merge。 |
new |
platform-readings.md |
41 | 仓库 allow_merge_commit:false 时同样读回 merge;无 REST 端点设该方法。 |
new |
platform-readings.md |
42 | 设方法的 GraphQL mutation 不服务 agent 会话 ⇒ 席位既设不了也纠不了。 | new |
platform-readings.md |
43 | 它在本仓无实效:main 的合并队列规则带 merge_method: SQUASH,合并由队列执行。 |
new |
platform-readings.md |
44 | ⇒ 落地方法读分支规则,⛔ 永不读 auto-merge 请求;树上每 PR 一个 squash 提交。 | new |
platform-readings.md |
45 | 回显两向不可靠,空回显不等于未挂上 ⇒ ⛔ 不拿它当任何方向的证据、不为它空转。 | new |
platform-readings.md |
46 | 配额枯竭时 enable_pr_auto_merge 回成功而挂载根本没发生 ⇒ 验效果,不验回应。 |
quotation |
platform-readings.md |
47 | 回读 auto_merge 非空本接口给不了:pull_request_read 与 fields 枚举都无该成员。 |
quotation |
platform-readings.md |
48 | 效果读数 = 下列阳性探针、timeline 入队事件、最终落地;队列分支仅在场时算。 | new |
platform-readings.md |
49 | 队列 ref 答 BUILD 不答成员资格:gh-readonly-queue/* 只在存在时有意义,即有 build 在跑。 |
new |
platform-readings.md |
50 | ⛔ 它的缺席不是任何方向的读数。 | new |
platform-readings.md |
51 | 阳性探针 ①:update_pull_request_branch 回已入队分支不能更新 = 在队。 |
new |
platform-readings.md |
52 | 它正常返回则顺带逼出暗冲突;它不踢已挂 PR,只是永不入队。 | new |
platform-readings.md |
53 | 阳性探针 ②:merge_pull_request 回 405 Pull Request is in the merge queue = 在队。 |
new |
platform-readings.md |
54 | 同接口回 405 Merge commits are not allowed = 不在队,改挂 auto-merge。 |
new |
platform-readings.md |
55 | ⛔ enable 与其验证之间永不插 disable:入队 webhook 乱序迟到,会撤掉真实入队。 |
new |
platform-readings.md |
56 | 进度读 GET /actions/runs?event=merge_group;批次分支按批内最后一个 PR 命名。 |
new |
platform-readings.md |
57 | ⇒ 自己的 PR 号不在运行列表里不等于没在跑。 | new |
platform-readings.md |
58 | 踢出成因两则:兄弟抢先落地 ⇒ MERGE_CONFLICT;缺批准 ⇒ 治理守卫 merge_group 腿 CI_FAILURE。 |
new |
platform-readings.md |
59 | 队列 ref 在场时还答位置:名形 …/pr-PR-PARENT 的 PARENT 是前一条目的 tip。 |
new |
platform-readings.md |
60 | 从根在当前 origin/main 的那条起走父-tip 链即真实排队序;ls-remote 的字典序无意义。 |
new |
platform-readings.md |
61 | 该读法零配额,答 timeline 答不了的排第几;⛔ 只读现在、不重建历史。 | new |
platform-readings.md |
62 | 队列踢出先认签名再决定重投:核对失败签名与已知 flaky 一致 ⇒ 原样重投。 | new |
platform-readings.md |
63 | 止血修复合入后同一签名再现就不再是那条 flaky,是新问题须重新诊断,⛔ 禁反射式重投。 | new |
platform-readings.md |
64 | 第三种签名:本 PR 名下没有任何 merge_group run,且批次同伴的 run 全部 success。 |
narrative |
platform-readings.md |
65 | 队列重建的连带取消不是红 ⇒ 带签名收据重投一次,收据留在 PR 上,⛔ 无收据不重投。 | new |
platform-readings.md |
66 | 同一 PR 第二次被踢 ⇒ 停止重投,按签名四分支重判。 | new |
platform-readings.md |
67 | 吞吐两则:合并队列落地 ≈ 每 PR 15–30 分钟且串行,⛔ 不据还没落提前判异常。 | quotation |
platform-readings.md |
68 | 单容器重验证(build 加 test)并发甜点 ≈3,排批按它定上限。 | quotation |
platform-readings.md |
69 | 配额按账户计,不跨席共享:各席位跑在不同 GitHub 账户下。 | new |
platform-readings.md |
70 | 所有 agent 共用一个身份只在席位内部成立,故认领必须在评论里写 session ID。 | new |
platform-readings.md |
71 | ⛔ 不据限流报文里的 user ID 推池子跨席共用;本席额度完全由本席做法决定。 | new |
platform-readings.md |
72 | 计费按查询复杂度、按节点数,不按调用次数 ⇒ 优化方向是每次少拿,不是少调用。 | new |
platform-readings.md |
73 | 读数:上限 5000/时;一次 list_issues(34 张卡、perPage=100)= 107 点。 |
new |
platform-readings.md |
74 | 单个 dev 子代理 ~15 分钟烧 ~5658 点 ⇒ 最大消耗方是 dev 子代理,PM 巡检是噪声。 | new |
platform-readings.md |
75 | perPage 按预期 population 取,⛔ 不按习惯取 100:点数 ≈ 请求节点数除以 100。 | date |
platform-readings.md |
76 | 只要 totalCount 的健康指标取 perPage=1;只要最近 N 张就取 N。 |
date |
platform-readings.md |
77 | 小时池之外还有分钟级二级限流:GraphQL 端点 2,000 点/分、并发 ≤100。 | date |
platform-readings.md |
78 | 官方指引:变更类请求间停 ~1 秒,mutation 按 5 倍计;批量写因此 ~1 秒一发。 | date |
platform-readings.md |
79 | 双载体清标、批量重分诊这类把写挤在同一秒的扫动,会在小时池仍绿时撞上分钟墙。 | date |
platform-readings.md |
80 | REST 可达性是会话属性(GitHub App 会话门),⛔ 不是端点或席位类型的属性。 | new |
platform-readings.md |
81 | 开轮探一次、按班存档;探针必须是一条真 repo-scoped 读。 | new |
platform-readings.md |
82 | 门关着时 repo-scoped 路径整类回 403 GitHub access is not enabled for this session。 |
new |
platform-readings.md |
83 | 那不是限流,重试无用;403 对具体端点零分辨力。 | new |
platform-readings.md |
84 | /rate_limit 照答 200,兼任不了探针;403 后凭据形态判别见 rest-channel.md。 |
new |
platform-readings.md |
85 | 门态逐会话变,同窗顶层席可分裂成两 403 一 200 ⇒ ⛔ 不据他席、他日读数推本席。 | new |
platform-readings.md |
86 | 门开会话实测通道宽于标签:issue POST 201、评论写、卡与评论读同通,加法 POST 200。 | new |
platform-readings.md |
87 | 门关着时的降级梯 ①:git 先行,走下方零成本等价物。 | new |
platform-readings.md |
88 | 降级梯 ②:公开仓 payload 档。③:MCP —— search 定向一击、单标签读全加求交。④:等重置。 | new |
platform-readings.md |
89 | CCR 容器的 GitHub 出口是代理加凭据的:无 header 的 REST 读回 200 带会话身份,core 上限 15000。 | new |
platform-readings.md |
90 | 调用方自带的 Authorization 头被代理覆盖;HTTPS_PROXY 端口打死也不切断网络。 |
new |
platform-readings.md |
91 | ⇒ 容器内得出的 token 作用域结论 ⛔ 不迁移到出口未经代理的会话。 | new |
platform-readings.md |
92 | 同因:check-clause2-carriers.mjs --pair 在容器内带与不带 token 都 exit 0,不再是 403 退 3。 |
new |
platform-readings.md |
93 | 两通道的信封在配额、权限、传输三样上都不同 ⇒ 任一侧的拒绝只是那一侧的读数。 | new |
platform-readings.md |
94 | 限流、403、传输失败都要试过另一侧才说得出我没手段。 | new |
platform-readings.md |
95 | 读数:POST /actions/runs/{id}/rerun-failed-jobs REST 回 403 而 MCP 回 201。 |
date + quotation |
platform-readings.md |
96 | job 日志只有 MCP 取得回,REST 侧转 blob 存储 http=000;同分钟 MCP 限流而 REST core 满 15000。 |
date + quotation |
platform-readings.md |
97 | ⇒ MCP 限流先探 REST 再定退避,⛔ 不据一侧限流把整个平台的写都停掉。 | new |
platform-readings.md |
98 | REST 档以本班 repo-scoped 探针绿为前提;403 会话改按降级梯读。 | new |
platform-readings.md |
99 | 容器 curl 的 REST 通道 = App installation token,core 15,000/时,与 GraphQL 池独立计。 | new |
platform-readings.md |
100 | GraphQL 池 5000/时,只留给没有 REST 对应物的几件。 | new |
platform-readings.md |
101 | 那几件 = draft 翻转、auto-merge 挂载、语义 /search/*、Projects field_values、issue transfer。 |
new |
platform-readings.md |
102 | 逐操作通道归属、写侧配方与队列路由三读法见 rest-channel.md,⛔ 不在本表复述。 |
new |
platform-readings.md |
103 | MCP list/search 家族整个走 GraphQL 稀缺池,issue_write 连查找半边都吃。 |
narrative |
platform-readings.md |
104 | 配额红时认领类动作排队,评论走 REST 桶先行把结论发出去。 | narrative |
platform-readings.md |
105 | gh CLI 的动词按传输分两桶,池枯竭时只死一半。 |
new |
platform-readings.md |
106 | porcelain 家族(gh issue view / gh pr list)与 gh pr create 走 GraphQL,当场回限流。 |
date + marker |
platform-readings.md |
107 | 同批事实改走 gh api 的 REST 路径照常返回,含开 draft PR;容器无 gh,本条只对本机席适用。 |
date + marker |
platform-readings.md |
108 | 红窗调度:守候只给上面那几件 GraphQL-only 的,⛔ 其余一切不为配额空等。 | narrative |
platform-readings.md |
109 | 走队列的仓落地必经 auto-merge ⇒ 红窗里无退路;直合仓有,合并本身有 REST 端点。 | narrative |
platform-readings.md |
110 | MCP 侧限流下,draft 翻转与 auto-merge 挂载整窗不可得。 | new |
platform-readings.md |
111 | 被挡住的翻转是在等窗口,不是关于该 PR 的信号 ⇒ ⛔ 不据它重挂、不据它改判状态。 | new |
platform-readings.md |
112 | 其余动作(评论、标签、请审、读、timeline)照常走 REST。 | new |
platform-readings.md |
113 | 报文里的 user ID 只是报文:据它推 MCP 池跨席共享与本节首条冲突,⛔ 未裁不写成事实。 | new |
platform-readings.md |
114 | issue transfer 因配额或权限拿不到 ⇒ 当轮改走多仓协调条款的在目的仓重建配方。 |
quotation |
platform-readings.md |
115 | 该配方 = 出处头加裸 #N 改全名加关源单为 moved:纯 REST、配额免疫,⛔ 不为它空等重置。 |
quotation |
platform-readings.md |
116 | 两个瘦身参数都不省池。fields 省载荷:MCP list/search 服务器端无条件抓 Project field_values。 |
new |
platform-readings.md |
117 | ⇒ 池枯竭时最小字段请求同样全体失败,报错串是 failed to fetch issue field values。 | new |
platform-readings.md |
118 | ⛔ minimal_output: true 不裁 list_issues 的 body,⛔ 永不当省额度手段写进任何 skill。 |
date + quotation + marker |
platform-readings.md |
119 | 没有参数能关掉 body:要么整表 107 点,要么换窄接口(点数未测)。 |
new |
platform-readings.md |
120 | 站得住的证据是直接观察 body 在,不是前后体积对比 —— 两次调用之间 population 已变。 |
new |
platform-readings.md |
121 | git 先行:本地检出、git log、ls-remote 不花配额,断粮期分支存在性检查照常可用。 |
new |
platform-readings.md |
122 | PR 文件读取同走 git:REST PR files 端点可瞬态 404。 | new |
platform-readings.md |
123 | 零成本等价物 ①:合并队列 git ls-remote origin 'refs/heads/gh-readonly-queue/*'。 |
new |
platform-readings.md |
124 | ②:是否落地 git log --format='%H %s' -40 origin/main 按 PR 号 grep。 |
new |
platform-readings.md |
125 | ③:squash 验证 git rev-list --parents -n1 数父提交。④:git ls-remote origin 'refs/heads/*key*'。 |
new |
platform-readings.md |
126 | 开轮先读配额:curl 带 Bearer $GH_TOKEN 打 /rate_limit,免费。 |
new |
platform-readings.md |
127 | 它答不了通道在不在,repo-scoped 探针另跑;graphql remaining less than 1000 ⇒ 本轮走 git 加 REST。 | new |
platform-readings.md |
128 | 中途撞限流的 dev 完不成强制查重,只能把发现交回 PM 代为归档,⛔ 不盲目开卡。 | new |
platform-readings.md |
129 | 打满时待执行写排成有序清单挂进巡逻词,不靠记忆;恢复窗口按序连清。 | new |
platform-readings.md |
130 | 重试对齐整点(REST core 整点重置)优于指数退避,⛔ 绝不忙轮询。 | new |
platform-readings.md |
131 | 文档载明未实测:条件请求答 304 不计 core 池。 |
new |
platform-readings.md |
132 | 公开仓零配额读法两档,payload 档优先 —— 只有 body 精确。 | new |
platform-readings.md |
133 | 单卡页 /issues/N 内嵌 JSON 载原始 body:取含 bodyHTML 的 script[type="application/json"] 块。 |
new |
platform-readings.md |
134 | 读 payload.preloadedQueries[0].result.data.repository.issue.body 与 frontTimelineItems/backTimelineItems。 |
date + marker |
platform-readings.md |
135 | 评论表与标量字段都不可信:时间线只渲染前 15 项且 hasNextPage: true。 |
new |
platform-readings.md |
136 | assignees 实测为陈旧空值而权威读非空;labels/state 由此存疑、未实测,⛔ 不写成已测。 |
new |
platform-readings.md |
137 | ⇒ ⛔ 认领承载字段(assignees、pm:* 标签、state)永不从本档读。 |
new |
platform-readings.md |
138 | ⛔ 本档的缺席不是读数:要么 hasNextPage: false,要么第二通道。 |
new |
platform-readings.md |
139 | 自己刚写的按原写入通道回读;失效方向是空转与重发。 | new |
platform-readings.md |
140 | 成因:本档经 CDN 缓存,专对最新内容失效且绕不掉,cache-busting 查询串与 no-cache 头都无效。 | date + quotation + marker |
platform-readings.md |
141 | 内容可滞后数分钟到数十分钟;它没有位置性对照 —— 更早内容全在,只有最新几条缺席。 | new |
platform-readings.md |
142 | ⇒ 前 15 项那条判别式在此不成立,唯一出路是第二通道。 | new |
platform-readings.md |
143 | 失效方向是据它对别人的工作下没有认领的判词。 | new |
platform-readings.md |
144 | 边界:⛔ 只因仓库公开成立;⛔ 覆盖单卡读、不覆盖 issue search,搜索页无 SSR 结果。 | new |
platform-readings.md |
145 | ⛔ 永不拿渲染列表定规模:静默只显一页。渲染层 WebFetch 仍在,~15 分缓存、有损。 | new |
platform-readings.md |
146 | 查重先 search_issues,并按它的契约拼:它是语义匹配器。 |
new |
platform-readings.md |
147 | ⛔ query 里永不放 GitHub 限定符(repo: / is: / label: / in:title),范围走 owner/repo 参数。 |
date + quotation |
platform-readings.md |
148 | query 写成描述缺陷的句子;限定符形回 total_count: 0 且 incomplete_results: false。 |
date + quotation |
platform-readings.md |
149 | 同一意图换文档形则命中,首条即目标;body 文本匹配是 repo-scoped list 做不到的。 |
new |
platform-readings.md |
150 | list 加本地扫描是确定性回退,⛔ 不是默认。 |
new |
platform-readings.md |
151 | search_issues 可整会话静默归零,控制词一并归零 —— 故障是会话级,同刻别的会话正常。 |
new |
platform-readings.md |
152 | ⛔ 空查重结果不是读数,除非本会话内一个已知必中的控制词答了命中。 | new |
platform-readings.md |
153 | ⛔ 不是可疑时才验:归零下空结果与真无重复逐字节同形,读作搜过了没有。 | new |
platform-readings.md |
154 | 后果是重复卡照开、空车道照停;控制词回 0 ⇒ 本会话 search 已坏,立刻换通道,⛔ 不重试。 | new |
platform-readings.md |
155 | 换道:探针绿走 REST 列表端点 GET /repos/{o}/{r}/issues?state=open&labels=a,b&per_page=N。 |
new |
platform-readings.md |
156 | 它走 core 桶且 labels 是真 AND;⛔ 完整性自证靠 &page=N 加总数核对。 |
new |
platform-readings.md |
157 | 翻页在偏移 ~9,900 硬拒:422 Pagination with the page parameter is not supported for large datasets。 | new |
platform-readings.md |
158 | 该拒绝与规模、per_page 无关:小结果集同样在 page=100 拒,per_page=1 拒在 page=9000。 |
new |
platform-readings.md |
159 | ⇒ 总体超过它就按 sort=created 拆成 asc 加 desc 两趟、各 ≤99 页。 |
new |
platform-readings.md |
160 | created 序承重:新卡只追加到尾,页不在脚下重排。 |
new |
platform-readings.md |
161 | 以两趟的重叠证覆盖、对号码线闭合、缺号逐个直取核实。 | new |
platform-readings.md |
162 | 403 走降级梯 MCP 档:单标签读全加本地求交;⛔ 不是翻页手扫,不完整枚举比零结果更险。 | new |
platform-readings.md |
163 | 会话代理只服务 repo-scoped 路径,/search/* 的 403 体解析成净零。 |
new |
platform-readings.md |
164 | 代理回 403 加体 sessions are bound to their configured repositories,而那是合法 JSON。 | date + marker |
platform-readings.md |
165 | 读 total_count 得 None、打印成 total: None,与真空集只差一个字符,而请求根本没跑。 |
date + marker |
platform-readings.md |
166 | /search 类问题的仪器是 MCP search 工具,repo-scoped 枚举不受影响。 |
new |
platform-readings.md |
167 | 推论:阳性对照先跑 —— 合乎预期的零是永不复检的那个。 | new |
platform-readings.md |
168 | search_issues 不可靠地返回分钟级新卡:同轮发现的查重另按创建时间列近期 issue。 |
date |
platform-readings.md |
169 | 拼写 list_issues 加 orderBy: CREATED_AT;断言只到可能漏分钟级。 |
date |
platform-readings.md |
170 | 自由文本的否定在 search_pull_requests 静默失效:引号短语前的减号被丢弃。 |
new |
platform-readings.md |
171 | -"Part of" 与 "Part of" 回同一 total_count,而两者相加不等于未过滤总体,故不是任何分层。 |
new |
platform-readings.md |
172 | 同查询的限定符半边照常精确(linked:issue 与其补集之和等于总体)。 |
new |
platform-readings.md |
173 | ⇒ 一次调用里限定符半边算术正确、文本半边静默胡说;文本分层必跑补集与总体求和。 | new |
platform-readings.md |
174 | 会话中途轮换凭据把 GitHub MCP 服务器杀到不可恢复:其后 mcp__github__* 全回 invalid session。 |
narrative |
platform-readings.md |
175 | 只有新会话重绑 ⇒ 轮换前提醒维护者:在飞席位丢整条 GitHub 通道。 | narrative |
platform-readings.md |
176 | 配额池按身份计,换身份即清零燃烧,共享身份结构不变。 | new |
platform-readings.md |
177 | 组织侧授权变更后仓库访问逐步传播,同一端点数分钟内 403 转 200。 | new |
platform-readings.md |
178 | 该 403 体解析成净零 ⇒ 空车道先对 open_issues_count 反查再信,零命中纪律覆盖 list 读。 |
date |
platform-readings.md |
179 | 满页首页零命中是截断不是缺席:GET /branches?per_page=100 回满 100 行无目标 ⇒ 翻完再判。 |
date |
platform-readings.md |
180 | issue_write 的 labels 是整组替换不是追加:同一动作内重读现值合并再写。 |
new |
platform-readings.md |
181 | 隔轮旧读数是无效快照,按其回写静默剥别的标签;真追加走 REST POST /issues/{n}/labels。 |
new |
platform-readings.md |
182 | 追加端点同样先过探针:403 会话没有真追加通道,只能整组替换。 | new |
platform-readings.md |
183 | 摘标签也没有加法端点:finding 定级这类只能整组写,carve-out 保留;写后照纪律回读。 |
new |
platform-readings.md |
184 | PR 标签的三条读腿全盲、两条静默。 | new |
platform-readings.md |
185 | 腿 ①:issue_read get_labels 传 PR 号回 Could not resolve to an Issue。 |
new |
platform-readings.md |
186 | REST 的 PR 也是 issue 惯例在此方法不成立;响亮失败即路由信号,改走腿 ③。 | new |
platform-readings.md |
187 | 腿 ②:pull_request_read get 的 labels 时缺时滞,可整字段缺席;连盲都不稳定,更险。 |
new |
platform-readings.md |
188 | 腿 ③:payload 档 —— issue 页的 href 锚点 grep(/labels/NAME)在 PR 页命中零。 |
new |
platform-readings.md |
189 | PR 侧拼写是 data-name="NAME",片链到 issues?q=…label%3A…。 |
new |
platform-readings.md |
190 | ⇒ ⛔ 读成功而标签空或缺席不读作没有标签:按 data-name= 确认,否则整集作 UNKNOWN。 |
new |
platform-readings.md |
191 | 可达时优先加法端点;⛔ 单读与单次即时读回都不决断。 | new |
platform-readings.md |
192 | ⇒ union-write 欠一次延迟确认;必需标签(如 skip-changeset)其后每次触碰重核。 |
new |
platform-readings.md |
193 | list_issues 永不返回 assignees:fields 枚举无此成员,不传也没有。 |
narrative |
platform-readings.md |
194 | 已认领卡与空闲卡响应逐字节相同,清单只是候选名单 ⇒ 认领前必须过完整 issue_read。 |
narrative |
platform-readings.md |
195 | MCP issue_read 的 body 实体转义是纯读侧伪影,撇号与引号与尖括号成数字实体,comments 原样。 |
quotation + marker |
platform-readings.md |
196 | 存储体是明文,先解码实体再写回往返安全;腐蚀 body 的恰是把转义读数原样回写。 | new |
platform-readings.md |
197 | 读侧并非一律可逆:行内反引号里的尖括号片段被 MCP 读路径整个丢弃,非转义,无从解码。 | new |
platform-readings.md |
198 | 写侧剥除是真实存储损耗,⛔ 两类不并成一条,写后回读必做;实体归属与 & 类未实测。 |
new |
platform-readings.md |
199 | Blocked-by: 行归 BODY,是单通道反向索引:追加按解码后写回执行。 |
new |
platform-readings.md |
200 | 历史上寄放在评论里的行按同程序增量回填,⛔ 不搞批量突击。 | new |
platform-readings.md |
201 | 解锁扫描只 grep body,⛔ 不加常设评论读;扫描走 list_issues 加 issue_read 直读。 |
quotation + marker |
platform-readings.md |
202 | 动手前按空的行内代码跨度判 MCP 读可用否;命中即改从原始体取,⛔ 不拿有损读数回写。 | new |
platform-readings.md |
203 | list_issue_types 对本集成 403 而 issue_write type: 正常,是读权限缺口。 |
quotation |
platform-readings.md |
204 | ⇒ 直接写已知好值(Bug/Feature/Task),写侧报错才是真信号;列表 403 不等于类型不可用。 |
quotation |
platform-readings.md |
205 | 非法值是响错还是静默丢弃未实测,写非已知值前先小样验证。 | quotation |
platform-readings.md |
206 | MCP list_issues 的 labels 数组是并集:多标签 totalCount 是析取的规模,恒 ≥ 各单标签。 |
new |
platform-readings.md |
207 | ⛔ 永不读作交集;判据 = 结果比任一输入都宽:两标签的交集回 135 张而一道只有 132 张。 | new |
platform-readings.md |
208 | 正典解法:逐标签单独计数,按容斥推交集;负数或不合理的隐含交集 = 模型坏了。 | new |
platform-readings.md |
209 | 结果良构、失效全静默,混入别车道同状态卡与本车道全状态卡。 | new |
platform-readings.md |
210 | 正确读法 = 整车道单标签一次读全加本地对 labels 求交,或改走 REST。 | new |
platform-readings.md |
211 | 两个通道的 labels 语义相反:REST 列表端点的 labels=a,b 是真 AND ⇒ ⛔ 不无条件改走 REST。 |
new |
platform-readings.md |
212 | 被拦的下载不是缺席证明:出口策略 403 只说取不来,不说没有,先找产物再下结论。 | quotation |
platform-readings.md |
213 | 读数:Chromium 预装、PLAYWRIGHT_BROWSERS_PATH 已设,而 cdn.playwright.dev 回 403。 |
quotation |
platform-readings.md |
214 | 读数五坑 ①:cd X && cmd 短路 —— 路径不存在时命令在当前仓执行,跨仓恒 git -C path。 |
new |
platform-readings.md |
215 | ②:git grep -c pat | wc -l 数的是文件数不是命中数。 |
new |
platform-readings.md |
216 | ③:裸名 grep 被幸存家族当子串命中 —— 退役核验带引号精确名。 | new |
platform-readings.md |
217 | 更硬判据是查声明式 ^(export )?(const|type|interface) Name\b 而非查提及。 |
new |
platform-readings.md |
218 | ④:浅检出上的历史读数不可信 —— merge-base --is-ancestor 假非祖先、rev-list --count 截断。 |
new |
platform-readings.md |
219 | 同族 branch -r --contains 零输出;先 --deepen 再判,或走 REST compare。 |
new |
platform-readings.md |
220 | ⑤:容器里没有 gh,于是 gh … || echo "none" 是不可证伪的否定。 |
new |
platform-readings.md |
221 | 127 命令不存在与 grep 没命中输出同值 ⇒ 回退分支照打印安心结论而一次都没检查。 | new |
platform-readings.md |
222 | 安全拼写:先 command -v cmd 确认存在,或在 || 之前捕获状态。 |
new |
platform-readings.md |
223 | ⛔ 一般规则:任何可能不存在的命令上挂回退都是不可证伪的否定。 | new |
platform-readings.md |
224 | PR 与查重类核验改走 MCP GitHub 工具或 git。 | new |
platform-readings.md |
225 | auto 档判定随命令形状变,不随能力变 ⇒ 被拒的复合命令拆成裸动作重试再报 blocked。 | date |
platform-readings.md |
226 | 读数:带链接与管道的 git push 被拒,裸 git push origin 分支 放行,拒绝文案不点名元素。 |
date |
platform-readings.md |
227 | 判定跨天翻面 ⇒ ⛔ 一次拒绝不是能力边界;permissions.allow 条目才是仓库侧确定性通道。 |
date |
platform-readings.md |
228 | rerun_failed_jobs 复用原 run 的提交与合并 ref,不拿新 main 重算。 |
narrative |
platform-readings.md |
229 | ⇒ 基上缺已合修复时重跑无效,只能 git merge origin/main 推提交;判别看修复合并时间。 |
narrative |
platform-readings.md |
230 | 同一 head 上轻量兄弟 workflow success 加重量级载体 cancelled 是普通取代的预期签名。 |
quotation |
platform-readings.md |
231 | cancel-in-progress 窗口只罩得住慢载体 ⇒ 先比对 run head_sha 与 PR 当前 head,不开调查。 |
quotation |
platform-readings.md |
232 | CI 红了先取完整日志归档再下结论:断言文本只在归档里,直读工具拿不到。 | new |
platform-readings.md |
233 | get_check_run 对本仓 CI job 回空 output.text。 |
new |
platform-readings.md |
234 | get_job_logs 无论 tail_lines 只回占满日志尾部的 post-step service-container teardown。 |
new |
platform-readings.md |
235 | ⇒ 两者都答不了到底挂在哪;GET /actions/jobs/{id}/logs 被出口代理拒绝,CONNECT 403。 |
new |
platform-readings.md |
236 | 失败 step 名免下载即得:actions_get method=get_workflow_job。 |
new |
platform-readings.md |
237 | check-run annotations 端点带退出码与失败命令,是免归档的第二条便宜读。 | new |
platform-readings.md |
238 | 真实断言文本走 run 日志归档:actions_get method=get_workflow_run_logs_url 后下载解压。 |
new |
platform-readings.md |
239 | 分步文件在 {Job name}/{step number}_{step name}.txt。 |
new |
platform-readings.md |
240 | completeness check 绿只断言没有 worker 静默死,不等于测试通过。 | new |
platform-readings.md |
241 | 并发输出的相邻不等于因果:先查 turbo.json 依赖边,⛔ 不只看 tail。 |
new |
platform-readings.md |
242 | 公开发出的诊断被推翻时,更正发在同样公开的位置,据它开的 PR 撤回 draft、解绑 Fixes。 |
new |
platform-readings.md |
243 | 判正文被截断必须双读取:.body 原文,加 Accept: application/vnd.github.full+json 的 .body_html。 |
new |
platform-readings.md |
244 | 两者同一处断掉才算 issue 端截断。 | new |
platform-readings.md |
245 | 读侧有确定性触发:正文含字面 script 开标记形状 token 时,API 与 MCP 读回在该处静默截断。 | new |
platform-readings.md |
246 | doctype 开标记与 object 标签形状同触发;网页全文完好,⛔ 不修复只在 API 读短的卡。 | new |
platform-readings.md |
247 | 同坑第三条读路径:MCP issue_read 与 PR 读路径把行内反引号里的尖括号片段整个吃掉。 |
new |
platform-readings.md |
248 | GitHub 存储字节完好,raw REST 取回一字不差。 | new |
platform-readings.md |
249 | ⇒ ⛔ 永不单凭 MCP 读判截断,先取 raw REST 或 WebFetch 渲染页核对再判。 | new |
platform-readings.md |
250 | 否则 repair-first 被正确地应用到完好的卡上,重写毁掉的是正确内容。 | new |
platform-readings.md |
251 | 判据 = 数空的行内代码跨度:一个空跨度恰是短尖括号片段被吃掉的签名。 | new |
platform-readings.md |
252 | 判据是尖括号不是反引号:有的正文本来就把标识符不带尖括号写。 | new |
platform-readings.md |
253 | 数字实体(如撇号成 ')是普通实体编码,不是截断证据。 |
new |
platform-readings.md |
254 | 写侧 sanitizer 作者规则住 AGENTS.md 的 GitHub mutates body BYTES 段,⛔ 不在本表复述。 | quotation |
platform-readings.md |
255 | 本表只补两条:要字面尖括号写实体 < / >。 |
quotation |
platform-readings.md |
256 | 裸标识符(无尖括号)存活 ⇒ SKILL 提取契约(字面文本 grep 加裸标识符回退)仍有效。 | quotation |
platform-readings.md |
257 | 写侧 · issue body:落库删字节,网页同显;sanitizer 按 tag 形状删,不按尖括号。 | new |
platform-readings.md |
258 | 行内反引号里的 tag 形状 token 整个被删,含注释标记、占位符、泛型这些未知标签形。 | new |
platform-readings.md |
259 | HTML 注释形状标记裸写被整删留空行;孤立的行内尖括号与非 tag 形状带尖括号正则存活。 | new |
platform-readings.md |
260 | ⛔ 围栏不防护:照删、留空围栏。 | new |
platform-readings.md |
261 | 另一坑:感叹号紧跟左方括号即触发(TS 非空断言下标),无需尖括号。 | new |
platform-readings.md |
262 | 围栏与行内代码同样丢字符,幸存文本仍像代码但意义已变;感叹号不接左方括号则存活。 | new |
platform-readings.md |
263 | 作者侧:运算符用词拼出,或占位词定义一次。 | new |
platform-readings.md |
264 | 写侧 · 评论是截断不是删片段:sanitizer 从首个命名 HTML 元素的尖括号片段起吃到结尾。 | new |
platform-readings.md |
265 | JSON 因此不可解析 ⇒ ⛔ 字面文本标记只保住标记:标记扫描照报成功,真去解析才发现。 | new |
platform-readings.md |
266 | 引信是普通 TS 形状如泛型,不是奇异语法。 | new |
platform-readings.md |
267 | 边界:姊妹仓一次受控探针测到的是选择性删除而非截断到尾 ⇒ 写侧按最坏的截断防护。 | new |
platform-readings.md |
268 | 写侧 · PR 正文:尾部横线与其后的署名页脚一并被吃,而写调用照报成功。 | new |
platform-readings.md |
269 | 去掉横线只写页脚则原样存活;评论不受影响,两种拼法都活。 | new |
platform-readings.md |
270 | ⇒ 失效既依拼写又依载体:评论里验过页脚对 PR 正文什么都没证明。 | new |
platform-readings.md |
271 | ⇒ PR 正文页脚不带前置横线,且写后回读正文 —— 那是唯一检测手段;评论两形皆可。 | new |
platform-readings.md |
272 | 署名页脚的写侧变异按通道与输入双重定域,⛔ 不是一条定律。 | new |
platform-readings.md |
273 | MCP update_pull_request 包装器删掉 PR 正文的页脚块。 |
new |
platform-readings.md |
274 | 裸 REST PATCH /pulls 追加一个裸页脚并保留既有 session-URL 页脚,差恰 58 字节。 |
new |
platform-readings.md |
275 | 同一 MCP 包装器上有反例:把已带页脚的正文整体重送,两条页脚均逐字节存活。 | new |
platform-readings.md |
276 | 提出的机理是工具只为无页脚的正文合成页脚 —— ⛔ 未实测,⛔ 不把观察压成定律。 | new |
platform-readings.md |
277 | 第四形:裸 REST POST /pulls 建 PR 时,在已带 session-URL 页脚的正文后再追加一条同形页脚。 |
new |
platform-readings.md |
278 | 该追加带前置横线、恰 90 字节,送出体是存储体的严格前缀。 | new |
platform-readings.md |
279 | ⇒ 追加形态随通道与动作(建 / 改)变,⛔ 不由任一条推其余;写后必回读。 | new |
platform-readings.md |
280 | 评论创建两通道都追加 58 字节 ⇒ 严格解析 os-dev-report 必须停在最后一个右花括号。 |
new |
platform-readings.md |
281 | 并行 spec PR 同动 pin 计数断言:被踢不是事故,按 os-regen 序再解一轮。 | narrative |
platform-readings.md |
282 | 解冲突两侧收据都保留、按合并顺序堆叠;新计数从合并后源码重数,⛔ 不从收据做算术。 | narrative |
platform-readings.md |
283 | 操作数是文件本身不是历史;双方占同一编号是常态,重编号后进侧。 | narrative |
platform-readings.md |
284 | 容器重启杀死在飞 dev,三态 ①:分支已推加 PR 已开 ⇒ 只欠验收,CI 重跑加复核,不动代码。 | new |
platform-readings.md |
285 | ②:死在 regen 中途(未提交全是生成物、merge commit 已在)⇒ PM 直接续作。 | new |
platform-readings.md |
286 | 续作序:build,整链 regen,生成物门禁全绿,提交推送;恢复 commit 带 Recovery commit: 前缀。 |
new |
platform-readings.md |
287 | 有的现场 regen 一件没跑,推送前先跑生成物门禁别赌。 | new |
platform-readings.md |
288 | ③:死在源码编辑中途 ⇒ 先读 diff 判完整性:docblock 写全动机与判据的可代跑终验后提交。 | new |
platform-readings.md |
289 | 写一半意图不明的 ⛔ 不代提交,记交接;dev 临时目录(.os-scratch/ 一类)清掉,⛔ 不进 PR。 |
new |
platform-readings.md |
290 | 零提交的探针分支不是在飞工作:容器发不出分支删除 refspec。 | new |
platform-readings.md |
291 | git push origin --delete b 回 send-pack: unexpected disconnect,三次退避全败,同会话普通 push 正常。 |
narrative |
platform-readings.md |
292 | ⇒ 测量型派发留下的探针分支永久堆在 origin 上。 | new |
platform-readings.md |
293 | 判据两读:git rev-list --count origin/main..origin/b 为 0,且分支名下无 open PR。 |
new |
platform-readings.md |
294 | ⛔ 不据 ls-remote | grep issue- 正命中回避该卡:失效方向是活卡被读成已认领,无红信号。 |
new |
platform-readings.md |
295 | 会话从上下文检测不到自己的静默降档:横幅只在 UI 侧渲染,上下文零信号。 | new |
platform-readings.md |
296 | 服役档的权威读数是 get_session(claude-code-remote MCP,无参)的 external_metadata.last_served_model。 |
date + quotation + marker |
platform-readings.md |
297 | 它是最近一轮服役者,降档链中途照真;session_context.model 是配置档,⛔ 不作保险丝输入。 |
new |
platform-readings.md |
298 | 该读数按宿主分叉:有的宿主的 get_session 按契约排除当前会话 ⇒ 保险丝无输入。 |
new |
platform-readings.md |
299 | ⛔ 不据一台宿主推全体;替代读数用时在卡上申报。 | new |
platform-readings.md |
300 | 无它时的合法替代 = grep 本会话 transcript 里 harness 写的 "model":,逐请求写入、非自述。 |
new |
platform-readings.md |
301 | 档位额度终止是第三种死法:子代理死在编辑中途、宿主报本账户档位额度到顶。 | date + marker |
platform-readings.md |
302 | 有宿主信号故非普通子代理死亡,亦非维护者中止 ⇒ 派发已死、前提完好、卡在资源。 | date + marker |
platform-readings.md |
303 | 处置 = 死认领回收加 worktree 抢救,⛔ 不重核前提、不升级。 | new |
platform-readings.md |
304 | 无前置探针,只在 dev 死在里面时可观测;缓解只在 dev 侧的早 WIP 提交。 | date + marker |
platform-readings.md |
305 | 档位不可用时 ⛔ 不凭记忆宣告车道阻塞,逐文件面现推 mandate。 | new |
platform-readings.md |
306 | 强制档不得因不可用而降档 —— 那正是降档保险丝要拒的替换。 | new |
platform-readings.md |
307 | 本车道强制多是过宽的回忆:dispatch-gates.mjs --tier PATH 逐路径现推,路径线是下限非放行。 |
new |
platform-readings.md |
308 | 该脚本只答自己那棵树:姊妹仓路径回 absent from this tree,姊妹仓的档位与条款②只能手推。 | new |
platform-readings.md |
309 | required checks 的名单是每仓事实,objectstack 六个: TypeScript Type Check · Lint & Repo Gates · Test Core · Dogfood Regression Gate · Build Core · Temporal Conformance (live PG + MySQL)。 |
quotation |
platform-readings.md |
310 | in_progress 不是过;advisory 门禁红进 main 是共享损伤,照样止血立单。 |
new |
platform-readings.md |
311 | ⛔ 聚合命令同样不作判定:check:type-check-debt 可在包级 typecheck 绿时红。 |
new |
platform-readings.md |
312 | check:i18n 以 PREREQUISITE NOT MET(workspace CLI 未 build)退 3,不是漂移。 |
new |
platform-readings.md |
313 | 计数非机理读数:由 GET .../actions/runs?event=merge_group 计数 0 推 required 集为空,当天被推翻。 |
date + quotation + marker |
platform-readings.md |
314 | 计数答至今发生过没有,不答机制在不在:零计数只作弱先验。 | new |
platform-readings.md |
315 | 判 required 集为空要读 ruleset 的 required 集本身,或看队列合并是否真在等检查。 | date + quotation + marker |
platform-readings.md |
316 | ⛔ 别处写下的计数值一律先复测再用。 | new |
platform-readings.md |
317 | PR 正文里不修某卡的否定句照样关卡:解析器不理会前面的否定词。 | new |
platform-readings.md |
318 | 关键词集 = fix/fixes/fixed/close/closes/closed/resolve/resolves/resolved 加 #N。 |
quotation |
platform-readings.md |
319 | 声明不修的那句话恰在合并时关卡;安全写法是号码不被关键词打头。 | new |
platform-readings.md |
320 | 三种安全拼法:#N is not addressed here / out of scope: #N / #N remains open。 |
quotation |
platform-readings.md |
321 | 边界三条 ①:关键词只绑同一行的 #N。②:动名词 closing 与 fixing 不是关键词。 |
new |
platform-readings.md |
322 | ③:行内反引号里的关键词不触发,code span 不建闭合链接;围栏块未实测,按同规则对待。 | new |
platform-readings.md |
323 | PR body 与 squash commit message 是两个独立解析源:commit 干净不等于 body 干净,只查 commit 会漏。 | quotation |
platform-readings.md |
324 | 误关的卡以 completed 状态对一切只看 open 的过滤与巡检隐身,无机械守卫覆盖这条路径。 |
quotation |
platform-readings.md |
325 | 消费侧检查 = 合并后读 closed_by_pull_requests,在复核清单里。 |
quotation |
platform-readings.md |
326 | 原则、定时器选型与恢复 playbook 在主文件;本节只放事实补遗。 | narrative |
platform-readings.md |
327 | npx ccusage blocks 容器内可用,读本地会话记录,报当前 5 小时窗口边界、剩余与燃烧率。 |
merged |
platform-readings.md |
328 | 盲区:窗口起点是本地推断的近似值。 | narrative |
platform-readings.md |
329 | 撞墙报文形如 limit reached, resets at HH:MM,重置时刻只在此刻可得。 |
quotation |
platform-readings.md |
330 | agent 建的 Routine 起的会话不带 mcp__github__* 工具 ⇒ 对以 GitHub 读写为工作的席位不可用。 |
date + quotation + marker |
platform-readings.md |
331 | 创建端现有 connectors 参数,声明起的会话可用哪些连接器 ⇒ 成因有了参数级解法。 |
new |
platform-readings.md |
332 | ⛔ 未实测,⛔ 不据参数在场推现在能用了。 | new |
platform-readings.md |
333 | 自绑唤醒的是已存在的会话、工具已加载 ⇒ 上条的传输问题不发生。 | new |
platform-readings.md |
334 | 代价是拿可恢复性换工具可得性:绑定会话一死,定时器成孤儿、每小时唤醒死会话。 | new |
platform-readings.md |
335 | ⇒ 绑定会话一死:先删旧 Routine、再从新会话重建,⛔ 永不留孤儿。 | new |
platform-readings.md |
336 | 自绑是性能优化,保住一条 prompt-cache 链,⛔ 不是状态存储;删了重建零成本。 | narrative |
platform-readings.md |
337 | 创建端无 sources、无 model 参数 ⇒ 建不出带源或钉死档位的 Routine,起的会话落默认档。 |
date + quotation + marker |
platform-readings.md |
338 | 更新端带 model,但只有每次起新会话的 Routine 吃得到。 |
new |
platform-readings.md |
339 | 自绑的保持所绑会话的档位直到绑定解除 ⇒ ⛔ 不据更新端能改档推自绑的档位可改。 | new |
platform-readings.md |
340 | UI 建的 Routine agent 改不动:更新端只受理自己建的。 | new |
Generated by Claude Code
|
ACCEPT — governed in-seat review of PR #15641, head Implemented-by: Verified in a detached compare worktree at the PR head against merge-base One change outside the 13 rows, accepted with the gate's own reasoning: the ledger's third-increment raise record ( Landing regime: governed ( Generated by Claude Code |
…le and lanes
Two sibling rules-only PRs landed on main and re-pin rows in the same ratchet
map this branch edits, which is what turned the PR dirty in the queue.
One conflicted file, two hunks, both resolved by keeping BOTH sides — the map
is a list of independent rows and the two branches move disjoint ones:
scripts/pm/check-skill-line-ratchet.mjs
hunk 1: ours rest-channel.md 88 -> 82 (with its note) kept, and theirs
review-checklist.md 84 -> 77 and landing-operations.md 80 -> 69
(with their notes) kept
hunk 2: ours release-aftercare.md 58 -> 50 (with its note) kept, and
theirs seat-post-protocol.md 105 -> 91 (with its note) kept
Everything the automatic merge already took is unchanged: their SKILL.md
1005 -> 811, dispatch-runbook 280 -> 241, state-machine 44 -> 42,
contract-review 68 -> 60, decision-analysis 54 -> 50 and the SKILL.md
widest-table-row pin 642 -> 342; our remaining eleven rows and the retired
third-increment ruled-raise record on the cross-file move.
The thirteen markdown files this branch rewrites are byte-identical to the
pre-merge commit — main touched none of them.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019RfFHiRCSs3JXLK4cwcfox
|
Merged
Gates re-run on the merged head, each exit code captured before any pipe:
Because the merge re-touched the ratchet script, its dependants were re-run too — Dedup re-checked against the landed siblings, not the PR heads. CI on Draft/ready state untouched by this seat, and the PR was not re-enqueued — a governed PR is re-enqueued by the approver, not by a seat. Generated by Claude Code Generated by Claude Code |
|
Merge commit verified — the ACCEPT above (5548531654) extends to head What happened: the queue removed this PR at 02:22Z as Verified in a detached compare worktree at The approval on Generated by Claude Code |
|
Re-enqueue request — skills seat (session Generated by Claude Code |
维护者速读(skills 席,2026-09-05T13:2xZ)改了什么:pm-dispatch 的 13 个参考文件(平台读数账本、REST 通道表、发版善后、true-green、编译面,以及 8 个车道职责文件)只留规则,+780 / −800 行;每个文件的行数上限按落地值重新钉死,只降不升。 为什么改:同一条 9-4 裁定;这是「skills 只留规则」计划的第 3 个成员,成员 1b、2、4 已落地,成员 5 在 #15856。 风险与代价:纯 PM 席位内部文档,不碰产品代码。os-zhuang 03:2xZ 已批准;02:22Z 曾因 main 变动被队列剔除,dev 已合入 main,13 个文件与批准版本字节相同,CI 绿。此后 10 小时没人重新入队。 席位意见:建议入队。落地后解锁两张卡(#15671 分诊车道职责、#15647 四条账本行)并关闭四张 finding(#15121 · #15525 · #14928 · #15481)。 你要做的:点「入队」(已批准,只差这一下)。 Generated by Claude Code |
Part of #15379
Fixes #15121
Fixes #15525
Fixes #14928
Fixes #15481
Rules-only rewrite of the readings ledger, the REST channel table and the eight lane job
descriptions, plus the three small references, under the house style the digest set: one rule
per line, at most 120 bytes measured with
wc -c, plain Chinese with identifiers in backticks,grouped under each file's own sections, each file opening with one pointer to the SKILL.md
section it details. Provenance dates, ruling citations, verbatim quotations, incident
post-mortems and rationale tails leave the corpus. Every rule already stated in the rewritten
SKILL.md(head66338b6a) or in the rewritten seven references (head6000e270) is cutrather than repeated; the dedup was run against those two heads, not against
origin/main.946 to 874 lines across the thirteen — 72 lines out, and none of the thirteen grows. Bytes
fall further than lines do (the ledger alone 42,349 to 33,840), because most of the shrink is
narrative deleted out of multi-line bullets that then re-flow into single rule lines.
Angle-bracket placeholders are spelled as bare placeholder words in this body and in its
comments only, because the body sanitizer eats short angle-bracket fragments even inside
backticks. The files keep the original spelling.
The thirteen files
platform-readings.md— 397 to 359. The readings ledger: one fact per line, the platformbehaviour plus the operational consequence a seat acts on. The five sections keep their
subjects and their order. Every number a seat acts on stays (the 5000/hour and 15,000/hour
ceilings, 107 points per full
list_issues, the 2,000/minute GraphQL second tier, the 15-itemtimeline window, the ~9,900 pagination offset, the 15-30 minute queue landing, the six
required check names, the 58-byte comment footer append). How each was measured does not. Four
folded readings land here and one no-longer-reproducing reading is restated as its current
reading (below).
rest-channel.md— 88 to 82. Per-operation channel ownership. The check mark keeps itsoperative meaning — this shape was executed from a gate-open seat — because two entries are
documented-but-never-called and a reader must be able to tell them apart; its per-row dates go.
The five non-migratable operations keep their numbering, since the readings ledger points at
them by number. The update-branch route folded in from its own card lands on the write side.
release-aftercare.md— 58 to 50. The five lettered duties keep their letters. Everyoperational number stays: the 9x intra-region leg spread, the
server = 33 + 23 x RTTshape,the 200ms gate boundary, the ~15s re-draw window, the five weeks of green health checks. The
two-day operations log that produced them does not.
true-green.md— 33 to 32. Per-repo canonical invocation, the gates a CI-log grep cannotsee, the local preflight. One fact per line per repo.
compile-surfaces.md— 26 to 24. Keeps its lookup table. The six surface rows areunchanged byte for byte, which is what keeps the widest-table-row pin at 352 as ruled; only the
thawed row loses its two dates and the retired out-of-scope wording, and the prose around the
table loses its measurement provenance.
lanes/cli.md— 31 to 29. Scope, standing promises, in-seat judgement. Thedispatch-to-draft-PR baseline number is cut: SKILL.md's collection section already rules that
the baseline is read from the lane's own record and is never a constant in the text.
lanes/devx.md— 39 to 38. Scope with the SUBJECT boundary intact, the tworelease-owned channels, the changeset split by publish surface, and the gate-self-description
rule with its anti-no-op limb.
lanes/director.md— 72 to 72. The heaviest narrative in the set. The charter quotationbecomes the authority line it grants; the supersession ledger recording which ruling moved
which duty on which day is gone entirely, and what survives is the current allocation as
rules. Four duties keep their numbering and every never-line.
lanes/engine.md— 36 to 32. Scope, the driver-conformance ledger promise, and the fivein-seat readings including the three-independent-implementations count.
lanes/hotcrm.md— 57 to 53. The two charter quotations become the four rules theyauthorise: platform capability implemented upstream, the exemplar shows platform capability,
no requirement sprawl, dual-edition compatibility. Nothing in scope moves. The changeset-flow
tombstone (an older sentence that was false) is dropped and only the true rule kept.
lanes/services.md— 28 to 27. Scope with the security-boundary human floor, theablation promise, the disclosure discipline, the two serialisation readings.
lanes/skills.md— 35 to 33. Its tier line now names tiers instead of model identifiers,which is where the house style and the file disagreed.
lanes/spec.md— 46 to 43. Scope, the in-seat split criteria, the standing promisesincluding the pre-approved ledger-append class, and the branch-information test, which keeps
its English wording because the wording is the criterion a reader tests against.
The four folded cards
list_issueslabelsis a UNION, not an intersection — every multi-label board reading is wrong, and wrong in the direction that looks right #15121 — the MCPlist_issueslabelsarray is a union: a multi-labeltotalCountis thesize of the disjunction and is always at least each single label's, never an intersection. The
canonical workaround (count each label singly, derive the intersection by inclusion-exclusion,
and read a negative or implausible implied intersection as the model being broken) lands in the
ledger's readings-trap section together with the OR-versus-AND channel contrast.
read answers 200 with a session identity at a core ceiling of 15000, a caller-supplied
Authorizationheader is overridden by the proxy, and a deadHTTPS_PROXYport does not cutthe network. The operational consequence is written as the rule: token-scope conclusions drawn
inside the container do not transfer to a session whose egress is not proxied. The standing
line that the clause-2 checker's
--pairanswers 403 and exits 3 without a token no longerreproduces; it is restated as its current reading (exit 0 with and without a token,
same cause) rather than kept with a since-then tail.
PUT /repos/{o}/{r}/pulls/{n}/update-branchworks from a PM seat and is thezero-file-write way to merge
origin/maininto a PR head, producing a real merge commit withno rewrite;
expected_head_shamust be the full 40-character SHA (a short SHA answers 422);and a base that has not moved answers 422 with no new commits on the base branch, which is
nothing to do rather than a failure. Those three land on the REST table's write side. The
job-log endpoint being refused by the egress proxy (CONNECT 403) and the check-run annotations
endpoint carrying the exit code and the failing command land in the ledger, beside the
existing rule that the assertion text is only in the run-log archive.
enable_pr_auto_mergetool recordsmerge_method: mergewhatever method a seat asks for — harmless here only because themainmerge-queue ruleset squashes, so the platform-readings table should say which reading is authoritative #15481 — MCPenable_pr_auto_mergestores methodmergewhatever was requested (RESTauto_merge.merge_methodreads backmergeeven where the repository setsallow_merge_commit:false), no REST endpoint sets the method and the GraphQL mutation is notserved to agent sessions, so a seat can neither set nor correct it. It is inert on this
repository: the
mainmerge-queue rule carriesmerge_method: SQUASHand the queue performsthe merge. The rule written is the one a seat acts on — the landing method is read from the
branch rule, never from the auto-merge request.
Ratchet
The thirteen
CEILINGSrows inscripts/pm/check-skill-line-ratchet.mjsare re-pinned downat the landed counts (359, 82, 50, 32, 24, 29, 38, 72, 32, 53, 27, 33, 43), each with a one-line
note in the map's own convention. Nothing is raised and no other row moves. Ceilings across the
thirteen fall 956 to 874. Every
MAX_TABLE_ROW_BYTESpin is untouched — the twelve zeros stayzero because those files carry no table row, and
compile-surfaces.mdstays 352 because itswidest row is unchanged byte for byte.
One maintenance edit inside the declared cross-file move, and the gate's own header prescribes
it. The move declared on
platform-readings.mdcarrieswas: 314plus tworuledRaisesrecords totalling 73. Lowering the destination to 359 leaves it only 45 above
was, so the tworecords together read as an over-claim and
crossFileMoveVerdictrefused them by name. Theheader's remedy for exactly this is that a ruled raise since given back is spent and its record
is retired. This rewrite handed back 38 of those 73 lines, so 35 still stand and only one record
can remain. The third-increment record is retired and the intake record kept, which is the
conservative direction rather than a preference: 34 declared against 35 actually standing prices
the move at +11 for a raise that took +10, while keeping the +39 instead would price it at +6,
and under-pricing the move is the failure the header warns about.
was,sourcesand theirpre-move ceilings are untouched, and both rulings are still quoted beside the ceiling above.
Gate line, verbatim:
cross-file move into .claude/skills/pm-dispatch/references/platform-readings.md: +11 (314 to 359, less 34 lines of ordinary ruled raise) against a net source decrease of 20 (lanes/cli.md 35 to 29, lanes/services.md 30 to 27, rest-channel.md 93 to 82); authorised by the ruling this map cites.and
declared cross-file moves: 1, total ceilings down 9 lines.Hygiene, before and after
Per file, measured on the tree: dates matching
2026-0M-DD· corner-quote characters · non-tablelines the ratchet's own scanner reports over 120 bytes.
platform-readings.mdrest-channel.mdrelease-aftercare.mdtrue-green.mdcompile-surfaces.mdlanes/cli.mdlanes/devx.mdlanes/director.mdlanes/engine.mdlanes/hotcrm.mdlanes/services.mdlanes/skills.mdlanes/spec.mdThe third column is 0 on both sides everywhere because the gate reports non-exempt lines, and
compile-surfaces.md's seven over-length lines are table rows whilehotcrm.md's five were twoblockquote lines, two lines inside a multi-line corner-quoted ruling and one carrying a
line-anchored
Blocked-by:example — all structurally exempt. Measured raw instead, ignoring theexemptions, those twelve over-length lines are now zero in both files apart from
compile-surfaces.md's seven pinned table rows: the rewrite removed every construct theexemptions were covering rather than leaning on them.
Also zero across all thirteen after the rewrite: warning and star glyphs, issue or PR numbers in
operational text, decision-frame fingerprint phrases, and model identifiers.
Gates run
Family derived on the tree with
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack,which read the change set from the merge base itself: 14 paths, 35 runnable commands. All 35 run,
all 35 green. Each gate's own verdict line was read; the roll-up:
pnpm check:pm-skill-ratchetcheck-skill-line-ratchet self-test: 155 cases pass.then every ceiling and pin line greenpnpm check:pm-skill-id-lintcheck-skill-id-lint: 24 file(s) clean (pattern /#[0-9]{3,}/g).pnpm check:skill-frame-synccheck-skill-frame-sync: 2 copies of the decision frame are structurally isomorphic across 2 filespnpm check:skill-frame-freshnesscheck-skill-frame-freshness: the decision frame in this tree is current with origin/main (fetched just now).pnpm check:pm-governed-prosecheck-governed-prose: 2 instruction surface(s) name all 5 registered governed surfaces … and claim no others.pnpm check:nul-bytescheck-nul-bytes: OK (scanned 7565 text file(s) … no raw ASCII control bytes).node scripts/check-required-contexts.mjscheck-required-contexts: 6 required context name(s) pinned across 2 workflow(s); 5 instruction surface(s) scanned against 2 retired name(s).pnpm check:doc-authoringdoc authoring guard: 394 files cleanand46 published skill files clean — no internal issue-id references.pnpm check:pm-dispatch-gatesdispatch-gates self-test: 1445 cases pass.pnpm check:ratchet-remedy-authoritycheck-ratchet-remedy-authority: 205 scripts swept …node scripts/check-published-list-mirrors.mjsOK: 1 published list mirror(s) match their constants line for line.node scripts/check-skills-token-ratchet.mjs36 authored bundle file(s) within their ceilingsTwo results that are not a plain pass and are recorded as such:
node scripts/pm/check-governed-merges.mjs --testwith the 14 paths → exit 3, which is theexpected verdict, not a failure:
governed-surface predicate: 13 of 14 path(s) hit the register (5 surfaces, repo-agnostic)./GOVERNED — a human merge is the review record for this PR/.claude/** x13/paths not on the register: scripts/pm/check-skill-line-ratchet.mjs.pnpm --filter @objectstack/lint run check:doc-formula-expressionsanswered exit 3,PREREQUISITE NOT MET on its first attempt (
@objectstack/formulanot built, then@objectstack/lintnot built) — nothing was measured, so that attempt is not counted as apass. After building both through the shared verify lock it ran clean:
check:doc-formula-expressions: 22 record-scoped formula example(s) across 428 files / 1371 TS blocks judged clean.Whole-repo
pnpm lintwas run, not narrowed — through the repo's lock wrapper,bash scripts/pm/os-verify-lock.sh -c 'pnpm lint', which printedVERDICT command-exit 0 · held the lock 103s (1m43s) · waited 0s. The command it ran is therepo's own
eslint . --no-inline-configover the whole tree, so no narrowing claim is needed.Identifier sweep. Every backticked token in the thirteen files at
6b8c67778(436 spans) waschecked against the thirteen rewritten files (413 spans), the rewritten
SKILL.mdand therewritten seven references. Six misses were load-bearing spellings rather than narrative and were
restored inside existing lines, so no ceiling moved: the unexpanded matrix placeholder, the dev
scratch directory name, the full large-datasets pagination message, the merge-main command that
is the only fix for a stale rerun, the repository setting behind the auto-merge method read-back,
and the fully qualified spec zod path. The remaining eighteen are in Table 2.
All gate readings above were taken after the final commit, at
ddf47bdd7(
git rev-parse --short HEAD), which is this PR's head.Table 1 — every surviving rule line (part A: the twelve files other than the ledger)
671 rule lines across the thirteen (340 of them the ledger, which continues in part B, the first
comment on this PR). A rule line is one bullet or numbered entry, wrapped continuation lines
joined; the count rises while the file line count falls because the old files carried multi-line
bullets and the new ones carry one rule per line.
strippedis derived mechanically by matchingeach new rule against its nearest old rule and naming what the old text carried and the new one
does not:
date,quotation,marker,merged(two old rules collapsed into one),narrative(the old text was materially longer),
reworded,unchanged, ornew(no old rule matched — thefolded-card facts and rules split out of a longer bullet).
rest-channel.mdplatform-readings.md配额段;本表是逐操作的通道归属,动手前查一行:它有没有 REST 对应物。rest-channel.md/repos/{o}/{r}/...)加/rate_limit;org 级端点未实测。rest-channel.mdrest-channel.mdgh缺席,而 MCP 与 git 正常。rest-channel.mdrest-channel.md/rate_limit判凭据形态:15000/时 = 凭据活被 repo-scoping 拒;60/时或 auth 错 = 无凭据。rest-channel.mdplatform-readings.md,⛔ 不在本表复述。rest-channel.mdrest-channel.mdGET /repos/{o}/{r}/issues?state=open&labels=a,b&per_page=N,labels=是真 AND。rest-channel.mdLink: rel="next":游标枯竭停在 102,而页号走法得 287 与 448 且与总数符。rest-channel.md&page=N到短页为止,再用GET /repos/{o}/{r}的open_issues_count减开放 PR 核总数。rest-channel.mdrest-channel.mdrest-channel.mdrest-channel.mdstate=open,那是状态读不是查重。rest-channel.mdGET .../issues/{n}·GET .../pulls/{n},assignees、labels、body 齐全。rest-channel.mdlist_issues永不返回 assignees,这条差别本身就是走 REST 的理由。rest-channel.mdGET .../issues/{n}/comments?per_page=100。rest-channel.mdGET .../issues/{n}/timeline:cross-ref、added_to_merge_queue、ready_for_review。rest-channel.mdGET .../pulls/{n}带 Acceptapplication/vnd.github.diff;文件清单.../pulls/{n}/files。rest-channel.mdrest-channel.mdGET .../contents/{path}?ref=...,raw accept。rest-channel.mdGET .../compare/{base}...{head}—— 浅检出上本地祖先判据不可信时的正解。rest-channel.mdGET .../commits/{sha}/check-runs·GET .../actions/runs。rest-channel.mdGET /rate_limit,端点自身零计费。rest-channel.mdPOST .../issues/{n}/comments;改评论PATCH .../issues/comments/{id}。rest-channel.mdPOST .../issues/{n}/labels,定向删DELETE .../issues/{n}/labels/{name}。rest-channel.mdissue_write的整组替换安全。rest-channel.mdrest-channel.mdPOST .../issues· 改正文PATCH .../issues/{n}· 认领POST .../issues/{n}/assignees。rest-channel.mdPOST .../pulls/{n}/requested_reviewers· 开 PRPOST .../pulls带draft=true。rest-channel.mdrest-channel.mdorigin/main合进 PR head:PUT .../pulls/{n}/update-branch,PM 席位可用。rest-channel.mdrest-channel.mdexpected_head_sha必须是完整 40 字符 SHA,短 SHA 回 422。rest-channel.mdrest-channel.mdplatform-readings.md配额段。rest-channel.mdtitle/body/state/base/maintainer_can_modify,无draft(与第 5 条同批核对官方文档,未逐个实调)。断粮出路:等 MCP 恢复,或人工点一下。rest-channel.mdenable_pr_auto_merge。 走合并队列的仓落地必经它 ⇒ 配额红窗无退路;直合仓有退路PUT .../pulls/{n}/merge。rest-channel.md/search/*被出口代理按设计拒绝。退路 = REST 列表端点加本地 grep。 REST 也被会话门关掉的席位 = 一次定向 MCPsearch_issues,⛔ 不宽表扫。rest-channel.mdrest-channel.mdissue transfer:issues 端点表无 transfer 路由 ⇒ 同为 GraphQL-only。 拿不到时当轮改走在目的仓重建配方,配方住platform-readings.md。rest-channel.mdplatform-readings.md。rest-channel.mdrest-channel.mdmerged_by是入队者,⛔ 不是绕队证据:队列合并归属给入队的账户,对队列与直合零分辨力。rest-channel.mdrest-channel.mdPUT .../pulls/{n}/merge在强制队列 ruleset 下回 405。rest-channel.mdadded_to_merge_queuetimeline 事件。③:对已入队 PR 调 update-branch 回不能更新。rest-channel.mdplatform-readings.md队列段,本条只归拢判据。rest-channel.mdrest-channel.mdrest-channel.mdLint·Type Check·Test (shard 1/4 … 4/4)。rest-channel.mdBuild & E2E·Build Docs·Changeset Declaration。rest-channel.mdrest-channel.mdif: github.event_name == 'push'的 job 在merge_group上不报到。rest-channel.md${{ }}的串)是占位符,不是真 context。release-aftercare.mdlanding-operations.md的 MERGED 不是终点;本文是 tagged 发版滚上生产后车道 PM 仍欠的动作。release-aftercare.mdrelease-aftercare.mdrelease-aftercare.mdserver ≈ 33 + 23 × RTT。release-aftercare.mdrelease-aftercare.mdrelease-aftercare.mdrelease-aftercare.mdlocationHint:从运维者自己的机器唤醒就掷到它附近。release-aftercare.mdrelease-aftercare.mdgh workflow run keep-warm)。release-aftercare.mdrelease-aftercare.mdrelease-aftercare.mdrelease-aftercare.md/health200、部署 job 绿或合成 E2E 绿代替。release-aftercare.mdrelease-aftercare.mdrelease-aftercare.mdrelease-aftercare.mdrelease-aftercare.mdrelease-aftercare.mdrelease-aftercare.mdrelease-aftercare.mdrelease-aftercare.mdrelease-aftercare.mdrelease-aftercare.mdrelease-aftercare.mdrelease-aftercare.mdrelease-aftercare.mdrelease-aftercare.mdrelease-aftercare.mdrelease-aftercare.mdrelease-aftercare.mdrelease-aftercare.mdtrue-green.mdtrue-green.mdtrue-green.mdtrue-green.mdbash scripts/pm/os-verify-lock.sh -c 'cmd'。true-green.md$?;排队语义与预算见 os-dev 定义。true-green.mdflock时入口点不拒绝,改跑声明式 unlocked 模式。true-green.mdtrue-green.mdnode scripts/pm/dispatch-gates.mjs不传路径,脚本自己从 merge-base 取变更集。true-green.mdgit diff喂清单:两点差按此刻的origin/main求值,姊妹 PR 的文件会被算进来。true-green.mdtrue-green.md--repo owner/name申报归属可机械拒错。true-green.mdpnpm test。true-green.mdtrue-green.mdtrue-green.mdtype-check(连字符);拼错脚本名的pnpm --filter匹配零脚本、退出码 0。true-green.mdtrue-green.mdpreflight-workspace-dist是 workspace 依赖的 dist 新鲜度守卫。true-green.mdtrue-green.mdcheck-test-typecheck的失败不以error TS行进 CI 日志,turbo 汇总只写#typecheckfailed。true-green.mdtypecheck脚本。true-green.mderror TS的阴性读数在这一族上不成立。compile-surfaces.mdcompile-surfaces.mdcompile-surfaces.mdcompile-surfaces.mdcompile-surfaces.mdcompile-surfaces.mdcompile-surfaces.mdcompile-surfaces.mdcompile-surfaces.mdcompile-surfaces.mdlanes/cli.mdlanes/cli.mdpackages/cli、runtime、verify、qa、types、packages/rest、packages/mcp、packages/observability、packages/client*、cloud-connection、create-objectstack、packages/adapters/*、plugin-hono-server、plugin-dev。lanes/cli.mdlanes/cli.mdpackages/spec恒归 spec 座位。lanes/cli.md/meta路由本体归本席,元数据格式与接受面归domain:spec。lanes/cli.md../platform-readings.md。lanes/cli.mddispatch-gates.mjs只报路径推导的地板,条款②从卡内容判且优先于它。lanes/cli.mdpnpm lint族 ⇒ 本车道派发令恒补一句跑pnpm lint。lanes/cli.mdlanes/cli.mdlanes/cli.mdlanes/cli.mdlanes/cli.mdlanes/cli.mdlanes/cli.mdlanes/devx.mdlanes/devx.mdpackages/lint、packages/sdui-parser、content/docs/**、apps/docs、scripts/(门禁类)、.github/workflows/(门禁接线)、.githooks/、examples/**测试基建面、docker/README.md。lanes/devx.md.github/、scripts/、构建与发布管线、门禁工具。lanes/devx.mdscripts/下时归本席,判据是被改文件的路径。lanes/devx.md.claude/workflows/不是.claude/skills/。lanes/devx.mddomain:*判,反向亦然。lanes/devx.mdlanes/devx.mdcontent/docs/releases/**是 release-owned,恰两条通道;发布页作用域只管 v16 及以后。lanes/devx.mdlanes/devx.mdversion脚本链;能点绿的门禁不等于该点绿。lanes/devx.mdlanes/devx.mdlanes/devx.mdscripts/、docs、test-only ⇒skip-changeset。lanes/devx.mdlanes/devx.mdlanes/devx.mdBlocked-by:放在评论里。lanes/devx.mdlanes/devx.mdgit show origin/main:带路径。lanes/devx.mdFETCH_HEAD。lanes/devx.mdFETCH_HEAD是共享的,会被别的 agent 的 fetch 在两条命令之间冲掉。lanes/devx.mdlanes/devx.mdlanes/devx.mdlanes/devx.mdlanes/devx.mdlanes/director.mdlanes/director.mdlanes/director.mdlanes/director.md/pm-dispatch director。lanes/director.mdlanes/director.mdlanes/director.mdCONTRACT_REVIEW_TIER,dispatch-gates 常量单源,⛔ 本文不写模型名。lanes/director.md../contract-review.md。lanes/director.mdlanes/director.mdpm:seat座位贴、四段协议照旧,与分诊席同款。lanes/director.mddomain:*车道,范围按职责标签跨车道跨仓。lanes/director.mdlanes/director.mdlanes/director.md../decision-analysis.md。lanes/director.mdlanes/director.mdlanes/director.mdlanes/director.md../contract-review.md。lanes/director.mdlanes/director.mdlanes/director.mdlanes/director.mdlanes/director.mdlanes/director.mdlanes/director.mdlanes/director.mdlanes/director.mdlanes/director.mdneeds-user-decision跨仓勤务,按基本原则批呈。lanes/director.mdlanes/director.mdlanes/director.mdlanes/director.mdlanes/director.mdpm:awaiting-maintainer跨仓标签是待人工动作的唯一机器载体。lanes/director.mdlanes/director.mdlanes/director.mdlanes/director.md../state-machine.md。lanes/director.mdlanes/director.md--since-ref锚上一场记录的 tips。lanes/director.mdlanes/director.mdlanes/director.mdlanes/director.mdneeds-user-decision卡立案回滚,事后审计制。lanes/director.mdlanes/director.mdlanes/director.mdlanes/director.mdlanes/director.md../contract-review.md为准。lanes/director.mdlanes/engine.mdlanes/engine.mdpackages/objectql(含 SchemaRegistry)、packages/core、packages/formula(CEL、matches-filter、RLS 谓词求值)、plugin-pinyin-search(落点在编译与查询核心)。lanes/engine.mdobjectql/src/metadata-facade.ts名字带 metadata,仍归本车道。lanes/engine.mdpackages/metadata*(加载、注册、持久化、缓存、目录)、packages/platform-objects。lanes/engine.mdpackages/drivers/driver-*:driver-memory、driver-mongodb、driver-sql、 driver-sqlite-wasm、driver-turso。lanes/engine.mddomain:spec,判据是改变接受面而不是碰到 spec。lanes/engine.md/meta路由本体在packages/rest⇒domain:cli;packages/services/**⇒domain:services。lanes/engine.mdcontent/docs/**与packages/lint⇒domain:devx。lanes/engine.mdlanes/engine.mdlanes/engine.mdlanes/engine.mdlanes/engine.mdlanes/engine.mdSqlDriver的 filter 编译器。lanes/engine.mdlanes/engine.mdlanes/engine.mdlanes/engine.mdlanes/engine.mdlanes/hotcrm.mdlanes/hotcrm.mdlanes/hotcrm.mddomain:*、type 与定级,纪律全文在 SKILL.md 多仓协调规则 4。lanes/hotcrm.mdobjectstack-ai/hotcrm全仓:元数据优先的 CRM 样板工程,不入 spec 依赖链。lanes/hotcrm.mdlanes/hotcrm.mdlanes/hotcrm.mdlanes/hotcrm.mdpm:blocked加Blocked-by:回链。lanes/hotcrm.mdlanes/hotcrm.mdrepo:hotcrm缝标签只给真协调卡,跨仓次序即卡的实质。lanes/hotcrm.mdlanes/hotcrm.mdhalf-state-patrol.yml,无 workflow 即无锚 issue。lanes/hotcrm.mdlanes/hotcrm.mdlanes/hotcrm.mdpm:dispatched与pm:in-review的交付 PR 是否已合并或关闭,先处置半状态。lanes/hotcrm.mdlanes/hotcrm.mdlanes/hotcrm.mdlanes/hotcrm.mdlanes/hotcrm.mdlanes/hotcrm.mdlanes/hotcrm.mdlanes/hotcrm.mdlanes/hotcrm.mdlanes/hotcrm.mdlanes/hotcrm.mdchangeset-check.yml门住每个到 main 或 develop 的 PR。lanes/hotcrm.md.changeset/*.md,对 base sha 求 diff,存量不算。lanes/hotcrm.mdskip-changeset标签,或空 frontmatter 的 changeset 声明本 PR 零发布。lanes/hotcrm.mdprivate: true,门照设不误。lanes/hotcrm.mdtarget:*。lanes/hotcrm.mdchangeset version一次消化存量,加v*.*.*tag 触发 release.yml。lanes/hotcrm.md@objectstack/*包,逐包定版号,非 git pin。lanes/hotcrm.mdlanes/hotcrm.mdlanes/hotcrm.mdscripts/pm/ensure-pm-labels.sh,对 hotcrm 实跑是落地步骤。lanes/hotcrm.mdlanes/hotcrm.mddomain:*与 type 留给分诊;催办不代裁。lanes/hotcrm.mdlanes/hotcrm.mdlanes/services.mdlanes/services.mdpackages/services/*、packages/connectors/*、packages/triggers/*、plugin-approvals、plugin-webhooks、plugin-email、plugin-reports、embedder-openai、knowledge-*。lanes/services.mdplugin-auth、plugin-security、plugin-sharing、plugin-audit。lanes/services.mdpackages/spec—— 触 spec 的卡一律转 spec 座位。lanes/services.mdlanes/services.mdlanes/services.mdlanes/services.mdlanes/services.mdlanes/services.mdlanes/services.mdpnpm-workspace.yamloverrides 与plugin-auth/**当同一个热文件面串行。lanes/services.mdlanes/services.mdlanes/services.mdlanes/skills.mdlanes/skills.md.claude/skills/**(含 pm-dispatch 本体)与skills/**(发布目录,恒英文)。lanes/skills.mdscripts/pm/**PM 循环工具;指令架构文件:根AGENTS.md与根CLAUDE.md。lanes/skills.md.github/CODEOWNERS治理路由半边。lanes/skills.mdlanes/skills.mdlanes/skills.mdlanes/skills.mddirector.md);本席保留 skill 与治理文本。lanes/skills.mdlanes/skills.mdcheck-governed-merges --test带路径。lanes/skills.md--since四仓实跑,⛔ 不凭记忆汇总。lanes/skills.md--tier推导引用;pm-dispatch 根恒契约复审档;条款②闸门照现行。lanes/skills.mdlanes/skills.mdlanes/skills.mdlanes/skills.mdlanes/skills.mdlanes/skills.mdlanes/skills.mdlanes/skills.mdlanes/skills.mdlanes/skills.mdlanes/spec.mdlanes/spec.mdpackages/spec整包唯一契约,语义、文本、机器三面同席。lanes/spec.mdcontracts/**、退役行为半边、strictness 台账。lanes/spec.mdlanes/spec.mdpackages/spec/scripts/**、packages/spec/docs/**。lanes/spec.mdlanes/spec.mdpackages/spec恒归本席,不论谁需要它。lanes/spec.mdpackages/types、schema 与$schema语料、spec pin 耦合与契约决策卡。lanes/spec.mdlanes/spec.mdlanes/spec.mdlanes/spec.mdpackages/spec/src/**/*.zod.ts与 strictness 台账。lanes/spec.mdlanes/spec.mdlanes/spec.mddomain:spec;/meta路由本体在packages/rest归domain:cli。lanes/spec.mdlanes/spec.mdlanes/spec.mdlanes/spec.mderror-code-ledger.zod.ts),三条全中即免本席签字。lanes/spec.mdlanes/spec.mdlanes/spec.mdlanes/spec.mdlanes/spec.mdlanes/spec.mdlanes/spec.mdlanes/spec.mdlanes/spec.mdTable 2 — passages left out, by class and file
Everything below is content that leaves the corpus rather than being re-worded. The rule it
supported survives in the line named beside it unless the row says the rule itself was a
current-state value or a tombstone.
2026-0M-DDoccurrenceslanes/director.md,lanes/hotcrm.md,lanes/engine.md,lanes/services.md,lanes/spec.md,compile-surfaces.mdlanes/hotcrm.mdlanes/director.mdrest-channel.mdlanes/director.mdplatform-readings.mdplatform-readings.mdplatform-readings.mdplatform-readings.mdplatform-readings.mdupdated_atunmoved)release-aftercare.mdplatform-readings.mdlanes/cli.mdlanes/director.mdlanes/hotcrm.mdplatform-readings.mdin:commentsscan hintplatform-readings.mdplatform-readings.mdevent=pull_request(the positive control),this.error((the truncation specimen), the compoundgit rev-parse … && git push …example, the fullStreamable HTTP error:prefix, theAPI rate limit already exceeded for user ID …message,until remaining greater than threshold,GET /search/issues,claude/issue-*platform-readings.mdGET /repos/{owner}/{repo}/issues/{pr}/timelineGET /repos/{o}/{r}/…is used throughout and carries the same routeplatform-readings.mdmain/pr-{number}-{parent sha}platform-readings.md,lanes/hotcrm.md.claude/agents/**,Blocked-by: owner/repo#Nstate-machine.md, which owns itplatform-readings.md-linked:issue, `compile-surfaces.md48f98b0measurement commitTable 3 — literal spellings kept because something machine-readable pins them
Lint & Repo Gates,TypeScript Type Check,Test Core,Dogfood Regression Gate,Build Core,Temporal Conformance (live PG + MySQL)platform-readings.mdscripts/check-required-contexts.mjspins all six bymustName, onAGENTS.mdand on the rewrittenreview-checklist.md. It does not scan this file (Table 4), so these are kept as the operative per-repo required set, spelled to match the pinned namesBlocked-by:platform-readings.md,lanes/hotcrm.mdscripts/pm/check-half-states.mjsgreps the anchored form; the ratchet'sanchoredexemption class names it tooRestart-when:state-machine.mdos-dev-reportplatform-readings.mdscripts/pm/check-half-states.mjsscans for this marker on cardsneeds:contract-reviewlanes/director.mdscripts/pm/check-clause2-carriers.mjs,scripts/pm/check-half-states.mjs,scripts/pm/check-label-desc-cap.mjsandlint.ymlall read this exact labelpm:queue,pm:dispatched,pm:blocked,pm:on-hold,pm:awaiting-maintainer,pm:seat,pm:in-review,finding,needs-user-decision,target:scripts/pm/ensure-pm-labels.shis the label vocabulary's single source andscripts/pm/check-half-states.mjsreads themskip-changesetlanes/devx.md,lanes/hotcrm.md.github/workflows/lint.yml,pr-automation.yml,scripts/check-empty-changeset.mjsCONTRACT_REVIEW_TIERlanes/director.mdscripts/pm/dispatch-gates.mjsexports the constant;check-governed-queue-guard.mjsreads it. Naming the constant is how the file avoids naming a modelgh-readonly-queue/*platform-readings.mdmerge-queue-triage.ymlandcheck-governed-queue-guard.mjsdepend on the ref namespacebash scripts/pm/os-verify-lock.sh -ctrue-green.mdscripts/check-agent-test-spelling.mjsandscripts/check-pnpm-filter-targets.mjsread the wrapper's spellingcheck-governed-merges,--since-ref,--testlanes/director.md,lanes/skills.mdscripts/pm/check-governed-merges.mjsowns the flagsFILTER_LOGIC_CASES,applyHaving,matchesHaving,applyFilterCondition,buildWhereSQL,compileScopedFilterToSql,lowerAnalyticsWhere,matchesFilterCondition,checkCondition,translateFieldOperatorscompile-surfaces.mdcompile-surfaces.mdMAX_TABLE_ROW_BYTESpins its widest row at 352 with zero headroom, so the surface rows are unchanged byte for byte#digitsscripts/pm/check-skill-id-lint.mjs, pattern/#[0-9]{3,}/g固定评估轴/条评估轴/fixed axes/X-axis framescripts/check-skill-frame-sync.mjsFINGERPRINTS, which scans the whole.claudeandskillstreesTable 4 — conflicts found, and the reading taken
lanes/hotcrm.mdcarried five non-table lines over 120 bytes while the ratchet passed onmain, so either the rule is not enforced there or something exempted themEXEMPTION_CLASSES: twoblockquotelines (the charter quotations), two lines inside a multi-line corner-quoted ruling (quotation), one carrying a line-anchoredBlocked-by:example (anchored). The rewrite removes all five constructs, so the landed file satisfies 120 bytes with no exemption relied ontrue-green.mdto name the two required job names and stay that wayINSTRUCTION_SURFACESinscripts/check-required-contexts.mjsdoes not list it — the scan set isAGENTS.md,review-checklist.md,spec-property-retirement/SKILL.mdand twodocs/files. Left as is; the six names live inplatform-readings.md, which is likewise not on the scan set, and are kept there as the operative required set rather than because a gate pins them (Table 3)platform-readings.mdto 359 leaves it 45 abovewas: 314while the tworuledRaisesrecords claim 73, which the gate refuses by name. The gate's own header prescribes the remedy — a ruled raise since given back is spent, retire its record — so one record is retired and nothing else in the declaration is touched. Which record and why is argued above; the choice errs toward over-pricing the moveMAX_TABLE_ROW_BYTESpin of 0, which reds on any table rowcompile-surfaces.mdhas a table and it keeps its pin at 352. The other twelve stay table-freerest-channel.md's check marks are provenance of a kindlanes/cli.mdcarried a 35-50 minute dispatch-to-draft-PR baseline, while SKILL.md's collection section rules the baseline is the lane's own record and never a constant in the textlanes/director.mdsaidcheck:skill-frame-syncholds four copies of the frame; the gate'sCOPIESholds two#15121fact was directed at the readings-trap section, while the pre-existing union-versus-intersection line lived in the quota sectionlist_issueslabelsfamily moved to the readings-trap section, so a seat greppinglabelsfinds one home for the semantics, the arithmetic and the correct read. The quota section keeps only the degradation-ladder step that consumes itlanes/skills.mdnamed two model identifiers in its tier line, against the house style's tiers-only ruleGenerated by Claude Code
Generated by Claude Code