Invariant Ace

VerifiedSafe

Define owned inductive invariants and enforce them at strong boundaries to turn 'should never happen' into 'cannot happen'. Use for validation sprawl, cache drift, concurrency bugs, and loop correctness.

Sby Skills Guide Bot
DevelopmentAdvanced
8/6/2026
Claude Code
#invariants#correctness#concurrency#type-safety#validation

Recommended for

Automated summary

This skill steers the agent to turn "should never happen" states into impossible ones by defining owned inductive invariants and enforcing them at parse, construction, API, database, lock, and transaction boundaries.

Strengths

  • Supplies a precise conceptual model (invariant, inductive, owner, precondition/postcondition, safety vs liveness) that heads off common confusions
  • Offers a graduated protection ladder from hope-based assumptions up to compile-time typing, boundary validation, and persistence constraints
  • Forces a concrete counterexample-driven approach (input trace, transitions, schedule) instead of relying on intuition
  • Explicitly targets hard cases: races, duplicates, out-of-order events, idempotency, versioning, and loop correctness

Limitations

  • The detailed protocol steps are truncated in the provided file, so the full procedure cannot be followed as written
  • Assumes the agent can already name the state owner; when it cannot, the skill defers to a clarification phase without offering tooling
  • Relies on companion commands (/tw-fix, /tw-tk) from one ecosystem, which limits portability
  • Provides no concrete code examples to illustrate how the invariants are actually implemented
When to use it

Use it when a task surfaces impossible states, cache or index drift, races, duplicates, or "unreachable" branches that turn out to be reachable.

When not to use it

Skip it for broad implementation requests with no invariant or protocol cues, or when the state owner cannot yet be identified.

Security analysis

Safe
Quality score84/100

The skill is purely advisory methodology prose about defining and enforcing invariants. It contains no shell commands, no network calls, no file/credential access, no obfuscated payloads, and it does not instruct the agent to disable safety checks or take destructive actions. No tools are declared, so the listing introduces no meaningful execution risk.

No concerns found

How this analysis is made

Examples

Cache drift
Our users table has a denormalized post_count column and it keeps drifting from the posts table; a nightly fix-up job reconciles it. Help me define invariants and make the drift impossible instead of patching it.
Duplicate payments
Retries and out-of-order webhooks sometimes cause double charges and stale writes. Work out the invariants for idempotency keys and version checks, name the owner, and tell me where to enforce them.
Unreachable branch
We keep seeing 'should never happen' errors in the error tracker for our order state machine, and flags produce impossible combinations. Find the counterexample trace and restructure the states so illegal ones can't be built.

name: tw-invariant-ace description: "Turn 'should never happen' into 'cannot happen' by defining owned inductive invariants and enforcing them at parse/construct/API/DB/lock/txn boundaries with a verification signal. Use when prompts mention invariants, impossible states, validation sprawl, cache/index drift, idempotency/versioning, retries/duplicates/out-of-order events, race/linearization bugs, loop correctness, or hardening another workflow (for example /tw-fix) with invariant checks first."

Invariant Ace

Mission

Turn "should never happen" into "cannot happen" with minimal, high-leverage changes: pick owned, inductive invariants; enforce them at the strongest cheap boundary; prove via a concrete counterexample trace and a verification signal.

Use When (Signals)

  • Null/shape surprises, runtime validation sprawl, or input decoding scattered across the codebase.
  • Redundant stored facts drift (cache/index/denormalized columns) or "fix-up" code runs often.
  • Flags/states explode; impossible combinations appear; "unreachable" is reachable.
  • Races, duplicate/out-of-order events, retries, partial failures, or "exactly once" assumptions.
  • Idempotency keys, monotonic version/epoch checks, stale writes, or linearization questions are central.
  • Loop/algorithm correctness depends on comments or intuition; tricky indexing/arithmetic/termination.
  • "Should never happen" branches show up in logs or error trackers.

Routing Priority

  • If a task has invariant/protocol cues and also asks for broad implementation (/tw-tk, /tw-fix), run this skill first to lock invariants, then execute edits.
  • If you cannot name state owner + transitions, switch to clarification/discovery before implementation.

Core Model (Fast Definitions)

  • Invariant: predicate P(state) intended to hold for all reachable states in a scope.
  • Inductive: true initially AND preserved by every allowed transition in that scope.
  • Owner: the single module/type/transaction/lock/actor that controls all mutations needed to preserve P.
  • Precondition/postcondition: caller obligation vs operation guarantee; do not mislabel these as invariants.
  • Derived property: recomputable fact; avoid storing it as "must match" unless you centralize updates.
  • Safety vs liveness: invariants are safety ("nothing bad"); keep progress ("eventually") separate.

Immediate Scan

  • State owner: where does the truth live (type/module/service/table)?
  • State boundary: where does raw data enter (API/DB/file/queue)?
  • Allowed transitions: list operations/events that mutate the state (including retries and concurrency).
  • Failure today: one concrete trace (inputs + transitions + schedule) that reaches a bad state.
  • Protection level: hope -> runtime -> construction-time -> type/compile-time -> persistence/protocol/atomicity.
  • Pain tag(s): data | concurrency/protocol | algorithm/loop (often multiple).

Protection Ladder

Choose the cheapest strong layer that makes the violation hard or impossible.

  • Hope-based: comments, assumptions, "unreachable".
  • Runtime: scattered guards/validators near use sites.
  • Construction-time: parse/validate once at boundaries; core code only handles refined values.
  • Type/compile-time: illegal states are unrepresentable (ADTs, typestates, opaque wrappers).
  • Persistence: schema/constraints/transactions enforce invariants at rest.
  • Concurrency boundary: locks/actors/CAS/txns define where invariants must hold (under lock, at commit, at linearization).

Protocol (Counterexample-Driven)

  1. Declare scope + owner.

    • Write "P holds when/where": always | after construction | under lock | at txn commit | after message apply.
    • If you cannot name an owner, the invariant will drift; pick a choke point first.
  2. List transitions and try to break P.

    • For each transition (and retry/out-of-order variants), attempt a counterexample trace.
    • If P fails, decide: bug vs wrong scope vs missing state vs wrong owner.
  3. Make P inductive (or downgrade it).

    • Weaken P, move it to pre/postconditions, or add auxiliary state (version/epoch/status/idempotency key) until it closes under transitions.
  4. Run a coordination check (concurrency/distributed).

    • Ask: can two individually-valid concurrent transitions merge into a P-violating state?
    • If yes, you need coordination (lock/txn/consensus) OR you must redesign the invariant/operation (partition, escrow, monotone merges, idempotency).
  5. Encode enforcement at the strongest cheap boundary.

    • Prefer: parser/decoder + smart constructors + narrow/opaque types + centralized mutation.
    • Avoid: N scattered validators, duplicated truths without a single writer, and "fix-up" routines on every read.
  6. Add observability if full enforcement must be staged.

    • Add cheap tripwires (assert/log/metric) and quarantine paths (reject/dead-letter/compensate).
    • Record replayable context (transition name, IDs, versions), not raw secrets.
  7. Verify with the right harness.

    • Data: fuzz/property tests on parsers/constructors.
    • State machines: stateful/model-based tests (sequences).
    • Concurrency: stress + schedule perturbation; assert at quiescent points.
    • Protocols: small model checking/simulation for drops/dupes/reorder.
    • Algorithms: invariant assertions in loops + differential tests vs reference.

Compact Mode (Fast Path)

Use this when the task is small or time-boxed.

  1. Counterexample: one concrete failing trace (<=5 transitions).
  2. Invariants: 1-2 predicates with explicit owner + scope.
  3. Enforcement Boundary: one chosen choke point (parse/construct/API/DB/lock/txn).
  4. Verification: one signal tied to one predicate.

Escalate to full protocol if any of the above is ambiguous or non-inductive.

Invariant Record (Use This Format)

  • Predicate: P(state) (precise, checkable)
  • Owner: module/type/service/table/lock/txn
  • Holds: always | after construction | under lock | at commit | after apply
  • Maintained by: transitions that must preserve P
  • Enforced at: parse/construct/API/DB/lock/txn/protocol
  • Counterexample to avoid: minimal trace that breaks it today
  • Verification: property/stateful/stress/model/differential

Patterns by Pain

Data Modeling & Input Validity

  • Boundary refinement: raw -> parsed -> validated; only validated enters core.
  • Canonicalization: normalize early (case/whitespace/timezone/ID format) so equality and caching are stable.
  • Explicit absence: model optionality explicitly; avoid "sometimes null" in the core.
  • Cross-field coupling: combine coupled fields into one value to prevent illegal combinations.
  • Denormalization discipline: if you store derived facts, centralize writes or make them recomputed.

Concurrency & Protocol Correctness

  • Lock/txn invariants: P holds under lock or at commit; define where the linearization point is.
  • Monotonic metadata: versions/epochs/counters only increase; reject stale writes.
  • Idempotency: retries and duplicates are safe (idempotency keys, dedupe tables, "apply once").
  • Explicit state machines: enumerate states + allowed transitions; persist enough metadata to reject out-of-order events.
  • Coordination decisions: if P depends on global uniqueness or non-negativity under concurrent debits, choose coordination or redesign (partition/escrow).

Algorithms & Loop-Heavy Code

  • Loop invariants: assert what is preserved each iteration (partitioned regions, sorted prefix, conservation laws).
  • Variant/termination: name a decreasing measure; if you cannot, expect non-termination edges.
  • Representation invariants: hide internal structure behind an API; add a rep-check for tests/debug.
  • Differential testing: compare to a simple, slow reference implementation to catch corner cases.

Before/After Sketches (Language-Agnostic)

Boundary Refinement (Data)

Before: functions accept RawInput and validate ad hoc
After:  parseRaw(...) -> ValidatedValue | Error
        core functions accept ValidatedValue only

Idempotency + Versioning (Concurrency/Protocol)

Before: handle(event) mutates state directly (retries duplicate side effects)
After:  if seen(event.id) return
        if event.version <= state.version return (or reject)
        apply(event) at a single atomic boundary (lock/txn/CAS)

Loop Invariant (Algorithm)

Before: comment says "array left side is partitioned"
After:  assert(invariant(state)) inside loop
        test: random arrays, shrink failing cases, compare to reference

Verification

Pick at least one signal and tie it to a specific invariant predicate.

  • Property/fuzz: parsers, constructors, normalization.
  • Stateful/model-based: sequences over operations; check invariants after each step.
  • Concurrency stress: N threads + jitter; assert invariants at quiescent points.
  • Protocol simulation: reorder/duplicate/drop + crash/restart; assert safety invariants.
  • Model checking (optional): small state + exhaustive exploration for protocols.
  • Differential/reference: algorithm output equals reference for randomized inputs.
  • Runtime tripwires: assertions/logging/metrics for staged rollout.

Research Anchors (Mental Models, Not Requirements)

  • Hoare/Floyd/Dijkstra: invariants as proof objects; weakest preconditions.
  • ADT/rep invariants (Liskov-style): abstraction function + local reasoning.
  • Abstract interpretation: over-approx reachable states; inferred invariants.
  • Dynamic invariant mining (Daikon-style): candidate generation; falsify with counterexamples.
  • Separation logic / framing: invariants tied to ownership; interference-aware reasoning.
  • Rely-guarantee & linearizability: concurrency invariants under schedules.
  • TLA+/Alloy mindset: protocols as transitions + invariants; counterexample traces.
  • Coordination avoidance / CRDT laws: when invariants require coordination vs merge-safe design.

Output Contract (Required Headings)

Use these exact headings in the final response for this skill:

  1. Counterexample
  2. Invariants
  3. Owner and Scope
  4. Enforcement Boundary
  5. Seam (Before -> After)
  6. Verification
  7. Observability (optional)

Deliverable Checklist

  1. Counterexample: minimal breaking trace (include schedule/retry if relevant).
  2. Invariants: 1-5 predicates with owner + scope ("holds when").
  3. Enforcement Boundary: boundary/type/API/DB/lock/txn/protocol choice + why.
  4. Seam (Before -> After): minimal structural change that makes violations hard.
  5. Verification: property/stateful/stress/model/differential tied to at least one predicate.
  6. Observability (optional): tripwires/quarantine/metrics if rollout must be staged.

Cross-Coordination

  • If broader failures emerge, lean on the Unsoundness checklist.
  • If stronger invariants dent ergonomics, reference the Footgun guardrails.

From the file to a first result

The download contains exactly the content displayed on this page. This copy may differ from the latest version in the source repository.

View the source and supporting files

This download contains SKILL.md only. Any scripts, references, templates and dependencies are not included. Get the required files from the source, preserving their directory structure, before continuing.

1. Download the file

Download SKILL.md

From the root of a test project, save the file as .skill-downloads/invariant-ace-msh3uubt/SKILL.md, or use the command below. This folder is for inspecting the skill before installation.

Command for macOS/Linux or WSL: requires a POSIX shell and curl. On Windows without WSL, use the download button and create the folder manually.

mkdir -p '.skill-downloads/invariant-ace-msh3uubt' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/invariant-ace-msh3uubt/download' --output '.skill-downloads/invariant-ace-msh3uubt/SKILL.md.part' && mv '.skill-downloads/invariant-ace-msh3uubt/SKILL.md.part' '.skill-downloads/invariant-ace-msh3uubt/SKILL.md'

2. Check prerequisites

Read SKILL.md before using it. If it references scripts or external services, inspect them and prepare the required access in your test environment.

No recognized prerequisites section in this file. This does not mean it is self-contained: libraries, tools and access requirements may be mentioned elsewhere in the content or source repository.

The platforms on this page are catalog indications. The paths below follow tool documentation; they do not prove this skill has been run in those tools. No minimum tool version is confirmed for this listing.

3. Load the skill

After inspection, copy the complete folder into your project using one of the commands below, then open a new tool session. The command stops if a folder with the same name already exists: compare the files before replacing it.

Claude Code
test -f '.skill-downloads/invariant-ace-msh3uubt/SKILL.md' && test -s '.skill-downloads/invariant-ace-msh3uubt/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/tw-invariant-ace' && cp -R '.skill-downloads/invariant-ace-msh3uubt' '.claude/skills/tw-invariant-ace'

OpenSkills

OpenSkills must already be installed. The local install/read procedure is checked with OpenSkills 1.5.0, which requires Node.js ≥ 20.6.0. Catalog slugs are not resolved automatically.

Official OpenSkills installation
openskills install './.skill-downloads/invariant-ace-msh3uubt'

openskills read 'invariant-ace-msh3uubt'

Reading should display the installed file content and its base directory. It does not run the skill or install its dependencies.

For an agent that reads AGENTS.md, then sync the index. This command changes AGENTS.md: review the diff before using it.

openskills sync

Manual method or another tool: attach SKILL.md to a conversation, or open it in an agent that can read files. Include any required supporting resources. No universal folder is recognized by every tool.

4. Try a first task

Use a short, synthetic input: an API endpoint, a small document or an interface brief. In a new conversation, attach the file or give the agent its path, then adapt this request:

Read .skill-downloads/invariant-ace-msh3uubt/SKILL.md and apply its instructions to this example: [describe a test input]. Identify any missing files, dependencies or access. Produce the result requested by the skill without inventing data or running unreviewed scripts.

Expected result: output matching the skill instructions, or a precise list of missing prerequisites. A read confirmation alone does not validate a first use. If an external resource is unavailable, that path remains untested.

Related skills