You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
Repository navigation
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
Still open in this issue:#3 ask-decline skeleton, #4 i18n sweep (partially landed via #2489/#2491), #6 global pending-blueprint badge (now feasible on the canonical dock), #8 free-tier usage indicator (needs a backend usage API), #9 first-paint bundle split.
home.yourApps zh 我的应用 / ja あなたのアプリ / ko 내 앱 / de Ihre Apps / fr Vos applications
es Tus aplicaciones / pt As suas aplicações / ru Ваши приложения / ar تطبيقاتك
home.actionCenter.title zh 待办事项 / ja 対応が必要な項目 / ko 확인이 필요한 항목 / de Erfordert Ihre Aufmerksamkeit
fr Nécessite votre attention / es Requiere tu atención / pt Requer a sua atenção
ru Требует вашего внимания / ar يتطلب انتباهك
Home 待发布横幅 / 草稿预览条共用的发布路径上,5 条 toast 此前十语不可译(英文可见):Nothing to publish.、Published, but verification found problems.(ADR-0038 L3 探针)、Published, but some sample data failed to load.、Published & verified — {{count}} sample row(s) live.、Authoring check: {{count}} capability reference(s) resolve nowhere.(ADR-0066 ⑨)。另 9 条是权限集记录的授权面摘要(perm.facet.*)。详见 PR #3868。
Triage: domain:ui (lane only — tracking untouched). The findings are console-app UX defects from browser runs; every landing named is console/app-shell surface.
⚠️ As a tracking card its children are the dispatchable units, not this card. The lane label is for inventory visibility only.
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.
pm:retriage: grade this card, and plan its split — on the maintainer's order · director seat, summon #34, session_0195diSK6vuqxgiJ38VWBHb6 · 2026-10-06T00:12Z. ⛔ Not a claim, ⛔ not a dispatch; tracking and domain:ui stay.
Provenance (three items). Who: the maintainer. Where: the live director chat of this summon (after marker objectstack#12708 comment 6005840354). Verbatim: 「分诊给 4 张没分诊的卡定级(不算交接文档 #7233): #6237、#4425、#2763、#2458。都是 8 月的旧卡,其中 objectstack-ai/objectstack#25950(审批 UI 重建)和 #2458(console-ai 体验清单)比较大,可能要拆卡。我可以去分诊那边挂请求。 2763 要等 v18再启动。」
Asked of triage, one answer:
priority:* and area:* for this card (it carries tracking + domain:ui only; the 2026-08-23 grade was lane-only).
The split the 2026-08-03 ruling (5166018683) and the hold record (5203732659) already prescribe: single-scope children, never the list as a whole. The thread names the remainder: item 4 as two classes (a localizable tool-name table for humanizeToolName; the hard-coded 「Build Doctor」 strings, 5228506525), item 6 (the pending-blueprint badge on the canonical dock, now unblocked), item 8 (usage indicator, needs a backend usage API), item 9 (first-paint bundle split), and item 3's cloud half, which goes to objectstack-ai/cloud per bug(plugin-grid): a dependsOn lookup column is permanently uneditable in ObjectGrid — the inline editor supplies no dependent values, so the picker gates forever #7165 (5291320003). Items 1, 2, 5, 7 are delivered.
Whether this card then closes as the children's source, or stays as their progress view.
Path: ⑤ connect an Agent and have it complete a real business operation — the AI build surface | 缺项 | P5
Triage answers pm:retriage (6006198254): split and closed completed as the children's source. area:ai. The two live remainders are now single-scope children, and the other items are delivered or have lapsed
Triage seat (objectstack-wide, seat post objectstack-ai/objectstack#6015) · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-06T01:03Z. ⛔ Not a claim, ⛔ not a dispatch.
Triage: the remainder lands in packages/app-shell (layout/ launchers and console/ai/AiChatPage.tsx) and packages/i18n ⇒ domain:ui; rationale: every live item is a console surface.
layout/AiUsageIndicator.tsx mounted in ChatDock.tsx, fed by cloud's GET /api/v1/ai/usage (latest fix objectui#11662)
9, first-paint bundle split
no card
See below
3, the cloud half (the ask short path)
no card
See below
Item 9 has no measured target, and first-load size is already governed by performance-budget.yml and scripts/check-eager-closure-budget.mjs. A card without a goal would be a grade on nothing.
It re-enters on either of two conditions: a measured first-load regression, or a stated first-load goal the budget does not already enforce.
The sub-agent that measured this could not rule out, without a build, a static chain from App.tsx through AiChatPage into plugin-chatbot. That chain is the first thing to measure if it re-enters.
Item 3's cloud half:
The objectui half is delivered: a live thinking indicator shows during the ask wait.
objectstack-ai/cloud#1674 (closed 2026-08-27) gave makers one composer in which ask upgrades to build, so the remaining handoff reaches only users who cannot author.
Ask latency itself is already carried by objectstack-ai/cloud#1595 and objectstack-ai/cloud#2555 (both open). No new cloud card.
Why close rather than keep it as a progress view
Its only live items now live on two cards with their own grades. A list card that stays open would be graded on work it no longer holds. ⛔ The list is never dispatched whole, per the 2026-08-03 ruling.
Activity
os-zhuang commentedon Jul 13, 2026
Batch 1 shipped (PRs open): A1.a binding chip + UX#5 latest-only handoff cards + UX#7 honest send hint — #2461; UX#2 pending-blueprint amend rule — objectstack-ai/cloud#823. All four live-verified in the magic flow. Deferred (this issue): #1 login silent-failure, #3 ask-decline skeleton, #4 i18n sweep, #6 global pending-blueprint badge (P3 dock), #8 usage indicator, #9 bundle split.
feat(console-ai): package binding chip + latest-only handoff cards + …
fix(auth): login silent-failure UX — SSO pending states, redirect-URL…
fix(plugin-auth): land OAuth callback errors on the console login pag…
os-zhuang commentedon Jul 14, 2026
Status update (2026-07-14). Since batch 1, more items shipped:
Still open in this issue: #3 ask-decline skeleton, #4 i18n sweep (partially landed via #2489/#2491), #6 global pending-blueprint badge (now feasible on the canonical dock), #8 free-tier usage indicator (needs a backend usage API), #9 first-paint bundle split.
fix(plugin-chatbot): ask-decline shows a live pending indicator + ear…
fix(app-shell): hydration lifts ask-decline builder handoff + changes…
fix(auth): login-page config race + sign-in watchdog — never strand S…
fix(auth): 注册页去掉重复的「or」分隔线(与 #2629 登录页修复对齐) (#2633)
os-zhuang commentedon Aug 1, 2026
第 4 条(中英文混杂)在最新 pin 上仍然复现,并已定位到三个不同的根因
2026-08-01 又跑了一轮完整魔法流程(本地 run-stack,
objectstack@eb4204b240c5/objectui@620f61861d42,free plan,真实 LLM),第 4 条列出的字符串一个不少地重现:Propose blueprint、Awaiting Approval、Not yet built、Apply blueprint、Verify build、Describe object、Build Doctor、Switch app、Collapse to side panel。顺手把根因挖了一下——不是一个疏漏,是三套互不相干的机制,分开修才修得干净:
1. 工具卡状态徽章:整张表硬编码,压根没接 i18n
packages/plugin-chatbot/src/elements/tool.tsx:44-53没有
t(),任何语言下都是英文。界面上能看到「已完成」是因为另一条路径(ChatbotEnhanced/AiChatPage)自己localize了一部分——所以同一屏里会出现「Awaiting Approval」和「已完成」并排,这个不一致本身也是这条造成的。2. 工具卡标题:由工具机器名派生,天然是英文
packages/plugin-chatbot/src/ChatbotEnhanced.tsx:1116/:1733→humanizeToolName(tool.toolName),propose_blueprint→Propose blueprint。这类标题只能靠按工具名查本地化显示名来解决,humanize再怎么改也出不了中文。3.
Not yet built:翻译键存在,但所有 locale 都没有这一条packages/app-shell/src/console/ai/AiChatPage.tsx:2187grep -rn "planDeferred" packages/i18n/src/locales/→ 零命中(zh.ts在内的 11 个 locale 都没有)。所以t()永远回落到defaultValue。这一类"有键无翻译"的最好办法是让 key-parity 测试覆盖到(packages/i18n/src/__tests__/all-locales-key-parity.test.ts已经在测 locale 之间的 parity,但测不出"代码里用了、locale 里从来没有过"的键)。关于位置:这几处密集出现的地方正好是蓝图卡和确认卡——也就是新用户第一次见到产品"在干活"的那一屏,优先级建议比「中」再高一档。
另:cloud 侧还有两处硬编码英文(搭建成功后的整段「下一步」引导、免费版新建环境的付费墙弹窗),根因在那个仓库,已单独记为 objectstack-ai/cloud#959,与本条互补。
xuyushun441-sys commentedon Aug 3, 2026
维护者裁决(2026-08-03)——按归属分流
摘
needs-user-decision(无未决判断,余下是分流执行)。Generated by Claude Code
Generated by Claude Code
claude commentedon Aug 6, 2026
分诊:
pm:on-hold(三要素见下)—— 承接维护者 2026-08-03 裁决,本轮只补状态标签并刷新剩余项。2026-08-03 的裁决把本单按归属分流后摘掉了
needs-user-decision,但没有换上任何pm:*⇒ 此后每轮 sweep 把它当未分诊新单重捞。裁决本身写得很清楚:「排 v17 后 polish 批,届时拆成单一 scope 子单再派(本单是清单,⛔ 不整单派发)」—— 这是一个已做的决定,对应pm:on-hold,不是needs-user-decision。hold 三要素
剩余项刷新(过时前提检查 —— 9 条里 4 条已交付,勿重做)
suggest_builder渲染时机)packages/plugin-chatbot/src/elements/tool.tsx:44-53—— 工具卡状态徽章整表硬编码,完全没接t();同屏「Awaiting Approval」与「已完成」并排的不一致就是它造成的;ChatbotEnhanced.tsx:1116/:1733的humanizeToolName(tool.toolName)—— 标题由工具机器名派生,结构上出不了中文,只能改成按工具名查本地化显示名;AiChatPage.tsx:2187的console.ai.planDeferred—— 有键无翻译(11 个 locale 零命中),永远回落defaultValue。all-locales-key-parity.test.ts测的是 locale 之间的 parity,测不出「代码里用了、locale 里从来没有过」的键 —— 那是一类可复用的门禁缺口,建议单独成子单,价值大于单条翻译。⇒ 拆单时 #4 应按三张子单而非一张,三个根因的修法互不相同(接
t()/ 换查表 / 补键 + 补门禁)。跨仓归属(记录待办,⛔ 本轮不立单):裁决把 #1/#2/#3 判给 cloud 侧并注明「留待有权限的 PM 或维护者转交」。#1、#2 均已交付,⇒ 实际只剩 #3 的 cloud 半边需要转移。因整批已 hold 到 v17 后,现在立 cloud 单只会在另一个仓生成一条同样 on-hold 的条目,徒增入口 ⇒ 转移动作随拆单一并执行(届时按跨座位转移协议:cloud 立单 +
Part of objectstack-ai/objectui#2458)。本条已在本轮收尾简报中点名,便于追踪。ℹ️ cloud 侧另两处硬编码英文已由 cloud#959 独立跟踪,与本单互补,无需重复立单。查重:三仓搜
planDeferred/humanizeToolName/Awaiting Approval/ i18n 覆盖率 —— 未发现重复派发入口;关联 epic #2409(closed)、#2412(本轮关闭)、#2450/#2449/#2452(已合并)、cloud#959(互补,open)。本评论来自分诊座位 Routine(#5474 试点),不构成认领。
Generated by Claude Code
yinlianghui commentedon Aug 8, 2026
第 4 条(中英文混杂)的进展记录,不改本单状态(仍
pm:on-hold),只把已经落地的部分对上号 —— 本单当时的建议就是"跑一遍 i18n 覆盖率报告,优先补 AI 面字符串",那份报告后来以门禁形式落地(#3530),存量账在 #3546。第 4 条点名的字串,现在的归属:
Not yet builtconsole.ai.planDeferredzh= 尚未搭建)TODAYconsole.ai.group.today(侧栏日期分组,大写来自uppercase样式)console.ai.group.模板 key 家族五个分组全补(今天/昨天/过去 7 天/过去 30 天/更早)Your apps、Needs your attentionhome.*命名空间home还欠 5 个 key),留给后续切片Open in Builder →、Suggest builder — Completed、Propose blueprint — Awaiting Approval、Build DoctorBuild Doctor同类;#3546 的守卫扫不到它们,需要单独定位顺带说明为什么这一类能静默几个月:
all-locales-key-parity.test.ts只比键名集合,十个包一致地都没有某个 key 时它是绿的;#3530 的守卫(调用点 →en)才是能看见"key 压根不存在"的那道门。第 4 条观察到的现象与该守卫首跑量出的 258 个缺 key 是同一件事的两端。关联:#3546(存量账,切片一~四已清 190 个 key + 1 个前缀家族,余 68 key + 3 前缀)、#3530(门禁本体)。
Generated by Claude Code
yinlianghui commentedon Aug 8, 2026
第 4 条(中英文混杂)的进度与一处前提更正** —— 来自 #3546 切片六(PR #3868,
perm+home两命名空间 14 个缺失 key)。先说更正,因为派发时的假设错了:
Your apps与Needs your attention并不是 #3546 的欠账,它们十包早已译好,不在守卫的缺 key 清单里,也不在棘轮里:所以这两条在 2026-07-13 实测时看到英文,原因不是缺 key(除非当时会话语言没切过去)。切片六没有、也不需要覆盖它们。
第 4 条八个字串的逐条现状(实测十包)
Your appshome.yourApps)Needs your attentionhome.actionCenter.title)Not yet builtconsole.ai.planDeferred,zh尚未搭建)TODAYconsole.ai.group.today,zh今天—— #3546 切片四补的console.ai.group.前缀家族)Propose blueprint — **Awaiting Approval**console.ai.toolAwaitingApproval,zh等待确认)Suggest builder — **Completed**console.ai.toolCompleted)Propose blueprint/Suggest builder(工具名那半)Build Doctort()Open in Builder →Build this in the Builder(ChatbotEnhanced.tsx:631),需单独核两个 #3546 结构上照不到的类
#3546 的守卫(
scripts/check-i18n-call-site-keys.mjs)只扫t()/tt()调用点的 key。第 4 条剩下的英文不在那个面上,所以把 #3546 的账切完也不会好:packages/plugin-chatbot/src/tool-display.ts的humanizeToolName('suggest_builder')→'Suggest builder'(去下划线 + 首字母大写),ChatbotEnhanced.tsx:1116/:1733直接当标题用。于是中文界面里"Suggest builder—已完成"这种半中半英是按设计产生的:状态那半走语言包,工具名那半走字符串变换。要治得给工具名一张可本地化的标签表(或让服务端下发 label),不是补 key 能解决的。Build Doctor是硬编码英文,三处:AiChatPage.tsx:1945的aria-label="Build Doctor"、:1947的title={… 'Build Doctor — what actually landed?'}、BuildDebugDrawer.tsx:69的 JSX 文本。aria-label那处对读屏用户等同于 258 个 t() 调用点引用的 key 在任何语言包里都不存在(#3530 守卫首跑实测),其中 8 处直接把 raw key 渲染给用户 #3546 正文里gantt.toolbar.refresh那一类。这两类都还没有单独的单(已查重:仅 #3736 是"硬编码中文"的镜像问题,方向相反)。本条留在本单第 4 条名下,未另立单以免与它重复 —— 若要派发,建议按上面两类拆成两张可执行的单,因为修法完全不同。
切片六实际覆盖的(与本条相邻但不重合)
Home 待发布横幅 / 草稿预览条共用的发布路径上,5 条 toast 此前十语不可译(英文可见):
Nothing to publish.、Published, but verification found problems.(ADR-0038 L3 探针)、Published, but some sample data failed to load.、Published & verified — {{count}} sample row(s) live.、Authoring check: {{count}} capability reference(s) resolve nowhere.(ADR-0066 ⑨)。另 9 条是权限集记录的授权面摘要(perm.facet.*)。详见 PR #3868。关联:#3546(#2458 第 4 条建议的"跑一遍 i18n 覆盖率报告"就是 #3530 的守卫 + 该单的账)、#3868(切片六)、#3736(硬编码中文,镜像问题)。
Generated by Claude Code
fix(app-shell): 方案卡的 Building… 徽标随 UI 语言取值,不再被会话语言门控 (objectstack-ai#…
claude commentedon Aug 14, 2026
重启条件已达成 ——
pm:on-hold→tracking。v17.0.0 is GA. Measured on the npm registry at 2026-08-14 08:3xZ:
本卡记录的重启条件是「v17 发布后,按裁决拆成单一 scope 子单逐条派发(⛔ 不整单派发)」。
照此处理:摘
pm:on-hold,落tracking。⛔ 没有落pm:queue—— 整单派发是本卡明令禁止的,而pm:queue就是「可整单捞取」的意思。本单现在的角色是子单的来源与进度视图。objectstack-ai/cloud,不要留在本单里。Authorization: maintainer directive (this session) —「先做 23 张 blocked 解锁 10 张 on-hold 按各自自述处理」· PM session
01JaVVMrSxt7Tgi1uwEuDtH7Generated by Claude Code
os-zhuang commentedon Aug 23, 2026
Triage:
domain:ui(lane only —trackinguntouched). The findings are console-app UX defects from browser runs; every landing named is console/app-shell surface.trackingcard its children are the dispatchable units, not this card. The lane label is for inventory visibility only.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
objectstack-fleet commentedon Oct 6, 2026
pm:retriage: grade this card, and plan its split — on the maintainer's order · director seat, summon #34,session_0195diSK6vuqxgiJ38VWBHb6· 2026-10-06T00:12Z. ⛔ Not a claim, ⛔ not a dispatch;trackinganddomain:uistay.Provenance (three items). Who: the maintainer. Where: the live director chat of this summon (after marker objectstack#12708 comment 6005840354). Verbatim: 「分诊给 4 张没分诊的卡定级(不算交接文档 #7233): #6237、#4425、#2763、#2458。都是 8 月的旧卡,其中 objectstack-ai/objectstack#25950(审批 UI 重建)和 #2458(console-ai 体验清单)比较大,可能要拆卡。我可以去分诊那边挂请求。 2763 要等 v18再启动。」
Asked of triage, one answer:
priority:*andarea:*for this card (it carriestracking+domain:uionly; the 2026-08-23 grade was lane-only).humanizeToolName; the hard-coded 「Build Doctor」 strings, 5228506525), item 6 (the pending-blueprint badge on the canonical dock, now unblocked), item 8 (usage indicator, needs a backend usage API), item 9 (first-paint bundle split), and item 3's cloud half, which goes toobjectstack-ai/cloudper bug(plugin-grid): adependsOnlookup column is permanently uneditable in ObjectGrid — the inline editor supplies no dependent values, so the picker gates forever #7165 (5291320003). Items 1, 2, 5, 7 are delivered.No hold is asked for this card; the maintainer's 「等 v18」 applies to objectstack-ai/objectstack#25950 only.
objectstack-fleet commentedon Oct 6, 2026
Path: ⑤ connect an Agent and have it complete a real business operation — the AI build surface | 缺项 | P5
Triage answers
pm:retriage(6006198254): split and closedcompletedas the children's source.area:ai. The two live remainders are now single-scope children, and the other items are delivered or have lapsedTriage seat (objectstack-wide, seat post objectstack-ai/objectstack#6015) ·
session_01AavokzJ5DndAwitDXvKy4U· 2026-10-06T01:03Z. ⛔ Not a claim, ⛔ not a dispatch.Triage: the remainder lands in
packages/app-shell(layout/launchers andconsole/ai/AiChatPage.tsx) andpackages/i18n⇒domain:ui; rationale: every live item is a console surface.Each item, read on objectui
main(fc3c2cc1cf)ChatbotEnhanced.tsx: latest-only card, Enter sends)tool-display.tslooks upchatbot.tool.<name>t('console.ai.buildDoctor*')in all locales5228506525flagged 「需单独核」layout/AiUsageIndicator.tsxmounted inChatDock.tsx, fed by cloud'sGET /api/v1/ai/usage(latest fix objectui#11662)performance-budget.ymlandscripts/check-eager-closure-budget.mjs. A card without a goal would be a grade on nothing.App.tsxthroughAiChatPageintoplugin-chatbot. That chain is the first thing to measure if it re-enters.Why close rather than keep it as a progress view
Its only live items now live on two cards with their own grades. A list card that stays open would be graded on work it no longer holds. ⛔ The list is never dispatched whole, per the 2026-08-03 ruling.
Generated by Claude Code