You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Docs-truth sweep: align documentation with product reality — one PR, five Fixes (#998 #1012 #732 #961 #709) #1063
Sweep card packaging five same-class rulings (maintainer, 2026-08-11, PM chat, verbatim: 「接受你的全部建议」). Class invariant: the documentation face claims something the product does not do — rewrite the docs to reality. One claim, one PR, five Fixes lines, per-item checklist review.
Rename all 25 occurrences across 22 doc files from Enterprise CRM to HotCRM (the app label everywhere in metadata/marketplace); add CrmApp.label to the guard assertion set so the name cannot drift again
Fix the action count to the registered count (26) in README.md:60 + docs/STATUS.md:17 (matches every other number in those sentences); add an actions rule to the #1010 guard so the number is mechanically checked
Rewrite the forecasting guide to reality (option A): the Copilot skill reads and answers only; source: 'ai' marks API-written rows; no transcript storage exists
Rewrite the campaign-members «Standard list views» section (three languages) to the real shape: Related panel with its actual columns; the real path is the Add to Campaign action on lead/contact pages; no Members tab, no four member views, no Add-Members picker
Rewrite the permission matrix docs to what the platform enforces: drop marketing's promised crm_contact create (master-detail gate denies it); rewrite the agent/mkt "can edit contact/lead" promises to the real owner_id == caller AND created_by == caller write gate. Mechanism half parked separately (see the split-card link on #709)
Sweep discipline (binding for the dev)
PR body carries a per-item checklist: one line per item — 落点 | before | after; review is by checklist line, not diff order.
Zero changes outside the five items; git diff --stat file list must map 1:1 onto the checklist.
Out-of-scope discoveries: file as new unassigned issues, never fix in this PR.
First lines of the PR body: five Fixes #N lines (998, 1012, 732, 961, 709).
Docs-only PR: state whether this repo's CI wants a changeset or a skip convention, and do the one you conclude is right.
{
"issue": 1063,
"status": "done",
"branch": "claude/issue-1063-docs-truth-sweep",
"pr": "https://github.com/objectstack-ai/hotcrm/pull/1067",
"premise_still_valid": true,
"summary": "Draft PR #1067 packages all five rulings, six Fixes lines first, per-item checklist in the body. Premises re-measured on origin/main (ed0ca36, post-#1064, rc.5) before editing. #998: 25 occurrences across 22 doc files — EXACTLY as filed — all renamed to HotCRM; CrmApp.label joins the quick-tour guard's assertion set, with the block start marker AND the app-launcher bullet on all three locale pages derived from it (both holes that hid the drift are closed). #1012: registered count re-measured after pnpm build = 26 (unmoved); README fixed in TWO places — the banner (:62, card said :60) and the repository-layout block (:130, `server actions + AI tools (13)`, wrong on every calibre since that directory holds 6 files) — and docs/STATUS.md's note (at :35 today, not :17 — it moved when #1011 landed) stops calling the calibre open; the #729 guard gains an `actions` kind read off the stack, bold-scoped because a bare `(\\d+) actions` matches whats-new's Copilot prompt 'the next 3 actions'. #732: NO change needed — the docs-truth half already landed on main via PR #742 and reads true in all three locales (verified line by line); the card closes because the capability half was declined by the ruling. #961: «Standard list views» rewritten in three languages to the Campaign Members panel on the shared Related tab with its real columns (Lead/Contact/Status/Response Date), retired names kept in italics per #927/#932; enrolment paths rewritten to Add to Campaign + the panel's New button. #709: profiles.mdx ×3 — marketing's crm_contact create claim dropped (master-detail insert gate), agent/mkt 'can edit contact/lead' rewritten to the owner-AND-creator write gate, plus one new section explaining the gate once and naming the two row-level-rule exceptions; no grant in src/ changed, expansion stays parked on #1062. One patch changeset (repo precedent: every recent docs-truth PR ships one; skip-changeset is reserved for pure chores per the workflow's own error text). 33 files, mapping 1:1 onto the checklist.",
"tests": "pnpm build exit 0 (Data: 17 Objects 344 Fields / UI: … 26 Actions / Logic: 24 Flows) | pnpm validate exit 0 ('Validation passed') | pnpm lint exit 0 (116 warnings, all pre-existing) | pnpm hygiene clean | pnpm test: 81 files, 1889 passed | 1 skipped. Reverse verification measured on this tree, both new guard rules: (1) restoring '- **Enterprise CRM** — the main app…' on quick-tour.mdx:46 → 1 failed | 41 passed, \"the app-launcher list … calls this app something other than the name it ships … expected 'Enterprise CRM' to be 'HotCRM'\"; (2) restoring '**13 actions**' in the README banner → 1 failed | 75 passed, 'README.md:62 says \"**13 actions**\", the stack registers 26 actions'. Both reverts undone and the suites re-run green.",
"open_questions": [],
"out_of_scope_findings": [
"AGENTS.md:4 opens 'Enterprise CRM built on the **@objectstack/runtime** engine'. Read as a common-noun descriptor rather than the app's name, so NOT swept in and no issue filed — flagging it here so the reviewer can overrule if it should have been included in #998's face.",
"CHANGELOG.md:197 and docs/archive/** carry 'Enterprise CRM' as historical record and must keep it — deliberately untouched, no issue needed.",
"content/docs/guides/integrations.mdx:31/:62 describe an unshipped Twilio call-recording + AI-transcript integration, but the page already frames it as intended-vs-actual ('nothing dials, records or transcribes'), so it is not a docs-truth defect — no issue filed."
]
}
Two self-decided calls, recorded rather than asked (per 自驱条款), both flagged in the PR body for checklist review:
「多少个 action」需要一个产品口径:文档写 13,注册进 stack 的是 26 #1012 — a second README location. The card named one README spot; README.md:130 (server actions + AI tools (13)) states the same figure again and was wrong on every calibre. Fixed both, and gave the layout-block spelling its own CLAIMS pattern — matching how data model (17 objects) / visual flows (24) / semantic layer (9) are already guarded there.
campaign-members 三语文档的《Standard list views》承诺了 Members 选项卡与四个成员列表视图,元数据里一个都没有;「Add Members」选人流程同样不存在 #961 — the ruling says "lead/contact pages", the measurement says lead only.CreateCampaignAction declares objectName: 'crm_lead'; src/actions/contact.actions.ts carries only Mark as Primary Contact and Send Email. The docs now say lead-only, which also corrected the pre-existing "from a lead or contact" in the same enrolment list — otherwise the fixed section would have contradicted the line above it.
Draft PR is open and gates are green locally; CI convergence and the ready-flip are yours.
「多少个 action」需要一个产品口径:文档写 13,注册进 stack 的是 26 #1012: registered count re-measured post-build (26, unmoved); fixed in TWO README locations (the second, README.md:130, was a self-decided extension flagged for review — accepted, it was wrong on every calibre) + STATUS.md; guard gains an actions rule (reverse-verified red on revert).
Activity
huangyiirene commentedon Aug 11, 2026
Claim: PM loop round 2 (hotcrm whole-repo seat)
Session:
session_01NM6o28jmBgsyTRQHutn7LCBranch:
claude/issue-1063-docs-truth-sweepWorktree: dedicated cloud session (fresh clone)
Domain: hotcrm whole-repo seat
File surface:
README.md,docs/STATUS.md,content/docs/**(app-name renames ×22 files, forecasting guide, campaign-members ×3 langs, permission matrix pages), guard test files for theCrmApp.label/ actions-count assertionsContainer & model: M sweep,
mode:cloud(dedicated session),model: claude-opus-5Serial constraints cleared: #1059 in flight (
package.json/manifest — disjoint); #669 in flight (e2e/**— disjoint); no other in-flight claim touches docs or guard test files. Sweep members #998 #1012 #732 #961 #709 are claimed via this card and excluded from direct dispatch.Generated by Claude Code
huangyiirene commentedon Aug 11, 2026
{ "issue": 1063, "status": "done", "branch": "claude/issue-1063-docs-truth-sweep", "pr": "https://github.com/objectstack-ai/hotcrm/pull/1067", "premise_still_valid": true, "summary": "Draft PR #1067 packages all five rulings, six Fixes lines first, per-item checklist in the body. Premises re-measured on origin/main (ed0ca36, post-#1064, rc.5) before editing. #998: 25 occurrences across 22 doc files — EXACTLY as filed — all renamed to HotCRM; CrmApp.label joins the quick-tour guard's assertion set, with the block start marker AND the app-launcher bullet on all three locale pages derived from it (both holes that hid the drift are closed). #1012: registered count re-measured after pnpm build = 26 (unmoved); README fixed in TWO places — the banner (:62, card said :60) and the repository-layout block (:130, `server actions + AI tools (13)`, wrong on every calibre since that directory holds 6 files) — and docs/STATUS.md's note (at :35 today, not :17 — it moved when #1011 landed) stops calling the calibre open; the #729 guard gains an `actions` kind read off the stack, bold-scoped because a bare `(\\d+) actions` matches whats-new's Copilot prompt 'the next 3 actions'. #732: NO change needed — the docs-truth half already landed on main via PR #742 and reads true in all three locales (verified line by line); the card closes because the capability half was declined by the ruling. #961: «Standard list views» rewritten in three languages to the Campaign Members panel on the shared Related tab with its real columns (Lead/Contact/Status/Response Date), retired names kept in italics per #927/#932; enrolment paths rewritten to Add to Campaign + the panel's New button. #709: profiles.mdx ×3 — marketing's crm_contact create claim dropped (master-detail insert gate), agent/mkt 'can edit contact/lead' rewritten to the owner-AND-creator write gate, plus one new section explaining the gate once and naming the two row-level-rule exceptions; no grant in src/ changed, expansion stays parked on #1062. One patch changeset (repo precedent: every recent docs-truth PR ships one; skip-changeset is reserved for pure chores per the workflow's own error text). 33 files, mapping 1:1 onto the checklist.", "tests": "pnpm build exit 0 (Data: 17 Objects 344 Fields / UI: … 26 Actions / Logic: 24 Flows) | pnpm validate exit 0 ('Validation passed') | pnpm lint exit 0 (116 warnings, all pre-existing) | pnpm hygiene clean | pnpm test: 81 files, 1889 passed | 1 skipped. Reverse verification measured on this tree, both new guard rules: (1) restoring '- **Enterprise CRM** — the main app…' on quick-tour.mdx:46 → 1 failed | 41 passed, \"the app-launcher list … calls this app something other than the name it ships … expected 'Enterprise CRM' to be 'HotCRM'\"; (2) restoring '**13 actions**' in the README banner → 1 failed | 75 passed, 'README.md:62 says \"**13 actions**\", the stack registers 26 actions'. Both reverts undone and the suites re-run green.", "open_questions": [], "out_of_scope_findings": [ "AGENTS.md:4 opens 'Enterprise CRM built on the **@objectstack/runtime** engine'. Read as a common-noun descriptor rather than the app's name, so NOT swept in and no issue filed — flagging it here so the reviewer can overrule if it should have been included in #998's face.", "CHANGELOG.md:197 and docs/archive/** carry 'Enterprise CRM' as historical record and must keep it — deliberately untouched, no issue needed.", "content/docs/guides/integrations.mdx:31/:62 describe an unshipped Twilio call-recording + AI-transcript integration, but the page already frames it as intended-vs-actual ('nothing dials, records or transcribes'), so it is not a docs-truth defect — no issue filed." ] }Two self-decided calls, recorded rather than asked (per 自驱条款), both flagged in the PR body for checklist review:
README.md:130(server actions + AI tools (13)) states the same figure again and was wrong on every calibre. Fixed both, and gave the layout-block spelling its own CLAIMS pattern — matching howdata model (17 objects)/visual flows (24)/semantic layer (9)are already guarded there.campaign-members三语文档的《Standard list views》承诺了 Members 选项卡与四个成员列表视图,元数据里一个都没有;「Add Members」选人流程同样不存在 #961 — the ruling says "lead/contact pages", the measurement says lead only.CreateCampaignActiondeclaresobjectName: 'crm_lead';src/actions/contact.actions.tscarries only Mark as Primary Contact and Send Email. The docs now say lead-only, which also corrected the pre-existing "from a lead or contact" in the same enrolment list — otherwise the fixed section would have contradicted the line above it.Draft PR is open and gates are green locally; CI convergence and the ready-flip are yours.
Generated by Claude Code
huangyiirene commentedon Aug 11, 2026
ACCEPT — PR #1067 reviewed and MERGED (
c5bc586). Sweep integrity verified: 33 files mapping 1:1 onto the per-item checklist, zero riders.Per-member outcomes:
CrmApp.labelnow feeds the quick-tour guard (reverse-verified: restoring one occurrence goes red).README.md:130, was a self-decided extension flagged for review — accepted, it was wrong on every calibre) + STATUS.md; guard gains anactionsrule (reverse-verified red on revert).revenue_forecastingwrites nothing #732: measured as already true on main (docs half landed via docs(forecasting): AI 那条来源按实测改写为只读技能,不再声称写记录 / 存对话 (#732) #742) — closes on the ruling with zero diff, correctly reported as no-change-needed.campaign-members三语文档的《Standard list views》承诺了 Members 选项卡与四个成员列表视图,元数据里一个都没有;「Add Members」选人流程同样不存在 #961: three-language rewrite to the real Related-panel shape; the dev's lead-only correction (ruling said "lead/contact",CreateCampaignActiondeclaresobjectName: 'crm_lead'only) is accepted — measurement beats the ruling's wording.Out-of-scope notes accepted as-is (AGENTS.md:4 read as descriptor; CHANGELOG/archive kept as historical record; integrations.mdx already frames intended-vs-actual).
Generated by Claude Code