Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
module gunbc.recurring_failure_mode.constructor_equality_consumes_the_branch_brace

import std.types { NonEmptyStr }
import gunbc.recurring_failure_mode { RecurringFailureMode }

data constructor_equality_consumes_the_branch_brace: RecurringFailureMode = RecurringFailureMode {
identity: "constructor_equality_consumes_the_branch_brace" as NonEmptyStr,
receipts: [
"HARM AND INVALID STATE: an if-condition ending in equality with a constructor name refuses valid nested-match and field-access branch bodies at a Dot token. Source inspection identifies an attempted record-literal parse of the branch brace before the conditional retry; this mechanism is distinct from any claim that a differently interpreted program is accepted. Parenthesizing the equality is a local workaround, not a parser repair. ",
"MEASUREMENT SUBJECT: installed arm64 /usr/local/bin/gunbc, SHA256 e713b7eece9b251a26347bcc1565e4d7c1178b7dfc9eb4a861371569600c42a6, observed 2026-09-05. Its source revision is not established; this receipt does not label it origin/main. Each isolated run resolves one source. With type Connective = Conj | NoConnective and type Item { connective: Connective, inferred: Int? }, fn probe(declaration: Item) -> Int { if declaration.connective == NoConnective { match declaration.inferred { Present { value: target } => target Absent => 0 } } else { 0 } } refuses expected expression, found Dot at the inferred field access, emitting zero files. Parenthesizing only the equality emits five files and zero diagnostics. ",
"PAIRED BODY VARIATIONS, SAME INSTALLED BINARY: replacing the then-body with literal 1 refuses expected LBrace, found keyword else; replacing it with declaration.inferred ?? 0 refuses expected expression, found Dot. Each corresponding parenthesized equality emits five files with zero diagnostics. None of these three unparenthesized specimens produces an Accepted program with different meaning; this is a bounded observation, not a claim that every related shape refuses. ",
"REF-BOUND PAIRED MEASUREMENT: archived release seed built from 03a3b91fb4c1ea7e408df2cb484f475d75080a7f, executable SHA256 8692902cd6540b0cd1bd5f73701c6a3910bb3c87a73110f8125b0c00cdbfa02b, invocation https://app.buildbuddy.io/invocation/5b341ce2-2377-471f-a1ac-47128df431e8. Isolated repository-local fixtures resolve one source. Unparenthesized nested-match and field-access bodies refuse at Dot; each paired parenthesized equality accepts with six emitted files and zero diagnostics. The literal-1 body accepts with or without parentheses on this seed, unlike the separately identified installed binary above. The measured class is therefore the body-token parse failure, not every constructor equality. No differently interpreted Accepted program is established. Earlier /tmp fixtures were rejected by entry admission and provide no parser evidence. ",
"AUTHORING LIMIT, NOT A MEASURED REGRESSION: both identified seeds refuse the nested-match and field-access shapes. Unwritable form: fn probe(declaration: Item) -> Int { if declaration.connective == NoConnective { declaration.inferred ?? 0 } else { 0 } }. Accepted replacement: fn probe(declaration: Item) -> Int { if (declaration.connective == NoConnective) { declaration.inferred ?? 0 } else { 0 } }. The searchable diagnostic is expected expression, found Dot. Parentheses allow the author to proceed while preserving the intended condition. ",
"RUNG FOUND AT AND CURRENT RUNG: Mitigatable at the measured source-to-Rust boundary: these specimens refuse rather than emit a differently interpreted accepted program, and author-side parentheses avoid the refusal. No parser repair or enrolled prevention is claimed. CEILING: correct parser handling of this measured source grain is decidable; parse_expr_bp_no_brace already carries a branch retry, but parse_prefix errors return before it. A repair must preserve legitimate record-valued conditions. This source trace identifies the missed retry, not a proof that a particular grammar change is correct. ",
"NEXT-RUNG TRIGGER: v1.compiler.parse parse_expr_bp_no_brace distinguishes the branch brace before an attempted record parse can abort at a body token. On 03a3b91fb4c1, parse_prefix errors return before the existing swallowed-branch retry. Repair and execute both the constructor-equality conditional and genuine record-literal condition controls; a blanket ban on record expressions in conditions would lose valid syntax. ",
"DISPOSITION: filed separately from the generic-inhabitance repair that encountered it. That producer uses parentheses explicitly while this parser deficit remains; the parentheses are not evidence of parser correctness.",
],
evidence: [],
}
3 changes: 3 additions & 0 deletions dag/gunbc/recurring_failure_mode/roster.dag
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,8 @@ import gunbc.recurring_failure_mode.comparison_keyed_on_part_of_the_identity_it_
import gunbc.recurring_failure_mode.edit_range_bounded_by_a_neighbour_rather_than_the_target { edit_range_bounded_by_a_neighbour_rather_than_the_target }
import gunbc.recurring_failure_mode.one_disposition_defined_jointly_by_independent_matches { one_disposition_defined_jointly_by_independent_matches }

import gunbc.recurring_failure_mode.constructor_equality_consumes_the_branch_brace { constructor_equality_consumes_the_branch_brace }

data recurring_failure_mode_roster: List<RecurringFailureMode> = [
a_type_name_asserts_an_algebra_the_arithmetic_does_not_carry,
censored_estimator_drops_its_own_tail,
Expand Down Expand Up @@ -289,4 +291,5 @@ data recurring_failure_mode_roster: List<RecurringFailureMode> = [
comparison_keyed_on_part_of_the_identity_it_compares,
edit_range_bounded_by_a_neighbour_rather_than_the_target,
one_disposition_defined_jointly_by_independent_matches,
constructor_equality_consumes_the_branch_brace,
]
Loading