Skip to content

Keep duplicate /skill-doctor rows, refuse zero-row tables, report unused plugins; record the 2026-10-15 plugin dispositions - #1153

Open
seathatflowsinourveins wants to merge 1 commit into
mainfrom
claude/cc-native-practice-skills-listing-20261015
Open

seathatflowsinourveins wants to merge 1 commit into
mainfrom
claude/cc-native-practice-skills-listing-20261015

Conversation

@seathatflowsinourveins

Copy link
Copy Markdown
Collaborator

Scope

  • What this PR changes, in one or two sentences: tools/skill-usage/skill_usage.py keeps every /skill-doctor row, so a skill listed from two sources loses neither row. It refuses a table that parses to zero rows as "not measured", and it reports each plugin whose listed skills all show no use in 7 days. The practice skill's skills-library row records the 2026-10-15 plugin dispositions and the claude-native-practice double row (option (a), accepted by the command center).
  • Base commit: f165498aa
  • Lane: lane:foundation
  • Owned paths touched:
    • tools/skill-usage/skill_usage.py, its README.md and plugin-exceptions.json (new and empty);
    • tests/test_skill_usage.py, tests/test_native_practice_skills_listing.py (new) and tests/fixtures/skill_usage/skill-doctor-duplicate.txt (new);
    • the practice skill's slots.json and instructions-skills.md, plus the slot manifest's sha256_when_labeled;
    • evidence/artifacts/skills-listing-20261015/ (new);
    • docs/decisions/2026-10-04-pwsh7-windows-guidance.md: a line reference only;
    • manifests/evidence.json.

Double listing, measured cost (a correction to the accepted basis): option (a) was accepted on a cost of about 130 tokens/turn for the second row. The model is in fact shown the skill once, so the second row costs 0:

  • Model listing: in 2.1.300 the model's skill listing (T5r, byte 228551628) passes loaded skills through Oi(…,"name"), where var Oi=T (byte 216279796) is lodash uniqBy.
  • /skill-doctor table: its skill set (Hfr, byte 227068501) uses the same dedupe. The table (tkn, byte 238412509) prints that name's estimate on every row, and the use cells are keyed by name too.
  • Transcripts: all 182 initial skill-listing attachments in this repository's sessions since the personal copy appeared (2026-10-11T23:38:30Z; clients 2.1.296, 2.1.299 and 2.1.300) name it once.

The report gives table_context_tokens (260: the two rows added together, not a cost) and listing_context_tokens (130). The row stays option (a): no setting change, with the same two checks re-run each release.

Items:

  1. Rows kept: duplicate rows keep their cells, and each name gains a listings list.
  2. Not measured: zero parsed rows give "not measured", and the message says whether the text was empty and how many skills skillUsage lists. skillUsage is read in process, names and counts only, and only when no row parsed. An empty table counts as a broken capture, because the client prints "(no skills loaded)" rather than empty text.
  3. Unused plugins: listing_sources and plugins_unused_7d, minus the exceptions in plugin-exceptions.json, which starts empty. Owner-direction exceptions are added there by pull request.
  4. Skills-library row:
  5. ci: maintain native research automation and attest catalog archives #26: the syncClaudeAiSkills rejection is reworded. Unset and true both sync. A false in .claude/settings.local.json is honored, and the shared .claude/settings.json is not.

Fresh /skill-doctor run (2026-10-15T06:13:14Z, 2.1.300, 0 turns, $0): 72 rows and 71 names, so 1 duplicate.

  • Unused 7 days: 5 plugins (claude-hud, codex, context-mode, socraticode, worktrunk), 0 excepted. The flags are measurements, not a recommendation.
  • Row drop: from 140 to 72 rows, matching the 68 rows of the six disabled plugins.

SOTA sources

Evidence-class table

Claim Evidence class Command / receipt
The model is shown a duplicated skill name once source_review + native_proven binary offsets above; listing-attachments.json (182 attachments)
72 rows, 1 duplicate, 5 plugins unused 7 days native_proven skill-doctor-rows.json (headless /skill-doctor, 0 turns)
Parser keeps rows, refuses zero rows, reports plugins synthetic tests/test_skill_usage.py with the real-row fixture

Local commands run

