Skip to content

console: Settings → Access policy does not show the administrator the client address the server judges (GET /api/v1/auth/client-address) #31260

Closed

Description

@objectstack-fleet

domain:server#6 · os-project-manager · session_01FEkQ5p3T5YWhLjurajudnQ

Follow-up of #31030 (PR #31258), should-fix S3 of its contract review (6712531628 on PR #31258) and the dev's out-of-scope seam (report 6712418683 on #31030, carrier: none), filed by domain:server#6. ⛔ Not a claim. Suggested-grade: p2 (the server half exists; without the console half an organization administrator still sets an IP list blind and can lock themselves out of their own organization).

Business reason. #31030's point was that an organization administrator can see the address the server judges BEFORE saving an IP allow-list. PR #31258 adds the served read, GET /api/v1/auth/client-address (organization administrators with setup.write, closed empty query set, Cache-Control: no-store, answers the connection's judged address and trustProxy). Nothing in the console reads it yet: Settings → Access policy shows no "your current address" hint, so the administrator only learns the address from the save refusal's constraint.clientAddress.

Expected: the Access policy settings page shows the caller's judged address (and, when trustProxy is false behind a proxy, a short note that the address is the proxy's) next to the IP ranges field, read from that route. A failed read leaves the page as today.

Lane: domain:ui. Lands after PR #31258.

Activity

  1. added
    enhancementNew feature or request
    pm:queueReady for the PM dispatch loop
    domain:uiDomain lane — seat card indexed by label:pm:seat
    on Nov 7, 2026
  2. objectstack-fleet commented on Nov 7, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Path: none

    Triage: audit · p2 · domain:ui · confirmed · 2026-11-07T20:57Z

    ⛔ Not a claim.


    Generated by Claude Code

  3. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Nov 7, 2026
  4. objectstack-fleet commented on Nov 7, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#1 · os-project-manager · session_01FEkQ5nLA7wiVY5YWjT9Svr

    Claim: PM loop round 3 · 2026-11-07T23:59Z
    Session: session_01FEkQ5o7LUAiCRZ7CgL8CKp (card thread, dev) · seat session_01FEkQ5nLA7wiVY5YWjT9Svr
    Account: os-project-manager
    Branch: claude/project-thread-oidjrj
    Worktree: objectstack-issue-31260
    Domain: domain:ui
    Seat: domain:ui#1
    File surface: the Access policy settings view under ui/packages/app-shell/src/** and its tests, ui/packages/i18n/src/locales/* (new hint/note keys only), root .changeset/
    Container & model: M, mode:thread, model: default tier, effort: high
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a — not a defect card (follow-up owed by #31030, PR #31258)
    Thread-read: 6712924439
    Premise: holds: PR #31258 serves GET /api/v1/auth/client-address (in the merge queue at claim time), and nothing under ui/ reads it on origin/main
    Serial constraints cleared: PR #31258 edits every @object-ui/i18n locale; this branch rebases onto main after it merges and lands only after it is on main

    Scope: the card's Expected as written, one PR, Fixes #31260; the declaration lines start at no / none and the dev measures them on the diff (an added i18n key is yes (widening)), and the seat amends this claim. Order: /mnt/project-files/pm-orders/ui/order-31260.md. Summons: the maintainer's 「devxUI 任务很多为什么不派发,并发5」 (this project, 2026-11-07T23:53Z).

  5. objectstack-fleet commented on Nov 8, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#1 · os-project-manager · session_01FEkQ5nLA7wiVY5YWjT9Svr

    席位核对 · Amendment · 2026-11-08T00:01Z · claim 6714760293 file surface

    The card thread measured on origin/main: the organization Access policy page is the Console's ui/apps/console/src/pages/settings/SettingsView.tsx, not a view under ui/packages/app-shell/src/**. The platform-level variant there already shows the same hint from /admin/client-address (#30313).

    File surface (replaces the claim's):

    • ui/apps/console/src/pages/settings/SettingsView.tsx, the same directory's api.ts, and the existing test SettingsView.clientAddress-30313.test.tsx;
    • root .changeset/.

    No new @object-ui/i18n key is planned (the three existing console.settingsView.clientAddress* strings hold for the organization save check, which uses the same allowedIpRangesWritePredicate). Clause-② and Metadata-protocol stay no / none until the dev measures them on the final diff (@object-ui/console is a published package). Everything else in claim 6714760293 stands.

  6. objectstack-fleet commented on Nov 8, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#1 · os-project-manager · session_01FEkQ5o7LUAiCRZ7CgL8CKp

    os-dev-report
    {
    "issue": 31260,
    "status": "done",
    "branch": "claude/project-thread-oidjrj",
    "pr": "#31308",
    "session": "session_01FEkQ5o7LUAiCRZ7CgL8CKp",
    "premise_still_valid": true,
    "summary": "Setup -> Access policy (the access_policy settings namespace) now reads GET /api/v1/auth/client-address and draws the existing judged-address note under Allowed IP ranges; with trustProxy false the note is the existing direct sentence that says behind a proxy this is the proxy's address. getJudgedClientAddress in ui/apps/console/src/pages/settings/api.ts takes its route (JudgedClientAddressRoute), and SettingsView maps namespace to route (auth -> /admin/client-address unchanged, access_policy -> /client-address); any failed read (401/403/404/network/malformed) draws no note and no toast. The three existing console.settingsView.clientAddress* sentences are reused (the org list's save check is the same allowedIpRangesWritePredicate on the same address), so no i18n key is added and Clause-2 measured no. Mechanism hypothesis falsified on placement: the page is ui/apps/console/src/pages/settings/SettingsView.tsx, not ui/packages/app-shell/src; the seat amended the file surface (6714783181). Head bd882bc is on base 7c523aa; PR #31258 was not on main at report time, so the rebase onto main after it merges is still owed.",
    "tests": "Head bd882bc. pnpm --dir ui exec vitest run apps/console/src/pages/settings/ under the lock: Test Files 38 passed (38), Tests 322 passed (322), VERDICT command-exit 0. Edited harness alone, verbose: Tests 18 passed (18), 9 new cases in a new top-level describe of SettingsView.clientAddress-30313.test.tsx (rendered page, stubbed fetch, real ../api): direct/proxy/unknown sentences on the access_policy page, one read at /api/v1/auth/client-address with credentials include, platform route never asked; five failures (403 PERMISSION_DENIED, 401, 404, malformed, network) leave no note, no aria-describedby, no toast; the auth page still reads only the platform route. Ablation via scripts/ablation-replace.mjs --delete of the map entry ['access_policy', '/client-address'], (anchor 1 -> 0, blob 975d9c33 -> 94aac0b5; tests import src, no build): 8 failed | 10 passed; restored blob == HEAD 975d9c33, git diff HEAD empty. pnpm --filter @object-ui/console run type-check after the console^... closure build: VERDICT command-exit 0. eslint on the 3 edited files: exit 0, 0 errors, 5 warnings all on untouched main lines. pnpm --dir ui check:new-line-citations: 0 new, exit 0.",
    "gates": "node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack at bd882bc: 35 commands, each run with stdin /dev/null, every exit captured before any pipe: 35 exit 0 (pnpm --dir ui exec vitest run scripts/ under the lock: Test Files 170 passed | 2 skipped, Tests 4996 passed | 2 skipped, VERDICT command-exit 0). --ran: '35 derived famil(ies) accounted for - 35 run, 0 NOT-MEASURED'. CI check-runs on PR #31308: in_progress at report time (not waited on, per os-dev.md).",
    "dogfood_battery": "n/a - no ! in the PR title and no (narrowing) arm",
    "mcp_calls": "4 - mcp__github__issue_read get #31260, mcp__github__issue_read get_comments #31260 (x2), mcp__github__pull_request_read get #31258; no write tool",
    "api_writes": "2 relay writes - pr_create objectstack-ai/objectstack (PR #31308, fleet-write run 42430431781, read-back identical, assignees none, no labels key since the order names none); this os-dev-report comment on #31260 via post-stamped. Plus git push (3 pushes of the harness branch).",
    "open_questions": [],
    "security_findings": "withheld",
    "out_of_scope_findings": [
    "carrier: none - content/docs/** teaches no per-organization access policy (Setup -> Access policy and GET /api/v1/auth/client-address are undocumented; permissions/authentication.mdx describes only the Authentication page's note); ui/AGENTS.md rule #2 docs-driven not met here because docs sit outside the claimed file surface. Noted in PR Acceptance notes, not filed."
    ],
    "deviations": [
    "Rebase onto main after PR #31258 merges is still owed: #31258 was not on origin/main (007fdb1) at report time. The diff touches no file #31258 edits (no i18n locale file), so the rebase is expected to be mechanical.",
    "Order mechanism hypothesis placed the page under ui/packages/app-shell/src; measured at ui/apps/console/src/pages/settings/SettingsView.tsx. File surface amended by the seat (6714783181).",
    "No new test file: per AGENTS.md (ruling record 6583487846) the pins went into the page's existing harness as a top-level describe."
    ],
    "files_changed": [
    ".changeset/31260-access-policy-client-address.md",
    "ui/apps/console/src/pages/settings/SettingsView.tsx",
    "ui/apps/console/src/pages/settings/api.ts",
    "ui/apps/console/src/pages/settings/tests/SettingsView.clientAddress-30313.test.tsx"
    ],
    "line_budget": "+164 / -18 over 4 files (dispatch-gates reading)"
    }

  7. objectstack-fleet commented on Nov 8, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#1 · os-project-manager · session_01FEkQ5o7LUAiCRZ7CgL8CKp

    Report delta for PR #31308: the branch now carries main after PR #31258 landed.

    • New head 1abec7bb: a merge of origin/main (f5e23e2f, PR feat(plugin-auth)!: an organization administrator reads their judged client address; the console's retired MFA notices are gone #31258) into the branch, clean, no conflict. It is a merge, not a rebase: the branch is a claude/project-thread-* harness branch, which fails criterion ① of AGENTS.md Multi-agent §3, so no force-push. The PR's delta against main is unchanged: 4 files, +164 / -18.
    • After pnpm install --frozen-lockfile and pnpm --filter '@object-ui/console^...' build (VERDICT command-exit 0):
      • pnpm --dir ui exec vitest run apps/console/src/pages/settings/ then pnpm --filter @object-ui/console run type-check, one locked run: Test Files 39 passed (39), Tests 329 passed (329), VERDICT command-exit 0.
      • dispatch-gates.mjs --commands re-derived at 1abec7bb: the same 35 families, each exit 0 (pnpm --dir ui exec vitest run scripts/ under the lock: Test Files 170 passed, 2 skipped). --ran: 35 derived, 35 run, 0 NOT-MEASURED.
    • The deviations entry "rebase owed" in report 6715134434 is now discharged.
  8. objectstack-fleet commented on Nov 8, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#1 · os-project-manager · session_01FEkQ5nLA7wiVY5YWjT9Svr

    ACCEPT → PR #31308 comment 6716455069 · 2026-11-08T03:00Z · head 1abec7bb (Access policy page shows the judged client address; 182 lines, not governed, Fixes #31260). Landing through the merge queue.

  9. objectstack-fleet commented on Nov 8, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#1 · os-project-manager · session_01FEkQ5nLA7wiVY5YWjT9Svr

    Landed · 2026-11-08T03:23Z

    Reading Value
    PR #31308 MERGED 2026-11-08T03:23Z, merge commit dc7f5c4b4aeb2cb401c68f37f65de19ee352c92a on main
    #31260 closed completed by Fixes #31260; no other domain:ui card left the open inventory

    State: pm:dispatched removed, assignee cleared.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    domain:uiDomain lane — seat card indexed by label:pm:seatenhancementNew feature or requestpriority:p2Medium: important, M3

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions