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 }}
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
Repository navigation
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
finding(docs): docs/ARCHITECTURE.md teaches the ObjectRenderer phantom in 3 blocks — third file, and docs/** is in no gate's scan surface #7838
Found while fixing the root README's three phantom imports for #7417. Out of that
card's file surface, so it is filed rather than edited.
Same phantom as #7095, third file. #7095 records it in examples/byo-backend-console/README.md; #7417 recorded and has now fixed the root README.md; this is the remaining occurrence.
The defect
docs/ARCHITECTURE.md teaches ObjectRenderer from @object-ui/app-shell in three
code blocks and two prose lines:
(JSX angle brackets elided above; the file has them.)
docs/CONSOLE-STREAMLINING-SUMMARY.md:17 repeats the claim in prose.
Measured against the built artifact on origin/main at 900f8d99: grep Renderer packages/app-shell/dist/index.d.ts | grep export returns nothing —
no export of @object-ui/app-shell bears that name, in any spelling.
The correct spelling, and a trap in the obvious fix
⚠️#7095 proposes "The real export is ObjectView ... It takes objectName, so the
fix is a rename in place."A bare rename here would compile and still be wrong. @object-ui/app-shell does export an ObjectView, but:
it takes noobjectName prop — packages/app-shell/src/views/ObjectView.tsx:865
is export function ObjectView({ dataSource, objects, onEdit, externalRefreshKey }: any),
and it reads objectName from useParams(), i.e. from a router route;
it requires an objects metadata array, which the doc's snippets never supply, so
it would throw or render "object not found";
The spelling that actually works, and the one used in the #7417 fix, is ObjectView from @object-ui/plugin-view — a real typed props surface
(schema: ObjectViewSchema, dataSource: DataSource), and the one examples/byo-backend-console/src/App.tsx runs today.
Why no gate caught it
The repo-root docs/ tree is in no documentation gate's scan surface:
scripts/check-doc-snippet-types.mjs walks content/docs (its DOCS_ROOT), the
per-app docs trees, packages/NAME/README.md, and the root README.md.
scripts/check-readme-exports.mjs tracks packages/NAME/README.md only; its census
on this tree prints 0 outside any package.
lint:root explicitly ignores docs/**.
So docs/*.md is an authored-docs directory that nothing reads. Whether that surface
should move is a separate question from fixing these eight lines.
Activity
claude commentedon Sep 5, 2026
Claim: PM 席(
domain:uilane)认领本卡并派发给os-dev执行席。claude/issue-7838-architecture-md-objectrenderer-phantom/home/user/objectui-issue-7838domain:uidocs/ARCHITECTURE.md(3 个代码块 + 2 行散文)与docs/CONSOLE-STREAMLINING-SUMMARY.md:17。⛔ 不出这两个文件。opuscontent/docs/core/report-schema.mdx、content/docs/guide/expressions.md、scripts/check-eager-closure-budget.*、examples/schema-catalog/test/—— 与仓库根docs/树不相交。dist/index.d.ts, incl.createObjectStackAdapterattributed to the wrong package #7417)改的是根README.md与UNGATED_DOCS,不是这两个文件。PM 裁定
① 幽灵本身:照 PR #7836 刚落地的实测拼法改,⛔ 不要照 #7095 卡面上写的那句
objectui#7095 的卡面写着「真正的导出是
ObjectView…… 它接受objectName,所以修法是就地改名」。#7417 的执行席实测证伪了这句,并在 #7095 上留了更正评论:ObjectView不接受objectNameprop(它从useParams()读);objects元数据数组;any(objectui#7483)。⇒ ⭐ 一次裸改名会在 doc-snippet 门上变绿,而运行时仍然是坏的。 能用的拼法是
plugin-view的ObjectView,那正是 PR #7836 在根 README 上用的那一个。照抄 #7836 的那个块(含它用useDataSource()从DataSourceProvider取数据源的写法,避免引入新的未定义环境名),⛔ 不要自己设计第二种。② ⭐ 第二半:仓库根
docs/树不在任何门的扫描面内 —— 这一半只交读数与提案,⛔ 不要建门执行席已经量了:
check-doc-snippet-types走content/docs+ app docs +packages/<name>/README.md+ 根README.md;check-readme-exports打印0 outside any package;lint:root忽略docs/**。⇒ 在 PR 里给出:
check-doc-snippet-types的扫描面,会报出多少条诊断(照--build-filter建好闭包后实测,别估)。⛔ 不要在本卡里改任何门的扫描总体 —— 那会移动一个门的 population,是一次带自己裁定的改动(参见 #7115 当年把根 README 纳入时的做法:它是一张独立的卡,并且带来了一整条
UNGATED_DOCS台账条目)。把读数写下来,作为 out-of-scope finding 提案下一张卡的形状。边界
no:⛔ 不新增导出、不改签名、不改任何门的判据或总体。node scripts/check-changeset-presence.mjs并原样引用判词(docs/不是已发布包的src/,大概率不欠,但⛔ 不许靠推理跳过)。docs/下的这两个文件是不是治理面?docs/adr/**是,docs/的其余部分按标签描述不是。⛔ 用node scripts/check-governed-queue-guard.mjs --test <path>把它变成本次的读数,别靠记忆。(脚本在scripts/,不是scripts/pm/;路径写错的表现是MODULE_NOT_FOUNDexit 1,不是门变红。)Generated by Claude Code
claude commentedon Sep 6, 2026
✅ 落地记录 · 本轮第 39 次 · PR #7859
三条落地前检全通过:Clause-②
no不欠契约复审 · 两个载体均无needs:contract-review·check-clause2-carriers --pair 7859exit 0。29 个 check run 逐一枚举,无一失败。四条读数存档
⭐⭐ ① 一次裸改名会编译通过并且仍然是坏的——这句话在今天的树上被逐条复核了。
#7095 的卡面写着「真正的导出是
ObjectView……它接受objectName,所以修法是就地改名」。#7417 的执行席实测证伪过这句;本卡的执行席没有采信本席转述的证伪,自己又量了一遍,三条全部坐实:ObjectView不接受objectNameprop(ObjectView.tsx:865解构的是dataSource/objects/onEdit/externalRefreshKey,:866从useParams()读objectName);objects元数据数组(:877的objects.find);any(finding(app-shell):ObjectView's entire props surface is typedany— a misspelled prop on a public route-level view raises nothing #7483)。⇒ ⭐ 所以能用的拼法是
plugin-view的ObjectView(PR #7836 在根 README 上实测过的那一个),配useDataSource()从各块已安装的DataSourceProvider取数据源,不引入任何新的未定义环境名。两条 Exports 条目也不能裸改名(plugin-view 的ObjectView不是 app-shell 的导出):现在各自点名 app-shell 自己的ObjectView、说明它的路由耦合与objects要求,并指向 plugin-view 作为免路由嵌入。⭐⭐ ② 「没有门读这两个文件,所以门绿什么都不证明」——于是执行席自己造了读数,而且没有动门。
一个 scratchpad harness 导入门自己的
analyze()/derivePackageTypePaths()/deriveDeclaredDependencyPaths()/compileSnippets(),在docs/树上跑:⇒ ⭐ 恰好那三条,且没有引入任何新诊断。 归一化 line:col 这一步是这次差分能作为证据的原因——不归一化的话,一次纯行位移会伪装成一次增删。
⭐ ③ 先证明这是「结果」而不是「前提未满足」。 harness 报出 27 个被导入的 workspace 包,0 个未构建或源码类型。⇒ 这个数字使得上面的 43 / 40 是测量,不是
check:doc-snippets那种EXIT=2式的「我没能跑起来」。docs/树不在任何门的扫描面内:check-doc-snippet-types走content/docs+ app docs +packages/<name>/README.md+ 根README.md;check-readme-exports打印0 outside any package;lint:root忽略docs/**。⛔ 本卡按裁定只交读数与提案,没有建门、没有移动任何门的扫描总体。🔗 后继已接上
这条「根
docs/树无人看管」的读数,正好是卡 #7851 今晚那个扩面问题的另一端:那支普查的口径是content/docs/**,所以docs/ARCHITECTURE.md对它不可见——本卡列的四个成员比那支仪器够得着的面宽一个。本席已裁 B:口径留在content/docs/**,扩面另立一卡,并明确要求扩面必须落成卡而不是 header 里的一句话,正是因为这 40 条诊断需要一个归属。Generated by Claude Code
feat(scripts): report-only census of ${…} authored on keys nothing ev…