$ python3 -m unittest tests.test_skill_usage tests.test_native_practice_skills_listing   # base code
KeyError: 'listings' / KeyError: 'duplicate_listings' / AttributeError: no attribute 'claude_config_path' /
AssertionError: 'not measured' not found in '' / TypeError: unexpected keyword argument 'skill_usage' /
TypeError: unexpected keyword argument 'plugin_exceptions' / FileNotFoundError plugin-exceptions.json /
AssertionError on the (a)-(c) row text / FileNotFoundError listing-attachments.json / AssertionError on #26 wording
$ python3 -m unittest tests.test_skill_usage tests.test_native_practice_skills_listing
Ran 250 tests in 90.146s
OK (skipped=8)
$ python3 -m unittest tests.test_native_practice_* tests.test_local_pages_* tests.test_skill_usage tests.test_skill_usage_daily \
    tests.test_skills_manifest tests.test_paired_runs_results tests.test_primary_source_reading_counts
917 tests OK (skipped=13)
$ python3 scripts/validate.py
rc 0; {"components": 71, "hashed_files": 12052, "profiles": 4, "receipts": 240, "status": "passed"}

Notes for the reads

  • Follow-up, daily run timeout: tools/skill-usage/daily_skill_usage.py:103 passes no --claude-timeout. One of three headless /skill-doctor runs hit the 30 s default, and the retry took about 32 s.
  • Follow-up, manifest: adoption/skills/manifest.json still names the two disabled plugins.
  • Follow-up, stale headers: the slots.json and page headers still say client 2.1.295.
  • Manifest rebase: every open practice-row PR rewrites the slot manifest's sha256_when_labeled, so later ones need a manifest rebase.

Checklist

  • No GitHub Actions changed.
  • No workflows changed.
  • No secrets are printed, logged or committed. skillUsage is read names and counts only.
  • No new paid hosting, subscription or billing surface.
  • Peer-owned untracked files and worktrees were preserved.

🤖 Generated with Claude Code

…sed plugins; record the 2026-10-15 plugin dispositions

tools/skill-usage/skill_usage.py (Claude Code 2.1.300, binary sha256
674deba0bba9aee479f4503c438b49303b6fdd304b9a471b14977aaec5215453):
- parse_skill_doctor_listings keeps every printed row; each name-keyed row
  keeps its cells as before and gains `listings`, so claude-native-practice,
  printed from userSettings and projectSettings, loses neither row. The
  report's duplicate_listings gives the sources, each row's context, their
  sum (table_context_tokens) and the one listing (listing_context_tokens):
  2.1.300 lists a name once (T5r and Hfr pass the loaded skills through
  lodash uniqBy on "name"; tkn prints y.get(e.name) on every row), and all
  182 initial skill_listing attachments of this repository's sessions since
  the personal copy appeared name it once.
- A table that parses to zero rows is refused as not measured; the refusal
  says whether the text was empty and how many skills the Claude config's
  skillUsage lists (read in process, names and counts only, only then).
- listing_sources groups rows by source; plugins_unused_7d names each
  plugin with a listed skill whose every row shows no use in the last 7
  days, less the owner-direction exceptions of
  tools/skill-usage/plugin-exceptions.json (created empty).

claude-native-practice skills-library row (slots.json, its layer page and
the snapshot label): the built-in claude-api skill superseding the disabled
claude-api@anthropic-agent-skills plugin (anthropics/claude-code CHANGELOG.md
at 94506ff0d3bd9185f1752da36e968775021fb48f, L7009 and L3528), the typesafe
plugin duplicate disabled with the preloaded typesafe-ai kept, the synced
plugins disabled (#1138), the claude-native-practice double row recorded as
one listing (option (a), re-checked each release), and the
syncClaudeAiSkills rejection reworded: unset and `true` both sync
(settings-reference `syncClaudeAiSkills`, client 2.1.300).

Evidence: evidence/artifacts/skills-listing-20261015 (one /skill-doctor run
through run_skill_doctor at 2026-10-15T06:13:14Z, 0 turns, $0: 72 rows, 71
names, 1 duplicate, 5 plugins unused 7d; and the aggregate listing counts).

Co-Authored-By: Claude Opus 5.5 <[email protected]>

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

lane:foundation Foundation lane: Claude/Codex setup, hosts, memory, RAG, research, workers

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant