fix(ui): the maker's edit-mode starter offers sample data, not an automation v1 cannot build (#7709) - #7766
Merged
Merged
Conversation
…omation v1 cannot build The fourth edit-mode start chip — shown when the maker is bound to an existing app (`?package=`) — asked for 「加一个自动化 —— 审批、状态流转或通知」. Approval, status flow and notification are all refused by ADR-0112 v1 (cloud#1956 / PR #1970), and the measured behaviour on the sibling chip family was not a refusal but a silent degrade into a view, so the product recommended an automation and would have handed back a page. Rewording it was not available: a field, a view or a dashboard duplicates one of the three chips beside it. Product ruling (epic cloud#1955): replace it with sample data. The three surviving chips all add STRUCTURE; what an app that already has objects most often lacks is DATA, and `seed` is on v1's authoring whitelist (`V1_METADATA_TYPES`, commented "sample data"). `console.ai.suggestions.editApp.addAutomation` is now `addSampleData` in all ten packs and in the call-site `defaultValue` fallback, which is a second copy of the same string. A REVERT note beside the keys in every pack and at the call site names ADR-0112 v2 as where this chip's automation wording returns, and the retired sentence for each pack is kept verbatim in the new guard suite. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Contributor
✅ Console Performance Budget
The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it. 📦 Bundle Size Report
Size Limits
|
hotlong
marked this pull request as ready for review
September 5, 2026 16:28
This was referenced Sep 5, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #7709. Verified on
4d1e0be1b..objectui-shabump before this reaches the product — the chip a tenant sees does not change until that pin moves. cloud#2008 / PR #2009 is already queued and carries objectui#7710; this one needs the next bump after it.The ruling
The card laid out two honest options and said which one was right is a product call, not a translation fix. The ruling on the epic cloud#1955 lane, 2026-09-05, is option 2 — replace the fourth chip with sample data, and the reasoning is the shape of the family:
So: the three surviving chips all add STRUCTURE, and what an app that already HAS objects most often lacks is DATA. A page or a calendar view is the more niche ask; dropping to three starters throws a slot away and is asymmetric with the v2 restore.
Checked on contact rather than assumed, because a second broken promise would have been worse than the first:
seedis on v1's authoring whitelist — cloudpackages/service-ai-studio/src/authoring-whitelist.ts,V1_METADATA_TYPES, listed with the comment "seed(sample data)". The whitelist is version-scoped, not mode-scoped, and its own header states that every authoring path reads it and nothing else,apply_edit— the edit-mode path — named among them. So the maker bound to an existing app can author this, and the new chip is not a second refusal.What was wrong
editAppSuggestions()renders four starters for the maker bound to an existing app (?package=). The fourth wasconsole.ai.suggestions.editApp.addAutomation:Add an automation — an approval, a status flow, or a notification.Approval, status flow and notification are all refused by ADR-0112 v1 (cloud#1956 / PR #1970). The measured failure mode on the sibling chip family (cloud#1984) was not a refusal but a silent degrade into a view — so the product recommended an automation and would have handed back a page, with nothing telling the user that is what happened.
Rewording it the way the five from-scratch chips were reworded was not available: a field, a view or a dashboard duplicates one of the three chips beside it. That is exactly why the card was filed separately instead of folded into #7710.
What changed
The key is now
console.ai.suggestions.editApp.addSampleData, in all ten packs and in the call-sitedefaultValuefallback — the second copy of the same string, which #7710 measured is where a scope fix gets applied to only one of the two and keeps the old promise alive on precisely the surface with the least i18n. All ten packs carried a full translation of the old key (none was fallback-only), so ten real sentences went in, each written as a business ask in its own language rather than a literal rendering of "add sample data":Key renamed, not just revalued. A key literally named
addAutomationserving a sample-data sentence is the declared-vs-actual drift this repo keeps paying for, and it would send a future editor grepping for "automation" to the wrong conclusion. Renaming also makes the v2 restore additive:addAutomationcomes back under its own name instead of overwriting the chip that replaced it.check:i18n-driftreads the rename as a key-set change and correctly defers toall-locales-key-parity, which is green.The REVERT note is beside the keys in every pack and at the call site, following #7710's precedent, and it is specific to THIS chip: when ADR-0112 v2 re-adds flows and actions, this chip's automation wording comes back as
addAutomation. Each pack's retired sentence is kept verbatim in the new guard suite, so v2 does not have to reconstruct ten translations from git history.Verification
Host is macOS on Node v26.7.0; CI runs Node 22.x.
scripts/pm/os-verify-lock.shreportedUNLOCKED (declared)on every run — no usableflockon this host, so the shared verify lock was never taken and nothing was serialized. Declared, not claimed.pnpm --filter '@object-ui/i18n^...' --filter '@object-ui/app-shell^...' run buildpnpm --filter @object-ui/i18n --filter @object-ui/app-shell run type-checkDonepnpm exec vitest run packages/i18n/ packages/app-shell/src/console/ai/Test Files 84 passed (84),Tests 1162 passed (1162)pnpm exec vitest runon the five filesTest Files 5 passed (5),Tests 114 passed (114)pnpm lintTasks: 47 successful, 47 total,0 errors(2883 warnings, the same countmaincarries)eslint --no-inline-config --format jsonon the 13 changed filesAiChatPage.tsxand none in the edited regioncheck:i18n-keys,check:i18n-drift,check:control-bytescheck-changeset-presence.mjs,check-changeset-no-major.mjsThe whole table was re-run on the final commit
4d1e0be1b; exit codes were captured before any pipe.The two new suites
packages/i18n/src/__tests__/makerEditChips-v1-scope-7709.test.ts(42 cases) — all four keys present, non-empty and exactly four in each of the ten packs (which is also what proves no pack kept anaddAutomationbehind); the four chips are four DIFFERENT asks in every pack, which is the constraint that made "reword it like the others" unavailable in the first place; and no chip matches that pack's OWN automation/approval vocabulary. Scanning in each pack's own script matters: an English-only scan would have declared the five non-Latin packs clean without reading a character of them. The banned lists are #7710's automation vocabulary verbatim (one v1 boundary, two families reading it) plus an approval stem per locale, which this chip's wording needed and that list did not name.packages/app-shell/src/console/ai/__tests__/AiChatPage.editChips-7709.test.ts(4 cases) — the call-site copy: theeditingbranch is reached at all (and the from-scratch branch still returns five, so the suite cannot silently be guarding the wrong family), byte-equality with theenpack, and the same ban on the fallbacks.Non-vacuity
Both suites carry their control in the file rather than as a one-off run: each pack's banned list is re-run against the
addAutomationsentence that pack actually shipped, and must flag it. A list that silently stops matching therefore fails the suite instead of passing it. The call-site control additionally pins which three terms the retired English sentence must hit (automat,approv,notif), so deleting any one of them from the list turns the suite red rather than quietly narrowing it.Not done
No browser run. The card's re-check is "open the maker bound to an existing app on an empty thread and read the fourth starter", and that needs a tenant environment with a published package; the change is ten strings plus one
defaultValue, and both copies are pinned to each other and to the packs by the suites above. Stated rather than implied.🤖 Generated with Claude Code