These are the 72 rules the JBCT linter checks in Pragmatica 1.0.0-rc3. Each rule’s one-line description is the tool’s own, taken from the rule’s source at that tag (c67664bd9). The tools page covers how to run them.
[lint.rules].JBCT-SHAPE-02, JBCT-SHAPE-03. They are census rules and run only when jbct.toml enables them.jbct score counts the rule. Style rules are advisory: they are reported, but left out of the total density.JBCT-EX-02, JBCT-INJ-01, JBCT-LOG-01, JBCT-MUT-01, JBCT-NAM-04, JBCT-REC-01, JBCT-SIDE-01, JBCT-STATIC-01, JBCT-STY-07, JBCT-STY-08, JBCT-TOT-03. The linter checks them, but the book doesn’t teach them yet.| Rule | Default | What it flags | Course section |
|---|---|---|---|
JBCT-BND-01 | ERROR | Forbidden boundary types in business logic. | The Four Return Types |
JBCT-RET-01 | ERROR | Business methods must use only four return kinds. | The Four Return Types |
JBCT-RET-02 | ERROR | No nested wrappers. | The Four Return Types |
JBCT-RET-04 | ERROR | Use Unit instead of Void. | Pragmatica Core Essentials |
JBCT-RET-05 | WARNING | a step that cannot fail, typed as if it can. | Systematic Application Guide |
JBCT-RET-07 | ERROR | Discarded Result/Promise/Option value. | Troubleshooting & FAQ |
| Rule | Default | What it flags | Course section |
|---|---|---|---|
JBCT-RET-03 | ERROR | Never return null. | Null Policy & Error Recovery |
JBCT-RET-06 | ERROR | No nullable parameters - use Option instead. | Null Policy & Error Recovery |
JBCT-RET-08 | WARNING | No null literal passed as a call argument. | Null Policy & Error Recovery |
JBCT-TOT-03 | WARNING | Jackson wire-record accessor dereferences a possibly-null component. | not covered |
| Rule | Default | What it flags | Course section |
|---|---|---|---|
JBCT-EX-01 | ERROR | No business exceptions. | Error Handling & Composition |
JBCT-EX-02 | ERROR | Don't use orElseThrow(). | not covered |
JBCT-REC-01 | WARNING | a failure absorbed without a recorded reason. | not covered |
JBCT-SEAL-01 | WARNING | Error interfaces should be sealed. | Error Handling & Composition |
JBCT-STY-01 | WARNING | Prefer fluent failure style (cause.result()). | Pragmatica Core Essentials |
JBCT-TOT-01 | ERROR | No partial operations inside a carrier mapper lambda. | Troubleshooting & FAQ |
JBCT-TOT-02 | ERROR | No partial method reference in a carrier mapper. | Troubleshooting & FAQ |
JBCT-UTIL-01 | WARNING | Use Pragmatica parsing utilities instead of JDK parsing methods. | Pragmatica Core Essentials |
| Rule | Default | What it flags | Course section |
|---|---|---|---|
JBCT-CAUSE-01 | ERROR | cause representation shape — every same-file cause variant is a record or a prescribed-shape enum. | Error Handling & Composition |
JBCT-CAUSE-02 | ERROR | no hand-written message() bodies. | Error Handling & Composition |
JBCT-CAUSE-03 | WARNING | the message component of a cause record occupies the final position (R2) — the trailing slot is what lets the canonical constructor reference line up with the causeFactory shapes, which pass the formatted message last. | Error Handling & Composition |
JBCT-CAUSE-04 | ERROR | the R1 arity equation — template conversions == forNValues' N == target record components − 1. | Error Handling & Composition |
JBCT-CAUSE-05 | WARNING | a cause record wrapping an underlying cause implements Cause.Wrapped with an origin component rather than hand-declaring a source() override. | Error Handling & Composition |
JBCT-CAUSE-07 | WARNING | the single-argument template rungs (forOneValue(String) etc.) produce anonymous, value-discarding causes; in production sources a parameterized failure is worth naming and retaining (R1) through the causeFactory rungs. | Error Handling & Composition |
JBCT-CAUSE-08 | WARNING | no direct construction of cause records — FACTORY is the construction path. | Error Handling & Composition |
| Rule | Default | What it flags | Course section |
|---|---|---|---|
JBCT-ARCH-01 | ERROR | dependency direction — imports point up only. | Project Structure & Framework Integration |
JBCT-ARCH-02 | WARNING | lift(...) is confined to the adapter-boundary zone. | Error Handling & Composition |
JBCT-ARCH-03 | WARNING | a use case must not call another use case. | Troubleshooting & FAQ |
JBCT-ARCH-04 | ERROR | a slice must not import another slice's internals. | Project Structure & Framework Integration |
JBCT-INJ-01 | WARNING | constructor/factory injection only. | not covered |
JBCT-MIX-01 | ERROR | No I/O operations in domain packages. | Systematic Application Guide |
JBCT-MUT-01 | WARNING | No parameter reassignment. | not covered |
JBCT-NEST-01 | WARNING | No nested monadic operations in lambdas. | Systematic Application Guide |
JBCT-PAT-01 | WARNING | Use functional iteration instead of raw loops. | Basic Patterns & Structure |
JBCT-PAT-02 | WARNING | No pattern mixing in chains. | Basic Patterns & Structure |
JBCT-PAT-03 | WARNING | Blocking .await() call. | Troubleshooting & FAQ |
JBCT-SEQ-01 | WARNING | Chain length limit (2-5 steps). | Advanced Patterns |
JBCT-SHAPE-01 | INFO | a method blends two JBCT patterns at one altitude (MIXED, census, INFO). | Basic Patterns & Structure |
JBCT-SHAPE-02 | INFO (off) | a method has no single JBCT pattern (UNCLASSIFIED, census, INFO). | Basic Patterns & Structure |
JBCT-SHAPE-03 | INFO (off) | a method's composition shape disagrees with its name-verb's zone (mis-leveled, INFO). | Basic Patterns & Structure |
JBCT-STAGE-01 | WARNING | stage-record conventions in growing-context pipelines. | Knowledge-Gathering Pipelines |
| Rule | Default | What it flags | Course section |
|---|---|---|---|
JBCT-ACR-01 | WARNING | Acronym naming convention. | Basic Patterns & Structure |
JBCT-NAM-01 | WARNING | Factory method naming convention. | Basic Patterns & Structure |
JBCT-NAM-02 | WARNING | Use Valid prefix, not Validated. | Basic Patterns & Structure |
JBCT-NAM-03 | WARNING | *State suffix discipline. | From Process to Patterns |
JBCT-NAM-04 | WARNING | Local records use lowercase camelCase names. | not covered |
JBCT-UC-01 | WARNING | Use case factories should return lambdas, not nested records. | Systematic Application Guide |
JBCT-UC-02 | WARNING | use-case interface structure. | Complete Example - RegisterUser |
JBCT-UTIL-02 | WARNING | Use Verify.Is predicates for validation. | Pragmatica Core Essentials |
JBCT-VAL-01 | WARNING | boolean validation methods. | Parse, Don't Validate |
JBCT-VO-01 | WARNING | Value objects need a factory method (returning T, Option<T>, or Result<T>). | Parse, Don't Validate |
JBCT-VO-02 | ERROR | Direct constructor calls bypass factory validation. | Troubleshooting & FAQ |
| Rule | Default | What it flags | Course section |
|---|---|---|---|
JBCT-LAM-01 | WARNING | No complex logic in lambdas. | Basic Patterns & Structure |
JBCT-LAM-02 | WARNING | No braces in lambdas. | Systematic Application Guide |
JBCT-LAM-03 | WARNING | No ternary in lambdas. | Basic Patterns & Structure |
JBCT-SIDE-01 | INFO | side effects in transformation lambdas (heuristic, INFO). | not covered |
JBCT-STY-02 | WARNING | Prefer constructor references (X::new). | Systematic Application Guide |
JBCT-STY-05 | WARNING | Prefer method references over equivalent lambdas. | Systematic Application Guide |
| Rule | Default | What it flags | Course section |
|---|---|---|---|
JBCT-LOG-01 | WARNING | No conditional logging. | not covered |
JBCT-LOG-02 | WARNING | No logger as method parameter. | Systematic Application Guide |
JBCT-NAM-05 | WARNING | Test methods use underscore-separated method_[scenario_]expectation naming. | Basic Patterns & Structure |
JBCT-ORD-01 | WARNING | member ordering per file type. | Project Structure & Framework Integration |
JBCT-STATIC-01 | WARNING | Prefer static imports for Pragmatica factory methods. | not covered |
JBCT-STY-03 | WARNING | No fully qualified class names in code. | Systematic Application Guide |
JBCT-STY-04 | WARNING | Utility class pattern. | Project Structure & Framework Integration |
JBCT-STY-06 | WARNING | Import ordering convention. | Project Structure & Framework Integration |
JBCT-STY-07 | WARNING | Unnecessary intermediate variable before return. | not covered |
JBCT-STY-08 | WARNING | If/else with return in both branches. | not covered |
JBCT-STY-09 | WARNING | No nested ternaries. | Basic Patterns & Structure |
JBCT-ZONE-01 | WARNING | Step interfaces should use Zone 2 verbs. | Basic Patterns & Structure |
JBCT-ZONE-02 | WARNING | Leaf functions should use Zone 3 verbs. | Basic Patterns & Structure |
JBCT-ZONE-03 | WARNING | No zone mixing in sequencer chains. | Basic Patterns & Structure |