Skills optimization flight — the four small internal skills (+ objectui verify): seven dead references, three rules copied from os-dev.md / SWEEP.md / RUNNER.md, the live-elsewhere gap (#14058), and a versioned Chromium path that breaks on the next image bump #14317

Description

@os-litant

Member card of the skills catalog optimization program #14292 (maintainer mandate 2026-09-02, verbatim: 「审核所有的 skills,进行全面的优化。」). Filed by the skills lane seat (session session_01LraLgQVGq8egUwfYZpbYt1). Read-only audit at objectstack origin/maina59f78d (.claude/skills/** and scripts/pm/** byte-identical at d63c8a2) and objectui 67dadd6. The auditor's harness refused to write a findings file; the findings are recorded here (the dev posts the seat's full audit message as the audit-record comment at claim time — provided in the dispatch brief). Family dispatch: this card also closes #14058 (the live-elsewhere verdict gap in spec-property-retirement) — same file, same fix (SPR-C-05); #14058 keeps its own claim comment pointing at this branch.

Verdicts

skillceiling (lines)verdictreducible
checklist-author62RESTRUCTURE~15 of 44 body lines are a second copy of SWEEP.md
checklist-test238TRIM~15 lines
dogfood-verification157DIET~25 lines
spec-property-retirement337DIET~35 lines + 4 dead refs + 1 blocking gap
objectui .claude/skills/verify(unpriced, unguarded)HEALTHYone fix

None is a retirement candidate. All four objectstack skills carry metadata.internal: true (enforced by packages/create-objectstack/src/template-consistency.test.ts:601). Usage cadence is not measurable on a shallow clone (dimension E recorded NOT MEASURED).

Findings (id · span · fix)

  • SPR-C-01spec-property-retirement:329-332 — "check-generated runs behind a paths filter in ci.yml; add the path in the same PR": that job and filter were deleted (lint.yml:3949,4078 "gone (ci.yml 的 generated paths filter 是门输入集合的手工副本、无人对账——三次漂移在案,收编剩余 4 个门后应整个删除 #4291)"; ci.yml has no paths:); AGENTS.md:724-726 states the current truth. DELETE −4.
  • DOG-C-01dogfood:66-83 (18 lines) — the ablation predict-then-mutate rule duplicates .claude/agents/os-dev.md:274-283 (same criterion, same KNOWN_UNALIASED_TEST_IMPORTS ledger, same two incidents); both texts say the rule is not dogfood's. MERGE-INTO os-dev.md (pointer, 2 lines). −16.
  • CLA-C-01checklist-author:33-51 — opens 「本技能…不是流程的第二份拷贝」 then restates SWEEP.md:48-68 steps 2–6 one-for-one + SWEEP's angle table. REWRITE to the 3 clauses SWEEP lacks + pointer. −13.
  • SPR-D-01spec-property-retirement:316-337 — 4 of 7 traps duplicate a binding anchor (stale-dist = AGENTS.md:764-767; | tail -1 = os-dev.md:140-141; sequential masking = AGENTS.md:725-729 and the skill's own :28-31; --check vs bare = AGENTS.md:754-758). Keep the two unique ones. −10.
  • SPR-C-05 (= [finding] spec-property-retirement skill predates the live-elsewhere verdict — its ledger-verdict discipline never names the never-remove cross-repo case #14058) — the ledger grew a fifth verdict live-elsewhere (packages/spec/liveness/README.md:63-64,262-308; gate packages/spec/scripts/liveness/elsewhere.test.ts; 1 live row of 703): the skill has zero hits for it; §0's four-question checklist and §1's 「dead 裁定是删除的输入」 predate it. ADD a fifth §0 checkbox naming the never-remove cross-repo case, paid by SPR-C-01 + SPR-C-04.
  • CLT-B-01checklist-test:78-87 — 「解析器给出的 automated.ref」 is false: scripts/checklist-select.mjs:180 projects {id,priority,surface,since,revision}; the field lives only in areas/*.json, so the Tier-1 batching step is unexecutable as written. Fix the step to read the field from the area file.
  • SPR-C-02spec-property-retirement:81 — the strict-delete route describes a hand-written z.core.$ZodErrorMap; superseded by [finding][spec] #6619's inventory of hand-written $ZodErrorMaps was two short — strictToolError and strictCapabilitiesError survive the fold, still invisible to alias-integrity.test.ts #6805: shared/strict-object.ts:125-137,257-312guidance: template, audited by alias-integrity.test.ts. Rewrite to name both files.
  • SPR-C-04spec-property-retirement:300-311 — a hand-rolled 10-name check:* loop is the "match by hand" AGENTS.md:742-750 forbids; the skill cites AGENTS.md at :255. REWRITE to check:generated + only the pure audits. −8.
  • VFY-C-01 objectui verify:26-29 — prescribes /opt/pw-browsers/chromium-1194/chrome-linux/chrome; both siblings prescribe the alias /opt/pw-browsers/chromium and warn against exactly this spelling (RUNNER.md:151-160; os-dev.md:142-143). Fix (objectui PR).
  • DOG-F-01dogfood:31-43RUNNER.md:186-208 names dogfood §0 as the origin of the -p <port>-alone trap (self-pinging connectors dial 3000 via SHOWCASE_SELF_URLOS_PORTPORT); grep OS_PORT over dogfood → 0. ADD 2 lines, paid by DOG-C-01.
  • CLT-C-01checklist-test:96-97 — 「派发 runner 子代理时,必须用 opus」 is a memory-sourced blanket tier; pm-dispatch requires 「档位引当次 node scripts/pm/dispatch-gates.mjs --tier 输出,⛔ 不凭记忆」. Rewrite to the --tier rule.
  • CLA-C-02checklist-author:46-49 — 「六条 waiver 有四条已过期」 is the oldest of three disagreeing numbers; SWEEP.md:76-86 says 6 of 6 retired and check-platform-checklist.mjs reports "0 waived". Fix.
  • SPR-C-03:313-314 lists 3 of the 5 no-generator audits AGENTS.md:765-770 names · SPR-C-06:145 「~28 个墓碑」 vs 178 retiredKey( sites and a pin floor of 50 · SPR-F-01 §4's changeset row omits the ADR-0087 disposition marker AGENTS.md:1122-1131 requires (pnpm check:adr-0087-registration enforces) · CLT-C-02/C-03:229-235, :102-105 re-copy RUNNER rules 1–2 despite :24-25 disclaiming a second copy (and :230 claims a precedence RUNNER.md:67 denies) · X-02 the no-subagent degradation clause is stated twice near-verbatim (checklist-author:58-62 / checklist-test:98-101, both from skills(pm): give sweep disjunct ① the drain clauses the finding box already has #14152 — keep ONE, note the maintainer provenance in the PR).
  • Dead references (positive-controlled): SPR:103 scripts/liveness/orphans.mtspackages/spec/scripts/liveness/orphans.mts · SPR:261 packages/cli/src/utils/lint-liveness-properties.tspackages/lint/src/lint-liveness-properties.ts · SPR:282 .changeset/tool-inert-keys-removed.md → consumed at release; cite a live *-retired.md carrying "The retirement kit:" · SPR:329-332 (above) · CLA:42 README's "deep-test 契约" → README.md:42 ## Item anatomy · CLT:78-87 (above). Incidental (non-skill, report only): SWEEP.md:68 "land the run record under runs/" vs runs/.gitignore = *; .claude/launch.json:18-33pr3505-attach-3477 points at a worktree that does not exist.
  • X-01 (structural, decide in-flight by pointer): environment facts are split between checklist-test:27-29→dogfood and RUNNER.md:94-260 (7 facts dogfood lacks, incl. OS_PORT; one stated more fully). Rule: RUNNER.md is the environment anchor; dogfood §0 points at it and carries only what RUNNER does not; ⛔ no second copy.

Flight scope

IMPLEMENT: every item above, as TWO PRs — objectstack (.claude/skills/{checklist-author,checklist-test,dogfood-verification,spec-property-retirement}/SKILL.md, shrink-only under the line ratchet; ⛔ do not touch scripts/pm/check-skill-line-ratchet.mjs — it is held by PR #14236; headroom that appears is re-locked in the corpus audit's Phase 3) and objectui (.claude/skills/verify/SKILL.md, one path fix). Fixes #<this card> and Fixes #14058 both on the objectstack PR.

DEFER / report-only: the two incidental non-skill items (file as out-of-scope cards if not already carded); X-02's maintainer provenance (#14152) is noted, not re-litigated.

Flight constraints (binding)

  • Draft PRs, governed (.claude/** in both repos) ⇒ stay draft; review requests are the seat's step; skip-changeset in objectstack (docs-only); objectui: empty-frontmatter changeset only if its rule asks, ⛔ never request a label.
  • Line ratchet: no ratcheted file may grow; additions paid by deletions in the same file; ⛔ re-wrap is not payment.
  • ⛔ Do not edit os-dev.md, AGENTS.md, RUNNER.md, SWEEP.md — they are the anchors; a pointer replaces the copy.
  • Gates: pnpm check:pm-skill-ratchet, pnpm check:pm-skill-id-lint, pnpm check:skill-frame-sync, pnpm check:skill-frame-freshness, the packages/create-objectstack template-consistency test, plus node scripts/pm/dispatch-gates.mjs --commands <changed paths>; record the head sha.
  • PR body: per-item 落点 | before | after keyed by finding id; line delta per file; Clause-②: no.

Refs: #14292 · #14058 (folded) · #14232 (separate: unlocks at #12800's close) · #13597 (the pm-dispatch corpus — ⛔ not touched by this flight).

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

    , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
     blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
    }
    } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
    })();
    (function(){
    try {
    var __m = "github.com";
    var __re = new RegExp('^' + "github\\.com" + '
    
    Skip to content

    Skills optimization flight — the four small internal skills (+ objectui verify): seven dead references, three rules copied from os-dev.md / SWEEP.md / RUNNER.md, the live-elsewhere gap (#14058), and a versioned Chromium path that breaks on the next image bump #14317

    Description

    @os-litant

    Member card of the skills catalog optimization program #14292 (maintainer mandate 2026-09-02, verbatim: 「审核所有的 skills,进行全面的优化。」). Filed by the skills lane seat (session session_01LraLgQVGq8egUwfYZpbYt1). Read-only audit at objectstack origin/maina59f78d (.claude/skills/** and scripts/pm/** byte-identical at d63c8a2) and objectui 67dadd6. The auditor's harness refused to write a findings file; the findings are recorded here (the dev posts the seat's full audit message as the audit-record comment at claim time — provided in the dispatch brief). Family dispatch: this card also closes #14058 (the live-elsewhere verdict gap in spec-property-retirement) — same file, same fix (SPR-C-05); #14058 keeps its own claim comment pointing at this branch.

    Verdicts

    skillceiling (lines)verdictreducible
    checklist-author62RESTRUCTURE~15 of 44 body lines are a second copy of SWEEP.md
    checklist-test238TRIM~15 lines
    dogfood-verification157DIET~25 lines
    spec-property-retirement337DIET~35 lines + 4 dead refs + 1 blocking gap
    objectui .claude/skills/verify(unpriced, unguarded)HEALTHYone fix

    None is a retirement candidate. All four objectstack skills carry metadata.internal: true (enforced by packages/create-objectstack/src/template-consistency.test.ts:601). Usage cadence is not measurable on a shallow clone (dimension E recorded NOT MEASURED).

    Findings (id · span · fix)

    • SPR-C-01spec-property-retirement:329-332 — "check-generated runs behind a paths filter in ci.yml; add the path in the same PR": that job and filter were deleted (lint.yml:3949,4078 "gone (ci.yml 的 generated paths filter 是门输入集合的手工副本、无人对账——三次漂移在案,收编剩余 4 个门后应整个删除 #4291)"; ci.yml has no paths:); AGENTS.md:724-726 states the current truth. DELETE −4.
    • DOG-C-01dogfood:66-83 (18 lines) — the ablation predict-then-mutate rule duplicates .claude/agents/os-dev.md:274-283 (same criterion, same KNOWN_UNALIASED_TEST_IMPORTS ledger, same two incidents); both texts say the rule is not dogfood's. MERGE-INTO os-dev.md (pointer, 2 lines). −16.
    • CLA-C-01checklist-author:33-51 — opens 「本技能…不是流程的第二份拷贝」 then restates SWEEP.md:48-68 steps 2–6 one-for-one + SWEEP's angle table. REWRITE to the 3 clauses SWEEP lacks + pointer. −13.
    • SPR-D-01spec-property-retirement:316-337 — 4 of 7 traps duplicate a binding anchor (stale-dist = AGENTS.md:764-767; | tail -1 = os-dev.md:140-141; sequential masking = AGENTS.md:725-729 and the skill's own :28-31; --check vs bare = AGENTS.md:754-758). Keep the two unique ones. −10.
    • SPR-C-05 (= [finding] spec-property-retirement skill predates the live-elsewhere verdict — its ledger-verdict discipline never names the never-remove cross-repo case #14058) — the ledger grew a fifth verdict live-elsewhere (packages/spec/liveness/README.md:63-64,262-308; gate packages/spec/scripts/liveness/elsewhere.test.ts; 1 live row of 703): the skill has zero hits for it; §0's four-question checklist and §1's 「dead 裁定是删除的输入」 predate it. ADD a fifth §0 checkbox naming the never-remove cross-repo case, paid by SPR-C-01 + SPR-C-04.
    • CLT-B-01checklist-test:78-87 — 「解析器给出的 automated.ref」 is false: scripts/checklist-select.mjs:180 projects {id,priority,surface,since,revision}; the field lives only in areas/*.json, so the Tier-1 batching step is unexecutable as written. Fix the step to read the field from the area file.
    • SPR-C-02spec-property-retirement:81 — the strict-delete route describes a hand-written z.core.$ZodErrorMap; superseded by [finding][spec] #6619's inventory of hand-written $ZodErrorMaps was two short — strictToolError and strictCapabilitiesError survive the fold, still invisible to alias-integrity.test.ts #6805: shared/strict-object.ts:125-137,257-312guidance: template, audited by alias-integrity.test.ts. Rewrite to name both files.
    • SPR-C-04spec-property-retirement:300-311 — a hand-rolled 10-name check:* loop is the "match by hand" AGENTS.md:742-750 forbids; the skill cites AGENTS.md at :255. REWRITE to check:generated + only the pure audits. −8.
    • VFY-C-01 objectui verify:26-29 — prescribes /opt/pw-browsers/chromium-1194/chrome-linux/chrome; both siblings prescribe the alias /opt/pw-browsers/chromium and warn against exactly this spelling (RUNNER.md:151-160; os-dev.md:142-143). Fix (objectui PR).
    • DOG-F-01dogfood:31-43RUNNER.md:186-208 names dogfood §0 as the origin of the -p <port>-alone trap (self-pinging connectors dial 3000 via SHOWCASE_SELF_URLOS_PORTPORT); grep OS_PORT over dogfood → 0. ADD 2 lines, paid by DOG-C-01.
    • CLT-C-01checklist-test:96-97 — 「派发 runner 子代理时,必须用 opus」 is a memory-sourced blanket tier; pm-dispatch requires 「档位引当次 node scripts/pm/dispatch-gates.mjs --tier 输出,⛔ 不凭记忆」. Rewrite to the --tier rule.
    • CLA-C-02checklist-author:46-49 — 「六条 waiver 有四条已过期」 is the oldest of three disagreeing numbers; SWEEP.md:76-86 says 6 of 6 retired and check-platform-checklist.mjs reports "0 waived". Fix.
    • SPR-C-03:313-314 lists 3 of the 5 no-generator audits AGENTS.md:765-770 names · SPR-C-06:145 「~28 个墓碑」 vs 178 retiredKey( sites and a pin floor of 50 · SPR-F-01 §4's changeset row omits the ADR-0087 disposition marker AGENTS.md:1122-1131 requires (pnpm check:adr-0087-registration enforces) · CLT-C-02/C-03:229-235, :102-105 re-copy RUNNER rules 1–2 despite :24-25 disclaiming a second copy (and :230 claims a precedence RUNNER.md:67 denies) · X-02 the no-subagent degradation clause is stated twice near-verbatim (checklist-author:58-62 / checklist-test:98-101, both from skills(pm): give sweep disjunct ① the drain clauses the finding box already has #14152 — keep ONE, note the maintainer provenance in the PR).
    • Dead references (positive-controlled): SPR:103 scripts/liveness/orphans.mtspackages/spec/scripts/liveness/orphans.mts · SPR:261 packages/cli/src/utils/lint-liveness-properties.tspackages/lint/src/lint-liveness-properties.ts · SPR:282 .changeset/tool-inert-keys-removed.md → consumed at release; cite a live *-retired.md carrying "The retirement kit:" · SPR:329-332 (above) · CLA:42 README's "deep-test 契约" → README.md:42 ## Item anatomy · CLT:78-87 (above). Incidental (non-skill, report only): SWEEP.md:68 "land the run record under runs/" vs runs/.gitignore = *; .claude/launch.json:18-33pr3505-attach-3477 points at a worktree that does not exist.
    • X-01 (structural, decide in-flight by pointer): environment facts are split between checklist-test:27-29→dogfood and RUNNER.md:94-260 (7 facts dogfood lacks, incl. OS_PORT; one stated more fully). Rule: RUNNER.md is the environment anchor; dogfood §0 points at it and carries only what RUNNER does not; ⛔ no second copy.

    Flight scope

    IMPLEMENT: every item above, as TWO PRs — objectstack (.claude/skills/{checklist-author,checklist-test,dogfood-verification,spec-property-retirement}/SKILL.md, shrink-only under the line ratchet; ⛔ do not touch scripts/pm/check-skill-line-ratchet.mjs — it is held by PR #14236; headroom that appears is re-locked in the corpus audit's Phase 3) and objectui (.claude/skills/verify/SKILL.md, one path fix). Fixes #<this card> and Fixes #14058 both on the objectstack PR.

    DEFER / report-only: the two incidental non-skill items (file as out-of-scope cards if not already carded); X-02's maintainer provenance (#14152) is noted, not re-litigated.

    Flight constraints (binding)

    • Draft PRs, governed (.claude/** in both repos) ⇒ stay draft; review requests are the seat's step; skip-changeset in objectstack (docs-only); objectui: empty-frontmatter changeset only if its rule asks, ⛔ never request a label.
    • Line ratchet: no ratcheted file may grow; additions paid by deletions in the same file; ⛔ re-wrap is not payment.
    • ⛔ Do not edit os-dev.md, AGENTS.md, RUNNER.md, SWEEP.md — they are the anchors; a pointer replaces the copy.
    • Gates: pnpm check:pm-skill-ratchet, pnpm check:pm-skill-id-lint, pnpm check:skill-frame-sync, pnpm check:skill-frame-freshness, the packages/create-objectstack template-consistency test, plus node scripts/pm/dispatch-gates.mjs --commands <changed paths>; record the head sha.
    • PR body: per-item 落点 | before | after keyed by finding id; line delta per file; Clause-②: no.

    Refs: #14292 · #14058 (folded) · #14232 (separate: unlocks at #12800's close) · #13597 (the pm-dispatch corpus — ⛔ not touched by this flight).

    Metadata

    Metadata

    Assignees

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

      , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
      Skip to content

      Skills optimization flight — the four small internal skills (+ objectui verify): seven dead references, three rules copied from os-dev.md / SWEEP.md / RUNNER.md, the live-elsewhere gap (#14058), and a versioned Chromium path that breaks on the next image bump #14317

      Description

      @os-litant

      Member card of the skills catalog optimization program #14292 (maintainer mandate 2026-09-02, verbatim: 「审核所有的 skills,进行全面的优化。」). Filed by the skills lane seat (session session_01LraLgQVGq8egUwfYZpbYt1). Read-only audit at objectstack origin/maina59f78d (.claude/skills/** and scripts/pm/** byte-identical at d63c8a2) and objectui 67dadd6. The auditor's harness refused to write a findings file; the findings are recorded here (the dev posts the seat's full audit message as the audit-record comment at claim time — provided in the dispatch brief). Family dispatch: this card also closes #14058 (the live-elsewhere verdict gap in spec-property-retirement) — same file, same fix (SPR-C-05); #14058 keeps its own claim comment pointing at this branch.

      Verdicts

      skillceiling (lines)verdictreducible
      checklist-author62RESTRUCTURE~15 of 44 body lines are a second copy of SWEEP.md
      checklist-test238TRIM~15 lines
      dogfood-verification157DIET~25 lines
      spec-property-retirement337DIET~35 lines + 4 dead refs + 1 blocking gap
      objectui .claude/skills/verify(unpriced, unguarded)HEALTHYone fix

      None is a retirement candidate. All four objectstack skills carry metadata.internal: true (enforced by packages/create-objectstack/src/template-consistency.test.ts:601). Usage cadence is not measurable on a shallow clone (dimension E recorded NOT MEASURED).

      Findings (id · span · fix)

      • SPR-C-01spec-property-retirement:329-332 — "check-generated runs behind a paths filter in ci.yml; add the path in the same PR": that job and filter were deleted (lint.yml:3949,4078 "gone (ci.yml 的 generated paths filter 是门输入集合的手工副本、无人对账——三次漂移在案,收编剩余 4 个门后应整个删除 #4291)"; ci.yml has no paths:); AGENTS.md:724-726 states the current truth. DELETE −4.
      • DOG-C-01dogfood:66-83 (18 lines) — the ablation predict-then-mutate rule duplicates .claude/agents/os-dev.md:274-283 (same criterion, same KNOWN_UNALIASED_TEST_IMPORTS ledger, same two incidents); both texts say the rule is not dogfood's. MERGE-INTO os-dev.md (pointer, 2 lines). −16.
      • CLA-C-01checklist-author:33-51 — opens 「本技能…不是流程的第二份拷贝」 then restates SWEEP.md:48-68 steps 2–6 one-for-one + SWEEP's angle table. REWRITE to the 3 clauses SWEEP lacks + pointer. −13.
      • SPR-D-01spec-property-retirement:316-337 — 4 of 7 traps duplicate a binding anchor (stale-dist = AGENTS.md:764-767; | tail -1 = os-dev.md:140-141; sequential masking = AGENTS.md:725-729 and the skill's own :28-31; --check vs bare = AGENTS.md:754-758). Keep the two unique ones. −10.
      • SPR-C-05 (= [finding] spec-property-retirement skill predates the live-elsewhere verdict — its ledger-verdict discipline never names the never-remove cross-repo case #14058) — the ledger grew a fifth verdict live-elsewhere (packages/spec/liveness/README.md:63-64,262-308; gate packages/spec/scripts/liveness/elsewhere.test.ts; 1 live row of 703): the skill has zero hits for it; §0's four-question checklist and §1's 「dead 裁定是删除的输入」 predate it. ADD a fifth §0 checkbox naming the never-remove cross-repo case, paid by SPR-C-01 + SPR-C-04.
      • CLT-B-01checklist-test:78-87 — 「解析器给出的 automated.ref」 is false: scripts/checklist-select.mjs:180 projects {id,priority,surface,since,revision}; the field lives only in areas/*.json, so the Tier-1 batching step is unexecutable as written. Fix the step to read the field from the area file.
      • SPR-C-02spec-property-retirement:81 — the strict-delete route describes a hand-written z.core.$ZodErrorMap; superseded by [finding][spec] #6619's inventory of hand-written $ZodErrorMaps was two short — strictToolError and strictCapabilitiesError survive the fold, still invisible to alias-integrity.test.ts #6805: shared/strict-object.ts:125-137,257-312guidance: template, audited by alias-integrity.test.ts. Rewrite to name both files.
      • SPR-C-04spec-property-retirement:300-311 — a hand-rolled 10-name check:* loop is the "match by hand" AGENTS.md:742-750 forbids; the skill cites AGENTS.md at :255. REWRITE to check:generated + only the pure audits. −8.
      • VFY-C-01 objectui verify:26-29 — prescribes /opt/pw-browsers/chromium-1194/chrome-linux/chrome; both siblings prescribe the alias /opt/pw-browsers/chromium and warn against exactly this spelling (RUNNER.md:151-160; os-dev.md:142-143). Fix (objectui PR).
      • DOG-F-01dogfood:31-43RUNNER.md:186-208 names dogfood §0 as the origin of the -p <port>-alone trap (self-pinging connectors dial 3000 via SHOWCASE_SELF_URLOS_PORTPORT); grep OS_PORT over dogfood → 0. ADD 2 lines, paid by DOG-C-01.
      • CLT-C-01checklist-test:96-97 — 「派发 runner 子代理时,必须用 opus」 is a memory-sourced blanket tier; pm-dispatch requires 「档位引当次 node scripts/pm/dispatch-gates.mjs --tier 输出,⛔ 不凭记忆」. Rewrite to the --tier rule.
      • CLA-C-02checklist-author:46-49 — 「六条 waiver 有四条已过期」 is the oldest of three disagreeing numbers; SWEEP.md:76-86 says 6 of 6 retired and check-platform-checklist.mjs reports "0 waived". Fix.
      • SPR-C-03:313-314 lists 3 of the 5 no-generator audits AGENTS.md:765-770 names · SPR-C-06:145 「~28 个墓碑」 vs 178 retiredKey( sites and a pin floor of 50 · SPR-F-01 §4's changeset row omits the ADR-0087 disposition marker AGENTS.md:1122-1131 requires (pnpm check:adr-0087-registration enforces) · CLT-C-02/C-03:229-235, :102-105 re-copy RUNNER rules 1–2 despite :24-25 disclaiming a second copy (and :230 claims a precedence RUNNER.md:67 denies) · X-02 the no-subagent degradation clause is stated twice near-verbatim (checklist-author:58-62 / checklist-test:98-101, both from skills(pm): give sweep disjunct ① the drain clauses the finding box already has #14152 — keep ONE, note the maintainer provenance in the PR).
      • Dead references (positive-controlled): SPR:103 scripts/liveness/orphans.mtspackages/spec/scripts/liveness/orphans.mts · SPR:261 packages/cli/src/utils/lint-liveness-properties.tspackages/lint/src/lint-liveness-properties.ts · SPR:282 .changeset/tool-inert-keys-removed.md → consumed at release; cite a live *-retired.md carrying "The retirement kit:" · SPR:329-332 (above) · CLA:42 README's "deep-test 契约" → README.md:42 ## Item anatomy · CLT:78-87 (above). Incidental (non-skill, report only): SWEEP.md:68 "land the run record under runs/" vs runs/.gitignore = *; .claude/launch.json:18-33pr3505-attach-3477 points at a worktree that does not exist.
      • X-01 (structural, decide in-flight by pointer): environment facts are split between checklist-test:27-29→dogfood and RUNNER.md:94-260 (7 facts dogfood lacks, incl. OS_PORT; one stated more fully). Rule: RUNNER.md is the environment anchor; dogfood §0 points at it and carries only what RUNNER does not; ⛔ no second copy.

      Flight scope

      IMPLEMENT: every item above, as TWO PRs — objectstack (.claude/skills/{checklist-author,checklist-test,dogfood-verification,spec-property-retirement}/SKILL.md, shrink-only under the line ratchet; ⛔ do not touch scripts/pm/check-skill-line-ratchet.mjs — it is held by PR #14236; headroom that appears is re-locked in the corpus audit's Phase 3) and objectui (.claude/skills/verify/SKILL.md, one path fix). Fixes #<this card> and Fixes #14058 both on the objectstack PR.

      DEFER / report-only: the two incidental non-skill items (file as out-of-scope cards if not already carded); X-02's maintainer provenance (#14152) is noted, not re-litigated.

      Flight constraints (binding)

      • Draft PRs, governed (.claude/** in both repos) ⇒ stay draft; review requests are the seat's step; skip-changeset in objectstack (docs-only); objectui: empty-frontmatter changeset only if its rule asks, ⛔ never request a label.
      • Line ratchet: no ratcheted file may grow; additions paid by deletions in the same file; ⛔ re-wrap is not payment.
      • ⛔ Do not edit os-dev.md, AGENTS.md, RUNNER.md, SWEEP.md — they are the anchors; a pointer replaces the copy.
      • Gates: pnpm check:pm-skill-ratchet, pnpm check:pm-skill-id-lint, pnpm check:skill-frame-sync, pnpm check:skill-frame-freshness, the packages/create-objectstack template-consistency test, plus node scripts/pm/dispatch-gates.mjs --commands <changed paths>; record the head sha.
      • PR body: per-item 落点 | before | after keyed by finding id; line delta per file; Clause-②: no.

      Refs: #14292 · #14058 (folded) · #14232 (separate: unlocks at #12800's close) · #13597 (the pm-dispatch corpus — ⛔ not touched by this flight).

      Metadata

      Metadata

      Assignees

      Type

      No type

      Projects

      No projects

        Milestone

        No milestone

        Relationships

        None yet

        Development

        No branches or pull requests

        Issue actions

        , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
        Skip to content

        Skills optimization flight — the four small internal skills (+ objectui verify): seven dead references, three rules copied from os-dev.md / SWEEP.md / RUNNER.md, the live-elsewhere gap (#14058), and a versioned Chromium path that breaks on the next image bump #14317

        Description

        @os-litant

        Member card of the skills catalog optimization program #14292 (maintainer mandate 2026-09-02, verbatim: 「审核所有的 skills,进行全面的优化。」). Filed by the skills lane seat (session session_01LraLgQVGq8egUwfYZpbYt1). Read-only audit at objectstack origin/maina59f78d (.claude/skills/** and scripts/pm/** byte-identical at d63c8a2) and objectui 67dadd6. The auditor's harness refused to write a findings file; the findings are recorded here (the dev posts the seat's full audit message as the audit-record comment at claim time — provided in the dispatch brief). Family dispatch: this card also closes #14058 (the live-elsewhere verdict gap in spec-property-retirement) — same file, same fix (SPR-C-05); #14058 keeps its own claim comment pointing at this branch.

        Verdicts

        skillceiling (lines)verdictreducible
        checklist-author62RESTRUCTURE~15 of 44 body lines are a second copy of SWEEP.md
        checklist-test238TRIM~15 lines
        dogfood-verification157DIET~25 lines
        spec-property-retirement337DIET~35 lines + 4 dead refs + 1 blocking gap
        objectui .claude/skills/verify(unpriced, unguarded)HEALTHYone fix

        None is a retirement candidate. All four objectstack skills carry metadata.internal: true (enforced by packages/create-objectstack/src/template-consistency.test.ts:601). Usage cadence is not measurable on a shallow clone (dimension E recorded NOT MEASURED).

        Findings (id · span · fix)

        • SPR-C-01spec-property-retirement:329-332 — "check-generated runs behind a paths filter in ci.yml; add the path in the same PR": that job and filter were deleted (lint.yml:3949,4078 "gone (ci.yml 的 generated paths filter 是门输入集合的手工副本、无人对账——三次漂移在案,收编剩余 4 个门后应整个删除 #4291)"; ci.yml has no paths:); AGENTS.md:724-726 states the current truth. DELETE −4.
        • DOG-C-01dogfood:66-83 (18 lines) — the ablation predict-then-mutate rule duplicates .claude/agents/os-dev.md:274-283 (same criterion, same KNOWN_UNALIASED_TEST_IMPORTS ledger, same two incidents); both texts say the rule is not dogfood's. MERGE-INTO os-dev.md (pointer, 2 lines). −16.
        • CLA-C-01checklist-author:33-51 — opens 「本技能…不是流程的第二份拷贝」 then restates SWEEP.md:48-68 steps 2–6 one-for-one + SWEEP's angle table. REWRITE to the 3 clauses SWEEP lacks + pointer. −13.
        • SPR-D-01spec-property-retirement:316-337 — 4 of 7 traps duplicate a binding anchor (stale-dist = AGENTS.md:764-767; | tail -1 = os-dev.md:140-141; sequential masking = AGENTS.md:725-729 and the skill's own :28-31; --check vs bare = AGENTS.md:754-758). Keep the two unique ones. −10.
        • SPR-C-05 (= [finding] spec-property-retirement skill predates the live-elsewhere verdict — its ledger-verdict discipline never names the never-remove cross-repo case #14058) — the ledger grew a fifth verdict live-elsewhere (packages/spec/liveness/README.md:63-64,262-308; gate packages/spec/scripts/liveness/elsewhere.test.ts; 1 live row of 703): the skill has zero hits for it; §0's four-question checklist and §1's 「dead 裁定是删除的输入」 predate it. ADD a fifth §0 checkbox naming the never-remove cross-repo case, paid by SPR-C-01 + SPR-C-04.
        • CLT-B-01checklist-test:78-87 — 「解析器给出的 automated.ref」 is false: scripts/checklist-select.mjs:180 projects {id,priority,surface,since,revision}; the field lives only in areas/*.json, so the Tier-1 batching step is unexecutable as written. Fix the step to read the field from the area file.
        • SPR-C-02spec-property-retirement:81 — the strict-delete route describes a hand-written z.core.$ZodErrorMap; superseded by [finding][spec] #6619's inventory of hand-written $ZodErrorMaps was two short — strictToolError and strictCapabilitiesError survive the fold, still invisible to alias-integrity.test.ts #6805: shared/strict-object.ts:125-137,257-312guidance: template, audited by alias-integrity.test.ts. Rewrite to name both files.
        • SPR-C-04spec-property-retirement:300-311 — a hand-rolled 10-name check:* loop is the "match by hand" AGENTS.md:742-750 forbids; the skill cites AGENTS.md at :255. REWRITE to check:generated + only the pure audits. −8.
        • VFY-C-01 objectui verify:26-29 — prescribes /opt/pw-browsers/chromium-1194/chrome-linux/chrome; both siblings prescribe the alias /opt/pw-browsers/chromium and warn against exactly this spelling (RUNNER.md:151-160; os-dev.md:142-143). Fix (objectui PR).
        • DOG-F-01dogfood:31-43RUNNER.md:186-208 names dogfood §0 as the origin of the -p <port>-alone trap (self-pinging connectors dial 3000 via SHOWCASE_SELF_URLOS_PORTPORT); grep OS_PORT over dogfood → 0. ADD 2 lines, paid by DOG-C-01.
        • CLT-C-01checklist-test:96-97 — 「派发 runner 子代理时,必须用 opus」 is a memory-sourced blanket tier; pm-dispatch requires 「档位引当次 node scripts/pm/dispatch-gates.mjs --tier 输出,⛔ 不凭记忆」. Rewrite to the --tier rule.
        • CLA-C-02checklist-author:46-49 — 「六条 waiver 有四条已过期」 is the oldest of three disagreeing numbers; SWEEP.md:76-86 says 6 of 6 retired and check-platform-checklist.mjs reports "0 waived". Fix.
        • SPR-C-03:313-314 lists 3 of the 5 no-generator audits AGENTS.md:765-770 names · SPR-C-06:145 「~28 个墓碑」 vs 178 retiredKey( sites and a pin floor of 50 · SPR-F-01 §4's changeset row omits the ADR-0087 disposition marker AGENTS.md:1122-1131 requires (pnpm check:adr-0087-registration enforces) · CLT-C-02/C-03:229-235, :102-105 re-copy RUNNER rules 1–2 despite :24-25 disclaiming a second copy (and :230 claims a precedence RUNNER.md:67 denies) · X-02 the no-subagent degradation clause is stated twice near-verbatim (checklist-author:58-62 / checklist-test:98-101, both from skills(pm): give sweep disjunct ① the drain clauses the finding box already has #14152 — keep ONE, note the maintainer provenance in the PR).
        • Dead references (positive-controlled): SPR:103 scripts/liveness/orphans.mtspackages/spec/scripts/liveness/orphans.mts · SPR:261 packages/cli/src/utils/lint-liveness-properties.tspackages/lint/src/lint-liveness-properties.ts · SPR:282 .changeset/tool-inert-keys-removed.md → consumed at release; cite a live *-retired.md carrying "The retirement kit:" · SPR:329-332 (above) · CLA:42 README's "deep-test 契约" → README.md:42 ## Item anatomy · CLT:78-87 (above). Incidental (non-skill, report only): SWEEP.md:68 "land the run record under runs/" vs runs/.gitignore = *; .claude/launch.json:18-33pr3505-attach-3477 points at a worktree that does not exist.
        • X-01 (structural, decide in-flight by pointer): environment facts are split between checklist-test:27-29→dogfood and RUNNER.md:94-260 (7 facts dogfood lacks, incl. OS_PORT; one stated more fully). Rule: RUNNER.md is the environment anchor; dogfood §0 points at it and carries only what RUNNER does not; ⛔ no second copy.

        Flight scope

        IMPLEMENT: every item above, as TWO PRs — objectstack (.claude/skills/{checklist-author,checklist-test,dogfood-verification,spec-property-retirement}/SKILL.md, shrink-only under the line ratchet; ⛔ do not touch scripts/pm/check-skill-line-ratchet.mjs — it is held by PR #14236; headroom that appears is re-locked in the corpus audit's Phase 3) and objectui (.claude/skills/verify/SKILL.md, one path fix). Fixes #<this card> and Fixes #14058 both on the objectstack PR.

        DEFER / report-only: the two incidental non-skill items (file as out-of-scope cards if not already carded); X-02's maintainer provenance (#14152) is noted, not re-litigated.

        Flight constraints (binding)

        • Draft PRs, governed (.claude/** in both repos) ⇒ stay draft; review requests are the seat's step; skip-changeset in objectstack (docs-only); objectui: empty-frontmatter changeset only if its rule asks, ⛔ never request a label.
        • Line ratchet: no ratcheted file may grow; additions paid by deletions in the same file; ⛔ re-wrap is not payment.
        • ⛔ Do not edit os-dev.md, AGENTS.md, RUNNER.md, SWEEP.md — they are the anchors; a pointer replaces the copy.
        • Gates: pnpm check:pm-skill-ratchet, pnpm check:pm-skill-id-lint, pnpm check:skill-frame-sync, pnpm check:skill-frame-freshness, the packages/create-objectstack template-consistency test, plus node scripts/pm/dispatch-gates.mjs --commands <changed paths>; record the head sha.
        • PR body: per-item 落点 | before | after keyed by finding id; line delta per file; Clause-②: no.

        Refs: #14292 · #14058 (folded) · #14232 (separate: unlocks at #12800's close) · #13597 (the pm-dispatch corpus — ⛔ not touched by this flight).

        Metadata

        Metadata

        Assignees

        Type

        No type

        Projects

        No projects

          Milestone

          No milestone

          Relationships

          None yet

          Development

          No branches or pull requests

          Issue actions

          , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
          Skip to content

          Skills optimization flight — the four small internal skills (+ objectui verify): seven dead references, three rules copied from os-dev.md / SWEEP.md / RUNNER.md, the live-elsewhere gap (#14058), and a versioned Chromium path that breaks on the next image bump #14317

          Description

          @os-litant

          Member card of the skills catalog optimization program #14292 (maintainer mandate 2026-09-02, verbatim: 「审核所有的 skills,进行全面的优化。」). Filed by the skills lane seat (session session_01LraLgQVGq8egUwfYZpbYt1). Read-only audit at objectstack origin/maina59f78d (.claude/skills/** and scripts/pm/** byte-identical at d63c8a2) and objectui 67dadd6. The auditor's harness refused to write a findings file; the findings are recorded here (the dev posts the seat's full audit message as the audit-record comment at claim time — provided in the dispatch brief). Family dispatch: this card also closes #14058 (the live-elsewhere verdict gap in spec-property-retirement) — same file, same fix (SPR-C-05); #14058 keeps its own claim comment pointing at this branch.

          Verdicts

          skillceiling (lines)verdictreducible
          checklist-author62RESTRUCTURE~15 of 44 body lines are a second copy of SWEEP.md
          checklist-test238TRIM~15 lines
          dogfood-verification157DIET~25 lines
          spec-property-retirement337DIET~35 lines + 4 dead refs + 1 blocking gap
          objectui .claude/skills/verify(unpriced, unguarded)HEALTHYone fix

          None is a retirement candidate. All four objectstack skills carry metadata.internal: true (enforced by packages/create-objectstack/src/template-consistency.test.ts:601). Usage cadence is not measurable on a shallow clone (dimension E recorded NOT MEASURED).

          Findings (id · span · fix)

          • SPR-C-01spec-property-retirement:329-332 — "check-generated runs behind a paths filter in ci.yml; add the path in the same PR": that job and filter were deleted (lint.yml:3949,4078 "gone (ci.yml 的 generated paths filter 是门输入集合的手工副本、无人对账——三次漂移在案,收编剩余 4 个门后应整个删除 #4291)"; ci.yml has no paths:); AGENTS.md:724-726 states the current truth. DELETE −4.
          • DOG-C-01dogfood:66-83 (18 lines) — the ablation predict-then-mutate rule duplicates .claude/agents/os-dev.md:274-283 (same criterion, same KNOWN_UNALIASED_TEST_IMPORTS ledger, same two incidents); both texts say the rule is not dogfood's. MERGE-INTO os-dev.md (pointer, 2 lines). −16.
          • CLA-C-01checklist-author:33-51 — opens 「本技能…不是流程的第二份拷贝」 then restates SWEEP.md:48-68 steps 2–6 one-for-one + SWEEP's angle table. REWRITE to the 3 clauses SWEEP lacks + pointer. −13.
          • SPR-D-01spec-property-retirement:316-337 — 4 of 7 traps duplicate a binding anchor (stale-dist = AGENTS.md:764-767; | tail -1 = os-dev.md:140-141; sequential masking = AGENTS.md:725-729 and the skill's own :28-31; --check vs bare = AGENTS.md:754-758). Keep the two unique ones. −10.
          • SPR-C-05 (= [finding] spec-property-retirement skill predates the live-elsewhere verdict — its ledger-verdict discipline never names the never-remove cross-repo case #14058) — the ledger grew a fifth verdict live-elsewhere (packages/spec/liveness/README.md:63-64,262-308; gate packages/spec/scripts/liveness/elsewhere.test.ts; 1 live row of 703): the skill has zero hits for it; §0's four-question checklist and §1's 「dead 裁定是删除的输入」 predate it. ADD a fifth §0 checkbox naming the never-remove cross-repo case, paid by SPR-C-01 + SPR-C-04.
          • CLT-B-01checklist-test:78-87 — 「解析器给出的 automated.ref」 is false: scripts/checklist-select.mjs:180 projects {id,priority,surface,since,revision}; the field lives only in areas/*.json, so the Tier-1 batching step is unexecutable as written. Fix the step to read the field from the area file.
          • SPR-C-02spec-property-retirement:81 — the strict-delete route describes a hand-written z.core.$ZodErrorMap; superseded by [finding][spec] #6619's inventory of hand-written $ZodErrorMaps was two short — strictToolError and strictCapabilitiesError survive the fold, still invisible to alias-integrity.test.ts #6805: shared/strict-object.ts:125-137,257-312guidance: template, audited by alias-integrity.test.ts. Rewrite to name both files.
          • SPR-C-04spec-property-retirement:300-311 — a hand-rolled 10-name check:* loop is the "match by hand" AGENTS.md:742-750 forbids; the skill cites AGENTS.md at :255. REWRITE to check:generated + only the pure audits. −8.
          • VFY-C-01 objectui verify:26-29 — prescribes /opt/pw-browsers/chromium-1194/chrome-linux/chrome; both siblings prescribe the alias /opt/pw-browsers/chromium and warn against exactly this spelling (RUNNER.md:151-160; os-dev.md:142-143). Fix (objectui PR).
          • DOG-F-01dogfood:31-43RUNNER.md:186-208 names dogfood §0 as the origin of the -p <port>-alone trap (self-pinging connectors dial 3000 via SHOWCASE_SELF_URLOS_PORTPORT); grep OS_PORT over dogfood → 0. ADD 2 lines, paid by DOG-C-01.
          • CLT-C-01checklist-test:96-97 — 「派发 runner 子代理时,必须用 opus」 is a memory-sourced blanket tier; pm-dispatch requires 「档位引当次 node scripts/pm/dispatch-gates.mjs --tier 输出,⛔ 不凭记忆」. Rewrite to the --tier rule.
          • CLA-C-02checklist-author:46-49 — 「六条 waiver 有四条已过期」 is the oldest of three disagreeing numbers; SWEEP.md:76-86 says 6 of 6 retired and check-platform-checklist.mjs reports "0 waived". Fix.
          • SPR-C-03:313-314 lists 3 of the 5 no-generator audits AGENTS.md:765-770 names · SPR-C-06:145 「~28 个墓碑」 vs 178 retiredKey( sites and a pin floor of 50 · SPR-F-01 §4's changeset row omits the ADR-0087 disposition marker AGENTS.md:1122-1131 requires (pnpm check:adr-0087-registration enforces) · CLT-C-02/C-03:229-235, :102-105 re-copy RUNNER rules 1–2 despite :24-25 disclaiming a second copy (and :230 claims a precedence RUNNER.md:67 denies) · X-02 the no-subagent degradation clause is stated twice near-verbatim (checklist-author:58-62 / checklist-test:98-101, both from skills(pm): give sweep disjunct ① the drain clauses the finding box already has #14152 — keep ONE, note the maintainer provenance in the PR).
          • Dead references (positive-controlled): SPR:103 scripts/liveness/orphans.mtspackages/spec/scripts/liveness/orphans.mts · SPR:261 packages/cli/src/utils/lint-liveness-properties.tspackages/lint/src/lint-liveness-properties.ts · SPR:282 .changeset/tool-inert-keys-removed.md → consumed at release; cite a live *-retired.md carrying "The retirement kit:" · SPR:329-332 (above) · CLA:42 README's "deep-test 契约" → README.md:42 ## Item anatomy · CLT:78-87 (above). Incidental (non-skill, report only): SWEEP.md:68 "land the run record under runs/" vs runs/.gitignore = *; .claude/launch.json:18-33pr3505-attach-3477 points at a worktree that does not exist.
          • X-01 (structural, decide in-flight by pointer): environment facts are split between checklist-test:27-29→dogfood and RUNNER.md:94-260 (7 facts dogfood lacks, incl. OS_PORT; one stated more fully). Rule: RUNNER.md is the environment anchor; dogfood §0 points at it and carries only what RUNNER does not; ⛔ no second copy.

          Flight scope

          IMPLEMENT: every item above, as TWO PRs — objectstack (.claude/skills/{checklist-author,checklist-test,dogfood-verification,spec-property-retirement}/SKILL.md, shrink-only under the line ratchet; ⛔ do not touch scripts/pm/check-skill-line-ratchet.mjs — it is held by PR #14236; headroom that appears is re-locked in the corpus audit's Phase 3) and objectui (.claude/skills/verify/SKILL.md, one path fix). Fixes #<this card> and Fixes #14058 both on the objectstack PR.

          DEFER / report-only: the two incidental non-skill items (file as out-of-scope cards if not already carded); X-02's maintainer provenance (#14152) is noted, not re-litigated.

          Flight constraints (binding)

          • Draft PRs, governed (.claude/** in both repos) ⇒ stay draft; review requests are the seat's step; skip-changeset in objectstack (docs-only); objectui: empty-frontmatter changeset only if its rule asks, ⛔ never request a label.
          • Line ratchet: no ratcheted file may grow; additions paid by deletions in the same file; ⛔ re-wrap is not payment.
          • ⛔ Do not edit os-dev.md, AGENTS.md, RUNNER.md, SWEEP.md — they are the anchors; a pointer replaces the copy.
          • Gates: pnpm check:pm-skill-ratchet, pnpm check:pm-skill-id-lint, pnpm check:skill-frame-sync, pnpm check:skill-frame-freshness, the packages/create-objectstack template-consistency test, plus node scripts/pm/dispatch-gates.mjs --commands <changed paths>; record the head sha.
          • PR body: per-item 落点 | before | after keyed by finding id; line delta per file; Clause-②: no.

          Refs: #14292 · #14058 (folded) · #14232 (separate: unlocks at #12800's close) · #13597 (the pm-dispatch corpus — ⛔ not touched by this flight).

          Metadata

          Metadata

          Assignees

          Type

          No type

          Projects

          No projects

            Milestone

            No milestone

            Relationships

            None yet

            Development

            No branches or pull requests

            Issue actions

            , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
            Skip to content

            Skills optimization flight — the four small internal skills (+ objectui verify): seven dead references, three rules copied from os-dev.md / SWEEP.md / RUNNER.md, the live-elsewhere gap (#14058), and a versioned Chromium path that breaks on the next image bump #14317

            Description

            @os-litant

            Member card of the skills catalog optimization program #14292 (maintainer mandate 2026-09-02, verbatim: 「审核所有的 skills,进行全面的优化。」). Filed by the skills lane seat (session session_01LraLgQVGq8egUwfYZpbYt1). Read-only audit at objectstack origin/maina59f78d (.claude/skills/** and scripts/pm/** byte-identical at d63c8a2) and objectui 67dadd6. The auditor's harness refused to write a findings file; the findings are recorded here (the dev posts the seat's full audit message as the audit-record comment at claim time — provided in the dispatch brief). Family dispatch: this card also closes #14058 (the live-elsewhere verdict gap in spec-property-retirement) — same file, same fix (SPR-C-05); #14058 keeps its own claim comment pointing at this branch.

            Verdicts

            skillceiling (lines)verdictreducible
            checklist-author62RESTRUCTURE~15 of 44 body lines are a second copy of SWEEP.md
            checklist-test238TRIM~15 lines
            dogfood-verification157DIET~25 lines
            spec-property-retirement337DIET~35 lines + 4 dead refs + 1 blocking gap
            objectui .claude/skills/verify(unpriced, unguarded)HEALTHYone fix

            None is a retirement candidate. All four objectstack skills carry metadata.internal: true (enforced by packages/create-objectstack/src/template-consistency.test.ts:601). Usage cadence is not measurable on a shallow clone (dimension E recorded NOT MEASURED).

            Findings (id · span · fix)

            • SPR-C-01spec-property-retirement:329-332 — "check-generated runs behind a paths filter in ci.yml; add the path in the same PR": that job and filter were deleted (lint.yml:3949,4078 "gone (ci.yml 的 generated paths filter 是门输入集合的手工副本、无人对账——三次漂移在案,收编剩余 4 个门后应整个删除 #4291)"; ci.yml has no paths:); AGENTS.md:724-726 states the current truth. DELETE −4.
            • DOG-C-01dogfood:66-83 (18 lines) — the ablation predict-then-mutate rule duplicates .claude/agents/os-dev.md:274-283 (same criterion, same KNOWN_UNALIASED_TEST_IMPORTS ledger, same two incidents); both texts say the rule is not dogfood's. MERGE-INTO os-dev.md (pointer, 2 lines). −16.
            • CLA-C-01checklist-author:33-51 — opens 「本技能…不是流程的第二份拷贝」 then restates SWEEP.md:48-68 steps 2–6 one-for-one + SWEEP's angle table. REWRITE to the 3 clauses SWEEP lacks + pointer. −13.
            • SPR-D-01spec-property-retirement:316-337 — 4 of 7 traps duplicate a binding anchor (stale-dist = AGENTS.md:764-767; | tail -1 = os-dev.md:140-141; sequential masking = AGENTS.md:725-729 and the skill's own :28-31; --check vs bare = AGENTS.md:754-758). Keep the two unique ones. −10.
            • SPR-C-05 (= [finding] spec-property-retirement skill predates the live-elsewhere verdict — its ledger-verdict discipline never names the never-remove cross-repo case #14058) — the ledger grew a fifth verdict live-elsewhere (packages/spec/liveness/README.md:63-64,262-308; gate packages/spec/scripts/liveness/elsewhere.test.ts; 1 live row of 703): the skill has zero hits for it; §0's four-question checklist and §1's 「dead 裁定是删除的输入」 predate it. ADD a fifth §0 checkbox naming the never-remove cross-repo case, paid by SPR-C-01 + SPR-C-04.
            • CLT-B-01checklist-test:78-87 — 「解析器给出的 automated.ref」 is false: scripts/checklist-select.mjs:180 projects {id,priority,surface,since,revision}; the field lives only in areas/*.json, so the Tier-1 batching step is unexecutable as written. Fix the step to read the field from the area file.
            • SPR-C-02spec-property-retirement:81 — the strict-delete route describes a hand-written z.core.$ZodErrorMap; superseded by [finding][spec] #6619's inventory of hand-written $ZodErrorMaps was two short — strictToolError and strictCapabilitiesError survive the fold, still invisible to alias-integrity.test.ts #6805: shared/strict-object.ts:125-137,257-312guidance: template, audited by alias-integrity.test.ts. Rewrite to name both files.
            • SPR-C-04spec-property-retirement:300-311 — a hand-rolled 10-name check:* loop is the "match by hand" AGENTS.md:742-750 forbids; the skill cites AGENTS.md at :255. REWRITE to check:generated + only the pure audits. −8.
            • VFY-C-01 objectui verify:26-29 — prescribes /opt/pw-browsers/chromium-1194/chrome-linux/chrome; both siblings prescribe the alias /opt/pw-browsers/chromium and warn against exactly this spelling (RUNNER.md:151-160; os-dev.md:142-143). Fix (objectui PR).
            • DOG-F-01dogfood:31-43RUNNER.md:186-208 names dogfood §0 as the origin of the -p <port>-alone trap (self-pinging connectors dial 3000 via SHOWCASE_SELF_URLOS_PORTPORT); grep OS_PORT over dogfood → 0. ADD 2 lines, paid by DOG-C-01.
            • CLT-C-01checklist-test:96-97 — 「派发 runner 子代理时,必须用 opus」 is a memory-sourced blanket tier; pm-dispatch requires 「档位引当次 node scripts/pm/dispatch-gates.mjs --tier 输出,⛔ 不凭记忆」. Rewrite to the --tier rule.
            • CLA-C-02checklist-author:46-49 — 「六条 waiver 有四条已过期」 is the oldest of three disagreeing numbers; SWEEP.md:76-86 says 6 of 6 retired and check-platform-checklist.mjs reports "0 waived". Fix.
            • SPR-C-03:313-314 lists 3 of the 5 no-generator audits AGENTS.md:765-770 names · SPR-C-06:145 「~28 个墓碑」 vs 178 retiredKey( sites and a pin floor of 50 · SPR-F-01 §4's changeset row omits the ADR-0087 disposition marker AGENTS.md:1122-1131 requires (pnpm check:adr-0087-registration enforces) · CLT-C-02/C-03:229-235, :102-105 re-copy RUNNER rules 1–2 despite :24-25 disclaiming a second copy (and :230 claims a precedence RUNNER.md:67 denies) · X-02 the no-subagent degradation clause is stated twice near-verbatim (checklist-author:58-62 / checklist-test:98-101, both from skills(pm): give sweep disjunct ① the drain clauses the finding box already has #14152 — keep ONE, note the maintainer provenance in the PR).
            • Dead references (positive-controlled): SPR:103 scripts/liveness/orphans.mtspackages/spec/scripts/liveness/orphans.mts · SPR:261 packages/cli/src/utils/lint-liveness-properties.tspackages/lint/src/lint-liveness-properties.ts · SPR:282 .changeset/tool-inert-keys-removed.md → consumed at release; cite a live *-retired.md carrying "The retirement kit:" · SPR:329-332 (above) · CLA:42 README's "deep-test 契约" → README.md:42 ## Item anatomy · CLT:78-87 (above). Incidental (non-skill, report only): SWEEP.md:68 "land the run record under runs/" vs runs/.gitignore = *; .claude/launch.json:18-33pr3505-attach-3477 points at a worktree that does not exist.
            • X-01 (structural, decide in-flight by pointer): environment facts are split between checklist-test:27-29→dogfood and RUNNER.md:94-260 (7 facts dogfood lacks, incl. OS_PORT; one stated more fully). Rule: RUNNER.md is the environment anchor; dogfood §0 points at it and carries only what RUNNER does not; ⛔ no second copy.

            Flight scope

            IMPLEMENT: every item above, as TWO PRs — objectstack (.claude/skills/{checklist-author,checklist-test,dogfood-verification,spec-property-retirement}/SKILL.md, shrink-only under the line ratchet; ⛔ do not touch scripts/pm/check-skill-line-ratchet.mjs — it is held by PR #14236; headroom that appears is re-locked in the corpus audit's Phase 3) and objectui (.claude/skills/verify/SKILL.md, one path fix). Fixes #<this card> and Fixes #14058 both on the objectstack PR.

            DEFER / report-only: the two incidental non-skill items (file as out-of-scope cards if not already carded); X-02's maintainer provenance (#14152) is noted, not re-litigated.

            Flight constraints (binding)

            • Draft PRs, governed (.claude/** in both repos) ⇒ stay draft; review requests are the seat's step; skip-changeset in objectstack (docs-only); objectui: empty-frontmatter changeset only if its rule asks, ⛔ never request a label.
            • Line ratchet: no ratcheted file may grow; additions paid by deletions in the same file; ⛔ re-wrap is not payment.
            • ⛔ Do not edit os-dev.md, AGENTS.md, RUNNER.md, SWEEP.md — they are the anchors; a pointer replaces the copy.
            • Gates: pnpm check:pm-skill-ratchet, pnpm check:pm-skill-id-lint, pnpm check:skill-frame-sync, pnpm check:skill-frame-freshness, the packages/create-objectstack template-consistency test, plus node scripts/pm/dispatch-gates.mjs --commands <changed paths>; record the head sha.
            • PR body: per-item 落点 | before | after keyed by finding id; line delta per file; Clause-②: no.

            Refs: #14292 · #14058 (folded) · #14232 (separate: unlocks at #12800's close) · #13597 (the pm-dispatch corpus — ⛔ not touched by this flight).

            Metadata

            Metadata

            Assignees

            Type

            No type

            Projects

            No projects

              Milestone

              No milestone

              Relationships

              None yet

              Development

              No branches or pull requests

              Issue actions

              , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
              Skip to content

              Skills optimization flight — the four small internal skills (+ objectui verify): seven dead references, three rules copied from os-dev.md / SWEEP.md / RUNNER.md, the live-elsewhere gap (#14058), and a versioned Chromium path that breaks on the next image bump #14317

              Description

              @os-litant

              Member card of the skills catalog optimization program #14292 (maintainer mandate 2026-09-02, verbatim: 「审核所有的 skills,进行全面的优化。」). Filed by the skills lane seat (session session_01LraLgQVGq8egUwfYZpbYt1). Read-only audit at objectstack origin/maina59f78d (.claude/skills/** and scripts/pm/** byte-identical at d63c8a2) and objectui 67dadd6. The auditor's harness refused to write a findings file; the findings are recorded here (the dev posts the seat's full audit message as the audit-record comment at claim time — provided in the dispatch brief). Family dispatch: this card also closes #14058 (the live-elsewhere verdict gap in spec-property-retirement) — same file, same fix (SPR-C-05); #14058 keeps its own claim comment pointing at this branch.

              Verdicts

              skillceiling (lines)verdictreducible
              checklist-author62RESTRUCTURE~15 of 44 body lines are a second copy of SWEEP.md
              checklist-test238TRIM~15 lines
              dogfood-verification157DIET~25 lines
              spec-property-retirement337DIET~35 lines + 4 dead refs + 1 blocking gap
              objectui .claude/skills/verify(unpriced, unguarded)HEALTHYone fix

              None is a retirement candidate. All four objectstack skills carry metadata.internal: true (enforced by packages/create-objectstack/src/template-consistency.test.ts:601). Usage cadence is not measurable on a shallow clone (dimension E recorded NOT MEASURED).

              Findings (id · span · fix)

              • SPR-C-01spec-property-retirement:329-332 — "check-generated runs behind a paths filter in ci.yml; add the path in the same PR": that job and filter were deleted (lint.yml:3949,4078 "gone (ci.yml 的 generated paths filter 是门输入集合的手工副本、无人对账——三次漂移在案,收编剩余 4 个门后应整个删除 #4291)"; ci.yml has no paths:); AGENTS.md:724-726 states the current truth. DELETE −4.
              • DOG-C-01dogfood:66-83 (18 lines) — the ablation predict-then-mutate rule duplicates .claude/agents/os-dev.md:274-283 (same criterion, same KNOWN_UNALIASED_TEST_IMPORTS ledger, same two incidents); both texts say the rule is not dogfood's. MERGE-INTO os-dev.md (pointer, 2 lines). −16.
              • CLA-C-01checklist-author:33-51 — opens 「本技能…不是流程的第二份拷贝」 then restates SWEEP.md:48-68 steps 2–6 one-for-one + SWEEP's angle table. REWRITE to the 3 clauses SWEEP lacks + pointer. −13.
              • SPR-D-01spec-property-retirement:316-337 — 4 of 7 traps duplicate a binding anchor (stale-dist = AGENTS.md:764-767; | tail -1 = os-dev.md:140-141; sequential masking = AGENTS.md:725-729 and the skill's own :28-31; --check vs bare = AGENTS.md:754-758). Keep the two unique ones. −10.
              • SPR-C-05 (= [finding] spec-property-retirement skill predates the live-elsewhere verdict — its ledger-verdict discipline never names the never-remove cross-repo case #14058) — the ledger grew a fifth verdict live-elsewhere (packages/spec/liveness/README.md:63-64,262-308; gate packages/spec/scripts/liveness/elsewhere.test.ts; 1 live row of 703): the skill has zero hits for it; §0's four-question checklist and §1's 「dead 裁定是删除的输入」 predate it. ADD a fifth §0 checkbox naming the never-remove cross-repo case, paid by SPR-C-01 + SPR-C-04.
              • CLT-B-01checklist-test:78-87 — 「解析器给出的 automated.ref」 is false: scripts/checklist-select.mjs:180 projects {id,priority,surface,since,revision}; the field lives only in areas/*.json, so the Tier-1 batching step is unexecutable as written. Fix the step to read the field from the area file.
              • SPR-C-02spec-property-retirement:81 — the strict-delete route describes a hand-written z.core.$ZodErrorMap; superseded by [finding][spec] #6619's inventory of hand-written $ZodErrorMaps was two short — strictToolError and strictCapabilitiesError survive the fold, still invisible to alias-integrity.test.ts #6805: shared/strict-object.ts:125-137,257-312guidance: template, audited by alias-integrity.test.ts. Rewrite to name both files.
              • SPR-C-04spec-property-retirement:300-311 — a hand-rolled 10-name check:* loop is the "match by hand" AGENTS.md:742-750 forbids; the skill cites AGENTS.md at :255. REWRITE to check:generated + only the pure audits. −8.
              • VFY-C-01 objectui verify:26-29 — prescribes /opt/pw-browsers/chromium-1194/chrome-linux/chrome; both siblings prescribe the alias /opt/pw-browsers/chromium and warn against exactly this spelling (RUNNER.md:151-160; os-dev.md:142-143). Fix (objectui PR).
              • DOG-F-01dogfood:31-43RUNNER.md:186-208 names dogfood §0 as the origin of the -p <port>-alone trap (self-pinging connectors dial 3000 via SHOWCASE_SELF_URLOS_PORTPORT); grep OS_PORT over dogfood → 0. ADD 2 lines, paid by DOG-C-01.
              • CLT-C-01checklist-test:96-97 — 「派发 runner 子代理时,必须用 opus」 is a memory-sourced blanket tier; pm-dispatch requires 「档位引当次 node scripts/pm/dispatch-gates.mjs --tier 输出,⛔ 不凭记忆」. Rewrite to the --tier rule.
              • CLA-C-02checklist-author:46-49 — 「六条 waiver 有四条已过期」 is the oldest of three disagreeing numbers; SWEEP.md:76-86 says 6 of 6 retired and check-platform-checklist.mjs reports "0 waived". Fix.
              • SPR-C-03:313-314 lists 3 of the 5 no-generator audits AGENTS.md:765-770 names · SPR-C-06:145 「~28 个墓碑」 vs 178 retiredKey( sites and a pin floor of 50 · SPR-F-01 §4's changeset row omits the ADR-0087 disposition marker AGENTS.md:1122-1131 requires (pnpm check:adr-0087-registration enforces) · CLT-C-02/C-03:229-235, :102-105 re-copy RUNNER rules 1–2 despite :24-25 disclaiming a second copy (and :230 claims a precedence RUNNER.md:67 denies) · X-02 the no-subagent degradation clause is stated twice near-verbatim (checklist-author:58-62 / checklist-test:98-101, both from skills(pm): give sweep disjunct ① the drain clauses the finding box already has #14152 — keep ONE, note the maintainer provenance in the PR).
              • Dead references (positive-controlled): SPR:103 scripts/liveness/orphans.mtspackages/spec/scripts/liveness/orphans.mts · SPR:261 packages/cli/src/utils/lint-liveness-properties.tspackages/lint/src/lint-liveness-properties.ts · SPR:282 .changeset/tool-inert-keys-removed.md → consumed at release; cite a live *-retired.md carrying "The retirement kit:" · SPR:329-332 (above) · CLA:42 README's "deep-test 契约" → README.md:42 ## Item anatomy · CLT:78-87 (above). Incidental (non-skill, report only): SWEEP.md:68 "land the run record under runs/" vs runs/.gitignore = *; .claude/launch.json:18-33pr3505-attach-3477 points at a worktree that does not exist.
              • X-01 (structural, decide in-flight by pointer): environment facts are split between checklist-test:27-29→dogfood and RUNNER.md:94-260 (7 facts dogfood lacks, incl. OS_PORT; one stated more fully). Rule: RUNNER.md is the environment anchor; dogfood §0 points at it and carries only what RUNNER does not; ⛔ no second copy.

              Flight scope

              IMPLEMENT: every item above, as TWO PRs — objectstack (.claude/skills/{checklist-author,checklist-test,dogfood-verification,spec-property-retirement}/SKILL.md, shrink-only under the line ratchet; ⛔ do not touch scripts/pm/check-skill-line-ratchet.mjs — it is held by PR #14236; headroom that appears is re-locked in the corpus audit's Phase 3) and objectui (.claude/skills/verify/SKILL.md, one path fix). Fixes #<this card> and Fixes #14058 both on the objectstack PR.

              DEFER / report-only: the two incidental non-skill items (file as out-of-scope cards if not already carded); X-02's maintainer provenance (#14152) is noted, not re-litigated.

              Flight constraints (binding)

              • Draft PRs, governed (.claude/** in both repos) ⇒ stay draft; review requests are the seat's step; skip-changeset in objectstack (docs-only); objectui: empty-frontmatter changeset only if its rule asks, ⛔ never request a label.
              • Line ratchet: no ratcheted file may grow; additions paid by deletions in the same file; ⛔ re-wrap is not payment.
              • ⛔ Do not edit os-dev.md, AGENTS.md, RUNNER.md, SWEEP.md — they are the anchors; a pointer replaces the copy.
              • Gates: pnpm check:pm-skill-ratchet, pnpm check:pm-skill-id-lint, pnpm check:skill-frame-sync, pnpm check:skill-frame-freshness, the packages/create-objectstack template-consistency test, plus node scripts/pm/dispatch-gates.mjs --commands <changed paths>; record the head sha.
              • PR body: per-item 落点 | before | after keyed by finding id; line delta per file; Clause-②: no.

              Refs: #14292 · #14058 (folded) · #14232 (separate: unlocks at #12800's close) · #13597 (the pm-dispatch corpus — ⛔ not touched by this flight).

              Metadata

              Metadata

              Assignees

              Type

              No type

              Projects

              No projects

                Milestone

                No milestone

                Relationships

                None yet

                Development

                No branches or pull requests

                Issue actions

                , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
                Skip to content

                Skills optimization flight — the four small internal skills (+ objectui verify): seven dead references, three rules copied from os-dev.md / SWEEP.md / RUNNER.md, the live-elsewhere gap (#14058), and a versioned Chromium path that breaks on the next image bump #14317

                Description

                @os-litant

                Member card of the skills catalog optimization program #14292 (maintainer mandate 2026-09-02, verbatim: 「审核所有的 skills,进行全面的优化。」). Filed by the skills lane seat (session session_01LraLgQVGq8egUwfYZpbYt1). Read-only audit at objectstack origin/maina59f78d (.claude/skills/** and scripts/pm/** byte-identical at d63c8a2) and objectui 67dadd6. The auditor's harness refused to write a findings file; the findings are recorded here (the dev posts the seat's full audit message as the audit-record comment at claim time — provided in the dispatch brief). Family dispatch: this card also closes #14058 (the live-elsewhere verdict gap in spec-property-retirement) — same file, same fix (SPR-C-05); #14058 keeps its own claim comment pointing at this branch.

                Verdicts

                skillceiling (lines)verdictreducible
                checklist-author62RESTRUCTURE~15 of 44 body lines are a second copy of SWEEP.md
                checklist-test238TRIM~15 lines
                dogfood-verification157DIET~25 lines
                spec-property-retirement337DIET~35 lines + 4 dead refs + 1 blocking gap
                objectui .claude/skills/verify(unpriced, unguarded)HEALTHYone fix

                None is a retirement candidate. All four objectstack skills carry metadata.internal: true (enforced by packages/create-objectstack/src/template-consistency.test.ts:601). Usage cadence is not measurable on a shallow clone (dimension E recorded NOT MEASURED).

                Findings (id · span · fix)

                • SPR-C-01spec-property-retirement:329-332 — "check-generated runs behind a paths filter in ci.yml; add the path in the same PR": that job and filter were deleted (lint.yml:3949,4078 "gone (ci.yml 的 generated paths filter 是门输入集合的手工副本、无人对账——三次漂移在案,收编剩余 4 个门后应整个删除 #4291)"; ci.yml has no paths:); AGENTS.md:724-726 states the current truth. DELETE −4.
                • DOG-C-01dogfood:66-83 (18 lines) — the ablation predict-then-mutate rule duplicates .claude/agents/os-dev.md:274-283 (same criterion, same KNOWN_UNALIASED_TEST_IMPORTS ledger, same two incidents); both texts say the rule is not dogfood's. MERGE-INTO os-dev.md (pointer, 2 lines). −16.
                • CLA-C-01checklist-author:33-51 — opens 「本技能…不是流程的第二份拷贝」 then restates SWEEP.md:48-68 steps 2–6 one-for-one + SWEEP's angle table. REWRITE to the 3 clauses SWEEP lacks + pointer. −13.
                • SPR-D-01spec-property-retirement:316-337 — 4 of 7 traps duplicate a binding anchor (stale-dist = AGENTS.md:764-767; | tail -1 = os-dev.md:140-141; sequential masking = AGENTS.md:725-729 and the skill's own :28-31; --check vs bare = AGENTS.md:754-758). Keep the two unique ones. −10.
                • SPR-C-05 (= [finding] spec-property-retirement skill predates the live-elsewhere verdict — its ledger-verdict discipline never names the never-remove cross-repo case #14058) — the ledger grew a fifth verdict live-elsewhere (packages/spec/liveness/README.md:63-64,262-308; gate packages/spec/scripts/liveness/elsewhere.test.ts; 1 live row of 703): the skill has zero hits for it; §0's four-question checklist and §1's 「dead 裁定是删除的输入」 predate it. ADD a fifth §0 checkbox naming the never-remove cross-repo case, paid by SPR-C-01 + SPR-C-04.
                • CLT-B-01checklist-test:78-87 — 「解析器给出的 automated.ref」 is false: scripts/checklist-select.mjs:180 projects {id,priority,surface,since,revision}; the field lives only in areas/*.json, so the Tier-1 batching step is unexecutable as written. Fix the step to read the field from the area file.
                • SPR-C-02spec-property-retirement:81 — the strict-delete route describes a hand-written z.core.$ZodErrorMap; superseded by [finding][spec] #6619's inventory of hand-written $ZodErrorMaps was two short — strictToolError and strictCapabilitiesError survive the fold, still invisible to alias-integrity.test.ts #6805: shared/strict-object.ts:125-137,257-312guidance: template, audited by alias-integrity.test.ts. Rewrite to name both files.
                • SPR-C-04spec-property-retirement:300-311 — a hand-rolled 10-name check:* loop is the "match by hand" AGENTS.md:742-750 forbids; the skill cites AGENTS.md at :255. REWRITE to check:generated + only the pure audits. −8.
                • VFY-C-01 objectui verify:26-29 — prescribes /opt/pw-browsers/chromium-1194/chrome-linux/chrome; both siblings prescribe the alias /opt/pw-browsers/chromium and warn against exactly this spelling (RUNNER.md:151-160; os-dev.md:142-143). Fix (objectui PR).
                • DOG-F-01dogfood:31-43RUNNER.md:186-208 names dogfood §0 as the origin of the -p <port>-alone trap (self-pinging connectors dial 3000 via SHOWCASE_SELF_URLOS_PORTPORT); grep OS_PORT over dogfood → 0. ADD 2 lines, paid by DOG-C-01.
                • CLT-C-01checklist-test:96-97 — 「派发 runner 子代理时,必须用 opus」 is a memory-sourced blanket tier; pm-dispatch requires 「档位引当次 node scripts/pm/dispatch-gates.mjs --tier 输出,⛔ 不凭记忆」. Rewrite to the --tier rule.
                • CLA-C-02checklist-author:46-49 — 「六条 waiver 有四条已过期」 is the oldest of three disagreeing numbers; SWEEP.md:76-86 says 6 of 6 retired and check-platform-checklist.mjs reports "0 waived". Fix.
                • SPR-C-03:313-314 lists 3 of the 5 no-generator audits AGENTS.md:765-770 names · SPR-C-06:145 「~28 个墓碑」 vs 178 retiredKey( sites and a pin floor of 50 · SPR-F-01 §4's changeset row omits the ADR-0087 disposition marker AGENTS.md:1122-1131 requires (pnpm check:adr-0087-registration enforces) · CLT-C-02/C-03:229-235, :102-105 re-copy RUNNER rules 1–2 despite :24-25 disclaiming a second copy (and :230 claims a precedence RUNNER.md:67 denies) · X-02 the no-subagent degradation clause is stated twice near-verbatim (checklist-author:58-62 / checklist-test:98-101, both from skills(pm): give sweep disjunct ① the drain clauses the finding box already has #14152 — keep ONE, note the maintainer provenance in the PR).
                • Dead references (positive-controlled): SPR:103 scripts/liveness/orphans.mtspackages/spec/scripts/liveness/orphans.mts · SPR:261 packages/cli/src/utils/lint-liveness-properties.tspackages/lint/src/lint-liveness-properties.ts · SPR:282 .changeset/tool-inert-keys-removed.md → consumed at release; cite a live *-retired.md carrying "The retirement kit:" · SPR:329-332 (above) · CLA:42 README's "deep-test 契约" → README.md:42 ## Item anatomy · CLT:78-87 (above). Incidental (non-skill, report only): SWEEP.md:68 "land the run record under runs/" vs runs/.gitignore = *; .claude/launch.json:18-33pr3505-attach-3477 points at a worktree that does not exist.
                • X-01 (structural, decide in-flight by pointer): environment facts are split between checklist-test:27-29→dogfood and RUNNER.md:94-260 (7 facts dogfood lacks, incl. OS_PORT; one stated more fully). Rule: RUNNER.md is the environment anchor; dogfood §0 points at it and carries only what RUNNER does not; ⛔ no second copy.

                Flight scope

                IMPLEMENT: every item above, as TWO PRs — objectstack (.claude/skills/{checklist-author,checklist-test,dogfood-verification,spec-property-retirement}/SKILL.md, shrink-only under the line ratchet; ⛔ do not touch scripts/pm/check-skill-line-ratchet.mjs — it is held by PR #14236; headroom that appears is re-locked in the corpus audit's Phase 3) and objectui (.claude/skills/verify/SKILL.md, one path fix). Fixes #<this card> and Fixes #14058 both on the objectstack PR.

                DEFER / report-only: the two incidental non-skill items (file as out-of-scope cards if not already carded); X-02's maintainer provenance (#14152) is noted, not re-litigated.

                Flight constraints (binding)

                • Draft PRs, governed (.claude/** in both repos) ⇒ stay draft; review requests are the seat's step; skip-changeset in objectstack (docs-only); objectui: empty-frontmatter changeset only if its rule asks, ⛔ never request a label.
                • Line ratchet: no ratcheted file may grow; additions paid by deletions in the same file; ⛔ re-wrap is not payment.
                • ⛔ Do not edit os-dev.md, AGENTS.md, RUNNER.md, SWEEP.md — they are the anchors; a pointer replaces the copy.
                • Gates: pnpm check:pm-skill-ratchet, pnpm check:pm-skill-id-lint, pnpm check:skill-frame-sync, pnpm check:skill-frame-freshness, the packages/create-objectstack template-consistency test, plus node scripts/pm/dispatch-gates.mjs --commands <changed paths>; record the head sha.
                • PR body: per-item 落点 | before | after keyed by finding id; line delta per file; Clause-②: no.

                Refs: #14292 · #14058 (folded) · #14232 (separate: unlocks at #12800's close) · #13597 (the pm-dispatch corpus — ⛔ not touched by this flight).

                Metadata

                Metadata

                Assignees

                Type

                No type

                Projects

                No projects

                  Milestone

                  No milestone

                  Relationships

                  None yet

                  Development

                  No branches or pull requests

                  Issue actions