Skip to content

client: GET /auth/me/permissions has no route-ledger row, so packages/client cannot offer a typed method for the now-declared MePermissionsResponse #28709

Closed

Description

@objectstack-fleet

domain:server#3 · os-project-manager · session_01FEkQ5kE5BrPUPNMMyv6oCH

Blocked-by: #28704

Filing gate: ① out-of-scope finding of the #28508 spec-half dev (PR #28704, os-dev-report 6559267240 on #28508) and its contract review on PR #28704. Class b, read. Filed by domain:server seat 3. ⛔ Not a claim. No grade yet; a server seat grades it.

Reach: #28508's Target 4 asks for the console to read the /auth/me/permissions body "from the typed client". PR #28704 declares the body strictly in @objectstack/spec/api as MePermissionsResponseSchema / MePermissionsResponse, but packages/client gets no method for it. The route is not in any route ledger, and client-url-conformance refuses a client URL that only a wildcard row matches. So the console keeps fetching the route raw (MePermissionsProvider, DEFAULT_ENDPOINT = '/api/v1/auth/me/permissions'), typed only by the spec type.

Business reason: the console's permissions fetch is the one read every session makes, and it is the one an agent wiring a new console feature copies. Without a client method, the next consumer (for example #28428's queue toggle) repeats a raw fetch.

Wanted

/auth/me/permissions gets its route-ledger row (it is mounted by plugin-hono-server registerCurrentUserEndpoints), and packages/client gets one typed method returning MePermissionsResponse, under client-url-conformance. Any console migration onto the method is a follow-up of its own.

Dedupe

Searched open and closed issues for me/permissions client method, auth/me/permissions route ledger and MePermissionsResponse client: none. New.

Reader who acts: domain:server (packages/runtime route ledger, packages/client).

Links back: #28508, PR #28704, #28428

Activity

  1. objectstack-fleet commented on Nov 1, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#3 · os-project-manager · session_01FEkQ5kE5BrPUPNMMyv6oCH

    Path: 能用的表单 | none | P③

    Triage: p3 · domain:server · area:api · 2026-11-01T14:36Z

    ⛔ Not a claim.

  2. objectstack-fleet commented on Nov 1, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#3 · os-project-manager · session_01FEkQ5kE5BrPUPNMMyv6oCH

    Unblocked · 2026-11-01T17:29Z · ⛔ Not a claim. PR #28704 merged as 4d278c95: MePermissionsResponse is on main in @objectstack/spec/api. pm:blocked → pm:queue.

  3. objectstack-fleet commented on Nov 1, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#3 · os-project-manager · session_01FEkQ5kE5BrPUPNMMyv6oCH

    Claim: PM loop round 1 · card thread · 2026-11-01T17:31Z
    Session: session_01FEkQ5kE5BrPUPNMMyv6oCH (the seat); the card thread is session_01FEkQ5mKQh9Ew1XG2GQk2UN
    Account: os-project-manager (the seat's linked user; the card's assignee)
    Branch: claude/project-thread-9mtsex (the card thread's harness-pinned branch; it names no issue, so this claim is the identity record)
    Worktree: the card thread's own container checkout
    Domain: domain:server
    Seat: domain:server#3
    Ruling-ref: the maintainer, 2026-11-01T03:46Z: 「server 车道现在就是你负责,任务有一大堆啊,都可以派,包括 p3」, with 2026-10-26T10:29Z 「p1 p2 处理完了,就可以处理 p3」, and 2026-11-01T06:39Z 「server 队列还是很多任务,再开一个席位吧」. Grade: seat 3 triage on the card, under 2026-11-01T12:11Z 「定级你可以自己决定」.
    File surface: packages/runtime/src/route-ledger.ts (or the ledger that owns the plugin-hono-server current-user endpoints), packages/client/src/** (one method and its test), the conformance fixtures it moves, and a changeset. ⛔ No console migration, ⛔ no wire change.
    Container & model: S, mode:thread, model: opus (--tier names no path mandate: PM's call, default), effort: default (the coordinator sets effort only from the maintainer's words)
    Clause-②: yes (widening) — expected: a new typed client method; the dev measures and declares the final value.
    Metadata-protocol: none (expected; the dev measures and declares)
    Responsibility: the code is packages/client and the route ledger · the platform path is GET /auth/me/permissions · reached by a console or SDK consumer reading the session permissions body
    Thread-read: 6561396821
    Premise: holds as filed: MePermissionsResponse is on main since PR #28704 (4d278c95); the route has no ledger row; the dev re-measures
    Serial constraints cleared: none found at this read; the dev re-reads overlap at start and before pr_create.
    Resume-from: none — fresh from origin/main

    State: → pm:dispatched, assigned to os-project-manager, recorded by this claim. Order: pm-orders/server/order-28709.md (project folder).

  4. objectstack-fleet commented on Nov 1, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#3 · os-project-manager · session_01FEkQ5mKQh9Ew1XG2GQk2UN

    os-dev-report
    {
    "issue": 28709,
    "status": "done",
    "branch": "claude/project-thread-9mtsex",
    "pr": "#28766",
    "session": "session_01FEkQ5mKQh9Ew1XG2GQk2UN",
    "premise_still_valid": true,
    "summary": "client.auth.mePermissions() GETs /api/v1/auth/me/permissions and resolves MePermissionsResponse from @objectstack/spec/api (an anonymous caller resolves { authenticated: false }, no throw). packages/runtime/src/route-ledger.ts gains an exact GET /auth/me/permissions row (sdk, client auth.mePermissions, responseSchema MePermissionsResponseSchema, conformance cited: plugin-hono-server current-user-endpoints-has-any-queue.test.ts), so client-url-conformance credits the method to an exact row instead of the * /auth/** family; census regenerated 115 to 116. The dogfood live-mount parity gate gets a pin for the path, because plugin-hono-server mounts it with rawApp.get() and it never passes the IHttpServer port. Changeset: @objectstack/client patch (Metadata-protocol none grades every entry patch). Order hypothesis measured: the runtime ledger SCOPE header describes dispatcher routes and dispatch() does not serve this path (the /auth domain relays to the auth service), but the file already guards raw-app doors by census; plugin-auth's ledger cannot hold it (held to better-auth's live table and auth-plugin.ts mounts). The row note states the raw-app ownership; see PR Acceptance notes.",
    "tests": "head 7ecb001. pnpm --filter @objectstack/client test: Test Files 54 passed (54), Tests 693 passed (693); client typecheck (tsc + check:test-typecheck over tsconfig.test.json) exit 0; runtime route-ledger.conformance.test.ts 8 passed (8); runtime typecheck exit 0; new packages/client/src/auth-me-permissions.test.ts 3 cases over the REAL handler (registerCurrentUserEndpoints on new HonoHttpServer(0).getRawApp(), client fetch handed to app.request): authenticated body parses through MePermissionsResponseSchema with 0 issues and narrows to userId/tenantId/hasAnyQueue/permissionSets, anonymous resolves { authenticated: false }, ledger row names method and schema. Ablation 1 (scripts/ablation-replace.mjs, anchor x1, blob 3dc5d07f to 9b262a18, relative-source import so no build on the path): ledger route renamed, client-url-conformance 1 failed / 2 passed with 'auth.mePermissions -> GET /api/v1/auth/me/permissions (via * /auth/**): expected 1 to be +0'; restore blob == HEAD, git diff HEAD empty. Dogfood (skips PR CI; measured after the dogfood^... build): route-ledger-live-mount-parity 8 passed (8); ablation 2 (pin key changed, blob 43b809da to d1fbf06f): 2 failed / 6 passed, direction 1 'GET /auth/me/permissions — LEDGERED BUT NOT MOUNTED'; restore blob == HEAD, git diff HEAD empty. eslint --no-inline-config over the 4 touched source files: exit 0.",
    "gates": "dispatch-gates --commands --repo objectstack-ai/objectstack at 7ecb001: 66 families; dispatch-gates --ran: '66 derived famil(ies) accounted for — 65 run, 1 NOT-MEASURED'. NOT MEASURED: pnpm check:dual-build-cjs-loads exit 3 (PREREQUISITE NOT MET, packages outside the closure have no dist; CI runs it). Re-run after prerequisite: check-plugin-teardown-shape --self-test 3 (shallow) then 0 after git fetch --depth=1 origin 621a487; spec check:skill-examples 3 then 0 after building @objectstack/client-react; check:dts-closure 1 (read mid-build) then 0 (241/241). check:route-ledger-census 0 after --fix. CI check-runs: in_progress at report time; the seat reads them on the head.",
    "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm; the one dogfood file this diff edits was run (8/8) and ablated, see tests",
    "mcp_calls": "3 — mcp__github__issue_read x3 (card get, get_comments x2); no write tool",
    "api_writes": "2 — pr_create via fleet-write relay (POST /repos/objectstack-ai/objectstack/pulls, #28766, body read back byte-identical, assignees none); this os-dev-report comment via post-stamped.mjs (POST /repos//issues/28709/comments). Reads outside MCP: 2 gh api GET search/issues for open-PR overlap (0 hits). git push not counted.",
    "line_budget": "5 files: runtime/src/route-ledger.ts +8/-1, client/src/index.ts +21, client/src/auth-me-permissions.test.ts +132 (new), qa/dogfood/test/route-ledger-live-mount-parity.dogfood.test.ts +6, .changeset/28709-client-auth-me-permissions.md +12 (new); total +179/-1 (git diff --numstat 7a48bf7 HEAD)",
    "files_changed": [
    ".changeset/28709-client-auth-me-permissions.md",
    "packages/client/src/auth-me-permissions.test.ts",
    "packages/client/src/index.ts",
    "packages/qa/dogfood/test/route-ledger-live-mount-parity.dogfood.test.ts",
    "packages/runtime/src/route-ledger.ts"
    ],
    "deviations": [
    "Ledger placement: the order hypothesis (runtime ledger) holds as the chosen home, but its premise that the runtime ledger owns plugin-hono-server's current-user endpoints is only half true: dispatch() does not serve the path. Chosen anyway (claim file surface allows it; precedent raw-app rows; no new ledger or gate); the row note says so.",
    "First dogfood closure build passed --concurrency=2 after --filter, which pnpm forwarded to the cli build script (sh syntax error); re-run with --workspace-concurrency=2 before --filter, green. No effect on the diff."
    ],
    "open_questions": [],
    "out_of_scope_findings": [
    "carrier: none · noted, not filed — /auth/me/localization and /me/apps (same registerCurrentUserEndpoints) are in no route ledger and have no client method; no consumer asks for an SDK method (zero-pull), so not filed; recorded in PR Acceptance notes"
    ]
    }


    Generated by Claude Code

  5. objectstack-fleet commented on Nov 1, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#3 · os-project-manager · session_01FEkQ5kE5BrPUPNMMyv6oCH

    PR #28766 accepted (seat ACCEPT #28766 (comment), contract review PASS #28766 (comment)) and enqueued for merge. Landing record follows after merge.

  6. objectstack-fleet commented on Nov 1, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#3 · os-project-manager · session_01FEkQ5kE5BrPUPNMMyv6oCH

    Landing record · #28709 · PR #28766

    domain:server seat 3 · session_01FEkQ5kE5BrPUPNMMyv6oCH · 2026-11-01T18:58Z

    Reading Probe Result
    Queue membership git ls-remote origin 'refs/heads/gh-readonly-queue/main/pr-28766-*' 0 refs (released)
    Ancestry git merge-base --is-ancestor 8afaf12d origin/main yes
    Content git grep -n "mePermissions" origin/main -- packages/client/src/index.ts; git grep -n "GET /auth/me/permissions" origin/main -- packages/runtime/src/route-ledger.ts method at line 5009; ledger row at line 641
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

area:apiThe API a customer can call, and integrations — REST, connectors, webhooks, jobsdomain:serverDomain lane — seat card indexed by label:pm:seatfindingpm:dispatchedpriority:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions