Description
domain:devx#1 · sunhaolin · session_017xRBcSwDXZrZg7nGjP6P3U
Filing gate: ① a checklist assertion fix. One clause of a platform-checklist item asserts a UI shape that a later, deliberate change removed, so the clause fails while the product works as designed. This is the "stale spec" disposition of .claude/skills/checklist-test/SKILL.md §5, from QA run #27438 (wave 3 of the 18.3.0 sweep, anchor #27377). reach: a red row on the release record; every Tier 1 rerun re-fails it until the clause is re-pointed.
Business reason: a red row that is not a product bug costs every sweep a re-diagnosis and hides real reds in the same item. The clause, its steps and its pin spec all still look for a History tab.
Reader who acts: the lane that owns docs/qa/platform-checklist/** (domain:devx). The edit goes to areas/records-forms.json, and ui/e2e/live/record-history-display.spec.ts also needs updating or retiring.
Dedupe (open AND closed): "field-history-tracking History tab record page v3 checklist re-point" → 2 hits — #25846 (closed, the 18.2.0 records-forms ledger batch) and #27312 (open: the SPEC describe() of enable.trackHistory still narrates the v2 History tab) — related, but neither re-points this checklist clause.
Batch-of: 16 · QA run #27438
What is stale
records-forms.field-history-tracking (revision 9):
- acceptance[2]: "the History TAB gates on OBJECT-level
enable.trackHistory… the account detail renders the tab"; - negative[1] and steps[3], which say the same;
automated.ref, which saysui/e2e/live/record-history-display.spec.tsholds the flag-true half.
Measured at c4c515a (2 fresh loads plus the live spec)
- As admin at 1440×900, open
/_console/apps/com.example.showcase/showcase_account/record/ID. - There is no tab strip at all (
role=tabcount 0). Field changes appear under Timeline › Changes. - The page reads
sys_audit_log. The task detail page (tracking off) makes no audit-log read. record-history-display.spec.tsfails with a 15 s timeout ongetByRole('tab', {name: 'History'}).
The cause is deliberate: record page v3 (eef8373, #27055, with the stream from #27310) removed the History and Activity tabs, and its own unit test asserts "no Activity or History tab". The gate the clause exists for still holds: tracked objects read the audit log, untracked ones do not.
What it should say
Re-point acceptance[2], negative[1] and steps[3] to the v3 surface:
- on a
trackHistoryobject, the Timeline's Changes stream lists the tracked field changes and the page readssys_audit_log; - on an object without it, no Changes entries appear and no audit-log read is made.
Update or retire the live spec to match. Separately, negative[3] is a cross-reference guard ("do NOT re-score crud-roundtrip clause 5"), not an assertion, so it can only ever score skipped. Move it out of negative[].
QA-source: #27438 · records-forms.field-history-tracking · acceptance[2]
Generated by Claude Code
Activity
objectstack-fleet commentedon Oct 29, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: 业务对象与记录 | records-forms.field-history-tracking | P②
Triage: p2 ·
domain:devx·area:records· 2026-10-29T11:55Z⛔ Not a claim.
tests,pm:queue.Generated by Claude Code
objectstack-fleet commentedon Oct 29, 2026
domain:devx#2 · os-justin · session_01QSeKYmTYfaPbLQD4BJfomW
Claim: PM loop round 8 · 2026-10-29T15:10Z
Session:
session_01QSeKYmTYfaPbLQD4BJfomW(mode:subagent: the dev shares this session ID; its identity is the branch)Account:
os-justin(the seat's linked user, asGET /useranswers it; the card's assignee)Branch:
claude/issue-27492-history-clause-repointWorktree:
objectstack-issue-27492Domain:
domain:devxSeat:
domain:devx#2File surface:
docs/qa/platform-checklist/areas/records-forms.json(itemrecords-forms.field-history-tracking: acceptance[2], negative[1], negative[3], steps[3],automated.ref, a revision bump and its history entry), plus, cross-domain as triage's audit names it (SKILL.md 跨域例外路径),ui/e2e/live/record-history-display.spec.tsonly if measurement shows it is stale (update or retire), andui/package.json'stest:e2e:live:nightlylist only if the spec is retired. No product code (stop on breach; explain in the report)Container & model:
M,mode:subagent,model: default(dispatch-gates --tier: "no path-derived mandate"),effort: highClause-②: no
Metadata-protocol: none
Responsibility: n/a — not a defect card (a stale checklist assertion; the product works as designed)
Thread-read: 6495981272
Premise: corrected — see the dispatch note under this claim. The card measured at
c4c515ad, which predates #27473 (273137d227, merged 2026-10-29T08:37Z). #27473 moved the live spec's viewport from 1200 to 1000 px so that the record view stays in the page's tabbed tier, where the History tab still exists. At origin/main77e993ea29, the spec still opensgetByRole('tab', {name: /^(History|历史)$/})undertest.use({ viewport: { width: 1000, height: 800 } }), and it is inui/package.json's nightly list. So the tab is gone only in the column tiers, which is the card's 1440×900 measurement, not everywhere.Serial constraints cleared: at claim time, no open PR touches
records-forms.jsonorrecord-history-display.spec.ts(file scan of every open PR). Seat 1 (#6023) holds no card on these files.Generated by Claude Code
objectstack-fleet commentedon Oct 29, 2026
domain:devx#2 · os-justin · session_01QSeKYmTYfaPbLQD4BJfomW
Dispatched under claim 6500498782 · 2026-10-29T15:11Z: an
os-devsubagent (mode:subagent, default tier, effort high) on branchclaude/issue-27492-history-clause-repoint. The report comes back here asos-dev-report.Premise correction (the dispatch order's hypotheses H1–H3). The card measured at
c4c515ad. That commit predates #27473 (273137d227), which movedrecord-history-display.spec.tsto a 1000 px viewport, putting the record view in the page's tabbed tier, where the History tab is still drawn. The order therefore asks the dev to measure the following:automated.refstill holds.The dev touches the spec only if H1 is falsified. Moving the negative[3] cross-reference out of
negative[]stays in scope as the card asks.Generated by Claude Code
objectstack-fleet commentedon Oct 29, 2026
domain:devx#2 · os-justin · session_01QSeKYmTYfaPbLQD4BJfomW
os-dev-report
{ "issue": 27492, "status": "done", "branch": "claude/issue-27492-history-clause-repoint", "pr": "https://github.com/objectstack-ai/objectstack/pull/27651", "session": "session_01QSeKYmTYfaPbLQD4BJfomW", "premise_still_valid": true, "summary": "Re-pointed records-forms.field-history-tracking (rev 9 to 10) from the removed History tab to the record page v3 gate, which is the sys_audit_log read. Because the Changes chip also lists sys_activity rows, acceptance[2]'s oracle moves from dom to network. negative[1] and steps[3] are rewritten to match, and the negative[3] cross-ref moves to source[4], the precedent sibling items use. The nightly ui/e2e/live/record-history-display.spec.ts now reads the Changes chip at 1440x900 and passes live. H1 FALSIFIED: buildDefaultTabs emits Details/Timeline/Related/Approvals only, and buildDefaultPageSchema.test.ts asserts 'no Activity or History tab'. Measured live, a 1000x800 window gives a 952 px record view with the sidebar as its icon rail: two columns, 0 tabs. Only 700x800 drew tabs (Details/Related/Timeline, no History), and the unchanged base spec timed out on the History tab, so the spec was stale. H2 PARTLY CONTRADICTED by the tree. Account: 1 sys_audit_log read at load in the column tiers; in the tabbed tier the read goes out when Timeline opens (0 at load, 1 after). The 1440 and 1000 runs drew the stream in the folded Activity card, because the timeline switch defaults off for a non-worked object. Task: the authored kind:'full' showcase_task_detail page draws no stream and makes 0 audit reads at all three widths. 'No Changes entries on an untracked object' is false for a synthesized page, because ACTIVITY_TYPE_TO_FEED_TYPE maps sys_activity created/updated to field_change. The task's absent read is also over-determined, since an assigned page never reads audit; that is recorded as a new knownGaps entry. H3: automated.ref named the spec correctly for the flag-true half, but its text ('opens the History tab', objectui path, negative[3]) was wrong and is rewritten.", "tests": "Live, on showcase booted from this branch (pnpm dev -- --fresh -p 38497) plus the console vite dev server (port 38581, DEV_PROXY_TARGET). Base spec, unchanged: 'waiting for getByRole(tab, name History) to be visible', Test timeout 30000ms, VERDICT command-exit 1. Re-pointed spec: '1 passed (19.0s)', VERDICT command-exit 0, run twice. Temporary probe spec (deleted), 6 cases passed, VERDICT command-exit 0, table in the PR body. No ablation: no product behaviour changed.", "gates": "Local, at head 19d6a65a14 (origin/main merged, no conflict): dispatch-gates --commands --repo objectstack-ai/objectstack, exit 0, 24 families. All 24 exited 0, each exit code captured to disk before any pipe; check:platform-checklist 'OK — 16 areas, 352 items'. --ran: '24 derived famil(ies) accounted for — 24 run, 0 NOT-MEASURED (a DERIVED zero)'. check-platform-checklist --changed-from origin/main: exit 0, nothing anchored. PR check-runs at report time: Governed Surface Queue Guard success, Check Changeset success; Lint · * / Type Check · * / PR-body guards in_progress; not waited on.", "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm", "mcp_calls": "0", "api_writes": "2 — one fleet-write relay stroke (POST /repos/objectstack-ai/objectstack/dispatches; executed as POST /repos/objectstack-ai/objectstack/pulls, draft, plus POST /repos/objectstack-ai/objectstack/issues/27651/labels with skip-changeset), and this report via post-stamped (POST /repos/objectstack-ai/objectstack/issues/27492/comments)", "files_changed": ["docs/qa/platform-checklist/areas/records-forms.json", "ui/e2e/live/record-history-display.spec.ts"], "line_budget": "n/a — no skills/** touched; diff +69 / -48 over 2 files (vs threshold 3000)", "deviations": [ "Scope additions inside the same item, beyond the claim's listed fields. All are the same stale-History-tab class, declared in the PR body: title, fixtures.requires[1], negative[0]'s exemption, source[2], and a new fixtures.knownGaps[1]. The claim comment was not amended.", "ui/package.json nightly list untouched: the spec was updated, not retired.", "PR opened with no assignees, as this order and ops.mjs's pr_create note say. os-dev.md says assignees = the card's.", "Built the full workspace (turbo build, 114 tasks) under the lock so check:dev-prereqs would let pnpm dev boot.", "Two stray files outside any repo, /build.pid and /build2.pid (each holds a dead PID), came from a shell-variable scoping slip. Removing them was refused by the harness safety check, so they are left for a person." ], "open_questions": [], "out_of_scope_findings": [ "carrier: none · noted in PR Acceptance notes, not filed · same stale-History-tab family: records-forms.crud-roundtrip rev 15 steps and acceptance[4].verify ('open the record's History tab'), records-forms.record-edit-undo rev 5 ('after screenshot of the History tab'), and the account.object.ts enable comment. Owner for folding: the lane that owns docs/qa/platform-checklist. Dedupe words: History tab, crud-roundtrip, record-edit-undo, record page v3, Changes chip", "carrier: none · noted, not filed · #27473's 1000 px viewport did not keep the record view in the tabbed tier: the sidebar collapses to an icon rail at that width. The spec now pins 1440x900 and says why" ] }Generated by Claude Code
objectstack-fleet commentedon Oct 29, 2026
domain:devx#2 · os-justin · session_01QSeKYmTYfaPbLQD4BJfomW
Seat correction · 2026-10-29T16:27Z: the dispatch note 6500530823's H1 is falsified, and the card's own premise held. The dev measured the following (report 6502299806, PR #27651):
buildDefaultTabsemits only Details / Timeline / Related / Approvals, andbuildDefaultPageSchema.test.tsasserts "no Activity or History tab".The seat's reading was taken from #27473's PR body, not from the tree; the dev measured it. PR #27651 re-points the clause and updates the spec. The same-family remainder (
crud-roundtrip,record-edit-undo, and theaccount.object.tscomment) is filed as #27654.Generated by Claude Code
objectstack-fleet commentedon Oct 29, 2026
domain:devx#2 · os-justin · session_01QSeKYmTYfaPbLQD4BJfomW
ACCEPT → PR #27651 comment 6502527019 · 2026-10-29T16:36Z · ready + auto-merge armed.
Generated by Claude Code
objectstack-fleet commentedon Oct 29, 2026
domain:devx#2 · os-justin · session_01QSeKYmTYfaPbLQD4BJfomW
Landed: PR #27651, merged as
2cd93049c9· 2026-10-29T16:58ZThe merged diff matches the reviewed head
19d6a65a14: the sorted +/− lines are hash-identical. ACCEPT → PR #27651 comment 6502527019.Fixes #27492closed the card, andpm:dispatchedis removed in this act. The dev was amode:subagentsession, so there is no cloud session to archive. The same-family remainder is #27654.Generated by Claude Code