Follow-up to #289 (merged in #294) and paired with #290.
#294 landed the host-enforceable solution_method_policy and the client-side dispatch gate (solution.EnforcingClientInterceptor, ceilings, WithCeiling, and the typed solution.Client). The enforcement is correct and fail-closed, but it is dormant: nothing in production constructs a Solution client or stamps a ceiling yet. Every open question below only becomes answerable once a real caller exists, so they are tracked together rather than split into independently-actionable issues.
Tasks
Context
🤖 Generated with Claude Code
Follow-up to #289 (merged in #294) and paired with #290.
#294 landed the host-enforceable
solution_method_policyand the client-side dispatch gate (solution.EnforcingClientInterceptor, ceilings,WithCeiling, and the typedsolution.Client). The enforcement is correct and fail-closed, but it is dormant: nothing in production constructs a Solution client or stamps a ceiling yet. Every open question below only becomes answerable once a real caller exists, so they are tracked together rather than split into independently-actionable issues.Tasks
solution.Client/WithCeiling. This is the linchpin that exercises everything below.solution.Client(ceiling is a required, type-level argument) and the rawsolutionv0.NewSolutionClient+ exportedWithCeilingboth exist; the latter bypasses the former's guarantee. Decide the single canonical path and unexport/remove the other.CeilingInspect/Scaffold/Render/Publishmap cleanly to real host operations (e.g. a deploy that packages and renders currently must useCeilingPublish), or recut the tiers.REGISTRY_READbecauseRenderRequestcarries onlyartifact_reference(no bytes) and a solution executor's network is unmediated, so the executor pulls the artifact itself. If the host instead resolves the artifact host-side and hands the executor local content, Render should beOFFLINEandCeilingScaffoldshould re-admit it. This assumption is load-bearing and currently unverified against an implementation.Context
solution/policy.go, installed inagents/manager/loader.go.🤖 Generated with Claude Code