Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Use when implementing, fixing, or reviewing Zeebe engine code in zeebe/engine/ — BPMN process execution, DMN decision evaluation, job lifecycle, user/identity management, batch operations, variables, deployments, signals, messages, timers, multi-tenancy, or authorization. Also when modifying or reviewing processors, event appliers, state classes, record value types, intents, or engine tests.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-07 | ✗→✓ | ▲ Improved | -19% | 0% |
| case-05 | ✗→✓ | ▲ Improved | -5% | 0% |
| case-01 | ✗→✓ | ▲ Improved | 17% | 0% |
| case-02 | ✗→✓ | ▲ Improved | -16% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 5% | 0% |
Reference for making changes to the Zeebe workflow engine with confidence. The engine processes thousands of commands per second on a single thread, state is rebuilt from the log on every restart, and partitions communicate over an unreliable network. Mistakes here cause leader/follower divergence, upgrade-path breakage, or production performance regressions. This skill exists to prevent the well-known classes of mistake.
These are summaries. The reference files (linked below) are authoritative — they carry the rationale, exceptions, and worked examples.
Mutable*State interface or anything transitively called from an applier — must not change in logic. Add a new version/method instead. Cosmetic changes (formatting, imports, comments, behavior-equivalent renames) are fine. No golden file protects state class methods — extra care required.event-appliers.md.ColumnFamily.get(...) / state reads are backed by a shared, mutable buffer reused on the next read of the same column family. Never cache them or hold them across another read — copyFrom(...) if you need to keep the value, or use get(key, valueSupplier) to allocate a fresh instance.StackOverflowError would ban the executing instance. Bound recursion or use iteration/trampolining.| If you are… | Read | |--------------------------------------------------------------------------------------------------------------|---------------------| | Designing or extending a record value type, intent, or ValueType | records.md | | Editing or creating a processor, behavior class, validation, or rejection | processors.md | | Editing or creating an event applier, a Mutable*State interface method, or anything called from an applier | event-appliers.md | | Writing or modifying engine tests | testing.md | | Working with authorization resource types or permission types (which enum to use in which layer) | authz-enums.md |
Run only the tests relevant to your change — running the full engine test suite locally takes a long time and is what CI is for.
bash# 1. Format (mandatory before commit when touching Java/markdown/pom.xml). ./mvnw license:format spotless:apply -T1C # 2. Tests scoped to your change (single class or small pattern). Use # -Dtest=YourTest, comma-separated classes, or a glob like '*UserTest*'. ./mvnw verify -pl zeebe/engine \ -Dtest='YourTest' -DskipTests=false -DskipITs -Dquickly # 3. If you touched an event applier, a Mutable*State method, or anything # transitively called from an applier — also run the golden file check. ./mvnw verify -pl zeebe/engine -Dtest=NoChangesTest \ -DskipTests=false -DskipITs -Dquickly
Re-run any new or modified test at least 3× to catch flakiness. Push and let CI run the comprehensive suite.
EngineRule and RecordingExporter against appended records (see testing.md). Run it — confirm it fails.zeebe/engine/README.md — architecture, do's and don'ts.docs/zeebe/event-applier-golden-files.md — golden files, versioning, port rules.docs/zeebe/developer_handbook.md — step-by-step for new records, REST endpoints, authorization.docs/zeebe/engine_questions.md — FAQ on tokens, joining gateways, variable scoping.Other measured skills in the registry, with their headline benchmark lift.