Skip to content

feat(use-cases): readiness tier on every scenario, from evidence - #381

Merged
objectstack-fleet[bot] merged 1 commit into
mainfrom
claude/pm-dispatch-objectos-ju9td1-issue-370
Nov 5, 2026
Merged

objectstack-fleet[bot] merged 1 commit into
mainfrom
claude/pm-dispatch-objectos-ju9td1-issue-370

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Closes #370

What changed

Every scenario on /use-cases/ now carries a readiness tier from a closed set of three:

Value en zh-Hans
today Works on the platform today 平台即可
integration Needs a connection to a system you run 需要接现有系统
rule Needs the business rule written down first 需要先写清制度
  • Data. content/pages/{en,zh-Hans}/use-cases.ts sets one readiness per scenario. Both locales use the same tier on every card. zh-Hant is derived from zh-Hans, and the other five locales use the English page, as before.
  • Type. src/content-pages/types.ts adds SCENARIO_READINESS (the closed list) and makes readiness a required field on MarketingPageScenario.
  • UI strings. src/content-pages/ui.ts adds the three labels and the legend lead-in for en and zh-Hans, plus the s2t derivation for zh-Hant. Other locales fall back to English.
  • Rendering. src/components/MarketingEvidencePage.astro:
    • Each scenario card shows its tier as a plain .chip under the title.
    • A one-line legend sits under the metrics, at the top of the page, and lists the three tags.
    • The chip colours are tokens only. The text is --ink-soft on --surface-sunk, the existing chip pair that already passes AA. A leading dot helps match a card to the legend: --green for today, --amber for integration, and a hollow --muted ring for rule. Indigo is not used, because it stays reserved for interaction.
  • Build assertion. It lives in the same loop that already checks each scenario's post, template and guide. A scenario whose readiness is missing or outside the closed set fails astro build. This is not a new gate.
  • Home page. The three scenario cards on the home page are rendered by MarketingHome.astro from homeCopy.useCases, not by this component, so they are not tagged. This is per the card's out-of-scope note.

Tiers from evidence

The rule: a scenario is today only if its linked template or post shows it working on the shipped platform. When in doubt, the more conservative tier wins.

Result: none of the ten scenarios qualifies as today.

  • The posts don't qualify. All ten are prescriptive ("the builder should…", "a useful answer should…"). None shows a run on the shipped platform.
  • The templates don't either. Each linked template ships its AI behaviour as a bring-your-own-LLM stub or scaffold, or has no AI at all. Template evidence is from objectstack-ai/templates at 960f24d.

The today tier stays in the closed set and in the legend. A scenario moves to it when its template or post shows it running, or when objectstack-ai/cloud#3567 measures it running (per #370, a measured result wins).

For the other nine cards, the tier names what is specific to the scenario and blocks it, beyond configuring a model provider.

# Scenario Tier Evidence
1 AI sales assistant integration content/blog/ai-sales-assistant/index.mdx:25: "Sales reps can update progress by voice or text. AI should summarize meetings…" The meeting and e-mail context lives in calendar, mail and meeting tools. No template; the guide is an article cluster.
2 AI ticket hub integration content/blog/ai-ticket-hub/index.mdx:25: "Issues arrive from email, chat, and a customer portal"; :98: "connect channels and normalize messages into cases". Template helpdesk/README.md:82-83: "flows fire but emails/IM don't go out yet" and "No real LLM call — by design; you bring your own".
3 AI expense audit integration content/blog/ai-expense-audit/index.mdx:24: "Employees upload invoices, receipts… AI extracts amount, date, vendor, and expense type"; :99: "extract receipt data and explanations" (OCR input). The card links no template.
4 AI procurement risk integration content/blog/ai-procurement-risk/index.mdx:36: "risk signals are distributed across procurement, ERP, quality, contract, and external data"; :100: "connect ERP, procurement, contract, and quality data". The procurement template has vendors, POs and receipts, but no AI and no quality data.
5 AI employee service center rule content/blog/ai-employee-service-center/index.mdx:38: "AI can create requests only through a governed service catalog"; :98: "build the catalog, knowledge base, requests, approvals, and fulfillment tasks". The hr template is directory, org chart and time-off only: it has no service catalog and no AI.
6 AI contract review rule content/blog/ai-contract-risk/index.mdx:36: "risk depends on policy, templates, amount, customer tier, and exception rules"; :79: "compare the term with the standard template". Template contracts/src/actions/extract_terms.action.ts:20,26-30: PDF text extraction is "caller responsibility", and the action is not wired into the stack ("intentionally left to your fork").
7 AI compliance and internal controls integration content/blog/ai-compliance-control/index.mdx:36: "evidence lives in many systems and attachments". The card's own line names IAM, contracts, procurement and logs. The compliance template is an evidence-collection workflow with no AI.
8 AI project management assistant rule content/blog/ai-project-risk-assistant/index.mdx:99: "start with delay, dependency, resource, and scope-change rules"; :62: "Create medium risk when critical-path work is two days late…". Template project/README.md:3: "AI risk / delay / resource forecasting ships as a bring-your-own-LLM scaffold (fields + flow stubs)".
9 AI content workbench integration content/blog/ai-content-workbench/index.mdx:99: "connect product docs, customer feedback, and existing articles"; :35: source material "fragmented across docs, interviews, sales notes, and analytics". Template content/README.md:125,129: "No analytics ingestion" and "No content-brief AI".
10 AI agent workbench rule content/blog/ai-agent-workbench/index.mdx:90-92: which actions run on their own, which ask for confirmation, and which need approval has to be explicit; :101-103: "define read-only query tools first… gate medium and high-risk actions with confirmation and approval". The card links no template.

Totals: integration 6, rule 4, today 0.

Verification

  • Reverse test of the build assertion. The fix was committed first. Then one value was blanked (readiness: '' on the sales card in content/pages/en/use-cases.ts), and astro build failed with the scenario error. The file was then restored from HEAD; its blob matches HEAD and git diff HEAD is empty. The output is below.
  • Gates. pnpm content:lint, pnpm check, pnpm build and pnpm seo:smoke. The results are below.
  • Browser. /use-cases/ in en and zh-Hans, at 1440 and 390, in light and dark: no horizontal overflow, the tags are readable, and the legend sits under the metrics. axe: no new violations.

Readings at 143e65f:

pnpm content:lint   exit 0   ✓ content lint passed (414 files, 46 glossary terms checked)
pnpm check          exit 0   Result (169 files): 0 errors, 0 warnings   (os-verify-lock VERDICT command-exit 0)
pnpm build          exit 0   [build] Complete! · content lint --dist links passed (115770 internal links in 987 built pages)   (VERDICT command-exit 0)
pnpm seo:smoke      exit 0   SEO smoke test passed (977 HTML pages checked; 657 sitemap URLs …)

Reverse test of the build assertion (scripts/ablation-replace.mjs, which checks the mutation on disk and restores from HEAD):

ablation-replace: ok mutation landed: anchor 1 -> 0, blob 572bb6aa91fa -> d5e098764bde
├─ /en/use-cases/index.html Scenario card en/use-cases #sales "AI sales assistant": readiness "" is not one of today | integration | rule
os-verify-lock: VERDICT command-exit 1
ablation-replace: ok restored: blob == HEAD (572bb6aa91fa) and `git diff HEAD` is empty

Browser (built site, astro preview): en and zh-Hans, 1440×750 and 390×844, light and dark, 8 runs.

  • Overflow. scrollWidth == clientWidth in all 8 runs. All 13 readiness chips (10 cards plus 3 in the legend) sit inside their box, with none clipped.
  • Legend. One line at 1440 in both locales. At 390 it wraps to 4 rows (en) and 2 rows (zh-Hans).
  • Readability. The chip is 12px, --ink-soft on --surface-sunk (the existing AA chip pair).
  • axe-core 4.10.2. 0 violations in all 8 runs.

Acceptance notes

  • today is unused. This follows from the evidence rule, not from a gap in the data. Moving a card to today takes a template or post that shows the scenario running, or a measured result from objectstack-ai/cloud#3567.
  • Unlisted expense template. objectstack-ai/templates has an expense package that the site's /templates/ catalog does not list. The expense card therefore links no template. Listing it is a catalog decision outside this card.

🤖 Generated with Claude Code

https://claude.ai/code/session_01FeA1nwBz1ohH65dvffUGKr

Each /use-cases/ scenario now states how far it is from running, from a
closed set: today (works on the platform today), integration (needs a
connection to a system you run), rule (needs the business rule written
down first).

