# Known failures of the official MCP conformance suite against `serve --http`.
#
# Baseline semantics (from the framework) are what make this useful rather than
# a mute button:
#
#   fails + listed here  -> exit 0, known
#   fails + NOT listed   -> exit 1, regression
#   PASSES + listed here -> exit 1, stale entry, delete it
#
# The last row matters most: an entry cannot quietly rot. Fix something and CI
# tells you to remove its line.
#
# Every entry below is classified. Only the third group is a gap in Hangar.
#
# ---------------------------------------------------------------------------
# 1. Fixture-dependent — the scenario needs content the reference
#    "everything server" serves and our proxied backend does not have.
#    Not a protocol failure: the gateway relays faithfully, there is simply no
#    image/audio/resource/prompt upstream to relay. These would need the
#    reference server behind the gateway, which in turn needs front_door mode
#    plus auth (front_door with no identity is fail-closed by design and
#    advertises zero tools -- see `_build_flat_map`).
# ---------------------------------------------------------------------------
#
# 2. Capability not advertised — we do not declare `completions`, `prompts` or
#    `resources` at all. The suite runs these scenarios regardless of what
#    `initialize` advertised, and counts our `-32601` as a failure. Rejecting a
#    method we never claimed is arguably the conformant answer; this is a
#    scope-of-applicability question for the suite, not a defect to fix here.
#
#    `prompts-list` / `resources-list` moved INTO this group in #888, and the
#    move is a fix rather than a regression. They used to pass by answering
#    `{"prompts": []}` to a capability we advertised and did not serve — which
#    tells a conformant client *this server has no prompts*, a different and
#    wrong statement compared with *this gateway does not carry prompts*. The
#    suite cannot see that distinction; the client it misleads could not either.
#    When #889 proxies an upstream's prompts and resources, the capability comes
#    back on its own and these two lines have to be deleted — which the
#    stale-entry rule above enforces rather than leaves to memory.
#
# 4. Cannot be set up against a sessionless server. The scenario reads
#    `transport.sessionId` first and, finding none, returns a single WARNING
#    ("Server did not provide session ID") without ever running its own check.
#    The suite counts a non-SUCCESS result as a failure, so the line below is a
#    scenario that was never evaluated rather than one we failed.
#
#    `serve --http` hands out no session id since #877: a handshake-era session
#    lived in one replica's memory, so replicas of one gateway were several
#    servers to a client. Note the specification makes the session OPTIONAL —
#    the server MAY assign one — and the SDK ships this mode, so answering
#    without one is conformant.
#
#    What is genuinely lost is the signal, and it is worth being plain about it:
#    this suite can no longer verify SEP-1699 against us. The capability itself
#    was measured directly instead — three concurrent `tools/list` POSTs against
#    the shipped app, all `200 text/event-stream`, all 22 tools — but that is a
#    probe we ran, not a scenario the ecosystem runs for us. If the suite later
#    grows a sessionless variant (its repo already carries
#    `src/mock-server/stateless.ts` and documents a `server-stateless` scenario),
#    this line comes out.
#
# 3. Deliberately not implemented — `logging/setLevel`. This looked like the
#    one real gap until the specification was read: the method is REMOVED in
#    2026-07-28, the generation this line targets. SEP-2575: "Remove `ping`,
#    `logging/setLevel`, and `notifications/roots/list_changed`. Log level is
#    now set per-request via `io.modelcontextprotocol/logLevel` in `_meta`."
#    And SEP-2577 deprecates the whole Logging feature, replacement field
#    included (`@deprecated as of protocol version 2026-07-28` in the draft
#    schema), telling new implementations not to adopt it and suggesting
#    exactly Hangar's approach: stderr or OpenTelemetry. `-32601` here is the
#    correct answer from a 2026-07-28 server; the scenario only runs because
#    the published suite has no vectors for that generation yet.
#    `tests/unit/test_no_mcp_logging_dependency.py` enforces the stance.
#
#    Free consequence worth stating: SEP-2575 requires servers MUST NOT emit
#    `notifications/message` for requests that did not carry the log-level
#    field. Hangar emits none at all, so it satisfies that unconditionally.
#
# Re-check before GA: the 2026-07-28 server vectors DO NOT EXIST YET. The
# published CLI knows only 2025-03-26 / 2025-06-18 / 2025-11-25 / draft /
# extension, and `--spec-version draft` lists zero server scenarios. The repo
# already references 2026-07-28 (`src/mock-server/stateless.ts`,
# `src/scenarios/server/caching.ts`) and its README documents `server-stateless`
# and `tasks-lifecycle`, so those are coming. When they ship, they cover exactly
# the surface we built (SEP-2575 discover, Tasks) and belong in this run.

server:
  # -- 4. not evaluable without a session id ---------------------------------
  - server-sse-multiple-streams # short-circuits to WARNING before its own check (#877)

  # -- 3. deliberately not implemented ---------------------------------------
  - logging-set-level # removed in 2026-07-28 (SEP-2575), feature deprecated (SEP-2577)

  # -- 2. capability not advertised -----------------------------------------
  - completion-complete # `completions` is absent from initialize
  - prompts-list # `prompts` is absent from initialize (#888)
  - resources-list # `resources` is absent from initialize (#888)
  - resources-subscribe # ditto -- subscribe rides the resources capability
  - resources-unsubscribe # ditto

  # -- 1. fixture-dependent --------------------------------------------------
  - tools-call-image # no image-returning tool upstream
  - tools-call-audio # no audio-returning tool upstream
  - tools-call-embedded-resource # no embedded-resource tool upstream
  - tools-call-mixed-content # no mixed-content tool upstream
  - tools-call-with-logging # backend emits no log notifications
  - tools-call-with-progress # backend emits no progress notifications
  - tools-call-sampling # backend issues no sampling request
  - tools-call-elicitation # backend issues no elicitation request
  - elicitation-sep1034-defaults # needs an eliciting backend
  - elicitation-sep1330-enums # needs an eliciting backend
  - resources-read-text # `test://static-text` exists only on the reference server
  - resources-read-binary # ditto
  - resources-templates-read # ditto
  - prompts-get-simple # reference-server prompts
  - prompts-get-with-args # ditto
  - prompts-get-embedded-resource # ditto
  - prompts-get-with-image # ditto
