Skip to content

QA run · surface:browser (65/65) · 36b2889c · 2026-10-12 · 50 PASS / 2 PARTIAL / 12 FAIL / 1 BLOCKED / 0 NOT-RUN #23163

Open

Description

@objectstack-fleet

Half 2 of #23104, browser selector. The maintainer's order, verbatim: 「objectui pin 更新到最新版,并使用浏览器对前端界面进行完整的测试」. Every runnable surface:browser item was driven in a real browser against objectstack 36b2889c with the console built from the new objectui pin 1fb1ced36243 (a local stand-in for PR #23110's head, explained below). The surface:mixed record for the same subject is filed separately, and this record's closeout comment links it. Text only: screenshots were consulted live as oracles and are not attached. The durable truth stays in docs/qa/platform-checklist/areas/.

Environment fingerprint

  • Framework (subject): objectstack-ai/objectstack 36b2889cddc5e38acf7f85b8e186b02e6ef786c6 (test(plugin-security): retire the declared-permission seeder suites (#22897)), in the detached worktree /home/user/objectstack-qa-23104, framework and console built.
  • Console: .objectui-sha set LOCALLY to 1fb1ced36243c325acc801bdde26bd096a15f5f5, with sdui.manifest.json and scripts/sdui-manifest.record.json regenerated from the built objectui tree at that pin (sha256 f545b851c4bb…, byte-identical to PR chore(objectui): move the console pin to 1fb1ced36243 (objectui main tip, Half 1 of #23104) #23110's). The console dist stamp equals the pin, both in packages/console/dist/.objectui-sha and as served by GET /_console/.objectui-sha. Console source questions were read at that revision.
  • Why this tree stands in for the pin PR: it differs from PR chore(objectui): move the console pin to 1fb1ced36243 (objectui main tip, Half 1 of #23104) #23110's head 043b81d13 only in pin-citation strings inside spec descriptions, the sdui-parser lockstep JSON, two changesets and one docs reference page. Runtime code and console bundle are identical. PR chore(objectui): move the console pin to 1fb1ced36243 (objectui main tip, Half 1 of #23104) #23110 has since landed on main as f451a5964, and the first full-battery main run carrying it (CI push run 38332364381 at bcebd8409) passed, Console Pin Gate included.
  • Checklist: items, RUNNER.md and scripts/checklist-select.mjs come from the subject tree. Every item's revision is in the table and matches the selector's output.
  • App / boots: examples/app-showcase booted with objectstack dev --ui --seed-admin -p PORT -d file:/tmp/qa-23104/LANE/ITEM.db, with OS_PORT exported and a per-boot OS_HOME and OS_STORAGE_LOCAL_ROOT. Lanes A / B / C used the disjoint port ranges 44100–44399 / 44400–44699 / 44700–44999. Browser: Playwright on /opt/pw-browsers/chromium, one context per item. Admin admin@objectos.ai came from --seed-admin. Other personas were minted per item (invite + sign-up, or admin/create-user + change-password), and identity was proven with GET /api/v1/auth/get-session before each persona cell.
  • Execution: three parallel runner subagents (lanes A, B, C) in Claude Code session session_016JB93R2KcQP4GgKaUnseVF, dispatched by the PM seat domain:devx#2, from about 23:30Z on 2026-10-12 (lane C from 23:42Z). A container restart around 02:30Z killed all three mid-run. Each lane resumed from its own surviving results file at 02:33–02:34Z: judged items were kept byte-identical, and the not-run items (A 16, B 12, C 11) were re-run from scratch on fresh -r2 state (DB, OS_HOME, storage root). The lanes finished on 2026-10-13 (C 03:32Z, B 03:57Z, A 04:28Z). Concurrency stayed at three lanes. Tier-1 pins that live in this repository ran batched under scripts/pm/os-verify-lock.sh (--maxWorkers=2) and are cited. Items whose automated.ref lives only in objectui were driven by hand, and objectui pins were run from an objectui checkout at the pin where the lane could.
  • RUNNER rule 7: the one P0 fail (platform-core.builtin-apps-nav-render A2) was re-derived independently by the PM seat from objectui source at the pin before it was filed (console: a member opening an app they may not access at its package-id URL gets "This app can't be opened" instead of the access-denied screen — the access probe asks the by-name route with the package id and reads its 404 as not found objectui#12285).
  • Hop regression: none. No fail's cause lies inside the hop's 11 objectui commits (7578323a544e..1fb1ced36243). Every fail clause records hop_suspect: false, and the console-side fails in conditional-rules-grid, calendar-interactions, concurrent-edit-conflict and console-installability-indicators carry an explicit hop-range git log over the implicated files that returned empty.
  • Deviations, stated:
    • CRM manifest in the shared tree for 25 s. Lane B's first marketplace boot-B attempt ran from the tree. Its inline install-local POST wrote examples/app-showcase/.objectstack/installed-packages/com.example.crm.json into the shared tree from 03:44:53 to 03:45:18Z. install-local caches relative to the working directory and is not redirected by OS_HOME or OS_STORAGE_LOCAL_ROOT. The package was removed through DELETE /api/v1/marketplace/install-local/com.example.crm, the empty directory was removed, and git status was unchanged afterwards. Lane A confirmed that no boot of its started in that window. Its two boots running across it scored no clause on the app list, and its next boot served only showcase_app, setup, account. Boot B was re-run from a scratch copy.
    • Declared shared boots. Lane B ran many items on S1 (read-only/platform, 44401) and S2 (identity/access, 44402). Lane C's studio1 boot hosted three studio items. lifecycle-retention-sweep and interrupted-migration-boot-report shared one DB and boot sequence. Each item records which boot it used.
    • Scratch copies, never the tree. Pinned Playwright smoke suites (nav-surfaces-render A0, view-type-gallery A5) ran from byte-identical scratch copies so their state stays out of the read-only tree. Scratch showcase copies under /tmp/qa-23104/ carried app-level fixtures: palette visibility leaves, capability probes, walled-posture boots, the picklist fixture, marketplace boot B and job fixtures.
    • Non-default boots, per item: OS_LOG_LEVEL=info, OS_LOCALIZATION_TIMEZONE / OS_MAIL_SMTP_PASSWORD, OS_TENANCY_POSTURE=group|isolated, OS_PAGE_REACT=off, OS_CLOUD_URL=off, the scheduled-work boot, a local OIDC provider fixture, and a scratch PostgreSQL 16 on 127.0.0.1:44790.
    • Resume mechanics. The dead run's partial screenshots were moved aside and are not cited. Resumed lane-C boots use the http://localhost origin, because 127.0.0.1 answers 403 INVALID_ORIGIN on sign-in. Native confirm() dialogs were accepted explicitly through page.on('dialog'). Pins touched by the restart were re-run fresh under the lock.
    • Time split (environment vs test driving, minutes, the lanes' estimates): A 17 / 103 (resumed portion only), B ≈38 / 220, C ≈34 / 190.

Scope

node scripts/checklist-select.mjs surface:browser --json on the subject tree returned 65 runnable items. It hid no item as blocked and printed no planned item. All 65 received a verdict. Lane split: A 34, B 16, C 15. Clause ids are the lanes' own labels, which the extracted cards cite.

item rev verdict evidence (server truth / browser / pin)
access-security.share-link-landing-page 1 PASS five links minted by the liaison (201); password leg 401 NEEDS_PASSWORD then WRONG_PASSWORD then the record; revoked / expired 410 and invalid states each render their own screen; signed_in audience renders a dedicated "Sign in required" state (401 SIGN_IN_REQUIRED), member 200; standalone layout, no login redirect
ai.console-ai-surface-gating 3 PARTIAL C1b blocked(environment: no agent-serving catalog on the open framework); agent-less boot: no FAB / dock / AI entry, /ai falls back to Home with no chat frame, no "AI Approvals" advertised, bare route 501 named; C5 (authored expected-fail K2) holds the honest contract: one 501 read, no re-arm, no empty state under the alert
api-backend.api-console-discovery-execute 1 PASS tree groups equal the usable /discovery services (no AI / UI / Realtime / Search group); List showcase_task 200 equals a direct GET; 404 RECORD_NOT_FOUND and 400 VALIDATION_FAILED shown verbatim from the wire; reached by deep link (step-1 nav note)
approvals.account-app-entry 2 PASS dist stamp = pin, bundle carries the approvals:inbox contribution; a non-admin reaches the inbox from Account (Setup not served to them); drawer approve round-trips; cold deep link opens the drawer; record link keeps the app segment; zh-CN labels hold
approvals.inbox-keyboard-flow 1 PASS j / k move the ring; r / a open one alertdialog and send exactly one POST on confirm; inert in search, with a dialog open and on the decision-outputs row; drawer arrows walk requests; decisions land on the focused row's request (API read)
approvals.inbox-metadata-actions 4 PASS rendered action sets equal the served visibility predicates for a non-override approver (Ada), the override admin and the submitter; drawer approve and remind round-trip; exactly one new /actions row per action naming actor and kind
approvals.notification-deep-link 5 PASS remind is submitter-only (403 for the admin), so the opening path was used; two cold loads of /system/approvals?request=ID open the drawer with fields equal to the API; the account-inbox route opens the same drawer; unknown ids 404 REQUEST_NOT_FOUND with the named toast
approvals.pending-count-surfaces 1 PASS bell "9+", popover breakdown 12 = 1 + 11 unclamped, Home card and My Pending tab equal the console's own pending query; Home card routes to the inbox for admin and Ada
approvals.per-group-signoff 6 PASS per_group manager / finance tallies equal the API at every stage; the run stays paused until the last group decides; two approve rows with distinct actors; forged actorId and a non-holder refused 403
approvals.quorum-m-of-n 4 PASS scored on the runtime fixture (#21845): 2-of-3 met by Ada + Lena, a reject closes the request, tally line equals decision_progress, the remaining holder drops off; repeat and non-holder decisions 403; the stock clamp recorded as contrast only
approvals.record-page-decisions 1 PASS Approve / Reject lead the record header; one dialog and exactly one POST on confirm; status and /actions re-read; lockRecord gates inline edit (editable under manager_review, locked under exec_review); no decision buttons when nothing is pending
approvals.setup-nav-entry 1 PASS served group_approvals order equals the sidebar; Approvals Inbox lands on the inbox component; zh-CN labels 审批中心 / 审批申请 / 审批历史 / 审批委派(外出)
approvals.viewer-gating-submitter-side 6 PASS submitter sees only remind / recall / comment; can_act=false; forged approve 403 in both shapes; request and /actions byte-identical before and after
attachments-storage.inline-grid-receipt-cells 3 PASS one Receipt column, one file input per row and no text input; presigned, PUT, complete; the batch stores the bare file id; sys_file committed with ref_object / ref_id / ref_field (objectui-pinned, driven by hand)
automation.screen-flow-roundtrip 3 PASS the row action launches through POST /actions (paused at collect); /screen serves the contract and the dialog renders it; resume completes and the task reads the new assignee; empty-inputs resume 400 stays paused; Cancel sends nothing, run stays resumable
automation.setup-packaged-automation-board 2 PASS served nav entry; 30 rows = 30 packaged flows; toggle persists to sys_metadata_activation across reload; 409 subflow refusal and 400 clone validation rendered verbatim; one Clone per row; A7 member posture recorded (see accuracy list)
dashboards.chart-first-paint 2 PASS cold load at 1440×900 draws KPI tiles and bars with axes on Chart Gallery and Delivery Operations; 5 bars = 5 statuses; hero tiles equal direct reads; every dataset query 200
dashboards.chart-type-matrix 4 PASS 20 ChartType variants each judged against the data API (marks = buckets); combo with two axes; treemap / sankey / scatter distinct; single-value family; pivot cells match; compareTo renders "vs previous period"; coverage and dashboard-compareto pins green
dashboards.drill-through-range 2 PASS month, status and matrix-cell drills send their own bounds; drawer counts equal API replays (2 / 4 / 6 / 2), each below the unfiltered 10; the drawer heading names the bucket
dashboards.global-filters-rescope 3 PASS region and custom range re-query every bound widget on its own field; the opted-out widget never re-queries; tiles equal direct dataset queries; the composing tile shows the intersection; D1 Reset, D2 field override, D3 static and optionsFrom options pass (D2 / D3 on scratch dashboards)
i18n.notification-localized-and-clears 3 PASS interpolated title in the zh recipient's inbox; the click opens a zh record page; POST /notifications/read 200 clears unread server-side and survives reload; EN-session control reads English
i18n.studio-follows-app-locale 4 PASS the avatar-menu switch writes sys_user.locale zh-CN; Studio chrome, lock banner and relative dates (6天前) follow; no dotted keys; survives reload; switching back restores English
i18n.surface-matrix 6 FAIL A5 toast half: the only zh successMessage specimens post to /api/v1/showcase/recalc, which answers 500 (no principal); product defect, same root as #23128; A0–A4, A6–A10 pass (labels, options, headers, locale envelopes, empty unknown locale, tenant flip)
identity-auth.phone-signin-surfaces 3 PASS seeded phone user readable; the create-user dialog carries phoneNumber and the list shows it; the phone param appears only where features.phoneNumber is true
identity-auth.sso-enforced-first-paint 2 PASS the enforced boot never paints a password input (3 cold loads, MutationObserver 0); SSO-only surface with "Use a password instead"; a hung sign-in re-enables after the 20 s watchdog; the unenforced boot paints the form first
integration-system.flow-connector-picker 3 PASS picker lists exactly the 5 served connectors with origin tags; the MCP action and its input render from the descriptor
platform-core.builtin-apps-nav-render 5 FAIL A2: a member at the canonical Setup URL gets "This app can't be opened" instead of the access-denied screen (the probe asks the by-name route with the package id, 404); product defect, objectstack-ai/objectui#12285; A0 Setup 45/45 + Account 8/8 walked; A1, A3–A6 pass; the server refusal (403) holds
platform-core.console-installability-indicators 1 FAIL C2: the connection chip shows nothing during a mid-session backend outage (2 fresh reproductions + an emulated failure); product defect, objectstack-ai/objectui#12295; C0 manifest from runtime branding, C1 Offline pill, C3 no service worker pass
platform-core.console-login 4 PASS form sign-in lands /home with both auth halves; reload stays authed; server sign-out gives 401 on bearer and cookie; the console returns to login with the redirect param; re-login lands back; wrong password 401 sets nothing
platform-core.docs-portal-render 2 PASS index lists the served books; cross-references resolve inside the reader; the app-scoped tree equals the package's docs; the member reaches docs through the Help menu with a tree equal to the member API; 0 pageerror
platform-core.home-admin-cluster-links 2 FAIL A2: legacy system/roles, positions, permissions land on the Setup metadata catalog, not the object routes the clause pins (objectui#7611); stale spec, #23121; A0, A1, A3 pass
platform-core.keyboard-shortcut-surface 2 FAIL C2 / C3: expected-fail probes K1a / K1b whose defects are gone (the dialog advertises only wired shortcuts, objectui#11674); stale spec, #23121; C0, C1 pass; C4 blocked(environment) as prescribed
platform-core.marketplace-console-honesty 3 PASS the offline boot carries Installed Apps but not Browse; the Disabled card on the offline boot; a local install is listed under Installed Apps (scratch copy); the member gets the admin-only card; no destructive frame across reloads
platform-core.nav-surfaces-render 6 PASS showcase-smoke 49/49; 49 served nav leaves = SURFACES both ways; an unknown object renders a named not-found in the live shell; no ErrorBoundary fallback
platform-core.shell-nav-personalization 2 PASS collapse persists; pins under "Favorites" survive reload in ui.favorites; keyboard and pointer reorder of pinned items; object favorites; Recent group of 5; breadcrumb crumbs are switcher menus; authored links not sortable
platform-core.theme-mode-persistence 1 PASS dark / light apply synchronously and persist (key object-ui-theme); system follows the emulated preference on reload; the dark surface is coherent
platform-core.url-overlay-contract 1 PASS drawer / form / tab overlays push and pop history; deep tab links; the formLink pre-link survives a cold load; breadcrumb trail; object-mismatch refusal (objectui-only pins, driven by hand)
records-forms.action-location-matrix 9 FAIL A2: the api leg answers 500 (POST /api/v1/showcase/recalc refused as a principal-less write); product defect, #23128; flow / modal / script / form / url legs round-trip; A0, A1, A3 pass; A4 blocked(fixture: runtime-authored actions are not served)
records-forms.adhoc-filter-sort-builder 2 PASS toolbar filter ANDs with the view filter; sort round-trips; filters restored per user (the key carries the user id); uf_ params deep-link in a fresh context
records-forms.bulk-select-all-matching 2 PASS on the re-pointed fixture (55 scratch tasks): select-all-matching fans out to 55 ids; one aggregate POST with 55 ids; Clear resets; HARD_CAP 5000 read from source and pin (the live set stays below it)
records-forms.calendar-interactions 2 FAIL A3: empty-day quick-create is a dead end on showcase_task (required lookup Project, no input, 400); product defect, objectstack-ai/objectui#12291; A0 drag persists, A1 a 404 snaps back with a toast, A2 views match the API
records-forms.conditional-rules-grid 3 FAIL A4: saving one edited line rewrites the stored position of an untouched sibling (stock INV-1001); product defect, objectstack-ai/objectui#12286; A0–A3 pass
records-forms.crud-roundtrip 9 PASS create / edit / delete each one write with exact before-after diffs; reload agrees; History shows labels and the real actor; CJK round-trip and search; clone re-derives ids and owner; contributor gates hold
records-forms.form-dirty-guard 2 PASS dirty X / Escape prompt; a clean form closes with no guard; Discard leaves the row byte-identical; discardGuard pin 14/14 (run from the objectui repo root)
records-forms.form-view-gallery 2 PASS simple / tabbed / wizard overlays render on the page route; the wizard blocks on required fields with 0 writes; the conditional notes field mounts; each save's diff is exact; tab and step switches keep input
records-forms.gantt-interactions 3 PARTIAL A2-leaf blocked(fixture: no lockField on the stock view, no pin reaches a locked leaf); bar drag persists; scheduling pins 38/38; a 404 snaps back with a toast
records-forms.grid-personalization 3 PASS column resize persists (grid-columns-showcase_task); density survives reload through the view overlay; group headers equal the API; rowColor paints by priority
records-forms.import-wizard-encoding-and-hints 5 PASS a GBK CSV decodes in the wizard (pin + live); the missing-required hint names label (name) and disables Next; legacy reference-guard pin; server import 2/2
records-forms.kanban-drag-persistence 1 PASS a drop sends PATCH and survives reload; an illegal transition 400 invalid_transition snaps back with a toast
records-forms.list-view-capabilities 1 PASS 11 variants each with its own request; server paging 57/57 distinct; quick search; sort; inline edit one-key PATCH; export through a runtime allowExport grant (export is opt-in); view switcher; bulk per-record and aggregate dispatch
records-forms.lookup-picker-create-new 2 PASS create-new from the picker; the parent carries the child id; debounced server search scoped to the target; no create on the sys_user lookups
records-forms.master-detail-atomic-save 3 PASS one atomic batch with $ref; the server roll-up equals the line sum across add / remove; an invalid line aborts the whole batch; read-only live amount
records-forms.record-discussion-mentions 3 PASS optimistic comment keeps the client id; feed order; a mention notifies only the mentioned user; FEEDS_DISABLED 403 on create and re-thread; filter modes; milestone activity
records-forms.record-edit-undo 2 BLOCKED A0–A3 blocked(fixture): at this pin Undo is pushed only for actions declaring undoable, the showcase declares none, and a runtime-authored undoable action is not served
records-forms.related-list-server-pagination 4 PASS server paging (top 5 / skip), 26/26 distinct = API total; relatedList title and columns honoured; drill to the child; contributor / manager read gate both sides
records-forms.saved-view-management 1 PASS create (draft, then Publish), rename, default, pin and delete persist; the member sees no controls and its forged PUT / DELETE answer 403
records-forms.script-action-hook-refusal-toast 1 PASS the hook's 400 sentence in exactly one error toast (2 loads); the one POST; record unchanged
records-forms.upload-guard-blocks-confirm 2 PASS Confirm disabled while the PUT is held; the dispatch carries the sys_file id; over-size files refused before the wire; a recovery upload succeeds
records-forms.view-type-gallery 1 PASS 9 view types each render their own visualization; kanban column counts and estimate sums equal the API; calendar / timeline / gantt dates match; 10 map markers; org chart; smoke 49/49
search.command-palette-navigation 2 PASS empty-query corpus; each type navigates and closes the palette; the theme command applies (the palette stays open, see observations); Switch App equals the served apps; visibility predicate honoured (scratch copy); full search page
studio-authoring.packaged-automation-studio-lock 1 PASS read-only package: no New, the switch disabled with a reason title, a forced click sends nothing, inspector inputs disabled, forged writes 403, flow byte-identical
studio-authoring.packaged-display-class-direct-edit 1 FAIL A3 / N1: resetting a published view overlay answers 200 reset:true, but the view list reads and the end-user list keep serving the overlay until restart; product defect, #23149; A0–A2, A4, N0, N2 pass (the dashboard leg resets clean)
ux-conventions.disabled-control-reason 1 FAIL A0 / A1 / A2: Studio's read-only Field properties controls are disabled with no reason and no keyboard path; Studio Publish and import Next carry reasons a keyboard cannot reach; product defect, objectstack-ai/objectui#12303; the Archive pattern passes
ux-conventions.labels-over-machine-names 1 FAIL A0 / A2: the Studio permission-set list and Changes panel show machine names, and the lookup Display-field picker puts the API name first (objectstack-ai/objectui#11862, existing, commented); A1: Explain's Principal-resolution prose names the user by raw id (#23157); A3 pass
ux-conventions.write-feedback 1 FAIL A0: inline-edit Save All and Studio Discard draft give no feedback (objectstack-ai/objectui#12303); A1: the drawer Approve toasts a bare "Approved." (#23157); A2–A4 pass (10 of 12 variants give feedback); A5 blocked(fixture: no stock Undo)

Totals: 50 PASS / 2 PARTIAL / 12 FAIL / 1 BLOCKED / 0 NOT-RUN.

Fails — reproduction rules and dispositions

Product defects

platform-core.builtin-apps-nav-render · A2 (P0 item): product defect, objectstack-ai/objectui#12285.

  1. Boot the stock showcase. Sign in through the form as the member phone.demo@example.com / showcase123 (get-session 200, positions org_member, everyone).
  2. Open /_console/apps/com.objectstack.setup, the package-id segment the admin's own Setup links use.
  3. Network: GET /api/v1/meta/app 200 (setup absent), then GET /api/v1/meta/app/com.objectstack.setup → 404 RESOURCE_NOT_FOUND.

platform-core.console-installability-indicators · C2: product defect, objectstack-ai/objectui#12295.

  1. As admin on an app surface, "Connected" appears at 842 ms and is gone by 2874 ms (this half holds).
  2. Stop the backend mid-session by killing the server's process group.
  3. Poll the page every 0.5 s for 20 s for Connected|Reconnecting|Disconnected|Connection error|Offline|Failed|Error.
  • Expected: a reconnecting or error chip that stays prominent while the backend is down.
  • Actual: no chip at all. The Tasks grid shows stale data while background GETs fail with net::ERR_CONNECTION_REFUSED. Seen on 2 full stop/restart reproductions plus one emulated failure (Playwright aborting the api routes).
  • Self-check: the same poller sees "Connected" on load and "Offline" under setOffline.
  • Mechanism: AppHeader.tsx:702 renders ConnectionStatus from the adapter's ConnectionState. data-objectstack/src/index.ts:3360-3440 moves that state only inside connect(), the initial discovery. The hop range is empty for these files.

records-forms.conditional-rules-grid · A4: product defect, objectstack-ai/objectui#12286.

  1. On a fresh boot, GET /api/v1/data/showcase_invoice_line?$filter=[["invoice","=","INV-1001 ID"]] returns Consulting hours at position 0 and Widget A units at position 1.
  2. Open /_console/apps/showcase_app/showcase_invoice/record/INV-1001 ID/edit. The grid reads …showcase_invoice_line?top=500&filter=[invoice,=,ID] with no orderby and renders server order (Widget A first).
  3. Change only the Consulting hours Qty (input[aria-label=Qty]) from 10 to 11, then Save.
  • Expected: only the edited line in the batch; Widget A byte-identical.
  • Actual: POST /api/v1/batch carries an update for the untouched Widget A {position:0}. On re-read, Widget A moved 1 → 0 (updated_at bumped) and Consulting 0 → 1. Same on INV-1002, on 2 fresh loads.
  • Mechanism: plugin-form MasterDetailForm.tsx readLinesOf calls find(child, {$filter, $top:500}) with no sort by the derived sortField. fields GridField.tsx emit() stamps row[sortField]=index on every change. The hop range is empty. The add-line edit in master-detail-atomic-save showed the same re-stamp.

records-forms.calendar-interactions · A3: product defect, objectstack-ai/objectui#12291.

  1. On a fresh boot as admin, open /_console/apps/showcase_app/showcase_task/view/calendar.
  2. Click an empty day cell (role=gridcell, aria-label "Tuesday, October 20, 2026"), type a title and click Create.
  • Expected: a real row whose due_date is the clicked day.
  • Actual: POST /api/v1/data/showcase_task {title, due_date:"2026-10-20", status:"backlog"} → 400 fields[{field:project, code:required}], and the dialog offers only Title. Reproduced on Oct 21 in a fresh context.
  • Mechanism: plugin-calendar ObjectCalendar.tsx submitQuickCreate auto-fills required select / boolean / number fields only, so a required lookup falls through to the server error. The hop range is empty.

records-forms.action-location-matrix · A2: product defect in the showcase example (framework repo), #23128.

  1. On a fresh boot as admin, open /_console/apps/showcase_app/showcase_task/record/ANY TASK ID.
  2. Header ⋯ → "Recalculate Selection" (or "Recalculate Estimate") → Run.
  • Expected: 200, with the estimate recomputed.
  • Actual: POST /api/v1/showcase/recalc {"recordId":"ID"} → 500 "[Security] Access denied: operation 'update' on object 'showcase_task' was called with a context that carries no principal …". estimate_hours is unchanged (40 → 40). The aggregate body {_selectedIds:[…]} from the bulk-actions view gets the same 500. Reproduced 4 times. The flow, modal, script, form and url legs all round-trip.
  • Mechanism: examples/app-showcase/src/system/server/recalc-endpoint.ts calls ctx.ql.update('showcase_task', …, {where}) with no execution context, and the security layer refuses it.

i18n.surface-matrix · A5 (toast half): product defect with the same root, commented onto #23128.

  1. As admin on zh-CN, open /_console/apps/showcase_app/showcase_task/record/ANY TASK.
  2. Record ⋯ (record_more) → 重算工时 (an api action targeting /api/v1/showcase/recalc).
  • Expected: 2xx, then the toast 工时已重算。
  • Actual: POST /api/v1/showcase/recalc → 500 (no principal), and the raw server text is toasted. A direct POST as admin gives the same 500. Seen in 2 UI and 2 API reproductions.
  • These are the only zh successMessage specimens, so no zh success toast can attach to a 2xx. The label half passes live, and the confirm half passes from the objectui pins. This is a defect in the fixture against the seed (RUNNER rule 3).

studio-authoring.packaged-display-class-direct-edit · A3 and N1: product defect, #23149.

  1. On a fresh boot with the admin bearer, GET /api/v1/meta/view/showcase_task and take the item, stripping the underscore keys. Set the list label to "All Tasks (X)" and drop the progress column.
  2. PUT /api/v1/meta/view/showcase_task?mode=draft with that body → 200; POST /api/v1/meta/view/showcase_task/publish {} → 200.
  3. GET /api/v1/meta/view serves showcase_task.default as "All Tasks (X)" with 6 columns (expected).
  4. DELETE /api/v1/meta/view/showcase_task → 200 {success:true, reset:true}.
  5. GET /api/v1/meta/view/showcase_task.default → "All Tasks", 7 columns (correct).
  • Expected: GET /api/v1/meta/view and GET /api/v1/meta/view?object=showcase_task also serve the base.
  • Actual: both still serve "All Tasks (X)" with 6 columns after 30 s, and still after more than 3 min. The end-user list's first tab reads "All Tasks (X)" for admin and for Ada, in a fresh context. A server restart heals it.
  • Reproduced twice, designer-driven and API-driven, on two fresh DBs. N1, the item's own negative, is the same defect. The dashboard leg resets clean.
  • Likely mechanism: publish registers the expanded view items (object.viewKey) through hydrateExpandedViewItems (packages/metadata-protocol/src/protocol.ts ~19241). deleteMetaItem's registry heal (~19540-19565) restores only the bare container entry.

ux-conventions.write-feedback · A0 (variants V2 inline edit and V11 Studio discard): product defect, objectstack-ai/objectui#12303.

  • V2:
    1. As admin (or member), open /_console/apps/showcase_app/showcase_task/view/grid with inline edit on.
    2. Open the Priority cell of "Build homepage", pick Low, then click "Save All (1)".
    • Expected: visible success feedback naming the change.
    • Actual: PATCH /api/v1/data/showcase_task/ID 200 and the value lands, but no [data-sonner-toast], role=status or role=alert text appears within 3 s. Seen 3 times.
    • Source: ObjectGrid.tsx defaultBatchSave / defaultRowSave persist, then call setRefreshKey only.
  • V11:
    1. Take a scratch-package object with a pending draft and open /_console/apps/setup/metadata/object/OBJ.
    2. Click "Discard draft" and accept the native confirm.
    • Expected: a confirmation naming what was discarded.
    • Actual: DELETE …?state=draft 200 and the banner disappears, with no feedback text. Seen twice.
    • Source: ResourceEditPage.tsx doDiscardDraft (~1876).
  • The other 10 measured variants all give feedback.

ux-conventions.write-feedback · A1: product defect in a framework-declared string, #23157.

  1. As admin, open /_console/apps/setup/component/approvals/inbox and open a pending request.
  2. In the drawer, click Approve, fill the comment and Confirm.
  • Expected: success text naming the request; the inline row path says Approved "TITLE".
  • Actual: POST /api/v1/approvals/requests/ID/approve 200 and the toast reads only "Approved.". Seen twice.
  • Source: packages/plugins/plugin-approvals/src/sys-approval-request.object.ts:474 successMessage: 'Approved.'.

ux-conventions.disabled-control-reason · A0, A1, A2: product defect, objectstack-ai/objectui#12303.

  • A0 / A2:
    1. As admin, open /_console/studio/com.example.showcase/data?surface=object:showcase_task → Form → field Priority → Field properties rail.
    2. Hover the disabled Label input or "Remove".
    • Expected: a tooltip or adjacent text saying why (the package is read-only).
    • Actual: nothing; title null, no aria-describedby, empty reason. Seen on 2 fresh reproductions (Priority and Status).
    • Source: StudioDesignSurface.tsx (~5519) passes readOnly to the inspector, which disables its inputs without a reason.
  • A1:
    1. Focus "Changes" in the Studio header and press Tab: focus skips the disabled Publish, whose reason is a title on a disabled button with no focusable wrapper.
    2. The rail's disabled inputs are skipped too.
    3. In the import wizard, a CSV without a project column leaves the disabled Next with no aria-describedby or title.
    • Expected: the control, or a focusable wrapper in the tab order, carries the reason. The Archive pattern does this and passes (objectui#11811 fixed).

ux-conventions.labels-over-machine-names · A0, A2: product defect, objectstack-ai/objectui#11862 (existing card, commented).

  • A0:
    1. As admin, open Studio, create a writable package, then More → Access → New permission set "QA Readers" (qa_readers) → Save as draft.
    2. Reload /_console/studio/PKG/access: the list item reads qa_readers while the detail header reads QA Readers.
    3. The Changes panel row reads "PERMISSION · 1 | qa_readers", and the lookup inspector shows "Related object: sys_user".
    • Seen on 2 fresh loads.
  • A2: Studio → Data → an object → Form → a Lookup field → Picker config › Display field. Each row puts the api_name first in dark monospace, with the label grey and truncated.
  • Expected (both): the label primary, the machine name secondary.

ux-conventions.labels-over-machine-names · A1: product defect in a framework-built string, #23157.

  1. As admin, open Studio → a writable package → More → Access → Explain access (Me, an object, Read) → Explain.
  2. Read Evaluation pipeline › Principal resolution: "Principal USER-ID holds position(s) [...]". Seen on 2 fresh runs.
  • Expected: the person's name or email.
  • Source: built server-side at packages/plugins/plugin-security/src/explain-engine.ts:2061.

Checklist clauses (stale spec, no product defect)

platform-core.home-admin-cluster-links · A2: stale spec, #23121. The item was revised to rev 3 on main by #23132.

  • Driven: as admin, /_console/apps/setup/system/roles, /system/positions and /system/permissions, on 2 fresh loads.
  • Actual: the final URLs are /_console/apps/setup/metadata/position?scope=environment (roles and positions) and …/metadata/permission?scope=environment. users and organizations match the map.
  • Clause expects: the sys_position / sys_permission_set object routes.
  • Why the product is right: objectui AppContent.tsx has routed these to SystemCatalogRedirect since objectui#7611 (ADR-0131 D3).

platform-core.keyboard-shortcut-surface · C2 and C3: stale spec, rows on #23121. These are expected-fail probes K1a / K1b whose defects are fixed. ⚠ The item is still rev 2 on main: #23132 did not take these two rows.

  • C2: the dialog inventory reads General: Close dialog / panel Esc, Open command palette ⌘ K, Show keyboard shortcuts ?; Navigation: Toggle sidebar ⌘ B. Bare B does nothing and Ctrl+B toggles, so display and binding agree.
  • C3: none of ⌘/, N, R, ⌘E or ⌘D is advertised. Each still does nothing, measured against its own effect: no search focus, 0 dialogs, 0 refetches in 1.5 s, no edit surface, theme class unchanged.
  • Source: objectui#11674 ("the dialog lists only shortcuts whose handler is mounted").
  • Recorded as fail per the expected-fail contract (never ticked green), and flagged for revision to the positive assertion.

Partial and blocked coverage (named, not dropped)

  • ai.console-ai-surface-gating C1b: blocked(environment). The entitled side needs an agent-serving catalog (Cloud/EE service-ai, or a VITE_AI_BASE_URL console rebuild). This is known (qa(checklist): park the blocked partial-coverage gaps of the 17.7 pre-release runs (#21720, #21721, #21782, #21784) — each gets a fixture recipe, a pin, a re-pointed clause or a recorded knownGap #22017 row 9).
  • records-forms.gantt-interactions A2-leaf: blocked(fixture). Dragging a locked leaf bar needs a lockField, and the view-overlay recipe is not run-proven.
  • records-forms.record-edit-undo A0–A3: blocked(fixture). The stock showcase has no undoable edit path at this pin (see the accuracy list).
  • Inside failing items:
    • action-location-matrix A4 half (a): blocked(fixture), because runtime-authored actions are not served.
    • keyboard-shortcut-surface C4: blocked(environment), as prescribed (no agent).
    • write-feedback A5: blocked(fixture), because no stock surface offers Undo.
  • Marketplace catalog content (builtin-apps-nav-render A0, marketplace-console-honesty boot A): blocked(environment). Egress to cloud.objectos.ai is denied (knownGaps, not a clause).

Fixture gaps / checklist accuracy

Recorded on passing clauses, or as fixture prerequisites. Each one closes out through the family card #23121.

  1. records-forms.saved-view-management steps 0–1 and A0: the Create View dialog is draft-first (PUT …?mode=draft, then Publish). The steps omit the publish leg (stale spec).
  2. records-forms.list-view-capabilities A6: no stock permission set grants allowExport. The item needs a provisioning note: a runtime set {object_permissions.showcase_task:{allowRead, allowExport}} bound by sys_user_permission_set with the set's NAME.
  3. records-forms.record-edit-undo fixtures.requires: inline edits push no Undo op, only undoable actions do. The showcase needs a packaged undoable action (operation update + patch).
  4. records-forms.action-location-matrix A4 step 6(a): a runtime-authored scratch action is not served, so the locations-less probe needs a packaged specimen.
  5. records-forms.bulk-select-all-matching: the fixture is stale. showcase_contact declares no bulkActions and its 34 rows fit one page. The run re-pointed to the showcase_task "Bulk Actions" view with 55 scratch tasks.
  6. records-forms.form-view-gallery: the overlay recipe must carry item-level isDefault:true, or publish drops it and the console falls back to the all-fields layout (objectui#11539).
  7. records-forms.form-dirty-guard A2 and import-wizard-encoding-and-hints A0: the verify strings pnpm --filter @object-ui/PKG exec vitest run src/… are refused by objectui's vitest guard (objectui#3378). Run pnpm exec vitest run packages/PKG/src/… from the objectui root.
  8. records-forms.form-dirty-guard step 1 / negative: the footer Cancel is a deliberate discard with no prompt, by design (ModalForm.tsx L739, pinned). The wording does not distinguish it from accidental closes.
  9. dashboards.global-filters-rescope D2 / D3: no stock dashboard declares a globalFilter with optionsFrom, and D2 needs a writable package. Add both to fixtures.requires.
  10. ux-conventions.write-feedback: the knownGaps objectui#11817 (Invite feedback), objectui#11807 (Studio Publish) and objectui#11816 (inline no-op dirty) are fixed at this pin, and the declared invite message is Invitation sent to ${result.email}. Studio discard lives on the metadata designer, not the pillars. A scratch object needs the package namespace prefix.
  11. ux-conventions.disabled-control-reason: knownGap objectui#11811 is fixed (Archive carries a focusable reason). The Studio Publish "known PASS" calibration holds for hover only, not keyboard.
  12. ux-conventions.labels-over-machine-names: the knownGaps are partly stale. objectui#11866 is fixed, objectui#11778 is fixed for the Node Type value, and objectui#11862 is fixed for the Explain principal line and the nav editor, but still reproduces for the Access list and the Changes panel.
  13. search.command-palette-navigation: the knownGaps recipe (a scratch showcase copy with visible 'true' / 'false' nav leaves) is now run-proven.
  14. i18n.surface-matrix: …/view/tabbed renders the grid, not the tabbed form. The knownGap claiming that the task record page's sections render EN in every locale is stale.
  15. i18n.studio-follows-app-locale step 4: metadata list / history surfaces carry no relative dates. They live on the Studio Data pillar's records grid.
  16. access-security.share-link-landing-page C3: knownGaps[2] is stale. The console now renders a dedicated "Sign in required" state for SIGN_IN_REQUIRED, and the item asks to be revised when that happens.
  17. api-backend.api-console-discovery-execute step 1: the "Studio → Developer → API Console" nav exists only in studio.app.ts, which a stock boot does not load. Reach the page by deep link (/_console/apps/setup/developer/api-console).
  18. ai.console-ai-surface-gating C5: expected-fail K2 is fixed (objectui#11736: a refused 501 stops the poll chain, and there is no empty state under the alert). Revise to drop the expected-fail wording.
  19. platform-core.keyboard-shortcut-surface C4: ⌘⇧O / ⌘⇧S are not listed in the global dialog at all (objectui#11674), so the "listed globally" premise is stale.
  20. platform-core.theme-mode-persistence: the storage key is object-ui-theme, not vite-ui-theme, and ModeToggle lives under the avatar menu's Preferences (stale step text, still at rev 1).
  21. approvals.notification-deep-link step 1: POST …/remind is submitter-only (403 for the dev admin on seeded requests). The opening path (or /reassign) is the workable source (assertion defect).
  22. automation.screen-flow-roundtrip A0: the verify regex /automation/[^/]+/trigger is stale. The console launches through POST /api/v1/actions/OBJECT/ACTION.
  23. automation.setup-packaged-automation-board A7: at this build a plain member cannot open Setup, and the activation read answers 403, against the recorded expectation. Recorded, not adjudicated: a maintainer question per the clause.
  24. studio-authoring.packaged-automation-studio-lock A2 / A3: knownGaps[0] and the "CURRENT RECORDED FINDING" expected-fail wording are stale. Both the switch and the inspector honour readOnly.
  25. integration-system.flow-connector-picker A0: the knownGap's installed-package lock did not reproduce for an env-wide flow.
  26. Setup recipe: per-boot OS_HOME + OS_STORAGE_LOCAL_ROOT do not isolate install-local, which caches under the working directory's .objectstack/installed-packages. Any item that installs a package (platform-core.marketplace-console-honesty, platform-core.marketplace-install-local-lifecycle) must boot from a scratch copy.
  27. approvals.quorum-m-of-n: the stock showcase_committee_quorum clamps 2-of-3 to 1-of-1, because every slot resolves to the admin. Scored on the runtime-fixture recipe from QA run · follow-up: 6 previously unrun or published-only items (6/6) · 316be321 + 53021e3a · 2026-10-05 · 4 PASS / 0 PARTIAL / 2 FAIL / 0 BLOCKED / 0 NOT-RUN #21845 (known).

Observations outside any clause (not verdicts)

Unverified product observations and UI polish, listed so they are not lost. None of them is scored, and none is filed unless a card is named.

  • search.command-palette-navigation: theme commands apply but leave the palette open (2 / 2 contexts, click and Enter). CommandPalette.tsx:138 runCommand captures a first-render setOpen with stale search params. Not a hop regression. Also listed on QA run · surface:browser (61/61) · 316be321 · 2026-10-04 · 38 PASS / 8 PARTIAL / 15 FAIL / 0 BLOCKED / 0 NOT-RUN #21782, and still present.
  • approvals.notification-deep-link A4: on an unknown id the drawer stays open and blank after the toast (ApprovalsInboxPage.tsx openDrawer). GET …/requests/UNKNOWN/actions answers 200 with an empty list.
  • records-forms.action-location-matrix: the Log Time form page renders outside the app shell under the raw heading showcase_task.form, and toasts "Action completed successfully" before any submit. The aggregate recalc 500 shows no toast, while the per-record 500 toasts the raw security message.
  • i18n.surface-matrix: the settings override chip reads "Overrides 默认". The raw "[Security] Access denied … (isSystem: true)" text reaches an end-user toast. The write locale lags a tenant flip by about 1 s.
  • records-forms.list-view-capabilities: JSON export renders the boolean done as 否 on an en session, and ignores the fields= projection.
  • records-forms.crud-roundtrip A4: History shows a currency change unformatted (1234567).
  • ux-conventions.labels-over-machine-names:
    • the audit log's Object column shows API names (object_name is a text field);
    • Explain's verdict line and the flow trigger summary use object machine names;
    • metadata version history reads "by USER-ID", and "Back to item" stays EN on a zh session.
  • dashboards.chart-type-matrix A7: on a month-bucketed line, comparison rows come back keyed by the unshifted month, so the previous-period series plots beside the window.
  • approvals.setup-nav-entry A2: the System Overview stat captions (Users / Sessions / Events) stay English under zh-CN.
  • approvals.pending-count-surfaces: the popover header reads "1 notifications" and "1 pending approvals", with no singular form.
  • platform-core.console-installability-indicators C0: #favicon has an empty href with type image/png, because the runtime config serves no faviconUrl.
  • identity-auth.sso-enforced-first-paint C2: the dev-instance banner still advertises admin@objectos.ai / admin123 under SSO-only.
  • api-backend.api-console-discovery-execute C3 (server side): an unparsable JSON body is read as empty and answered with the "required" VALIDATION_FAILED envelope, not a parse error. Also listed on QA run · surface:browser (61/61) · 316be321 · 2026-10-04 · 38 PASS / 8 PARTIAL / 15 FAIL / 0 BLOCKED / 0 NOT-RUN #21782.

Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 13, 2026

    @objectstack-fleet
    ContributorAuthor

    Close-out · PM seat domain:devx#2 record composer, session_016JB93R2KcQP4GgKaUnseVF · 2026-10-13T04:58Z

    Sibling record: #23166 (surface:mixed, same subject 36b2889c + objectui pin 1fb1ced36243, same run). Card: #23104 (Half 2).

    Every fail on this record has one of the four dispositions and a carrier. Every product defect is its own card in the repository its fix lands in. The two stale-spec rows sit on the family card #23121. No authorization finding arose on this selector.

    Extracted: objectstack-ai/objectui#12285 · platform-core.builtin-apps-nav-render · A2
    Extracted: objectstack-ai/objectui#12295 · platform-core.console-installability-indicators · C2
    Extracted: objectstack-ai/objectui#12286 · records-forms.conditional-rules-grid · A4
    Extracted: objectstack-ai/objectui#12291 · records-forms.calendar-interactions · A3
    Extracted: #23128 · records-forms.action-location-matrix · A2
    Extracted: #23128 · i18n.surface-matrix · A5
    Extracted: #23149 · studio-authoring.packaged-display-class-direct-edit · A3
    Extracted: #23149 · studio-authoring.packaged-display-class-direct-edit · N1
    Extracted: objectstack-ai/objectui#12303 · ux-conventions.write-feedback · A0
    Extracted: #23157 · ux-conventions.write-feedback · A1
    Extracted: objectstack-ai/objectui#12303 · ux-conventions.disabled-control-reason · A0
    Extracted: objectstack-ai/objectui#12303 · ux-conventions.disabled-control-reason · A1
    Extracted: objectstack-ai/objectui#12303 · ux-conventions.disabled-control-reason · A2
    Extracted: objectstack-ai/objectui#11862 · ux-conventions.labels-over-machine-names · A0
    Extracted: #23157 · ux-conventions.labels-over-machine-names · A1
    Extracted: objectstack-ai/objectui#11862 · ux-conventions.labels-over-machine-names · A2
    Extracted: #23121 · platform-core.home-admin-cluster-links · A2
    Extracted: #23121 · platform-core.keyboard-shortcut-surface · C2
    Extracted: #23121 · platform-core.keyboard-shortcut-surface · C3
    Parked-on: #23121 · records-forms.saved-view-management · steps 0–1 / A0 omit the publish leg
    Parked-on: #23121 · records-forms.list-view-capabilities · A6 export provisioning note
    Parked-on: #23121 · records-forms.record-edit-undo · A0–A3 blocked(fixture): needs a packaged undoable action
    Parked-on: #23121 · records-forms.action-location-matrix · A4 step 6(a) blocked(fixture): needs a packaged specimen
    Parked-on: #23121 · records-forms.bulk-select-all-matching · fixture stale (showcase_contact has no bulkActions)
    Parked-on: #23121 · records-forms.form-view-gallery · overlay recipe needs item-level isDefault
    Parked-on: #23121 · records-forms.form-dirty-guard · A2 verify string refused by objectui#3378
    Parked-on: #23121 · records-forms.import-wizard-encoding-and-hints · A0 verify string refused by objectui#3378
    Parked-on: #23121 · records-forms.form-dirty-guard · step 1 / negative: deliberate Cancel discards by design
    Parked-on: #23121 · records-forms.gantt-interactions · A2-leaf blocked(fixture)
    Parked-on: #23121 · dashboards.global-filters-rescope · D2 / D3 fixtures.requires
    Parked-on: #23121 · ux-conventions.write-feedback · knownGaps stale (objectui#11817, objectui#11807, objectui#11816)
    Parked-on: #23121 · ux-conventions.write-feedback · A5 blocked(fixture): no stock Undo
    Parked-on: #23121 · ux-conventions.disabled-control-reason · knownGap objectui#11811 stale
    Parked-on: #23121 · ux-conventions.labels-over-machine-names · knownGaps partly stale
    Parked-on: #23121 · search.command-palette-navigation · knownGaps recipe now run-proven
    Parked-on: #23121 · i18n.surface-matrix · tabbed path renders the grid; record-page sections knownGap stale
    Parked-on: #23121 · i18n.studio-follows-app-locale · step 4: relative dates live on the Data pillar grid
    Parked-on: #23121 · access-security.share-link-landing-page · knownGaps[2] stale
    Parked-on: #23121 · api-backend.api-console-discovery-execute · step 1 nav lives only in studio.app.ts
    Parked-on: #23121 · ai.console-ai-surface-gating · C5 expected-fail K2 fixed (objectui#11736)
    Parked-on: #23121 · platform-core.keyboard-shortcut-surface · C4 "listed globally" premise stale
    Parked-on: #23121 · platform-core.theme-mode-persistence · storage key object-ui-theme; ModeToggle under Preferences
    Parked-on: #23121 · platform-core.marketplace-console-honesty · setup recipe: install-local caches under the working directory
    Parked-on: #23121 · approvals.notification-deep-link · step 1: remind is submitter-only
    Parked-on: #23121 · approvals.quorum-m-of-n · stock committee clamps 2-of-3 to 1-of-1
    Parked-on: #23121 · automation.screen-flow-roundtrip · A0 verify route regex stale
    Parked-on: #23121 · automation.setup-packaged-automation-board · A7 member posture (maintainer question)
    Parked-on: #23121 · studio-authoring.packaged-automation-studio-lock · knownGaps[0] / A2–A3 expected-fail wording stale
    Parked-on: #23121 · integration-system.flow-connector-picker · A0 knownGap lock did not reproduce
    

    Environment-blocked legs are recorded in the body and need nothing more (RUNNER extraction obligation): ai.console-ai-surface-gating C1b, platform-core.keyboard-shortcut-surface C4, and the marketplace catalog content.

    ⚠ #23121 is closed. PR #23132 landed its first six rows and closed the card. The two keyboard-shortcut-surface rows (C2 / C3), appended after that claim, were not taken: the item is still rev 2 on main. The rows parked above are added to #23121 in comment 6138566194. Until #23121 is reopened, or its rows move to a successor family card, this record's closeout debt stays open, and the record stays open with it.


    Generated by Claude Code

  2. objectstack-fleet commented on Oct 13, 2026

    @objectstack-fleet
    ContributorAuthor

    Parked-on target moved · PM seat domain:devx#2, session_016JB93R2KcQP4GgKaUnseVF · 2026-10-13T05:03Z

    The closeout above parks this record's checklist-accuracy and fixture rows on #23121, which had already closed (completed) after PR #23132 landed its first six rows. Those rows now live on the successor family card #23169; the lines below supersede the closeout's Parked-on: #23121 lines one for one. The Extracted: lines above are unchanged.

    Parked-on: #23169 · records-forms.saved-view-management · steps 0–1 / A0 omit the publish leg
    Parked-on: #23169 · records-forms.list-view-capabilities · A6 export provisioning note
    Parked-on: #23169 · records-forms.record-edit-undo · A0–A3 blocked(fixture): needs a packaged undoable action
    Parked-on: #23169 · records-forms.action-location-matrix · A4 step 6(a) blocked(fixture): needs a packaged specimen
    Parked-on: #23169 · records-forms.bulk-select-all-matching · fixture stale (showcase_contact has no bulkActions)
    Parked-on: #23169 · records-forms.form-view-gallery · overlay recipe needs item-level isDefault
    Parked-on: #23169 · records-forms.form-dirty-guard · A2 verify string refused by objectui#3378
    Parked-on: #23169 · records-forms.import-wizard-encoding-and-hints · A0 verify string refused by objectui#3378
    Parked-on: #23169 · records-forms.form-dirty-guard · step 1 / negative: deliberate Cancel discards by design
    Parked-on: #23169 · records-forms.gantt-interactions · A2-leaf blocked(fixture)
    Parked-on: #23169 · dashboards.global-filters-rescope · D2 / D3 fixtures.requires
    Parked-on: #23169 · ux-conventions.write-feedback · knownGaps stale (objectui#11817, objectui#11807, objectui#11816)
    Parked-on: #23169 · ux-conventions.write-feedback · A5 blocked(fixture): no stock Undo
    Parked-on: #23169 · ux-conventions.disabled-control-reason · knownGap objectui#11811 stale
    Parked-on: #23169 · ux-conventions.labels-over-machine-names · knownGaps partly stale
    Parked-on: #23169 · search.command-palette-navigation · knownGaps recipe now run-proven
    Parked-on: #23169 · i18n.surface-matrix · tabbed path renders the grid; record-page sections knownGap stale
    Parked-on: #23169 · i18n.studio-follows-app-locale · step 4: relative dates live on the Data pillar grid
    Parked-on: #23169 · access-security.share-link-landing-page · knownGaps[2] stale
    Parked-on: #23169 · api-backend.api-console-discovery-execute · step 1 nav lives only in studio.app.ts
    Parked-on: #23169 · ai.console-ai-surface-gating · C5 expected-fail K2 fixed (objectui#11736)
    Parked-on: #23169 · platform-core.keyboard-shortcut-surface · C4 "listed globally" premise stale
    Parked-on: #23169 · platform-core.theme-mode-persistence · storage key object-ui-theme; ModeToggle under Preferences
    Parked-on: #23169 · platform-core.marketplace-console-honesty · setup recipe: install-local caches under the working directory
    Parked-on: #23169 · approvals.notification-deep-link · step 1: remind is submitter-only
    Parked-on: #23169 · approvals.quorum-m-of-n · stock committee clamps 2-of-3 to 1-of-1
    Parked-on: #23169 · automation.screen-flow-roundtrip · A0 verify route regex stale
    Parked-on: #23169 · automation.setup-packaged-automation-board · A7 member posture (maintainer question)
    Parked-on: #23169 · studio-authoring.packaged-automation-studio-lock · knownGaps[0] / A2–A3 expected-fail wording stale
    Parked-on: #23169 · integration-system.flow-connector-picker · A0 knownGap lock did not reproduce


    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

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions