docs: write five claims to what the product does — docs-truth sweep (#1063) - #1067
Merged
Merged
Conversation
…#732) Five separately filed docs-truth findings, all ruled the same way — the documentation moves, the product does not — landing as one sweep. #998: 22 doc pages in three locales called this app *Enterprise CRM*, a spelling `src/` has never carried; `CrmApp.label`, the locale bundles, the build artifact and the marketplace manifest all say HotCRM, which is what the app launcher shows. All 25 occurrences follow the metadata. `test/docs-quick-tour-navigation.test.ts` now derives both the guarded block's start marker and the app-launcher bullet from `CrmApp.label`, so the two holes that hid this (the launcher list sat outside the block; the occurrence inside it was not bold) are closed. #1012: the README advertised 13 actions beside eight registration counts. The stack registers 26 and the source tree holds 6 `*.actions.ts` files. The reader-facing calibre is the registration count — it matches every other figure in that sentence and is the only one a guard can re-derive. README (banner and layout block, which said 13 on any calibre) states 26, `docs/STATUS.md` stops calling the calibre open, and the #729 count rule gains an `actions` kind read off the registered stack. #961: the campaign-members page promised a *Members* tab, four member list views and an **Add Members** picker. `crm_campaign_member` ships no views, no `relatedList: 'primary'` exists in this repo, and the panel's New button opens a create drawer. The section now describes the Campaign Members panel and its real columns, and points at the path that does ship — the **Add to Campaign** action, declared on `crm_lead` only. #709: `administration/profiles` promised two writes the platform refuses — marketing creating contacts (master-detail insert needs edit on the master account, measured 403) and agent/marketing editing contacts and leads they neither own nor created. Both personas now state reach per object, and a new section explains the owner-and-creator update gate once, naming the two objects this app opens with a row-level rule. No grant changed; the permission expansion is parked on #1062. #732: verified already true on `main` in all three locales after PR #742 — the skill reads and answers only, `source: 'ai'` is reserved for an agent or integration, no transcript is stored. No text change needed. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011NVPRcYcPzZ6rqEhPU79dC
|
The latest updates on your projects. Learn more about Vercel for GitHub. |
huangyiirene
marked this pull request as ready for review
August 11, 2026 05:33
This was referenced Aug 11, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #1063
Fixes #998
Fixes #1012
Fixes #732
Fixes #961
Fixes #709
Description
Docs-truth sweep: five separately filed findings, all ruled the same way on 2026-08-11 — the documentation claims something the product does not do, so the documentation moves — packaged into one PR per the sweep card #1063. No capability expansion anywhere: every ruling declined the "make the product match the docs" option.
Review is by checklist line, not diff order. The
git diff --statfile list maps 1:1 onto the checklist below (33 files: 22 + 1 guard for #998, 3 for #1012, 3 for #961, 3 for #709, 1 changeset; #732 needed no file).Per-item checklist
analytics/index×3,getting-started/quick-tour×3,guides/search-and-navigation,marketing/index×3,revenue/approvals×3,revenue/index×3,sales/index×3,service/index×3)src/has never carriedCrmApp.label/ the locale bundles /dist/objectstack.json/ the marketplace manifest all ship, and the one the app launcher shows. Re-counted onorigin/main: 25 occurrences across 22 files, exactly as filedtest/docs-quick-tour-navigation.test.tsCrmApp.labeljoins the assertion set: the block'sstartmarker and the app-launcher bullet on all three locale pages are derived from it, plus the label joinsALLOWED_BOLD. Renaming the app insrc/now goes red until the pages followREADME.md:62(banner) andREADME.md:130(repository-layout block)server actions + AI tools (13)one section downpnpm build(26 Actions; premise confirmed, not moved).docs/STATUS.md(the note under the validator transcript)STATUS.md:17; the13 actionsreference actually sits at:35on today's tree (it moved when #1011 landed)test/docs-drift.test.ts, the #729 rule (added by PR #1010)actionsdeliberately absent — "this guard does not pick a side"actionskind read off the registered stack, plus two CLAIMS spellings (banner + layout block). The banner pattern is bold-scoped on purpose:actionsis the one noun here that is also an ordinary English word in these pages — a bare(\d+) actionsreadswhats-new's Copilot prompt "What are the next 3 actions I should take?" as an inventory claimcontent/docs/sales/forecasting.mdx×3 localesmainin all three locales. PR #742 landed the docs-truth half: the skill "composesdescribe_object/aggregate_data/query_records/visualize_data… answers in the conversation … opens no forecast row", and the Source field row reads "ai(reserved for an agent or integration of your own — nothing in HotCRM writes it)". Verified line by line in en / zh-Hans / zh-Hant. The card closes because the remaining half (build the write capability) was declined by the ruling. The soft "AI grounding" line stays untouched, as the earlier PM review directedcontent/docs/marketing/campaign-members.mdx×3 locales — the «Standard list views» sectioncrm_campaign_memberregisters zero views;highlightFields=[crm_campaign, crm_lead, crm_contact, status, response_date]minus the panel-scopedcrm_campaign; norelatedList: 'primary'anywhere in the repo. All four retired names are still named, in italics, per the #927/#932 conventionCreateCampaignActiondeclaresobjectName: 'crm_lead'and no contact action carries it (src/actions/contact.actions.tshas only Mark as Primary Contact / Send Email). The docs now say lead only — the measured reality, per the sweep card's "use the measured value and say so" rulecontent/docs/administration/profiles.mdx×3 locales, Marketing User blockmarketing_campaign_updates,marketing_campaign_member_updates, verified insrc/profiles/marketing-user.profile.ts)src/; the permission expansion stays parked on #1062.changeset/docs-truth-sweep-app-name-actions-members-permissions.mdpatchchangeset covering all five items (see Changeset convention below)Changeset convention for this PR shape
Conclusion: ship a changeset, do not use
skip-changeset..github/workflows/changeset-check.ymlfails any PR that adds none unless theskip-changesetlabel is applied, and its error text reserves that label for changes that "genuinely ship nothing (pure CI/docs chores)". This repo's own precedent is unambiguous — every recent docs-truth PR shipped a'hotcrm': patchchangeset (#1019, #1014/#1011/#1015, #995, #1001, #1010). A published doc-site page is product surface here, and this PR also changes two guard tests. So: one changeset,patch, covering all five items.Type of Change
actionscount rule)Related Issues
Six
Fixeslines at the top of this body: the sweep card #1063 and its five members.Changes Made
CrmApp.labeljoins the quick-tour guard's assertion set (block marker + launcher bullet, both derived).docs/STATUS.md's note records the settled calibre; the [17.0-rc2验收] README 与 marketplace 文档的对象/flow 数量仍是旧值(15 objects / 23 flows),rc.2 实际为 17 / 24 #729 count guard gains anactionskind.revenue_forecastingwrites nothing #732 — verified already true onmainin all three locales; no change needed.campaign-members三语文档的《Standard list views》承诺了 Members 选项卡与四个成员列表视图,元数据里一个都没有;「Add Members」选人流程同样不存在 #961 — campaign-members' «Standard list views» rewritten to the Related panel and its real columns, and the enrolment paths rewritten to Add to Campaign (lead-only) + the panel's New button, in three locales.Testing
pnpm test: 81 files, 1889 passed | 1 skippedpnpm lintexit 0 (116 warnings, all pre-existing)pnpm buildexit 0;pnpm validateexit 0 ("Validation passed");pnpm hygienecleanReverse verification (red before, green after) — measured on this tree, both new guard rules:
- **Enterprise CRM** — the main app…back onquick-tour.mdx:46→ predicted red on the new launcher rule only. Measured 1 failed | 41 passed: "the app-launcher list … calls this app something other than the name it ships … expected 'Enterprise CRM' to be 'HotCRM'".**13 actions**back in the README banner → predicted red on the count rule only. Measured 1 failed | 75 passed: "README.md:62 says "13 actions", the stack registers 26 actions".Both files were restored and the suites re-run green afterwards.
Additional Notes
git diff --stat's 33 files map 1:1 onto the checklist above.AGENTS.md:4opens "Enterprise CRM built on the @objectstack/runtime engine" — read as a common-noun descriptor rather than the app's name, so it was left alone rather than swept in;CHANGELOG.md:197anddocs/archive/**carry the old name as historical record and must keep it.package.json/pnpm-lock.yaml(chore(deps): upgrade @objectstack/* 17.0.0-rc.5 → 17.0.0-rc.6 (maintainer order), and re-measure tracked upstream-mirror behavior #1059) ande2e/**(e2e: make the specs independent of who owns the seeded records (option 2 from #665) #669) untouched.origin/main(ed0ca36, fix(hotcrm): repoint crm app branding to existing icon.svg (404 on crm-logo.png / crm-favicon.ico) #1064 included) before opening.🤖 Generated with Claude Code
https://claude.ai/code/session_011NVPRcYcPzZ6rqEhPU79dC
Generated by Claude Code