Repository navigation
Bind a realization handler for the 'file' transport so emit stops refusing: #8858 correctly deleted the three fabricating per-target renderers, leaving Filesystem Write/Read/Delete/List/WriteOwnerOnly with no emission path. Do NOT add a per-target renderer - #8970
briansrls wants to merge 1 commit into
Conversation
…declared" with "path declared empty" #8929 landed the rust realization handler and this rebases onto it rather than re-landing any of it. Its seven files stand untouched; what survives from this branch is the one thing #8929 did not carry, plus one stale mirror it could not have known about. WHAT THIS IS, PRICED HONESTLY. It is a §4b RUNG CLIMB, not a live fail-open, and an earlier framing of it as a hole was wrong and is corrected here rather than left standing. #8929's emitted realization DOES guard an empty path -- the handler emits `file_empty_path_guard` beside the path binding, mirroring what v1_interpreter dispatch_file already refuses at run time. So nothing writes to "" and nothing reports a fabricated realization. What is actually wrong is upstream of that guard: `parse_file_fields` substituted an empty string literal when `path:` was omitted, so transport file { } and transport file { path: "" } became the SAME node. Two states, one representation -- "no path was declared" and "the path was declared as the empty string" reach the emitter indistinguishable, and no consumer downstream can tell them apart because the distinction was destroyed at parse. The first is a malformed declaration; the second is a real declaration of an empty path. They have different owners and different repairs (DESIGN.md, the state-space conflation class). Refusing at parse makes the first state UNREPRESENTABLE rather than mitigated per invocation inside every emitted program -- mitigatable to structurally guaranteed on the §4b ladder, and it moves the answer from run time to compile time as a counted, located diagnostic before any file is emitted. The second state stays authorable and keeps exactly the answer #8929 gave it; this change does not touch the guard and makes no claim about it. EVIDENCE, TWO ARMS. branch: w_pathless_file_transport_refuses_at_parse_not_emission PASS (9/9 rows in the file PASS) main: the SAME row, run by a claim_batch built from 1caf8d5 in a separate worktree -- FAIL. The row asserts a blocking diagnostic AND ZERO of the emission-refusal class. That pairing is the point: one count cannot distinguish "parse refused it" from "emission refused it", and asserting only the first would have passed on a branch where the parser still fabricated and the emitter caught it downstream. CORPUS IMPACT: none. Every `transport file` in the tree declares `path:` (filesystem_io, gcp), and the full regen parsed and emitted all 132 modules. ONE MIRROR REPAIR THAT IS NOT MINE. v1_compiler_emit_rust.rs on main is stale: #8691 dropped the no-op iter_owned receiver clone and #8929 added code after it, so the committed mirror carries three `parts.clone().iter()` / `fields.clone() .iter()` sites the emitter no longer produces. required-regen reports it as drift against main independently of anything here. It is installed from the candidate rather than left for the next author to trip over; it is a two-PR merge race, not a change of behaviour. DECLINED, ON PURPOSE. `parse_rest_fields` has the identical Absent-to-empty default for `base_url`, and it is NOT fixed here. A service supplying its endpoint through `config { endpoint: ... }` legitimately carries no url on the transport row, so rest needs a decision about where that fact lives, not the same guard applied by analogy. Found by fierce-hawk-555. The parser finding is fierce-hawk-555's, relayed through deep-ant-102.
|
HOLD — do not merge during the #9102 → #8282 window. Computed against #8282's changed-file set: this PR intersects it on 4 file(s), including:
Under the operator's #9059 ruling — "not a category judgment about emission work; it is a direct subject-overlap constraint" — an intersecting PR must not land between the prerequisite (#9102) and the cut cohort (#8282): it alters the cut's conflict set and invalidates its prepared subject. Nothing is wrong with this change and its approvals stand. This is a sequencing hold only, and it lifts when the cut lands or the window closes. Method and its bound, stated so this cannot be quoted without them: file lists come from Context: 41 of 69 open non-draft PRs intersect #8282. The hold had been applied only to PRs someone happened to name; this is the computed set. Two of us have already been caught not applying it to our own PRs. — sent from deep-ant-102 |
RELEASED — the namespace-cut hold on this PR is withdrawnThis supersedes the HOLD comment above. Normal merge policy resumes for this PR. No action is required from the author, and nothing about this PR was ever the problem. Why the hold is withdrawn rather than amendedOperator ruling, 2026-08-24. Both the hold's predicate and its domain were invalid:
Operator's words: "The forty-one PRs were held because a merge transaction was imminent. That transaction no longer exists. The possibility of a future transaction is not a present hold." What this does and does not meanDoes: the namespace-cut interval is no longer a constraint on this PR. Does not: mean this PR must merge. Ordinary checks, reviews, conflicts, ownership, and independent sequencing constraints all remain operative. #8282 itself remains excluded and stays draft. If this PR touches
|
|
|
Auto-opened by session-dashboard for session
sleek-fox-685.Pushing to
session/sleek-fox-685advances this PR.Worker attestation
Before flipping this PR to ready for review, confirm each item:
npm test,cargo test) and the result.Closes #Ndirective.Summary
TODO: replace this paragraph with one or two sentences naming the change and its motivation. Reviewers read this first.
Test plan