Skip to content

Commit 9acb9ed

Browse files
os-litantclaude
andauthored
refs(pm-dispatch): bank five measured platform readings, paid for by same-file compression (#12659)
* docs(pm-skill): record that a free-text negation is inert in search_pull_requests A leading `-` on a quoted phrase is silently dropped: `-"Part of"` and `"Part of"` return the same total_count and the same top hit, and 197 + 197 does not reconcile against the unfiltered 216 — so the two are not a partition of anything. The qualifier half of the same query keeps exact arithmetic (linked:issue 2903 + -linked:issue 216 = 3119), which is what makes the failure dangerous: one call returns correct arithmetic from the qualifiers and silent nonsense from the free text. The row carries the discipline that follows — any stratification built on a free-text term must run its complement and sum both against the unfiltered population. Paid for in the same file (line ratchet 314/314, headroom 0): - search_issues session-zeroing row 12 -> 10: dropped "不是工具/平台级" (survives as 故障是**会话级**), the perPage pointer (own row above), the "极易半途而废" aside (survives as the 226/100 specimen) and the undetermined-mechanism tail (survives as ⛔ 已推翻别再追). - 读数五坑 `gh` clause 7 -> 5: dropped the `command -v gh` exit-1 evidence (survives as **容器里没有 `gh`**) and the pipe-exit-code cross-reference (survives in os-dev.md's 门禁结果读法 clause). - auto-tier classifier row 5 -> 4: label-POST specimen compressed to 判定还跨天翻面, keeping the cross-day fact and dropping the anecdote. - quota-per-account row 7 -> 6: dropped 端点自身不计费 (survives at the 开轮先读配额 clause's "免费") and the used-10461/core-7 specimen (survives as the independent-pools reading in the 默认读序 row). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MnijPVVDakqK2J335JoJtq * docs(pm-skill): name the reachable positive enqueue instrument, and that auto_merge is unstable The merge-queue rows recorded what cannot tell you a PR is enqueued (`auto_merge` reads back off, `merge_group` is a false negative off the queue front) and named the authoritative confirmation as a webhook — so a seat with a blind instrument and a ⛔ rule that depends on the reading it cannot make did the predictable thing and re-armed an already-enqueued PR. Per the filing seat's own correction, the webhook IS reachable from a subscribed session (measured within ~1s of the timeline event), so the row states the division rather than a gap: the timeline is the reading you make — queryable on demand, both directions from one call, and it separates "never enqueued" from "enqueued then ejected" — while the webhook is push-only corroboration that a fresh context or an unsubscribed seat cannot recover. `auto_merge` is upgraded from absent to UNSTABLE: the same PR read `set` and then `None` within a minute, so "not armed" is never a conclusion. Sits beside the just-landed mergeable_state / update_pull_request / draft-dequeue reshaping; none of those cuts is reopened. Paid for in the same file (line ratchet 314/314, headroom 0): - MCP read-side entity row 7 -> 5: dropped the write-side shape enumeration (survives in the 写侧实测行为 rows it pointed at) and the MCP-or-API attribution aside, keeping the &amp; boundary. - REST-availability row 12 -> 11: shift matrix trimmed to the two readings that prove 门态逐容器变; the per-entry gh/rate_limit details survive at the 单调用凭据判别 clause and the 读数五坑 gh clause. - probe-branch row 8 -> 7: dropped the pre-claim-check restatement (survives as 失效方向是活卡被永久读成已被认领) and the undiagnosed-cause enumeration, keeping the boundary itself. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MnijPVVDakqK2J335JoJtq * docs(pm-skill): record that the session proxy's /search 403 parses as a clean zero Unauthenticated REST from inside a session reaches repository-scoped paths only; anything under /search/ is refused by the proxy. The refusal body is valid JSON, so a caller reading total_count off it gets None and formats it as `total: None` — one character away from a real empty result set. A duplicate check that ran three such queries produced three clean-looking zeros, and the request never ran at all. The instrument for /search questions is the MCP search tools; repo-scoped enumeration is unaffected. Placed directly under the session-zeroing row so that row's "见下条" pointer resolves, and it carries the pairing the card asked for: run the positive control FIRST, because a zero that matches your expectations is the one you never re-check — here the control zeroing alongside the others is the only reason the artefact was caught. Paid for in the same file (line ratchet 314/314, headroom 0): - truncation-diagnosis row 12 -> 10: dropped the WebFetch restatement (the same instruction survives in the merged ⛔ 永不单凭 MCP 读判截断 clause), the three-seat observation anecdote, and the 0-span/10-tag control example (the 判据 itself survives verbatim). - sanitizer author-rule row 7 -> 6: the comment-exemption history compressed to ⛔ 评论不豁免 (the mechanism survives in the 评论 row below it). - sanitizer issue-body row 9 -> 7: merged the two fenced-behaviour readings into one dated clause, dropped the negative-lookbehind aside and the "同类标记在评论里存活" note whose rule survives as ⛔ 评论不豁免. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MnijPVVDakqK2J335JoJtq * docs(pm-skill): record that issue_read get_labels cannot resolve a PR number `issue_read` with method `get_labels` and a PULL REQUEST number fails with a GraphQL resolution error — its query resolves the Issue type only, so the REST convention that a PR is also an issue does not carry over. Measured twice on different PRs by different dev runs in the same hour. Label read-backs on PRs are a mandated step, so every dev walks this path and re-derives the workaround alone; the row names the working read (`pull_request_read get`, whose response carries the labels array) and rules out the obvious fallback of spending a search-channel call to answer a single-PR question. The failure is loud, which is the good direction — the row exists to stop the re-derivation, not to prevent a wrong answer. Placed with the other label-semantics traps (`labels` OR-vs-AND, the whole-set replace) so the read-back rule and its instrument sit together. Paid for in the same file (line ratchet 314/314, headroom 0): - MCP-parameter row 10 -> 9: the OR-side evidence keeps the sharper of the two specimens (a two-label "intersection" wider than one of its own inputs) and drops the duplicate one. - list_issues-assignees row 3 -> 2: dropped the trailing ⛔ restatement, which repeats 清单只是候选名单 verbatim in imperative form. - MCP list/search row 3 -> 2: dropped the navigational pointer to the session-gate row printed directly above it. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MnijPVVDakqK2J335JoJtq * docs(pm-skill): record the tier-quota death shape and the per-path mandate re-derivation Two rows, both measured 2026-08-27. A dispatched subagent that terminates mid-edit because the account's model tier hit its limit is a THIRD death shape, and the fact table had no name for it: the host reports the limit, so it is neither an ordinary subagent death nor a maintainer abort — the dispatch is dead, the premise is intact, and re-dispatch is blocked on a resource rather than on anything about the card. Handling is dead-claim recovery plus worktree rescue, not premise re-verification and not an escalation. No pre-flight probe exists (quota state is observable only once a dev dies inside it), so the mitigation is dev-side WIP-committing, which the row says rather than implying. The second row is what keeps the lane moving. A mandated tier must not be downgraded because it is unavailable — that is the substitution the downgrade fuse refuses — but "this lane is fable-mandated" is usually recalled rather than derived, and the recalled version is too wide. Re-deriving with dispatch-gates --tier PER FILE SURFACE splits a blocked fold instead of stopping it (measured: SKILL.md and .claude/agents/** are mandated; scripts/pm/** and references/** carry no path mandate, turning a fully-blocked three-card fold into one blocked half and three runnable ones). The path line is a floor, never a clearance — content clauses are still judged separately. Paid for in the same file (line ratchet 314/314, headroom 0): - sanitizer comment row 8 -> 6: dropped the second-order anecdote (the card recording the incident truncating at the same point), the safe-authoring recipe (verbatim in the author-rule row above) and the "人看着像正常收尾" restatement; the truncation shape, the fuse and the worst-case boundary all stay. - silent-downgrade rows 9 -> 8: the host-fork row was entirely a modifier on the row above it, so it becomes that row's ⚠️ clause; both host readings, both dates and the transcript fallback survive. - blocked-download row 3 -> 2: dropped the unverified-verdict anecdote and the zero-hit cross-reference; os-dev.md carries the same rule with the same evidence. - enable-sequence row 8 -> 7: dropped the stale-PR-reading specimen, whose fact (contradictory merged booleans) is the 二义读数 row's subject. - default-read-order row 8 -> 7: kept one of two specimens for independent metering. - git-first row 11 -> 10: dropped the container-has-no-gh duplicate (the 读数五坑 row asserts it) and the search/core independence duplicate (the default-read-order row above states it). - org-authorization row 3 -> 2: the valid-JSON-403 mechanism now lives in the session-proxy row, so this row cites it instead of restating it. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MnijPVVDakqK2J335JoJtq --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent 3519f8d commit 9acb9ed

1 file changed

Lines changed: 117 additions & 117 deletions

File tree

0 commit comments

Comments
 (0)