docs: 把 positions、STATUS 与 latest-release 三处宣称写到源上,并补齐对应守卫 (#1014 #1011 #1015) - #1020
Merged
Merged
Conversation
…urce (#1014 #1011 #1015) Three pages made a present-tense claim that had stopped being true, and each had a guard that was looking somewhere else. getting-started/introduction sold "a 10-role hierarchy" in all three locales. The stack registers 12 positions, and ADR-0090 D3 removed the hierarchy itself — positions are flat capability-distribution groups and nothing rolls up. The bullet and the docs-home security row now say that; `positions` joins the count guard's REGISTERED/CLAIMS, read from the stack rather than written down. docs/STATUS.md called itself the source of truth while every figure was stale (16/318 objects/fields against 17/344, 4 dashboards against 5, 23 flows against 24, 13 views against 14, platform rc.1 against the installed rc.3). Its validator transcript is now pinned against the registered stack and its runtime table against package.json. The "Snapshot date" is gone — the page is present tense — and the test row states a verdict, not a size no gate can check. content/docs/whats-new announced `v5.0` on "ObjectStack 5.0" with console@5.0 / account@5.0; the app is 2.2.2 on platform 17.0.0-rc.3 and v5.0 was never either. The section states the real versions and points at the pages that own each area instead of keeping a second hand-copied release table; the v1.0 record is untouched. A new rule holds any "Latest release" section, in every locale, to the manifest version and the installed platform version. The exemption that hid the last of these excused the whole whats-new page as a historical record — right for the v1.0 section, wrong for the one beside it. Exemptions are now scoped to the section they were granted for.
|
The latest updates on your projects. Learn more about Vercel for GitHub. |
yinlianghui
marked this pull request as ready for review
August 7, 2026 03:15
Collaborator
Author
|
[PM 验收 · R40 · ACCEPT] 三单 #1014 / #1011 / #1015 验收通过,已随合并关闭(03:16Z,维护者亲合)。验收依据:
守卫净增 11 条断言(1855 → 1866 passed):positions 计数入 #1010 守卫、STATUS.md 独立解析规则(含三条 vacuity)、whats-new latest-release 版本规则(三语 marker + manifest 版本 + 平台版本)、豁免键文件级 → 小节级。 范围外发现 #1019 已分诊:具体缺陷(七处文档教已取消的可见性上卷机制,对读者是静默错误权限承诺),定 Generated by Claude Code |
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 #1014
Fixes #1011
Fixes #1015
三单同族:都是「宣称面对着今天说了错话,而本该看住它的守卫正好看向别处」。守卫落点都在
test/docs-drift.test.ts,故并单一次做完。基线:R39 五 PR(#1006 / #1007 / #1009 / #1010 / #1013)合并后的 fresh
origin/main(d57124d3)。#1010 的计数守卫与 #1001 的版本守卫都已在树上,本 PR 只扩不另起。一、premise 复核(三单都立于 R39 合并前,先按 fresh main 实测)
pnpm validate于d57124d3实测:CrmPositions12 项;objectstack.config.ts:133-135明写 ADR-0090 D3 取消 parent linksmanifest.version= 2.2.2,@objectstack/*= 17.0.0-rc.3,v5.0 两者皆非三单前提全部成立,无一需要重新裁定。
二、#1014 —— positions 不是层级,是 12 个扁平职能分组
实测:
src/sharing/positions.ts12 项;objectstack.config.ts:133-135与 positions.ts 头注都写明 ADR-0090 D3 之后 position 之间没有 parent link,可见性不上卷,每个需要某条记录的层级由它自己的 sharing rule 点名(#488)。改动:
content/docs/getting-started/introduction.{mdx,zh-Hans,zh-Hant}的那一条改为「12 个 position / 岗位 / 職位,按销售·服务·市场职能分组的扁平群体,用于分发记录访问权限;之间什么都不会上卷」。三语用词与administration/sharing-and-security已有的译法对齐(zh-Hans 用「岗位」、zh-Hant 用「職位」),不新造词。content/docs/index.{mdx,zh-Hans,zh-Hant}的 Security 一行同改(原写role hierarchy)。content/docs/index*顶部 callout 的「See what's new in v1.0 →」改为不带版本号的「See what's new →」。它是导航文案不是版本报告,而版本号写在这里既没有守卫看得住、又与我刚改正的目标页自相矛盾;移除宣称优于把宣称搬个家。守卫:
positions加进 #1010 计数守卫的REGISTERED(stack.positions.length,运行时现读,不硬编码)与CLAIMS(三语各一条 spelling)。三、#1011 —— STATUS.md 取裁定 A(现状页)
实测:见上表;平台包行落后两个 rc;
13 Views与实测 14 差一(issue 已指出);9 files, 97 tests与实测 79 files 差一个数量级。改动(
docs/STATUS.md):pnpm validate现跑现读全表改正;## Current Runtime Requirements的平台包行改17.0.0-rc.3;main的当前状态,不是快照;能从源推导的数字都由test/docs-drift.test.ts钉住」。取舍理由:裁定 A 的全部意义就是「这一页按现状读」,而一个日期恰恰在邀请读者把数字打折;何况这个日期本身也是手工维护、没有任何东西能核对它,属于又一个漂移源。Passes,与上面两行一致),并在表下说明为什么:N files, M tests几乎每个 PR 都动,而没有任何东西能从这套测试内部核对描述这套测试的数字(静态数it(也不行 —— 这个文件本身就在 for 循环里生成用例)。写一个测不了、又天天变的数,就是把9 files, 97 tests这种错误再生产一次。这是本 PR 唯一一处「不照实测值写数」的地方,故在此写明。13 Actions行:不替 「多少个 action」需要一个产品口径:文档写 13,注册进 stack 的是 26 #1012 拍板。块按pnpm validate实际打印的注册数26 Actions改,并在块下加注说明 26 是注册计数(一个动作绑五个对象注册五次)、与 README 的 13、源码树的 6 各答不同问题,口径归属是 「多少个 action」需要一个产品口径:文档写 13,注册进 stack 的是 26 #1012 的未决事项、本页不予裁定。守卫(新增 describe:
docs/STATUS.md states the current repository (#1011)):HotCRM v2.2.2的那个 fenced 块(按内容识别而非位置,插一节不会把规则指到别的 fence),把Data: 17 Objects 344 Fields这类标签解析成{Objects: 17, Fields: 344},逐项与注册 stack 比对(Fields由各对象fields键数求和,实测与验证器打印一致 = 344);## Current Runtime Requirements四行分别对package.json的engines.node/engines.pnpm/@objectstack/*依赖行 /scripts.dev的-p端口断言;为什么不是「把 docs/STATUS.md 加进 #1010 的
COUNT_DOCS」:#1010 的CLAIMS是散文 spelling(17 business objects、(\d+) 个仪表盘),而 STATUS.md 的数字是机器摘要(Data: 17 Objects,大写、无「business」)。把文件加进扫描面,规则在这一页上一条也匹配不到 —— 那是扩了扫描面却什么都没检查的假覆盖。故按守卫现有结构做成一条自带解析器的独立规则,并在COUNT_DOCS处留注说明这条分工。26 Actions这条断言不预判 #1012:它断言的是「一个以pnpm validate输出形式呈现的块,与 loader 注册的东西一致」—— 这是对转录保真的断言,而验证器按构造打印的就是注册数。#1012 无论裁到哪个口径,这条断言都不动,会动的是块周围的散文。四、#1015 —— whats-new 取裁定 A(继续维护)
实测:该节宣称
v5.0、ObjectStack 5.0、@objectstack/console@5.0、@objectstack/account@5.0;package.json里没有console这个依赖,account是17.0.0-rc.3。v5.0 既不是应用版本也不是平台版本。改动(三语
content/docs/whats-new*):## v2.2.2 — Latest release(zh-Hans 「最新发布」/ zh-Hant 「最新發行」,沿用各自页面原有译词),正文写真值:应用 2.2.2、全线@objectstack/*运行在 17.0.0-rc.3、manifest 声明^17.0.0-rc.3协议区间。CHANGELOG.md(由每个 PR 的.changeset/编译),v1.0 与 2.2.2 之间的各版记录在那里、此处刻意不重列 —— 并点名这正是本节当初会宣称一个不存在版本的原因。三语各加一个 callout 块,blockquote 块数保持 1/1/1,不动 forecasting.zh-Hans/zh-Hant 相对英文页存在早于 #627 的整页漂移 —— 桶语义、承诺定义、缺失的汇总提示框需要整页重译 #736 的三语 callout 对等规则。src/docs/crm_service.md等已被守卫钉住的阈值又抄了一份到 content/docs 无人看管处。保留就必须给它们编一个版本归属,那才是虚构历史;故整体换成「产品当前形态写在哪里」的指路清单(introduction / analytics / sharing-and-security / ai-copilot),并说明那些页面各自被守卫钉住 —— 这样这一节不再新增任何无人核对的数字宣称。守卫(挂进 #1001 版本 describe,作为
VERSION_DOCS的自然扩展):Latest release/最新发布/最新發行)—— 0 节或 2 节都红。这条同时充当 locale 覆盖的 vacuity 保护:某语言的 marker 一旦读不到,该页计数掉到 0 直接点名报红,无需另写 probe 用例。2.2.2,边界匹配,12.2.2/2.2.22不算数)。package.json安装的平台版本;平台版本由「全部@objectstack/*依赖去重后恰好一个」推导,比对前先断言这一点(版本锁定,AGENTS.md §Platform Upgrades),否则半截升级会让规则要求一个谁也没装的版本。顺带修好让 #1015 得以存活的那个豁免:#1010 计数守卫把 whats-new 整页列为 HISTORICAL —— 对 v1.0 节是对的,对紧挨着的现在时节是错的,而后者正是 #1015。豁免键从文件改为文件 + 小节(
{ section: RegExp, reason }),只有落在匹配小节内的宣称才被豁免;三语 v1.0 标题都以v1.0开头,一条 pattern 覆盖三语。dead-exemption 检查同步升级为「每个被豁免的小节仍然写着计数」,所以 v1.0 节被改名或它的清单搬走时,这张许可证也会当场报红而不是继续空转。五、验证
六门全绿(
pnpm validate/typecheck/lint/hygiene/build/test):(基线 1855 passed,新增 11 条断言。)
反向验证:每条新断言先预判方向再跑
十个 probe,全部与预判一致。以下为真实报错原文节选。
1. positions 数字写错 —— 预判红,实测红
2. 把 introduction 三语改回原文
**A 10-role hierarchy**—— 预判绿,实测绿(76 passed)这条要写明白,因为它与「把删掉的肢体装回去应该转红」的常见预设相反,而且是本 PR 里最该被下一个读者知道的一件事:计数守卫读不懂那句旧话。
A 10-role hierarchy里没有任何一个CLAIMS能匹配的计数 spelling,而 README 仍带着一条正确的12 positions,所以按 kind 的 vacuity 也不会响。换言之,positions这条扩展抓的是新写法里的错数字,抓不到被取消的旧措辞 —— 这正是 #1010 的守卫当初漏掉 #1014 的原因,issue 本身也已指出「hierarchy 这个词该不该出现不是计数守卫能管的」。措辞层要另立一条禁用词规则,且必须与仍在用该措辞的十余页一起改,已另单记录(见下)。3. 删掉三条 positions
CLAIMS—— 预判红(vacuity),实测红4. STATUS 转录
17 Objects改 16 —— 预判红,实测红5. STATUS 转录删掉
Logic: 24 Flows整行 —— 预判红,实测红两条(预判一条,实际连 vacuity 下限一起响,两条都指向同一处减项,属正确行为)6. STATUS 运行时表平台行改回 rc.1 —— 预判红,实测红
7a. whats-new 标题改回
## v5.0 — Latest release—— 预判红,实测红7b. 三语该节内的平台版本全部替回
5.0—— 预判红,实测三语齐红8. 从
LATEST_MARKERS删掉 zh-Hant 的「最新發行」—— 预判红,实测红9. 豁免收窄的三连(同一段文字,三种豁免形态)—— 三个方向全部与预判一致
在新的 latest-release 节内植入一句错的
4 dashboards:10. 把 v1.0 标题改名,使豁免的 section pattern 匹配不到任何小节 —— 预判红,实测红两条
即:许可证一旦悬空立刻报红,同时它原本遮着的历史数字也一并暴露 —— 两条一起响正说明这张许可证确实在起作用而不是空转。
vacuity 层复核
按要求核过 #1010 守卫的 vacuity 层在本 PR 改动之后是否需要同步调整:
15 business objects/15 个业务对象/15 個業務物件,豁免不空转。TREE_DOCS对docs/STATUS.md的 inlinesrc/{dir}/检查:## Current Metadata Inventory表整表保留,那些src/路径未动。六、范围外发现(只记录不修)
glossary.mdx:80定义成「驱动可见性的组织架构图」、security-and-compliance.mdx:54写「Managers see their team's records」、accounts / opportunities / cases / forecasting 四页写「只有负责人以及角色层级中位于其之上的人才能看到」),与同一站点administration/sharing-and-security.mdx:68的「扁平、什么都不会上卷」正面冲突。这不是旧名字而是对读者行为有影响的错误承诺(以为已经有权限、其实没有,且界面不报错只是记录不出现)。已按 probe 2 的实测说明「为什么计数守卫抓不到它、以及禁用词规则必须与那十余页一起改」写进单里。