• v2.0.0 9385c77ac7

    Claude released this 2026-08-16 21:20:02 +00:00 | 157 commits to main since this release

    Cut against the merge commit of #103. Implements ADR-0020.

    Breaking — read before bumping your rev:

    This is a major bump because all three hooks exported through .pre-commit-hooks.yaml can now fail a file that passed at v1.0.0, on three independent axes. A consumer who bumps the pin without reading this will get a red build on unchanged files.

    1. kyberforge-skill-size-check gained a whole new gate family

    The agentskills.io spec backstop is unchanged — still 500 lines and 2,770 words, still counted over the whole file including frontmatter. Alongside it, a context budget measured differently:

    Gate SUGGESTION FAIL Measured over
    description 250 chars 400 chars the YAML-folded value
    body 600 words 900 words body only, after the closing ---

    A file can sit well inside one family and fail the other. Also newly enforced:

    • a missing, valueless or null description: is a hard FAIL, not a skip — a gate that declines to measure the one preloaded field reports green;
    • every boundary-clause routing target must resolve to a real skill or agent;
    • every references/<file>.md a body names must exist.

    Three further checks are SUGGESTION-only and never fail: a description with no boundary clause, a ## Gotchas section over five entries, and one over 25% of the body.

    2. Both Vale prefilters gained error-level rules

    kyberforge-vale-audit-skill and kyberforge-vale-audit-agent pick up Kyberforge.CompositionNote, which bans composition and architecture prose from a description. Every rule in these styles is level: error with no ignorable tier.

    3. PyYAML is now a hard requirement

    The hand-rolled fallback frontmatter reader has been removed, deliberately. It disagreed with PyYAML across the 400-character FAIL boundary, so the same file passed on one machine and failed on another; worse, a reader that mis-parses an unfamiliar scalar shape reports a clean pass on a file it never measured. pip install pyyaml if the hook reports it missing. python3 itself was already required.

    Fixed since v1.0.0

    Defects that passed a fully green gate — each was live while all hooks and all tests reported success:

    • A UTF-8 BOM silently disabled every check. A SKILL.md with a 550-character description and a 1,000-word body exited 0 with zero output. A leading blank line, trailing space after the opening ---, or a missing closing --- did the same.
    • An indented --- inside a block scalar truncated the frontmatter, reclassifying the rest of the description as body — an 815-char description and a dangling target both passed.
    • A non-string description was str()-coerced, so description: true measured as the 4-character "True".
    • An agent file with a valueless description: passed with no output at all — \s* crossed the newline and captured the following key.
    • The gate gave different answers on different machines. Boundary-target resolution ran through the gitignored .claude/skills/ tree, so the same commit measured 2 dangling targets on a developer machine and 6 on a fresh clone. Resolution now walks up from the file being checked to an authoring root, and consults deployed trees only in the genuine consumer case.
    • Whole-file line and word counts disagreed with the audit validators on Unicode whitespace, and their exit status was discarded — a read failure recorded a silent pass on both ceilings.

    Also in this release

    Boundary-target resolution is narrowed so it cannot block a commit on prose. A hyphenated token used as a compound modifier (pre-commit hooks) is confirm-only, and a prose-form target earns a hard error only when its own sentence names another target that resolves; route notation (/name, -> name) is exempt and always blocks. Uncorroborated targets are still reported at SUGGESTION tier on every run — only the power to block is withdrawn.

    kyberforge's own four author/audit skills are retrofitted to the contract: descriptions down 72% (3,364 → 938 chars) and bodies down 70% (8,306 → 2,487 words), all four now using the dispatch pattern.

    Upgrading

    Bump the pin and run the hooks over your existing corpus before committing:

    - repo: https://git.dev.rkdr.net/Defame1297/holocron
      rev: v2.0.0
    
    pre-commit run --all-files
    

    Expect findings on descriptions and bodies that were never measured before. The gates ship hot with no baseline file and no suppression mechanism, so plan the retrofit rather than bumping mid-feature.

    Downloads