Repository navigation
Delete the workflow function concept: compiler_pipeline_entry is the entry authority - #11528
Merged
Merged
Conversation
…entry authority "Workflow" was never a semantic kind. It was one emitter predicate -- `v1.compiler.emit_rust` `is_workflow_item`, true when a function carried `uses`, when the registry held a service or resource name for it, or when the registry held nothing at all -- and its only product was the clap subcommands `emit_main_rs` rendered. Three effect facts and one fail-open standing in for an entry role nobody authored, which is the meaning fork DESIGN section 3 forbids: one name over the effect axis and the entry axis at once. MEASURED BEFORE CUTTING, and the census is why this is a deletion rather than a marker. `emit_main_rs` routes on `compiler_pipeline_entry` BEFORE it consults workflow functions, so every built binary is single-entry and pulls none in: `v1.compile` is RetainedHostCliKernel and takes its clap surface from the generated dispatch, `v2.compiler.compile` is SourceRootEvalDriver, and `v2.cli.compile_cli` is NativeCliDriver. `gunbc build` offers only the seed's own bins. A closure with no entry already rendered the typed exit-2 `emit_entry_point_absent_main_rs`. `v1.compiler.infer` gates no resource operation on workflow -- admissibility is the `uses` clause binding the resource into body scope -- and `is_async`, set from `uses` > 0, had no reader anywhere. So the derived CLI reached no production binary and its deletion breaks none. DELETED: is_workflow_item, collect_workflow_funcs, WorkflowFunc, to_workflow_func, validate_workflow_param_defaults, the emit_main_rs workflow arm (cli struct, subcommand enum, main fn, its module/resource/service imports), the imported-data-reference constant folding that only that arm consumed (its visibility walk, DataDeclIndex, ConstantFold and the two diagnostic variants left with no producer), and the dead is_async field. `renders_clap_cli` collapses to the pipeline dispatch, the one thing that still renders `use clap`. KEPT: `compiler_pipeline_entry` as the sole entry authority -- an executable declares exactly one, a library none, and more than one or an unmodeled driver each refuse with their own typed main -- the entry-absent refusal, and `uses` with its one meaning as an effect requirement. No function is marked; the legacy workflow population is untouched. EXECUTED EVIDENCE. test.claim.entry_authority_witness_test, six arms, all green: a pure library, a library with a `uses` requirement and a library calling a service operation each emit the same entry-absent refusal with no Subcommand -- the regression controls, which go red if `uses`, a service name or a registry miss is ever read as entry identity again; one declared entry is the sole root beside an effect; two declarations and an unmodeled driver each refuse. `//gunbc/instruments:v2-native-cli` emits its closure and builds it with exit_status=0 warning_count=0. The three witnesses whose subject was folding an imported data reference into a CLI default are deleted with the path: that folding had no other consumer, so there is no capability left uncovered. `gunbc.emit_stage_blocking_population_census` keeps its `WorkflowParameterDefaultGate` arm because a recorded reading stopped on that gate at its own revision; deleting the arm would make that receipt unrepresentable rather than retire it, and the row now says the gate is gone. D12 is recorded in `gunbc.plans.demand_engine_program` and its committed markdown projection regenerated. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…surface CI caught what my local build did not: `cli_run/compile_clean.rs` is hand Rust and still named `DataReferenceVisibilityBudgetExceeded` and `ParameterDefaultFormNotAdmitted` -- in the diagnostic roster and in two exhaustive matches -- after the variants were deleted with the workflow parameter default gate that produced them. The matches are exhaustive over `CompilerDiagnostic`, so removing the arms is the whole repair. The unit test `emitted_non_gunbc_cli_has_no_gunbc_build_environment_dependency` rendered the deleted CLI struct to assert that a non-gunbc program's clap surface carries no `GUNBC_BUILD_IDENTITY`. Its subject is gone and the fact is now structural -- a library emits no CLI at all -- so the case is REHOMED rather than retired: `test.claim.entry_authority_witness_test` excludes that marker on all three library arms, beside the `Subcommand` exclusion. WHY THE LOCAL BUILD MISSED IT, recorded because it is the instrument's defect and not the diff's: a scratch worktree of main shared this session's `/cargo-target`, and the failing compile resolved its `v1_std_core.rs` from THAT tree, so `cargo build --bins` reported success against a mirror that still declared the variants. The check that reproduced it is `cargo clippy --all-targets`, the only local command that compiles the test targets, run after deleting the scratch worktree. Both now pass, as does `cargo build --lib`. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
`gunbc.type_reference_decl_file_occurrence_census` cited `v1.compiler.emit_rust` `emit_cli_param_type_node`, which went with the derived workflow CLI, and the declarations phase refused it as CITED-DECLARATION-ABSENT. The row is a SPECIMEN list -- 18 samples beside a measured 25 occurrences -- so removing the one that no longer resolves leaves the measurement intact and the remaining specimens still inhabit the class. Swept every decl_ref citation of the deleted population; this was the only one. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
T2a (#11458) and the emitted-manifest cut (#11531) landed in the same region of `v1.compiler.emit_rust` this deletion empties, so the one authority conflict is main's new `emit_cargo_feature` / `emit_cargo_features_section` sitting where the workflow declarations were. Resolution keeps both sides' intent: main's cargo feature rendering stays, the workflow vocabulary stays deleted. The three generated mirrors conflicted as a consequence and were NOT hand-merged: main's versions were taken, then regenerated from the resolved `.dag` authority with `claim_executor --required-regen`, which named exactly those three as drift. A hand-picked hunk in a generated file is a second authority for bytes the emitter owns. Re-verified on the merged tree: `cargo build --lib --bins` and `cargo clippy --all-targets -- -D warnings` clean, and test.claim.entry_authority_witness_test 6/6 including both regression controls. The D12 plan text is untouched by the merge. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
briansrls
added this pull request to the merge queue
Sep 18, 2026
This was referenced Sep 18, 2026
Closed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Implements D12 (operator, 2026-09-17), which supersedes the earlier marker/FunctionRole direction and its migration of the legacy workflow population.
What was wrong
"Workflow" was never a semantic kind. It was one emitter predicate —
v1.compiler.emit_rustis_workflow_item, true when a function carrieduses, when the registry held a service or resource name for it, or when the registry held nothing at all — and its only product was the clap subcommandsemit_main_rsrendered. Three effect facts and one fail-open standing in for an entry role nobody authored: the meaning fork DESIGN §3 forbids, one name over the effect axis and the entry axis at once.Why deletion, measured before cutting
emit_main_rsroutes oncompiler_pipeline_entrybefore it consults workflow functions, so every built binary is single-entry and pulls none in:v1.compileisRetainedHostCliKernel(clap from the generated dispatch),v2.compiler.compileisSourceRootEvalDriver,v2.cli.compile_cliisNativeCliDriver.gunbc buildoffers only the seed's own bins (gunbc.devboot.programoffered_programs). A closure with no entry already rendered the typed exit-2emit_entry_point_absent_main_rs.v1.compiler.infergates no resource operation on workflow — admissibility is theusesclause binding the resource into body scope — andis_async, set fromuses> 0, had no reader anywhere in the tree.So the derived CLI reached no production binary, and no rename to an entry-point concept is required by any consumer.
The cut
Deleted:
is_workflow_item,collect_workflow_funcs,WorkflowFunc,to_workflow_func,validate_workflow_param_defaults, theemit_main_rsworkflow arm (cli struct, subcommand enum, main fn, its module/resource/service imports), the imported-data-reference constant folding that only that arm consumed (its visibility walk,DataDeclIndex,ConstantFold, and the two diagnostic variants left with no producer), and the deadis_asyncfield.renders_clap_clicollapses to the pipeline dispatch, the one thing that still rendersuse clap.Kept:
compiler_pipeline_entryas the sole entry authority — an executable declares exactly one, a library none, more than one or an unmodeled driver each refuse with their own typed main — the entry-absent refusal, anduseswith its one meaning as an effect requirement. No function is marked; the legacy workflow population is untouched, which is what D11 wants.Executed evidence
test.claim.entry_authority_witness_test, six arms, all green:SubcommandusesReintroducing
uses> 0, a service name or a registry miss as entry identity turns the two regression controls red, because the emitted main would carry aSubcommandinstead of the refusal. The pure library alone could not catch that: it has no effect to misread.Both rooted closures still emit and build, run locally with this seed:
//gunbc/instruments:v2-native-cli—exit_status=0 warning_count=0//gunbc/instruments:self-host— emitted its closure and built itCoverage that moved rather than disappeared
GUNBC_BUILD_IDENTITY. That struct is gone and the fact is now structural, so the case is rehomed as an exclusion on all three library arms of the witness.gunbc.emit_stage_blocking_population_censuskeeps itsWorkflowParameterDefaultGatearm: a recorded reading stopped on that gate at its own revision, and deleting the arm would make that receipt unrepresentable rather than retire it. The row now says the gate is gone.Plan authority
D12 is recorded in
gunbc.plans.demand_engine_program(status line, section 7 roster, the exit block, a clause on D11, and the new D12 row) and its committed markdown projection regenerated. @fierce-seal-607 owns the plan text and should review that wording before merge.Seed growth
No hand-Rust declaration is added. The hand-Rust changes are deletions: two stale diagnostic variants in
cli_run/compile_clean.rs, the retired unit test, and oneis_asyncfield construction each indeclaration_index.rsandcli_run.rs. So noSeedGrowthJustificationrow is owed.🤖 Generated with Claude Code