# Syntax Test Suite Audit

> **Purpose:** Per-file tracking of the syntax test review. Address each row to bring every
> test up to the gold standard: sufficient inline comments, modern `exact+ID` spec format
> with meaningful assertions.
>
> **Gold standard reference:** [`index-cursor-directions.TXT`](../architect-language-tools/test/syntax-tests/arguments-string-cursor/index-cursor-directions.TXT)
>
> **Status values:** `Pending` · `In Progress` · `Done` · `Blocked`
>
> **Format key:** `exact+ID` = modern (ID-based, exact match) · `exact+str` = string literal match ·
> `substring` = legacy substring mode · `—` = spec missing
>
> **Note:** All spec files renamed 2026-03-27 to match TXT entry names (e.g. `0001.test-spec.json` → `builtin-get-str.test-spec.json`).

---

## arguments-string-cursor

| Test File | Comments | Spec | Format | Assertions | Issues | Status |
|---|---|---|---|---|---|---|
| [index-cursor-directions.TXT](../architect-language-tools/test/syntax-tests/arguments-string-cursor/index-cursor-directions.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/arguments-string-cursor/index-cursor-directions.test-spec.json) | exact+ID | 8 | None — gold standard | Done |

---

## arguments-string-date

| Test File | Comments | Spec | Format | Assertions | Issues | Status |
|---|---|---|---|---|---|---|
| [str-to-date-format.TXT](../architect-language-tools/test/syntax-tests/arguments-string-date/str-to-date-format.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/arguments-string-date/str-to-date-format.test-spec.json) | exact+ID | 8 | None — gold standard | Done |

---

## arguments-string-table-synonym

| Test File | Comments | Spec | Format | Assertions | Issues | Status |
|---|---|---|---|---|---|---|
| [index-table-synonyms.TXT](../architect-language-tools/test/syntax-tests/arguments-string-table-synonym/index-table-synonyms.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/arguments-string-table-synonym/index-table-synonyms.test-spec.json) | exact+ID | 10 | None — gold standard | Done |

---

## array-lifecycle

| Test File | Comments | Spec | Format | Assertions | Issues | Status |
|---|---|---|---|---|---|---|
| [array-lifecycle-complete.TXT](../architect-language-tools/test/syntax-tests/array-lifecycle/array-lifecycle-complete.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/array-lifecycle/array-lifecycle-complete.test-spec.json) | exact+ID | 0 | 0 assertions intentional (happy path) | Done |
| [array-lifecycle-ops-without-init.TXT](../architect-language-tools/test/syntax-tests/array-lifecycle/array-lifecycle-ops-without-init.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/array-lifecycle/array-lifecycle-ops-without-init.test-spec.json) | exact+ID | 1 | None | Done |
| [array-lifecycle-init-without-free.TXT](../architect-language-tools/test/syntax-tests/array-lifecycle/array-lifecycle-init-without-free.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/array-lifecycle/array-lifecycle-init-without-free.test-spec.json) | exact+ID | 1 | None | Done |
| [array-lifecycle-free-before-ops.TXT](../architect-language-tools/test/syntax-tests/array-lifecycle/array-lifecycle-free-before-ops.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/array-lifecycle/array-lifecycle-free-before-ops.test-spec.json) | exact+ID | 1 | None | Done |
| [array-lifecycle-fin-suppression.TXT](../architect-language-tools/test/syntax-tests/array-lifecycle/array-lifecycle-fin-suppression.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/array-lifecycle/array-lifecycle-fin-suppression.test-spec.json) | exact+ID | 0 | None | Done |

---

## block-structure

| Test File | Comments | Spec | Format | Assertions | Issues | Status |
|---|---|---|---|---|---|---|
| [block-unexpected-closures.TXT](../architect-language-tools/test/syntax-tests/block-structure/block-unexpected-closures.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/block-structure/block-unexpected-closures.test-spec.json) | exact+ID | 3 | None | Done |
| [block-unclosed-at-eof.TXT](../architect-language-tools/test/syntax-tests/block-structure/block-unclosed-at-eof.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/block-structure/block-unclosed-at-eof.test-spec.json) | exact+ID | 2 | None | Done |
| [block-mismatched-closures.TXT](../architect-language-tools/test/syntax-tests/block-structure/block-mismatched-closures.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/block-structure/block-mismatched-closures.test-spec.json) | exact+ID | 4 | None | Done |

---

## case

| Test File | Comments | Spec | Format | Assertions | Issues | Status |
|---|---|---|---|---|---|---|
| [case-without-of.TXT](../architect-language-tools/test/syntax-tests/case/case-without-of.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/case/case-without-of.test-spec.json) | exact+str | 0 | No diagnostics expected (valid code); unexpecteds guard against block errors | Done |
| [case-with-of-legacy.TXT](../architect-language-tools/test/syntax-tests/case/case-with-of-legacy.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/case/case-with-of-legacy.test-spec.json) | exact+str | 0 | No diagnostics expected (valid code); unexpecteds guard against block errors | Done |

---

## code-actions

| Test File | Comments | Spec | Format | Assertions | Issues | Status |
|---|---|---|---|---|---|---|
| [code-action-keyword-capitalize.TXT](../architect-language-tools/test/syntax-tests/code-actions/code-action-keyword-capitalize.TXT) | Minimal | [✓](../architect-language-tools/test/syntax-tests/code-actions/code-action-keyword-capitalize.test-spec.json) | exact+ID | 1 | Comments on the target line break the code-action FIXED comparison — keep target line comment-free | Done |

---

## comments

| Test File | Comments | Spec | Format | Assertions | Issues | Status |
|---|---|---|---|---|---|---|
| [comments-note-style-warnings.TXT](../architect-language-tools/test/syntax-tests/comments/comments-note-style-warnings.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/comments/comments-note-style-warnings.test-spec.json) | exact+ID | 26 | None | Done |
| [comments-hash-slash-preferred.TXT](../architect-language-tools/test/syntax-tests/comments/comments-hash-slash-preferred.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/comments/comments-hash-slash-preferred.test-spec.json) | exact+ID | 0 | None | Done |
| [comments-forward-slash-hash.TXT](../architect-language-tools/test/syntax-tests/comments/comments-forward-slash-hash.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/comments/comments-forward-slash-hash.test-spec.json) | exact+ID | 0 | Spec written; 0 expected/unexpected (smoke test) | Done |

---

## control-flow

| Test File | Comments | Spec | Format | Assertions | Issues | Status |
|---|---|---|---|---|---|---|
| [control-flow-exit.TXT](../architect-language-tools/test/syntax-tests/control-flow/control-flow-exit.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/control-flow/control-flow-exit.test-spec.json) | exact+ID | 0 | 0 assertions intentional (happy path — EXIT is valid) | Done |
| [control-flow-end-of-code.TXT](../architect-language-tools/test/syntax-tests/control-flow/control-flow-end-of-code.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/control-flow/control-flow-end-of-code.test-spec.json) | exact+ID | 0 | 0 assertions intentional (happy path) | Done |

---

## core

| Test File | Comments | Spec | Format | Assertions | Issues | Status |
|---|---|---|---|---|---|---|
| [builtin-get-str.TXT](../architect-language-tools/test/syntax-tests/core/builtin-get-str.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/core/builtin-get-str.test-spec.json) | exact+ID | 0 | None | Done |
| [undefined-func-error.TXT](../architect-language-tools/test/syntax-tests/core/undefined-func-error.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/core/undefined-func-error.test-spec.json) | exact+ID | 1 | None | Done |
| [forward-function-call-error.TXT](../architect-language-tools/test/syntax-tests/core/forward-function-call-error.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/core/forward-function-call-error.test-spec.json) | exact+ID | 1 | None | Done |
| [user-defined-after-definition.TXT](../architect-language-tools/test/syntax-tests/core/user-defined-after-definition.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/core/user-defined-after-definition.test-spec.json) | exact+ID | 0 | 0 assertions intentional (happy path) | Done |
| [type-mismatch-string-to-short.TXT](../architect-language-tools/test/syntax-tests/core/type-mismatch-string-to-short.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/core/type-mismatch-string-to-short.test-spec.json) | exact+ID | 1 | None | Done |
| [compatible-types.TXT](../architect-language-tools/test/syntax-tests/core/compatible-types.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/core/compatible-types.test-spec.json) | exact+ID | 0 | 0 assertions intentional (happy path) | Done |
| [incomplete-statement-unassigned-return.TXT](../architect-language-tools/test/syntax-tests/core/incomplete-statement-unassigned-return.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/core/incomplete-statement-unassigned-return.test-spec.json) | exact+ID | 3 | None | Done |
| [empty-document-placeholder.TXT](../architect-language-tools/test/syntax-tests/core/empty-document-placeholder.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/core/empty-document-placeholder.test-spec.json) | exact+ID | 0 | Spec written | Done |

---

## db-field-names

| Test File | Comments | Spec | Format | Assertions | Issues | Status |
|---|---|---|---|---|---|---|
| [db-field-handles-known.TXT](../architect-language-tools/test/syntax-tests/db-field-names/db-field-handles-known.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/db-field-names/db-field-handles-known.test-spec.json) | exact+ID | 0 | None | Done |
| [db-field-handles-unknown.TXT](../architect-language-tools/test/syntax-tests/db-field-names/db-field-handles-unknown.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/db-field-names/db-field-handles-unknown.test-spec.json) | exact+ID | 1 | None | Done |
| [db-field-handles-wrong-casing.TXT](../architect-language-tools/test/syntax-tests/db-field-names/db-field-handles-wrong-casing.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/db-field-names/db-field-handles-wrong-casing.test-spec.json) | exact+ID | 1 | None | Done |

---

## debug-output

| Test File | Comments | Spec | Format | Assertions | Issues | Status |
|---|---|---|---|---|---|---|
| [debug-output-hash-off.TXT](../architect-language-tools/test/syntax-tests/debug-output/debug-output-hash-off.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/debug-output/debug-output-hash-off.test-spec.json) | exact+ID | 0 | None | Done |
| [debug-output-hash-on.TXT](../architect-language-tools/test/syntax-tests/debug-output/debug-output-hash-on.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/debug-output/debug-output-hash-on.test-spec.json) | exact+ID | 0 | None | Done |

---

## diagnostic-precision

| Test File | Comments | Spec | Format | Assertions | Issues | Status |
|---|---|---|---|---|---|---|
| [diagnostic-precision-undefined-function.TXT](../architect-language-tools/test/syntax-tests/diagnostic-precision/diagnostic-precision-undefined-function.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/diagnostic-precision/diagnostic-precision-undefined-function.test-spec.json) | exact+ID | 1 | None | Done |
| [diagnostic-precision-type-mismatch.TXT](../architect-language-tools/test/syntax-tests/diagnostic-precision/diagnostic-precision-type-mismatch.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/diagnostic-precision/diagnostic-precision-type-mismatch.test-spec.json) | exact+ID | 1 | None | Done |

---

## do

| Test File | Comments | Spec | Format | Assertions | Issues | Status |
|---|---|---|---|---|---|---|
| [do-while-basic.TXT](../architect-language-tools/test/syntax-tests/do/do-while-basic.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/do/do-while-basic.test-spec.json) | exact | 0 | Rewritten to use simple counter instead of DB handles | Done |
| [do-forever-break-continue.TXT](../architect-language-tools/test/syntax-tests/do/do-forever-break-continue.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/do/do-forever-break-continue.test-spec.json) | exact | 0 | Rewritten; UNTIL swapped for ENDDO/BREAK (ACU-BLK-003 block validator limitation) | Done |
| [nested-loops-break-continue.TXT](../architect-language-tools/test/syntax-tests/do/nested-loops-break-continue.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/do/nested-loops-break-continue.test-spec.json) | exact | 0 | Rewritten to use simple counters | Done |

---

## edge-cases

| Test File | Comments | Spec | Format | Assertions | Issues | Status |
|---|---|---|---|---|---|---|
| [edge-case-hash-comment.TXT](../architect-language-tools/test/syntax-tests/edge-cases/edge-case-hash-comment.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/edge-cases/edge-case-hash-comment.test-spec.json) | exact+ID | 0 | None | Done |
| [edge-case-alt-var-syntax.TXT](../architect-language-tools/test/syntax-tests/edge-cases/edge-case-alt-var-syntax.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/edge-cases/edge-case-alt-var-syntax.test-spec.json) | exact+ID | 0 | None | Done |
| [edge-case-keyword-profile.TXT](../architect-language-tools/test/syntax-tests/edge-cases/edge-case-keyword-profile.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/edge-cases/edge-case-keyword-profile.test-spec.json) | exact+ID | 1 | None | Done |
| [edge-case-xml-dtd-strings.TXT](../architect-language-tools/test/syntax-tests/edge-cases/edge-case-xml-dtd-strings.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/edge-cases/edge-case-xml-dtd-strings.test-spec.json) | exact+ID | 0 | None | Done |

---

## function-builtin

| Test File | Comments | Spec | Format | Assertions | Issues | Status |
|---|---|---|---|---|---|---|
| [builtin-get-token-validation.TXT](../architect-language-tools/test/syntax-tests/function-builtin/builtin-get-token-validation.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/function-builtin/builtin-get-token-validation.test-spec.json) | exact+ID | 2 | None | Done |
| [builtin-recent-additions.TXT](../architect-language-tools/test/syntax-tests/function-builtin/builtin-recent-additions.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/function-builtin/builtin-recent-additions.test-spec.json) | exact+ID | 0 | None | Done |

---

## function-capitalisation-mismatch

| Test File | Comments | Spec | Format | Assertions | Issues | Status |
|---|---|---|---|---|---|---|
| [func-case-mismatch-fix-call.TXT](../architect-language-tools/test/syntax-tests/function-capitalisation-mismatch/func-case-mismatch-fix-call.TXT) | Minimal | [✓](../architect-language-tools/test/syntax-tests/function-capitalisation-mismatch/func-case-mismatch-fix-call.test-spec.json) | exact+ID | 1 | Comments on target line break code-action FIXED comparison — keep comment-free | Done |
| [func-case-mismatch-fix-decl.TXT](../architect-language-tools/test/syntax-tests/function-capitalisation-mismatch/func-case-mismatch-fix-decl.TXT) | Minimal | [✓](../architect-language-tools/test/syntax-tests/function-capitalisation-mismatch/func-case-mismatch-fix-decl.test-spec.json) | exact+ID | 1 | Same as above | Done |

---

## function-user-defined

| Test File | Comments | Spec | Format | Assertions | Issues | Status |
|---|---|---|---|---|---|---|
| [func-user-defined-signature-checks.TXT](../architect-language-tools/test/syntax-tests/function-user-defined/func-user-defined-signature-checks.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/function-user-defined/func-user-defined-signature-checks.test-spec.json) | exact+ID | 2 | ACU-FNC-006 only fires for count errors (not type errors) — spec reflects current capability | Done |
| [func-user-defined-return-validation.TXT](../architect-language-tools/test/syntax-tests/function-user-defined/func-user-defined-return-validation.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/function-user-defined/func-user-defined-return-validation.test-spec.json) | exact+ID | 0 | Return type checking not yet implemented — spec documents current behaviour | Done |

---

## handle-validity

| Test File | Comments | Spec | Format | Assertions | Issues | Status |
|---|---|---|---|---|---|---|
| [handle-stale-after-close.TXT](../architect-language-tools/test/syntax-tests/handle-validity/handle-stale-after-close.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/handle-validity/handle-stale-after-close.test-spec.json) | exact+ID | 1 | None | Done |
| [handle-reopen-clears-state.TXT](../architect-language-tools/test/syntax-tests/handle-validity/handle-reopen-clears-state.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/handle-validity/handle-reopen-clears-state.test-spec.json) | exact+ID | 0 | None | Done |
| [handle-two-handles-one-stale.TXT](../architect-language-tools/test/syntax-tests/handle-validity/handle-two-handles-one-stale.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/handle-validity/handle-two-handles-one-stale.test-spec.json) | exact+ID | 2 | None | Done |

---

## hash-mode

| Test File | Comments | Spec | Format | Assertions | Issues | Status |
|---|---|---|---|---|---|---|
| [hash-mode-default-on.TXT](../architect-language-tools/test/syntax-tests/hash-mode/hash-mode-default-on.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/hash-mode/hash-mode-default-on.test-spec.json) | exact+ID | 0 | None | Done |
| [hash-mode-redundant-explicit-on.TXT](../architect-language-tools/test/syntax-tests/hash-mode/hash-mode-redundant-explicit-on.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/hash-mode/hash-mode-redundant-explicit-on.test-spec.json) | exact+ID | 1 | None | Done |
| [hash-mode-redundant-hash-prefix-on.TXT](../architect-language-tools/test/syntax-tests/hash-mode/hash-mode-redundant-hash-prefix-on.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/hash-mode/hash-mode-redundant-hash-prefix-on.test-spec.json) | exact+ID | 1 | None | Done |
| [hash-mode-toggling.TXT](../architect-language-tools/test/syntax-tests/hash-mode/hash-mode-toggling.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/hash-mode/hash-mode-toggling.test-spec.json) | exact+ID | 0 | None | Done |
| [hash-mode-explicit-off.TXT](../architect-language-tools/test/syntax-tests/hash-mode/hash-mode-explicit-off.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/hash-mode/hash-mode-explicit-off.test-spec.json) | exact+ID | 0 | None | Done |
| [hash-mode-off-plain-invalid.TXT](../architect-language-tools/test/syntax-tests/hash-mode/hash-mode-off-plain-invalid.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/hash-mode/hash-mode-off-plain-invalid.test-spec.json) | exact+ID | 1 | Failing line is the invalid content itself — preceded by explanatory comment on line 3 | Done |
| [hash-mode-off-hash-prefix-invalid.TXT](../architect-language-tools/test/syntax-tests/hash-mode/hash-mode-off-hash-prefix-invalid.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/hash-mode/hash-mode-off-hash-prefix-invalid.test-spec.json) | exact+ID | 1 | Failing line is the invalid content itself — preceded by explanatory comment on line 3 | Done |
| [hash-mode-on-unprefixed-output.TXT](../architect-language-tools/test/syntax-tests/hash-mode/hash-mode-on-unprefixed-output.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/hash-mode/hash-mode-on-unprefixed-output.test-spec.json) | exact+ID | 0 | None | Done |
| [hash-mode-on-invalid-hash.TXT](../architect-language-tools/test/syntax-tests/hash-mode/hash-mode-on-invalid-hash.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/hash-mode/hash-mode-on-invalid-hash.test-spec.json) | exact+ID | 1 | None | Done |
| [hash-mode-on-note-style.TXT](../architect-language-tools/test/syntax-tests/hash-mode/hash-mode-on-note-style.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/hash-mode/hash-mode-on-note-style.test-spec.json) | exact+ID | 1 | None | Done |
| [hash-mode-note-no-false-positives.TXT](../architect-language-tools/test/syntax-tests/hash-mode/hash-mode-note-no-false-positives.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/hash-mode/hash-mode-note-no-false-positives.test-spec.json) | exact+ID | 6 | None | Done |

---

## include-test

| Test File | Comments | Spec | Format | Assertions | Issues | Status |
|---|---|---|---|---|---|---|
| [includetest-scope.TXT](../architect-language-tools/test/syntax-tests/include-test/includetest-scope.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/include-test/includetest-scope.test-spec.json) | exact | 0 | Fixed: `OUTPUT` → `>> ^var^` | Done |

---

## included-files

| Test File | Comments | Spec | Format | Assertions | Issues | Status |
|---|---|---|---|---|---|---|
| [include-chain-behavior.TXT](../architect-language-tools/test/syntax-tests/included-files/include-chain-behavior.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/included-files/include-chain-behavior.test-spec.json) | substring | 4 | Pre-existing: additional unlisted diagnostics from include chains prevent exact mode | Pending |
| [includeonce-chain-behavior.TXT](../architect-language-tools/test/syntax-tests/included-files/includeonce-chain-behavior.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/included-files/includeonce-chain-behavior.test-spec.json) | substring | 5 | Pre-existing: same as above | Pending |
| [circular-include-safe.TXT](../architect-language-tools/test/syntax-tests/included-files/circular-include-safe.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/included-files/circular-include-safe.test-spec.json) | exact+ID | 1 | None | Done |
| [circular-includeonce-safe.TXT](../architect-language-tools/test/syntax-tests/included-files/circular-includeonce-safe.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/included-files/circular-includeonce-safe.test-spec.json) | exact+ID | 0 | None | Done |

---

## indentation

| Test File | Comments | Spec | Format | Assertions | Issues | Status |
|---|---|---|---|---|---|---|
| [indentation-block-mismatch.TXT](../architect-language-tools/test/syntax-tests/indentation/indentation-block-mismatch.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/indentation/indentation-block-mismatch.test-spec.json) | exact+ID | 5 | None | Done |

---

## index-save-position

| Test File | Comments | Spec | Format | Assertions | Issues | Status |
|---|---|---|---|---|---|---|
| [index-save-position-missing.TXT](../architect-language-tools/test/syntax-tests/index-save-position/index-save-position-missing.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/index-save-position/index-save-position-missing.test-spec.json) | exact+ID | 1 | None | Done |
| [index-restore-position-missing.TXT](../architect-language-tools/test/syntax-tests/index-save-position/index-restore-position-missing.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/index-save-position/index-restore-position-missing.test-spec.json) | exact+ID | 1 | Pre-existing: code action provider returns no edit (currently failing) | Blocked |

---

## index-usage

| Test File | Comments | Spec | Format | Assertions | Issues | Status |
|---|---|---|---|---|---|---|
| [index-usage-baseline.TXT](../architect-language-tools/test/syntax-tests/index-usage/index-usage-baseline.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/index-usage/index-usage-baseline.test-spec.json) | exact+ID | 13 | None | Done |

---

## macro

| Test File | Comments | Spec | Format | Assertions | Issues | Status |
|---|---|---|---|---|---|---|
| [macro-redeclare-case.TXT](../architect-language-tools/test/syntax-tests/macro/macro-redeclare-case.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/macro/macro-redeclare-case.test-spec.json) | exact+ID | 2 | CHR() replaced with string literal; line numbers fixed | Done |
| [macro-param-count.TXT](../architect-language-tools/test/syntax-tests/macro/macro-param-count.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/macro/macro-param-count.test-spec.json) | substring | 3 | Pre-existing: ACU-FNC-001 co-fires with ACU-MAC-003 on line 8 (params mismatch) — test currently failing | Blocked |
| [macro-hpdriver-patterns.TXT](../architect-language-tools/test/syntax-tests/macro/macro-hpdriver-patterns.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/macro/macro-hpdriver-patterns.test-spec.json) | exact | 0 | Fixed: removed CHR() and OUTPUT; parametered macro calls omitted (ACU-FNC-001 false-positive) | Done |

---

## multi-line

| Test File | Comments | Spec | Format | Assertions | Issues | Status |
|---|---|---|---|---|---|---|
| [multiline-if-condition.TXT](../architect-language-tools/test/syntax-tests/multi-line/multiline-if-condition.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/multi-line/multiline-if-condition.test-spec.json) | substring | 0 | Blocked: `...` line-continuation syntax fires ACU-SYN-002 — not yet supported by parser | Blocked |

---

## output-lines

| Test File | Comments | Spec | Format | Assertions | Issues | Status |
|---|---|---|---|---|---|---|
| [output-hash-off-interpolation.TXT](../architect-language-tools/test/syntax-tests/output-lines/output-hash-off-interpolation.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/output-lines/output-hash-off-interpolation.test-spec.json) | exact+ID | 0 | None | Done |
| [output-hash-on-interpolation.TXT](../architect-language-tools/test/syntax-tests/output-lines/output-hash-on-interpolation.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/output-lines/output-hash-on-interpolation.test-spec.json) | exact+ID | 0 | None | Done |
| [output-hash-off-interpolation-errors.TXT](../architect-language-tools/test/syntax-tests/output-lines/output-hash-off-interpolation-errors.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/output-lines/output-hash-off-interpolation-errors.test-spec.json) | exact+ID | 2 | None | Done |
| [output-hash-on-interpolation-errors.TXT](../architect-language-tools/test/syntax-tests/output-lines/output-hash-on-interpolation-errors.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/output-lines/output-hash-on-interpolation-errors.test-spec.json) | exact+ID | 2 | None | Done |
| [output-plain-text-interpolation.TXT](../architect-language-tools/test/syntax-tests/output-lines/output-plain-text-interpolation.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/output-lines/output-plain-text-interpolation.test-spec.json) | exact+ID | 0 | None | Done |

---

## param-modes-out

| Test File | Comments | Spec | Format | Assertions | Issues | Status |
|---|---|---|---|---|---|---|
| [param-mode-init-not-required.TXT](../architect-language-tools/test/syntax-tests/param-modes-out/param-mode-init-not-required.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/param-modes-out/param-mode-init-not-required.test-spec.json) | exact+ID | 2 | None | Done |

---

## report-context

| Test File | Comments | Spec | Format | Assertions | Issues | Status |
|---|---|---|---|---|---|---|
| [report-context-booleans.TXT](../architect-language-tools/test/syntax-tests/report-context/report-context-booleans.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/report-context/report-context-booleans.test-spec.json) | exact+ID | 0 | None | Done |

---

## require

| Test File | Comments | Spec | Format | Assertions | Issues | Status |
|---|---|---|---|---|---|---|
| [require-missing-files.TXT](../architect-language-tools/test/syntax-tests/require/require-missing-files.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/require/require-missing-files.test-spec.json) | exact+ID | 2 | None | Done |
| [require-existing-files.TXT](../architect-language-tools/test/syntax-tests/require/require-existing-files.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/require/require-existing-files.test-spec.json) | exact | 0 | Fixed: OUTPUT → >>, created 0001-require-helper.TXT fixture, fixed bad REQUIRE path | Done |

---

## robodoc

| Test File | Comments | Spec | Format | Assertions | Issues | Status |
|---|---|---|---|---|---|---|
| [robodoc-valid-report.TXT](../architect-language-tools/test/syntax-tests/robodoc/robodoc-valid-report.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/robodoc/robodoc-valid-report.test-spec.json) | exact+ID | 0 | None | Done |
| [robodoc-mismatch-tag-filename.TXT](../architect-language-tools/test/syntax-tests/robodoc/robodoc-mismatch-tag-filename.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/robodoc/robodoc-mismatch-tag-filename.test-spec.json) | exact+ID | 2 | None | Done |
| [robodoc-missing-end.TXT](../architect-language-tools/test/syntax-tests/robodoc/robodoc-missing-end.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/robodoc/robodoc-missing-end.test-spec.json) | exact+ID | 1 | None | Done |
| [robodoc-missing-uses-section.TXT](../architect-language-tools/test/syntax-tests/robodoc/robodoc-missing-uses-section.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/robodoc/robodoc-missing-uses-section.test-spec.json) | exact+ID | 1 | None | Done |
| [robodoc-missing-start.TXT](../architect-language-tools/test/syntax-tests/robodoc/robodoc-missing-start.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/robodoc/robodoc-missing-start.test-spec.json) | exact+ID | 1 | None | Done |

---

## settings-coverage

| Test File | Comments | Spec | Format | Assertions | Issues | Status |
|---|---|---|---|---|---|---|
| [unset-variable-warning.TXT](../architect-language-tools/test/syntax-tests/settings-coverage/unset-variable-warning.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/settings-coverage/unset-variable-warning.test-spec.json) | exact+ID | 1 | None | Done |
| [function-redeclaration.TXT](../architect-language-tools/test/syntax-tests/settings-coverage/function-redeclaration.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/settings-coverage/function-redeclaration.test-spec.json) | exact+ID | 1 | None | Done |
| [sys-seconds-is-function.TXT](../architect-language-tools/test/syntax-tests/settings-coverage/sys-seconds-is-function.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/settings-coverage/sys-seconds-is-function.test-spec.json) | exact+ID | 0 | None | Done |
| [unclosed-function-call.TXT](../architect-language-tools/test/syntax-tests/settings-coverage/unclosed-function-call.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/settings-coverage/unclosed-function-call.test-spec.json) | exact+ID | 1 | None | Done |
| [redundant-hash-on.TXT](../architect-language-tools/test/syntax-tests/settings-coverage/redundant-hash-on.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/settings-coverage/redundant-hash-on.test-spec.json) | exact+ID | 1 | None | Done |

---

## suppression

| Test File | Comments | Spec | Format | Assertions | Issues | Status |
|---|---|---|---|---|---|---|
| [suppression-single-rule.TXT](../architect-language-tools/test/syntax-tests/suppression/suppression-single-rule.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/suppression/suppression-single-rule.test-spec.json) | exact+ID | 0 | None | Done |
| [suppression-multiple-rules.TXT](../architect-language-tools/test/syntax-tests/suppression/suppression-multiple-rules.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/suppression/suppression-multiple-rules.test-spec.json) | exact+ID | 0 | None | Done |
| [suppression-single-line-scope.TXT](../architect-language-tools/test/syntax-tests/suppression/suppression-single-line-scope.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/suppression/suppression-single-line-scope.test-spec.json) | exact+ID | 1 | None | Done |

---

## todo

| Test File | Comments | Spec | Format | Assertions | Issues | Status |
|---|---|---|---|---|---|---|
| [todo-fixme-hack-tags.TXT](../architect-language-tools/test/syntax-tests/todo/todo-fixme-hack-tags.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/todo/todo-fixme-hack-tags.test-spec.json) | exact+ID | 5 | None | Done |

---

## unset-variable

| Test File | Comments | Spec | Format | Assertions | Issues | Status |
|---|---|---|---|---|---|---|
| [unused-variable-baseline.TXT](../architect-language-tools/test/syntax-tests/unset-variable/unused-variable-baseline.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/unset-variable/unused-variable-baseline.test-spec.json) | exact+ID | 0 | None | Done |

---

## validators

| Test File | Comments | Spec | Format | Assertions | Issues | Status |
|---|---|---|---|---|---|---|
| [keyword-capitalization-errors.TXT](../architect-language-tools/test/syntax-tests/validators/keyword-capitalization-errors.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/validators/keyword-capitalization-errors.test-spec.json) | exact | 6 | Rewritten in HASH-OFF mode with proper declarations; dropped INCLUDE keyword (was #-prefixed only) | Done |
| [keyword-capitalization-valid.TXT](../architect-language-tools/test/syntax-tests/validators/keyword-capitalization-valid.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/validators/keyword-capitalization-valid.test-spec.json) | exact | 0 | Rewritten in HASH-OFF mode with proper declarations | Done |
| [type-capitalization-errors.TXT](../architect-language-tools/test/syntax-tests/validators/type-capitalization-errors.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/validators/type-capitalization-errors.test-spec.json) | exact+ID | 4 | None | Done |
| [type-capitalization-valid.TXT](../architect-language-tools/test/syntax-tests/validators/type-capitalization-valid.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/validators/type-capitalization-valid.test-spec.json) | exact+ID | 0 | None | Done |
| [unclosed-string-literals.TXT](../architect-language-tools/test/syntax-tests/validators/unclosed-string-literals.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/validators/unclosed-string-literals.test-spec.json) | exact+ID | 1 | None | Done |
| [string-literals-closed.TXT](../architect-language-tools/test/syntax-tests/validators/string-literals-closed.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/validators/string-literals-closed.test-spec.json) | exact+ID | 0 | None | Done |
| [interpolation-unclosed.TXT](../architect-language-tools/test/syntax-tests/validators/interpolation-unclosed.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/validators/interpolation-unclosed.test-spec.json) | exact+ID | 1 | None | Done |
| [interpolation-closed.TXT](../architect-language-tools/test/syntax-tests/validators/interpolation-closed.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/validators/interpolation-closed.test-spec.json) | exact+ID | 0 | None | Done |
| [naming-db-field-prefix.TXT](../architect-language-tools/test/syntax-tests/validators/naming-db-field-prefix.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/validators/naming-db-field-prefix.test-spec.json) | exact+ID | 1 | None | Done |
| [naming-type-prefix.TXT](../architect-language-tools/test/syntax-tests/validators/naming-type-prefix.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/validators/naming-type-prefix.test-spec.json) | exact+ID | 1 | None | Done |
| [naming-scope-prefix.TXT](../architect-language-tools/test/syntax-tests/validators/naming-scope-prefix.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/validators/naming-scope-prefix.test-spec.json) | exact+ID | 1 | None | Done |
| [undefined-variable-assignment.TXT](../architect-language-tools/test/syntax-tests/validators/undefined-variable-assignment.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/validators/undefined-variable-assignment.test-spec.json) | exact+ID | 1 | None | Done |
| [pseudo-constant-reassignment.TXT](../architect-language-tools/test/syntax-tests/validators/pseudo-constant-reassignment.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/validators/pseudo-constant-reassignment.test-spec.json) | exact+ID | 1 | None | Done |

---

## variable-capitalisation-mismatch

| Test File | Comments | Spec | Format | Assertions | Issues | Status |
|---|---|---|---|---|---|---|
| [var-case-mismatch-fix-usage.TXT](../architect-language-tools/test/syntax-tests/variable-capitalisation-mismatch/var-case-mismatch-fix-usage.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/variable-capitalisation-mismatch/var-case-mismatch-fix-usage.test-spec.json) | exact+ID | 1 | None | Done |
| [var-case-mismatch-fix-decl.TXT](../architect-language-tools/test/syntax-tests/variable-capitalisation-mismatch/var-case-mismatch-fix-decl.TXT) | Good | [✓](../architect-language-tools/test/syntax-tests/variable-capitalisation-mismatch/var-case-mismatch-fix-decl.test-spec.json) | exact+ID | 1 | None | Done |

---

## Progress Summary

| Metric | Count |
|---|---|
| Total test files | 114 |
| Done | 103 |
| Pending (complex multi-file scoping prevents exact mode) | 2 |
| Blocked (pre-existing failure or unsupported feature) | 4 |
| Missing `diagnostic-match-mode` | 0 |
| substring / string matching | ~10 |
| Pre-existing test failures (in CI) | 2 |
