The per-session core kept growing, and nothing in the loop pushed back. This release moves content out and adds the piece that was missing: a gate that fails when the core grows.
Core: 822 → 728 lines. Every rule added in this release went into a reference file, because the new ratchet now does its job.
Two portability fixes worth upgrading for
If you run on macOS or use zsh, small parts of the skill have probably been failing silently on your machine.
- The id snippet did not parse under bash 3.2 — which is
/bin/bashon a stock macOS install. Unparenthesisedcasepatterns inside a command substitution are a parse error there, so the whole block exited 2 before either of its own guards could fire. Now parenthesised. - Bare
*.mdglobs replaced withfindat four sites. An unmatched glob is a hard error under zsh, so on an empty log the command never ran and the enclosing block aborted.
The size ratchet
validate-skill-bundle.py now carries a core-size ceiling that only ever moves down, reported on every run with the distance to the 500-line target.
Reference files deliberately get no equivalent cap. Their cost is conditional — a reference is loaded only when its episode fires — so the measure that matters is distinct load triggers, not lines. Measured on this bundle, the largest reference carries one trigger and is correctly shaped, while a smaller one carries fourteen. A size rule would have flagged the healthy file. The validator now reports per-reference trigger counts and does not gate on them. This will be improved further in the next releases.
Other gate work
- The frontmatter description is measured for literal block style (
|) as well as folded, so a|description is no longer measured as one character and waved through. - Frontmatter shape is checked structurally whether or not PyYAML is present, so the regex fallback stops accepting blocks a real parser rejects.
- Every reference heading must appear in that file's own Contents index, and every core pointer must resolve to a heading that exists.
- A skill bundle is asserted not to contain a plugin manifest.
New rules
- Log your own rule violations. On a rule's second failure the fix is a structural barrier, never a third rewording.
- Resolve each id at its own write time — for every write, not only batched ones — and write the value the snippet printed.
- Observation writes are not independent calls and must not be issued in one parallel block.
- A park condition names the result in the target, never the state of a vehicle such as a pull request.
- Resolve an observation against a foreign fix point by point, never title against title.
- Verify an observation's factual claims against the live system before promoting them into a rule.
- The keep-two prune is gated on installation, so uninstalled staged work is never deleted as tidying.
- An observation whose right home is not a skill names that path in
target_file, and the review applies to it like a skill. - "Acted on" covers a fix that landed as ordinary work.
- Re-check ownership immediately before the first write — a paused session has not released its task.
- Build a relocation as a re-runnable derivation, not a one-off patch.
- In anything drafted for a delayed send, state only what is measured at send time.
- Declare a conditional block's scope with a detectable condition, and state the negative branch.
- Three install-layout hazards that make a skill silently stop existing: one-level discovery, a backup inside the skills directory, and a hook registered by script path losing its exec bit.
Installing
Download task-observer.skill below, or:
npx skills add rebelytics/one-skill-to-rule-them-all --skill task-observer
Installing the files is not the same as activating the skill — see the README's activation section, and verify in a new session.
Thanks
39 reports folded into this release, from 20 contributors, every one of them a co-author on the release commit:
@notbucki, @qveys, @agerescue, @juniordurant, @moshopping, @minorum, @jnrod03-rgb, @chibuzorokoh, @Pfeifdanix, @orzuclinic, @waylooking-hub, @Panikkos88, @thobi1987-prog, @eriansantos, @medi-jyha, @sidharthdhruv-glitch, @indyshadow111, @almasyegimbayev-ctrl, @Pavlushin, @shahidzadehmasoud-sudo
Please keep them coming!