Repository navigation
[ADR-0057] P4 follow-ups — live handoff verification + context-carrying upgrade (cloud#817) #2443
Description
Activity
xuyushun441-sys commented
on Aug 3, 2026 ContributorMore actions状态记录(2026-08-03,PM 会话)
本单等的不是决策而是资源:task 1(live 端到端验证)需要一个 AI Gateway 可达的环境(有效
AI_GATEWAY_API_KEY+AI_GATEWAY_MODEL),由维护者提供;task 2 依赖 cloud#817;task 3 可随任一波 polish 顺手做。摘
needs-user-decision(无未决判断);标记为 blocked-on-environment,key 到位后 task 1 可直接派发。
Generated by Claude Code
Generated by Claude Code
分诊:
pm:on-hold(三要素见下)。⚠️ 三项任务里两项前提已过时 —— 本单实际只剩 task 1。2026-08-03 的 PM 评论已判定「等的不是决策而是资源」并摘掉
needs-user-decision,但没有换上任何pm:*标签 ⇒ 此后每轮 sweep 都把它当未分诊新单重新捞起。本轮补上状态标签,同时做过时前提检查,结果比原判更收敛。逐任务过时前提检查(读
origin/main与已合并 PR)任务 原前提 现状 处置 1 · live 端到端验证 需 AI Gateway 可达环境 + 有效 key ✅ 仍然成立 —— PR #2444 正文亲自声明:完整 LLM 驱动的浏览器 e2e 需 run-stack+ provider key + seat,CI/sandbox 不可达,故改用真实 wiring 的集成测试替代,并留下一份「Manual staging proof」步骤待环境就绪时跑本单剩余的唯一内容 2 · cloud#817 上下文携带升级 待 cloud#817 落地后消费 ❌ 已交付,前提作废 —— cloud#817 已 closed(completed,2026-07-13,实现于 cloud#819),契约定为 (b) parentConversationId首轮兑现;objectui 消费端由 PR #2444 于 2026-07-13 11:04Z MERGED(useObjectChat接受parentConversationId、withHandoffContext纯函数合并、首轮只发一次 + reload 不重发,含 5 个新用例)出范围,勿重做 3 · FAB 关闭 polish " FloatingChatbot/FloatingChatbotProviderexpose no external close control today"❌ 双重过时 ——(a) FloatingChatbotProvider现在就导出close()(FloatingChatbotProvider.tsx,FloatingChatbotContextValue含open/close/toggle/toggleFullscreen);(b) 更要紧的是ConsoleFloatingChatbot.tsx已从 main 删除 —— ADR-0057 P3 收尾清理移除了整条 console 浮层路径,FAB 现在打开的是ChatDock(layout/ConsoleChatbotFab.tsx+layout/ChatDock.tsx),原描述的「浮层不自动关闭」这个形状已不可能发生出范围,已被架构变更消解 ⇒ 本单等价于「在一个 AI Gateway 可达的环境里,跑 PR #2444 留下的那份 staging 走查,拿 ADR-0054 浏览器实证」。⛔ 不改标为
pm:queue:它不是代码任务,派给 dev agent 只会得到「环境不可达」的空跑(#2439 授权会话当初正是被ai-gateway.vercel.sh的 403 CONNECT 挡住,不是代码或 key 的问题)。hold 三要素
- 日期:2026-08-06(承接 2026-08-03 的 blocked-on-environment 判定,本轮补标签并收窄范围);
- 理由:剩余唯一任务需要维护者提供资源 —— 一个 Vercel AI Gateway 可达的环境 + 有效
AI_GATEWAY_API_KEY/AI_GATEWAY_MODEL(如真实openai/gpt-4o-mini)+ 一个 seat;代码侧两条已分别由 cloud#819 与 objectui#2444 交付; - 重启条件:key 与可达环境到位后即可解除,按 PR feat(console-ai): ask→build handoff carries conversation context + live verification (ADR-0057 P4) #2444 正文「Manual staging proof」段落逐步走:
ask问一个 build 形状的问题 → 出现「Open in Builder →」卡 → 点击 →/ai/build首个 chat POST body 带context.parentConversationId(ask 线程 id)、且 reload 不重发。⚠️ 解除时只按 task 1 定价,⛔ 不要照正文三项估工。
建议合批:这条与 cloud 侧几条同样「只差一次人工/真实环境走查」的挂起件(cloud#844、cloud#787 的发现 B、cloud#1020)沉没成本相同 —— 都是「安排一次有真实 key 的走查」。
⚠️ 建议维护者安排环境时一次覆盖四条,只付一次环境成本。⛔ 本座位不代拍,仅提请。查重:三仓搜
parentConversationId/suggest_builder/builder_handoff/ ADR-0057 —— 未发现第二个仍在流通的派发入口;同批处理的 #2412(P1–P4 工单)已按 ADR Status 行自陈的 IMPLEMENTED IN FULL 关闭,epic #2409 已于 2026-07-14 关为 completed。本评论来自分诊座位 Routine(#5474 试点),不构成认领。
Generated by Claude Code
- addeddomain:devxobjectui devx stream: fix lands on .github/, scripts/ or release pipeline — devx lane cross-repoobjectui devx stream: fix lands on .github/, scripts/ or release pipeline — devx lane cross-repo
on Aug 23, 2026 Triage:
domain:devx(lane only —pm:on-holduntouched). Landing:docs/adr/**andscripts/dev-local/**— verification tooling and the ADR record, not product surface.Routed via the maintainer direct-dispatch channel, this session, verbatim: 「然后 批 4–5」. PM session
session_0124Qg8rLvpXnQDwCmpKUmaJ. objectui three-stream split (maintainer 2026-08-21); not a Routine triage fire — the triage seat may re-grade.
Generated by Claude Code
⭐ CONVERTED —
pm:on-hold→pm:awaiting-maintainer, with aMaintainer-action:line. ⛔ This card was never waiting on a predicate; it is waiting on a person.PM seat
domain:devx @ objectui, sessionsession_01FhBNJcLRZLe8M87VcUgpKr, 2026-09-13T15:18Z. objectui#8587 conversion sweep (director seat, decision batch #128 item 3).Why this is a state change and ⛔ not a
Restart-when:lineobjectui#8587's ruling buckets the held population, and this card falls squarely in one of them, verbatim:
13 waiting on a ruling | ⛔ not
pm:on-hold: per the six states a card waiting on a person ispm:awaiting-maintainerwith aMaintainer-action:line …⇒ Triage's own 2026-08-06 hold (
#issuecomment-5203720778) already established that, and said so in as many words:⛔ 不改标为
pm:queue:它不是代码任务,派给 dev agent 只会得到「环境不可达」的空跑(#2439 授权会话当初正是被ai-gateway.vercel.sh的 403 CONNECT 挡住,不是代码或 key 的问题)。⇒ ⭐ A
Restart-when:probe would be a fiction here: nogit grep, lockfile read or pin can observe 「a maintainer has provisioned a gateway-reachable environment」. Writing one would satisfy the sweep's letter and defeat its purpose.Maintainer-action:— what is actually being asked forMaintainer-action: provide a Vercel-AI-Gateway-REACHABLE environment with a valid AI_GATEWAY_API_KEY / AI_GATEWAY_MODEL (e.g. a real openai/gpt-4o-mini) and a seat, then the remaining task runs. Then-do: PR objectui#2444's "Manual staging proof" walkthrough — `ask` a build-shaped question -> an "Open in Builder →" card appears -> click it -> the first /ai/build chat POST body carries context.parentConversationId. Blocking-evidence: objectui#2439's authorised session was stopped by a 403 CONNECT to ai-gateway.vercel.sh — ⛔ NOT a code or key defect.⭐ Two of the card's three tasks are ALREADY DEAD — carried forward so nobody re-does them
Triage's per-task obsolescence check, which this sweep re-confirms rather than re-runs:
task status 1 · live end-to-end verification ✅ the only remaining content — needs the environment above 2 · cloud#817 context carrying ❌ delivered; premise void. cloud#817 closed completed2026-07-13 (implemented in cloud#819); the objectui consumer landed in PR objectui#2444, merged 2026-07-13 11:04Z. ⛔ Out of scope, do not redo.3 · FAB close polish ❌ doubly obsolete. FloatingChatbotProvidernow exportsclose(), and — more decisively —ConsoleFloatingChatbot.tsxwas deleted frommainin ADR-0057 P3 cleanup. The FAB now opensChatDock. ⇒ ⛔ the described shape can no longer occur.⇒ ⭐ The card's title still promises three follow-ups; two of them cannot happen. That is exactly the hazard objectui#8587 exists to end — ⛔ and it is why the scope narrowing belongs in a comment a reader meets, not in a triage thread they have to excavate.
⚠️ The history this card records about the sweep itself2026-08-03 的 PM 评论已判定「等的不是决策而是资源」并摘掉
needs-user-decision,但没有换上任何pm:*标签 ⇒ 此后每轮 sweep 都把它当未分诊新单重新捞起。⇒ ⭐⭐ A card left with NO
pm:*label was re-caught as untriaged by every subsequent sweep. That is the mirror of objectui#8587's main defect: a hold with no predicate is never re-measured, and a card with no state is re-measured forever. ⛔ Both are failures of the same missing thing — a machine-readable state.pm:on-hold→pm:awaiting-maintainer;domain:devxkept; ⛔ nopriority:*produced — this card carries none and this seat does not grade. Terminal state read back below.
Generated by Claude Code
objectstack-fleet commented
on Sep 27, 2026 ContributorMore actionsClosed
not_plannedon the maintainer's word: the live end-to-end proof of the ask → build handoff will not be run from this cardTriage seat (objectstack-wide, seat post objectstack-ai/objectstack#6015) ·
session_01W89enF2dYV7K4N2Fbfj33f· 2026-09-27T03:13Z.Provenance. The instruction is the maintainer's. The words, verbatim: 「Governed Surface Queue Guard 已加;9430 关;7696 关;objectui#7388 关;」 and 「2443 关」. Where: the maintainer's chat with this session (
session_01W89enF2dYV7K4N2Fbfj33f), 2026-09-27. It answered the second batch ofpm:awaiting-maintainercards, which this seat presented card by card.- What shipped and stays: the "Open in Builder →" handoff: cloud#818 (the
suggest_buildersignal tool and thebuilder_handoffskill) and objectui#2439 (the card, the navigation and the seeded prompt). Both are unit-tested and CI-green. - What is not done: task 1, the live proof that the real
askagent choosessuggest_builderfor a build-shaped request. It needs a Vercel-AI-Gateway-reachable environment, which no seat has. The enterprise AI flow belongs to cloud's own QA, not to this repo's queue. - What would reopen it: a report that the card does not appear, or goes to the wrong place, on a real deployment.
- What shipped and stays: the "Open in Builder →" handoff: cloud#818 (the
Self-contained follow-up work order for ADR-0057 P4 (ask→build explicit handoff). Written for an agent with no prior context. Rolls up to epic #2409.
Background (already shipped — do NOT rebuild)
ADR-0057 P4 landed the explicit "Open in Builder →" handoff across two repos:
@objectstack/service-ai-studiogained asuggest_buildersignal tool + an ask-onlybuilder_handoffskill; theaskagent's instructions now call it to decline-and-redirect an authoring request (ADR-0063). Handler echoes{ status: 'build_handoff', handoff: 'build', prompt, packageId? }. Merged: objectstack-ai/cloud#818.plugin-chatbotdetectBuilderHandofflifts that result onto the tool invocation;ChatbotEnhancedrenders the "Open in Builder →" card (onOpenBuilderprop).app-shellwires the full-pageAiChatPage(ask) + the FAB to navigate to/ai/build?package=…&handoffPrompt=…; the build surface seeds that prompt as its first message. Merged: feat(console-ai): explicit "Open in Builder →" ask→build handoff (ADR-0057 P4) #2439.Both sides are unit-tested and CI-green. Read:
docs/adr/0057-console-ai-chat-one-conversation-docked.md, cloud ADR-0063 (two agents, surface-bound), ADR-0013 (durable turns).Tasks
1 · Live end-to-end verification (ADR-0054 browser proof)
The one step not verified at merge time: the
askagent actually choosing to callsuggest_builder. It was blocked in the authoring session only by that environment's egress policy denyingai-gateway.vercel.sh(403 CONNECT) — not by code or key.In an environment where the Vercel AI Gateway is reachable (a valid
AI_GATEWAY_API_KEY+AI_GATEWAY_MODEL, e.g. a realopenai/gpt-4o-mini):cloud/scripts/dev-local/run-stack.sh --with-ui --seed --keep,OBJECTUI_ROOT=<objectui>); put the key incloud/scripts/dev-local/.env.local(gitignored).POST /api/v1/ai/agents/ask/chatwith a build-shaped message (e.g. "add a priority field to the tasks object") → the stream must contain asuggest_buildertool call whose result carriesstatus: 'build_handoff'.ask, send that request → the "Open in Builder →" card renders → click → lands on/ai/build?package=…&handoffPrompt=…and the seeded prompt auto-sends. Attach the screenshot(s).2 · cloud#817 — context-carrying handoff (upgrade v1)
Today v1 carries only
{ prompt, packageId? }. Upgrade the handoff to carry the ask thread's conversation context into the Builder (durable-turn reference, ADR-0013), sobuildresumes with what the user already discussed — not just a one-line prompt.suggest_buildercontract (or add a handoff-context endpoint) to reference the source conversation/turn; define what transfers.onOpenBuilderpath (generalizeassistant/assistantBus.tsper the ADR) instead of only the URLhandoffPrompt; seed the Builder from the carried context.3 · FAB dismissal polish (minor)
When "Open in Builder →" is clicked from the console FAB (
ConsoleFloatingChatbot), the floating overlay does not auto-close —FloatingChatbot/FloatingChatbotProviderexpose no external close control today. Add one so the FAB dismisses when it hands off to the full-page Builder (the full-pageAiChatPagehandoff already replaces the view, so only the FAB needs this).References
Epic #2409 · work order #2412 · ADR
docs/adr/0057-console-ai-chat-one-conversation-docked.md· merged P4: objectstack-ai/cloud#818 + #2439 · cloud#817 (context-handoff, task 2).