Uh oh!
There was an error while loading. Please reload this page.
docs(skills): repair five semantic minors in the axis-weighting and batch-presentation encoding - #14779
Merged
Merged
Conversation
… encoding Five in-place, zero-net-line corrections to the escalation decision frame's four copies and the decision-analysis reference: 1. The class-2/3 live-presentation route in the internal PM skill restated a stale per-batch cap; it now points at the single home that rules the batch size, so the two cannot drift apart again. 2. The standing adjudication batch flow had no legal move for a final partial batch (an exact-size rule plus a drain-the-inbox rule forbade both presenting short and holding the remainder). The short last batch is now presented as-is. 3. Every weighting clause hard-coded "the other three", an axis-count minus one that the frame-sync gate's MENTION_PATTERNS structurally cannot see. All six sites are now count-free, so no derived count can go stale. 4. Published entry: the shrink-not-grow reading no longer cites an axis definition that does not state it, and the embedded dev template regains "and contract accretion" — the term the zero-pull argument turns on. 5. The lead-with-long-term duty is now unconditional in all five encodings; conflict-scoping is kept only on the cannot-outvote consequence. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LraLgQVGq8egUwfYZpbYt1
os-zhuang
approved these changes
Sep 3, 2026
os-zhuang
marked this pull request as ready for review
September 3, 2026 01:27
os-zhuang
enabled auto-merge
September 3, 2026 01:27
Contributor
This was referenced Sep 3, 2026
Uh oh!
There was an error while loading. Please reload this page.
This was referenced Sep 3, 2026
This was referenced Sep 3, 2026
This was referenced Sep 3, 2026
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for freeto join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes#14146
Five semantic minors in the axis-weighting / batch-presentation encoding, caught by the at-tier compensating review of PR #14142 and fixed exactly as the reviewer prescribed. Every edit is in place: zero net lines in all four ratcheted files, and the published entry shrinks.
Positions are re-measured on today's
main(224f8ea4a); the card's line numbers predate two merges, so they are restated below with the old number in parentheses.Item 1 — stale cap-form restatement replaced by a pointer
Landing:
.claude/skills/pm-dispatch/SKILL.mdL454 (card: L441)…照旧现场呈报,走每批 ≤5 与详细写法纪律。…照旧现场呈报,走常设决裁批流程与详细写法纪律。The class-2/3 live-presentation route carried an inline
每批 ≤5while the single home now rules恰好 5 张— a seat following the old line could present a 2-card batch and claim compliance. The number is gone;常设决裁批流程is the verbatim section heading inreferences/decision-analysis.md, so the pointer is greppable and there is now exactly one place that states the batch size. Line is 119 bytes (limit 120), zero lines added.Item 2 — the final partial batch gets its legal move
Landing:
.claude/skills/pm-dispatch/references/decision-analysis.mdL13- 每批**恰好 5 张,呈完即停等回批**(2026-09-01- 每批**恰好 5 张(末批不足照呈),呈完即停等回批**(2026-09-01恰好 5 张plus收件箱读数为零才收工(L17) forbade both presenting fewer than 5 and holding the remainder — the last batch of any queue that is not a multiple of five had no legal move. Inserted in place on the existing line: 57 B to 77 B, file stays at 54 lines (ceiling 54, headroom 0).Item 3 — count-free wording, in every copy
Chosen: count-free wording. NOT a
MENTION_PATTERNSextension. The reasoning, since the card left the choice open:%N%/%Q%design exists so that an anchor never spells the value it compares. Acount − 1mention check re-introduces a derived arithmetic relationship that the regex must know in two languages — and a regex can only ever see the spellings it enumerates. Miss one (另外三轴,其余三条,the remaining three) and the gate is green while the text is stale: the exact defect being repaired, one layer up.MENTION_PATTERNSextension landed alongside count-free wording would have zero live matches — a dormant pattern, which is the shape this repo's gates treat as rot.frameCountMentionsstill sees and checks the 4 real count mentions (gate output below); this change adds nothing to it and removes nothing from it.Six sites, all
count − 1hard-codings (the card named five weighting clauses; the sixth, L553, is the same defect class in the axis-① worked example — same file already in this claim's surface, same gate family, mechanical, no new verification surface):.claude/skills/pm-dispatch/SKILL.mdL905另三轴合起来投不翻它其余各轴合起来投不翻它references/decision-analysis.mdL51另三轴合起来投不翻①其余各轴合起来投不翻①.claude/agents/os-dev.mdL418推荐以它领起,另三轴合起来投不翻它推荐以它领起,其余各轴合起来投不翻它skills/objectstack-pm-dispatch/SKILL.mdL553On the other three axes theyOn the other axes theyskills/objectstack-pm-dispatch/SKILL.mdL593the other three together cannot outvotethe others together cannot outvoteskills/objectstack-pm-dispatch/SKILL.mdL659lead with it, the other threelead with it, the others另三轴andthe other threeare now at 0 occurrences across all four copies.Item 4 — published entry: dangling anchor and the dropped term
Landing:
skills/objectstack-pm-dispatch/SKILL.mdL594 (card: L703) and L660-661 (card: L859)Read that weight through axis ②'s own definition — shrink special-cases and contract accretion, never grow themRead that weight as shrinking special-cases and contract accretion, never growing themread it as shrinking special-cases rather than as licence to expand speculativelyread it as shrinking special-cases and contract accretion rather than as licence to expand speculativelyThe L594 citation pointed at that file's axis-② definition for the shrink-not-grow reading, which that definition nowhere states (the real anchor deliberately does not ship under the route-B generalization) — it is now self-contained and asserts the reading directly. L660-661 regains
and contract accretion, the term the zero-pull no-conflict argument turns on.Item 5 — the lead-with-long-term duty, unconditional in all five encodings
The card's premise held on today's tree: 3 unconditional, 2 scoped to axis conflict.
.claude/skills/pm-dispatch/SKILL.mdL904-905四轴冲突时推荐以长远的读数领起,另三轴合起来投不翻它— conditional推荐以长远的读数领起,四轴冲突时其余各轴合起来投不翻它— unconditional leadskills/objectstack-pm-dispatch/SKILL.mdL592-593**Axis ② carries the highest weight — at least 50%** when the axes conflict: lead with the long-term reading, and…— conditional**Axis ② carries the highest weight — at least 50%.** Lead with the long-term reading; when the axes conflict, the others…references/decision-analysis.mdL50-51①恒 ≥50%,推荐以①领起— already unconditional.claude/agents/os-dev.mdL417-418推荐以它领起— already unconditionalskills/objectstack-pm-dispatch/SKILL.mdL659lead with it— already unconditionalConflict-scoping is kept, in both rewritten copies, on the cannot-outvote consequence only — which is where it is meaningful, since there is nothing to outvote absent a conflict.
Line and token arithmetic, per file
.claude/skills/pm-dispatch/SKILL.md.claude/skills/pm-dispatch/references/decision-analysis.md.claude/agents/os-dev.mdskills/objectstack-pm-dispatch/SKILL.mdNo line in any edited file exceeds the 120-byte rule; the widest edited lines are SKILL.md L454 (119 B), L904 (118 B) and os-dev.md L418 (120 B).
max-table-row-bytespins are untouched — no table was edited.Published entry, token ratchet (convention
ceil(utf8 bytes / 4)), measured per site:How item 4's added words are paid, inside the same file, without a re-wrap and without a ceiling change: item 4's only cost is
and contract accretionat L660-661, +23 B. It is paid by item 4's own other half — deleting the dangling citationthrough axis ②'s own definition —(38 B, replaced byas, 3 B) at L594 — with item 3's −16 B of count-free rewording on top. The ceiling stays at 9,708 and is not lowered, per the dispatch's explicit no-ceiling-change constraint; the file now sits 6 tokens under it.Published-surface readings (
skills/**diff)Both readings the published surface requires, lines first, tokens beside them:
skills/objectstack-pm-dispatch/SKILL.mdskills/*/SKILL.mdNo net expansion in either reading: this PR corrects wording in place and the published surface comes out marginally smaller. There is no new capability here and therefore no "small feature, big write-up" to price — the one clause that gains words (item 4's
and contract accretion) is paid twice over inside the same file.skip-changesetApplied. The diff publishes nothing from any package:
.claude/**agent protocol plus theskills/**catalog, which ships throughnpx skills add, not through a package release. Measured rather than assumed — none of the six most recent commits touchingskills/objectstack-pm-dispatch/SKILL.mdcarried a.changeset/file (c985ae958,a9b2be0b0,2bff79ae3,bcc9189e6,3d0897459,d250754fd), and2bff79ae3is this card's own parent PR with the identical face set.Gates
Every command ran through
scripts/pm/os-verify-lock.sh(slotissue-14146), each exit code captured by redirect before any pipe. The union below was re-derived after the final commit withnode scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commandsand run atdd9f7d39f— the branch head.check:skill-frame-sync✓ check-skill-frame-sync: 4 copies of the decision frame are structurally isomorphic across 3 files·4 axes: business-need → long-term-soundness → ai-authoring-safety → startup-scope-discipline·binding sentence present in all 4; 4 count mention(s) agree; 40 markdown files scanned for undeclared copies.check:skill-frame-sync --self-test✓ check-skill-frame-sync self-test: 12 cases pass, plus 5 dispatch-gates declaration cases.check:skill-frame-freshness✓ check-skill-frame-freshness: the decision frame in this tree is current with origin/main (fetched just now).check:skill-frame-freshness --self-test✓ check-skill-frame-freshness self-test: 12 cases pass.check:pm-skill-ratchet✓ …SKILL.md is 989 lines (ceiling 1005; headroom 16).·✓ …decision-analysis.md is 54 lines (ceiling 54; headroom 0).·✓ …os-dev.md is 469 lines (ceiling 469; headroom 0).check:pm-skill-ratchet --self-test✓ check-skill-line-ratchet self-test: 111 cases pass.check:pm-skill-id-lint✓ check-skill-id-lint: 23 file(s) clean (pattern /#[0-9]{3,}/g).· self-test14 cases pass.check-skills-token-ratchet✓ …skills/objectstack-pm-dispatch/SKILL.md is 9702 tokens (ceiling 9708; headroom 6).·✓ …36 authored bundle file(s) within their ceilingscheck-skills-token-ratchet --self-test✓ check-skills-token-ratchet self-test: 64 cases pass.@objectstack/spec check:skill-docs✓ skills/README.md·✓ content/docs/ai/skills-reference.mdx·✅ Skill docs in synccheck:nul-bytescheck-nul-bytes: OK (scanned 8052 text file(s) — 8052 tracked, 0 untracked-not-ignored; skipped 7 binary; no raw ASCII control bytes).· self-test75 assertionsFull derived union at
dd9f7d39f— 20 of 22 green, and the two that are not green are NOT MEASURED, not red:check-ci-filter-parity·check-cross-package-test-inputs·check-shard-attestation·check-skills-token-ratchet·check:skill-docs·check:agent-model-declared·check:agent-test-spelling·check:corpus-claim-drift·check:cross-package-test-inputs·check:doc-authoring·check:nul-bytes·check:pm-governed-merges·check:pm-governed-prose·check:pm-skill-id-lint·check:pm-skill-ratchet·check:role-word·check:skill-compatibility·check:skill-frame-sync·check:skill-identifier-liveness·check:skill-frame-freshness— all green.check-test-completeness— exit 3, NOT MEASURED. Its own text: "That list names this script with NO argument… There is no local log to hand it, so the local reading for this gate is NOT MEASURED. ⛔ It is not a red, and there is nothing here to fix." It consumes aturbo run testlog that only CI produces; this diff touches no test.check:doc-formula-expressions— exit 3, PREREQUISITE NOT MET (@objectstack/formulais not built in this worktree). Not a finding. Building it needs the shared verify lock, and two bounded acquisitions timed out at the 540 s budget behind a sibling's run (exit 99, place kept — also NOT MEASURED, never a red). Declared narrowing, measured from the gate's own predicate rather than asserted:fencedBlocks()keeps only fences whose language tag ists,typescriptortsx, and the text scan isFIELD_RULE_TEXT_RE(visibleWhen|readonlyWhen|requiredWhen). Across all four edited files the gate would parse 0 fenced blocks — the fences present arebash,json,textand bare, none of them a parsed language — 0 of the 17 changed lines fall inside a parsed block, and there are 0FIELD_RULE_TEXT_REoccurrences. The gate has nothing to read in this diff, so its verdict cannot move. CI builds the package and runs it for real.Beyond the derived union I also self-scanned the four edited files for raw control bytes (
grep -naP '[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]'): zero hits.Premise notes
224f8ea4a.SKILL.mdL553 (On the other three axes they), is the samecount − 1hard-coding inside axis ①'s worked example. Fixed here rather than filed: same defect class, same file already in this claim's surface, mechanical, no new verification surface — and leaving it would have left the drift class half-open in the copy that ships to third parties.MENTION_PATTERNSblindness to另N轴is real (neither pattern can match it, verified against the script); both published copies do sit in the entry after the skills(pm-dispatch): split the entry into SKILL.md + rules/ under #14296 items 1 and 4 (entry 9,708 tokens, package net −21) #14660 split.defineHook()vs the platform's own examples · #13597 Phase-2 — X0 quote policy ·CLAUDE.mdexcerpt form · the four-copy decision frame · cross-file line-budget moves #14685) may later retire two of the four copies. This fix is landed on all four and survives either ruling.🤖 Generated with Claude Code
https://claude.ai/code/session_01LraLgQVGq8egUwfYZpbYt1
Generated by Claude Code