refactor(skill): replace SKILL_ROOT resolver with SKILL_DIR substitution
The Step 1 and comparison-mode resolver loops walked a hardcoded list of install paths trying to find scripts/last30days.py. Two problems: 1. The list was never exhaustive — it covered ~/.codex/skills, but not ~/.claude/skills, ~/.cursor/skills, ~/.gemini/skills, ~/.copilot/skills, ~/.hermes/skills/research, etc. PR #406 was about to fix that by enumerating more paths, but enumeration is the wrong shape. 2. The resolver could pick a different install than the SKILL.md the model loaded from. Spec-vs-engine divergence is subtle and confusing when it triggers. The model already knows the SKILL.md path it loaded (from its Read tool result). Templating that into the bash block is strictly better than guessing across an enumerated list: - Works for every harness without enumeration (Hermes, Cursor, anything new) because we just use wherever the harness loaded SKILL.md from - Aligns spec with engine — the engine runs from the same install the spec was read from - Deletes ~80 lines of bash across Step 1 + comparison-mode + the prose preamble describing the resolver Mechanics: - SKILL_DIR placeholder in both bash blocks — model substitutes the absolute path of the directory containing the SKILL.md it just Read - One-line validation `[ ! -f "$SKILL_DIR/scripts/last30days.py" ]` catches bad templating with a clear error - All references to $SKILL_ROOT replaced with $SKILL_DIR (badge VERSION lookup, prose description in the LAW-7 preamble area) - STEP 0 unchanged — different concern (marketplaces stale-clone hop) Version 3.2.3 -> 3.2.4 (behavior change: install paths the resolver list never enumerated now work; install paths it did enumerate work the same way they used to but via the SKILL_DIR template).
This commit is contained in:
@@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
|
||||
### Changed
|
||||
|
||||
- Replace the SKILL_ROOT resolver loops in Step 1 and comparison-mode with a single `SKILL_DIR` substitution pattern. The model templates the absolute path of the SKILL.md's own directory (which it always knows from the Read tool result); the bash block just validates that `scripts/last30days.py` lives there. Removes ~80 lines of bash across the two locations. Fixes a real bug: the previous resolver could pick a different install than the SKILL.md the model loaded from (spec-vs-engine divergence) and didn't enumerate harnesses like Hermes at all. The simplification works for any harness without enumeration because it just uses wherever SKILL.md was loaded from. STEP 0's marketplaces-stale-clone hop is unchanged.
|
||||
- Rename "Digg AI 1000" to just "Digg" in user-facing output (footer line, source label, inline-quote suffix, why_relevant, container attribution). Internal references to the upstream Digg AI 1000 product remain in code comments and docstrings.
|
||||
- Bump `POSTS_PER_CLUSTER` from 3 to 5 and the render-side display limit from 2 to 3 to match the per-source enrichment caps used by Reddit, HN, YouTube, TikTok, and GitHub. The previous 3/2 caps routinely truncated cluster context (e.g. dropped a Jason Calacanis quote tweet on a `cli-printing-press` run).
|
||||
- Rewrite SKILL.md path resolution. STEP 0 narrows from a global canonical-path enforcement to a Claude-Code-marketplaces-only stale-clone guard. Step 1 SKILL_ROOT resolver walks a single precedence list (Claude plugin cache, then `~/.codex/skills/`, `~/.agents/skills/`, repo checkout, `./.skills/last30days` for `npx skills add`, CWD, Gemini). Adds SKILL.md frontmatter fallback to `render.py::_skill_version` so the badge no longer prints `v?` on installs that don't include `.claude-plugin/plugin.json`.
|
||||
|
||||
Reference in New Issue
Block a user