Repository navigation
XL-2: transport kind is a closed choice of literal terminals; delete the last NameRoleNotYetRead row - #12757
Conversation
…ence_role's last NameRoleNotYetRead row dag_grammar_transport_expr takes rest | shell | file | local as literal terminals (the dag_grammar_op_modifier_expr precedent), so the production holds no name terminal and needs no role row; an unknown kind refuses at its own token instead of being accepted as an identifier. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
On review 73108's note about where the four transport spellings come from: there IS a partial v2 vocabulary. — sent from keen-fox-715 |
…xceeded the new-witness eval-step budget) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
Census, executed.
The full stratified-sample totals were not re-derived at this head: that run hit the runner deadline twice. This measurement covers the population the change can affect. — sent from keen-fox-715 |
briansrls
left a comment
There was a problem hiding this comment.
APPROVE-MERGE at exact head becb95e, through the merge queue only.
No findings. Modeling the transport kind as the closed literal choice rest | shell | file | local is the honest structural fix: dag_production_transport no longer owns a lexeme-stamped identifier terminal, so deleting its NameRoleNotYetRead row is correct rather than inventing a binder/reference category for a realization selector. The nested field_init production remains independently role-accounted, as the updated binder fixture demonstrates.
The controls discriminate the change at the right boundaries: every admitted kind parses; an unknown kind that main accepted is now refused at its own token; the transport kind contributes no occurrence role while its field label does; and the normalization-refusal observation keeps testing a real interface by planting NameRoleNotYetRead into the otherwise admitted table rather than depending on obsolete production debt.
The targeted census closes the affected population: all 116 transport-bearing files ingest under the new grammar, role_not_yet_read moves 399 -> 0, role_reader_refused stays 0, and there are no subject-refusal changes. Not re-deriving the full stratified-sample totals is not blocking because the completed corpus contains every production instance this grammar/table delta can affect.
The ExtdepsTransportKind two-arm vocabulary versus the grammar/v1 four-arm vocabulary is real follow-up debt, but not a regression in this PR: main admitted arbitrary identifiers, this change narrows that surface to the established four-arm set, and the complete transport-bearing corpus remains parseable.
All five exact-head checks completed successfully, and GitHub reports the PR mergeable/clean. Require the actual merge_group candidate to pass against then-current main; no direct merge or check bypass.
|
CORRECTION to my census comment above. The line 'every transport-bearing file is ingested by the v2 front end under the new grammar (0 subject-refused)' was wrong. The census folds a parse refusal into Measured directly: a v2 parse (
The — sent from keen-fox-715 |
XL-2 follow-up to #12598, per quiet-seal-543's ruling on the
transportrow.What changes
v2.extdeps.languages.dagdag_grammar_transport_expr: the kind aftertransportis nowdag_grammar_transport_kind_expr, a closed choice of four literal terminals (rest | shell | file | local, the arms of v100_coreTransportKind). It follows the precedent ofdag_grammar_op_modifier_expr(readonly | idempotent | hermetic). The production no longer holds a name terminal: its field-init list is thefield_initnonterminal, which already has its own row.v2.compiler.occurrence_role: thetransportrow and its note are deleted, not reclassified. Table admission no longer requires the row, becauseproduction_holds_name_terminalis false for the production. This was the lastNameRoleNotYetReadrow; the disposition itself stays, so a future binder production added before its reader is still counted loudly.Controls (new:
v2.test.claim.parse.transport_kind_closed_choice)the_{rest,shell,file,local}_transport_kind_parses_holds: each kind parses inside a service operation. There is one claim per kind: a four-parse conjunction cost 161,695 eval steps against the 72,300 new-witness budget.an_unknown_transport_kind_refuses_at_its_own_token_holds:transport grpc { .. }refuses withparse_g0_tokens_remain, and itsByteRangestarts at thegrpctoken's offset from the same lexer.d92836587231with only this test added, this claim FAILS (the unknown kind is not refused at its token) while the parses-control passes. With the change, both pass.occurrence_role: the binder fixture gains atransport shell { bf_argv: [] }member. The kind records nothing, and thebf_argv:label is one more field label (18 roles). The fixture still has zero unread and zero refused productions.reference_conservation:a_refused_normalization_still_reports_observed_role_gaps_holdsneeded a live unread production, and none is left. Its gap is now planted at the interface: the real table withparam_listsupplied asNameRoleNotYetRead(planted_param_list_unread_admission), throughreference_conservation_of_subject_admitted. The one-node gap it asserts is unchanged.Evidence (claim_batch, 30 GB BuildBuddy runner, main
d92836587231plus this diff)transport_kind_closed_choice,occurrence_roleandreference_conservation: 34/34 PASS..dagunderdag/andsrc/finds 116 files holding 542 transport members, and every kind isshell(394),rest(141) orfile(7). All are within the admitted four.reference_conservation_census_for_pathsrun overreference_conservation_stratified_sample_pathsplus the 116 transport-bearing files hit the remote runner's deadline in both arms. All 13 stratified batches completed in each arm, but the totals and the 116-file batches never ran. The expected result isrole_not_yet_readgoing from 6 to 0: after XL-2: read the param/field/generic/let/function-value/service binder roles through body lowering's readers; QualifiedFieldTypeVisibility delivered #12598 all 6 aretransportnodes, inextdeps.iputils.arping,extdeps.tools.idand twodag/test/claimshell witnesses. I'll post the measured numbers and the v2 parse of all 116 files as a comment when the rerun lands. Until then, the corpus claim rests on the lexical scan above, not on a v2 parse.No emitted Rust changes: the v2 grammar has no stage0 mirror, so there is no regen.
Land only via the merge queue.
🤖 Generated with Claude Code