Skip to content

solution: wire first host caller and settle the method-policy open questions #295

Description

@antoinetoussaint-byte

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

  • Wire the first host caller. The CLI solution command group (the follow-up referenced in New agent kind: codefly:solution — registry entry, proto enum, manifest schema, proto service #287) should drive the lifecycle through solution.Client / WithCeiling. This is the linchpin that exercises everything below.
  • Settle the two-API split.solution.Client (ceiling is a required, type-level argument) and the raw solutionv0.NewSolutionClient + exported WithCeiling both exist; the latter bypasses the former's guarantee. Decide the single canonical path and unexport/remove the other.
  • Validate the ceiling vocabulary. Confirm CeilingInspect/Scaffold/Render/Publish map cleanly to real host operations (e.g. a deploy that packages and renders currently must use CeilingPublish), or recut the tiers.
  • Confirm the Render network assumption. Render is annotated REGISTRY_READ because RenderRequest carries only artifact_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 be OFFLINE and CeilingScaffold should re-admit it. This assumption is load-bearing and currently unverified against an implementation.
  • Give the ceiling a real provenance. The ceiling is still whatever the caller passes. It becomes genuine enforcement (rather than a caller-chosen value) only when derived from an authorized operation/principal/environment at a trusted chokepoint — a design that needs the consumer to shape it.

Context

🤖 Generated with Claude Code

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions