From 95acfe0907d8c99f15affa6b883085c2edf3262b Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 6 Sep 2026 00:42:35 +0000 Subject: [PATCH] docs(setup): the AI Copilot checklist says what Setup actually ships MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Section 14 of the admin setup checklist told an admin to "Confirm the AI Copilot is enabled (Setup → AI)", to "Choose which skills to enable" and to "Configure data sensitivity rules". Setup ships no AI group, and neither of the other two screens exists. All three are resolved against the installed platform (@objectstack/* 17.3.0), the way test/docs-setup-navigation-names.test.ts builds its roster. No enable surface: the `ai` settings namespace behind Configuration → AI & Embedder has no master switch — its toggles are title generation, traces and prompt logging, its gestures are Test connection, Test embedder and Reset to environment defaults. The beta AI Assistant toggle under Configuration → Feature Flags ships off, and its key `ai_enabled` occurs nowhere in the installed platform but its own manifest and its four locale labels. What decides whether the Copilot answers is the provider, which defaults to Memory (echo — testing only), so the item became that check plus a denial. No per-skill enable surface: no Setup entry names skills and none of the eleven settings namespaces carries a skill key. `active` is metadata (default true, declared nowhere in src/skills), and the roster comes from allSkills — an app change. The item now points at Studio → AI → Skills for the roster and says the set is decided in the app. No AI redaction screen: the platform's only redactFields is an object's publicSharing block, which strips fields from share-token responses and has nothing to do with the Copilot. What limits the Copilot is field-level security, which administration/sharing-and-security already states is enforced for the Copilot like everywhere else, so the item sends the reader there. Every surviving path is bold, the shape the navigation guard's rule 2 resolves live — the parenthesised prose is why this line was invisible to both of its rules. zh-Hans uses the zh-CN language-pack labels; zh-Hant spells platform navigation in English. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_018xtjdpZFjgWh4Ad9Wcx68J --- ...up-checklist-ai-copilot-says-what-ships.md | 58 +++++++++++++++++++ content/docs/administration/setup.mdx | 10 ++-- content/docs/administration/setup.zh-Hans.mdx | 10 ++-- content/docs/administration/setup.zh-Hant.mdx | 10 ++-- 4 files changed, 76 insertions(+), 12 deletions(-) create mode 100644 .changeset/setup-checklist-ai-copilot-says-what-ships.md diff --git a/.changeset/setup-checklist-ai-copilot-says-what-ships.md b/.changeset/setup-checklist-ai-copilot-says-what-ships.md new file mode 100644 index 000000000..1a638085d --- /dev/null +++ b/.changeset/setup-checklist-ai-copilot-says-what-ships.md @@ -0,0 +1,58 @@ +--- +'hotcrm': patch +--- + +The admin setup checklist's **14. AI Copilot** section stops citing a `Setup → AI` +group that does not exist, and stops asking for two screens that do not ship. + +`administration/setup` line 136 read "Confirm the AI Copilot is enabled (Setup → +AI)" in all three faces — bare parenthesised prose, which is why it survived +every pass that cleared the navigation quarantine ledger: rule 2 of +`test/docs-setup-navigation-names.test.ts` matches a **bold** `**App → …**` +citation, and rule 1 cannot ban `AI`, a real *Studio* group label. The two +adjacent items were filed as suspected-but-unmeasured, and all three are +resolved here against the installed platform (`@objectstack/* 17.3.0`). + +**Setup ships no `AI` group.** Its nine are *Overview*, *Apps*, *People & +Organization*, *Access Control*, *Approvals*, *Configuration*, *Diagnostics*, +*Integrations*, *Advanced*; `AI` is a **Studio** group holding *Agents*, +*Tools* and *Skills*. Re-resolved the way the guard builds its roster — +`SETUP_APP.navigation` + `SETUP_NAV_CONTRIBUTIONS` + `SetupAppTranslations` +across the four shipped locales. + +**Nothing enables the Copilot.** The `ai` settings namespace behind +*Configuration → AI & Embedder* carries no master switch: its only toggles are +*Auto-summarize conversation titles*, *Record traces* and *Log full prompts*, +and its only gestures are *Test connection*, *Test embedder* and *Reset to +environment defaults*. The one control that looks like the switch — the beta +*AI Assistant* toggle in the `feature_flags` namespace (*Configuration → +Feature Flags*) — ships **off**, and the key `ai_enabled` occurs nowhere in the +installed platform except its own manifest and its four locale labels. What +does decide whether the Copilot can answer is the **provider**, which defaults +to *Memory (echo — testing only)*: an environment that never sets one has an +assistant that replays the question. So the item became that check plus a +denial, not a redirect to a plausible screen. + +**There is no per-skill enable surface in Setup.** No Setup entry names skills, +and none of the eleven settings namespaces carries a skill key. Skills are +metadata: `SkillSchema` carries `active` (default `true`), the six HotCRM +skills declare it nowhere and therefore all ship active, and the roster comes +from `allSkills` in `src/skills/index.ts` — an app change, documented under +Customization › AI Skills. The item now points at **Studio → AI → Skills** for +the roster and says the set is decided in the app. + +**There are no AI sensitivity or redaction rules to configure.** The only +`redactFields` the platform defines belongs to an object's `publicSharing` +block — "field names removed from records served via a share token", which +`crm_knowledge_article` uses for share links and which has nothing to do with +the Copilot. What limits what the Copilot may read is field-level security, as +`administration/sharing-and-security` already states in its own words: FLS is +enforced in list views, reports, the API and the AI Copilot alike, and the +Copilot reads as the signed-in user. The item now sends the reader there. + +Every surviving path is written in **bold**, the shape rule 2 of the guard +resolves live, rather than the parenthesised prose no rule could see. The +localized faces keep their conventions: zh-Hans uses the zh-CN language-pack +labels (**设置 → 配置 → AI 与 Embedder**, **Studio → AI → 技能**), zh-Hant +spells platform navigation in English because the console falls back to +Simplified. diff --git a/content/docs/administration/setup.mdx b/content/docs/administration/setup.mdx index e6838a54f..fe9da43c6 100644 --- a/content/docs/administration/setup.mdx +++ b/content/docs/administration/setup.mdx @@ -133,10 +133,12 @@ There is nothing to seed called *Sales Knowledge*, *Product Information* or *Com ### 14. AI Copilot -- [ ] Confirm the AI Copilot is enabled (Setup → AI) -- [ ] Choose which skills to enable -- [ ] Run a sample query (*"Give me Customer 360 on [test account]"*) to verify -- [ ] Configure data sensitivity rules — which fields the Copilot must redact +There is no *AI* group in Setup, and no screen turns the Copilot on. Setup carries exactly two AI surfaces: **Setup → Configuration → AI & Embedder**, which configures the provider, model and embedder, and a beta *AI Assistant* toggle under **Setup → Configuration → Feature Flags** that ships off and that nothing in the platform reads. What makes the Copilot answer is a configured provider; which skills it can run belongs to the app, not to setup. *AI* as a navigation group is **Studio → AI** (Agents / Tools / Skills). + +- [ ] Confirm the provider at **Setup → Configuration → AI & Embedder** is a real one — it defaults to *Memory (echo — testing only)*, which replays your input instead of answering — then press *Test connection* +- [ ] Run a sample query (*"Give me Customer 360 on [test account]"*) to verify — an answer that cites real records means the provider is live +- [ ] Review the skills the Copilot ships with at **Studio → AI → Skills** — they all ship active, and which ones exist is decided in the app rather than picked here (see [Skills](/docs/ai-copilot/skills)) +- [ ] Look at field-level security rather than for AI redaction rules: the Copilot reads as the signed-in user, so a field masked on their profile never reaches it (see [Sharing & security](/docs/administration/sharing-and-security)) ## ✅ Day 6 — Dashboards & reports diff --git a/content/docs/administration/setup.zh-Hans.mdx b/content/docs/administration/setup.zh-Hans.mdx index 40c5deace..dc410c9d6 100644 --- a/content/docs/administration/setup.zh-Hans.mdx +++ b/content/docs/administration/setup.zh-Hans.mdx @@ -133,10 +133,12 @@ HotCRM 只附带**一个**知识对象,而不是一组知识库。下面每一 ### 14. AI Copilot -- [ ] 确认 AI Copilot 已启用(设置 → AI) -- [ ] 选择要启用哪些技能 -- [ ] 运行一个示例查询(*“给我 [测试客户] 的 Customer 360”*)以验证 -- [ ] 配置数据敏感性规则 —— Copilot 必须脱敏哪些字段 +设置里没有 *AI* 分组,也没有任何界面能把 Copilot 打开。设置里与 AI 相关的只有两处:**设置 → 配置 → AI 与 Embedder**(配置提供商、模型与 Embedder),以及 **设置 → 配置 → 功能开关** 下那个默认关闭、平台里没有任何东西读取的测试版 *AI 助手* 开关。让 Copilot 能作答的是一个配置好的提供商;它能跑哪些技能由应用本身决定,不属于安装环节。作为导航分组的 *AI* 在 **Studio → AI**(智能体 / 工具 / 技能)。 + +- [ ] 确认 **设置 → 配置 → AI 与 Embedder** 里选的是一个真实提供商 —— 它默认是 *Memory(回显 — 仅测试)*,只把你的输入原样回显而不作答 —— 然后点 *测试连接* +- [ ] 运行一个示例查询(*“给我 [测试客户] 的 Customer 360”*)以验证 —— 能引用真实记录作答,就说明提供商已生效 +- [ ] 在 **Studio → AI → 技能** 里过一遍 Copilot 随附的技能 —— 它们都是启用的;有哪些技能由应用决定,而不是在这里挑选(参见 [技能](/zh-Hans/docs/ai-copilot/skills)) +- [ ] 不要去找 AI 脱敏规则,去看字段级安全:Copilot 以当前登录用户的身份读取,某个字段在他的权限档案里被遮罩,就永远到不了 Copilot(参见 [共享与安全](/zh-Hans/docs/administration/sharing-and-security)) ## ✅ 第 6 天 —— 仪表板与报表 diff --git a/content/docs/administration/setup.zh-Hant.mdx b/content/docs/administration/setup.zh-Hant.mdx index 41dc126d0..f05385d68 100644 --- a/content/docs/administration/setup.zh-Hant.mdx +++ b/content/docs/administration/setup.zh-Hant.mdx @@ -133,10 +133,12 @@ HotCRM 只附帶**一個**知識物件,而不是一組知識庫。下面每一 ### 14. AI Copilot -- [ ] 確認 AI Copilot 已啟用(Setup → AI) -- [ ] 選擇要啟用哪些技能 -- [ ] 執行一個範例查詢(*「給我 [測試客戶] 的 Customer 360」*)以驗證 -- [ ] 設定資料敏感性規則 —— Copilot 必須脫敏哪些欄位 +Setup 裡沒有 *AI* 分組,也沒有任何畫面能把 Copilot 打開。Setup 裡與 AI 相關的只有兩處:**Setup → Configuration → AI & Embedder**(設定供應商、模型與 Embedder),以及 **Setup → Configuration → Feature Flags** 底下那個預設關閉、平台裡沒有任何東西讀取的測試版 *AI Assistant* 開關。讓 Copilot 能作答的是一個設定好的供應商;它能跑哪些技能由應用本身決定,不屬於安裝環節。作為導覽分組的 *AI* 在 **Studio → AI**(Agents / Tools / Skills)。 + +- [ ] 確認 **Setup → Configuration → AI & Embedder** 裡選的是一個真實供應商 —— 它預設是 *Memory (echo — testing only)*,只把你的輸入原樣回顯而不作答 —— 然後按 *Test connection* +- [ ] 執行一個範例查詢(*「給我 [測試客戶] 的 Customer 360」*)以驗證 —— 能引用真實記錄作答,就表示供應商已生效 +- [ ] 在 **Studio → AI → Skills** 裡過一遍 Copilot 隨附的技能 —— 它們都是啟用的;有哪些技能由應用決定,而不是在這裡挑選(參見 [技能](/zh-Hant/docs/ai-copilot/skills)) +- [ ] 不要去找 AI 脫敏規則,去看欄位層級安全:Copilot 以目前登入使用者的身分讀取,某個欄位在他的權限設定檔裡被遮罩,就永遠到不了 Copilot(參見 [共用與安全](/zh-Hant/docs/administration/sharing-and-security)) ## ✅ 第 6 天 —— 儀表板與報表