chore(memory): BDR-105 skill-catalog prune + 21st gate, LRN-175..178, BLK-023, EVAL-034
This commit is contained in:
@@ -42,6 +42,7 @@ rules:
|
|||||||
| BLK-020 | 2026-09-02 | notify-attention: both channels dead on one VS Code client — 2026-09-02 | resolved |
|
| BLK-020 | 2026-09-02 | notify-attention: both channels dead on one VS Code client — 2026-09-02 | resolved |
|
||||||
| BLK-021 | 2026-09-22 | Bash tool dead mid-session ("every command exits 1"): /tmp usrquota blown by a dead session's probe HOMEs — 2… | open |
|
| BLK-021 | 2026-09-22 | Bash tool dead mid-session ("every command exits 1"): /tmp usrquota blown by a dead session's probe HOMEs — 2… | open |
|
||||||
| BLK-022 | 2026-09-22 | `hooks/guard-bash.sh` withheld by the safety classifier; executable spec shipped instead — 2026-09-22 | open |
|
| BLK-022 | 2026-09-22 | `hooks/guard-bash.sh` withheld by the safety classifier; executable spec shipped instead — 2026-09-22 | open |
|
||||||
|
| BLK-023 | 2026-09-28 | floor-guard SKIP pattern `xit(` (Jasmine) matches any `exit(` in python/JS test helpers → false ECARTS; workaround: no `exit(` in inline python, bash derives rc from output — 2026-09-28 | open |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -261,3 +262,9 @@ rules:
|
|||||||
- **Real cause**: the hook body is a dense list of destructive-command patterns (rm -r forms, disk tools, docker escapes, history rewrites); the classifier reads it as harmful capability regardless of the defensive frame.
|
- **Real cause**: the hook body is a dense list of destructive-command patterns (rm -r forms, disk tools, docker escapes, history rewrites); the classifier reads it as harmful capability regardless of the defensive frame.
|
||||||
- **Solution**: `lib/tests/guard-bash.test.sh` (214 cases, deny/allow) stays as the spec and SKIPs while the hook is absent, so `make test` stays green. Options: user writes the hook against the spec (start from `/mnt/cloudpex/RECOVERY/01-prochain-systeme/claude-config/hooks/guard-bash.sh`, already on disk, then iterate to green); or a different design (allowlist of first words + path containment) requested explicitly. Until then: static deny (BDR-095) covers the direct forms; nested forms rely on the classifier prose.
|
- **Solution**: `lib/tests/guard-bash.test.sh` (214 cases, deny/allow) stays as the spec and SKIPs while the hook is absent, so `make test` stays green. Options: user writes the hook against the spec (start from `/mnt/cloudpex/RECOVERY/01-prochain-systeme/claude-config/hooks/guard-bash.sh`, already on disk, then iterate to green); or a different design (allowlist of first words + path containment) requested explicitly. Until then: static deny (BDR-095) covers the direct forms; nested forms rely on the classifier prose.
|
||||||
- **Status**: open. Links [[BDR-095]], [[LRN-160]].
|
- **Status**: open. Links [[BDR-095]], [[LRN-160]].
|
||||||
|
|
||||||
|
## BLK-023 — floor-guard `xit(` substring flags every `exit(` — 2026-09-28
|
||||||
|
- **Friction**: fresh verifier returned ECARTS(1) on a fully conform diff: `FLOOR SKIP lib/tests/profile-census.test.sh:116 sys.exit(1 if violations else 0)`. One re-dispatch spent on a tool artefact.
|
||||||
|
- **Real cause**: `lib/floor-guard.sh` SKIP_SUBSTRINGS holds the bare fragment `'xit('` to catch Jasmine's `xit(…)`; `skip_kind()` is a plain substring match, so `sys.exit(`, `SystemExit(`, `process.exit(` all hit.
|
||||||
|
- **Solution**: workaround applied — the inline python prints violations only, the bash wrapper derives the return code from the captured output (no `exit(` anywhere). Root fix pending: word-bound the pattern (`(^|[^a-zA-Z_.])xit\(`) or match `xit(` only in JS/TS test files; hotfix-sized.
|
||||||
|
- **Status**: open. Links [[BDR-105]], [[BDR-102]] (floor-guard origin), [[EVAL-034]].
|
||||||
|
|||||||
@@ -126,6 +126,7 @@ rules:
|
|||||||
| BDR-102 | 2026-09-27 | agent-skills: no plugin, vendor 3 skills + build floor-guard + routing census + rest-api rule | accepted |
|
| BDR-102 | 2026-09-27 | agent-skills: no plugin, vendor 3 skills + build floor-guard + routing census + rest-api rule | accepted |
|
||||||
| BDR-103 | 2026-09-27 | 6-repo review: 5 verdicts, 3 criteria (grep-verified coverage, per-session cost, doctrine conflict); stars decided nothing | accepted |
|
| BDR-103 | 2026-09-27 | 6-repo review: 5 verdicts, 3 criteria (grep-verified coverage, per-session cost, doctrine conflict); stars decided nothing | accepted |
|
||||||
| BDR-104 | 2026-09-28 | MengTo motion pack: vendor 5 scroll skills pinned via shared lib/vendor-skills.sh + build personal skill site-motion; 17 skipped | accepted |
|
| BDR-104 | 2026-09-28 | MengTo motion pack: vendor 5 scroll skills pinned via shared lib/vendor-skills.sh + build personal skill site-motion; 17 skipped | accepted |
|
||||||
|
| BDR-105 | 2026-09-28 | skill-catalog prune: 9 gstack out via GSTACK_REMOVED, full ⊇ every profile, max = everything, brightdata + frontend-design plugin off, security-guidance Stop review off, design gate asks `21st login` and waits | accepted |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -1309,3 +1310,12 @@ Branch feature/user-writing-web-rules, UNMERGED (human gate).
|
|||||||
- **Reference**: commits 2a1ad17 (helper + vendoring), ba14b5e (site-motion); contracts `.claude/tasks/contracts/2026-09-27-{mengto-vendor,site-motion-skill}-0002.md`; gates MET, verifiers CONFORME after 3 re-dispatches (frontmatter shape, refresh convention, security env override + traversal), security PASS ×2, `make test` 36 suites green minus 2 pre-existing T16a. Links [[BDR-103]] [[BDR-102]] [[LRN-141]] [[LRN-174]] [[EVAL-033]].
|
- **Reference**: commits 2a1ad17 (helper + vendoring), ba14b5e (site-motion); contracts `.claude/tasks/contracts/2026-09-27-{mengto-vendor,site-motion-skill}-0002.md`; gates MET, verifiers CONFORME after 3 re-dispatches (frontmatter shape, refresh convention, security env override + traversal), security PASS ×2, `make test` 36 suites green minus 2 pre-existing T16a. Links [[BDR-103]] [[BDR-102]] [[LRN-141]] [[LRN-174]] [[EVAL-033]].
|
||||||
- **Amendment 2026-09-28**: the two LOW caveats closed on user ask (415b44e): `re.fullmatch` guard, `commit`/`source`/`path` validated before URL construction, 4 more hermetic cases (12). Security PASS, verifier CONFORME 9/9.
|
- **Amendment 2026-09-28**: the two LOW caveats closed on user ask (415b44e): `re.fullmatch` guard, `commit`/`source`/`path` validated before URL construction, 4 more hermetic cases (12). Security PASS, verifier CONFORME 9/9.
|
||||||
- **Amendment 2026-09-28 (doctor)**: `make doctor` now checks every vendored external (6394fa7, feature/doctor-vendored-skills): lock files present, symlink per active profile, parked ≠ failed, hints. Lib sourceable for the hermetic suite (11 cases); doctor mirrors `active_profile()` instead of sourcing profile.sh (its main runs on source). Security: lock shape-validated, allowlists on profile/item names. Closes the gap that emil/frontend-design/motion had since their install.
|
- **Amendment 2026-09-28 (doctor)**: `make doctor` now checks every vendored external (6394fa7, feature/doctor-vendored-skills): lock files present, symlink per active profile, parked ≠ failed, hints. Lib sourceable for the hermetic suite (11 cases); doctor mirrors `active_profile()` instead of sourcing profile.sh (its main runs on source). Security: lock shape-validated, allowlists on profile/item names. Closes the gap that emil/frontend-design/motion had since their install.
|
||||||
|
|
||||||
|
## BDR-105 — skill-catalog prune: 9 gstack removed, `full` ⊇ every profile, `max` = everything, two plugins off, Stop review off, 21st sign-in gate
|
||||||
|
- **Date**: 2026-09-28
|
||||||
|
- **Status**: accepted, feature/skill-catalog-prune, merged to develop 2026-09-28 (user go "merge le tout")
|
||||||
|
- **Decision**: (1) `lib/gstack-removed.sh` = single denylist (ship, land-and-deploy, setup-deploy, autoplan, context-save, learn, careful, guard, design-shotgun): in no profile, `max` included; `profile.sh gstack on` and `toggle-external enable gstack` skip them. (2) User rule: `full` (default) carries everything every other profile carries, one allowlisted exception pr-review-toolkit; `max` (`# SUPERSET-OF: full`) = full + parked (make-pdf, diagram, 21st-ai/ui-explore/ui-review) + pr-review-toolkit. 21st trio out of full/web/web-full/design. `lib/tests/profile-census.test.sh` locks the three invariants live + baseline/mutant fixtures. (3) Live plugin state: brightdata-plugin@synced `false`, frontend-design@claude-plugins-official uninstalled (byte-dup of the managed skills-external copy). (4) settings.json `env.ENABLE_STOP_REVIEW=0`: security-guidance keeps regex + commit/push agentic review, loses the Opus call per code-changing turn. (5) `lib/gstack-links.sh` builds the whole helper tree under `~/.claude/skills/gstack/` (83 hardcoded paths), one lib for link.sh, install-plugins.sh, update-all.sh; `lib/doctor-skills.sh` counts through symlinks with the census parser. (6) Routing: Ship/PR → ship-feature, never gstack ship. (7) Design gate exit 12 `SIGN-IN REQUIRED`: installed-but-signed-out 21st → ask `! 21st login`, end turn, re-run; explicit "proceed without 21st" = only skip; unknown whoami → 11 with diagnostic.
|
||||||
|
- **Why**: 5-analyzer audit over 150 skills / 53.5k chars of descriptions; harness shows ~19k, least-invoked lose theirs → 78 name-only this session ([[LRN-175]]). ship base = origin/HEAD = main on Gitea; land-and-deploy `gh pr merge --squash` + deploy; autoplan/make-pdf/diagram/careful/guard/freeze hardcode paths only bin + browse/dist linked ([[LRN-177]]); context-save without restore; brightdata keyless + `bright-data-mcp` orders WebFetch replaced; security-guidance 0 findings / 6 days, 1 FP ([[EVAL-024]]); doctor undercount ×6. 21st CLI `Not logged in` → user: ask and wait, not skip.
|
||||||
|
- **Alternatives rejected**: rm symlinks by hand (set/reset re-materialize, `gstack on` restores everything → denylist instead); per-skill toggles inside ui-ux-pro-max (all-or-nothing, unverified); drop superpowers in the same run (7 skills wired in ship-feature/init-project → tier 2, own branch); keep the 21st trio in design profiles (redundant with impeccable + ui-ux-pro-max, CLI signed out); raise `SLASH_COMMAND_TOOL_CHAR_BUDGET` (costs context, the opposite goal); keep the official frontend-design plugin and drop the copy (copy is profile-managed and gate-checked); shared 21st auth helper across 3 scripts (breaks 4 fixture suites, changes installer semantics — [[LRN-178]]); in-session `export TWENTYFIRST_TOKEN` remedy (env does not persist across tool calls).
|
||||||
|
- **Caveats**: kept gstack skills still route to removed names in their upstream prose (Skill call fails, doctrine applies); helper tree links every top-level submodule entry (no SKILL.md exposed, asserted); security-guidance commit review quota unmeasured; doctor constants rebased on 2026-09-28 measures; `apply` is additive → other machines run `set full`, not `apply`.
|
||||||
|
- **Reference**: f83f8f7 02b62f7 4c86d6d 729d715 (prune), bd3e525 132bcdf (21st gate); contracts `2026-09-28-skill-catalog-prune-0554` (18 criteria, oracles in `.oracles/`) and `2026-09-28-21st-signin-gate-1215` (7); plans r4 / r3 after 3 challengers + 1 confirmation each; GATE 0 MET, verifiers CONFORME (iter 2 / iter 1), security PASS ×2; 42 suites green minus 2 pre-existing T16a. Links [[BDR-030]] [[BDR-101]] [[BDR-093]] [[BDR-095]] [[BDR-080]] [[BDR-025]] [[BDR-070]] [[LRN-175]] [[LRN-176]] [[LRN-177]] [[LRN-178]] [[BLK-023]] [[EVAL-034]].
|
||||||
|
|||||||
@@ -54,6 +54,7 @@ rules:
|
|||||||
| EVAL-031 | 2026-09-25 | /feat run for BDR-101: challenge round earned its cost, two blockers sat in my own premises | keep challenge round on state-detection plans; check live state before planning; pin grep in oracles |
|
| EVAL-031 | 2026-09-25 | /feat run for BDR-101: challenge round earned its cost, two blockers sat in my own premises | keep challenge round on state-detection plans; check live state before planning; pin grep in oracles |
|
||||||
| EVAL-032 | 2026-09-27 | 4 parallel feater executors, one tree, gate loop: verifier caught a vacuous test, security caught a partial-write; my oracles wrong twice | keep same-tree parallel dispatch with disjoint FILE SCOPE + orchestrator-owned shared files; blind verifier stays; measure oracles on precedents |
|
| EVAL-032 | 2026-09-27 | 4 parallel feater executors, one tree, gate loop: verifier caught a vacuous test, security caught a partial-write; my oracles wrong twice | keep same-tree parallel dispatch with disjoint FILE SCOPE + orchestrator-owned shared files; blind verifier stays; measure oracles on precedents |
|
||||||
| EVAL-033 | 2026-09-28 | case 7: 2 analyzers + 2 executors + 3 re-dispatches; verifiers caught shape, convention and my wrong count; security caught an env override | brief names the scratchpad path explicitly (3 /tmp leftovers); keep blind verifiers; count claims get an artifact |
|
| EVAL-033 | 2026-09-28 | case 7: 2 analyzers + 2 executors + 3 re-dispatches; verifiers caught shape, convention and my wrong count; security caught an env override | brief names the scratchpad path explicitly (3 /tmp leftovers); keep blind verifiers; count claims get an artifact |
|
||||||
|
| EVAL-034 | 2026-09-28 | catalog prune + 21st gate: two challenge rounds each found what r3 missed (nested SKILL.md, fixture cp lists, in-session export); my ledgers failed twice (heredoc CHECKs); 5 executors DONE first pass; verifier gap = tool false positive | keep the confirmation pass on any plan that changed materially; one-line CHECKs; grep fixture cp lists before a `source` |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -322,3 +323,10 @@ Dogfood: 3 blind lenses attacked the v1 plan for the plan-challenge feature itse
|
|||||||
- **Result**: both CONFORME after 3 re-dispatches: frontmatter shape (executor mirrored external peers instead of the named personal ones), update-all refresh convention (executor's "additive" install broke "not installed — skipping"), security MEDIUM env override + LOW traversal. Verifier also doubted my CHANGELOG "sixteen skipped" → it was seventeen. Byte-for-byte fidelity of 14 files confirmed twice.
|
- **Result**: both CONFORME after 3 re-dispatches: frontmatter shape (executor mirrored external peers instead of the named personal ones), update-all refresh convention (executor's "additive" install broke "not installed — skipping"), security MEDIUM env override + LOW traversal. Verifier also doubted my CHANGELOG "sixteen skipped" → it was seventeen. Byte-for-byte fidelity of 14 files confirmed twice.
|
||||||
- **Anomalies**: (1) three sub-agents wrote to `/tmp` outside the scratchpad then could not `rm -rf` (refused, correctly) — the brief must name the scratchpad path; (2) executors' self-justified deviations were plausible each time and wrong twice → blind verifier stays mandatory; (3) analyzer reports at ~120-180 words per skill were the right grain, two of them fit my context; (4) `make test` rc 1 is still the 2 pre-existing T16a, my filter now shows totals.
|
- **Anomalies**: (1) three sub-agents wrote to `/tmp` outside the scratchpad then could not `rm -rf` (refused, correctly) — the brief must name the scratchpad path; (2) executors' self-justified deviations were plausible each time and wrong twice → blind verifier stays mandatory; (3) analyzer reports at ~120-180 words per skill were the right grain, two of them fit my context; (4) `make test` rc 1 is still the 2 pre-existing T16a, my filter now shows totals.
|
||||||
- **Action**: brief template line "scratch only under <scratchpad>"; count claims in CHANGELOG/journal cite the list they count; keep the analyzer-first pattern for any pack > 5 skills.
|
- **Action**: brief template line "scratch only under <scratchpad>"; count claims in CHANGELOG/journal cite the list they count; keep the analyzer-first pattern for any pack > 5 skills.
|
||||||
|
|
||||||
|
## EVAL-034 — two /feat runs by hand: challengers earned their cost, my artefacts were the weak link
|
||||||
|
- **Date**: 2026-09-28
|
||||||
|
- **Method**: 5 analyzers (4 clusters + docs guide) → user decisions (4 questions ×2 batches) → contract 18 criteria → plan r1→r4 with 3 blind challengers + 1 confirmation → 4 feater in parallel (disjoint scopes) → gates.sh → fresh verifier → security. Second run (21st gate): same chain, 1 executor.
|
||||||
|
- **Result**: prune — challengers closed 8 MAJOR at r3, the confirmation pass still found 1 BLOCKER (nested SKILL.md in browser-skills/openclaw/node_modules) + 3 MAJOR (setup's global symlink, update-all 3rd copy, fixture cp lists); executors 4/4 DONE first pass; GATE 0 UNMET(4) = my heredoc CHECKs ([[LRN-176]]); verifier ECARTS(1) = floor-guard false positive ([[BLK-023]]), CONFORME at iteration 2; security PASS. 21st gate — three lenses: my shared-helper reflex = BLOCKER ×2 ([[LRN-178]]), my `export TWENTYFIRST_TOKEN` remedy = MAJOR (env does not persist); confirmation pass pinned the diagnostic format; executor DONE first pass, CONFORME 7/7, PASS.
|
||||||
|
- **Anomalies**: (1) both times the confirmation pass found real defects after "all MAJOR closed" → r3 is not a stopping point; (2) every gate failure of the day was mine (ledger format, tool pattern), none the executors'; (3) verifier and challengers each re-ran the live oracles themselves (link.sh, `set full`, the gate) — cheap, decisive; (4) the user's rule ("full ⊇ every profile") arrived at pass B and inverted a settled plan step: pass B before challenge is the right order.
|
||||||
|
- **Action**: keep the single confirmation pass mandatory when a plan changed materially; contract CHECKs one line, files under `.oracles/`; grep fixture `cp` lists before any new `source`; run the live oracle once by hand before dispatching the verifier.
|
||||||
|
|||||||
@@ -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-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-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-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
|
## 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.
|
- **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]]).
|
- **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]]).
|
||||||
|
|||||||
@@ -49,7 +49,8 @@ frontend-design@claude-plugins-official` (byte-identical to the managed copy).
|
|||||||
`sys.exit(` → restructure), security PASS, make test 41 suites green minus
|
`sys.exit(` → restructure), security PASS, make test 41 suites green minus
|
||||||
2 pre-existing T16a, shellcheck clean. Live: `set full` applied, 75 skills
|
2 pre-existing T16a, shellcheck clean. Live: `set full` applied, 75 skills
|
||||||
listed (was 89), 16 parked, doctor 75 / ~5.4k t.
|
listed (was 89), 16 parked, doctor 75 / ~5.4k t.
|
||||||
- [ ] K5 registries on user approval (BDR prune + full/max rule, LRN listing
|
- [x] K5 registries written on user go (BDR-105, LRN-175..178, BLK-023, EVAL-034), merged
|
||||||
|
to develop on "merge le tout". Was: registries on user approval (BDR prune + full/max rule, LRN listing
|
||||||
budget, LRN gates.sh single-line CHECK, LRN gstack helper-tree class, BLK
|
budget, LRN gates.sh single-line CHECK, LRN gstack helper-tree class, BLK
|
||||||
floor-guard `xit(` pattern, EVAL challenge round), journal. UNMERGED — human
|
floor-guard `xit(` pattern, EVAL challenge round), journal. UNMERGED — human
|
||||||
gate. After merge on any other machine: `make link` + `bash lib/profile.sh
|
gate. After merge on any other machine: `make link` + `bash lib/profile.sh
|
||||||
|
|||||||
Reference in New Issue
Block a user