Successor tracker to #295, which is closed by #296. #296 settled the one method-policy question that did not depend on a real caller existing — the two-API split (task #2): solution.Client is now the single canonical dispatch path and WithCeiling is unexported.
The remaining four tasks from #295 stay open because — per #295's own premise — they "only become answerable once a real caller exists," and that caller (the CLI solution command group) lives in the separate codefly binary repo, not in core. They are carried here so closing #295 does not drop them:
Context
Successor tracker to #295, which is closed by #296. #296 settled the one method-policy question that did not depend on a real caller existing — the two-API split (task #2):
solution.Clientis now the single canonical dispatch path andWithCeilingis unexported.The remaining four tasks from #295 stay open because — per #295's own premise — they "only become answerable once a real caller exists," and that caller (the CLI solution command group) lives in the separate
codeflybinary repo, not incore. They are carried here so closing #295 does not drop them:solution.Client. This is the linchpin that exercises everything below. (Cross-repo:codeflyCLI binary.)CeilingInspect/Scaffold/Render/Publishmap cleanly to real host operations (e.g. a deploy that packages and renders currently must useCeilingPublish), or recut the tiers. The tiers are internally coherent today (TestOperationCeilingsAdmitExactlyTheirRPCs); the judgment needs the real caller's operations.Renderis annotatedREGISTRY_READbecauseRenderRequestcarries onlyartifact_referenceand the executor pulls the artifact itself. If the host instead resolves the artifact host-side and hands the executor local content,Rendershould beOFFLINEandCeilingScaffoldshould re-admit it. Load-bearing and unverified against an implementation (cross-repo host executor).Context
solution/policy.go, installed inagents/manager/loader.go.