Skip to content

Open-issue triage and roadmap (post-2.9.0) #278

Open

Description

@heskew

Snapshot as of 2026-10-02: 2.9.0 is released (#274). It ships #262, #263, #267, #268, #269, #270 (closes #228) and #271 (closes #264).

How to use this

Tier 1: security/correctness, do first

Tier 2: UX/devexp

  • Azure multi-tenant: allow account adoption for an allowlist of tenants without restricting sign-in #272: Azure multi-tenant, where only an allowlist of tenants can adopt accounts while anyone can still sign in.
    • Why: today operators must choose between open sign-in and account adoption.
    • Status: needs a design note and plan review. The tenant must be proven by the signing key's issuer in Microsoft's JWKS, which jwks-rsa doesn't expose. A bounded fetch like src/lib/mcp/jwksFetcher.ts is the likely route.
    • Size: L. Deps: rebase on Azure ?appid= form of the shared-alias keys URL isn't recognized #275. Outside contributor: yes.
    • Two small sub-items can ship on their own (S each, outside contributor yes):
      • warn when azureAuthorizeIssuerHost returns null for an Azure-looking host;
      • optionally, redirect a pinned v1 alias to the tenant's own keys instead of throwing.
  • PR feat: optionally serve OAuth endpoints as HTTP middleware #234: optionally serve the OAuth endpoints as HTTP middleware, so a catch-all handler such as Next.js with files: '*' doesn't hide /oauth/*.
    • Why: in those apps login is unreachable.
    • Status: stalled on requested changes since 2026-09-26. Registering with urlPath routes every /oauth/* request only through the new sub-chain. With the option off, every /oauth/* request returns 404 (8 integration failures); with it on, POST endpoints return 404.
    • Fix from the review: register without urlPath, check the mount prefix in the handler, and call next(request) otherwise. Add an integration fixture covering a GET login and one POST.
    • Size: S–M. Deps: none. Outside contributor: yes, as the author's update or a takeover.
    • No issue tracks the underlying problem; file one so it survives the PR.

Tier 3: maintenance/perf

  • Remove the transition-era typ: JWT acceptance on MCP access tokens #258: remove the transition-era typ: JWT acceptance from typAccepted() in src/lib/mcp/tokenIssuer.ts and update docs/mcp-oauth-conformance.md.
    • Why: RFC 9068 §4 is strict about typ, and the transition branch has no expiry in code.
    • Status: time-gated. 2.9.0 is the first release that mints at+jwt. Removal is safe only when no node older than 2.9.0 can still be minting tokens.
    • Target a later minor (at least 2.11) or the next major. Its CHANGELOG entry must warn that a rolling upgrade straight from below 2.9 gives up to one mcp.accessTokenTtl (default 3600 s) of 401s.
    • Size: S. Deps: time only. Outside contributor: yes.

Blocked (with the exact blocker)

Likely fixed / close candidates (with evidence)

Suggested order of work

  1. Finish fix: recognize Azure's ?appid= form of the shared-alias keys URL #276 (Azure ?appid= form of the shared-alias keys URL isn't recognized #275): pre-push review, merge, and release 2.9.1.
  2. Fix the session-expiry docs (Session docs overstate expiry: no default lifetime, and invalidation clears fields rather than deleting the row #277).
  3. Split Follow-up hardening after the account-adoption gate (GHSA-vf58 / 2.6.0) #231 into separate §1 and §3 issues and close the umbrella. Close or retitle CIMD: ChatGPT is refused with invalid_client (lists none in token_endpoint_auth_methods_supported, prefers private_key_jwt) #244 and MCP OAuth v1.1: remaining 2026-07-28 spec forward-work (SEP-2350 scope step-up) #156.
  4. Implement Follow-up hardening after the account-adoption gate (GHSA-vf58 / 2.6.0) #231 §3 with the default pre-registration policy and without the first-bind opt-in.
  5. Write the Roleless OAuth session can inherit a role when a matching account is created later #273 design note, checking it against the Follow-up hardening after the account-adoption gate (GHSA-vf58 / 2.6.0) #231 §3 gate.
  6. Design Session invalidation is not atomic vs a concurrent token refresh — logout/expiry can be resurrected (no CAS) #212's cross-node defense now. Ship the plugin change once Add an optional ifVersion condition to request.session.update() harper#2990 is in a Harper release.
  7. Get Add request.invalidateSessionAuthentication() for session-backed auth components harper#2984 implemented (a core PR is welcome), then do A request that invalidates an OAuth session still runs once as the old user (global middleware next() without clearing request.user) #213's plugin side.
  8. Unstick PR feat: optionally serve OAuth endpoints as HTTP middleware #234, through the author's update or a takeover, and file an issue for the catch-all problem.
  9. Ship the two small Azure multi-tenant: allow account adoption for an allowlist of tenants without restricting sign-in #272 sub-items, then write Azure multi-tenant: allow account adoption for an allowlist of tenants without restricting sign-in #272's design note.
  10. Follow-up hardening after the account-adoption gate (GHSA-vf58 / 2.6.0) #231 §1, once Harper core picks Candidate A or B. Run the old-node table-write test beforehand to inform that choice.
  11. Remove the transition-era typ: JWT acceptance on MCP access tokens #258, once the time gate passes.
  12. CIMD: ChatGPT is refused with invalid_client (lists none in token_endpoint_auth_methods_supported, prefers private_key_jwt) #244's default flip, once ChatGPT signs with the issuer as aud.
  13. MCP OAuth v1.1: remaining 2026-07-28 spec forward-work (SEP-2350 scope step-up) #156, once per-tool scopes are scheduled.

Activity

  1. self-assigned this
    on Oct 2, 2026
  2. pinned this issue on Oct 2, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Fields

Priority

None yet

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions