Six evidence-backed edits to the skill, nothing removed:
- Principle 6 rewritten around parse, don't validate (Alexis King): convert untrusted data once at the trust boundary into a typed shape that cannot represent the invalid states; past the boundary, assert internal invariants.
- Trace-invariants rule tightened: a check that duplicates what an earlier boundary guarantees is a bug of its own.
- Typed domain records (Wlaschin): core domain state gets a named, typed shape; raw dicts and strings stay at the boundary.
- Define errors out of existence (Ousterhout): prefer contracts that make the failure case impossible over raising and forcing every caller to handle it.
- Effects need identity: a side effect that crosses a boundary needs a stable identity so retries and replays are safe.
- Deep modules working rule (Ousterhout): a simple interface over substantial functionality.
Validated in evals/cases-v6 (two preregistered waves, six texts, ~195 runs): review parity with v1.2.0 on the frozen key, 19/19 hidden verifier gates in every run, next-feature extension cost 257 vs 300 changed lines, blinded taste majority 8-5-1. External leg on the Aider polyglot benchmark: all arms pass all tests; a blinded judge preferred Metis-guided code 3:1 over baseline. Full record: evals/cases-v6/REPORT.md.
PORTABLE_PROMPT.md carries the same additions for tools without skill support.