# Comprehensive Diagnostics Reference

This file is auto-generated. Run `npm run docs:diagnostics` to refresh it.

## Concepts

Two distinct entities appear throughout this reference:

- **Message** — a specific diagnostic instance identified by a stable `ACU-XXX-NNN` ID.
  The Message ID appears in VS Code hover tooltips, the Problems panel, and in suppression
  comments (`// @rule-ignore ACU-INT-001`). A Rule may produce several distinct Message types.
- **Rule** — a named validation behaviour identified by a camelCase key (e.g. `interpolationUndefined`).
  Each Rule maps to a single VS Code setting (`acurity.rules.<group>.<rule>.severity`).
  Changing the setting adjusts the severity of **all** Messages that belong to that Rule.
- **Surface** — where a diagnostic is raised. `IDE` means VS Code only; `CLI` means the headless
  validator only; `IDE + CLI` means both. Surfaces are declared on each catalog entry's `surfaces`
  field in [`core/src/diagnostics/diagnosticCatalog.js`](../core/src/diagnostics/diagnosticCatalog.js).

**Where rule severities are set:**

- **Default profiles** (default / legacy / strict) — `severity` block on each entry in
  [`core/src/diagnostics/diagnosticCatalog.js`](../core/src/diagnostics/diagnosticCatalog.js).
- **VS Code** — profile selection and per-rule overrides resolved in
  [`vscode-extension/src/config/standardsConfig.js`](../vscode-extension/src/config/standardsConfig.js).
  The active profile can be set via `acurity.rules.profile`; individual rules can be overridden
  via `acurity.rules.<group>.<rule>.severity`.
- **CLI** — always uses the `default` profile; severity mapping defined in
  [`cli/index.js`](../cli/index.js).

## Complete Diagnostic Reference Table

Severity columns (Default / Legacy / Strict) and VS Code Settings Group / VS Code Setting are **Rule-level** properties.
Message ID, Category, Surface, and Message are **Message-level** properties.

| Message ID | 📖 | Category | Surface | Message | Rule | Validator(s) | Strict | Default | Legacy | Quick Fixes | Syntax Test Suite | Test Coverage | VS Code Settings Group | VS Code Setting |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| **ACU-ARG-001** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L1185) | validity | IDE + CLI | `Invalid date string '{value}'. Expected format DD/MM/YYYY (e.g. '31/12/2026').` | invalidDateStringFormat | argumentString | error | error | warning | 0 | core | [core/str-to-date/str-to-date-format](../test/syntax-tests/core/str-to-date/str-to-date-format.TXT) LINES 38,39,42,43,44,45,48 | - | `-` |
| **ACU-ARG-002** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L1197) | validity | IDE + CLI | `Date string '{value}' is out of the valid range (00/00/0000 to 31/12/9998).` | invalidDateStringOutOfRange | argumentString | error | error | warning | 0 | core | [core/str-to-date/str-to-date-format](../test/syntax-tests/core/str-to-date/str-to-date-format.TXT) LINE 49 | - | `-` |
| **ACU-ARG-003** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L1209) | validity | IDE + CLI | `Invalid cursor direction '{value}'. Valid directions: >=, >, +, =, -, <, <=.` | invalidCursorDirection | argumentString | error | error | warning | 0 | core | [core/index-functions-sql/index-cursor-directions](../test/syntax-tests/core/index-functions-sql/index-cursor-directions.TXT) LINES 37,38,39,41, [core/index-functions/index-cursor-directions](../test/syntax-tests/core/index-functions/index-cursor-directions.TXT) LINES 37,38,39,41 | - | `-` |
| **ACU-ARG-004** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L1221) | validity | IDE + CLI | `Invalid cursor direction '{value}'. Did you mean '{suggestion}'?` | invalidCursorDirection | argumentString | error | error | warning | 0 | core | [core/index-functions-sql/index-cursor-directions](../test/syntax-tests/core/index-functions-sql/index-cursor-directions.TXT) LINES 35,36, [core/index-functions/index-cursor-directions](../test/syntax-tests/core/index-functions/index-cursor-directions.TXT) LINES 35,36 | - | `-` |
| **ACU-ARG-005** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L1233) | validity | IDE + CLI | `Invalid table synonym '{value}'. Expected a valid 2-letter table code (e.g. 'MD', 'PH').` | invalidTableSynonym | argumentString | error | error | error | 0 | core | [core/index-functions-sql/index-table-synonyms](../test/syntax-tests/core/index-functions-sql/index-table-synonyms.TXT) LINES 41,42,43,45,46,48,49,51,52, [core/index-functions/index-table-synonyms](../test/syntax-tests/core/index-functions/index-table-synonyms.TXT) LINES 41,42,43,45,46,48,49,51,52 | - | `-` |
| **ACU-ARG-008** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L1269) | validity | IDE + CLI | `'{paramLabel}' argument of {functionName}() requires a variable, not a literal.` | literalForVarParam | argumentString | error | error | error | 0 | core | [core/array/array-lifecycle-complete](../test/syntax-tests/core/array/array-lifecycle-complete.TXT) LINES 66,77, [core/array/array-lifecycle-no-init](../test/syntax-tests/core/array/array-lifecycle-no-init.TXT) LINE 15, [core/array/array-lifecycle-read-literal](../test/syntax-tests/core/array/array-lifecycle-read-literal.TXT) LINE 18 | core | `acurity.rules.core.literalForVarParam.severity` |
| **ACU-BLK-001** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L462) | validity | IDE + CLI | `Unexpected {closeKeyword} without matching {openKeyword}.` | blockStructure | structure | error | error | error | 0 | core | [core/if/else-outside-of-if-not-allowed](../test/syntax-tests/core/if/else-outside-of-if-not-allowed.TXT) LINES 17,21, [core/line-types/output-lines-hashoff](../test/syntax-tests/core/line-types/output-lines-hashoff.TXT) LINE 20 | core | `acurity.rules.core.blockStructure.severity` |
| **ACU-BLK-002** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L474) | validity | IDE + CLI | `{closeKeyword} does not match {openKeyword} at line {lineNumber}.` | blockStructure | structure | error | error | error | 0 | core | [core/case/case-error-missing-endcase](../test/syntax-tests/core/case/case-error-missing-endcase.TXT) LINE 34 | core | `acurity.rules.core.blockStructure.severity` |
| **ACU-BLK-003** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L486) | validity | IDE + CLI | `'{openKeyword}' at line {lineNumber} is not closed with '{closeKeyword}'.` | blockStructure | structure | error | error | error | 0 | core | [core/case/case-error-missing-endcase](../test/syntax-tests/core/case/case-error-missing-endcase.TXT) LINE 21 | core | `acurity.rules.core.blockStructure.severity` |
| **ACU-BLK-004** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L498) | standards | IDE | `'{keyword}' indentation ({column}) does not match '{openKeyword}' at line {lineNumber} (indentation {openColumn}).` | blockIndentation | indentation | warning | warning | off | 0 | coding-standards + core | [coding-standards/indentation/indentation-block-mismatch](../test/syntax-tests/coding-standards/indentation/indentation-block-mismatch.TXT) LINES 69,74,79,88,90, [core/case/case-error-missing-endcase](../test/syntax-tests/core/case/case-error-missing-endcase.TXT) LINE 34 | - | `-` |
| **ACU-BLK-005** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L510) | validity | IDE + CLI | `'ELSE IF' is not a conditional — the IF condition is ignored and the ELSE branch always executes. Restructure with nested IF or CASE.` | elseIfMisuse | structure | error | error | error | 0 | core | [core/if/else-if-misuse](../test/syntax-tests/core/if/else-if-misuse.TXT) LINE 18 | - | `-` |
| **ACU-BLK-006** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L522) | validity | IDE + CLI | `Duplicate ELSE branch — an IF block may only have one ELSE.` | duplicateElse | structure | error | error | error | 0 | core | [core/if/if-multiple-else-not-allowed](../test/syntax-tests/core/if/if-multiple-else-not-allowed.TXT) LINE 21, [core/if/if-nested-multiple-else-not-allowed](../test/syntax-tests/core/if/if-nested-multiple-else-not-allowed.TXT) LINES 22,31 | - | `-` |
| **ACU-FNC-001** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L119) | validity | IDE + CLI | `Function '{functionName}' is not defined.` | functionUndefined | function | error | error | warning | 0 | core | [core/function-builtin/builtin-functions](../test/syntax-tests/core/function-builtin/builtin-functions.TXT) LINES 57,58, [core/function-user-defined/diagnostic-precision-undefined-function](../test/syntax-tests/core/function-user-defined/diagnostic-precision-undefined-function.TXT) LINE 19, [core/function-user-defined/undefined-func-error](../test/syntax-tests/core/function-user-defined/undefined-func-error.TXT) LINE 20, [core/include/include-behaviour](../test/syntax-tests/core/include/include-behaviour.TXT) LINES 35,37 | core | `acurity.rules.core.functionUndefined.severity` |
| **ACU-FNC-002** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L131) | validity | IDE + CLI | `Function '{functionName}' is not yet defined at this point.` | functionOutOfScope | function | error | error | warning | 0 | core | [core/function-user-defined/forward-function-call-error](../test/syntax-tests/core/function-user-defined/forward-function-call-error.TXT) LINE 20 | core | `acurity.rules.core.functionOutOfScope.severity` |
| **ACU-FNC-003** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L143) | validity | IDE + CLI | `Function '{functionName}' is declared multiple times. Functions cannot be redeclared.` | functionRedeclared | function | error | error | warning | 0 | core | [core/function-user-defined/function-redeclaration-not-allowed](../test/syntax-tests/core/function-user-defined/function-redeclaration-not-allowed.TXT) LINES 19,26,33 | core | `acurity.rules.core.functionRedeclared.severity` |
| **ACU-FNC-004** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L155) | validity | IDE + CLI | `'{functionName}' is a system constant and should be used without parentheses.` | functionConstantUsage | function | error | error | warning | 0 | core | [core/global-vars-builtin/system-constant-with-parens](../test/syntax-tests/core/global-vars-builtin/system-constant-with-parens.TXT) LINES 24,25 | core | `acurity.rules.core.functionConstantUsage.severity` |
| **ACU-FNC-005** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L167) | validity | IDE + CLI | `Unclosed function call for '{functionName}'.` | functionCallUnclosed | function | error | error | warning | 0 | core | [core/function-user-defined/unclosed-function-call](../test/syntax-tests/core/function-user-defined/unclosed-function-call.TXT) LINE 21 | core | `acurity.rules.core.functionCallUnclosed.severity` |
| **ACU-FNC-006** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L179) | validity | IDE + CLI | `Function signature error: {errorDetail}` | functionSignature | argumentType, function | error | error | warning | 0 | core | [core/function-builtin/builtin-functions](../test/syntax-tests/core/function-builtin/builtin-functions.TXT) LINES 59,60,71, [core/function-user-defined/func-user-defined-signature-checks](../test/syntax-tests/core/function-user-defined/func-user-defined-signature-checks.TXT) LINE 41 | core | `acurity.rules.core.functionSignature.severity` |
| **ACU-FNC-007** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L191) | standards | IDE + CLI | `Function '{functionName}' capitalisation differs from declared function '{declaredName}'.` | functionCaseMismatch | function | error | warning | warning | 2 | coding-standards + core | [coding-standards/case-sensitivity/func-case-mismatch-fix-call](../test/syntax-tests/coding-standards/case-sensitivity/func-case-mismatch-fix-call.TXT) LINE 25, [coding-standards/case-sensitivity/func-case-mismatch-fix-decl](../test/syntax-tests/coding-standards/case-sensitivity/func-case-mismatch-fix-decl.TXT) LINE 25, [core/include/include-behaviour](../test/syntax-tests/core/include/include-behaviour.TXT) LINE 58 | standards | `acurity.rules.standards.functionCaseMismatch.severity` |
| **ACU-FNC-008** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L203) | advisory | IDE + CLI | `Function '{functionName}' return value is unused. Consider assigning function return to a variable.` | functionReturnValueUnused | function | error | error | error | 0 | core | [core/general/incomplete-statement-unassigned-return](../test/syntax-tests/core/general/incomplete-statement-unassigned-return.TXT) LINES 35,37 | core | `acurity.rules.core.functionReturnValueUnused.severity` |
| **ACU-FNC-009** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L215) | validity | IDE + CLI | `Argument {n} to '{function}': expected {expectedType}, got {actualType}.` | functionArgumentType | argumentType | error | error | warning | 0 | core | [core/array/array-lifecycle-column-bounds](../test/syntax-tests/core/array/array-lifecycle-column-bounds.TXT) LINE 36, [core/array/array-lifecycle-complete](../test/syntax-tests/core/array/array-lifecycle-complete.TXT) LINES 98,114, [core/array/array-lifecycle-type-mismatch](../test/syntax-tests/core/array/array-lifecycle-type-mismatch.TXT) LINE 27, [core/function-builtin/builtin-functions](../test/syntax-tests/core/function-builtin/builtin-functions.TXT) LINES 64,65,66,67,68,74,77,80 | - | `-` |
| **ACU-FNC-010** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L227) | validity | IDE + CLI | `Return type mismatch in '{functionName}': declared return type is {expectedType}, but '{expression}' is {actualType}.` | functionReturnTypeMismatch | functionReturnType | error | error | warning | 0 | core | [core/function-user-defined/func-user-defined-return-validation](../test/syntax-tests/core/function-user-defined/func-user-defined-return-validation.TXT) LINES 29,33,39 | - | `-` |
| **ACU-FNC-011** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L239) | validity | IDE + CLI | `Function '{functionName}' declares return type {returnType} but contains no RETURN statement.` | functionMissingReturn | functionReturnType | error | error | warning | 0 | core | [core/function-user-defined/func-user-defined-return-validation](../test/syntax-tests/core/function-user-defined/func-user-defined-return-validation.TXT) LINE 45 | - | `-` |
| **ACU-FNC-012** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L251) | standards | IDE + CLI | `Whitespace is not allowed between '{name}' and '('.` | functionCallWhitespace | functionWhitespace | error | warning | off | 0 | coding-standards | [coding-standards/function-user-defined/function-bad-use-of-whitespace](../test/syntax-tests/coding-standards/function-user-defined/function-bad-use-of-whitespace.TXT) LINES 26,28,32,35 | - | `-` |
| **ACU-FNC-013** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L264) | validity | IDE + CLI | `'{functionName}' is a built-in function. User-defined functions cannot shadow built-in names. Wrap in IF NOT SYMBOL('{functionName}') ... ENDIF to define a conditional polyfill.` | functionBuiltinCollision | function | error | error | error | 0 | core | [core/function-user-defined/function-builtin-collision-not-allowed](../test/syntax-tests/core/function-user-defined/function-builtin-collision-not-allowed.TXT) LINES 13,20,27 | - | `-` |
| **ACU-FNC-014** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L277) | validity | IDE + CLI | `Parameter '{paramName}' in function '{functionName}' is missing a type annotation. Each parameter must be declared as 'paramName : TYPE'.` | functionDeclarationMissingParamType | function | error | error | error | 0 | core | [core/function-user-defined/function-syntax](../test/syntax-tests/core/function-user-defined/function-syntax.TXT) LINES 20,24,28 | core | `acurity.rules.core.functionDeclarationMissingParamType.severity` |
| **ACU-FNC-015** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L290) | validity | IDE + CLI | `Function '{functionName}' is missing a return type. Add ': TYPE' after the closing parenthesis (e.g., ': STRING').` | functionDeclarationMissingReturnType | function | error | error | error | 0 | core | [core/function-user-defined/function-syntax](../test/syntax-tests/core/function-user-defined/function-syntax.TXT) LINE 32 | core | `acurity.rules.core.functionDeclarationMissingReturnType.severity` |
| **ACU-FNC-016** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L303) | advisory | IDE + CLI | `'{functionName}' is a deprecated/legacy function.` | functionDeprecated | function | warning | warning | warning | 0 | core | [core/function-builtin/builtin-functions-deprecated-warning](../test/syntax-tests/core/function-builtin/builtin-functions-deprecated-warning.TXT) LINES 17,18 | - | `-` |
| **ACU-INC-001** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L666) | validity | IDE + CLI | `Circular include detected for '{includeFilename}'.` | includeCircular | include | warning | warning | warning | 0 | core | [core/include/circular-include-unsafe](../test/syntax-tests/core/include/circular-include-unsafe.TXT) LINES 18,19 | core | `acurity.rules.core.includeCircular.severity` |
| **ACU-INC-002** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L678) | standards | IDE + CLI | `Include filename case differs from actual file '{actualFilename}' for '{includeFilename}'.` | includeFilenameCaseMismatch | include | warning | warning | warning | 0 | core | [core/include/include-behaviour](../test/syntax-tests/core/include/include-behaviour.TXT) LINE 57 | standards | `acurity.rules.standards.includeFilenameCaseMismatch.severity` |
| **ACU-INC-003** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L690) | validity | IDE + CLI | `INCLUDE: File '{filename}' not found.` | includeFileNotFound | include | error | error | warning | 0 | core | [core/include/include-behaviour](../test/syntax-tests/core/include/include-behaviour.TXT) LINE 32 | core | `acurity.rules.core.includeFileNotFound.severity` |
| **ACU-INC-004** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L448) | validity | IDE + CLI | `REQUIRE: File '{filename}' not found.` | requireFileNotFound | include | error | error | warning | 0 | core | [core/require/require-missing-files](../test/syntax-tests/core/require/require-missing-files.TXT) LINES 4,5 | core | `acurity.rules.core.requireFileNotFound.severity` |
| **ACU-INT-001** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L23) | validity | IDE + CLI | `Variable '{variableName}' is not defined.` | interpolationUndefined | interpolation | error | error | warning | 0 | core | [core/line-types/output-hash-off-interpolation-errors](../test/syntax-tests/core/line-types/output-hash-off-interpolation-errors.TXT) LINE 28, [core/line-types/output-hash-on-interpolation-errors](../test/syntax-tests/core/line-types/output-hash-on-interpolation-errors.TXT) LINE 17 | core | `acurity.rules.core.interpolationUndefined.severity` |
| **ACU-INT-002** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L35) | standards | IDE + CLI | `Variable '{variableName}' capitalisation differs from declared variable '{declaredName}'.` | interpolationCaseMismatch | interpolation, variable | error | warning | warning | 2 | core | [core/line-types/output-hash-off-interpolation-errors](../test/syntax-tests/core/line-types/output-hash-off-interpolation-errors.TXT) LINE 30, [core/line-types/output-hash-on-interpolation-errors](../test/syntax-tests/core/line-types/output-hash-on-interpolation-errors.TXT) LINE 19 | standards | `acurity.rules.standards.interpolationCaseMismatch.severity` |
| **ACU-INT-003** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L47) | validity | IDE + CLI | `Unclosed string interpolation for '{variableName}'. Expected '^{variableName}^'.` | interpolationUnclosed | interpolation | error | error | warning | 1 | core | [core/line-types/interpolation-unclosed](../test/syntax-tests/core/line-types/interpolation-unclosed.TXT) LINE 25 | core | `acurity.rules.core.interpolationUnclosed.severity` |
| **ACU-KWD-001** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L63) | standards | IDE | `Keyword '{keyword}' should be capitalized as '{uppercase}'.` | keywordCapitalization | keywordCaps | error | warning | warning | 1 | coding-standards | [coding-standards/case-sensitivity/keyword-capitalise](../test/syntax-tests/coding-standards/case-sensitivity/keyword-capitalise.TXT) LINE 19 | standards | `acurity.rules.standards.keywordCapitalization.severity` |
| **ACU-MAC-001** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L384) | validity | IDE + CLI | `Macro '{macroName}' is declared multiple times. Macros cannot be redeclared.` | macroRedeclared | macro | error | error | error | 0 | core | [core/macro/macro-redeclare-case](../test/syntax-tests/core/macro/macro-redeclare-case.TXT) LINE 23 | core | `acurity.rules.core.macroRedeclared.severity` |
| **ACU-MAC-002** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L396) | standards | IDE + CLI | `Macro '{usedName}' capitalisation differs from declared macro '{declaredName}'.` | macroCaseMismatch | macro | warning | warning | warning | 0 | coding-standards | [coding-standards/case-sensitivity/macro-case-mismatch](../test/syntax-tests/coding-standards/case-sensitivity/macro-case-mismatch.TXT) LINE 17 | standards | `acurity.rules.standards.macroCaseMismatch.severity` |
| **ACU-MAC-003** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L408) | validity | IDE + CLI | `Macro '{macroName}' expects no parameters but was called with {actualCount}.` | macroUnexpectedParameters | macro | error | error | error | 0 | core | [core/macro/macro-param-count](../test/syntax-tests/core/macro/macro-param-count.TXT) LINE 24 | core | `acurity.rules.core.macroUnexpectedParameters.severity` |
| **ACU-MAC-004** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L420) | validity | IDE + CLI | `Macro '{macroName}' expects {expectedCount} parameter(s) but was called without parentheses.` | macroMissingParameters | macro | error | error | error | 0 | core | [core/macro/macro-param-count](../test/syntax-tests/core/macro/macro-param-count.TXT) LINE 25 | core | `acurity.rules.core.macroMissingParameters.severity` |
| **ACU-MAC-005** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L432) | validity | IDE + CLI | `Macro '{macroName}' expects {expectedCount} parameter(s) but was called with {actualCount}.` | macroParameterCountMismatch | macro | error | error | error | 0 | core | [core/macro/macro-param-count](../test/syntax-tests/core/macro/macro-param-count.TXT) LINE 26 | core | `acurity.rules.core.macroParameterCountMismatch.severity` |
| **ACU-NAM-001** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L538) | standards | IDE + CLI | `ERROR: Declaring variables with an 'h' prefix is strongly discouraged, as variables may be confused with database fields.` | namingDatabaseFieldDeclaration | naming | error | error | error | 1 | coding-standards | [coding-standards/naming/naming-db-field-prefix](../test/syntax-tests/coding-standards/naming/naming-db-field-prefix.TXT) LINES 22,23 | core | `acurity.rules.core.namingDatabaseFieldDeclaration.severity` |
| **ACU-NAM-002** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L550) | standards | IDE | `Naming convention (scope): '{variableName}' has scope prefix '{actualPrefix}' ({actualScope}) but is {expectedScope}. Consider '{recommendedName}'.` | namingPrefixScope | naming | error | warning | off | 1 | coding-standards | [coding-standards/case-sensitivity/type-capitalisation-errors](../test/syntax-tests/coding-standards/case-sensitivity/type-capitalisation-errors.TXT) LINE 6 | standards | `acurity.rules.standards.namingPrefixScope.severity` |
| **ACU-NAM-003** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L562) | standards | IDE | `Naming convention (type): '{variableName}' has type prefix suggesting {expectedType} but is declared as {actualType}. Consider '{recommendedName}'.` | namingPrefixType | naming | error | warning | off | 1 | coding-standards | [coding-standards/case-sensitivity/type-capitalisation-errors](../test/syntax-tests/coding-standards/case-sensitivity/type-capitalisation-errors.TXT) LINE 6 | standards | `acurity.rules.standards.namingPrefixType.severity` |
| **ACU-OPT-001** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L332) | validity | IDE + CLI | `'{char}' is not a valid ICC/OICC/CICC character. Allowed characters are: {allowed}.` | invalidOptionCharacter | option | error | error | error | 0 | core | [core/line-types/output-lines-hashoff](../test/syntax-tests/core/line-types/output-lines-hashoff.TXT) LINE 19, [core/option-directives/option-icc-validation](../test/syntax-tests/core/option-directives/option-icc-validation.TXT) LINES 36,39,42,45, [core/option-directives/option-oicc-cicc-validation](../test/syntax-tests/core/option-directives/option-oicc-cicc-validation.TXT) LINES 55,58,61,64 | - | `-` |
| **ACU-OPT-002** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L368) | validity | IDE + CLI | `Custom ICC character '{char}' — IDE interpolation support requires the default '#'.` | nonDefaultIccCharacter | option | warning | warning | warning | 0 | core | [core/option-directives/option-icc-validation](../test/syntax-tests/core/option-directives/option-icc-validation.TXT) LINES 21,22,23,24,25,26,27,28,29,30 | - | `-` |
| **ACU-OUT-001** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L320) | validity | IDE + CLI | `'{name}' is an output-positioning directive, not a function. It can only be used between OICC/CICC delimiters on output lines (e.g., >>@{name}(...)@).` | outputDirectiveInCodeContext | outputDirective | error | error | error | 0 | core | [core/output-positioning-directives/output-positioning-in-code-context](../test/syntax-tests/core/output-positioning-directives/output-positioning-in-code-context.TXT) LINES 43,44,45,46,47 | - | `-` |
| **ACU-OUT-002** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L344) | validity | IDE + CLI | `'{name}' expects {expected} argument(s) but was called with {actual}.` | outputDirectiveArgumentCount | outputDirective | error | error | error | 0 | core | [core/output-positioning-directives/output-directive-arg-validation](../test/syntax-tests/core/output-positioning-directives/output-directive-arg-validation.TXT) LINES 33,34,35,36 | - | `-` |
| **ACU-OUT-003** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L356) | validity | IDE + CLI | `Column value {value} is out of the valid range (1 to 16000).` | outputDirectiveColumnRange | outputDirective | error | warning | warning | 0 | core | [core/output-positioning-directives/output-directive-arg-validation](../test/syntax-tests/core/output-positioning-directives/output-directive-arg-validation.TXT) LINES 39,40,41 | - | `-` |
| **ACU-PAT-001** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L883) | advisory | IDE + CLI | `Index cursor operations detected without an INDEX_CLOSE call in the same scope.` | indexUsageMissingClose | indexUsage | warning | warning | warning | 1 | core | [core/index-functions-sql/index-cursor-missing-close](../test/syntax-tests/core/index-functions-sql/index-cursor-missing-close.TXT) LINE 37, [core/index-functions/index-cursor-missing-close](../test/syntax-tests/core/index-functions/index-cursor-missing-close.TXT) LINE 37 | core | `acurity.rules.core.indexUsageMissingClose.severity` |
| **ACU-PAT-002** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L895) | advisory | IDE + CLI | `INDEX_SAVE_POSITION and INDEX_RESTORE_POSITION should be used as a pair in the same scope.` | indexUsageSaveRestorePair | indexUsage | warning | warning | warning | 1 | core | [core/index-functions-sql/index-save-restore-pair](../test/syntax-tests/core/index-functions-sql/index-save-restore-pair.TXT) LINE 34, [core/index-functions/index-save-restore-pair](../test/syntax-tests/core/index-functions/index-save-restore-pair.TXT) LINE 34 | standards | `acurity.rules.standards.indexUsageSaveRestorePair.severity` |
| **ACU-PAT-003** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L907) | advisory | IDE + CLI | `Consider wrapping index cursor movement with INDEX_SAVE_POSITION and INDEX_RESTORE_POSITION.` | indexUsageSaveRestoreRecommendation | indexUsage | warning | warning | warning | 2 | core | [core/index-functions-sql/index-save-position-missing](../test/syntax-tests/core/index-functions-sql/index-save-position-missing.TXT) LINE 23, [core/index-functions/index-save-position-missing](../test/syntax-tests/core/index-functions/index-save-position-missing.TXT) LINE 23 | standards | `acurity.rules.standards.indexUsageSaveRestoreRecommendation.severity` |
| **ACU-PAT-004** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L919) | validity | IDE + CLI | `INDEX_READ_BY_KEY should occur after INDEX_LOAD_KEY_* in standard flow.` | indexReadBeforeLoad | indexUsage | warning | warning | warning | 1 | core | [core/index-functions-sql/index-read-before-load](../test/syntax-tests/core/index-functions-sql/index-read-before-load.TXT) LINE 37, [core/index-functions-sql/index-read-before-open](../test/syntax-tests/core/index-functions-sql/index-read-before-open.TXT) LINE 35, [core/index-functions/index-read-before-load](../test/syntax-tests/core/index-functions/index-read-before-load.TXT) LINE 37, [core/index-functions/index-read-before-open](../test/syntax-tests/core/index-functions/index-read-before-open.TXT) LINE 35 | core | `acurity.rules.core.indexReadBeforeLoad.severity` |
| **ACU-PAT-005** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L931) | validity | IDE + CLI | `INDEX_READ_BY_KEY should occur after INDEX_OPEN_* in standard flow.` | indexReadBeforeOpen | indexUsage | warning | warning | warning | 1 | core | [core/index-functions-sql/index-read-before-open](../test/syntax-tests/core/index-functions-sql/index-read-before-open.TXT) LINE 35, [core/index-functions/index-read-before-open](../test/syntax-tests/core/index-functions/index-read-before-open.TXT) LINE 35 | core | `acurity.rules.core.indexReadBeforeOpen.severity` |
| **ACU-PAT-006** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L943) | validity | IDE + CLI | `INDEX_CLOSE should occur after cursor operations (LOAD/READ) in standard flow.` | indexCloseBeforeRead | indexUsage | warning | warning | warning | 1 | core | [core/index-functions-sql/index-close-before-read](../test/syntax-tests/core/index-functions-sql/index-close-before-read.TXT) LINE 49, [core/index-functions/index-close-before-read](../test/syntax-tests/core/index-functions/index-close-before-read.TXT) LINE 49 | core | `acurity.rules.core.indexCloseBeforeRead.severity` |
| **ACU-PAT-007** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L955) | validity | IDE + CLI | `Array record operations on '{handle}' detected without an INIT_SORTED_ARRAY call in the same scope.` | arrayOpsWithoutInit | arrayUsage | warning | warning | warning | 0 | core | [core/array/array-lifecycle-complete](../test/syntax-tests/core/array/array-lifecycle-complete.TXT) LINE 75, [core/array/array-lifecycle-no-init](../test/syntax-tests/core/array/array-lifecycle-no-init.TXT) LINE 13 | - | `-` |
| **ACU-PAT-008** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L967) | advisory | IDE + CLI | `INIT_SORTED_ARRAY called without a corresponding FREE_SORTED_ARRAY or FIN_SORTED_ARRAY.` | arrayInitWithoutFree | arrayUsage | warning | warning | warning | 0 | core | [core/array/array-lifecycle-fin-suppression](../test/syntax-tests/core/array/array-lifecycle-fin-suppression.TXT) LINE 45 | - | `-` |
| **ACU-PAT-009** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L979) | validity | IDE + CLI | `Array record operation on '{handle}' after FREE_SORTED_ARRAY. Free the handle only after all operations are complete.` | arrayFreeBeforeOps | arrayUsage | warning | warning | warning | 0 | core | [core/array/array-lifecycle-complete](../test/syntax-tests/core/array/array-lifecycle-complete.TXT) LINE 140, [core/array/array-lifecycle-use-after-free](../test/syntax-tests/core/array/array-lifecycle-use-after-free.TXT) LINE 14 | - | `-` |
| **ACU-PAT-010** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L991) | validity | IDE + CLI | `'{handle}' was passed to INDEX_CLOSE and may no longer refer to a valid index cursor.` | staleIndexHandle | indexUsage | warning | warning | warning | 0 | core | [core/index-functions-sql/handle-stale-after-close](../test/syntax-tests/core/index-functions-sql/handle-stale-after-close.TXT) LINE 30, [core/index-functions-sql/handle-two-handles-one-stale](../test/syntax-tests/core/index-functions-sql/handle-two-handles-one-stale.TXT) LINE 36, [core/index-functions/handle-stale-after-close](../test/syntax-tests/core/index-functions/handle-stale-after-close.TXT) LINE 30, [core/index-functions/handle-two-handles-one-stale](../test/syntax-tests/core/index-functions/handle-two-handles-one-stale.TXT) LINE 36 | - | `-` |
| **ACU-PAT-011** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L1004) | validity | IDE + CLI | `'{variable}' is used as both the assignment target and the argument to GET_UNUSED_ARRAY_HANDLE, overwriting the handle with the status code.` | getUnusedHandleOverwrite | arrayUsage | warning | warning | warning | 0 | core | [core/array/array-bad-use-of-get-unused-handle](../test/syntax-tests/core/array/array-bad-use-of-get-unused-handle.TXT) LINE 26 | standards | `acurity.rules.standards.getUnusedHandleOverwrite.severity` |
| **ACU-PAT-012** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L1016) | validity | IDE + CLI | `GET_UNUSED_ARRAY_HANDLE called again before INIT_SORTED_ARRAY was called for the previous handle. Both calls will return the same handle value.` | consecutiveGetUnusedHandle | arrayUsage | warning | warning | warning | 0 | core | [core/array/array-bad-multiple-use-of-get-unused-handle](../test/syntax-tests/core/array/array-bad-multiple-use-of-get-unused-handle.TXT) LINE 30 | standards | `acurity.rules.standards.consecutiveGetUnusedHandle.severity` |
| **ACU-PAT-013** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L1029) | validity | IDE + CLI | `INDEX_RESTORE_POSITION('{tableCode}'): no active save for this table code.` | indexRestoreWithoutSave | indexUsage | warning | warning | warning | 0 | core | [core/index-functions-sql/index-restore-position-missing](../test/syntax-tests/core/index-functions-sql/index-restore-position-missing.TXT) LINES 33,34, [core/index-functions/index-restore-position-missing](../test/syntax-tests/core/index-functions/index-restore-position-missing.TXT) LINES 33,34 | - | `-` |
| **ACU-PAT-014** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L1041) | validity | IDE + CLI | `Index key at position {pos} expects type {expected} but '{callName}' loads a {actual} value.` | indexLoadKeyTypeMismatch | indexUsage | warning | warning | warning | 0 | core | [core/index-functions-sql/index-load-type-incorrect](../test/syntax-tests/core/index-functions-sql/index-load-type-incorrect.TXT) LINES 40,62,100,110, [core/index-functions/index-load-type-incorrect](../test/syntax-tests/core/index-functions/index-load-type-incorrect.TXT) LINES 39,61,99,109 | - | `-` |
| **ACU-PAT-015** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L1053) | validity | IDE + CLI | `Index '{indexName}' on table '{tableCode}' has {total} key segment(s). This load exceeds that count.` | indexLoadKeyCountExceeded | indexUsage | warning | warning | warning | 0 | core | [core/index-functions-sql/index-load-key-field-count-exceeded](../test/syntax-tests/core/index-functions-sql/index-load-key-field-count-exceeded.TXT) LINE 41, [core/index-functions/index-load-key-field-count-exceeded](../test/syntax-tests/core/index-functions/index-load-key-field-count-exceeded.TXT) LINE 40 | - | `-` |
| **ACU-PAT-016** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L1065) | validity | IDE + CLI | `Assigning to '{handle}' will overwrite an active index cursor handle.` | indexHandleOverwrite | indexUsage | warning | warning | warning | 0 | core | [core/index-functions-sql/index-handle-warn-on-write](../test/syntax-tests/core/index-functions-sql/index-handle-warn-on-write.TXT) LINES 32,33,34,35,36, [core/index-functions/index-handle-warn-on-write](../test/syntax-tests/core/index-functions/index-handle-warn-on-write.TXT) LINES 32,33,34,35,36 | - | `-` |
| **ACU-PAT-017** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L1077) | validity | IDE + CLI | `Length argument {length} exceeds the maximum width of segment {pos} ('{field}', max: {maxWidth}).` | indexLoadKeyStringTooLong | indexUsage | warning | warning | warning | 0 | core | [core/index-functions-sql/index-load-key-string-too-long](../test/syntax-tests/core/index-functions-sql/index-load-key-string-too-long.TXT) LINE 40, [core/index-functions/index-load-key-string-too-long](../test/syntax-tests/core/index-functions/index-load-key-string-too-long.TXT) LINE 39 | - | `-` |
| **ACU-RBD-001** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L819) | standards | IDE | `Missing ROBODOC start marker. Expected '//@docStart*...* ...'.` | robodocMissingStart | robodoc | warning | information | off | 0 | coding-standards | [coding-standards/robodoc/robodoc-missing-doc-block](../test/syntax-tests/coding-standards/robodoc/robodoc-missing-doc-block.TXT) LINE 1 | standards | `acurity.rules.standards.robodocMissingStart.severity` |
| **ACU-RBD-002** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L831) | standards | IDE | `Missing ROBODOC end marker. Expected '//@docEnd'.` | robodocMissingEnd | robodoc | warning | information | off | 0 | coding-standards | [coding-standards/robodoc/robodoc-has-start-missing-end](../test/syntax-tests/coding-standards/robodoc/robodoc-has-start-missing-end.TXT) LINE 2 | standards | `acurity.rules.standards.robodocMissingEnd.severity` |
| **ACU-RBD-003** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L843) | standards | IDE | `ROBODOC kind mismatch. Expected {expectedKind} tag '{expectedTag}' but found '{actualTag}'.` | robodocKindMismatch | robodoc | warning | information | off | 0 | coding-standards | [coding-standards/robodoc/robodoc-mismatch-tag-filename](../test/syntax-tests/coding-standards/robodoc/robodoc-mismatch-tag-filename.TXT) LINE 2 | standards | `acurity.rules.standards.robodocKindMismatch.severity` |
| **ACU-RBD-004** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L855) | standards | IDE | `ROBODOC header target mismatch. Expected '{expectedTarget}' but found '{actualTarget}'.` | robodocTargetMismatch | robodoc | warning | information | off | 0 | coding-standards | [coding-standards/robodoc/robodoc-mismatch-tag-filename](../test/syntax-tests/coding-standards/robodoc/robodoc-mismatch-tag-filename.TXT) LINE 2 | standards | `acurity.rules.standards.robodocTargetMismatch.severity` |
| **ACU-RBD-005** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L867) | standards | IDE | `ROBODOC section '{sectionName}' is missing from the doc block.` | robodocMissingSection | robodoc | warning | information | off | 0 | coding-standards | [coding-standards/robodoc/robodoc-missing-uses-section](../test/syntax-tests/coding-standards/robodoc/robodoc-missing-uses-section.TXT) LINE 2 | standards | `acurity.rules.standards.robodocMissingSection.severity` |
| **ACU-STY-003** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L1093) | standards | IDE + CLI | `Date literal '00/00/0000' is discouraged. Use MIN_DATE instead.` | emptyDateLiteral | discouragedLiteral | error | warning | off | 0 | coding-standards | [coding-standards/empty-date-literals-are-discouraged/empty-date-literal.default](../test/syntax-tests/coding-standards/empty-date-literals-are-discouraged/empty-date-literal.default.TXT) LINES 26,27, [coding-standards/empty-date-literals-are-discouraged/empty-date-literal.strict](../test/syntax-tests/coding-standards/empty-date-literals-are-discouraged/empty-date-literal.strict.TXT) LINES 24,25 | - | `-` |
| **ACU-STY-004** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L1105) | standards | IDE + CLI | `Operator '{operator}' must have a single space on each side.` | operatorSpacing | operatorSpacing | warning | off | off | 0 | coding-standards + core | [coding-standards/operator-spacing/operator-spacing-numeric](../test/syntax-tests/coding-standards/operator-spacing/operator-spacing-numeric.TXT) LINES 44,45,46,47,48,49, [coding-standards/operator-spacing/operator-spacing-strict](../test/syntax-tests/coding-standards/operator-spacing/operator-spacing-strict.TXT) LINES 53,54,55,56,57,58,59,60,61,62,63,64,65,66, [coding-standards/operator-spacing/operator-spacing-string](../test/syntax-tests/coding-standards/operator-spacing/operator-spacing-string.TXT) LINES 44,45,46,47,48,49, [core/do/do-loop-iterators](../test/syntax-tests/core/do/do-loop-iterators.TXT) LINE 54, [core/do/nested-loops-break-continue](../test/syntax-tests/core/do/nested-loops-break-continue.TXT) LINE 37 | - | `-` |
| **ACU-STY-005** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L1117) | advisory | IDE + CLI | `Hard-coded integer '{handle}' used as an array handle. Obtain the handle via GET_UNUSED_ARRAY_HANDLE() instead.` | discouragedHardcodedArrayHandle | arrayUsage | warning | warning | off | 0 | coding-standards + core | [coding-standards/array-hygiene/hardcoded-array-handle-without-variable](../test/syntax-tests/coding-standards/array-hygiene/hardcoded-array-handle-without-variable.TXT) LINES 24,25,26, [core/array/array-lifecycle-fin-suppression](../test/syntax-tests/core/array/array-lifecycle-fin-suppression.TXT) LINE 32 | standards | `acurity.rules.standards.discouragedHardcodedArrayHandle.severity` |
| **ACU-STY-008** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L1129) | standards | IDE + CLI | `'{keyword}' {issue}.` | exitTerminatorIssue | exitStatement | warning | warning | off | 1 | coding-standards | [coding-standards/dont-exit-at-end-of-report/exit-at-report-end-end-of-code-mid](../test/syntax-tests/coding-standards/dont-exit-at-end-of-report/exit-at-report-end-end-of-code-mid.TXT) LINE 19, [coding-standards/dont-exit-at-end-of-report/exit-at-report-end-end-of-code](../test/syntax-tests/coding-standards/dont-exit-at-end-of-report/exit-at-report-end-end-of-code.TXT) LINE 18, [coding-standards/dont-exit-at-end-of-report/exit-at-report-end-with-exit](../test/syntax-tests/coding-standards/dont-exit-at-end-of-report/exit-at-report-end-with-exit.TXT) LINE 25 | - | `-` |
| **ACU-SYN-001** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L706) | standards | IDE | `Redundant '#HASH-ON' directive. Reports are HASH-ON by default until HASH-OFF is encountered.` | redundantHashOn | hashMode | error | warning | off | 0 | core | [core/line-types/hash-mode-redundant-explicit-on](../test/syntax-tests/core/line-types/hash-mode-redundant-explicit-on.TXT) LINE 8, [core/line-types/hash-mode-redundant-hash-prefix-on](../test/syntax-tests/core/line-types/hash-mode-redundant-hash-prefix-on.TXT) LINE 8 | core | `acurity.rules.core.redundantHashOn.severity` |
| **ACU-SYN-002** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L718) | validity | IDE + CLI | `Unexpected token or unrecognized statement in executable context. Use '//' for comments or '>>' for output text.` | invalidExecutableLine | hashMode, operatorSpacing | error | error | error | 0 | coding-standards + core | [coding-standards/operator-spacing/operator-spacing-default](../test/syntax-tests/coding-standards/operator-spacing/operator-spacing-default.TXT) LINE 46, [coding-standards/operator-spacing/operator-spacing-strict](../test/syntax-tests/coding-standards/operator-spacing/operator-spacing-strict.TXT) LINE 70, [core/general/incomplete-statement-unassigned-return](../test/syntax-tests/core/general/incomplete-statement-unassigned-return.TXT) LINE 33, [core/line-types/hash-mode-off-hash-prefix-invalid](../test/syntax-tests/core/line-types/hash-mode-off-hash-prefix-invalid.TXT) LINE 21, [core/line-types/hash-mode-off-plain-invalid](../test/syntax-tests/core/line-types/hash-mode-off-plain-invalid.TXT) LINE 21, [core/line-types/hash-mode-on-invalid-hash](../test/syntax-tests/core/line-types/hash-mode-on-invalid-hash.TXT) LINE 10 | core | `acurity.rules.core.invalidExecutableLine.severity` |
| **ACU-SYN-003** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L730) | standards | IDE | `Prefer '//' comments over legacy '#NOTE' directives.` | preferSlashSlashComments | hashMode | warning | warning | warning | 0 | coding-standards + core | [coding-standards/line-types/comments-note-style-warnings](../test/syntax-tests/coding-standards/line-types/comments-note-style-warnings.TXT) LINES 15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,46,47,48, [core/line-types/hash-mode-on-note-style](../test/syntax-tests/core/line-types/hash-mode-on-note-style.TXT) LINE 23 | standards | `acurity.rules.standards.preferSlashSlashComments.severity` |
| **ACU-SYN-004** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L742) | validity | IDE + CLI | `DO iterator '{variable}' has no TO or BY clause. Use 'DO {variable} = start TO end' or 'DO {variable} = start TO end BY step'.` | doIteratorMissingClause | doIterator | error | error | error | 0 | core | [core/do/do-loop-iterators](../test/syntax-tests/core/do/do-loop-iterators.TXT) LINE 92 | - | `-` |
| **ACU-SYN-005** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L754) | advisory | IDE + CLI | `DO {variable}: This loop runs indefinitely (no BREAK / TO / UNTIL / WHILE).` | doIteratorNoUpperBound | doIterator | warning | warning | warning | 0 | core | [core/do/do-loop-iterators](../test/syntax-tests/core/do/do-loop-iterators.TXT) LINE 105, [core/do/do-warn-infinite-loop](../test/syntax-tests/core/do/do-warn-infinite-loop.TXT) LINES 44,50 | - | `-` |
| **ACU-SYN-006** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L766) | validity | IDE + CLI | `Assignment statement is incomplete — no value on the right-hand side.` | incompleteAssignment | hashMode | error | error | error | 0 | core | [core/line-types/incomplete-statement-hash-off](../test/syntax-tests/core/line-types/incomplete-statement-hash-off.TXT) LINES 22,23, [core/line-types/incomplete-statement-hash-on](../test/syntax-tests/core/line-types/incomplete-statement-hash-on.TXT) LINES 21,22 | - | `-` |
| **ACU-SYN-007** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L778) | validity | IDE + CLI | `The continuation operator '...' must appear at the end of a line, before any comment. Code cannot follow '...' on the same line.` | invalidContinuation | hashMode | error | error | error | 0 | core | [core/line-types/multiline-error](../test/syntax-tests/core/line-types/multiline-error.TXT) LINES 23,27,30,33 | - | `-` |
| **ACU-SYN-008** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L790) | validity | IDE + CLI | `Unexpected tokens after {keyword} statement — expected end of line.` | unexpectedTokensAfterStatement | eolRequired | error | error | error | 0 | core | [core/general/invalid-statement-declare-assign](../test/syntax-tests/core/general/invalid-statement-declare-assign.TXT) LINES 20,21,22 | - | `-` |
| **ACU-SYN-009** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L803) | validity | IDE + CLI | `'UNTIL' requires a condition expression. Unexpected end of line.` | untilMissingCondition | doIterator | error | error | error | 0 | core | [core/do/do-loop-iterators](../test/syntax-tests/core/do/do-loop-iterators.TXT) LINE 100 | - | `-` |
| **ACU-TODO-001** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L1145) | advisory | IDE | `TODO: {description}` | todoItem | todo | information | information | information | 0 | core | [core/index-functions-sql/index-table-synonyms](../test/syntax-tests/core/index-functions-sql/index-table-synonyms.TXT) LINE 35, [core/index-functions/index-table-synonyms](../test/syntax-tests/core/index-functions/index-table-synonyms.TXT) LINE 35 | - | `-` |
| **ACU-TODO-002** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L1157) | advisory | IDE | `FIXME: {description}` | fixmeItem | todo | information | information | information | 0 | coding-standards | [coding-standards/todo-tags/todo-fixme-hack-tags](../test/syntax-tests/coding-standards/todo-tags/todo-fixme-hack-tags.TXT) LINES 7,14 | - | `-` |
| **ACU-TODO-003** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L1169) | advisory | IDE | `HACK: {description}` | hackItem | todo | information | information | information | 0 | coding-standards | [coding-standards/todo-tags/todo-fixme-hack-tags](../test/syntax-tests/coding-standards/todo-tags/todo-fixme-hack-tags.TXT) LINE 8 | - | `-` |
| **ACU-TYPE-001** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L79) | standards | IDE | `Type keyword '{keyword}' should be capitalized as '{uppercase}'.` | typeKeywordCapitalization | typeKeywordCaps | error | warning | warning | 1 | coding-standards | [coding-standards/case-sensitivity/type-capitalisation-errors](../test/syntax-tests/coding-standards/case-sensitivity/type-capitalisation-errors.TXT) LINES 2,3,5,6 | standards | `acurity.rules.standards.typeKeywordCapitalization.severity` |
| **ACU-TYPE-002** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L91) | validity | IDE + CLI | `Type mismatch: Cannot assign {sourceType} to {targetType} variable '{target}'.` | typeMismatch | type | error | error | warning | 0 | core | [core/function-builtin/builtin-functions](../test/syntax-tests/core/function-builtin/builtin-functions.TXT) LINE 83, [core/function-user-defined/func-user-defined-signature-checks](../test/syntax-tests/core/function-user-defined/func-user-defined-signature-checks.TXT) LINE 53, [core/global-vars-builtin/global-variables-read](../test/syntax-tests/core/global-vars-builtin/global-variables-read.TXT) LINES 39,40,41,42,43,44,45,46,47,48, [core/var/diagnostic-precision-type-mismatch](../test/syntax-tests/core/var/diagnostic-precision-type-mismatch.TXT) LINE 21, [core/var/type-mismatch-compound-expressions-not-allowed](../test/syntax-tests/core/var/type-mismatch-compound-expressions-not-allowed.TXT) LINES 26,27,28, [core/var/type-mismatch-string-to-short](../test/syntax-tests/core/var/type-mismatch-string-to-short.TXT) LINE 20 | core | `acurity.rules.core.typeMismatch.severity` |
| **ACU-TYPE-003** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L103) | advisory | IDE + CLI | `Type 'INTEGER' is discouraged. Use 'LONG' instead.` | discouragedIntegerType | discouragedType | error | warning | warning | 1 | coding-standards | [coding-standards/integers-are-discouraged/integers-are-discouraged](../test/syntax-tests/coding-standards/integers-are-discouraged/integers-are-discouraged.TXT) LINES 23,24 | - | `-` |
| **ACU-VAR-001** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L578) | validity | IDE + CLI | `{variableName} is not defined.` | undefinedVariable | variable | error | error | error | 0 | core | [core/function-user-defined/function-variable-scope-within-symbol-check](../test/syntax-tests/core/function-user-defined/function-variable-scope-within-symbol-check.TXT) LINES 33,34, [core/function-user-defined/function-variable-scope](../test/syntax-tests/core/function-user-defined/function-variable-scope.TXT) LINES 30,31 | core | `acurity.rules.core.undefinedVariable.severity` |
| **ACU-VAR-002** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L590) | validity | IDE + CLI | `{variableName} is not set.` | unsetVariable | variable | error | warning | off | 0 | core | [core/array/array-lifecycle-complete](../test/syntax-tests/core/array/array-lifecycle-complete.TXT) LINE 56, [core/array/array-lifecycle-uninit-var](../test/syntax-tests/core/array/array-lifecycle-uninit-var.TXT) LINE 11, [core/include/include-initialised-variable](../test/syntax-tests/core/include/include-initialised-variable.TXT) LINE 25, [core/line-types/multiline-error](../test/syntax-tests/core/line-types/multiline-error.TXT) LINE 33 | core | `acurity.rules.core.unsetVariable.severity` |
| **ACU-VAR-003** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L602) | validity | IDE + CLI | `String is unclosed.` | unclosedString | variable | error | error | error | 1 | core | [core/var/unclosed-string-literal](../test/syntax-tests/core/var/unclosed-string-literal.TXT) LINE 22 | core | `acurity.rules.core.unclosedString.severity` |
| **ACU-VAR-004** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L614) | standards | IDE + CLI | `Pseudo-constant '{variableName}' is assigned multiple times. First assigned on line {firstLine}.` | pseudoConstantMultipleAssignment | variable | error | warning | warning | 0 | core | [core/var/pseudo-constant-reassignment](../test/syntax-tests/core/var/pseudo-constant-reassignment.TXT) LINE 4 | core | `acurity.rules.core.pseudoConstantMultipleAssignment.severity` |
| **ACU-VAR-005** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L626) | validity | IDE + CLI | `'{variableName}' is not defined. Did you mean '{suggestion}'?` | nearMissConstantName | variable | error | error | error | 0 | core | [core/global-vars-builtin/global-variables-read](../test/syntax-tests/core/global-vars-builtin/global-variables-read.TXT) LINES 34,35,36, [core/index-functions-sql/index-cursor-directions](../test/syntax-tests/core/index-functions-sql/index-cursor-directions.TXT) LINE 40, [core/index-functions/index-cursor-directions](../test/syntax-tests/core/index-functions/index-cursor-directions.TXT) LINE 40 | core | `acurity.rules.core.nearMissConstantName.severity` |
| **ACU-VAR-006** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L638) | validity | IDE + CLI | `'{variableName}' is a read-only built-in global variable and cannot be assigned.` | readOnlyGlobalVariableAssignment | variable | error | error | error | 0 | core | [core/global-vars-builtin/global-variables-write](../test/syntax-tests/core/global-vars-builtin/global-variables-write.TXT) LINES 34,35,37,39 | - | `-` |
| **ACU-VAR-007** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L650) | standards | IDE + CLI | `'{variableName}' is declared but never used.` | declaredButNeverUsedVariable | variable | warning | off | off | 1 | coding-standards | [coding-standards/unused-variable/unused-variable](../test/syntax-tests/coding-standards/unused-variable/unused-variable.TXT) LINES 27,28,29,30,31 | - | `-` |
| **ACU-VAR-008** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L1245) | advisory | IDE + CLI | `'{name}' does not match any known database field handle.` | invalidFieldHandle | variable | warning | warning | warning | 0 | core | [core/db-field-names/db-field-handles-unknown](../test/syntax-tests/core/db-field-names/db-field-handles-unknown.TXT) LINE 21 | - | `-` |
| **ACU-VAR-009** | [📖](../core/src/diagnostics/diagnosticCatalog.js#L1257) | standards | IDE + CLI | `Field handle '{name}' should be '{canonical}'.` | fieldHandleCapitalization | variable | warning | warning | warning | 0 | coding-standards | [coding-standards/case-sensitivity/db-field-handles-casing-mismatch](../test/syntax-tests/coding-standards/case-sensitivity/db-field-handles-casing-mismatch.TXT) LINE 22, [coding-standards/db-field-names/db-field-handles-wrong-casing](../test/syntax-tests/coding-standards/db-field-names/db-field-handles-wrong-casing.TXT) LINE 22 | - | `-` |

## Quick Fix Coverage

| Message ID | Rule | Actions | Kinds |
| --- | --- | --- | --- |
| **ACU-FNC-007** | functionCaseMismatch | 2 | quickfix |
| **ACU-INT-002** | interpolationCaseMismatch | 2 | quickfix |
| **ACU-INT-003** | interpolationUnclosed | 1 | quickfix |
| **ACU-KWD-001** | keywordCapitalization | 1 | quickfix |
| **ACU-NAM-001** | namingDatabaseFieldDeclaration | 1 | quickfix |
| **ACU-NAM-002** | namingPrefixScope | 1 | quickfix |
| **ACU-NAM-003** | namingPrefixType | 1 | quickfix |
| **ACU-PAT-001** | indexUsageMissingClose | 1 | quickfix |
| **ACU-PAT-002** | indexUsageSaveRestorePair | 1 | quickfix |
| **ACU-PAT-003** | indexUsageSaveRestoreRecommendation | 2 | quickfix |
| **ACU-PAT-004** | indexReadBeforeLoad | 1 | quickfix |
| **ACU-PAT-005** | indexReadBeforeOpen | 1 | quickfix |
| **ACU-PAT-006** | indexCloseBeforeRead | 1 | quickfix |
| **ACU-STY-008** | exitTerminatorIssue | 1 | quickfix |
| **ACU-TYPE-001** | typeKeywordCapitalization | 1 | quickfix |
| **ACU-TYPE-003** | discouragedIntegerType | 1 | quickfix |
| **ACU-VAR-003** | unclosedString | 1 | quickfix |
| **ACU-VAR-007** | declaredButNeverUsedVariable | 1 | quickfix |

## Category Counts

| Category | Diagnostics |
| --- | --- |
| ARG | 6 |
| BLK | 6 |
| FNC | 16 |
| INC | 4 |
| INT | 3 |
| KWD | 1 |
| MAC | 5 |
| NAM | 3 |
| OPT | 2 |
| OUT | 3 |
| PAT | 17 |
| RBD | 5 |
| STY | 4 |
| SYN | 9 |
| TODO | 3 |
| TYPE | 3 |
| VAR | 9 |

## Contributed Settings (from package.json)

| Setting Key | Type | Settings Section |
| --- | --- | --- |
| `acurity.code-completion` | boolean | General |
| `acurity.diagnostics.debounceMs` | number | General |
| `acurity.help.webRoot` | string | General |
| `acurity.logging` | boolean | General |
| `acurity.naming.scopePrefixes.functionScoped.prefixChar` | string | Coding Standards : Variable Naming : Scope Prefixes |
| `acurity.naming.scopePrefixes.global.prefixChar` | string | Coding Standards : Variable Naming : Scope Prefixes |
| `acurity.naming.scopePrefixes.parameter.prefixChar` | string | Coding Standards : Variable Naming : Scope Prefixes |
| `acurity.naming.typePrefixes.boolean.prefixChar` | string | Coding Standards : Variable Naming : Type Prefixes |
| `acurity.naming.typePrefixes.date.prefixChar` | string | Coding Standards : Variable Naming : Type Prefixes |
| `acurity.naming.typePrefixes.double.prefixChar` | string | Coding Standards : Variable Naming : Type Prefixes |
| `acurity.naming.typePrefixes.long.prefixChar` | string | Coding Standards : Variable Naming : Type Prefixes |
| `acurity.naming.typePrefixes.short.prefixChar` | string | Coding Standards : Variable Naming : Type Prefixes |
| `acurity.naming.typePrefixes.string.prefixChar` | string | Coding Standards : Variable Naming : Type Prefixes |
| `acurity.naming.typePrefixes.time.prefixChar` | string | Coding Standards : Variable Naming : Type Prefixes |
| `acurity.robodoc.authorName` | string | Report Templates : ROBODOC |
| `acurity.robodoc.enabled` | boolean | Report Templates : ROBODOC |
| `acurity.robodoc.includeHeaderPrefix` | string | Report Templates : ROBODOC |
| `acurity.robodoc.reportFilenamePattern` | string | Report Templates : ROBODOC |
| `acurity.robodoc.reportHeaderPrefix` | string | Report Templates : ROBODOC |
| `acurity.robodoc.requireDocBlock` | boolean | Report Templates : ROBODOC |
| `acurity.robodoc.requiredSections` | array | Report Templates : ROBODOC |
| `acurity.robodoc.validateHeaderTarget` | boolean | Report Templates : ROBODOC |
| `acurity.rules.core.blockStructure.severity` | string | Core Validations |
| `acurity.rules.core.functionCallUnclosed.severity` | string | Core Validations |
| `acurity.rules.core.functionConstantUsage.severity` | string | Core Validations |
| `acurity.rules.core.functionDeclarationMissingParamType.severity` | string | Core Validations |
| `acurity.rules.core.functionDeclarationMissingReturnType.severity` | string | Core Validations |
| `acurity.rules.core.functionOutOfScope.severity` | string | Core Validations |
| `acurity.rules.core.functionRedeclared.severity` | string | Core Validations |
| `acurity.rules.core.functionReturnValueUnused.severity` | string | Core Validations |
| `acurity.rules.core.functionSignature.severity` | string | Core Validations |
| `acurity.rules.core.functionUndefined.severity` | string | Core Validations |
| `acurity.rules.core.includeCircular.severity` | string | Core Validations |
| `acurity.rules.core.includeFileNotFound.severity` | string | Core Validations |
| `acurity.rules.core.indexCloseBeforeRead.severity` | string | Core Validations |
| `acurity.rules.core.indexReadBeforeLoad.severity` | string | Core Validations |
| `acurity.rules.core.indexReadBeforeOpen.severity` | string | Core Validations |
| `acurity.rules.core.indexUsageMissingClose.severity` | string | Core Validations |
| `acurity.rules.core.interpolationUnclosed.severity` | string | Core Validations |
| `acurity.rules.core.interpolationUndefined.severity` | string | Core Validations |
| `acurity.rules.core.invalidExecutableLine.severity` | string | Core Validations |
| `acurity.rules.core.literalForVarParam.severity` | string | Core Validations |
| `acurity.rules.core.macroMissingParameters.severity` | string | Core Validations |
| `acurity.rules.core.macroParameterCountMismatch.severity` | string | Core Validations |
| `acurity.rules.core.macroRedeclared.severity` | string | Core Validations |
| `acurity.rules.core.macroUnexpectedParameters.severity` | string | Core Validations |
| `acurity.rules.core.namingDatabaseFieldDeclaration.severity` | string | Core Validations |
| `acurity.rules.core.nearMissConstantName.severity` | string | Core Validations |
| `acurity.rules.core.pseudoConstantMultipleAssignment.severity` | string | Core Validations |
| `acurity.rules.core.redundantHashOn.severity` | string | Core Validations |
| `acurity.rules.core.requireFileNotFound.severity` | string | Core Validations |
| `acurity.rules.core.typeMismatch.severity` | string | Core Validations |
| `acurity.rules.core.unclosedString.severity` | string | Core Validations |
| `acurity.rules.core.undefinedVariable.severity` | string | Core Validations |
| `acurity.rules.core.unsetVariable.severity` | string | Core Validations |
| `acurity.rules.forceProfile` | boolean | Coding Standards : Profile |
| `acurity.rules.profile` | string | Coding Standards : Profile |
| `acurity.rules.standards.consecutiveGetUnusedHandle.severity` | string | Coding Standards : Array Hygiene |
| `acurity.rules.standards.discouragedHardcodedArrayHandle.severity` | string | Coding Standards : Array Hygiene |
| `acurity.rules.standards.functionCaseMismatch.severity` | string | Coding Standards : Capitalization Consistency |
| `acurity.rules.standards.getUnusedHandleOverwrite.severity` | string | Coding Standards : Array Hygiene |
| `acurity.rules.standards.includeFilenameCaseMismatch.severity` | string | Coding Standards : Capitalization Consistency |
| `acurity.rules.standards.indexUsageSaveRestorePair.severity` | string | Coding Standards : Index Hygiene (Save/Open/Close/Restore) |
| `acurity.rules.standards.indexUsageSaveRestoreRecommendation.severity` | string | Coding Standards : Index Hygiene (Save/Open/Close/Restore) |
| `acurity.rules.standards.interpolationCaseMismatch.severity` | string | Coding Standards : Capitalization Consistency |
| `acurity.rules.standards.keywordCapitalization.severity` | string | Coding Standards : Capitalization Consistency |
| `acurity.rules.standards.macroCaseMismatch.severity` | string | Coding Standards : Capitalization Consistency |
| `acurity.rules.standards.namingPrefixScope.severity` | string | Coding Standards : Variable Naming : Scope Prefixes |
| `acurity.rules.standards.namingPrefixType.severity` | string | Coding Standards : Variable Naming : Type Prefixes |
| `acurity.rules.standards.preferSlashSlashComments.severity` | string | Coding Standards : Comment Style |
| `acurity.rules.standards.robodocKindMismatch.severity` | string | Report Templates : ROBODOC |
| `acurity.rules.standards.robodocMissingEnd.severity` | string | Report Templates : ROBODOC |
| `acurity.rules.standards.robodocMissingSection.severity` | string | Report Templates : ROBODOC |
| `acurity.rules.standards.robodocMissingStart.severity` | string | Report Templates : ROBODOC |
| `acurity.rules.standards.robodocTargetMismatch.severity` | string | Report Templates : ROBODOC |
| `acurity.rules.standards.typeKeywordCapitalization.severity` | string | Coding Standards : Capitalization Consistency |
| `acurity.templates.promptOnBlankFile` | boolean | Report Templates : ROBODOC |