- Data: one `readiness` per scenario in en and zh-Hans, the same tier in
  both. Tiers come from evidence: none of the ten linked posts or
  templates shows its scenario running on the shipped platform (the posts
  are prescriptive; the templates ship their AI as bring-your-own-LLM
  stubs), so no card is `today`: six are `integration`, four are `rule`.
- Type: `SCENARIO_READINESS` closed list; `readiness` required.
- UI: labels and a legend lead-in for en and zh-Hans (zh-Hant derived,
  other locales fall back to English).
- Render: a plain chip under each card title with a token-coloured dot,
  and a one-line legend under the metrics.
- Build: a missing or unknown value fails astro build, in the same loop
  that checks each scenario's post, template and guide.

The home page's scenario cards come from MarketingHome, not this
component, and are left untagged.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FeA1nwBz1ohH65dvffUGKr
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

席位核对

ACCEPT(形态与门禁)。落地要等维护者对下面「待裁一项」点头。

  • 形态:共 5 个文件,在认领申报的文件面内,一次提交 143e65f,基于 a239294,未触及受管面。
  • 前提实测:决策:官网面向业务用户——是否新增按业务职能组织的「使用场景」入口(参考 Claudeforce) #359 已由 feat(use-cases): /use-cases/ by business team, home scenario cards, Why nav item #368 关闭(a239294),Blocked-by 已解除。改前 /use-cases/ 的卡片没有任何就绪标注。
  • 门禁 check-runs:head 143e65f 上,Build and deploy = success;Post-deploy probe = skipped,PR 上按设计跳过。本地四项门禁全部 exit 0。
  • 反证:把 sales 卡的 readiness 置空后,astro build 失败,报错为 readiness "" is not one of today | integration | rule。恢复后 blob 与 HEAD 一致,git diff 为空。
  • 抽查读数:
    • 截图看过 en/zh-Hans 的 1440 和 390,亮色和暗色都看了。chip 在卡片标题下方,没有溢出。
    • axe 跑了 8 轮,0 violations。
    • 10 张卡在 en 和 zh-Hans 的分档一致:6 张 integration、4 张 rule、0 张 today。逐卡证据见正文表格。
  • 待裁一项(已呈维护者):
    • 没有一张卡达到 today。依据是:10 篇文章都是规范性的写法,链接的模板里 AI 都是自带 LLM 的桩,或者根本没有 AI。
    • 席位推荐 A:如实上线,图例里保留 today。等有模板或文章演示、或 cloud#3567 实测跑通,再给对应卡片升档。
  • 接受的偏差:首页 3 张场景卡由 MarketingHome.astro 渲染,这次没有打标签,因为不在认领文件面内。
  • 范围外去向:
    • templates 仓库 packages/hr/README.md:5 的 StackBlitz 徽章链到了 todo 模板。属于他仓,记在本评论里,不在本仓立卡。
    • templates 有 expense 包,但站点模板目录没有列出。这是目录取舍,记录在此。
  • 落地条款:等维护者裁定待裁一项并点头 → pr_ready → 合并队列 → 确认部署和 probe。

Generated by Claude Code

@objectstack-fleet
objectstack-fleet Bot marked this pull request as ready for review November 5, 2026 00:38
@objectstack-fleet
objectstack-fleet Bot added this pull request to the merge queue Nov 5, 2026
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

Ruled: the maintainer, 2026-11-05, in the seat's session, answering the seat's line 369c 208A 183① 181并入 370A 改AGENTS (with the four merges): 「同意」.

370A: ship the tiers as measured, with 0 today, 6 integration and 4 rule. today stays in the legend. A card moves up only when a template or post demonstrates it on the shipped platform, or when cloud#3567 measures it running.


Generated by Claude Code

Merged via the queue into main with commit 62f74aa Nov 5, 2026
2 checks passed
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

Landed. The maintainer approved the merge in the seat's session (2026-11-05): 「合 #378 #379 #380 #381.」

reading value
merge commit on main 62f74aa (merge queue)
push deploy covering it Build and deploy on 62f74aa: success (the runs on intermediate queue merges were superseded)
Post-deploy probe on 62f74aa success

#370 closed by this PR; pm:dispatched removed.


Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

/use-cases/: an honest readiness tier on every scenario — works today / needs an integration / needs the rule written down first

1 participant