Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions .changeset/bare-workflows-residue-sweep.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
---
'hotcrm': patch
---

按引擎实况清扫 bare `workflows` 残留:faq / performance-and-limits 的「重新评估 5 次后停止」是虚构的计数器,quotes 的「调整报价对象工作流上的计划」指向不存在的配置面(#899)

#850 / PR #894 清掉的是「工作流规则 / workflow rule」这个字串。本次清的是另一个:把 `workflows`(不带 rule)当成独立于流程的一种东西来讲的散布,7 个页族 ×3 语言,grep 命中面与上一轮不重叠。

**引擎里没有 5 次这个计数器。** PR #854 已在 `content/docs/administration/automation.mdx` 把这条说法改成实况,但两份副本没跟上,文档因此自相矛盾:

- `content/docs/reference/faq.mdx` 的「我的流程没有触发」问答,第 5 条原本让管理员去数「级联是不是超过 5 次停了」。改写为真实的失败模式:流程在上一次运行尚未结束时又因同一条记录被重入,会被引擎的**重入守卫**跳过并记一条警告日志——没有可对照的重新评估次数,守卫是兜底而不是停止条件。整段问答的一等主语从「工作流」收口到流程(标题、「该规则是否已激活」、「先前的工作流」等)。
- `content/docs/reference/performance-and-limits.mdx` 的自动化限制表原本列着 **Workflow re-evaluations per save = 5 (then halts)**,即一个可以据以做容量规划的硬上限。该行改为流程重新评估、并写明没有固定预算:流程自身的写入会重新进入触发顺序,引擎用重入守卫打断自触发环,而不是计次。(同表 `Workflow rules per object` 一行是 PR #894 写下的「该类型已退休」说明,保持不动。)

**两处指向不存在配置面的说法改指真实位置,并如实写明这是源码作者面而非 Setup 界面**(与 #850 A 类同一失效模式):`content/docs/sales/quotes.mdx` 里「要改扫描时间就去调整报价对象工作流上的计划」——报价对象上没有这样的设置项,该计划是 `src/flows/quote-expiration.flow.ts` 中 `quote_expiration` 流程 start 节点上的 `schedule: '0 1 * * *'`,改它是一次代码改动加重新部署;同段「加一个工作流把报价翻转为审核中」也不再把 workflow 讲成可新建的类型,改为在 `src/flows/` 下新写一条记录变更类流程。

**四处枚举不再把 `workflows` 与流程并列成两种可部署 / 可审计的东西**:`content/docs/administration/index.mdx` 的管理员心智模型(与同页 PR #894 已改的自动化行对齐为流程 / 对象钩子 / 状态机)、`content/docs/administration/sandbox-and-releases.mdx` 的变更包内容枚举与可打包项表格(原表格一行里 `Workflows, flows` 并列了两遍)、`content/docs/reference/security-and-compliance.mdx` 的审计类目、`content/docs/customization/index.mdx` 的开篇分流句(其两个中文版本本就写的是「流程」,本次是英文版对齐)。

workflow 的日常英语 / 汉语义命中不在本次范围,未动:`administration/setup` 的「日常工作流」、`administration/sandbox-and-releases` 的「变更工作流 / 安全的工作流」、`customization/theming-and-i18n` 的小节标题、`customization/testing-and-ci` 与 `marketplace/publishing-your-first-app` 的 GitHub Actions 语境、`service/index` 的「看板式工单工作流」、`service/knowledge-base` 的「内容维护工作流」。

仅文档改动,`src/**` 零改动。
2 changes: 1 addition & 1 deletion content/docs/administration/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ If you're a **developer extending HotCRM** with code, head to [Customization](/d
HotCRM is built on three core abstractions:

1. **Objects** — the data entities (accounts, contacts, opportunities, cases).
2. **Automation** — what happens when objects change (workflows, flows, state machines).
2. **Automation** — what happens when objects change (flows, object hooks, state machines).
3. **Security** — who can see and edit what (profiles, sharing rules, field-level security).

Most admin tasks fall into one of these buckets. The pages in this section show you the controls for each.
Expand Down
2 changes: 1 addition & 1 deletion content/docs/administration/index.zh-Hans.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ description: CRM 管理员手册 —— 权限档案、共享、自动化、状
HotCRM 建立在三个核心抽象之上:

1. **对象** —— 数据实体(客户、联系人、商机、案例)。
2. **自动化** —— 对象变更时发生的事情(工作流、流程、状态机)。
2. **自动化** —— 对象变更时发生的事情(流程、对象钩子、状态机)。
3. **安全** —— 谁能查看和编辑什么(权限档案、共享规则、字段级安全)。

大多数管理任务都属于这其中之一。本部分的页面会向你展示每一类的控制项。
Expand Down
2 changes: 1 addition & 1 deletion content/docs/administration/index.zh-Hant.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ description: CRM 管理員手冊 —— 權限設定檔、共用、自動化、
HotCRM 建立在三個核心抽象之上:

1. **物件** —— 資料實體(客戶、聯絡人、商機、案例)。
2. **自動化** —— 物件變更時發生的事情(工作流、流程、狀態機)。
2. **自動化** —— 物件變更時發生的事情(流程、物件鉤子、狀態機)。
3. **安全** —— 誰能檢視和編輯什麼(權限設定檔、共用規則、欄位級安全)。

大多數管理任務都屬於這其中之一。本部分的頁面會向你展示每一類的控制項。
Expand Down
4 changes: 2 additions & 2 deletions content/docs/administration/sandbox-and-releases.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ Recommended for sandboxes accessed by partners / contractors.

## Change packages

A **change package** captures a set of metadata changes (objects, fields, validations, workflows, sharing rules, etc.) as a single deployable artefact.
A **change package** captures a set of metadata changes (objects, fields, validations, flows, sharing rules, etc.) as a single deployable artefact.

### Creating a package

Expand All @@ -87,7 +87,7 @@ A **change package** captures a set of metadata changes (objects, fields, valida
| Type | Packageable |
| --- | --- |
| Objects, fields, validations | ✅ |
| Workflows, flows | ✅ |
| Flows | ✅ |
| Sharing rules, profiles, permission sets | ✅ |
| Pages, list views, dashboards | ✅ |
| Reports, cubes | ✅ |
Expand Down
4 changes: 2 additions & 2 deletions content/docs/administration/sandbox-and-releases.zh-Hans.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ description: 安全地进行配置变更 —— 沙箱租户、变更包、提

## 变更包

**变更包** 将一组元数据变更(对象、字段、验证、工作流、共享规则等)捕获为单个可部署的工件。
**变更包** 将一组元数据变更(对象、字段、验证、流程、共享规则等)捕获为单个可部署的工件。

### 创建包

Expand All @@ -87,7 +87,7 @@ description: 安全地进行配置变更 —— 沙箱租户、变更包、提
| 类型 | 可打包 |
| --- | --- |
| 对象、字段、验证 | ✅ |
| 工作流、流程 | ✅ |
| 流程 | ✅ |
| 共享规则、权限档案、权限集 | ✅ |
| 页面、列表视图、仪表板 | ✅ |
| 报表、立方体 | ✅ |
Expand Down
4 changes: 2 additions & 2 deletions content/docs/administration/sandbox-and-releases.zh-Hant.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ description: 安全地進行設定變更 —— 沙箱租戶、變更包、提

## 變更包

**變更包** 將一組中繼資料變更(物件、欄位、驗證、工作流、共用規則等)捕獲為單個可部署的成品。
**變更包** 將一組中繼資料變更(物件、欄位、驗證、流程、共用規則等)捕獲為單個可部署的成品。

### 建立包

Expand All @@ -87,7 +87,7 @@ description: 安全地進行設定變更 —— 沙箱租戶、變更包、提
| 類型 | 可打包 |
| --- | --- |
| 物件、欄位、驗證 | ✅ |
| 工作流、流程 | ✅ |
| 流程 | ✅ |
| 共用規則、權限設定檔、權限集 | ✅ |
| 頁面、清單檢視、儀表板 | ✅ |
| 報表、立方體 | ✅ |
Expand Down
2 changes: 1 addition & 1 deletion content/docs/customization/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ description: Extend HotCRM with ObjectStack metadata, actions, flows, AI skills,

# Customization

This section is for developers and technical implementers extending HotCRM with code. If you are configuring users, profiles, workflows, or sharing from the app, start with [Administration](/docs/administration/index).
This section is for developers and technical implementers extending HotCRM with code. If you are configuring users, profiles, flows, or sharing from the app, start with [Administration](/docs/administration/index).

## What you can build

Expand Down
12 changes: 6 additions & 6 deletions content/docs/reference/faq.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -72,15 +72,15 @@ The dry-run report tells you which row failed and why. Always dry-run first.

## ⚙️ Automation

### My workflow / flow didn't fire — why?
### My flow didn't fire — why?

Check in order:

1. Is the rule **Active**?
2. Does the record actually **match the condition** at the time of save?
3. Did a **validation rule** block the save before the workflow could fire?
4. Did a **prior workflow** change the record so the condition no longer matched?
5. Workflows re-evaluate up to **5 times** — beyond that, the cascade stops.
1. Is the flow **Active**?
2. Does the record actually **match the start condition** at the time of save?
3. Did a **validation rule** block the save before the flow could fire?
4. Did an **earlier flow** change the record so the condition no longer matched?
5. Was the flow **re-entered for the same record while its previous run was still in flight**? The engine's re-entrancy guard skips that run and logs a warning. There is no re-evaluation count to compare against — the guard is a backstop, not a stop condition. See [Administration › Automation](/docs/administration/automation).

The **Process Monitor** (Setup → Process Monitor) shows the last 24 hours of automation runs with success/failure.

Expand Down
12 changes: 6 additions & 6 deletions content/docs/reference/faq.zh-Hans.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -72,15 +72,15 @@ Copilot 遵守你的共享设置 —— 如果你看不到它,它也看不到

## ⚙️ 自动化

### 我的工作流 / 流程没有触发 —— 为什么?
### 我的流程没有触发 —— 为什么?

按顺序检查:

1. 该规则是否**已激活**?
2. 在保存时记录是否真的**符合条件**?
3. 是否有**验证规则**在工作流触发前阻止了保存?
4. 是否有**先前的工作流**更改了记录,导致条件不再匹配?
5. 工作流最多重新评估 **5 次** —— 超过后,级联停止。
1. 该流程是否**已激活**?
2. 在保存时记录是否真的**符合起始条件**?
3. 是否有**验证规则**在流程触发前阻止了保存?
4. 是否有**先前的流程**更改了记录,导致条件不再匹配?
5. 这条流程是否在**上一次运行尚未结束时又因同一条记录被重入**?引擎的重入守卫会跳过这次运行并记一条警告日志。没有可对照的重新评估次数 —— 守卫是兜底,不是停止条件。参见[管理 › 自动化](/zh-Hans/docs/administration/automation)。

**流程监控器**(Setup → Process Monitor)显示过去 24 小时的自动化运行及成功/失败情况。

Expand Down
12 changes: 6 additions & 6 deletions content/docs/reference/faq.zh-Hant.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -72,15 +72,15 @@ Copilot 遵守你的共享設定 —— 如果你看不到它,它也看不到

## ⚙️ 自動化

### 我的工作流 / 流程沒有觸發 —— 為什麼?
### 我的流程沒有觸發 —— 為什麼?

按順序檢查:

1. 該規則是否**已啟用**?
2. 在儲存時記錄是否真的**符合條件**?
3. 是否有**驗證規則**在工作流觸發前阻止了儲存?
4. 是否有**先前的工作流**變更了記錄,導致條件不再匹配?
5. 工作流最多重新評估 **5 次** —— 超過後,級聯停止。
1. 該流程是否**已啟用**?
2. 在儲存時記錄是否真的**符合起始條件**?
3. 是否有**驗證規則**在流程觸發前阻止了儲存?
4. 是否有**先前的流程**變更了記錄,導致條件不再匹配?
5. 這條流程是否在**上一次執行尚未結束時又因同一筆記錄被重入**?引擎的重入守衛會跳過這次執行並記一條警告日誌。沒有可對照的重新評估次數 —— 守衛是兜底,不是停止條件。參見[管理 › 自動化](/zh-Hant/docs/administration/automation)。

**流程監控器**(Setup → Process Monitor)顯示過去 24 小時的自動化執行及成功/失敗情況。

Expand Down
2 changes: 1 addition & 1 deletion content/docs/reference/performance-and-limits.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ For deeper analysis, [export to a data warehouse](/docs/guides/import-and-export

| Item | Limit |
| --- | --- |
| Workflow re-evaluations per save | **5** (then halts) |
| Flow re-evaluations per save | No fixed budget — a flow's own writes re-enter the trigger order; the engine breaks self-trigger loops with a **re-entrancy guard** rather than a counter (a backstop, not a cap). See [Automation](/docs/administration/automation) |
| Flow steps | **500** per flow |
| Flow loop iterations | **2,000** |
| Scheduled job concurrency | **20** simultaneous tenant-wide |
Expand Down
2 changes: 1 addition & 1 deletion content/docs/reference/performance-and-limits.zh-Hans.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ description: 记录、API 速率限制、AI 配额、文件大小 —— HotCRM

| 项目 | 限制 |
| --- | --- |
| 每次保存的工作流重新评估 | **5**(然后停止) |
| 每次保存的流程重新评估 | 没有固定预算 —— 流程自身的写入会重新进入触发顺序;引擎用**重入守卫**打断自触发环,而不是计次(兜底,不是上限)。参见[自动化](/zh-Hans/docs/administration/automation) |
| 流程步骤 | 每个流程 **500** |
| 流程循环迭代 | **2,000** |
| 计划作业并发 | 全租户同时 **20** |
Expand Down
2 changes: 1 addition & 1 deletion content/docs/reference/performance-and-limits.zh-Hant.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ description: 記錄、API 速率限制、AI 配額、檔案大小 —— HotCRM

| 項目 | 限制 |
| --- | --- |
| 每次儲存的工作流重新評估 | **5**(然後停止) |
| 每次儲存的流程重新評估 | 沒有固定預算 —— 流程自身的寫入會重新進入觸發順序;引擎用**重入守衛**打斷自觸發環,而不是計次(兜底,不是上限)。參見[自動化](/zh-Hant/docs/administration/automation) |
| 流程步驟 | 每個流程 **500** |
| 流程迴圈迭代 | **2,000** |
| 排程作業並行 | 全租戶同時 **20** |
Expand Down
2 changes: 1 addition & 1 deletion content/docs/reference/security-and-compliance.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ Every meaningful action is logged immutably:
| **Authentication** | Login success / failure, MFA, IP, device |
| **Authorisation changes** | Profile / permission set / role changes |
| **Record changes** | Create / update / delete with before+after values |
| **Configuration** | Field, validation, workflow, sharing rule edits |
| **Configuration** | Field, validation, flow, sharing rule edits |
| **Data export** | Who exported what, when, how many rows |
| **AI invocations** | Which user invoked which skill on which record |
| **Integration activity** | Webhook deliveries, OAuth grants |
Expand Down
2 changes: 1 addition & 1 deletion content/docs/reference/security-and-compliance.zh-Hans.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ description: SSO、SCIM、审计日志、加密、GDPR、SOC2 —— HotCRM 提
| **身份验证** | 登录成功 / 失败、MFA、IP、设备 |
| **授权更改** | 简档 / 权限集 / 角色更改 |
| **记录更改** | 创建 / 更新 / 删除及前后值 |
| **配置** | 字段、验证、工作流、共享规则编辑 |
| **配置** | 字段、验证、流程、共享规则编辑 |
| **数据导出** | 谁在何时导出了什么、多少行 |
| **AI 调用** | 哪个用户在哪条记录上调用了哪个技能 |
| **集成活动** | Webhook 投递、OAuth 授权 |
Expand Down
2 changes: 1 addition & 1 deletion content/docs/reference/security-and-compliance.zh-Hant.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ description: SSO、SCIM、稽核日誌、加密、GDPR、SOC2 —— HotCRM 提
| **身分驗證** | 登入成功 / 失敗、MFA、IP、裝置 |
| **授權變更** | 設定檔 / 權限集 / 角色變更 |
| **記錄變更** | 建立 / 更新 / 刪除及前後值 |
| **設定** | 欄位、驗證、工作流、共享規則編輯 |
| **設定** | 欄位、驗證、流程、共享規則編輯 |
| **資料匯出** | 誰在何時匯出了什麼、多少列 |
| **AI 呼叫** | 哪個使用者在哪筆記錄上呼叫了哪個技能 |
| **整合活動** | Webhook 投遞、OAuth 授權 |
Expand Down
4 changes: 2 additions & 2 deletions content/docs/sales/quotes.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,6 @@ A brand-new org has no quotes at all — they are generated from opportunities,

## Tips for admins

- The daily expiration sweep runs at 1 AM. To change the time, adjust the schedule on the quote object's workflow.
- The daily expiration sweep runs at 1 AM. That time lives in source, not in Setup: it is the `schedule: '0 1 * * *'` on the start node of the `quote_expiration` flow (`src/flows/quote-expiration.flow.ts`). Changing it is a code change plus a redeploy — there is no setting to adjust on the quote object.
- The quote PDF template (cover and line item layout) is stored in your email-template settings.
- To require manager approval below the system-wide $500K threshold (for example, on every quote with >20% discount), add a workflow that flips the quote to *In Review* and notifies the manager. See [Administration › Automation](/docs/administration/automation).
- To require manager approval below the system-wide $500K threshold (for example, on every quote with >20% discount), you would author a new **record-change flow** on the quote object that flips it to *In Review* and notifies the manager. That is a source change under `src/flows/`, not something assembled in Setup. See [Administration › Automation](/docs/administration/automation) for how the built-in flows are put together.
4 changes: 2 additions & 2 deletions content/docs/sales/quotes.zh-Hans.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,6 @@ Total Price = Subtotal − Discount + Tax + Shipping & Handling

## 给管理员的提示

- 每日过期扫描在凌晨 1 点运行。要更改时间,请调整报价对象工作流上的计划。
- 每日过期扫描在凌晨 1 点运行。这个时间写在源码里,不在 Setup 界面上:它是 `quote_expiration` 流程(`src/flows/quote-expiration.flow.ts`)start 节点上的 `schedule: '0 1 * * *'`。要改就得改代码并重新部署——报价对象上没有可调的设置项。
- 报价 PDF 模板(封面和行项目布局)存储在你的邮件模板设置中。
- 要在系统级 $500K 阈值之下要求经理审批(例如对每个折扣 >20% 的报价),请添加一个工作流,将报价翻转为*审核中*并通知经理。参见 [Administration › Automation](/zh-Hans/docs/administration/automation)。
- 要在系统级 $500K 阈值之下要求经理审批(例如对每个折扣 >20% 的报价),需要在报价对象上新写一条**记录变更类流程**,由它把报价翻转为*审核中*并通知经理。这是 `src/flows/` 下的源码改动,不是在 Setup 界面上拼装出来的。内置流程是怎么组织的,参见 [Administration › Automation](/zh-Hans/docs/administration/automation)。
4 changes: 2 additions & 2 deletions content/docs/sales/quotes.zh-Hant.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,6 @@ Total Price = Subtotal − Discount + Tax + Shipping & Handling

## 給管理員的提示

- 每日到期掃描在凌晨 1 點執行。要更改時間,請調整報價物件工作流上的排程。
- 每日到期掃描在凌晨 1 點執行。這個時間寫在原始碼裡,不在 Setup 介面上:它是 `quote_expiration` 流程(`src/flows/quote-expiration.flow.ts`)start 節點上的 `schedule: '0 1 * * *'`。要改就得改程式碼並重新部署——報價物件上沒有可調的設定項。
- 報價 PDF 範本(封面和行項目版面)儲存在你的郵件範本設定中。
- 要在系統級 $500K 閾值之下要求經理審批(例如對每個折扣 >20% 的報價),請新增一個工作流,將報價翻轉為*審核中*並通知經理。參見 [Administration › Automation](/zh-Hant/docs/administration/automation)。
- 要在系統級 $500K 閾值之下要求經理審批(例如對每個折扣 >20% 的報價),需要在報價物件上新寫一條**記錄變更類流程**,由它把報價翻轉為*審核中*並通知經理。這是 `src/flows/` 下的原始碼改動,不是在 Setup 介面上拼裝出來的。內建流程是怎麼組織的,參見 [Administration › Automation](/zh-Hant/docs/administration/automation)。
Loading