Repository navigation
feat(plugin-chatbot): the plan card says how the build will land (objectui#12724) - #13508
Conversation
…ectui#12724) cloud#2924 ruling A declared `planCard.posture` on propose_blueprint's envelope (cloud PR #3111). The plan card now draws its `line` as the last item of the assumptions list, where the AiBuild artboard draws it, and keeps its earlier rows when the key is absent. The vendored build-cards schema moves to cloud f0ecef3a, whose only change is that key; the fixtures gain a first-build and a draft posture and the contract test checks both against it. Part of #12724 Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01R3ARF6ZEyBWW8EBT9we3eX
✅ 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
|
Contract reviewServed-tier: Face: the declaration face only ( ① Derived judgments
② Semver level
③ Boundary flags
Implemented-by: VERDICT: PASS Generated by Claude Code |
Requested by Sam · project thread
Clause-②: yes (the exported
ProposedPlanCardgains the optionalposture)Closes #12724
What
objectstack-ai/cloud declared
planCard.postureonpropose_blueprint's envelope (cloud#2924 ruling A, cloud PR #3111,f0ecef3a):{ mode: 'publish' | 'draft', liveRecords, line }. objectui drew nothing from it yet. The plan card now drawsposture.line(for example 「首次搭建直接上线;之后的修改先存草稿,由你发布」) as the last item of the assumptions list, where the AiBuild artboard draws it. A plan card without the key draws as before. If a plan has a posture but no assumptions, the section still renders and holds the posture line alone.mapMessages.ts:ProposedPlanCard.posture?: { mode; line }, lifted inliftPlanCardonly whenmodeis a declared value andlineis non-empty.liveRecordsis already in the line, so it is not lifted.ChatbotEnhanced.tsx: one<li data-testid="proposed-plan-posture" data-posture={mode}>after the assumptions.fixtures/build-cards.schema.ts: re-vendored verbatim at cloudf0ecef3a. The only change from thef7ab9cc8copy isplanCard.posture, and cloudmain36b07fdfhas the same schema byte for byte.buildCards.fixtures.ts:planEnvelope(lang, { posture: 'firstBuild' | 'draft' }), built with cloud's ownpostureFirstBuild/postureIntoLiveAppwording.content/docs/plugins/plugin-chatbot.mdx, and a changeset (@object-ui/plugin-chatbotminor).Why this closes #12724
The card's two remaining artboard rows have no producer key at cloud
main36b07fdf, and no cloud card plans one:The maintainer ruled in the project thread on 2026-10-25 to drop both from the artboard rather than wait for cloud. This posture row was the last declared key still undrawn.
Tests
pnpm exec vitest run packages/plugin-chatbot/: 83 files, 795 tests, all passed, including the newChatbotEnhanced.planCardPosture-12724.test.tsx. It covers zh and en first-build lines, the draft line, posture without assumptions, and two controls: no key, and an undeclared mode.buildCards.contract-12724.test.tschecks both new fixture payloads against the vendored schema.node scripts/check-changeset-presence.mjs✅.pnpm check:new-line-citations: 0 new.Adds no product-specific widget, dialog, hook or string (see AGENTS.md › Product-neutral renderer)
Generated by Claude Code