Skip to content

Developer API console still lists the three retired /api/v1/ai/assistant routes as try-it rows; they answer 404 since cloud#2621 #11704

Closed

Description

@objectstack-fleet

Filing gate: ① a product defect (a dead console entry), from a measured runtime change. Filed by the repo:cloud seat (repo:cloud#1, session session_01Wxo1xhh2bU66T73q23jzE4, R44), from the objectstack-ai/cloud#2621 os-dev report 6011436878 (out_of_scope_findings 1). Reader: the objectui lane (domain:ui), for grading and dispatch. ⛔ No state set by this seat: the grade and queue are that lane's.

What changed on the server

The maintainer ruled A on objectstack-ai/cloud#2621 (triage ruling 6010663551) to retire the three /api/v1/ai/assistant routes:

  • GET /assistant
  • GET /assistant/skills
  • POST /assistant/chat

PR objectstack-ai/cloud#2651 removes them. Measured on the hosted composition after that PR: each answers 404 ROUTE_NOT_FOUND to an admin, a member and anonymous, the same as a path that was never mounted. The agent route (POST /api/v1/ai/agents/:agentName/chat) is the one chat door.

What the console still shows

The developer API console lists the three routes as hand-written try-it rows. They are not served from a route listing.

  • apps/console/src/pages/developer/hooks/useApiDiscovery.ts:115-117: the three rows, in the static ai group whose defaultRoute is /api/v1/ai;
  • :113-114: the "Ambient assistant" comment;
  • :79-81: a comment that counts four conditionally mounted builders, /assistant/* among them. Three remain.

This was read at objectui c476be0 (cloud's .objectui-sha) and is unchanged on objectui main c3623eb1.

The step

Remove the three rows and correct the two comments. No other caller of these paths exists in objectui (git grep "ai/assistant" = 0 code hits at c476be0).

Cloud's ai-route-ledger.ts docblock names this exact difference: "the console listed a route that 404s here" versus "the console listed a route that does not exist".


Generated by Claude Code

Activity

  1. added
    bugSomething isn't working
    domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seat
    area:aiAI-native — agent / tool / skill metadata, and the MCP surface an agent drives
    on Oct 6, 2026
  2. objectstack-fleet commented on Oct 6, 2026

    @objectstack-fleet
    ContributorAuthor

    Path: ⑤ connect an Agent and have it complete a real business operation — developer surface | 缺项 | P5

    Triage: first grade — bug · priority:p3 · domain:ui · area:ai · pm:queue. Remove the three retired /assistant try-it rows

    Triage seat (objectstack-wide, seat post objectstack-ai/objectstack#6015) · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-06T08:00Z. ⛔ Not a claim, ⛔ not a dispatch.

    Triage: lands in apps/console/src/pages/developer/hooks/useApiDiscovery.ts (the rows about :115–:117, and the comments about :79–:81 and :113–:114) ⇒ domain:ui; rationale: the maintainer ruled the three routes retired (objectstack-ai/cloud#2621, A), and the console still offers them.

    • Why p3: these are dead entries on a developer page. They answer 404, and no end user is affected.
    • Done when: the three rows and the "Ambient assistant" comment are gone, the builder count says three, and the agent route remains the documented chat door.
    • Timing: the routes are cloud-only, and objectui main may drop the rows now. A deployment pinned to an older cloud keeps its old console.

    Generated by Claude Code

  3. objectstack-fleet commented on Oct 6, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 1
    Session: session_01DrKzdPdyLLBW3qpZ4vtk7z
    Account: huangyiirene
    Branch: claude/issue-11704-drop-retired-assistant-rows
    Worktree: objectui-issue-11704
    Domain: domain:ui
    Seat: domain:ui#1
    File surface: apps/console/src/pages/developer/hooks/useApiDiscovery.ts (the three /assistant rows about :115–:117, the "Ambient assistant" comment about :113–:114, the builder-count comment about :79–:81); any test beside it that pins those rows; and .changeset/11704-*.md (stop on breach; explain in the report)
    Container & model: S, mode:subagent, model: sonnet (floor tier for a mechanical removal; dispatch-gates --tier --repo objectstack-ai/objectui: no path-derived mandate)
    Clause-②: no
    Thread-read: 6011992584
    Serial constraints cleared: none. No open objectui PR touches apps/console/src/pages/developer/** (objectui#11727, #11725, #11724, #11722, #11069 and the release PR objectui#11600 were read), and no in-flight claim names that file. Read 2026-10-06T15:44Z.

    Why Clause-②: no: three static try-it rows for routes the maintainer retired (objectstack-ai/cloud#2621, A) leave the console's developer page. Nothing is added to any package entry, and no accepted input widens. The state of objectstack-ai/cloud#2651 is not readable from this seat (REST 403 on that repo); triage's timing line (6011992584, "objectui main may drop the rows now") governs.

  4. objectstack-fleet commented on Oct 6, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim addendum (same claim 6019944567, same session and branch): the claim template on objectstack origin/main 1bc6ca1d gained a Responsibility: line for defect cards after this claim was written.

    Responsibility: objectui's own console code produces it — three hand-written try-it rows in apps/console/src/pages/developer/hooks/useApiDiscovery.ts | no platform path covers it: the rows are static, not served from a route listing | anyone who opens the console's Developer API page reaches it (an admin or developer); the page is live today and the three rows answer 404 on a cloud that carries objectstack-ai/cloud#2651


    Generated by Claude Code

  5. objectstack-fleet commented on Oct 6, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 11704,
      "status": "done",
      "branch": "claude/issue-11704-drop-retired-assistant-rows",
      "pr": "https://github.com/objectstack-ai/objectui/pull/11730",
      "session": "session_01DrKzdPdyLLBW3qpZ4vtk7z (subagent mode: the dispatching PM seat's id, the claim's Session line; the relay derived the same id from CLAUDE_CODE_REMOTE_SESSION_ID)",
      "premise_still_valid": true,
      "summary": "Draft PR objectui#11730 (Fixes #11704, Clause-② no) removes the three retired /api/v1/ai/assistant rows and the \"Ambient assistant\" comment from the static ai group in apps/console/src/pages/developer/hooks/useApiDiscovery.ts; the conditional-mount comment now says three and the named-agent chat row stays as the one chat door. All three PM hypotheses held on origin/main: H1 the rows and comments are exactly where the card says; H2 no other code names an /assistant path (positive control: the /api/v1/ai default-route string hits in the same file); H3 no test pinned the ai group, so one pin was added (agent row present, no /assistant row) and reverse-verified. Changeset: required by AGENTS.md section 9 (apps/console is in the fixed group and src/ changed), declared as a patch for @object-ui/console in .changeset/11704-drop-retired-assistant-rows.md. CI was in flight at report time (42 check runs on 26f43d6: 21 success, 3 skipped, 18 in_progress, 0 failed); the PR is draft and mergeable_state read behind (main moved), and its assignee is unset because the assign write was refused (deviation D1).",
      "tests": "HEAD the whole gate union ran on: git rev-parse --short HEAD = 26f43d6 (no commit after it; branch head on origin equals it).\ngates (command, exit code, the gate's own verdict line):\n1. bash os-verify-lock.sh -c \"pnpm --workspace-concurrency=2 --filter '@object-ui/console^...' build\" (prefix form = console's upstream dependency closure, console itself excluded), exit 0, \"os-verify-lock: VERDICT command-exit 0 . held the lock 234s (3m54s) . waited 0s\"; last build lines \"packages/app-shell build: dist completeness: 1 package(s) complete (1000 emitted files verified)\".\n2. bash os-verify-lock.sh -c \"pnpm --filter @object-ui/console test\", exit 0, \"VERDICT command-exit 0 . held the lock 398s (6m38s)\"; vitest \"Test Files  154 passed (154)\", \"Tests  1799 passed (1799)\". 154 equals the count of tracked console test files (git ls-files), so nothing was filtered out.\n2b. narrowed re-run for the touched area: bash os-verify-lock.sh -c \"pnpm exec vitest run --maxWorkers=2 apps/console/src/pages/developer\" (repo-root form), exit 0, \"Test Files  9 passed (9)\", \"Tests  70 passed (70)\", VERDICT command-exit 0 . held 63s. A first attempt in the package-filter form (pnpm --filter @object-ui/console exec vitest run --root ../.. ... apps/console/src/pages/developer) printed \"No test files found, exiting with code 1\": a mis-shaped invocation that measured nothing, not a red gate; it was re-run in the AGENTS.md repo-root form.\n3. bash os-verify-lock.sh -c \"pnpm --filter @object-ui/console type-check\", exit 0, script name echoed as \"@object-ui/console@17.7.0 type-check ... tsc --noEmit && tsc -b tsconfig.node.json --force\", VERDICT command-exit 0 . held 25s. tsc --noEmit --listFiles lists both useApiDiscovery.ts and useApiDiscovery.test.ts (tsconfig include is src), so the new test is type-checked.\n4. pnpm check:control-bytes, exit 0, \"check-control-bytes: OK (scanned 7672 tracked text file(s); skipped 85 binary).\"\n5. pnpm check:new-line-citations, exit 0, \"VERDICT new-cross-file-line-citations: 0 new citation(s), enforcement report-only, exit 0\" (arrow glyph elided).\n6. pnpm check:changeset-claims, exit 0, \"No pending changeset names a file this change touches.\"\n7. pnpm check:pending-changeset-literals, exit 0, \"No test source names a pending changeset.\"\nAdditions re-derived from the actual diff (3 files: one source, one test, one changeset; no other package, locale pack or lockfile) from objectui's own root package.json and scripts: node scripts/check-changeset-presence.mjs exit 0 \"2 source file(s) of 1 released package(s) changed, and this change declares 1 changeset(s): .changeset/11704-drop-retired-assistant-rows.md.\"; node scripts/check-changeset-no-major.mjs exit 0 \"No changeset declares a `major` bump.\"; node scripts/check-changeset-fixed.mjs exit 0 \"All workspace packages are in the changeset fixed group.\"; node scripts/check-changeset-overwrite.mjs exit 0 \"No pre-existing changeset was modified or deleted.\"; pnpm check:test-path-roots exit 0 \"check-test-path-roots: OK (2418 filesystem call(s) in 524 of 4523 test file(s) ...)\" (a test file was touched). scripts/pm/dispatch-gates.mjs was not run: the order states it derives nothing for objectui.\n8. narrowed lint, eslint --format json on the two touched files from apps/console (root eslint.config.js; apps/console has no config of its own), exit 0: 2 files linted (count read from the json), 0 errors, 8 warnings, all on lines this change did not touch (no-explicit-any x7, react-hooks/set-state-in-effect x1). Not a proof of narrowing: the population was NOT read from eslint's own config (explicit-file run, no print-config), so repo-wide pnpm lint is NOT MEASURED here and stays with CI; the only invariance argument offered is that the diff changes no import or export and the config shows no type-aware linting (zero hits for projectService or parserOptions.project in eslint.config.js).\nreverse verification (committed fix first, then mutate, restore from HEAD), via /home/user/objectstack/scripts/ablation-replace.mjs in wrap mode. Attempt 1 was a no-op: exit 1, \"the anchor count moved 1 to 1, a drop of 0, not the declared 1\" (my replacement still contained the anchor), the vitest command never ran, restore proven \"blob == HEAD (11898e16f28f) and git diff HEAD is empty\". Attempt 2: \"ok mutation landed: anchor 1 to 0, blob 11898e16f28f to 456623757ca7\" (one /assistant row planted), vitest \"1 failed | 14 passed (15)\", AssertionError \"expected [ 'GET /api/v1/ai/assistant' ] to deeply equal []\", direction = turned red (the usual direction); restore \"ok restored: blob == HEAD (11898e16f28f) and git diff HEAD is empty\"; re-run after restore: \"Test Files 1 passed (1), Tests 15 passed (15)\". The module under test is imported by relative path from src, so there is no dist leg and no alias in the resolution path; no build step applies to this ablation.\ndeviations:\nD1. REFUSED WRITE, not retried by any route: from /home/user/objectstack, node scripts/pm/label-write.mjs --repo objectstack-ai/objectui --issue 11730 --assign huangyiirene was denied by the Claude Code auto-mode classifier with Reason: [External System Writes]. The PR therefore has no assignee. Seat action: assign huangyiirene to objectui#11730 (the card's assignee). No other path (curl, MCP, manual) was tried.\nD2. Attribution conflict named: the harness commit/PR attribution reminder asks for a model-named co-author trailer and an emoji PR footer; AGENTS.md and the os-dev definition win, so the commit carries the model-free pair (Claude-Session trailer plus Co-authored-by: Claude) and the PR body ends with the session-URL form of the Generated-by footer. The commit message does not carry a model name.\nD3. Beyond the card's two comments: two sibling comments in the same block were repaired because the removal falsified them or made them unverifiable (the ledger-mirror instruction now says added, renamed or retired; the \"SEVEN builders ... All 26\" sentence now carries no count, per AGENTS.md #9), and one new test pin was added beside the hook. All inside the claim's declared file surface (the source file, the test beside it, the changeset).\nD4. Base moved: the PM's gate list was derived at a58626c; my worktree base and diff base is 267b539 (origin/main when the worktree was cut).\nNOT MEASURED: (a) the state of objectstack-ai/cloud#2651 and the contents of cloud's ai-route-ledger.ts (REST read of that repo answers 403 for this session; I did not call add_repo because the change does not need the ledger); (b) CI, which was still running when this report was written (see api and CI line in summary); (c) repo-wide pnpm lint and the rest of the farm, left to CI; (d) the packages/cli integration tier and any browser run, not touched by this diff.\nfiles_changed (3): apps/console/src/pages/developer/hooks/useApiDiscovery.ts ; apps/console/src/pages/developer/hooks/useApiDiscovery.test.ts ; .changeset/11704-drop-retired-assistant-rows.md  (git diff --stat 267b539 to 26f43d6: 44 insertions, 13 deletions)",
      "mcp_calls": "0 (no MCP tool called)",
      "api_writes": "3 landed + 1 refused. Landed: (1) git push of claude/issue-11704-drop-retired-assistant-rows (two pushes of the one branch: the empty-branch probe, then the fix; counted as one); (2) one repository_dispatch POST /repos/objectstack-ai/objectstack/dispatches carrying a single pr_create for objectstack-ai/objectui (relay run 37493734973, success, body read back 4878 bytes sent and 4878 stored, identical; it created draft PR 11730; labels apps and tests on it came from the repo labeler, not from me); (3) this os-dev-report comment on objectui#11704 via scripts/pm/post-stamped.mjs. Refused: label-write --assign on PR 11730 (deviation D1). Zero label writes. Reads (not writes): gh api GET of the issue, its comments, one contents read of cloud (403), the PR, its check runs, and the repo comment list to copy the report format.",
      "open_questions": [],
      "out_of_scope_findings": [
        "none filed. Nothing outside this issue met class a, b or c. Observed and not filed: the eight eslint warnings on lines this diff did not touch (pre-existing no-explicit-any and set-state-in-effect warnings in the same hook), noted only so they are not read as introduced here."
      ]
    }

    Generated by Claude Code

  6. objectstack-fleet commented on Oct 6, 2026

    @objectstack-fleet
    ContributorAuthor

    Review: ACCEPT — PR objectui#11730 (head 26f43d6)

    domain:ui seat 1 · session_01DrKzdPdyLLBW3qpZ4vtk7z · reviewed against the PR diff and check runs, read 2026-10-06T16:16Z. Report: os-dev-report on this card.

    • Shape: draft → main; body line 1 Fixes #11704; Clause-②: no at line start.
    • PR assignee: not set. The dev's label-write --assign was refused by its session's permission classifier. The seat does not re-issue a write refused to the dev; this is raised with the maintainer instead.
    • Scope: 3 files, all inside the claim's surface: useApiDiscovery.ts, the test beside it, and one changeset. +44/−13. Nothing under content/docs/releases/.
    • The card's Done when, checked on the diff:
      • the three /assistant rows and the "Ambient assistant" comment are gone;
      • the conditional-mount comment now names three builders;
      • POST /agents/:agentName/chat stays.
      • Two neighbouring comments were corrected because the removal made them false: the ledger-mirror line now says "added, renamed or retired", and the "SEVEN builders … All 26" counts were dropped. That is declared deviation D3, inside the file surface. Accepted.
    • Clause-② re-read on the diff: this only removes rows from a static catalog inside the console app. No export, prop, type member or locale key changes ⇒ no holds.
    • Changeset (@object-ui/console patch; objectui AGENTS.md §9 fixed group). Sentences checked against the diff:
      • "no longer lists the three retired ambient-assistant routes as try-it rows": matches.
      • "The AI group keeps POST /api/v1/ai/agents/:agentName/chat … as the one chat door": matches.
      • "Nothing else on the page changes": matches the diff (comments aside).
      • "…where they now answer 404" is the card's own measurement of the hosted composition, quoted. objectstack-ai/cloud#2651's state is not readable from this seat (REST 403), as the claim says.
    • Tests: one new pin, which asserts no /assistant row in the AI group and uses the named-agent row as its positive control. The ablation planted one /assistant row and the pin went red at its own assertion; the restore was proven by the blob hash. The local @object-ui/console suite ran 154 files / 1799 tests, and type-check passed (script name echoed). Unrelated eslint warnings pre-exist on untouched lines.
    • CI at 26f43d6: 42 runs, still converging (13 in_progress at this read); no completed run is red. Enqueue waits for every check to be green.
    • Out-of-scope findings: none.

    Generated by Claude Code

  7. objectstack-fleet commented on Oct 6, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed: PR objectui#11730 → main 0cfe772

    domain:ui seat 1 · session_01DrKzdPdyLLBW3qpZ4vtk7z · verified 2026-10-06T16:48Z.

    • Merged through the merge queue at 2026-10-06T16:47:49Z. It was added to the queue at 2026-10-06T16:31:41Z.
    • Content check against the first parent:
      • 0cfe772 is one squash commit on parent 834c559. It changes 3 files, +44/−13, the same as the PR.
      • git diff 26f43d6 0cfe772 over those paths is 0 bytes: the landed bytes are the reviewed head's bytes.
      • On main, useApiDiscovery.ts has zero path: '/assistant rows, and the named-agent agents/:agentName/chat row is still present.
    • Card: closed completed by the PR's Fixes. pm:dispatched was removed and read back.
    • Landing window: only this card closed between 16:30Z and the read.
    • Carried: the PR's assignee stays unset. The dev's write was refused and the seat did not re-issue it; this is raised with the maintainer.

    Generated by Claude Code

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

Metadata

Metadata

Assignees

Labels

area:aiAI-native — agent / tool / skill metadata, and the MCP surface an agent drivesbugSomething isn't workingdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatpriority:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions