Skip to content

[HELD] EFFECTS-1 E1a placeholder: workflow-concept cut pending operator ruling - #11520

Closed
gunbai-bot[bot] wants to merge 1 commit into
mainfrom
e1a-workflow-entry-marker
Closed

gunbai-bot[bot] wants to merge 1 commit into
mainfrom
e1a-workflow-entry-marker

Conversation

@gunbai-bot

@gunbai-bot gunbai-bot Bot commented Sep 17, 2026 •

Copy link
Copy Markdown
Contributor

Draft, auto-opened. Not for review.

The head is 80b37b2, the E0 seam fix. It is identical to #11507 and carries no E1a changes yet. E1a is held pending the operator's ruling on whether the workflow concept is DELETED (likely) or marked (D12). This PR gets its real content, or is closed, once that ruling lands.

🤖 Generated with Claude Code

…rries a type, and three carrier conversions were missing

`gunbc test //gunbc/instruments:v2-native-cli` reports exit_status=0 warning_count=0 at 495s under
RUSTFLAGS="-D warnings". The closure went from NINETEEN rustc errors to zero across three changes;
this is the last two of them.

C -- AN UNREALIZED HOST SEAM NOW CARRIES ITS OWN TYPE. The refusal itself was already right: a
primitive whose body is a bare self-call has no behaviour on this target, and emitting that shape
verbatim yields a function that compiles and returns to no caller (DESIGN section 5). What `panic!`
alone cannot do is stand where its RESULT IS CONSUMED -- `!` coerces in value position but is not a
method receiver, so `panic!("...").len()` answered E0599 and everything after it `unreachable`. The
emitter now renders `v1_rt::unrealized_host_seam::<T>(msg)` with T taken from the call's OWN INFERRED
TYPE, which is how `empty_map` and `empty_set` in the same function already read `inferred`. Five
errors in two modules, gone, with the divergence intact: the helper has no return path.

WHERE THAT ARM MAY BE ASKED IS THE WHOLE LESSON, AND IT COST TWO FAILED ATTEMPTS. The predicate
answers "runtime primitive, no bridge, no projected declaration", and that is the right question ONLY
at the RESIDUE POSITION, after every earlier arm has declined -- because a family of primitives is
rendered by DEDICATED ARMS carrying no bridge row: `with`, `concat` past two arguments, the
collection folds, the pipelines.

  Attempt 1, body grain: refuse the whole FUNCTION when its body reaches a seam. Type-checks
  trivially. It called every bridgeless builtin unrealized, refused `v1.compiler.tokenize
  source_code_point` and then `v1.compiler.infer typecheck_module`, and the rebuilt seed panicked on
  its own first tokenize. Withdrawn.

  Attempt 2, one level too early: the typed refusal placed in emit_typed_call_expr, ahead of the
  delegation. It intercepted `with` in v1.compiler.infer, so `let typed_module = with(typed_base, ..)`
  took the seam's type instead of the record update's, and the SECOND GENERATION failed to compile
  (`expected Rc<Node>, found Rc<HashMap<_, _>>`). STAGE ONE BUILT CLEAN BOTH TIMES; only the
  fixed-point check caught it.

The landed arm is the one that already sat after `is_rt` and after the `call_target` match, now
taking `inferred` so it can type what it refuses. The constraint is recorded on the predicate, because
it is a fact about where the question may be asked rather than about what it computes.

B -- THREE CARRIER CONVERSIONS THAT WERE SIMPLY MISSING, AND NOT THE FORK THEY LOOKED LIKE.
`v2.std.compilers.lexing` declares `LiteralPattern { text: v2.std.text.String }` -- the QUALIFIED
spelling, so the field is the free-monoid char list on purpose -- and its own constructor converts
with `chars`. Two other constructors handed over an ordinary string unconverted, and
`semantic_decl_string_to_bundle_node` folded one through `from_code_point` without taking the
char-list view. Adding `chars(s: ..)` at the three sites is the fix.

THAT ATTRIBUTION WAS WRONG BEFORE IT WAS MEASURED, and the correction matters more than the fix. The
error signature (`expected Rc<im::Vector<i64>>, found String`) matches the String meaning fork, so
these were reported as instances of it and briefed to the self-host lane as blocked behind
docs/plans/carrier-realization-arbiter-repair-design.md -- 52 sites, arm A's 25 generic-carrier
errors, a location-valued identity key, two refuted repairs. None of that was load-bearing here.
These are that document's ARM B, the arm it states is closable constructor-side, and they close.
Arm A is real, unsolved, and lives in `01_tokenize`'s closure rather than this one.

EVIDENCE, all on the converged compiler rather than the one that produced the first reading.
`//gunbc/instruments:v2-native-cli` exit_status=0 warning_count=0 wall_s=495.
`//gunbc/instruments:self-host` exit_status=0 warning_count=0 wall_s=586 -- the corpus-wide control,
because this changes how EVERY unrealized-seam call emits. The regen round converges with one mirror
changed.

EVERY FIGURE ABOVE IS MEASURED ON THIS TREE, after #11474 squash-merged and this commit was rebased
onto it. Two earlier zeroes are SUPERSEDED rather than cited beside these: the first was measured
against a binary still carrying attempt 2's `with` defect, and the second against the pre-rebase tree.
The convergence run that discriminated attempt 2 reported convergence_stages=2 [stage-1, stage-2] --
stage two is where that attempt failed, so its clean build is the evidence that the residue placement
is right, and it is recorded here as history of the check rather than as a property of this tree.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@gunbai-bot gunbai-bot Bot changed the title EFFECTS-1: wire v2 Filesystem effects into emitted Rust with an executing consumer (E0 -> E1 -> E2) [HELD] EFFECTS-1 E1a placeholder: workflow-concept cut pending operator ruling Sep 17, 2026
@gunbai-bot

gunbai-bot Bot commented Sep 17, 2026

Copy link
Copy Markdown
Contributor Author

Closed: the operator ruled to DELETE the workflow concept instead of adding a marker. The delete cut lands as a fresh PR off main.

@gunbai-bot gunbai-bot Bot closed this Sep 17, 2026
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.

0 participants