Uh oh!
There was an error while loading. Please reload this page.
docs(skills): the four small internal skills — seven dead references, four copies replaced by pointers, and the live-elsewhere never-remove verdict - #14598
Merged
Conversation
…/C-06/D-01/F-01 + three dead references SPR-C-05 adds the fifth section-0 checkbox for the ledger's `live-elsewhere` verdict: dead here by measurement, genuinely enforced in a sibling repo, and therefore NEVER a removal candidate — what to check instead is its attestation discipline (foreign pointer, cross-repo scope, dated `verifiedAt`, 180-day expiry), verified at source against the ledger README and the gate that executes those four criteria. It is paid for by SPR-C-01 and SPR-C-04, so no ceiling is raised. SPR-C-01 deletes the dormant-gate trap (the job and its `paths` filter no longer exist). SPR-D-01 replaces four traps that duplicate AGENTS.md and the dev-agent definition with a pointer at those anchors. SPR-C-04 replaces the hand-rolled ten-name gate loop with the one wrapper command, and SPR-C-03 completes the pure-source-audit list from three names to all five. SPR-C-02 rewrites the strict-delete route onto the shared `strictObject()` guidance slot and its audit test. SPR-C-06 drops a rotting hand count in favour of the pin test that actually judges the corpus. SPR-F-01 adds the ADR-0087 disposition marker the changeset row omitted. Dead references corrected: the orphans script, the advisory-lint file's new package, and the consumed changeset sample. File: 337 -> 333 lines (ceiling 337); widest table row 328 -> 326 bytes (pin 328). Anchors untouched. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LraLgQVGq8egUwfYZpbYt1
… anchor + stock-app-name fix DOG-C-01: the ablation predict-then-mutate rule was an 18-line second copy of the dev-agent definition's own rule — same criterion, same unaliased-import ledger, same two measured incidents — and both texts already said the rule is not dogfood's. It becomes a two-line pointer at that anchor. X-01 is decided by pointer: the platform-checklist runner doc is the environment anchor, and section 0 now says so and carries only what that anchor lacks. DOG-F-01 is exactly that case — the runner doc names dogfood section 0 by name as the origin of the `-p`-alone trap, while this file had no mention of the variable the self-pinging connectors actually read. Same section, same defect class, evidence pinned by the anchor: the stock-boot app-name list dropped an app that a stock boot does not load, so an empty `?id=` result there is correct rather than the missing-metadata false P0 the bullet exists to prevent. File: 157 -> 147 lines (ceiling 157). Anchors untouched. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LraLgQVGq8egUwfYZpbYt1
…P lacks, CLA-C-02, README anchor
CLA-C-01: the orchestration section opened by declaring itself "not a second
copy of the process" and then restated the sweep doc's six steps one for one,
plus its angle table. It is rewritten to a pointer at that doc plus the three
clauses measurably absent from it (measured, not assumed: zero hits there for
worktree/PD#11, and zero for subagent/sequential): worktree-first, the
orchestrator-exclusive write surfaces, and brief-is-a-hypothesis.
CLA-C-02 travels with it: the stale waiver count ("four of six expired") was
the oldest of three disagreeing numbers and its containing clause was one of
the restated steps, so the number is gone rather than corrected in a second
place. The surviving anchor states the measured truth, and the checklist gate
itself reports `0 waived` today.
The README citation moves off a term that no longer exists in that file and
onto the section that does.
X-02: this file keeps the sole copy of the no-subagent degradation clause —
the "no other gaps" conclusion it protects is a sweep conclusion.
File: 62 -> 53 lines (ceiling 62). Anchors untouched.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LraLgQVGq8egUwfYZpbYt1…ters, X-02 CLT-B-01 was unexecutable as written: the Tier-1 batching step told the runner to read `automated.ref` from the selector's `--json`, which projects only id, priority, surface, since and revision. The field is real but lives in the area file, so the step now says where to read it. CLT-C-01 replaces a memory-sourced blanket model tier with the rule the dispatch protocol actually binds — derive the tier from the current dispatch-gates output, never from recall. CLT-C-02/C-03 stop re-copying the runner doc's rules 1-2. C-03 becomes a pointer. C-02 keeps the disclosure guardrail in place (the runner doc states in its own text that this is one rule deliberately written in both places, so deleting this copy would falsify an anchor I must not edit) but drops the elaboration and, with it, the precedence claim that same anchor explicitly denies. X-02: the no-subagent degradation clause now points at its single home in the sibling skill instead of restating it near-verbatim. File: 238 -> 234 lines (ceiling 238). Anchors untouched. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LraLgQVGq8egUwfYZpbYt1
This was referenced Sep 2, 2026
os-zhuang
approved these changes
Sep 2, 2026
os-zhuang
marked this pull request as ready for review
September 2, 2026 15:01
os-zhuang
enabled auto-merge
September 2, 2026 15:01
Uh oh!
There was an error while loading. Please reload this page.
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#14317
Fixes#14058
Member card of the skills catalog optimization program (maintainer mandate 2026-09-02, verbatim and untranslated: 「审核所有的 skills,进行全面的优化。」). Sibling PR in objectui carries VFY-C-01 (
Part of #14317).Clause-②: no— nothing here states a platform contract; noneeds:contract-review.Per-finding record
spec-property-retirement§0live-elsewhererow is dead here by measurement, genuinely enforced in a sibling repo, and never a removal candidate; what to check instead is its four attestation criteria and the gate that executes them:329-332check-generatedruns behind apathsfilter inci.yml; add the path in the same PR"ci.ymlhas nopaths:at alldist, pipe-eaten exit code, sequential gate masking,--checkvs bare):300-311check:*loop — the "match by hand" the root instruction file forbids:313-314:81(the route table)$ZodErrorMappassed toz.object(shape,{error}).strict()strictObject()guidance:slot, its set-keyed form, its worked example and the audit test that now covers it:145dogfood:66-83dogfood§0OS_PORT, though the runner doc names this section by name as the trap's origin-palone leaves them dialing 3000dogfood§0checklist-author:33-51:46-490 waivedtodaychecklist-test:78-87automated.ref"from the selector" — which projects only id / priority / surface / since / revision:96-97opustier, sourced from memory:229-235:102-105checklist-author; the other points at it. Provenance noted, not re-litigated: both copies came from the same maintainer roundDead references — each with its positive control
SPR:103scripts/liveness/orphans.mtspackages/spec/scripts/liveness/orphans.mtsSPR:261packages/cli/src/utils/lint-liveness-properties.tspackages/lint/src/lint-liveness-properties.tsSPR:282.changeset/tool-inert-keys-removed.md.changeset/*-retired.mdSPR:329-332theci.ymlpathsfilterci.ymlhas nopaths:CLA:42the README's "deep-test contract"## Item anatomyCLT:78-87automated.reffrom--json{id, priority, surface, since, revision}Line delta per file
.claude/skills/spec-property-retirement/SKILL.md.claude/skills/dogfood-verification/SKILL.md.claude/skills/checklist-author/SKILL.md.claude/skills/checklist-test/SKILL.mdEvery file shrinks; no ceiling is raised and the ratchet script is untouched. The SPR-C-05 addition is paid in the same file by SPR-C-01 and SPR-C-04, so the ceiling raise 337 → 340 authorized on #14058 (2026-09-01, director batch #26) is not taken — the ruled TEXT lands, including the recognizability half that ruling insisted on ("dead here by measurement / genuinely enforced in a sibling repo"); only its funding route changes, from a raise to the sanctioned pay-by-deletion. The gate now reports 2 bytes of table-row headroom on that file; per this flight's constraint that slack is left for the corpus audit's Phase 3 to re-lock, not taken here.
premise_false: none — every finding's premise held when checked against this base.Three notes where the work differed from the brief, each measured
spec-property-retirementskill predates thelive-elsewhereverdict — its ledger-verdict discipline never names the never-remove cross-repo case #14058 was carried out: the ledger's status vocabulary islive/experimental/planned/dead/live-elsewhere.inconclusive, noted as a zero-hit term during triage, is not a ledger status at all (zero hits in the vocabulary table and in the liveness scripts), so no vocabulary is missing on its account.check:pm-skill-id-lintdoes not bind anything in these four files — its scan set is the dispatch-protocol tree plus the dev-agent definition and the root instruction file. No section id or finding id in these four is load-bearing for it, which is why sections could be restructured. Verified before the first deletion.Gates
All at head
7df16bc7, which equals the pushed remote head and the tree every command below read. Exit codes captured by redirect before any pipe. Heavy runs serialized through the shared verify lock (slotissue-14317).pnpm check:pm-skill-ratchetspec-property-retirement/SKILL.md is 333 lines (ceiling 337; headroom 4)andwidest table row is 326 bytes (pin 328; headroom 2)pnpm check:pm-skill-id-lintpnpm check:skill-frame-syncpnpm check:skill-frame-freshnesspnpm check:pm-governed-mergespnpm check:doc-authoringpnpm check:agent-test-spellingpnpm check:cross-package-test-inputs·node scripts/check-cross-package-test-inputs.mjsnode scripts/check-ci-filter-parity.mjsnode scripts/check-required-contexts.mjsnode scripts/check-shard-attestation.mjspnpm --filter @objectstack/lint run check:doc-formula-expressions58 cases passedself-test, then22 record-scoped formula example(s) across 426 files / 1385 TS blocks judged clean,9 @example(s) judged clean,14 predicate(s) judged cleanpnpm --filter create-objectstack exec vitest run --maxWorkers=2 src/template-consistency.test.tsTest Files 1 passed (1) · Tests 35 passed (35)— themetadata.internal: trueenforcement; all four files still carry the markernode scripts/check-test-completeness.mjsPREREQUISITE NOT MET — this gate grades a saved turbo run test log, and no log was named. It does not run tests and cannot produce one; CI tees the log and passes the pathThe gate family was re-derived from the real changeset after the last edit (
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands, 4 paths vs merge baseaaa4e6578, three-dot semantics) and the whole derived list is above. The first union run returned sixexit 3PREREQUISITE-NOT-MET results because the fresh worktree had nonode_modules; they were re-run green afterpnpm install, and the formula/lint dependency closures were built before the doc-formula gate could measure anything.Repo-level
pnpm lintwas not run, and this is declared rather than implied: it is the CI-owned run. No narrowed substitute is claimed for it.skip-changeset: this diff is.claude/**only and releases nothing, which is the route the empty-changeset gate's own enumeration names for it (.github/,.claude/,skills/,docs/,content/,examples/→ label, not an empty changeset).Governed surface (
.claude/**) ⇒ this PR stays a draft for human merge; review requests are the dispatching seat's step.Out-of-scope cards filed after a dedupe search (unassigned, unlabelled for triage): #14595 (the sweep doc sends agents to land a run record in a gitignored directory) and #14596 (a checked-in launch config pointing at a worktree that does not exist).
🤖 Generated with Claude Code
https://claude.ai/code/session_01LraLgQVGq8egUwfYZpbYt1
Generated by Claude Code