{"schema_version":1,"experiment_id":"eoa_inverse_innovation_exp09_archetype_breadth150_20260804","cell_id":"inversion_of_control__computer_science","arm":"BREADTH_PROBE_ONE_SHOT","candidate_id":"inversion_of_control__computer_science__P1","proposal_index":1,"version":0,"title":"Consumer-Pulled Analysis Broker for Compiler Pipelines","problem":"A compiler pipeline centrally schedules data-flow and program analyses before transformation passes that might use them. Because the scheduler must predict later needs and invalidations, it may compute analyses that no downstream pass consumes, recompute them prematurely after intermediate-representation changes, and couple pipeline configuration to analysis implementation details.","actors":["Compiler pipeline maintainer","Transformation-pass developer","Analysis-provider developer","Compiler user awaiting a build","Analysis broker or pass manager"],"observable_state":"Execution traces show analysis jobs starting because of a fixed pipeline position or broad invalidation rule rather than a recorded request from a consuming pass; some computed results have no subsequent read before invalidation, and pipeline edits are required when an analysis implementation or dependency changes.","consequence":"Unrequested computation and premature recomputation can consume compilation resources, while centralized sequencing makes transformations, analyses, and pipeline configuration change together.","affected_objective":"Reduce avoidable compiler work and pipeline coupling while preserving deterministic compilation, analysis validity, and generated-program semantics.","intervention":"Place a bounded analysis broker between transformation passes and analysis providers. Remove selected analyses from the fixed push schedule. A transformation pass requests a typed analysis only when its current intermediate-representation state requires it; the broker validates the request, returns a valid cached result or invokes the registered provider callback, records dependencies and provenance, and invalidates results after relevant mutations. The pipeline owner retains policy over eligible providers, lifecycle phases, resource limits, and fallback behavior.","structural_mapping":[{"archetype_element":"Usual controller pushes action","domain_realization":"The compiler pipeline scheduler runs analyses at predetermined positions based on predicted downstream needs."},{"archetype_element":"Context holder","domain_realization":"The currently executing transformation pass knows whether its actual code path and current intermediate representation require a particular analysis."},{"archetype_element":"Inverted control boundary","domain_realization":"A typed broker API lets the consuming pass activate analysis without directly constructing or scheduling its provider."},{"archetype_element":"Activation rule","domain_realization":"A valid request names an approved analysis type, intermediate-representation scope, and version; invocation occurs only when no still-valid result exists."},{"archetype_element":"Interface contract","domain_realization":"Providers accept broker-supplied read access and return versioned results with declared dependencies and invalidation conditions."},{"archetype_element":"Delegation rule","domain_realization":"Passes may request approved analyses but cannot select arbitrary executable providers, bypass resource limits, or alter global phase policy."},{"archetype_element":"Feedback signal","domain_realization":"The audit trace records requester, cache state, provider invocation, latency, dependency edges, invalidation, and subsequent result use."},{"archetype_element":"Override or fallback path","domain_realization":"For cycles, budget exhaustion, or provider failure, the broker rejects the request or invokes a pipeline-owner-approved conservative fallback."}],"mechanism_mapping":[{"mechanism_slug":"dependency_injection_framework","role":"The broker supplies an approved analysis result to a requesting pass through a typed interface, so the pass does not construct or bind directly to the provider.","counterfactual_removal":"Without broker-mediated injection, each pass must construct providers or call their implementations directly, recreating lifecycle and implementation coupling."},{"mechanism_slug":"callback_function","role":"Each analysis provider registers a bounded computation callback that the broker invokes on a valid cache miss.","counterfactual_removal":"Without broker-invoked callbacks, providers must remain centrally scheduled or consumers must directly execute provider internals, so activation is not cleanly inverted."},{"mechanism_slug":"kanban_pull_system","role":"The analysis request acts as a software pull signal: downstream transformation demand authorizes upstream analysis work.","counterfactual_removal":"Without the pull rule, analyses can run from forecasted pipeline demand even when no consuming pass requests their results."}],"causal_chain":["A fixed pipeline scheduler must guess which analyses later transformation paths will need.","A transformation pass reaches a concrete intermediate-representation state and issues a typed request only if its selected path needs an analysis.","The broker checks authorization, scope, dependency cycles, budgets, and cached-result validity.","On a valid cache miss, the broker invokes the registered provider callback and injects the versioned result into the requester.","Provenance and dependency records connect the activation to its consumer and govern later invalidation.","Analyses lacking a valid consumer request are not activated, while provider selection and lifecycle policy remain centralized.","Observed request-to-use and invalidation traces permit comparison with the fixed schedule without weakening semantic checks."],"baseline":"A statically ordered compiler pipeline in which analysis passes run at configured phase boundaries and are recomputed after declared invalidations, whether or not the transformation path ultimately reads their results.","nearest_rivals":["Lazy evaluation: also defers computation, but does not by itself define which consumer holds activation rights, how providers are selected, or how compiler lifecycle policy remains bounded.","Memoization or analysis caching: reuses prior results after a request, but a push-scheduled analysis may still be computed without downstream demand.","Decoupling via interface: hides provider implementation behind a contract, but does not necessarily reverse initiation from scheduler push to consumer pull.","Backpressure: limits work when compiler capacity is constrained, whereas this intervention changes who authorizes analysis activation.","Dynamic pass scheduling: changes pipeline order at runtime, but may leave a central scheduler responsible for predicting and initiating analyses."],"remaining_contrastive_claim":"The candidate is specifically a control-direction change: a consuming transformation pass supplies the demand signal, while the broker—not the pass or a fixed schedule—selects and invokes an approved provider through a narrow contract. Caching, interfaces, or dynamic ordering without this consumer activation right do not instantiate the same intervention.","authority_safety":{"decision_authority":"Compiler maintainers retain authority over the broker contract, eligible analysis providers, lifecycle phases, resource budgets, invalidation policy, semantic validation, and deployment.","authorized_first_step":"Instrument one deterministic, read-only analysis in an offline compiler benchmark so requests can be replayed through a prototype broker while the existing scheduled analysis remains the authoritative result.","excluded_actions":["Removing the authoritative scheduled analysis during the first evidence step","Allowing transformation passes to load arbitrary provider code","Permitting callbacks to mutate the intermediate representation","Disabling existing semantic, determinism, or regression checks","Deploying the broker in production compilation","Extending activation rights beyond the selected analysis"],"halt_rollback":"Halt the prototype if broker and baseline results differ, request cycles appear, provenance is incomplete, deterministic replay fails, or resource limits are exceeded; restore the selected analysis to its unchanged fixed schedule and discard broker outputs."},"negative_tests":{"strongest_counterevidence":"Traces show that the selected analysis is consumed after nearly every scheduled computation, its fixed placement already coincides with the earliest valid need, and pipeline changes do not require consumers to know provider details.","problem_falsifier":"The inferred problem is falsified for the selected analysis if scheduled results are consistently read before invalidation and no measurable coordination or configuration dependency arises from its placement.","intervention_falsifier":"The intervention is falsified for the pilot if consumer-triggered execution cannot reproduce baseline results and determinism under the same intermediate-representation versions, or if request handling, latency spikes, cycles, and invalidation bookkeeping outweigh the avoided unconsumed work under the predefined resource accounting.","risks":["Hidden dependencies can return stale or unsound analysis results.","On-demand computation can create unpredictable latency at transformation boundaries.","Mutually dependent provider callbacks can form activation cycles.","Indirect callbacks can make compiler control flow harder to inspect.","Incorrect invalidation rules can preserve results beyond their valid lifetime.","Rarely requested analyses may receive inadequate testing or fail late.","A broad request interface could let passes trigger excessive computation.","Fallback use could conceal provider failures unless explicitly recorded."]},"next_evidence_step":"For one read-only analysis and a fixed offline corpus, add trace-only request markers to existing consumers, replay those markers through a non-authoritative broker, and compare scheduled invocations, requested invocations, result equivalence, invalidation timing, callback depth, cycle detection, and request latency. End after the fixed corpus and report the raw trace comparison without changing the production pipeline.","prior_art_status":"UNSEARCHED","diversity_from_prior_proposals":"Not assessed against other proposals because runtime isolation forbids inspecting them; this candidate is independently scoped to activation of compiler analyses by consuming transformation passes.","revision_record":{"parent_version":null,"progress_targets_addressed":["Initial one-shot candidate","Concrete domain problem","Causal preservation of inversion of control","Bounded evidence step and falsifiers"],"conceptual_changes":["None; version 0 is the initial formulation."],"operational_changes":["None; no prior version exists."],"evidence_changes":["No prior-art or external evidence was consulted."],"claim_changes":["No novelty, prevalence, demand, or effect-size claim is made."]}}