本文へ移動
cccskills
無料GitHub で公開

tla-plus

Create, run, and verify TLA+ and PlusCal formal specifications. Use for modeling distributed systems, protocols, concurrent algorithms, state machines. Can compose specs from code, find divergences between spec and implementation, spot concurrency bugs and invariant violations. Use when asked to "write a TLA+ spec", "model check", "verify protocol", "find race conditions", or "formal verification".

インストール方法を見る

含まれるファイル(15)

  • SKILL.md7.3 KB
  • references/language.md5.3 KB
  • references/patterns/code-to-spec.md6.0 KB
  • references/patterns/distributed-systems.md5.7 KB
  • references/patterns/invariants.md5.4 KB
  • references/patterns/protocols.md5.5 KB
  • references/pluscal.md5.1 KB
  • scripts/check.sh921 B
  • scripts/parse.sh417 B
  • scripts/setup.sh2.9 KB
  • scripts/tlc.sh1.3 KB
  • scripts/translate.sh440 B
  • templates/basic.tla930 B
  • templates/distributed.tla2.6 KB
  • templates/pluscal.tla1004 B

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

TLA+ Formal Specification Skill

Write non-trivial TLA+ specifications, run the TLC model checker, and bridge the gap between formal specs and implementation code.

Setup (Run Once)

bash SKILL_DIR/scripts/setup.sh

This downloads tla2tools.jar (v1.8.0) and verifies Java 11+. The JAR is stored at SKILL_DIR/lib/tla2tools.jar.

Quick Reference

Load the right reference for your task:

TaskReference
TLA+ syntax, operators, typesreferences/language.md
PlusCal syntax, processes, labelsreferences/pluscal.md
Distributed systems patternsreferences/patterns/distributed-systems.md
Protocol specificationsreferences/patterns/protocols.md
Invariants, safety, livenessreferences/patterns/invariants.md
Code ↔ spec mapping, bug findingreferences/patterns/code-to-spec.md

Load references on-demand — read the ones relevant to the current task before writing any spec.

Templates

Start from a template when creating a new spec:

TemplateUse For
templates/basic.tlaPure TLA+ state machine
templates/pluscal.tlaPlusCal algorithm with processes
templates/distributed.tlaDistributed system with messages

Running Specs

Full Check (Recommended)

Translates PlusCal (if present), parses, and model-checks in one step:

bash SKILL_DIR/scripts/check.sh spec.tla --config spec.cfg

Individual Tools

# Parse only (syntax check)
bash SKILL_DIR/scripts/parse.sh spec.tla

# Translate PlusCal to TLA+
bash SKILL_DIR/scripts/translate.sh spec.tla -nocfg

# Model check with TLC
bash SKILL_DIR/scripts/tlc.sh spec.tla --config spec.cfg --workers auto
bash SKILL_DIR/scripts/tlc.sh spec.tla --no-deadlock    # suppress deadlock check

Direct Java Invocation

JAR="SKILL_DIR/lib/tla2tools.jar"

# Parse
java -cp "$JAR" tla2sany.SANY spec.tla

# Translate PlusCal
java -cp "$JAR" pcal.trans -nocfg spec.tla

# Model check
java -cp "$JAR" tlc2.TLC -workers auto -config spec.cfg spec.tla

# REPL
java -cp "$JAR" tlc2.REPL

# Dump state graph (for visualization)
java -cp "$JAR" tlc2.TLC -dump dot,actionlabels,colorize states.dot spec.tla

Workflow: Writing a Spec

1. Understand the System

Before writing any TLA+:

  • Identify the concurrent agents (processes, nodes, threads)
  • Identify shared mutable state (queues, databases, locks, counters)
  • Identify the key safety property ("what must never happen?")
  • Identify the key liveness property ("what must eventually happen?")

2. Choose PlusCal vs Pure TLA+

Use PlusCal when:

  • The system is naturally sequential/imperative
  • You're modeling code (threads, goroutines, async tasks)
  • You need await, while, goto semantics
  • The audience is programmers

Use Pure TLA+ when:

  • You need fine-grained fairness control
  • The system is naturally a state machine
  • You need interruptible/restartable actions
  • You need refinement mappings
  • A single label would need to update a variable twice

3. Start Small, Then Expand

  1. Write the simplest possible spec that captures the core behavior
  2. Add a type invariant immediately
  3. Run TLC with small constants (2-3 nodes, 2-3 messages)
  4. Add safety invariants one at a time, running after each
  5. Add liveness properties with fairness
  6. Increase constants to expand coverage

4. Config File

Every spec needs a .cfg file. Create one alongside the .tla:

SPECIFICATION Spec

\* Properties to check
INVARIANT TypeInvariant
INVARIANT Safety

\* Uncomment for liveness (slower)
\* PROPERTY Liveness

\* Constants
CONSTANT
  NumNodes = 3
  MaxMsgs = 5
  NULL = NULL

\* Uncomment to bound state space
\* CONSTRAINT StateConstraint

\* Uncomment to ignore deadlocks
\* CHECK_DEADLOCK FALSE

Workflow: Spec From Code

When the user has existing code and wants a spec:

  1. Read the code — understand concurrency structure, shared state, synchronization
  2. Read references/patterns/code-to-spec.md
  3. Map constructs — threads→processes, locks→await, channels→queues
  4. Abstract — don't model every line, only concurrency-relevant operations
  5. Write spec — start with the concurrent skeleton, add detail iteratively
  6. Run TLC — find deadlocks, invariant violations, liveness failures
  7. Report — translate any TLC error traces back to code execution paths

Workflow: Finding Bugs

When comparing a spec to code, or looking for bugs:

  1. Read references/patterns/code-to-spec.md
  2. Write a spec modeling the suspected buggy area
  3. Run with small constants — TLC is exhaustive, small state space is fine
  4. Interpret error traces — map TLA+ state sequences to code execution paths
  5. Check atomicity — does the code do atomically what the spec's label does?
  6. Check completeness — does the code handle all either/or branches?
  7. Check ordering — does the code enforce the same happens-before relations?

If TLC finds a violation:

  • The error trace is a concrete counterexample — a specific sequence of events
  • Map each state in the trace to concrete code state
  • The transition that causes the violation is the bug location

Interpreting TLC Output

Success

Model checking completed. No error has been found.
  Estimates of the probability that TLC did not check all reachable states
  because two distinct states had the same fingerprint:
  calculated (optimistic):  val: 0

Invariant Violation

Error: Invariant SafetyInvariant is violated.
The following behavior constitutes a counter-example:
State 1: <Initial predicate>
  /\ var1 = ...
State 2: <Action line X>
  /\ var1 = ... (changed values in red)

Deadlock

Error: Deadlock reached.

→ No process can make progress. Check await conditions and process completion.

Liveness Violation

Error: Temporal properties were violated.

→ Check fairness settings. Add WF_vars or SF_vars. Trace may include a "stuttering" suffix.

Key Principles

  1. Type invariants first — catch spec bugs before checking real properties
  2. Small constants — 3 nodes finds most bugs; 10 nodes takes 1000× longer
  3. Safety before liveness — invariants are faster to check
  4. One property at a time — add incrementally, run after each addition
  5. Fairness is opt-in — TLA+ assumes everything can crash by default
  6. => with \A, /\ with \E — never use => with \E
  7. Sequences are 1-indexed — always
  8. Every action must specify all variables — use UNCHANGED for untouched ones

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

Mine bug patterns from any git repository. Discovers bug-fix commits via git log heuristics, analyzes each in parallel with subagents, writes individual analysis files, and synthesizes a generalized PATTERNS.md with repo-specific details stripped. Invoke explicitly with /bug-archaeology.

日本語の概要は準備中です。原文の説明を表示しています。

apache/cassandra1万2026年10月11日 更新

Comprehensive guide for writing Apache Cassandra in-JVM distributed tests (dtests). Use when creating tests that simulate multi-node Cassandra clusters within a single JVM for faster integration testing. Covers cluster creation (single-node, multi-node, multi-datacenter), configuration (all cassandra.yaml parameters, features, network topology), instance lifecycle (startup/shutdown/restart), query execution, message filtering for failure scenarios, running code on instances, ClusterUtils utilities, and debugging classloader-related issues (serialization failures, same-class-different-classloader problems).

日本語の概要は準備中です。原文の説明を表示しています。

apache/cassandra1万2026年10月11日 更新

Deep file-focused code review for correctness bugs. Unlike shallow-review which runs 6 specialists in parallel across the entire patch, deep-review focuses on user-specified files with full pattern catalogs (500+ patterns), codebase investigation, and source-level context gathering. Use when: the user specifies particular files for focused review, a shallow review flagged areas that need deeper investigation, reviewing critical-path code changes, examining complex serialization/lifecycle/state-machine changes. The user instructs which files to focus on (typically a subset of files in the patch).

日本語の概要は準備中です。原文の説明を表示しています。

apache/cassandra1万2026年10月11日 更新

heatmap

無料

Use git heatmap analysis to identify high-churn files and lines as candidates for thorough review or bug hunting. Works for PR reviews, security audits, bug hunts, or any code analysis task.

日本語の概要は準備中です。原文の説明を表示しています。

apache/cassandra1万2026年10月11日 更新

Multi-pass deep code review for large patches (1000+ LOC) that maximizes real bug detection. Orchestrates targeted-review, shallow-review, and deep-review in parallel across all HIGH and MEDIUM risk files and commits: understands the feature holistically, splits by file and commit, runs deep review on every HIGH/MEDIUM file, targeted review across the same scope, and per-commit shallow review, followed by cross-cut consistency checks. Use when: reviewing a large patch (feature branch, multi-commit, or single large diff, 1000+ LOC), doing a thorough pre-merge review, or when shallower reviews miss bugs due to patch size. Triggers on: "review this branch", "review these commits", "review this feature", "mega review", "thorough review", "full review of X commits", or when the user specifies a commit range or feature for review.

日本語の概要は準備中です。原文の説明を表示しています。

apache/cassandra1万2026年10月11日 更新

Deep code analysis with ASCII visualizations showing structure, flow, and state transitions. Use when analyzing patches/diffs, explaining classes or subsystems, understanding code architecture, reviewing changes for inconsistencies, or when asked to visualize how code works. Provides before/after diagrams, data/control flow, concurrency analysis, assumptions, and failure modes. Triggers on explain this patch/code/class, how does X work, show me the flow, visualize this change, code review requests, or proactive analysis during PR reviews.

日本語の概要は準備中です。原文の説明を表示しています。

apache/cassandra1万2026年10月11日 更新

apache のスキルをすべて見る

このスキルの問題を報告する