The reuse rung added in #253 ("Already in this codebase? Reuse it, don't
re-write it.") is load-bearing now, but it was not in the INVARIANTS list,
so a future reword could silently drop it from SKILL.md or AGENTS.md without
tripping the check. Pin it with the substring "in this codebase", present in
both files' rung 2, the same way the safety carve-outs are pinned.
Co-authored-by: Rafaelpta <15382305+Rafaelpta@users.noreply.github.com>
Antigravity IDE loads always-on rules from .agents/rules/. The README
already tells Antigravity users to drop the ruleset there, but the file
was missing. Add it as a verbatim copy of the canonical AGENTS.md body
(no frontmatter, like the .windsurf/.clinerules copies) and register it
in check-rule-copies.js so it is validated against AGENTS.md and cannot
drift. Closes#116.
INVARIANTS pinned only 'input validation at trust boundaries'; the other three carve-outs (data-loss, security, accessibility) could drift silently. Adds 'prevents data loss', 'security', 'accessibility' as canaries, each present verbatim in both SKILL.md and AGENTS.md. No rule text changed.
* feat: refine ruleset from a full-project field review
A reviewer ran ponytail across a 9-phase rewrite (protocol, PC app, simulator,
RPi daemon, ESP32 firmware) and flagged three gaps. All three land in SKILL.md
and propagate to AGENTS.md + the rule copies:
- Promote the one-runnable-check rule to a headline ("Lazy code without its
check is unfinished"), enforced as a check-rule-copies invariant.
- Hardware carve-out in "When NOT to be lazy": a real device is never the spec
ideal (clock drift, sensor offset), leave the calibration knob.
- Clarify the Output rule: explanation the user explicitly asked for is not
debt, only unrequested prose is.
Fallback instructions kept in sync. Rule-copy check + tests green.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* test: add a behavior gate proving the refinements actually fire
The refinements were verified as injected text, but injected != behavioral.
This adds a behavior eval that probes each refined rule on a task that should
trigger it:
- hardware -> does the output leave a calibration knob?
- explanation -> when a write-up is explicitly requested, is it given in full?
- onecheck -> is a runnable check left behind?
benchmarks/behavior.yaml runs the probes (baseline vs ponytail arm); the
grader benchmarks/behavior.js is proven by tests/behavior.test.js (8 cases,
RED/GREEN, no API key, runs in CI). Live-confirmed: the model under the
current ruleset passes all three gates, graded by the same grader.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Cover the Kiro steering file in the equality check (the stripper is now shared, renamed to stripFrontmatter), and align its body with AGENTS.md: the 'Not lazy about' and 'Non-trivial logic' sentences were split into two paragraphs where the canonical body and the other four copies keep them as one. The improved check caught this on the freshly merged #6.
Also add a small invariant canary: four load-bearing rule phrases must appear verbatim in both SKILL.md (the runtime source of truth) and AGENTS.md, catching a rule that lands in one but not the other even though the two files are intentionally different lengths.
Verified: passes on main, exits 1 when a copy diverges or an invariant goes missing.
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>