Skip to content

checklist: re-point records-forms.field-history-tracking acceptance[2] to the record page v3 Timeline › Changes stream — the History tab it asserts was removed by design (#27055) #27492

Closed

Description

@objectstack-fleet

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 says ui/e2e/live/record-history-display.spec.ts holds the flag-true half.

Measured at c4c515a (2 fresh loads plus the live spec)

  1. As admin at 1440×900, open /_console/apps/com.example.showcase/showcase_account/record/ID.
  2. There is no tab strip at all (role=tab count 0). Field changes appear under Timeline › Changes.
  3. The page reads sys_audit_log. The task detail page (tracking off) makes no audit-log read.
  4. record-history-display.spec.ts fails with a 15 s timeout on getByRole('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 trackHistory object, the Timeline's Changes stream lists the tracked field changes and the page reads sys_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

  1. objectstack-fleet commented on Oct 29, 2026

    @objectstack-fleet
    ContributorAuthor

    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.


    Generated by Claude Code

  2. objectstack-fleet commented on Oct 29, 2026

    @objectstack-fleet
    ContributorAuthor

    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, as GET /user answers it; the card's assignee)
    Branch: claude/issue-27492-history-clause-repoint
    Worktree: objectstack-issue-27492
    Domain: domain:devx
    Seat: domain:devx#2
    File surface: docs/qa/platform-checklist/areas/records-forms.json (item records-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.ts only if measurement shows it is stale (update or retire), and ui/package.json's test:e2e:live:nightly list 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: high
    Clause-②: 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/main 77e993ea29, the spec still opens getByRole('tab', {name: /^(History|历史)$/}) under test.use({ viewport: { width: 1000, height: 800 } }), and it is in ui/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.json or record-history-display.spec.ts (file scan of every open PR). Seat 1 (#6023) holds no card on these files.


    Generated by Claude Code

  3. objectstack-fleet commented on Oct 29, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:devx#2 · os-justin · session_01QSeKYmTYfaPbLQD4BJfomW

    Dispatched under claim 6500498782 · 2026-10-29T15:11Z: an os-dev subagent (mode:subagent, default tier, effort high) on branch claude/issue-27492-history-clause-repoint. The report comes back here as os-dev-report.

    Premise correction (the dispatch order's hypotheses H1–H3). The card measured at c4c515ad. That commit predates #27473 (273137d227), which moved record-history-display.spec.ts to 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:

    • H1: whether the spec is really stale. The seat's reading is that it is not.
    • H2: whether the clause should describe the surface by width tier. In the column tiers that means Timeline › Changes; in the tabbed tier, the History tab.
    • H3: whether automated.ref still 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

  4. objectstack-fleet commented on Oct 29, 2026

    @objectstack-fleet
    ContributorAuthor

    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

  5. objectstack-fleet commented on Oct 29, 2026

    @objectstack-fleet
    ContributorAuthor

    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):

    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 the account.object.ts comment) is filed as #27654.


    Generated by Claude Code

  6. objectstack-fleet commented on Oct 29, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:devx#2 · os-justin · session_01QSeKYmTYfaPbLQD4BJfomW

    ACCEPT → PR #27651 comment 6502527019 · 2026-10-29T16:36Z · ready + auto-merge armed.


    Generated by Claude Code

  7. objectstack-fleet commented on Oct 29, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:devx#2 · os-justin · session_01QSeKYmTYfaPbLQD4BJfomW

    Landed: PR #27651, merged as 2cd93049c9 · 2026-10-29T16:58Z

    The merged diff matches the reviewed head 19d6a65a14: the sorted +/− lines are hash-identical. ACCEPT → PR #27651 comment 6502527019. Fixes #27492 closed the card, and pm:dispatched is removed in this act. The dev was a mode:subagent session, so there is no cloud session to archive. The same-family remainder is #27654.


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:recordsBusiness objects, records, the views that show data, usable forms, searchdomain:devxpriority:p2Medium: important, M3tests

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions