Skip to content

Connect an Agent never says what an assistant can do once connected, or whether the connection worked #30898

Closed

Description

@objectstack-fleet

epic:#26676#1 · zhuangjianguo · session_cdb7a717def74e719988f089fbaa18ff

Filing gate: ③ the maintainer's direct order. Asked 「用浏览器试一下,目前连接智能体系平台最核心的功能是否建议优化相关的界面以及把这个菜单放到更明显的位置」, then on the walkthrough's suggestions: 「都同意,立卡」 (2026-11-06). Found in a real-user browser walkthrough of Connect an Agent on main 04f36b63f8 (the widget and its page metadata are unchanged on 8b9cc712ab), as an administrator and as a member, on a local test deployment.

Business reason. The people this page is for do not know what MCP is. They need to hear what the assistant will be able to do for them before they connect, and to see that it worked after. Today the copy speaks of MCP, OAuth 2.1 and Streamable HTTP, and coming back after connecting looks exactly like before.

Reader. The UI lane dev, in ui/packages/app-shell/src/console/connect/ConnectAgentWidget.tsx (the endpoint card, lines 236-258) and its connectAgent.* strings in ui/packages/i18n/src/locales/zh.ts and en.ts. The "it worked" line reads the same records as #30894.

Duplicates. Searched connect agent in:title (23 hits) and Connect an Agent home (373); #24432 (closed) changed the copy to say "this system", nothing explains what an assistant can do or confirms a connection.

Measured

  1. The page opens with 「本系统的 MCP 端点」 and a paragraph on OAuth 2.1 and row-level security; no sentence says what an assistant can do.
  2. Connected with a test API key: the server offers 12 tools (list_objects, describe_object, validate_expression, query_records, aggregate_records, get_record, create_record, update_record, delete_record, list_actions, run_action, resume_run) and 6 prompts.
  3. After an authorization and a connected key, the page shows the same content as before.

Expected

  1. At the top, two plain sentences: the assistant can look up, create, change and delete the records you are allowed to, and run actions, always as you. Then two or three example requests to paste into the client, such as 「列出我能看到的对象」.
  2. Once the person has connected, the page says so: which assistant, and when it last made a call. With nothing connected yet, it says what to try first.
  3. Protocol words (MCP, OAuth 2.1, Streamable HTTP) stay only where a client's own form asks for them.

Activity

  1. objectstack-fleet commented on Nov 6, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Path: none

    Triage: audit · p2 · domain:ui · 2026-11-06T09:57Z

    ⛔ Not a claim.

    • From the maintainer's Connect an Agent walkthrough (「都同意,立卡」, 2026-11-06). The maintainer called it the platform's most central feature. p2: it is how a person reaches and uses that feature.

    Generated by Claude Code

  2. added
    domain:uiDomain lane — seat card indexed by label:pm:seat
    pm:queueReady for the PM dispatch loop
    on Nov 6, 2026
  3. objectstack-fleet commented on Nov 6, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#2 · os-tesla · session_01L9qibw7DekEe3wx5f3zphf

    Claim: PM loop round 7 · 2026-11-06T20:35Z
    Session: session_01L9qibzWZSWpaweunqGyeA9 (card thread, dev) · seat session_01L9qibw7DekEe3wx5f3zphf
    Account: os-tesla
    Branch: claude/project-thread-rrq77k (a cloud card thread can push only its designated branch; restarted on main after PR #30973 merges)
    Worktree: objectstack-issue-30898
    Domain: domain:ui
    Seat: domain:ui#2
    File surface: ui/packages/app-shell/src/console/connect/** and its tests, connectAgent.* strings in ui/packages/i18n (all ten languages), root .changeset/
    Container & model: M, mode:thread, model: default tier (dispatch-gates --tier: no path-derived mandate), effort: high
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a — not a defect card (the page never says what a connected assistant can do, and shows nothing new after connecting)
    Premise: holds as filed (measured on main 04f36b63f8, widget unchanged on 8b9cc712ab); the dev re-measures on main before the first commit
    Scope: Expected 1 and 3 in this thread. Expected 2 (the "connected: which assistant, last call" line) reads the same records as #30894, which is pm:blocked with no ledgered consent read; this thread ships only the nothing-connected-yet hint, the PR says Part of #30898, and the card goes back to pm:queue for Expected 2 after landing.
    Serial constraints: third of #30896 → #30897 → #30898 in this thread. #30897 ACCEPTed (6694843592), PR #30973 in the merge queue; this card's branch is pushed only after #30973 merges, restarted on main.

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

    @objectstack-fleet
    ContributorAuthor

    domain:ui#2 · os-tesla · session_01L9qibzWZSWpaweunqGyeA9

    os-dev-report

    {
      "issue": 30898,
      "status": "partial",
      "branch": "claude/project-thread-rrq77k",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/31052",
      "head": "bcbc29ec",
      "session": "session_01L9qibzWZSWpaweunqGyeA9",
      "premise_still_valid": true,
      "summary": "Expected 1: a new first card says what a connected assistant can do (look up, create, change, delete the records you may, run actions, always as you), three example requests with copy buttons, and a try-first line, shown to everyone. Expected 3: the address card, Claude Code step and turned-off state drop MCP/OAuth; protocol words stay only in client menus/forms (Codex MCP servers, WorkBuddy Configure MCP, QwenWork Streamable HTTP, Transport values, OS_MCP_SERVER_ENABLED). The four API-key fallback hints name Advanced: scripts and CI. 7 new keys + reworded ones x 10 packs, zh-Hant regenerated. PR says Part of #30898: Expected 2 (which assistant, last call) waits on #30894; the page-header subtitle in packages/mcp/src/connect-ui.ts (+ platform-objects translations) is listed as a leftover per the seat ruling.",
      "tests": "vitest connect/ + packages/i18n/ + product-neutral ratchet: 100 files, 1693 passed, 13 skipped (widget 16/16); ablation of en.ts fails §2-§4; app-shell tsc + test tsc exit 0; live (admin + member): capabilities card first, protocol-word hits per tab 7/8 -> 2/4 (remaining = header subtitle + client forms)",
      "gates": "dispatch-gates --commands on bcbc29ec: 38 derived, 38 exit 0 (check-sdui-manifest, ui scripts/ vitest 170 files); --ran with exit codes: 38 run, 0 NOT-MEASURED (derived), 0 UNRUN; check:test-source-alias OK; eslint connect/ 0 errors; merge-tree vs main e1dac192 clean; PR check-runs: pending at report time",
      "line_budget": "444 changed lines (+342 / -102, 15 files) vs 3000",
      "files_changed": [
        ".changeset/30898-connect-agent-what-it-can-do.md",
        "ui/packages/app-shell/src/console/connect/ConnectAgentWidget.tsx",
        "ui/packages/app-shell/src/console/connect/ConnectAgentWidget.keyName-13355.test.tsx",
        "ui/packages/i18n/src/__tests__/residue-namespaces-3546.test.tsx",
        "ui/packages/i18n/src/locales/{ar,de,en,es,fr,ja,ko,pt-BR,ru,zh-Hans,zh-Hant}.ts"
      ],
      "deviations": [
        "residue-namespaces-3546.test.tsx pinned the old Arabic turned-off title verbatim; it now asserts the title keeps the pack's deployment word (toContain), the claim that case makes.",
        "The first gate sweep ran on the pre-restart base and was stopped at 13/38 when #30973 merged; the recorded 38/38 is the full re-run on bcbc29ec."
      ],
      "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
      "mcp_calls": "4 — issue_read x3, pull_request_read x1 (reads only); 0 writes",
      "api_writes": "2 — relay pr_create (#31052), this os-dev-report comment",
      "open_questions": [],
      "security_findings": "none",
      "out_of_scope_findings": ["Page header subtitle (packages/mcp/src/connect-ui.ts, pages.connect_agent.subtitle translations) still says MCP-capable / row-level security; leftover of Expected 3, rides with Expected 2 per seat ruling."]
    }
  6. objectstack-fleet commented on Nov 6, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#2 · os-tesla · session_01L9qibw7DekEe3wx5f3zphf

    ACCEPT → PR #31052 comment 6696871541 · 2026-11-06T21:57Z · head bcbc29ec (Expected 1 and 3: a plain-words capabilities card with example requests, protocol words out of the page copy; 444 lines, Tier S path, Part of #30898). Landing through the merge queue; Expected 2 and the page-header subtitle remain.

  7. objectstack-fleet commented on Nov 6, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#2 · os-tesla · session_01L9qibw7DekEe3wx5f3zphf

    Landed (Expected 1 and 3: Connect an AI Assistant opens with what a connected assistant can do; protocol words out of the page copy) at 2026-11-06T22:59Z: PR #31052 merged as bd1b7685 (head bcbc29ec; Tier S; seat ACCEPT 6696871541). The PR said Part of #30898, so the card stays open.

    probe reading
    git grep -c capabilities origin/main -- …/connect/ConnectAgentWidget.tsx 8
    connectAgent.url.title in en.ts on main "This system's connection address" (no "MCP endpoint")

    Release: session_01L9qibw7DekEe3wx5f3zphf (domain:ui#2, claim 6694925714) · because this part has landed · back to pm:queue, assignee cleared in this stroke.
    Resume-from: main@bd1b7685
    Remainder:

    1. Expected 2: once someone has connected, the page says which assistant and when it last made a call. That reads the records The OAuth consent page promises you can revoke access from your account settings, but no page lists the AI assistants you authorized #30894 part 1 lists (ui seat 3, in flight). Start it after that lands.
    2. Expected 3 leftover: the page-header subtitle in packages/mcp/src/connect-ui.ts ("any MCP-capable AI client …") and its pages.connect_agent.subtitle translations in packages/platform-objects/src/apps/translations (source-hashed). They sit outside the ui surface.
  8. added
    pm:queueReady for the PM dispatch loop
    and removed
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    on Nov 6, 2026
  9. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Nov 7, 2026
  10. objectstack-fleet commented on Nov 7, 2026

    @objectstack-fleet
    ContributorAuthor

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

    Claim: PM loop round 1 · 2026-11-07T15:41Z
    Session: session_01FEkQ5pMhSEyeAKtt6btsBe (card thread, dev) · seat session_01FEkQ5nLA7wiVY5YWjT9Svr
    Account: os-project-manager
    Branch: claude/project-thread-l2jntk
    Worktree: objectstack-issue-30898
    Domain: domain:ui
    Seat: domain:ui#1
    File surface: ui/packages/app-shell/src/console/connect/** and its tests, connectAgent.* strings in ui/packages/i18n (all locales), the page-header subtitle in packages/mcp/src/connect-ui.ts and pages.connect_agent.subtitle in packages/platform-objects/src/apps/translations/* (wording only, PR #30935 precedent), root .changeset/
    Container & model: M, mode:thread, model: default tier (dispatch-gates --tier: no path-derived mandate), effort: high
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a — not a defect card (the page does not say which assistant is connected)
    Thread-read: 6697906751
    Premise: holds: #30894 closed 2026-11-07 (PR #31125); ConnectAgentWidget.tsx on origin/main 56baf78e has no connected-assistant line; packages/mcp/src/connect-ui.ts:76 still carries the protocol-word subtitle
    Serial constraints cleared: #30895 follows in this same thread after this card's PR merges (branch restarted on main); no other domain:ui card is pm:dispatched

    Scope: Expected 2 and the Expected 3 leftover (page-header subtitle); PR says Fixes #30898. Order: /mnt/project-files/pm-orders/ui/order-30898.md (project files). Summons: the maintainer's 「开一个 devx 席位,开一个 spec 席位,开一个 ui 席位」 (this project, 2026-11-07).

  11. objectstack-fleet commented on Nov 7, 2026

    @objectstack-fleet
    ContributorAuthor

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

    os-dev-report

    {
    "issue": 30898,
    "status": "done",
    "branch": "claude/project-thread-l2jntk",
    "pr": "#31198",
    "head": "7005f763",
    "session": "session_01FEkQ5pMhSEyeAKtt6btsBe",
    "premise_still_valid": true,
    "summary": "Expected 2: under the example requests, once the person has connected, Connect an AI Assistant names what is connected and when it last made a call, most recent call first: an authorized assistant by name with its last call in the hour from the recorded hour, or an API key by name with its last call as a moment; no call yet when none is recorded; a pointer to the list when more than one. Nothing connected (or unreadable) keeps the try-first line. One read, useConnectedAccess in console/connect/connectedAccess.ts, over oauth.authorizedClients.list() and the person's own sys_api_key rows (revoked or expired keys do not count; a failed read is never read as not connected); no server route. The assistants withdraw now announces sys_oauth_consent so the line follows Revoke. Expected 3 leftover: the page subtitle in packages/mcp/src/connect-ui.ts and pages.connect_agent.subtitle (en, es-ES, ja-JP, zh-CN, zh-Hant) reworded without protocol words; four source digests re-recorded (51c467af44024a1b). Six new connectAgent.capabilities keys in all eleven packs; Clause-② measured yes (widening) per the seat note.",
    "tests": "ui vitest connect/ + packages/i18n/ + product-neutral ratchet: 102 files, 1832 passed, 13 skipped (new suite 14/14); platform-objects 119 files 1656 passed; mcp 60 files 767 passed; app-shell + i18n type-check exit 0; ablation 1 (delete the withdraw notifyDataChanged sys_oauth_consent): 1 failed / 13 passed, restored blob == HEAD; ablation 2 (dead-key filter -> rows.map(keyEntry)): 6 failed / 8 passed, restored blob == HEAD; live showcase admin+member, en+zh: key line, assistant line (consent row written to the dev DB by hand, not via OAuth), nothing-connected try-first, UI Revoke returns the line to try-first.",
    "gates": "dispatch-gates --commands: 66 derived; all 66 exit 0 (ui scripts/ vitest re-run after a SIGKILL from the box memory limit: 170 files passed; check:dual-build-cjs-loads exit 3 PREREQUISITE NOT MET until seven dists were built, then 0); --ran: 66 derived, 66 run, 0 NOT-MEASURED, 0 UNRUN (record: project files pm-orders/ui/30898-gates-ran.txt); changeset families + check:nul-bytes re-run on final head 7005f76, all exit 0; ui check:new-line-citations 0 new; eslint connect/ 0 errors. PR check-runs: in_progress at report time.",
    "line_budget": "743 changed lines (+688 / -55, 29 files) vs 3000",
    "files_changed": 29,
    "deviations": [
    "de-quote-pairing-3876.test.ts pins moved 109 -> 110 for the new connectAgent.capabilities.connectedKey (German quotes), with a history line like earlier additions.",
    "AuthorizedAccessList.tsx: shared columns/types/expiry moved to accessRecords.ts (same directory, in the file surface) so the list exports components only; one notifyDataChanged added after a withdraw.",
    "Changeset and PR say Clause-② yes (widening), not the claim's no: measured per the seat note (six new keys per published pack, none removed).",
    "Local test:repo not run (CI's)."
    ],
    "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
    "mcp_calls": "6 — issue_read x5, pull_request_read x1 (reads only); 0 writes",
    "api_writes": "2 — relay pr_create (fleet-write run 42394530429, PR #31198), this os-dev-report comment (post-stamped)",
    "open_questions": [],
    "security_findings": "none",
    "out_of_scope_findings": [
    "carrier: none · the Connect page reads the authorized-assistants list and the key list twice (Connected line + the list at the bottom); noted in Acceptance notes, not filed"
    ]
    }


    Generated by Claude Code

  12. objectstack-fleet commented on Nov 7, 2026

    @objectstack-fleet
    ContributorAuthor

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

    Claim amendment · 2026-11-07T17:08Z · claim 6709194102 · the declaration, measured by the dev

    Clause-②: yes (widening)
    Metadata-protocol: none

    PR #31198 adds six connectAgent.capabilities.* keys to every @object-ui/i18n pack and removes none. The seat's TIER_DEFAULT review of the declaration is on the PR. Everything else in the claim stands.

  13. objectstack-fleet commented on Nov 7, 2026

    @objectstack-fleet
    ContributorAuthor

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

    ACCEPT → PR #31198 comment 6710645566 · 2026-11-07T17:26Z · head 7005f763 (connected assistant and last call; plain-words page subtitle; 743 lines, not governed, Fixes #30898). Landing through the merge queue.

  14. objectstack-fleet commented on Nov 7, 2026

    @objectstack-fleet
    ContributorAuthor

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

    Landed · 2026-11-07T17:51Z

    Reading Value
    PR #31198 MERGED 2026-11-07T17:50Z, merge commit 2ce2646e9fd33e4000bf5f100ce14207f28ea7e7 on main
    #30898 closed completed by Fixes #30898; open domain:ui inventory otherwise unchanged (no card closed by a stray keyword)

    State: pm:dispatched removed, assignee cleared. The same card thread now takes #30895 serially, from a branch restarted on main.

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