Repository navigation
Commit b758e91
<!-- claude-projects-attribution: {"github_login":"marchtian"} -->
_Requested by **田騏** · [project
thread](https://claude.ai/code/project/chan_01VmuUhXU9SSUzqJYyXSmYSi?thread=cmsg_01VmuUhXU9SSUzqJYyXSmYSi9paTx1Lu8ENYwwssthfK3h)_
Fixes #29679
Clause-②: no
Metadata-protocol: none
## 维护者速读
- **改了什么**:测试清单里 6 个 Studio / i18n 测试项改为指向今天 main
上真实成立的行为:记录页改用声明了要点字段的「客户」对象;对象变体用 `activityMilestones` 替代已退役的
`titleFormat`;组织流程改用不带包的 PUT 造夹具;表单视图矩阵去掉已被拒收、或 Studio 已有控件的键;首次闭环分 en /
zh-CN 两条腿各自判定;相对日期改读表格单元格的提示文字。只改 `docs/qa/platform-checklist/areas/`
下两个 JSON,不动产品代码。
- **为什么改**:QA 运行 #29672 把这些条款判红,但背后不是产品缺陷,而是条款过时。留着会让清单持续误报,真缺陷(zh-CN
首次发布进不了数据面,#29673)也会混在误报里看不清。
- **风险与回滚**:纯文档。每项 revision 加 1 并追加 history 行,旧运行记录仍按它当时的 revision
解读。zh-CN 腿今天会如实判失败,因为 #29673 还没修。回滚即 revert 本 PR。
- **先看**:`studio-authoring.json` 的 `first-run-loop`(新增 zh-CN 腿与
knownGaps[3]);同文件 `record-page-roundtrip`(对象从 showcase_contact 换成
showcase_account);`i18n.json` 的 `studio-follows-app-locale`
acceptance[1] 与 [2]。
- **两分钟验证**:在仓库根运行 `node scripts/check-platform-checklist.mjs`,应输出
`check-platform-checklist: OK — 16 areas, 359 items`,退出码 0。
- **需要你做的**:无,席位落地。
## What changes
Checklist revision only, from QA run #29672 (read at `3482f3d8d2`).
Every re-point was re-read on `main` at `339f63da30` (and the merge of
`origin/main` at `0e4b0fa411` touches none of the cited sources). Each
item gets a revision bump and one `history` row citing #29679 and the
run.
| item | rev | what was stale | re-pointed to | evidence on main |
|:--|:--|:--|:--|:--|
| `studio-authoring.record-page-roundtrip` | 13 → 14 | acceptance[0]:
`showcase_contact` declares no `highlightFields`, so since #28907 its
full create seeds no `record:highlights` | the whole item on
`showcase_account` (fixtures, personas[1], steps[0]/[2]/[6],
acceptance[0] and [3], automated.ref) | `account.object.ts` declares
`highlightFields: ['status', 'industry', 'annual_revenue']`;
`deriveHighlightFields` (plugin-detail `buildDefaultPageSchema.ts`)
draws declared fields only; no showcase page names the object; the
everyone baseline `showcase_member_default` reads it |
| `studio-authoring.api-written-keys-survive-studio-save` | 3 → 4 |
variants[0]: `titleFormat` is refused at save and publish since
3557366 | `activityMilestones` | graded live in
`packages/spec/liveness/object.json`; no Studio surface writes it; the
run's matrix read its runtime row hold. `nameField` (the prescription)
is not used: Studio has a control for it (`ObjectSettingsPanel.tsx`) |
| `studio-authoring.org-scope-flows` | 2 → 3 | fixtures.requires[1],
steps[1]: the clone door lands in `BASE.custom` since #28149 | `PUT
/api/v1/meta/flow/qa_org_raw` with no `?package=` and no `?mode=` |
ADR-0146 D11 closes a package-less write only onto a shipped item
(`packagelessOverlayWriteRefusal`); the run read this PUT answer 200 |
| `studio-authoring.no-entry-property-matrix` | 4 → 5 | the view.form
row: `drawerSide` / `drawerWidth` answer 422; Studio now offers Layout,
Columns, Default Tab, Tab Position | `drawerSide` / `drawerWidth` listed
as refused at parse; `layout`, `defaultTab`, `tabPosition` out of the
matrix per step 4; knownGaps[0] says why | `retiredKey` tombstones in
`packages/spec/src/ui/view.zod.ts`; `ViewVariantInspector.tsx` hands the
form variant's spec schema to `SchemaForm`; the layout canvas fail was
#29676, which #29759 closed |
| `studio-authoring.first-run-loop` | 10 → 11 | names no locale; only
zh-CN fails | an en leg and a zh-CN leg, each on its own boot, every
clause scored per leg (new negative[2]); knownGaps[3] records the zh-CN
failure | #29673 is open; `isInjectedColumnDefinition` is still
byte-for-byte and the `registerObject` failure is still a `console.warn`
in `protocol.ts` |
| `i18n.studio-follows-app-locale` | 7 → 8 | acceptance[2] (the card's
"[3]" is the run's one-based number): a grid paints the absolute date,
relative only as the tooltip; and, from the addendum, acceptance[1] /
negative[0] counted an authored label as a mixed-language fail |
acceptance[2] reads the date cell's `title` (oracle `dom`), both
directions; acceptance[1] and negative[0] carry the authored-override
exception | `DateCellRenderer` with `inGridColumn`
(`ui/packages/fields/src/index.tsx`); ADR-0029 D9.2a and
`translateObject`, pinned by `i18n-resolver.test.ts` and
`meta-object-i18n-explicit-override.test.ts` |
## Tests
No runtime code changes, so there is no test to add and no ablation. The
derived gate set ran on the final head `ede9c13a2f`, each exit code
captured before any pipe. `dispatch-gates --ran` reconciliation: 16
derived, 16 run, 0 NOT-MEASURED (a derived zero: all 16 recorded an exit
code).
<details>
<summary>Gate readings at ede9c13</summary>
```text
0 node scripts/check-adr-links.mjs
0 node scripts/check-adr-links.mjs --self-test
0 node scripts/check-closing-keyword-parity.mjs
0 node scripts/check-closing-keyword-parity.mjs --self-test
0 node scripts/check-comment-mask-corpus.mjs
0 node scripts/ci/plan-test-core-shards.mjs --self-test
0 pnpm --filter @objectstack/lint run check:doc-formula-expressions (after building formula and lint, as its prerequisite said)
0 pnpm check:ci-filter-parity
0 pnpm check:cross-package-test-inputs
0 pnpm check:doc-authoring
0 pnpm check:driver-memory-census
0 pnpm check:gitlink-declared
0 pnpm check:nul-bytes
0 pnpm check:platform-checklist
0 pnpm check:refd-timer-probe
0 pnpm check:watch-hint-literal
check-platform-checklist: OK — 16 areas, 359 items (353 active, 1 planned); symbol anchors: 1134/1144 resolved, 10 on the named residual, 18 file floors held
```
</details>
## Acceptance notes
- **Deviations from the card's table, each measured.** The card names
the relative-date clause `acceptance[3]`; it is `acceptance[2]`
zero-based (the run numbered from one). In the same items I also
corrected four stale readings from the same run: org-scope-flows
`steps[0]` (the empty state now has no Open in Setup link),
first-run-loop `steps[1]` (since #29734 a Chinese name derives a pinyin
package id, so "derives no package id" no longer held), the matrix's
object `titleFormat` cell (now a refusal), and the matrix's `buttons`
cell (already measured rendering by revision 3's knownGaps).
- **Not re-driven live at this base.** Every re-point is read from
source, seed data and the run's own readings. record-page acceptance[1]
to [3] passed on `showcase_contact` in the run and are not yet driven on
`showcase_account`.
- **Fixture gaps the card names that this PR does not add.** The two
launch entries (`OS_AUTOMATION_SCHEDULED_WORK_ENABLED=1` for
flow-status-matches-runtime, `OS_PAGE_REACT_ENABLED=false` for
custom-page-source-tiers) live in `.claude/launch.json`, not in the
checklist's own fixture declarations, which already name both boots.
picklist-bound-select's fixture needs a picklist in the showcase's
`objectstack.config.ts`, a seed-data change. Both are left to the seat.
- **Notes, not filed.** (1) Studio's landing card
`engine.studio.org.description` (en and zh,
`ui/packages/i18n/src/namespaces/studio/`) still says the scope holds "a
clone of a packaged flow", which #28149 made untrue; read from source
only. (2) `i18n.studio-follows-app-locale` knownGaps[0] says 414
untranslated labels; `scripts/i18n-coverage-baseline.json` reads 320.
(3) `packages/spec/liveness/object.json` grades `titleFormat` live while
the save gate refuses it. (4) The form-view inspector's `SchemaForm` may
offer controls for more `view.form` keys than the four the run named;
the next run's step 4 census decides. (5) `defaultTab` / `tabPosition`'s
partial runtime effect leaves this matrix with them, and no other item
claims it.
## Verification
```text
node scripts/check-platform-checklist.mjs # OK, exit 0
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack
```
Session: https://claude.ai/code/session_017ihL2gLghEqeDKTbDTC7Zd
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-authored-by: Claude <noreply@anthropic.com>
1 parent 31204d1 commit b758e91
2 files changed
Lines changed: 52 additions & 44 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
99 | 99 | | |
100 | 100 | | |
101 | 101 | | |
102 | | - | |
| 102 | + | |
103 | 103 | | |
104 | 104 | | |
105 | 105 | | |
| |||
116 | 116 | | |
117 | 117 | | |
118 | 118 | | |
119 | | - | |
| 119 | + | |
120 | 120 | | |
121 | 121 | | |
122 | 122 | | |
| |||
128 | 128 | | |
129 | 129 | | |
130 | 130 | | |
131 | | - | |
| 131 | + | |
132 | 132 | | |
133 | | - | |
| 133 | + | |
134 | 134 | | |
135 | 135 | | |
136 | 136 | | |
137 | | - | |
138 | | - | |
139 | | - | |
140 | | - | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
141 | 141 | | |
142 | 142 | | |
143 | 143 | | |
| |||
153 | 153 | | |
154 | 154 | | |
155 | 155 | | |
156 | | - | |
| 156 | + | |
157 | 157 | | |
158 | 158 | | |
159 | 159 | | |
| |||
172 | 172 | | |
173 | 173 | | |
174 | 174 | | |
175 | | - | |
| 175 | + | |
| 176 | + | |
176 | 177 | | |
177 | 178 | | |
178 | 179 | | |
| |||
0 commit comments