skills: trim two descriptions to a routing sentence, and assert their pointers
Lint / hadolint (push) Successful in 10s
Lint / skill-floor (push) Successful in 14s
Lint / doc-drift (push) Successful in 18s
Lint / actionlint (push) Successful in 32s
Lint / skill-frontmatter (push) Successful in 15s

Every skill's name and description sit in the system prompt of EVERY request --
that block is the routing index -- while bodies are fetched on demand through
the read tool. Measured on this device: 24 discoverable skills cost 10,609
description chars (~2,652 tokens) per request, against 474,656 chars of bodies
(~119k tokens) that cost nothing until used. Bodies are 45x the descriptions,
which is what the spec's 1024-char description limit is protecting.

credential-incident-response (1022, two characters under the limit) and
pi-devbox-environment (923) were each carrying a table of contents of what
their body covers. Trimmed to what a description is actually for -- answering
"should I load this?" -- reclaiming 1,087 chars (~271 tokens) of permanent
context. 4,154 -> 3,067 across the five baked skills.

WHY ONLY THESE TWO. Both are named BY PATH from the always-loaded managed
block, so neither depends on description-matching to be found. pi-extensions is
left alone deliberately: check-skill-floor.sh compares the vendored copy to the
package repo by DIRECTORY HASH, so trimming ours alone registers as drift and
turns that gate red; and it is the one skill that also ships in the skillset
repo, where it runs on hosts with no pi-devbox managed block and genuinely needs
its description. pi-devbox-firstboot stays fuller than needed because it is the
skill a device with nothing else has to find.

NOTHING WAS DELETED, ONLY RELOCATED -- and that was checked rather than assumed:
all 18 enumerated items were confirmed present in the bodies BEFORE cutting
(frontmatter stripped, so the description's own line could not score its own
claim), and `git diff --stat` confirms both bodies are byte-identical.

THE TRIM CREATES A DEPENDENCY, SO IT IS NOW ASSERTED. smoke-test.sh checks both
pointers by path, next to the firstboot one. The premise of the cut is "the
block names them", which holds only while those lines exist -- reword the block,
drop a pointer, and the skill silently stops being reachable for a device that
did not already know it was there. Verified discriminating: a reworded block
fails the grep.

An instrument failure caught on the way, and the reason the coverage check was
re-run: my first pass used `grep -E 'a\|b'`, where \| is a LITERAL pipe in ERE,
so 8 of 18 items read as 0 hits. Every zero was a pattern containing \| and
every non-zero lacked one -- that correlation, not the content, was the finding.
With real alternation all 18 are present.

Loader re-verified on both trimmed skills: rc=0, no skill diagnostics.
This commit is contained in:
pi@mbp-m1-2020
2026-10-24 11:26:26 +02:00
parent 206fd1ec35
commit 057827a84b
4 changed files with 39 additions and 15 deletions
@@ -6,13 +6,7 @@ description: >-
agent-authored note. Load this whenever a task involves a leaked/exposed
secret, a token rotation, a "is this credential still live?" question, deciding
whether to delete or scrub stored content, proving a corpus is clean, or
choosing scopes for a new API token. Covers the mandatory order of operations
(probe the issuer FIRST — severity before cleanliness), leak-free identity via
sha256[:8] fingerprints and when publishing one is safe,
why revocation beats deletion for anything already replicated, scopes derived
from measured consumers, the three places a secret hides in a Chroma palace, how to prove ABSENCE rather than assume it (instrument strength,
census vs class passes, the tokenisation trap where quoting decides detectability, why git filters never run on symlinks, self-tests that abort),
where this fleet's secrets live, and what rotation does NOT fix.
choosing scopes for a new API token.
---
# Credential incident response
@@ -6,14 +6,7 @@ description: >-
shell prompt is prefixed `[devbox]`, or `~/.ssh-local/config` is present) and
the task touches any of: reaching the Docker host or its LAN, SSH, DNS name
resolution, what survives container recreate (persistence vs ephemerality),
running Python or other REPLs, tmux, or the pi-studio browser UI. Covers the
persistence model, the interactive-vs-tool-shell alias gotcha
(dssh/dscp/cat=bat exist only in interactive bash), host + LAN SSH
reachability and ControlMaster, split-horizon DNS mechanisms, the tmux
0-index constraint, uv-first Python, and pi-studio reachability. This skill
teaches MECHANISMS only — concrete hostnames, usernames, internal domains,
nameservers, and even the host OS vary per deployment and MUST be discovered
at runtime, never assumed or hardcoded.
running Python or other REPLs, tmux, or the pi-studio browser UI.
---
# pi-devbox environment