Repository navigation
docs(qa): re-point records-forms.field-history-tracking to the record page v3 sys_audit_log gate; the live history spec reads the Changes chip - #27651
Conversation
… page v3 audit-read gate (WIP) Claude-Session: https://claude.ai/code/session_01QSeKYmTYfaPbLQD4BJfomW Co-authored-by: Claude <noreply@anthropic.com>
…p, record page v3 has no History tab (WIP) Claude-Session: https://claude.ai/code/session_01QSeKYmTYfaPbLQD4BJfomW Co-authored-by: Claude <noreply@anthropic.com>
…read; the live spec reads the Changes chip at 1440x900 Measured on a booted showcase: no tab strip at 1440x900 or 1000x800, tabs without History only at 700x800; the task detail is an authored page with no audit read. Claude-Session: https://claude.ai/code/session_01QSeKYmTYfaPbLQD4BJfomW Co-authored-by: Claude <noreply@anthropic.com>
…story-clause-repoint
|
domain:devx#2 · os-justin · session_01QSeKYmTYfaPbLQD4BJfomW 席位核对 — ACCEPT · domain:devx#2 · head
|
Fixes #27492
Clause-②: no
Metadata-protocol: none
维护者速读
records-forms.field-history-tracking里还在找 History 标签页的三条断言,改指向记录页 v3 的真实形态:开了 trackHistory 的对象读sys_audit_log,结果出现在时间线的「变更」筛选里;没开的对象不读。另外更新了夜间 live e2e 用例record-history-display.spec.ts,它在主干上一直是红的。docs/qa/platform-checklist/areas/records-forms.json的 acceptance[2] 和新加的 knownGaps 第 2 条(任务详情页那一半的证据由两道闸门共同决定,单看它证明不了标志位);然后看ui/e2e/live/record-history-display.spec.ts的视口和定位器。LIVE_APP_URL=… LIVE_API_URL=… pnpm --dir ui exec playwright test --config=playwright.live.config.ts record-history-display.spec.ts。预期是 1 passed,旧版本会在等 History 标签页时超时。What changes
One item,
records-forms.field-history-tracking, goes from revision 9 to 10. It is the only item edited, and the live spec it cites is updated with it. No product code changes.sys_audit_logfield-change history is gated on object-levelenable.trackHistoryin both directions. On the account, the page readssys_audit_logand the timeline stream's Changes chip lists the tracked edits as old → new lines with display values. The task makes nosys_audit_logread. The oracle moves fromdomtonetwork, because the Changes chip cannot prove an absence: it also lists the stream'ssys_activitycreated/updated rows (ACTIVITY_TYPE_TO_FEED_TYPEmaps both tofield_change).sys_audit_logread on the task detail is a FAIL. It is judged on the network log, never on an empty Changes chip or a missing tab.recordPageTierFor): the timeline column, or the Activity card while the reader's timeline switch is off (the default for showcase_account), or the Timeline tab. It gives the measured widths. The steps no longer send the runner to look for a History tab.skipped. It moves out ofnegative[]intosource[4], the field sibling items already use for cross-refs (access-security.*carry 15+ "cross-ref …" rows insource). The checklist has no notes key, and none was invented.Scope additions inside the same item, all the same stale-History-tab class, declared here because the claim's file surface did not list them:
sys_activityupdated rows (mergeTimelineStream). Without this change, a runner would FAIL a correct "Website old → new" line;kind: 'full'showcase_task_detailpage. RecordDetailView serves the audit read only to a synthesized page (RecordDetailView.recordOpenWaves-13010.test.tsx: "an assigned page of a trackHistory object never reads the audit log"). So the task's absent read holds with or without the flag. No showcase object pairs per-field flags, no enable block, and a synthesized page.ui/e2e/live/record-history-display.spec.ts(nightly list, unchanged) now opens showcase_account at 1440×900. It selects the Changes chip of theTimelineregion and asserts the same display contract as before: real actor, option labels, localized dates, resolved owner. The page has no tab and no switch to click at that width. The unknown-user guard now matches the stream'sdetail.unknownUserfallback (Unknown/未知用户).Tests
All readings come from a showcase booted from this branch with
pnpm dev -- --fresh -p 38497(backend) and the console vite dev server (DEV_PROXY_TARGETpointing at it, port 38581). The tree was base882d4e4a5cplus this diff, with no product code changed.The spec at base, unchanged: red, for the reason the card names
The failure screenshot at its 1000×800 viewport shows two columns, details plus related, and no tab strip. The stream sits in the Activity card, with the chips All / Activity / Discussion / Changes. A temporary copy of the base spec was used for this run and then deleted.
The re-pointed spec: green, run twice on that boot
The stream's text for the seeded record:
Tier and audit-read measurement (temporary probe spec, deleted afterwards)
On a seeded account, the Changes chip showed a
sys_activityrow (Updated Account "华宁科技": Search Index) next to the audit read. This is the measured reason an empty Changes chip is no absence oracle.Acceptance notes
buildDefaultTabsemits Details / Timeline / Related / Approvals only, andbuildDefaultPageSchema.test.tsasserts "no Activity or History tab". Live at 1000×800 the console sidebar comes up as its icon rail, the record view is 952 px, and the page draws two columns with no tab strip. Only a narrower window, measured at 700, reaches the tabbed tier. The spec has been red on the nightly list since the record page v3 change.sys_activitycreated/updated rows. For showcase_task the stream is absent altogether, since its record page is authored. The item now follows the tree.records-forms.crud-roundtrip(rev 15): steps and acceptance[4].verify still say "open the record's History tab". This is the contract this item's cross-ref points at.records-forms.record-edit-undo(rev 5): one verify still says "after screenshot of the History tab".examples/app-showcase/src/data/objects/account.object.ts: the comment onenablestill narrates the History tab.describe()ofenable.trackHistory.sys_activityupdated row in favour of the audit entry (mergeTimelineStream). The text a runner sees is the same old → new pair, so this was left alone.Verification
Gate list derived with
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstackat head19d6a65a14, after mergingorigin/main, with no conflicts. The 24 families were all run locally on that head, each exit code captured before any pipe.24 derived families, all exit 0; --ran reconciliation
No changeset: nothing published moves. The diff is
docs/qa/**andui/e2e/live/**, andui/package.jsonisprivate: truewith nofiles. Labelledskip-changeset.Generated by Claude Code