Skip to content

qa(checklist): records-forms — 60 ledger edits from the 18.2.0 release sweep (#25807) #25846

Closed

Description

@objectstack-fleet

Filing gate: maintainer-directed task. Filed by the 18.2.0 release-assessment thread · session_01G3h9iZTpL8aCiXbfsp8H5u. ⛔ Not a claim, ⛔ not dispatched.

Maintainer's words (project thread, 2026-10-25, verbatim): 22:54Z 「约 300 条清单准确性问题:是不是应该开卡?」, then 22:55Z 「写issue,不派发」.

Parent: wave anchor #25807 (18.2.0 release test sweep). RUNNER's extraction obligation parks checklist-accuracy findings on the anchor; the maintainer asked for them as issues, so the wave's findings are split into one card per ledger file and the anchor links each card. This is not a release blocker, so it carries no target:v18.

Reader who acts: the lane owning docs/qa/platform-checklist/** (domain:devx). Dedupe (open and closed): no card holds these lines; the 18.0 precedent closed its accuracy rows on its anchor #24579.

Wanted

For each line below, edit docs/qa/platform-checklist/areas/records-forms.json: revise the item's text, bump its revision, and append a history entry citing the run record the line comes from. Keep pnpm check:platform-checklist green. A line that turns out to describe a product defect rather than stale text gets its own card instead of a ledger edit.

Findings (60)

From #25812 — priority:P0, 23 items, at 6679644a, pin b41ed7f68956

  • records-forms.crud-roundtrip: the owner half of acc[6] says "not yet run" — it was replayed this run.

From #25815 — release-18.2.0-tier1, 156 items, at 6679644a, pin b41ed7f68956 (clause labels: aK = acceptance[K], nK = negative[K])

  • records-forms.action-param-widgets ref-parse: the parent's pins include objectui e2e/live/action-modal.spec.ts, which the ref names only as DROPPED ('cited here until revision 3 … so it was dropped') — a parser false positive; it scores nothing here.
  • records-forms.adhoc-filter-sort-builder a4: the pin reproduces the filter on page.reload() and checks the URL param + record-count-bar '2' only — it never captures the data request the clause's network oracle names, nor compares row identity.
  • records-forms.adhoc-filter-sort-builder ref-parse: the parent's pins include objectui e2e/live/saved-view-filter.spec.ts, which the ref names only as dropped ('cited here until revision 5 … so it was dropped') — parser false positive.
  • records-forms.bulk-select-all-matching a1/a4/n0: none of the three ref files exercises resolveBulkRows' paged fan-out or the HARD_CAP; the cross-page id resolution is unpinned even at component level
  • records-forms.bulk-select-all-matching a3/n2: bulkActionRefresh.test.tsx '[main 红:wildcard fall-through 守卫声明了一个已被删除的挂载(#4116 与 #4112 的竞态) #4140] bulk bar Clear resets both selection sources' asserts the behaviour in jsdom; the clause's dom/screenshot oracle needs the browser
  • records-forms.cascading-multilevel-and-clear a1: the spec POSTs {country:'us', province:'zj'} where the verify names {country:'cn', province:'ca'}, and asserts code invalid_option only — the verify's message key option_unavailable is not checked; the in-set answer is 201, not the verify's 200.
  • records-forms.cascading-multilevel-and-clear ref: rule-validator.option-visibility.test.ts is in the ref but by its own words scores no clause (validator layer) — the parent need not run it for this item.
  • records-forms.cascading-options a1/n0: the pin is an objectui Playwright live spec (needs a live stack + console at the objectui pin); it scores only if the parent runs it against a booted showcase.
  • records-forms.comment-reactions-and-edit-stamps a1/a2: sys-comment-reactions-door.integration.test.ts is named a 'door' test but boots ObjectKernel + ObjectQLPlugin over sqlite-wasm and maps errors with mapDataError — no HTTP adapter, so it cannot score the api clauses.
  • records-forms.concurrent-edit-conflict a3: the ref scores acceptance[3] from occSave.test.tsx › 'ObjectForm edit — OCC guarded save › 409 → "overwrite" retries re-keyed to the server currentVersion and completes the save', but that case runs over a mocked data source, so it pins the client re-key only — not the clause's api oracle (the retry answered 200 and a re-read shows one winner)
  • records-forms.concurrent-edit-conflict a1: occSave.test.tsx pins the modal Keep editing / Overwrite choice in jsdom; the dom oracle wants a rendered (screenshot-confirmed) dialog, and the inline ConcurrentUpdateDialog half has no pin
  • records-forms.concurrent-edit-conflict pins: the parent's pin list includes objectui e2e/live/inline-edit-polish-2572.spec.ts, which the ref names only to say it was DROPPED at revision 4 (no If-Match, no conflict, stale at the pin) — a ref-parse over-inclusion; it scores no clause
  • records-forms.conditional-rules-grid ref-parse over-inclusion: the parent's pins list carries objectui e2e/live/grid-file-upload.spec.ts, which the ref says was DROPPED at revision 8 and scores no clause — do not run it for this item
  • records-forms.conditional-rules-grid all objectui pins are Playwright e2e/live specs needing a live stack; they can only score in a browser run, and even green they score halves only
  • records-forms.conditional-rules-header a2: the ref claims field-conditional-rules.spec.ts pins 'acceptance[2]'s client lock … tax_rate's input giving way to the read-only field group at paid', but the spec asserts the OPPOSITE on the New dialog: at paid taxRate toBeEnabled() and the read-only group toHaveCount(0) (objectui#13436 — INSERT is exempt from readonlyWhen); no pin drives an edit form of a paid invoice
  • records-forms.conditional-rules-header pins: the parent's pin list includes objectui e2e/live/list-row-action-cel.spec.ts, which the ref names only to say it was DROPPED at revision 3 (it gates the task list's Mark Done, not the invoice's Edit/Delete) — a ref-parse over-inclusion; it scores no clause
  • records-forms.conditional-rules-header a0/a3: both pins are browser tests that read the DOM directly via Playwright locators (no screenshot step), which satisfies render-first only because Playwright waits for visibility
  • records-forms.delete-behavior-matrix a0–a4/n0–n3: every pin is engine-level (ObjectQL over a test driver); precedent QA run · tier1:24681-touched (63/82) · 307ce4c4 · 2026-10-20 · 10 PASS / 53 PARTIAL / 0 FAIL / 0 BLOCKED / 19 NOT-RUN #24840 scored a0–a4, n0–n3 PASS from them before the layer rule — at the api oracle they score not-run until a REST pin exists.
  • records-forms.delete-behavior-matrix a5: packages/spec/src/data/field.test.ts ('deleteBehavior: set_null on master_detail is a parse-time rejection') pins the FieldSchema accepts deleteBehavior: 'set_null' on a master_detail, and the engine silently resolves it to cascade #9689 parse seam at schema level and is not in the ref; the verify's PUT refusal has no pin.
  • records-forms.encrypted-field-behavior a0: the dogfood pin scores the masked-GET half only; the 'secret:<handle>' column / sys_secret ciphertext leg is asserted only in packages/objectql/src/secret-fields.test.ts at the engine layer (the verify makes that leg conditional on DB inspection)
  • records-forms.field-history-tracking a2: objectui e2e/live/record-history-display.spec.ts (in the ref, claiming no clause) does open showcase_account's History tab, so it holds a2's flag-true half in a browser; the task-detail absence half has no pin
  • records-forms.field-type-constraints a5/a6: ref says engine-lookup-referential-integrity / engine-autonumber-runtime-owned pin these; both drive ObjectQL in-process, not the /data door the api oracle names
  • records-forms.field-type-constraints ref names field-zoo.matrix.ts — a data module, not a test file (correctly absent from pins)
  • records-forms.field-type-constraints a0-a4: the ref's 'round-trip & masking' pin asserts only accepted vectors; none of the refusal codes (max_length, min_value, max_value, invalid_number, invalid_option, invalid_type) is pinned at any layer by the ref
  • records-forms.field-type-matrix ref names field-zoo.matrix.ts (a vectors module, not a test file) — a ref parser must treat it as a fixture, not a pin; field-zoo-value-shape.test.ts (in pins) asserts no clause directly (write vectors parse under valueSchemaFor)
  • records-forms.field-type-matrix a5/n1: ref implies relational coverage incl. data: a lookup accepts an id that does not exist in the referenced object — including the RBAC permission-set link tables #4441, but field-zoo-roundtrip only seeds real ids; no dangling-id refusal is asserted
  • records-forms.field-type-matrix a4: f_autonumber is a 'present' check (non-null) — 'server-assigned' is inferred from it not being written
  • records-forms.field-unique-enforcement a4: clause text says bare unique 'NULL-organization rows fold to ONE bucket' (ADR-0120 D3); both pins now assert the opposite — 'a row with NO organization is exempt — ... the D3 bucket retired' (memory) and 'on a pre-18 nullable column, rows with no organization are NOT constrained (ADR-0131 D1)' (SQL). The clause needs re-authoring; it cannot score pass from these pins as written
  • records-forms.field-unique-enforcement a0-a3/n0-n2: ref correctly says no pin drives a REST door
  • records-forms.form-dirty-guard a0/n0: discardGuard.test.tsx covers the X close + Cancel + pristine paths for ModalForm/DrawerForm, but no Escape or backdrop-click case
  • records-forms.form-dirty-guard a2: the file holds 11 it() cases at the pin; the '14/14' cited from QA run QA run · surface:browser (65/65) · 36b2889c · 2026-10-12 · 50 PASS / 2 PARTIAL / 12 FAIL / 1 BLOCKED / 0 NOT-RUN #23163 will not match this tree's count
  • records-forms.gantt-interactions a1/a2: ref maps these clauses to component/unit cases (cases exist at pin b41ed7f), but the clauses' oracle is api (row-set diffs / server reads) — the pins stop at the component's update callback and cannot score them
  • records-forms.gantt-interactions ref names objectui commit 0abd4f9 for the per-clause mapping; the run pin is b41ed7f (the named cases are present there)
  • records-forms.import-job-undo-cancel a3: the ref says each spec covers acceptance[3] ('the job list read on undoable and revertedAt'); the specs read the list once before undo (filter undoable && !revertedAt) and confirm the revert only through the UI testid import-history-reverted-<id>, so 'revertedAt once a job is reverted' is never read off GET /import/jobs
  • records-forms.import-job-undo-cancel a1/n0: both specs count with an unfiltered GET /api/v1/data/<object> and read records.length — a page-bounded list length, not the clause's marker-filter count — and they self-skip (IMPORT_CONSOLE_LIVE / harness reachability) and default to crm_app/crm_lead, so a skip or a non-showcase target scores nothing
  • records-forms.import-wizard-encoding-and-hints pins are objectui files (repo objectui → /home/claude/ou-pin); they score a0–a2 only when the objectui pin worktree's vitest runs them
  • records-forms.list-view-capabilities a1: ref says saved-view-filter.spec.ts covers acceptance[1]; it asserts only that no showcase_task data response was >=400 and the count bar starts '2 ' — the AST filter param and the count-vs-response-total match are not captured
  • records-forms.list-view-capabilities showcase-search.dogfood.test.ts is in the ref but, as the ref itself says, scores no clause of this item
  • records-forms.master-detail-atomic-save pins list includes e2e/live/summary-rollup.spec.ts, but the ref states it was dropped at revision 5 and asserts no clause — a ref-parse over-capture (it names the file in prose)
  • records-forms.master-detail-atomic-save a0: master-detail.spec.ts pins carrier-neutrally on showcase_project_workspace with one child; the two-line invoice payload and 'not N sequential writes' (batch count) remain the run's
  • records-forms.object-hook-lifecycle a0: the pin drives POST /forms/contact-us/submit (anonymous, status 'closed' stripped), not POST /api/v1/data/showcase_inquiry omitting source/status as the verify names — the hook's 'web' stamp is engine-side so it scores, but the /data door itself is undriven
  • records-forms.object-hook-lifecycle a6/n0: hook-error-format.dogfood.test.ts proves a throwing beforeDelete (hef_ref_guard, default onError) leaves the row; no pin drives a throwing beforeInsert POST
  • records-forms.object-hook-lifecycle ref says the four objectql units ran '83 tests'; this tree has 79 it() cases across them (25+12+22+20) — count drift, not a missing file
  • records-forms.predicate-relationship-traversal a3 is scored from an engine pin by the item's own knownGaps (no restricted persona on stock showcase) — a deliberate layer exception, not a rule-6 pass for an HTTP oracle
  • records-forms.record-clone-contract ref says packages/rest/src/search-clone-route-schema-conformance.test.ts 'drives the live mount' — it calls the registered handler on RestServer(mockServer) with a mocked protocol whose cloneData returns a constant body; no HTTP adapter, no engine
  • records-forms.record-clone-contract a3: the verify names 'the Check whether sys_session.token — a live session credential — serializes over the data API (ADR-0100 channel 3 has no read protection) #7823 strip suite' but the ref names no such file; packages/metadata-protocol/src/protocol.write-response-internal-fields.tripwire.test.ts (enumerates cloneData) exists and is not in the ref
  • records-forms.record-clone-contract ref spells files as 'packages/metadata-protocol — search-clone-schema-conformance.test.ts' (package + em dash + basename, no src/ path) — a strict path parser would miss both; the parent resolved them
  • records-forms.record-discussion-mentions a5: comments-permission-matrix '(f) enable.feeds:false still answers FEEDS_DISABLED' asserts 403 + code on its cmt_nofeeds fixture; it does not read the thread's zero rows after the refusal
  • records-forms.record-discussion-mentions a6/n3: capability-gate-update-verb.test.ts is engine-level (ObjectQL + installAuditWriters), as the clause itself says
  • records-forms.record-discussion-mentions a8: the clause names objectui recordActivityFeed.test.ts as a fallback oracle, but it is not in automated.ref (objectui), so a ref-driven run never executes it
  • records-forms.record-discussion-mentions a9: mention-recipient-gate.integration.test.ts is engine-level; the ref itself says partial at most
  • records-forms.record-edit-undo UndoManager.test.ts tests only the in-memory undo/redo stack; it scores no clause of this item (none of the clauses is a stack-semantics clause) — the ref should say so explicitly
  • records-forms.view-type-gallery a5: the pin is a Playwright spec (pnpm -C examples/app-showcase test:smoke) that needs a built console and a live stack — it scores only if the parent actually runs it; a vitest-only pin run leaves a5 not-run.
  • records-forms.write-answer-advisories-rollback-and-tree-delete a1: advisory-write-answer.test.ts calls ObjectStackProtocolImplementation createData/updateData in-process — the REST PATCH body is not observed
  • records-forms.write-answer-advisories-rollback-and-tree-delete a2/n0: engine-after-hook-abort-unit.test.ts drives ObjectQL directly; no HTTP pin for the aborting afterInsert
  • records-forms.write-answer-advisories-rollback-and-tree-delete a3: scored on the referenceless tree fixture (rtl_*), not a showcase object — acceptable since the clause names no carrier

From #25817 — release-18.2.0-manual-set, 29 items, at 6679644a, pin b41ed7f68956

  • records-forms.action-location-matrix:
    • The related-list header renders the list_toolbar Reassign…, as in 18.1.
    • The sidebar "More actions" shares its accessible name with the header ⋯, a click trap; scope the click to main.
    • The quick bar names its actions explicitly, so recalc_estimate is absent there by page authoring.

Acceptance

  • Every line above is either applied (item revised, revision bumped, history cites the record) or answered on this card with the reason it was not.
  • pnpm check:platform-checklist is green.
  • The PR links this card and [sweep] v18.2.0 release test sweep #25807.

Generated by Claude Code

Activity

  1. added
    documentationImprovements or additions to documentation
    area:devpathThe road — create, dev, verify, publish/install, connect an agent, iterate
    and removed on Oct 25, 2026
  2. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 1 · 2026-10-26T12:26Z
    Session: session_01Q4MDXRbEJCNdPAP4SiXwp9 (devx seat 2) · card thread session_01RtaemQoSDLDAyNK1TyVh2P
    Account: os-steve
    Branch: claude/project-thread-na4l37 (the harness-pinned branch of the card thread; it names no issue, so this claim is the identity record)
    Worktree: objectstack-issue-25846
    Domain: domain:devx
    Seat: domain:devx#2 (seat post #20163)
    File surface: docs/qa/platform-checklist/areas/records-forms.json only (stop on breach; explain in the report)
    Container & model: M, mode:thread, model: default tier (TIER_DEFAULT, from dispatch-gates --tier: no path-derived mandate), effort: high
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a — not a defect card
    Thread-read: none
    Premise: holds (action surface git log origin/main on the file since filing: main touched the file after filing: #26028 (2026-10-26T10:03Z), re-read every line against current main; the dev re-reads each line against main first)
    Serial constraints cleared: own ledger file only; seat 1 holds #25835 / #25836 on other files; #26035 left the retired objectui pin wording in these files to these cards; no other Claim: names this file


    Generated by Claude Code

  3. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 25846,
      "status": "done",
      "branch": "claude/project-thread-na4l37",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/26125",
      "head": "82952908",
      "session": "session_01RtaemQoSDLDAyNK1TyVh2P",
      "premise_still_valid": true,
      "summary": "34 records-forms items revised, one revision bump and one history row each (ref #25846, citing #25812 / #25815 / #25817). 55 of the 60 card lines applied; 5 answered without an edit (below). The retired pin wording (.objectui-sha, pnpm objectui:build) and the 13 objectui-pinned-automation knownGaps copies in this file now point at ui/ and pnpm console:build. No line was a product defect.",
      "not_applied": [
        "field-unique-enforcement a0-a3/n0-n2: confirms the ref as written",
        "object-hook-lifecycle '83 tests' vs 79: refuted, 79 it() call sites include a four-row it.each in hook-binder.test.ts, so 83 tests run",
        "record-discussion-mentions a6/n3: confirms clause and ref text (engine-level pin)",
        "record-discussion-mentions a9: confirms the ref's 'partial at most'",
        "write-answer-advisories-rollback-and-tree-delete a3: the line itself rules the rtl_* fixture acceptable (clause names no carrier)"
      ],
      "files_changed": ["docs/qa/platform-checklist/areas/records-forms.json"],
      "line_budget": "400 changed lines (+302 / -98) in 1 file, against the 3000 human-merge threshold: under",
      "tests": "n/a: docs-only, no package touched, so no build closure or package test is owed",
      "gates": "at 82952908: pnpm check:platform-checklist exit 0 (OK, 16 areas, 329 items, symbol anchors 986/996, 18 file floors held); dispatch-gates --commands derived 13 families, all 13 exit 0 (check:doc-formula-expressions first exit 3 on an unbuilt prerequisite, then exit 0 after turbo build of @objectstack/formula + @objectstack/lint under os-verify-lock, VERDICT command-exit 0); --ran: 13 derived, 13 run, 0 NOT-MEASURED, 0 UNRUN (derived zero, every line carries its exit code); check-platform-checklist --changed-from origin/main exit 0. CI check-runs: in_progress at report time",
      "dogfood_battery": "n/a: no ! in the PR title and no (narrowing) arm",
      "mcp_calls": "5: GitHub MCP issue_read x5 (get #25846, get_comments #25846 x2, get #26052, get #26035); no MCP write",
      "api_writes": "2 relay strokes: pr_create (POST /repos/objectstack-ai/objectstack/pulls draft, POST issues/26125/assignees, POST issues/26125/labels skip-changeset), comment (POST issues/25846/comments, this report); plus 2 git pushes (not REST)",
      "deviations": [
        "two git pushes, not one: the second commit (82952908) carries devx seat 2's mid-run direction to rewrite the 13 objectui-pinned-automation knownGaps copies, folded into each item's single revision bump",
        "no reviewer request on the PR: the session asks for one through a GitHub MCP write, and the dispatch forbids MCP writes; assignee os-steve was set through pr_create"
      ],
      "open_questions": [],
      "out_of_scope_findings": [
        "carrier: #26035 · RUNNER.md's objectui-pinned-automation standing fact still says this checkout holds none of the objectui specs and sends runs to an objectui checkout at the pinned revision; the same knownGaps copy remains on items in attachments-storage.json (1), automation.json (2) and studio-authoring.json (4). Noted in the PR's Acceptance notes, not filed"
      ]
    }

    Generated by Claude Code

  4. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    ContributorAuthor

    devx seat 2 · review: ACCEPT → PR #26125 comment 6417003079. Landing: ready + merge queue once every check on the reviewed head is green or skipped.


    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:devpathThe road — create, dev, verify, publish/install, connect an agent, iteratedocumentationImprovements or additions to documentationdomain:devxpriority:p2Medium: important, M3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions