Rule Catalog
Logic Guard ships with 143 baseline rules across twelve sections. Every rule has a stable identifier, a default severity (Critical, Warning, or Info), and a title describing what it detects. Every rule can be enabled, disabled, or reclassified per project, see Customization.
Severity guide:
- Critical: the artifact is broken or unsafe. It will fail, behave incorrectly, or expose a security or integrity risk.
- Warning: a real quality or maintainability problem that should be addressed.
- Info: a convention or hygiene observation.
Business Processes (BP)
| Rule | Severity | Title |
|---|---|---|
| BP-001 | Critical | No stages |
| BP-002 | Critical | No start stage |
| BP-003 | Critical | Start stage not in stages array |
| BP-004 | Critical | Cycle, no reachable terminal stage |
| BP-004b | Critical | Broken transition reference |
| BP-005 | Critical | Unreachable stage |
| BP-006 | Warning | Non-terminal stage with no outgoing transitions |
| BP-008 | Warning | Stage has no completion criteria |
| BP-009 | Warning | Stage has no due date |
| BP-010 | Warning | No process-level due date |
| BP-011 | Warning | No process owner |
| BP-012 | Warning | Stage does nothing (empty onActivate and onComplete) |
| BP-013 | Warning | Transition with no guard |
| BP-014 | Warning | All transitions unconditional |
| BP-015 | Warning | Flow call with empty object name |
| BP-016 | Warning | No branching in process |
| BP-017 | Info | Generic stage unique names |
| BP-018 | Info | No process entity |
| BP-019 | Warning | No published or active version |
| BP-020 | Info | Stale draft accumulation (5 or more drafts) |
| BP-021 | Critical | Self-loop transition |
| BP-022 | Critical | Unconditional backward transition |
| BP-023 | Warning | No rejection or cancellation terminal |
| BP-024 | Warning | Implicit merge (convergence without join) |
| BP-025 | Warning | Hardcoded SLA days |
| BP-026 | Info | Large process (more than 10 stages) |
| BP-027 | Warning | Duplicate transition conditions from same source |
Workflows / Logic Flows (WF)
| Rule | Severity | Title |
|---|---|---|
| WF-001 | Critical | Self-call (infinite recursion) |
| WF-002 | Critical | Empty flow |
| WF-003 | Critical | Dead output, never set by SetOutput |
| WF-004 | Critical | Required input ignored |
| WF-005 | Critical | Dead Condition branch |
| WF-006 | Warning | CallFlow result unused |
| WF-007 | Warning | Unused variable |
| WF-008 | Warning | Dead fetcher |
| WF-009 | Warning | Unbounded Single fetch |
| WF-010 | Warning | Trivially constant Condition |
| WF-011 | Warning | Variable overwritten before read |
| WF-012 | Warning | SaveEntity no-op |
| WF-013 | Warning | Silent error swallowing |
| WF-014 | Warning | Hardcoded business threshold |
| WF-015 | Warning | Sequential with one child |
| WF-016 | Warning | Iterator with empty body |
| WF-017 | Info | Single-step flow |
| WF-018 | Info | Generic step names |
| WF-019 | Info | Non-verb-first name |
| WF-020 | Info | No description |
| WF-021 | Info | No columnSet on fetcher |
| WF-022 | Warning | Deep condition nesting |
| WF-023 | Warning | Large flow |
| WF-024 | Warning | Condition missing else branch |
| WF-025 | Info | Pure wrapper flow |
Business Rules / Logic Blocks (BR)
| Rule | Severity | Title |
|---|---|---|
| BR-001 | Critical | Required input ignored in condition |
| BR-002 | Critical | Trivially constant condition |
| BR-003 | Warning | Redundant condition branch |
| BR-004 | Warning | Null check on required input |
| BR-005 | Warning | Dead fetcher (validation block) |
| BR-006 | Warning | Unbounded Single fetch |
| BR-007 | Warning | Full-table scan |
| BR-008 | Warning | Count threshold not in config |
| BR-009 | Critical | Declared output never set |
| BR-010 | Critical | Required input ignored (action block) |
| BR-011 | Critical | SaveEntity no-op |
| BR-012 | Warning | Unused variable |
| BR-013 | Warning | Variable overwritten before read |
| BR-014 | Warning | CallFlow or RunLogicBlock result unused |
| BR-015 | Warning | Silent error swallowing |
| BR-016 | Warning | Dead fetcher (action block) |
| BR-017 | Warning | Unbounded Single fetch (action block) |
| BR-018 | Info | All inputs optional |
| BR-019 | Info | Non-Check-prefixed name |
| BR-020 | Info | No description |
| BR-021 | Warning | Deep condition nesting |
| BR-022 | Warning | Large block (more than 20 steps) |
Integrations / Service Connections (IN)
| Rule | Severity | Title |
|---|---|---|
| IN-001 | Critical | No OpenAPI spec |
| IN-002 | Critical | No server URL |
| IN-003 | Warning | Insecure HTTP on external endpoint |
| IN-004 | Warning | No paths or operations defined |
| IN-005 | Critical | No authentication on external endpoint |
| IN-006 | Warning | Security schemes declared but never applied |
| IN-007 | Warning | Operation explicitly unauthenticated |
| IN-008 | Warning | Operation has no responses |
| IN-009 | Warning | No required parameters on operation |
| IN-010 | Info | No description |
| IN-011 | Info | Placeholder version |
Configurations (CF)
| Rule | Severity | Title |
|---|---|---|
| CF-001 | Critical | No value |
| CF-002 | Warning | Boolean type but invalid value |
| CF-003 | Warning | Integer type but non-numeric value |
| CF-004 | Warning | Sensitive value as plain text |
| CF-005 | Warning | Name equals value |
| CF-006 | Info | No description |
| CF-007 | Info | Generic name |
| CF-008 | Info | Integer value is 0 |
Event Handlers (EH)
| Rule | Severity | Title |
|---|---|---|
| EH-001 | Critical | No flow assigned |
| EH-002 | Critical | No event assigned |
| EH-003 | Warning | Suspicious Event property binding |
| EH-004 | Warning | Missing input bindings for flow inputs |
| EH-005 | Warning | Synchronous handler |
| EH-006 | Warning | Mismatched binding |
| EH-007 | Info | No description |
| EH-008 | Info | Generic name |
Schedules (SJ)
| Rule | Severity | Title |
|---|---|---|
| SJ-001 | Critical | No flow to execute |
| SJ-002 | Critical | Invalid interval |
| SJ-003 | Warning | Schedule is inactive |
| SJ-004 | Warning | Very high frequency (hourly or less) |
| SJ-005 | Warning | No start date |
| SJ-006 | Warning | Name identical to flow name |
| SJ-007 | Info | No description |
| SJ-008 | Info | Generic name |
Localization (LR)
| Rule | Severity | Title |
|---|---|---|
| LR-001 | Warning | No value |
| LR-002 | Warning | Missing English (1033) |
| LR-003 | Warning | Missing Arabic (1025) |
| LR-004 | Warning | Empty translation string |
| LR-005 | Warning | Placeholder mismatch between locales |
| LR-006 | Info | Identical translations across locales |
| LR-007 | Info | Generic key name |
Recipes (RC)
| Rule | Severity | Title |
|---|---|---|
| RC-001 | Warning | Recipe is disabled |
| RC-002 | Warning | All hooks empty |
| RC-003 | Warning | Empty object name in hook |
| RC-004 | Warning | Delete hook reads entity fields |
| RC-005 | Warning | Update binding references non-tracked field |
| RC-006 | Warning | Update hook with no guard |
| RC-007 | Info | No entity bound |
Events (EV)
| Rule | Severity | Title |
|---|---|---|
| EV-001 | Warning | No event properties defined |
| EV-002 | Warning | Property has no type |
| EV-003 | Info | No description |
Entity Fields (EF)
Validated in code against live Dataverse metadata.
| Rule | Severity | Title |
|---|---|---|
| EF-001 | Critical | Stale field reference, field no longer exists |
| EF-002 | Warning | Deleted entity referenced |
| EF-003 | Info | Virtual lookup text field used |
Cross-Artifact (CA)
Relationships that span multiple artifacts, evaluated after every specialist has run.
| Rule | Severity | Title |
|---|---|---|
| CA-001 | Critical | Mutual recursion between flows |
| CA-002 | Critical | Schedule references non-existent flow |
| CA-003 | Critical | Recipe references non-existent flow |
| CA-004 | Warning | CallFlow references non-existent flow |
| CA-005 | Warning | ConfigurationValue references missing config |
| CA-006 | Warning | Multiple recipes on same entity |
| CA-007 | Warning | Active schedule references missing flow |
| CA-008 | Warning | Recipe update hook with no guard |
| CA-009 | Critical | Localized resource key used but not defined |
| CA-010 | Info | Localized resource defined but never used |
| CA-011 | Warning | Business process has no published version |
| CA-012 | Warning | High fan-in flow with no description |
| CA-013 | Critical | Configuration key used but not defined |
| CA-014 | Info | Configuration defined but never used |