Skip to content

connector-jcode scrubs launch failures to 'startup failed (unknown)', hiding refusals the connector itself can name #828

Description

@davidfarah2003

Observed (2026-08-24, production box)

A jcode seat whose first readiness turn was refused by the provider gateway (400 model_not_found on a provider-prefixed model id) surfaced to the operator only as:

✗ <name> exited on launch - last output: [cotal-jcode] fatal: Jcode host startup failed (unknown); inspect the private Jcode logs.

Diagnosing required digging the seat's private logs/jcode-*.log, where the actual cause was one precise line: the gateway's 400 response naming the rejected model id. The scrubbing is right as a default posture for a private-home harness, but here it hid information the connector itself originated or can classify.

Ask

The in-flight variant→reasoning-effort work adds a narrow render path for self-generated refusals (attempted tier named in the launch error). The model-id refusal class deserves the same treatment: when the readiness turn dies on a provider 4xx, surface the provider's error code and the offending parameter value (model id / effort tier) in the launch error, keeping everything else scrubbed.

Related: 0.28.0 already moved one instance of this class to the launch boundary ("refuses a provider-prefixed model id ... refused where the accepted form can be named"); this issue asks for the same principle at the readiness-turn boundary for whatever the launch-time validation cannot catch.

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