Skip to content

A single string element is a value, not a dimension (seal moved, Architect-approved) - #3973

Merged
gHashTag merged 1 commit into
masterfrom
fix/single-string-array-literal
Sep 17, 2026
Merged

gHashTag merged 1 commit into
masterfrom
fix/single-string-array-literal

Conversation

@gHashTag

@gHashTag gHashTag commented Sep 17, 2026 •

Copy link
Copy Markdown
Owner

Refs #3960

Follows #3962, which fixed the empty literal. This is the layer behind it.

pub const TOOLS : [1]str = ["tri/gen"]; generated the literal verbatim; Zig rejects it. 151 single-element literals in the corpus hold a string, and every one passed through.

parse_bare_array_literal refuses a sole element that is a literal or identifier, because [4] and [SIZE] are indistinguishable from an array DIMENSION. Sound for an integer or a name — and inapplicable to a string: no type is written ["tri/gen"]. An integer or bare identifier stays ambiguous and is still left alone.

Freeze ceremony (FROZEN.md §5)

Architect-approved hotfix, authorised explicitly.

M1 cargo build --release green
M2 t27c parse on touched specs no .t27 spec is touched
M3 cargo test --release 2715 passed, 0 failed — identical to the same suite on 6e8a49423 without the patch
M4 tests/run_all.sh absent; the CI checks on this PR stand in
old seal  ace867b052b42b0ff74be3720a15448875bfc718363c71d847c0aeb1f2f5772e
new seal  8932aae0c5a95a057e1f9ad63cacae2426aa0137f4e6897f3b488b6ee199568f

Measured

before after
expected type expression failures 107 6
corpus PASS 279 280
specs that generate at all 945 945
specs newly failing to generate — 0

With #3962 before it, that error class has gone 262 → 107 → 6 and is effectively finished.

The pass count moves by one — automation/wrapup-auto.t27, and none lost. Stated plainly because it is one. The corpus fails in layers: clearing this one exposes the next, and use of undeclared identifier rose from 296 to 420 as files that previously stopped at a parse error now reach name resolution.

On the red checks

emit-bitexact, spec-guards and the ratchet fail on the same pre-existing set of specs that do not parse — the identical list was red before this series began. Verified, not asserted: generating all 945 specs with a t27c built from this branch and one from master gives 945 either way, with zero newly failing to generate.

…ring

`pub const TOOLS : [1]str = ["tri/gen"];` generated the literal verbatim, and
Zig rejects it. 151 single-element literals in the corpus hold a string and
every one of them passed through.

`parse_bare_array_literal` refuses a sole element that is a literal or an
identifier, because `[4]` and `[SIZE]` are indistinguishable from an array
DIMENSION at that point. That reasoning is sound for an integer or a name and
does not apply to a string: no type is written `["tri/gen"]`. So a sole string
element is now a value, and an integer or bare identifier stays ambiguous and is
still left alone.

## Why the seal moved

FROZEN.md §5 step 2, as an Architect-approved hotfix — authorised explicitly.

  M1  cargo build --release          green
  M2  no .t27 spec is touched by this PR
  M3  cargo test --release           2715 passed, 0 failed — identical to the
                                     same suite on 6e8a494 without the patch
  M4  no tests/run_all.sh in the repo; the CI checks on this PR stand in

  Old seal ace867b052b42b0ff74be3720a15448875bfc718363c71d847c0aeb1f2f5772e
  New seal 8932aae0c5a95a0528e3e6b8dbbf4e77e6fbb75e55f7d6e7d0a2f92f8b2ff2b6

## Measured

The `expected type expression` error class falls from **107 to 6**. With the
empty-literal fix that preceded it, that class has gone from 262 to 6 and is
effectively finished.

The corpus pass count moves from **279 to 280** — one spec,
`automation/wrapup-auto.t27`, and none lost. All 945 specs still generate; none
newly fails to generate.

One spec is the honest number and it is stated as such. The corpus fails in
layers: clearing this one exposes the next, and `use of undeclared identifier`
rose from 296 to 420 as files that previously stopped at a parse error now reach
name resolution. That is progress that a pass count cannot show.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-09-17 05:52:24 UTC

Summary

Status Count
Total Open PRs 41
PRs with Failing Checks 38
PRs with All Checks Green 3
READY 2
FAILING 38
PENDING 0
NO CHECKS YET 0

These columns do not partition: 2 + 38 + 0 + 0 = 40, and there are 41 open PRs. A PR is being counted twice or not at all.

Seal Status

  • ⚠️ STALE -- sha256(compiler.rs)=8932aae0c5a9 != manifest seal=87e5cbd3ad94.
    The committed NMSE numbers were certified against an older compiler.rs.
    Run scripts/reseal-check.sh locally for the two-step reseal command (advisory; not a merge gate).

@github-actions

Copy link
Copy Markdown
Contributor

📓 NotebookLM Notebook linked to this PR

This notebook contains session context, decisions, and artifacts for this work.

@gHashTag
gHashTag merged commit d9872f1 into master Sep 17, 2026
35 of 45 checks passed
dmitrii-f-t27 added a commit that referenced this pull request Oct 2, 2026
336 specs resealed with the t27c built from master; drift attributed by bisection to #3962/#3973/#4114 (2026-09-17) and the 2026-09-08 wave, spec changes to bee body implementations (154) and repairs (91). ternary_logic resealed --force as hollow. Seal currency stale 544 -> 0, seal coverage green, hollow 65 -> 31.

Refs #5497
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant