chore(memory): BDR-105 skill-catalog prune + 21st gate, LRN-175..178, BLK-023, EVAL-034
This commit is contained in:
@@ -194,6 +194,10 @@ rules:
|
||||
| LRN-172 | 2026-09-27 | TF-IDF cosine on a 2-doc corpus is identically 0: similarity self-tests need N ≥ 4, a same-corpus positive control and a sensitivity re-run | fixtures for any corpus-normalised statistic (idf, z-score, ranking), "distinct pair passes" tests |
|
||||
| LRN-173 | 2026-09-27 | contract oracles written from memory failed twice: run the CHECK on the precedent files first, census greps via `git grep` (tracked only), `EVIDENCE: pending` mandatory for gates.sh | contract CHECK lines, precedent-mirroring criteria, gates.sh ledgers |
|
||||
| LRN-174 | 2026-09-28 | a coverage census must grep plugin DATA files (CSV/JSON search DBs), not only SKILL.md prose; and a registry sample is not the upstream catalog, list the tree | before claiming a gap in installed skills; before scoping an external-repo evaluation |
|
||||
| LRN-175 | 2026-09-28 | skill listing budget ≈1 % ctx, least-invoked skills lose their description (78/150 name-only); pruning under the cap buys routing + no broken-body invocation, not listing chars; doctor undercount = find w/o -L + single-line desc grep | before any "save tokens by removing skills" claim; doctor token section |
|
||||
| LRN-176 | 2026-09-28 | gates.sh `CHECK:` is single-line: a heredoc body reads as prose, the oracle runs `python3 -` on empty stdin and lands NOT-MET "marker absent", never ERROR; multi-line oracle → `<contract>.oracles/*.py` | writing contract oracles longer than one line |
|
||||
| LRN-177 | 2026-09-28 | gstack skills hardcode `~/.claude/skills/gstack/<path>` (83 paths: bin, scripts, ETHOS.md, */sections, review/specialists, make-pdf/dist, freeze/bin…); only bin + browse/dist were linked → dead skills and vacuous hooks (exit 127); ./setup plants a global symlink; whole-dir link exposes nested SKILL.md; `apply` is additive, `set` parks | any gstack wiring change, any "gstack skill fails" report |
|
||||
| LRN-178 | 2026-09-28 | a top-level `source` added to a lib breaks every hermetic suite that copies that lib alone into a fixture; grep the `cp` lists before adding one, or source lazily inside the branch that needs it | adding `source` to profile.sh / toggle-external.sh / any lib the suites copy |
|
||||
|
||||
---
|
||||
|
||||
@@ -1620,3 +1624,19 @@ Rule: when editing a doctrine file under structure locks, grep the test's lock s
|
||||
## LRN-174 — a coverage census greps plugin data files too; a registry sample is not the catalog
|
||||
- **Context**: I told the user Astro View Transitions had zero local mentions. ui-ux-pro-max's `data/stacks/astro.csv` rows 28-31 carry ClientRouter, `transition:name`, no-JS fallback; `motion.csv` carries GSAP pin/scrub, SplitText, parallax. My grep covered SKILL.md prose and archetypes, not the plugin's CSV search DB. Same day: the ui-skills registry showed 11 MengTo skills; the repo tree has 88 web-design skills, and the substantive ones were outside the sample.
|
||||
- **Apply**: census = `grep -rl` over the plugin cache including data dirs, then say "row in a search DB" vs "workflow"; evaluating an upstream = `git/trees?recursive=1` first, sample never. Correct the user the moment the miss is found ([[BDR-104]]).
|
||||
|
||||
## LRN-175 — the skill listing has a char budget; pruning under it buys routing, not context
|
||||
- **Context**: 150 skills, 53.5k chars of descriptions, but the harness listed ~19k with a description and 78 name-only (profile, seo, tour, all ui-ux-pro-max, 14/15 superpowers, brightdata, synced). Budget ≈1 % of context (`SLASH_COMMAND_TOOL_CHAR_BUDGET`, community-documented), least-invoked skills lose theirs first. doctor.sh said 34 skills / 3.4k t: `find -maxdepth 2` without `-L` skipped every symlinked skill, `grep '^description:' | head -1` counted 0 for block scalars.
|
||||
- **Apply**: removing skills below the cap frees no context (the cap refills); the gain is descriptions back for kept skills + no accidental 50-100 KB broken body load (autoplan = 25k t to fail). Real context levers = session-start injections (superpowers 3.6 KB) and name-only lines. Measure with the census parser through symlinks ([[BDR-105]]).
|
||||
|
||||
## LRN-176 — a multi-line CHECK is silently truncated by gates.sh
|
||||
- **Context**: four `CHECK: python3 - <<'PY' … PY` oracles parsed as one line each; the ledger validated (RUNNABLE 13/18), GATE 0 ran `python3 -` on an empty heredoc → rc 0, no marker → NOT-MET ×4 while every executor had self-checked green. Cause: `_set_attr` takes the rest of the `CHECK:` line only; the body lines are criterion prose.
|
||||
- **Apply**: one line per CHECK; anything longer lives in `<contract>.oracles/c<n>.py` next to the contract (committed with it) and the CHECK calls the file. Follow-up: gates.sh could refuse a CHECK containing `<<`. Sibling of [[LRN-173]] (run the CHECK on precedent files first).
|
||||
|
||||
## LRN-177 — the gstack helper-tree class: one lib, no SKILL.md exposed, dst never a symlink
|
||||
- **Context**: make-pdf MAKE_PDF_NOT_AVAILABLE, diagram BUNDLE_MISSING, careful/guard/freeze hooks exit 127, cso and plan-*-review unable to read `sections/` — all one class: skills hardcode `~/.claude/skills/gstack/<path>`, link.sh (and two copies in install-plugins.sh / update-all.sh) linked only `bin` and `browse/dist`. Traps found by the challengers: gstack `./setup` plants `~/.claude/skills/gstack -> submodule` when absent (a helper writing into dst then nests links inside the submodule); `browser-skills/`, `openclaw/`, `node_modules/` are non-skill dirs holding nested SKILL.md (a whole-dir link would double-list skills); `profile.sh apply` only enables, `set`/`reset` park.
|
||||
- **Apply**: `lib/gstack-links.sh` is the single writer (skill dirs → children minus SKILL.md; non-skill dirs skipped when they hold a SKILL.md; `.git*`/`node_modules` by name; dst symlink removed, dst inside src refused); after a profile edit run `set full`, never `apply`; a gstack skill "failing" → check the census oracle first ([[BDR-105]]).
|
||||
|
||||
## LRN-178 — before a new top-level `source`, grep the fixture `cp` lists
|
||||
- **Context**: twice in one day. E1b's `source gstack-removed.sh` in profile.sh/toggle-external.sh needed a `cp` line in three suites (profile-default, profile-set-managed, toggle-external-repo-resolution) — caught by the confirmation challenger, fixed in scope. My 21st helper plan would have added a second top-level `source` to toggle-external.sh with no fixture update → four suites red under `set -euo pipefail`; two challengers flagged it as BLOCKER, the helper was dropped.
|
||||
- **Apply**: `grep -n "cp .*lib/<file>" lib/tests/*.sh` before adding a `source` to a lib; either widen every fixture copy in the same change or source lazily inside the one branch that needs it. Prefer the inline predicate when only one caller needs the new semantics ([[BDR-105]]).
|
||||
|
||||
Reference in New Issue
Block a user