Uh oh!
There was an error while loading. Please reload this page.
skills(pm-dispatch): optimization flight — monorepo-only lore cut, the report JSON printed once, upstream reporting pointed at objectstack-platform, five drifts synced to the dev contract (net −2,982 tokens) - #14444
Merged
os-zhuang merged 5 commits intoSep 2, 2026
Conversation
…, point upstream reporting at objectstack-platform PMD-C-01: the 882-token upstream-reporting job becomes a residue that points at objectstack-platform's "The App / Platform Boundary" section by heading and keeps only what this loop adds (derive the upstream repo, actionable report, file as a guest, park honestly). PMD-E-05: "Multiple PMs — shard by repository" collapses to one Guardrails bullet. PMD-E-02: "One semantics, N independent implementations" retired from the published surface (a platform compiler concern, not an app project's). PMD-E-03: the two platform-governance non-escalation bullets deleted; the frame block below them is untouched (check:skill-frame-sync green). Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LraLgQVGq8egUwfYZpbYt1
…ort JSON, no PM-authored PRs PMD-B-03: the sanitizer specimens are gone; the rule and its measured one-line evidence stay. PMD-B-02: the report JSON is printed once (in the template); the "Report contract" section keeps only the two rules the second copy added. PMD-G-01: "the PM's own tooling PRs" clause deleted — it contradicted "The PM writes no files". Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LraLgQVGq8egUwfYZpbYt1
…tract; "enforces" reads "requires" F-01: the report is delivered twice in both modes, GitHub first, first line the literal plaintext marker (never an HTML comment), read back; the "lossless channel" claim is gone (it was contradicted by the collect step). F-02: the template re-checks the issue's premises; the report carries premise_still_valid, and a no-PR report with premise_still_valid: false plus evidence is a first-class delivery. F-03: never git stash — the stack lives in the common .git and is shared by every worktree; park work as a wip commit or a patch file. F-04: the claim comment carries a Session: line; the race check reads session ID or branch. F-05: the empty branch is pushed before any edit (also the write-access probe), so the stale-claim reclaim can never fire against a live agent. IF-2: the PM-side resource paragraph says the template "requires" the lock, not "enforces" it — the mechanism is the host project's. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LraLgQVGq8egUwfYZpbYt1
…the lock design spec as constructs PMD-D-01 (+E-01): the sweep rationale keeps the three-disjunct predicate, the scoping caution and the updated_at floor; the cross-seat producers, the "steward automation" / "lane" / "protocol posts" vocabulary and the anecdote go. PMD-D-02: the eight-card baseline sample is gone; the rule that the baseline is measured in your own project stays. PMD-D-03: the cancelled-timer anecdote is gone; the two check-in rules stay. PMD-E-04: the four correctness properties of a lock wrapper the customer does not have collapse to one line; the mechanism stays the host project's. Also trims the PMD-C-01 residue to <= 250 tokens (the card's ceiling). Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LraLgQVGq8egUwfYZpbYt1
…ger; regenerate the catalog The description no longer advertises the upstream-reporting job (the doctrine lives in objectstack-platform; this file keeps a pointer). skills/README.md and content/docs/ai/skills-reference.mdx are generator output (pnpm --filter @objectstack/spec gen:skill-docs), not hand edits. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LraLgQVGq8egUwfYZpbYt1
os-zhuang
approved these changes
Sep 2, 2026
os-zhuang
marked this pull request as ready for review
September 2, 2026 08:26
os-zhuang
enabled auto-merge
September 2, 2026 08:26
Uh oh!
There was an error while loading. Please reload this page.
os-zhuang
deleted the
claude/issue-14300-skills-pm-dispatch-optimization
branch
September 2, 2026 08:57
os-litant pushed a commit
that referenced
this pull request
Sep 2, 2026
…ent template — the verify-lock non-guarantee and the ratchet funding discipline The follow-up sync PR #14444 recorded, from .claude/agents/os-dev.md on origin/main: (1) resource rule 1 now states the lock's non-guarantee — it does not promise an idle machine, only excludes work routed through it, so wall-clock readings under a hold are shared-box readings; (2) a size ratchet is paid only by deleting content — a re-wrap is not payment, a densification that adds nothing is a repair, a ceiling is raised only by the maintainer, nothing left to delete means "blocked". Additions +108 tokens, funded in the same package: three dispatch-prompt non-negotiables that restated the template's binding-file paragraph, the "When to STOP" rule and rule 4 verbatim; the template's top-paragraph restatement of the final-message rule; the sanitizer trap's HTML-comment clause (stated at the report block); and rule 4's published-only rationale sentence about disk exhaustion, which the oracle does not carry. Package 11,556 -> 11,546 (-10 for this commit, -21 against main). Ratchet rows re-pinned at the landed counts: entry 9,708, rules/dev-template.md 1,838. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LraLgQVGq8egUwfYZpbYt1
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.
Part of #14300
Member card of the skills catalog optimization program #14292 (maintainer mandate 2026-09-02, verbatim: 「审核所有的 skills,进行全面的优化。」). The audit record (
audit/objectstack-pm-dispatch/findings.md) is the second comment on #14300 and is the finding-by-finding spec for this PR. PMD-B-01 (split the template intorules/) and PMD-H-01 (evals) are deferred to #14296 items 1 + 4 and 2, so this PR isPart ofand #14300 remains open. Session: https://claude.ai/code/session_01LraLgQVGq8egUwfYZpbYt1 — branchclaude/issue-14300-skills-pm-dispatch-optimization, base96b627d1, headea50dfb5.Files:
skills/objectstack-pm-dispatch/SKILL.md(hand-edited, shrink-only), plusskills/README.mdandcontent/docs/ai/skills-reference.mdxas generator output only (pnpm --filter @objectstack/spec gen:skill-docs, forced by the PMD-A-01 description edit)..claude/skills/pm-dispatch/**and.claude/agents/os-dev.mdwere read as the comparison oracle and are not touched. No other package.Clause-②: no— no contract surface (0 TypeScript fences, no accept/reject semantics).Token delta (convention: ceil(utf8 bytes / 4),
node scripts/check-skills-token-ratchet.mjs)skills/objectstack-pm-dispatch/SKILL.mdskills/**, shipped tree)skills/README.mdcontent/docs/ai/skills-reference.mdxLines: 1,086 → 879. No re-wrap counted as payment; every addition below is paid by a deletion in the same file.
Gap vs the card's target (≈ −3,600 after exclusions) — itemised, not smoothed
Delivered −2,982; the card's post-exclusion estimate was ≈ −3,600 (its −4,255 minus deferred PMD-B-01's share, minus PMD-D-04, minus the drift-sync additions). The ≈ 620-token gap, by source:
premise_still_validnote)Part of,Blocked-by:, follow-up chores)Per-item 落点 | before | after (keyed by finding id)
Line numbers: before =
origin/main96b627d1(byte-identical to the auditeda59f78d, md53948bdb8…), after = headea50dfb5.:916-985→:801-818:987-1031→:848-853:416-452→ deleted:591-615→ deleted (list now:504-515):191-225→:189-202;:181→:179updated_atfloor; "lane" dropped from the classification examples:509-527→:444-451:485-495→:427-430:765-781→:674-679:346-357→:326-331:892-913→:791-797open_questions/out_of_scope_findingsrules kept:558-559→ deleted (bullet at:481):8-14→:8-12:455-457,:465-469,:474-475,:736-739,:867→:390-400,:408-410,:414-417,:634-637,:764-767dev-report(never an HTML comment), read back, then the final message; collect reads the comment before counting an agentblocked:665-669,:774,:795-797premise_still_valid: false+ evidence is first-class);"premise_still_valid": truein the JSON; PM re-triages onfalse:650-653grep -c stash= 0git stash— the stack lives in the common.git, shared by every worktree; park work as awipcommit or a patch file:334-344→:311-324Session:line in the claim shape; race check reads session ID or branch:806-807→:648-650,:704:341-350now matches the template:1037-1038→:824-825excluded_by_gate: PMD-D-04 — check:skill-frame-sync pins both copies— the gate anchors the PM copy at "every option on the four fixed axes below." (:643→:540) and the template copy at "Analyze every option on four fixed axes:" (:832→:729), 4 copies / 3 files / 4 axes; D-04's only remedy removes a copy the gate requires. Neither axis block is edited.premise_false:none — every audited span was found at its stated lines (the file is byte-identical betweena59f78dand96b627d1).Not in this flight (listed, not smoothed): PMD-A-02 (README routing bullet, +25 unpaid, needs a ruling), PMD-E-06 (LOW-confidence reorder, not in the card's table), PMD-B-01 / PMD-H-01 (deferred to #14296).
Deviations disclosed
dev-reportmarker (made a fixed literal rather than "such as"); the internalos-dev-reportis this repo's instance of it, not a published name.Follow-up sync once #14229 merges (⛔ not pre-synced — unmerged text)
Gates — all at head
ea50dfb5Baseline on the untouched worktree, then after every commit:
pnpm 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";pnpm check:skill-frame-freshness— "✓ … the decision frame in this tree is current with origin/main (fetched just now)".Dispatch-named:
node scripts/check-skills-token-ratchet.mjs— "✓ … skills/objectstack-pm-dispatch/SKILL.md is 11567 tokens (ceiling 14549; headroom 2982)";pnpm check:skill-compatibility— "✓ … 11 SKILL.md file(s) reconciled against 78 workspace packages";pnpm check:skill-identifier-liveness— "OK — Leg 1: 500 citation(s) over 48 published file(s) … (5 ledgered exemption(s)); Leg 2: 9 registered exhaustive section(s)" (none bound to this file; the three Leg 1 exemptions for this file —backlogRepo,conventionsFile,routingLabelPrefix— still resolve);pnpm --filter @objectstack/spec check:skill-docs— "✅ Skill docs in sync";pnpm check:nul-bytes— "OK (scanned 7875 text file(s) … no raw ASCII control bytes)".Re-derived union —
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commandsfrom the tree atea50dfb5("gate list derived from the tree of 'objectstack-ai/objectstack' at commit ea50dfb"), 36 commands, each exit code captured by redirect before any pipe: 33 green on the first pass;pnpm --filter @objectstack/lint run check:doc-formula-expressionsand… check:doc-security-posturegreen after building@objectstack/formula/@objectstack/lint(first pass exit 3 = PREREQUISITE NOT MET, not a red);pnpm --filter @objectstack/spec run check:skill-examples— green after buildingtypes/client/client-react("✅ 259 prose examples type-check across 3 surface(s) — every marked block parsed, so tsc ran the SEMANTIC pass on all of them"; the first-pass exit 1 was the gate's own prerequisite refusal,packages/client-react/distunbuilt);node scripts/check-test-completeness.mjs— NOT MEASURED locally by the gate's own design (exit 3: "grades a savedturbo run testlog, and no log was named"; CI tees the log).node scripts/check-empty-changeset.mjs --base origin/main— "✓ No empty-frontmatter changeset introduced by this diff".Heavy steps (
@objectstack/spec,types/client/client-reactbuilds,check:skill-examples) ran underscripts/pm/os-verify-lock.sh(OS_VERIFY_LOCK_SLOT=issue-14300).Changeset
skip-changesetlabel: nothing is released by any package change — the diff touchesskills/**andcontent/docs/**only, neither is a workspace package;scripts/check-empty-changeset.mjsconfirms no changeset is added.🤖 Generated with Claude Code
https://claude.ai/code/session_01LraLgQVGq8egUwfYZpbYt1
Generated by Claude Code