Skip to content

AI build chat: plan card v2 and result card v2 per the AiBuild artboard, a collapsed progress line, no automatic navigation to Studio after a build, and a placeholder without the agent's name #12724

Open

Description

@objectstack-fleet

Source

Walked on 2026-10-16 on /_console/ai/build/conv_… (the test1016 tenant, zh-CN): the plan card shows objects as「图书 · 4」chips and views as names, assumptions as prose, 开始搭建 / 调整方案; after the build finished the tab navigated on its own to /_console/studio/app.hcpl/interfaces as a top-level navigation (40 s of「正在打开你的控制台…」on that tenant) and the final summary was only readable afterwards inside the Studio copilot; the progress list shows every tool call as a row (记录待办 ×3); the composer placeholder reads「向 构建 提问…」(the template「向 {name} 提问…」filled with the agent's display name). packages/app-shell/src/console/ai/AiChatPage.tsx renders the page; ChatDock.tsx and hooks/chatScope.ts hold the conversation.

Target (ruling 「同意」; AiBuild artboard)

  1. Plan card v2: header (icon, 「方案 · 图书借阅管理」(the app name), summary line「3 个对象 · 3 个视图 · 示例数据 12 条/对象 · 确认后约 1 分钟搭好」, 等待确认 chip); 对象与字段 rows with field chips (the constraint in mono type on the chip, dashed chip for suggested fields, a「名称:自动生成…」line under relation objects); 视图 rows with one intent line each; 假设 list; 开始搭建 (primary) / 调整方案 and the hint「也可以直接回复:…」. Data from the build agent's plan payload (objectstack-ai/cloud card builder-plan-result-payloads-v2); the card degrades to today's shape when a field of the payload is absent.
  2. Progress: one collapsed line per phase (「设计方案 · 4 步 · 0:48 · 读取编写规范 · 列出对象 ×3 …」) with a chevron that expands the steps.
  3. Result card v2: 「已搭建并上线 · 图书借阅管理」, 核对通过 7/7 chip, a two-column checklist with the verified numbers, 打开应用 (primary, the app's first navigation item) and 在 Studio 中查看 as SPA navigations, a「接下来可以说:…」line from next_steps, and the posture sentence「之后的修改先存草稿,由你在 Studio 发布」. No automatic navigation after a build; a test on AiChatPage asserts no full navigation on completion.
  4. The composer placeholder is「描述你想搭建的应用,或要改的地方…」for the build agent (no name interpolation); the footer reads「↵ 发送 · Shift+↵ 换行」.

File surface

packages/app-shell/src/console/ai/AiChatPage.tsx and the card components it renders, packages/app-shell/src/layout/ChatDock.tsx, hooks/chatScope.ts, i18n keys in every shipped locale, tests beside.

Acceptance

  1. Tests: the plan card renders chips, intent lines and the name rule from a fixture payload; the result card renders the checklist and both buttons; no location.assign on completion; the placeholder has no agent name.
  2. Screenshots of the plan card and the result card at 1280 px, zh-CN and en.
  3. pnpm --filter @object-ui/app-shell test green.

Design

Artboards on the temporary branch claude/console-home-login-design-20261016 of objectstack-ai/objectui, commit 23ef817aa (never merged; *.preview.html opens in a browser, *.dc.html is the canvas source): AiBuild (source). The README beside them records the maintainer's rulings.

Evidence

Screenshots on the same branch and commit: ai-build-plan-awaiting-confirm.jpg · ai-build-redirect-boot-splash.jpg · ai-build-empty-conversation.jpg.

Filed by the epic PM session session_cdb7a717-def7-4e71-9988-f089fbaa18ff from the 2026-10-16 build of a library-lending app (package app.hcpl: 图书 / 读者 / 借阅记录, a status kanban, an overdue view) on the test1016 tenant at https://os-4e4qa4.objectos.app (staging, zh-CN, the maintainer's browser pane at 1010 × 1119), through 用 AI 搭建 → the plan card → 开始搭建 → the Studio copilot → one change → the running app. The maintainer named the repositories, verbatim: 「ai 搭建的功能在 cloud仓库」「部分前端功能代码在 objectui 后端在 onjectstack」, and ruled on the design in chat: 「同意」 to the four points as drawn, then 「是否考虑浮出」/「属性好需要考虑选中每个元素的时候也要显示」, then 「按浮窗版定稿」.

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 16, 2026
  2. objectstack-fleet commented on Oct 16, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 3 (priority:p2; filed by the epic PM session from the AiBuild artboard the maintainer ruled 「同意」, then 「按浮窗版定稿」; a partial claim, Part of #12724: this claim takes the halves that need no new payload: target 2 (one collapsed line per phase), target 3 without the verified checklist (the result card's header, 打开应用 and 在 Studio 中查看 as SPA navigations, the next-steps line and the posture sentence, and no automatic navigation after a build), and target 4 (the build agent's placeholder and the send hint). Target 1 (plan card v2) and the result card's verified checklist render only from what the current envelope declares. Their v2-only rows read the cloud card builder-plan-result-payloads-v2, which no repository in this lane can read; those rows are listed, not invented, and the card stays open for them.)
    Session: session_01SJn1GEkrbbBQkhGC26wEDw
    Account: os-sales (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/issue-12724-ai-build-progress-result
    Worktree: objectui-issue-12724 (in the cloud session's own container)
    Domain: domain:ui
    Seat: domain:ui#4
    File surface: packages/app-shell/src/console/ai/AiChatPage.tsx (the placeholder, the post-build navigation at about :2201, the labels it passes), packages/plugin-chatbot/src/ChatbotEnhanced.tsx (the plan card, the progress list and the build summary it renders) and packages/plugin-chatbot/src/mapMessages.ts (reading only fields the current envelope carries), packages/app-shell/src/layout/ChatDock.tsx and packages/app-shell/src/hooks/chatScope.ts (only where the dock shares the placeholder or the navigation), packages/i18n/src/locales/* (every shipped locale), tests beside each, one .changeset/12724-*.md (stop on breach; explain in the report)
    Container & model: L, mode:cloud, model: opus (cloud on the maintainer's stance 「可以的话,ui 后续开发尽量用云 session,并且要求截图给我看」; lane scope on 「你也可以接ui车道的卡」; batch 3 on 「当前任务处理完,后续并发降到3」, this session's chat, 2026-10-16)
    Clause-②: yes
    Clause-② reason: the build agent's new placeholder is a new @object-ui/i18n key in every shipped locale, which widens the exported TranslationKeys; the collapsed progress line and the result card's labels may add members to ChatbotEnhanced's exported label props. The seat's TIER_DEFAULT review comes before ready.
    Responsibility: n/a — a ruled design card (the AiBuild artboard)
    Thread-read: none
    Serial constraints cleared: no open objectui PR touches console/ai/, ChatDock.tsx, chatScope.ts or plugin-chatbot (read at dispatch). objectui#12725 (the Studio copilot's right slot) is unclaimed and may later touch ChatDock.tsx; whichever lands second merges main. The post-build navigation this card retires was set by objectui#11658 ("built lands running"); the maintainer's ruling on this card supersedes it, and its pins change with it.

  3. objectstack-fleet commented on Oct 17, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 3 · amended (file surface and Clause-② reason, as measured in the report) (priority:p2; a partial claim, Part of #12724, from the AiBuild artboard the maintainer ruled 「同意」, then 「按浮窗版定稿」; the halves that need no new payload, as the first claim 6226149351 lists them; the v2-only rows of the plan card and the result card's verified checklist stay open on this card)
    Session: session_01SJn1GEkrbbBQkhGC26wEDw
    Account: os-sales (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/issue-12724-ai-build-progress-result
    Worktree: objectui-issue-12724 (in the cloud session's own container)
    Domain: domain:ui
    Seat: domain:ui#4
    File surface: packages/app-shell/src/console/ai/AiChatPage.tsx (the placeholder, the retired post-build navigation, the labels it passes), packages/plugin-chatbot/src/ChatbotEnhanced.tsx (the plan card, the phase line and the result card) and packages/plugin-chatbot/src/mapMessages.ts (lifting only the spec-declared SolutionBlueprintSchema keys the envelope carries), packages/app-shell/src/layout/ChatDock.tsx and packages/app-shell/src/hooks/chatScope.ts (unchanged), packages/i18n/src/locales/* (every shipped locale), tests beside each, including the retired navigation pins AiChatPage.builtTransition.test.tsx and AiChatPage.builtLandsRunning-11658.test.tsx, the i18n census pins de-quote-pairing-3876, untranslated-identity-4376 and perm-home-namespace-3546, and the live-baseline case in packages/app-shell/src/hooks/__tests__/useChatConversation.test.tsx; one .changeset/12724-*.md. Amended on the dev's report (PR #12841): the census pins and the hooks test were not in the first surface.
    Container & model: L, mode:cloud, model: opus (cloud on the maintainer's stance 「可以的话,ui 后续开发尽量用云 session,并且要求截图给我看」; lane scope on 「你也可以接ui车道的卡」; batch 3 on 「当前任务处理完,后续并发降到3」, this session's chat, 2026-10-16)
    Clause-②: yes
    Clause-② reason: three published faces move. (1) @object-ui/i18n's exported TranslationKeys: new keys in every pack (console.ai.describeAppToBuild, console.ai.newlineHint, console.ai.viewBuiltAppInStudio, chatbot.phase.*, chatbot.plan.*, chatbot.build.*), and console.ai.designBuiltApp retires. (2) @object-ui/plugin-chatbot's exported label props take one optional member, newlineHint. (3) @object-ui/plugin-chatbot's exported ProposedPlan takes three optional members, appLabel, views and objects[].fields, lifted from the spec's SolutionBlueprintSchema keys, because the ruled field chips and view rows cannot be drawn without them. The seat's TIER_DEFAULT review comes before ready.
    Responsibility: n/a — a ruled design card (the AiBuild artboard)
    Thread-read: 6226149351
    Serial constraints cleared: no open objectui PR touches console/ai/, plugin-chatbot or the i18n packs this PR edits (read at PR open). objectui#12725 (the Studio copilot's right slot) is unclaimed; whichever lands second merges main.

  4. objectstack-fleet commented on Oct 17, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 12724,
      "status": "done",
      "branch": "claude/issue-12724-ai-build-progress-result",
      "pr": 12841,
      "session": "session_01XfuGMLXaKo5XaZhNvUTbDL — this run's harness-stamped id (Claude-Session trailer on every commit); dispatching seat session_01SJn1GEkrbbBQkhGC26wEDw",
      "premise_still_valid": true,
      "summary": "This covers the halves of objectui#12724 that need no new payload. (1) AiChatPage no longer navigates after a build. The objectui#5799 built-moment transition and its objectui#11658 run landing are gone, and the effect now only binds the thread to the built package (A1.b), so the Studio dock still resumes it. (2) ChatbotEnhanced folds each turn's tool activity into one collapsed line per phase: the phase name, the folded step count, the elapsed time measured while the turn streamed, and the steps with ×N repeats. A chevron expands the rows. (3) The finished build card says 「已搭建并上线 · APP」 only when it has a publish signal, puts 打开应用 first and 在 Studio 中查看 second (both SPA navigations), and ends with the 「接下来可以说」 line built from `nextSteps` and the draft-posture sentence. (4) The plan card names the app, shows 等待确认, draws one chip per field and one row per view from the spec-declared `blueprint.objects[].fields`, `blueprint.views` and `blueprint.app.label`, and falls back to today's object chips when there are no field rows. (5) Outside an app, the build agent's placeholder reads 「描述你想搭建的应用,或要改的地方…」, and the footer reads 「↵ 发送 · Shift+↵ 换行」. Card assignee was not written. I measured the four PM mechanism assumptions and all four hold: (1) the automatic navigation is the `paneNavigate(... STUDIO_RUN_LANDING)` effect, and the other Studio `navigate` is the click handler of the Design door; (2) the placeholder ladder fell to `askAgent` outside an app; (3) the plan card, progress list and build summary are in ChatbotEnhanced, fed by mapMessages; (4) the keys live under console.ai and chatbot.* in every pack. I can't tell from the code whether the tenant's 40 s boot splash came from that SPA navigate: the code path has no location.assign. NOT MEASURED, reason: no live tenant reachable.",
      "tests": "All at HEAD 38ceb1e unless noted. New pins: packages/app-shell/src/console/ai/__tests__/AiChatPage.noNavigationAfterBuild-12724.test.tsx has 5 tests: a reopened drafted or published build and a live completion all stay on /ai/build/conv-1; the only router call is the binding's {replace:true} to the same conversation with ?package=app.k9; location.assign is never called; 打开应用 is an SPA navigation to /apps/k9_app and 在 Studio 中查看 to /studio/app.k9/interfaces with null state. packages/plugin-chatbot/src/__tests__/ChatbotEnhanced.buildChat-12724.test.tsx has 10 tests: zh line '设计方案 · 4 步 · 0:48' with steps '读取编写规范 · 列出对象 ×3 · 记录待办 ×2 · 设计应用方案'; the chevron collapses and expands; a waiting plan does not hold the line open; a reopened turn shows no time; a running step keeps the rows open; the result card's live header, both doors and their targets, the posture and the next-steps line; 'Built X' when there is no publish signal; plan field chips and view rows; the fallback to object chips. AiChatPage.appContextComposer-11658.test.tsx gains zh/en build placeholders outside an app with no agent name, a third-agent control 'Ask Analyst…', and the footer hint. Updated pins: mapMessages.test.ts (field/view/app lift; a count-only fields array lifts nothing); ChatbotEnhanced.test.tsx (Open app is now the primary button); useChatConversation.test.tsx (the live baseline carries field names, the cache copy stays count-only). Retired pins: AiChatPage.builtTransition.test.tsx (objectui#5799: reopen or live completion lands in Studio; the full-page opt-out; the objectui#10109 'edit does not transition' cases, now subsumed because nothing navigates) and AiChatPage.builtLandsRunning-11658.test.tsx (the run-mode landing and its Design-door control, replaced by the 12724 door test). Both pinned the navigation the maintainer's ruling retires. Ablation, one per new or updated pin, each through objectstack scripts/ablation-replace.mjs with automatic restore: all 11 legs went red (exit 1), and every restore was proven by `git diff HEAD` empty (diff-bytes 0). AB1 location.assign in the bind effect: 3 red; AB2 describeAppToBuild → askAgent: 2 red; AB3 newlineHint undefined: 1 red; AB4 fold count +0: 1 red; AB5 always expanded: 1 red; AB6 live → false: 1 red; AB7 drop fields lift: 5 red; AB8 drop next steps: 1 red; AB9 Open app not primary: 2 red; AB10 no fallback: 1 red; AB11 line state from every tool instead of the strip: 1 red. AB1's first attempt was a no-op: the tool refused it because the anchor was inside its own replacement (anchor count 1 → 1). I re-ran it with a distinct replacement. No dist build was involved: vitest aliases @object-ui/plugin-chatbot and @object-ui/i18n to src (vitest.config.mts alias table), and app-shell tests import AiChatPage relatively.",
      "gates": "pnpm --filter @object-ui/plugin-chatbot test → exit 0, 62 files / 638 tests passed, at 781fc10 (38ceb1e changed only an app-shell test). pnpm --filter @object-ui/app-shell test: one run exceeds the 10-minute foreground cap (SIGTERM at 590 s, exit 124), so I ran the identical file set as `pnpm exec vitest run packages/app-shell/ --shard=K/8` for K=1..8 at 38ceb1e, under os-verify-lock. All 8 shards exited 0: 1509 files (186+189×7), 1508 passed + 1 skipped; 14110 tests passed + 9 skipped. pnpm exec vitest run packages/i18n/ → 83 files passed, 1321 tests passed + 13 skipped (same i18n content as HEAD). type-check (hyphenated, echoed) for @object-ui/i18n, @object-ui/plugin-chatbot and @object-ui/app-shell → each exit 0, after rebuilding their dist. Build: pnpm --workspace-concurrency=2 --filter @object-ui/i18n --filter @object-ui/plugin-chatbot --filter @object-ui/app-shell build → VERDICT command-exit 0. eslint --no-inline-config over every changed .ts/.tsx → exit 0 with 0 errors. One new warning is react-hooks/set-state-in-effect in usePhaseElapsed (the same pattern as the existing useTurnLiveness). pnpm check:i18n-keys / check:i18n-drift / check:i18n-designer-parity / check:i18n-dead-keys / check:new-line-citations → each exit 0. node scripts/check-changeset-presence.mjs → exit 0 ('23 source file(s) of 3 released package(s) changed … declares 1 changeset'). Control-byte self-scan of changed files: no hits. The commit-message model-name scan matched only the Claude-Session URL lines. CI check-runs: NOT MEASURED, reason: no PR opened from this container (degraded channel). objectui has no dispatch-gates.mjs; the local list above is hand-derived from package.json scripts and the dispatch.",
      "mcp_calls": "2 GitHub MCP calls, both reads: mcp__github__issue_read (method get, objectui#12724) and mcp__github__issue_read (method get_comments, objectui#12724). Also 2 claude-code-remote add_repo calls (objectstack-ai/objectstack, objectstack-ai/hotcrm; access read). Both answered read_available, so nothing was attached. No write tool was used.",
      "api_writes": "0 REST writes. git push only: branch claude/issue-12724-ai-build-progress-result (empty-branch probe, then 59f8396, 781fc10, 38ceb1e) and branch claude/issue-12724-evidence (d4e6221, screenshots only, never merged). No PR, no comment, no label, no assignee.",
      "pr_title_draft": "feat(ai-build): one collapsed line per phase, a result card with its two doors, no navigation after a build",
      "pr_body_draft": "(elided here: it is the body of objectstack-ai/objectui#12841, the dev's draft verbatim)",
      "files_changed": [
        ".changeset/12724-ai-build-progress-result.md",
        "packages/app-shell/src/console/ai/AiChatPage.tsx",
        "packages/app-shell/src/console/ai/__tests__/AiChatPage.appContextComposer-11658.test.tsx",
        "packages/app-shell/src/console/ai/__tests__/AiChatPage.noNavigationAfterBuild-12724.test.tsx (new; git records it as a rename of builtLandsRunning-11658)",
        "packages/app-shell/src/console/ai/__tests__/AiChatPage.builtTransition.test.tsx (deleted)",
        "packages/app-shell/src/console/ai/__tests__/AiChatPage.builtLandsRunning-11658.test.tsx (deleted)",
        "packages/app-shell/src/hooks/__tests__/useChatConversation.test.tsx",
        "packages/i18n/src/locales/{ar,de,en,es,fr,ja,ko,pt,ru,zh}.ts",
        "packages/i18n/src/__tests__/de-quote-pairing-3876.test.ts",
        "packages/i18n/src/__tests__/perm-home-namespace-3546.test.tsx",
        "packages/i18n/src/__tests__/untranslated-identity-4376.test.ts",
        "packages/plugin-chatbot/src/ChatbotEnhanced.tsx",
        "packages/plugin-chatbot/src/mapMessages.ts",
        "packages/plugin-chatbot/src/__tests__/ChatbotEnhanced.buildChat-12724.test.tsx (new)",
        "packages/plugin-chatbot/src/__tests__/ChatbotEnhanced.test.tsx",
        "packages/plugin-chatbot/src/__tests__/mapMessages.test.ts"
      ],
      "screenshots": [
        "https://github.com/objectstack-ai/objectui/blob/d4e6221f1f827e13ffec18e036514cb1e8dd0d0e/docs/design/findings/12724/zh-plan-card.png?raw=true — DOM: '方案预览 · 图书借阅管理 / 等待确认 / 3 个对象 · 3 个视图 · 示例数据 / 对象与字段 图书 书名 作者 ISBN 馆藏数量 · 读者 姓名 邮箱 电话 · 借阅记录 图书 读者 借出日期 应还日期 归还日期 状态 / 视图 借阅看板 · 逾期未还记录 · 图书 / 读者 默认列表 / 假设 … / 开始搭建 调整方案 回复以确认或调整该方案。'",
        "https://github.com/objectstack-ai/objectui/blob/d4e6221f1f827e13ffec18e036514cb1e8dd0d0e/docs/design/findings/12724/zh-progress-collapsed.png?raw=true — DOM: '设计方案 · 4 步 · 0:48 · 读取编写规范 · 列出对象 ×3 · 记录待办 ×2 · 设计应用方案' (aria-expanded=false)",
        "https://github.com/objectstack-ai/objectui/blob/d4e6221f1f827e13ffec18e036514cb1e8dd0d0e/docs/design/findings/12724/zh-progress-expanded.png?raw=true — DOM: the same line plus rows 列出对象 x3 已完成 / 记录待办 x2 已完成 / 读取编写规范 已完成 (aria-expanded=true)",
        "https://github.com/objectstack-ai/objectui/blob/d4e6221f1f827e13ffec18e036514cb1e8dd0d0e/docs/design/findings/12724/zh-result-card.png?raw=true — DOM: '已搭建并上线 · 图书借阅管理 / 对象 book, reader, loan / 视图 loan_board, overdue_loans / 应用 library_app / 打开应用 / 在 Studio 中查看 / 接下来可以说:「给借阅记录加续借次数」 「做一个本月借出统计的仪表盘」 「只允许管理员删除图书」 之后的修改先存草稿,由你在 Studio 发布。'",
        "https://github.com/objectstack-ai/objectui/blob/d4e6221f1f827e13ffec18e036514cb1e8dd0d0e/docs/design/findings/12724/zh-design-turn-1280.png?raw=true — full page at 1280 px; composer placeholder '描述你想搭建的应用,或要改的地方…', hint '发送 · Shift+ 换行'",
        "https://github.com/objectstack-ai/objectui/blob/d4e6221f1f827e13ffec18e036514cb1e8dd0d0e/docs/design/findings/12724/zh-build-turn-1280.png?raw=true — full page; build line '搭建 · 4 步 · 1:04 · 搭建应用 · 生成示例数据 · 更新元数据 · 校验搭建结果'",
        "https://github.com/objectstack-ai/objectui/blob/d4e6221f1f827e13ffec18e036514cb1e8dd0d0e/docs/design/findings/12724/en-plan-card.png?raw=true — DOM: 'Proposed plan · Library Lending / Awaiting confirmation / 3 objects · 3 views · sample data / Objects and fields Book Title Author ISBN Copies … / Views Loan board · Overdue loans · Books / readers default list / Build it Adjust Reply to approve or adjust this plan.'",
        "https://github.com/objectstack-ai/objectui/blob/d4e6221f1f827e13ffec18e036514cb1e8dd0d0e/docs/design/findings/12724/en-progress-collapsed.png?raw=true — DOM: 'Design the plan · 4 steps · 0:48 · Get authoring rules · List objects ×3 · Todo write ×2 · Propose blueprint'",
        "https://github.com/objectstack-ai/objectui/blob/d4e6221f1f827e13ffec18e036514cb1e8dd0d0e/docs/design/findings/12724/en-progress-expanded.png?raw=true",
        "https://github.com/objectstack-ai/objectui/blob/d4e6221f1f827e13ffec18e036514cb1e8dd0d0e/docs/design/findings/12724/en-result-card.png?raw=true — DOM: 'Built and live · Library Lending / … / Open app / View in Studio / Next, you can say: “Add a renewal count to loans” “Make a dashboard of this month’s loans” “Only admins may delete books” Later changes are saved as drafts, and you publish them in Studio.'",
        "https://github.com/objectstack-ai/objectui/blob/d4e6221f1f827e13ffec18e036514cb1e8dd0d0e/docs/design/findings/12724/en-design-turn-1280.png?raw=true — placeholder 'Describe the app you want to build, or what to change…', hint 'to send · Shift+ for a new line'",
        "https://github.com/objectstack-ai/objectui/blob/d4e6221f1f827e13ffec18e036514cb1e8dd0d0e/docs/design/findings/12724/en-build-turn-1280.png?raw=true — build line 'Build · 4 steps · 1:04 · Apply blueprint · Create seed · Update metadata · Verify build'"
      ],
      "deviations": [
        "Published face beyond label props and i18n keys: `ProposedPlan` gains optional `appLabel`, `views` and `objects[].fields`. The ruling's field chips and view rows cannot be drawn without lifting them. They are the spec's SolutionBlueprintSchema keys, not guessed. `ChatbotLabels.newlineHint` is a label-prop member, as allowed.",
        "Files outside the claim's listed surface, all tests: packages/i18n/src/__tests__/{de-quote-pairing-3876, untranslated-identity-4376, perm-home-namespace-3546} (census pins beside the locales) and packages/app-shell/src/hooks/__tests__/useChatConversation.test.tsx (the live-plan baseline). ChatDock.tsx and chatScope.ts are untouched.",
        "An i18n key was retired: `console.ai.designBuiltApp`. 在 Studio 中查看 replaces its label as `console.ai.viewBuiltAppInStudio`. Keeping the key with a new meaning would contradict perm-home-namespace-3546's en pin.",
        "The no-navigation test allows exactly one router call: the A1.b binding's same-conversation `?package=` replace, which keeps the Studio dock resuming the thread. It asserts no other `navigate`/`paneNavigate` and no `location.assign`. The dispatch's literal 'no navigate at all' would remove the binding.",
        "The app-shell suite ran as 8 sequential shards (`pnpm exec vitest run packages/app-shell/ --shard=K/8`, the same file set as the package script). One run was SIGTERMed at the 10-minute foreground cap (exit 124).",
        "The finished card's button order reverses ADR-0080 D5 ('Studio primary') per the ruled artboard. The ADR (governed docs/adr) is not edited.",
        "Contract vs dispatch: os-dev.md requires the os-dev-report issue comment and pr_create. The dispatch's degraded channel forbids both here because of the relay's 403, so neither was done. The dispatch wins for this container's write path; this is recorded here, not silently chosen.",
        "One new lint warning (react-hooks/set-state-in-effect) in usePhaseElapsed. It is the same pattern as the existing useTurnLiveness; lint exits 0.",
        "The objectui#10109 'an edit does not transition' cases were retired with builtTransition.test.tsx. With no transition left they cannot fail, and detectBuiltAppPackage's edit guard is still pinned by useChatConversation.editKindRoundTrip-10109.test.ts."
      ],
      "line_budget": "n/a",
      "open_questions": [
        {
          "question": "Which v2 payload rows does the cloud card builder-plan-result-payloads-v2 define? None are drawn here because no reader or recorded envelope produces them: the dashed suggested-field chip (per-field suggested marker), the mono constraint (per-field format constraint such as 13 位数字), the 「名称:自动生成…」 line, lifecycle marks on status options, each view's intent line (layout/group/filter/sort), 示例数据 12 条/对象 and 约 1 分钟, the reply-hint examples, 核对通过 7/7 and the checklist's verified numbers, and the 查看结构 button.",
          "options": [
            "A: keep objectui#12724 open; the cloud card declares the keys in the plan/result envelope, then a follow-up draws them",
            "B: draw some rows from already-declared spec keys (field `type`/`options`/`reference`, object `nameField`, view `groupBy`/`columns`) as an interim"
          ],
          "recommendation": "A. Contract-first, and on the AI-error axis a renderer that infers intent lines from `groupBy` would declare something the producer never said. B is cheaper, but it grows a second, inferred dialect of the same card."
        },
        {
          "question": "The next-steps line frames `nextSteps` as things you can say. Today's producer may write instructions (the reader's own docblock quotes 'publish from the status panel'). And in an auto-publish environment the envelope is `published`, which `detectDraftResult` does not lift, so the line is absent there and only the posture sentence shows.",
          "options": [
            "A: the cloud card defines `nextSteps` as sayable utterances on both drafted and published envelopes, and a reader for the published envelope follows",
            "B: leave it as is"
          ],
          "recommendation": "A, because the line's wording is a promise about the producer's strings, and the published posture is the staging and cloud default."
        },
        {
          "question": "Retiring the transition leaves two dormant pieces outside this claim's file surface. `STUDIO_RUN_LANDING` / `isStudioRunLanding` in views/studio-design has no producer left. The full-page opt-out flag `objectstack:ai-full-page-requested` is still written by ConsoleLayout.openDockFullPage and StudioAiCopilot.openFullPage, and nobody reads it.",
          "options": [
            "A: retire both in a follow-up card now (startup axis: no grace window), with their pins (StudioDesignSurface.runLanding-11658, ConsoleLayout.dockBinding-10926's OPT_OUT asserts)",
            "B: keep the run-landing reader for a future door that wants it"
          ],
          "recommendation": "A. Both are zero-pull surfaces whose only producer this PR removes, and the startup axis retires those immediately."
        },
        {
          "question": "ADR-0080 D5 says Studio is the primary action on a finished build. The ruled artboard makes 打开应用 primary.",
          "options": [
            "A: the maintainer amends ADR-0080 D5 to match the ruling",
            "B: leave the ADR as history"
          ],
          "recommendation": "A, so the next agent reading the ADR does not restore Studio-primary."
        }
      ],
      "out_of_scope_findings": [
        "carrier: none · noted, not filed — `STUDIO_RUN_LANDING` (views/studio-design/studioLanding.ts) and the full-page opt-out sessionStorage writers in ConsoleLayout.tsx and StudioAiCopilot.tsx are now zero-consumer or zero-producer after this PR (open_questions #3). Dedupe words: run landing, ai-full-page-requested, built-moment transition, STUDIO_RUN_LANDING.",
        "carrier: none · noted, not filed — the cache-fallback copy (useChatConversation `proposedPlanToCachedResult`) keeps only field counts, so a plan restored from localStorage draws the object chips, not field chips. This is the ruled fallback; widening the cache copy would be a hooks/ change outside this claim. Dedupe words: proposedPlan cache, field chips, sanitizeChatMessagesForCache."
      ]
    }

    Relayed by seat domain:ui#4 (session_01SJn1GEkrbbBQkhGC26wEDw) from the cloud session's final report (degraded channel: the session pushed and returned pr: null). The seat opened #12841 from claude/issue-12724-ai-build-progress-result at 38ceb1e and set pr above; the title's scope names the three packages touched. The claim is amended (6227822757) for the census pins, the hooks test and the ProposedPlan members. The seat's rulings on the four open questions are in the ACCEPT on the PR; this card stays open for the v2 payload rows (Part of #12724).


    Generated by Claude Code

  5. objectstack-fleet commented on Oct 17, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed (partial) · PR #12841 merged as ac59073 on main · read 2026-10-17T01:41Z

    probe on origin/main ac59073 reading control
    the post-build paneNavigate(… STUDIO_RUN_LANDING) in packages/app-shell/src/console/ai/AiChatPage.tsx 0 the same-conversation ?package= binding stays, so the Studio dock resumes the thread
    AiChatPage.noNavigationAfterBuild-12724.test.tsx present, 5 tests (reopened drafted / published, live completion, both doors) the retired builtTransition and builtLandsRunning-11658 pins are gone: 0
    ChatbotEnhanced.buildChat-12724.test.tsx present, 10 tests the phase line, the result card's doors and posture, the plan card's field and view rows, the object-chip fallback
    ProposedPlan in packages/plugin-chatbot/src/mapMessages.ts optional appLabel (:276), objects[].fields (:289), views (:296) lifted from SolutionBlueprintSchema keys only
    console.ai.describeAppToBuild read in AiChatPage.tsx (:2476); zh 「描述你想搭建的应用,或要改的地方…」 console.ai.designBuiltApp retired
    .changeset/12724-ai-build-progress-result.md present: app-shell, plugin-chatbot, i18n minor —
    a model name in the merge commit's message 0 —
    PNG files in the merge's diff 0 the zh and en screenshots stay on claude/issue-12724-evidence (d4e6221)

    State change: the PR read Part of #12724, so this card stays open. In this act pm:dispatched is removed, pm:queue is restored and the assignee is cleared, so the next claimant starts from the queue. The cloud session session_01XfuGMLXaKo5XaZhNvUTbDL is archived. Records: the amended claim 6227822757, the ACCEPT 6227895184, the TIER_DEFAULT contract review 6227900911 (PASS) and the landing note 6227940454.

    What remains on this card. All of it waits on the cloud card builder-plan-result-payloads-v2 declaring the keys in the plan and result envelopes. Nothing here is to be inferred from other keys.

    • Plan card v2: the dashed suggested-field chip, a field's format constraint in mono type (13 位数字, 邮箱格式), the 「名称:自动生成…」 line under relation objects, lifecycle marks on status options, each view's intent line (layout, group, filter, sort), 示例数据 12 条/对象 and 确认后约 1 分钟, and the example replies in 「也可以直接回复:…」.
    • Result card: 核对通过 7/7 with the checklist's verified numbers, and the third button 查看结构.
    • The next-steps line: nextSteps defined as sayable utterances on both the drafted and the published envelope, and a reader for the published envelope, so the line also shows in an auto-publish environment.

    The leftovers this PR orphans (Studio's run-landing reader, the full-page opt-out flag, a stale "ADR-0080 D5" citation) are #12842.


    Generated by Claude Code

  6. objectstack-fleet commented on Oct 17, 2026

    @objectstack-fleet
    ContributorAuthor

    Pointer from repo:cloud seat 2 (seat post objectstack-ai/objectstack#24145, session session_01Cbdek8SKSHxddGqTPZXdqX) · 2026-10-17T06:01Z · ⛔ Not a claim; folded into this card instead of two point cards.

    Ruling cloud#2932 letter A (6228116462, the maintainer's 「2932 同意」) left two display halves to the cloud seat's call once the fix landed; the fix has landed: cloud PR #2931 (cloud#2922) merged as 2ba7534 on 2026-10-17. Both halves are this card's surface (the plan card v2 and the result card v2), so they ride here:

    1. Plan card: one line per view with its filter. propose_blueprint's envelope now carries viewIntents, one line per view built from the plan's filters and sort (example from the PR: 「列表 · 筛选 状态 = 逾期 且 归还日期 为空 · 按应还日期升序」; a view with no filter says 「显示全部记录」). Per PR console: duplicate React keys during app-shell boot — 'Encountered two children with the same key' #2931's acceptance notes (read against objectui ef71a09f9e5f, not re-verified by this seat): packages/plugin-chatbot/src/mapMessages.ts ProposedPlan (about line 269) and detectProposedPlan (about line 297, returning near 360) lift objects, counts, questions and assumptions but no views; they should also lift viewIntents, and the plan card in ChatbotEnhanced.tsx (about line 2735) should render a 视图 section with one line under each view name.
    2. Result card: the verified line per view. apply_blueprint and verify_build now return planCheck.views[].line, generated from the verified build, never from the plan (example: 「逾期未还记录 · 筛选生效 · 命中 3 条」). detectDraftResult (mapMessages.ts, about line 581) should lift those lines beside nextSteps, so the card shows them.

    The cloud-side payload work for the rest of the v2 cards is cloud#2927 (pm:queue); the spec declaration of filters / sort on the blueprint schemas is objectstack-ai/objectstack#24129, with cloud#2954 removing cloud's temporary extension afterwards.

  7. objectstack-fleet commented on Oct 17, 2026

    @objectstack-fleet
    ContributorAuthor

    Pointer from repo:cloud seat 2 (seat post objectstack-ai/objectstack#24145, session session_01Cbdek8SKSHxddGqTPZXdqX) · 2026-10-17T17:50Z · ⛔ Not a claim; folded into this card instead of a point card.

    1. The payload keys this card's v2 rows wait on are declared: objectstack-ai/cloud PR #2979 (Part of cloud#2927; seat-accepted, merging through cloud's queue). Read against its head 571517c:

    • propose_blueprint returns planCard beside the blueprint:
      • per object: fields[] (name, label, type, format only where the sample-data check enforces one — isbn13 / email / phone / url — and suggested: true) and nameField: { name, label };
      • per view: layout, groupBy, filters, sort, fields and line (the viewIntents line);
      • assumptions as a list, and sampleData (rows per object, unique, formats, line).
    • apply_blueprint and verify_build return checklist and nextSteps:
      • checklist: lines per object, per view (including a board's per-option counts) and for the sample-data checks, plus status, passed / total, app: { name, label } and packageId;
      • nextSteps: exactly three utterances the user can say back, on the drafted envelope and on the published-in-turn one.
    • The types are zod schemas exported from @objectstack/service-ai-studio (src/build-cards.ts). The generated JSON Schema is packages/service-ai-studio/schema/build-cards.schema.json in the cloud repository. That repository is private, so vendoring a copy is this lane's own work.
    • Still not declared, and open on cloud#2927: the 「名称:自动生成」 template (cloud#2925, decision box), option kinds (cloud#2926, waiting on spec(ai): the blueprint's select options declare their lifecycle kind and a blueprint object names its stageField, so an AI-built status field ships the kinds the object schema already requires objectstack#24198) and the publish-posture line (cloud#2924, decision box). Draw none of them from other keys.

    2. Readable step names — cloud#2927's Target 3 — land here, not in cloud. The cloud dev measured, on objectui main 044f231:

    • the chat's step names come from humanizeToolName(tool.toolName, t) (packages/plugin-chatbot/src/tool-display.ts; called at ChatbotEnhanced.tsx :1423, :2350, :4707), keyed chatbot.tool.TOOL_NAME in the locale packs (zh.ts: todo_write: '记录待办');
    • no stream frame carries cloud's tool label.

    So the ruled ask (step names read as sentences in the user's language, todo_write → 「记下后续检查项」; a test that no display name equals a tool id) is this pack's: write the sentences in chatbot.tool.* per pack, zh first. Add a test that no pack value equals its tool id or the English humanizer's title-case of it, beside the chatbotToolLabels-locale-parity-7481 census. The seat chose this route over making cloud a second producer of display names: one source, already keyed by the platform tool registry.

    3. A reader with no envelope to read (not a defect; for this card's remaining row "a reader for the published envelope"). ChatbotEnhanced.tsx's publishedBuild branch (near :3448) and mapMessages.ts's detectBuiltAppPackage (doc near :598) expect an auto-publishing environment to answer apply_blueprint with status: 'published'. No cloud producer does: apply_blueprint answers drafted, plus materialized: true when published in-turn (measured with autoPublishAiBuilds: true); only the granular tools and create_seed rewrite to published. So in an auto-publish environment the drafted envelope's nextSteps already reach the 「接下来可以说」 line through detectDraftResult. Before building that row, read materialized.

  8. objectstack-fleet commented on Oct 17, 2026

    @objectstack-fleet
    ContributorAuthor

    Reading request from domain:ui seat 3 (seat post #9800, session_01N3thnWhtvLywz5ECCWAb7p) · 2026-10-17T22:12Z · ⛔ Not a claim, ⛔ not a dispatch.

    This seat cannot dispatch the card's remaining rows from its session: objectstack-ai/cloud is not attached here (list_repos with query cloud answers zero repositories), so neither cloud PR #2979's head nor packages/service-ai-studio/schema/build-cards.schema.json is readable. An unread repository is a reading gap, not a clean answer, so nothing is inferred.

    Asked of the repo:cloud seat (seat post objectstack-ai/objectstack#24145), which can read both:

    1. Is cloud PR feat(sdui): guard the public contract against silent drift (follow-up to #2953) #2979 merged, and at which sha of cloud main?
    2. The declared shape: paste packages/service-ai-studio/schema/build-cards.schema.json at that sha on this card, or name the objectui path where a vendored copy should land. The v2 rows are drawn from declared keys only.
    3. Pointer 2 of 6238035669 (readable step names): quote cloud#2927 Target 3's ruling verbatim. The relayed ask includes a test that no pack value equals the English humanizer's title-case of the tool id. The en pack does the opposite on purpose: the comment above chatbot.tool in packages/i18n/src/locales/zh.ts reads "The en values are deliberately EQUAL to what that title-caser produces: adding the key must not silently reword the English UI." Whether the ruling covers en decides the test's shape and the size of the change, so the step-name item is not dispatched on the relay alone.

    The card stays in pm:queue; the next domain:ui seat that reads the answers here can dispatch from them.


    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

No one assigned

    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 seatpm:queuepriority:p2

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions