Skip to content

Inference connections: HTTP credential storage #519

Description

@JArmandoAnaya

An inference connection of type http points at an endpoint that will normally want to
authenticate its caller, and VisionSet has nowhere to put the secret that would do it. The
question was parked at the bottom of the Inference section issue (cf. #421) beside a
navigation-placement question that has since been decided and shipped; it is extracted here so
that it survives independently of a thread whose other half is finished.

Nothing in the build touches this yet, which is worth stating precisely because it changes the
shape of the decision. ConnectionType carries local and http, but the
InferenceConnection aggregate has no credential field, no wire model carries one, and
provider_for refuses every http connection outright because this build ships no adapter that
can speak to one. So this is a decision to make before the HTTP half is designed, not a repair
to something already holding a secret badly.

The question

An HTTP connection's credential would land in plain SQLite inside the workspace. Local-first
makes that defensible, but it ships only as an explicit decision, never as a silent default.

The options, as #421 prepared them

  • Plain storage, documented as such. The credential sits in a column beside the endpoint
    URL, and the product says so where a person types it.
  • OS keyring integration. The credential goes to the platform's secret store, and the
    workspace keeps only a reference to it.
  • Environment-variable indirection. The workspace stores the name of a variable and never
    the secret itself, and the process reads it at call time.

No option is recommended here and none is ruled out. This issue carries deferred-needs-input
because the answer is Armando's.

What waits on it

The HTTP endpoint contract — the same contract a hosted adapter would implement — is unshipped,
and the per-row Test action that #421's journey gives an HTTP connection was deferred to the
slice that ships that contract. Whichever storage answer is chosen shapes the wire model that
slice writes, so it is cheaper to settle before that slice starts than during it.

Metadata

Metadata

Assignees

No one assigned

    Labels

    deferred-needs-inputBlocked on a decision that belongs to the founder

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions