Skip to content

Handshake capability-resolution rule is unspecified for profiles, methods, and signature algorithms #15

@rocklambros

Description

@rocklambros

Surfaced during the v0.1.0 review (PR #2). Spec clarity work.

§4 lists ClientHello and ServerHello fields but never states a resolution rule for the negotiation. Specifically:

  • Profiles: ServerHello.profiles_accepted description says "The Guardian selects from the client's profiles_supported based on its own capabilities and policy requirements." Is this the intersection, a Guardian-chosen subset, or Guardian-augmented (Guardian adds profiles the client didn't claim)? §4 says a Guardian MAY refuse a session if the client doesn't declare a policy-required profile, but how, and with what error code?
  • Methods: ServerHello says methods_evaluated is a "subset" of the client's methods_implemented. Can the Guardian list a method NOT in methods_implemented?
  • Signatures: ServerHello declares supported algorithms, but ClientHello has no signature-algorithms field. The Observed Agent has no negotiated set to pick from when it goes to sign a request.

The failure mode: two conformant implementations cannot agree on the active capability set after handshake. Vendor A treats profiles as intersection. Vendor B returns Guardian-required profiles the client must support or fail-closed. Vendor C treats profiles_accepted as a strict subset of client-declared. Different outcomes for the same handshake, different sessions either run or refuse, no SDK can write portable session setup.

Proposed direction:

  • §4 normative table: for each field pair, name the resolution operation (intersection, Guardian-selects-from-client, Guardian-required-or-refuse)
  • ClientHello should carry a signature_algorithms_supported field so the Observed Agent has a negotiated set
  • Refusal cases should be wired to the error code registry (separate issue)

Why deferred from v0.1.0: real ambiguity but smaller blast radius than the precedence issues in the main PR review. Could land in the same disposition-semantics follow-up PR.

References: specification.md §4, handshake.json

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions