Skip to content

QA run · surface:mixed (90/90) · 36b2889c · 2026-10-12 · 72 PASS / 10 PARTIAL / 8 FAIL / 0 BLOCKED / 0 NOT-RUN #23166

Open

Description

@objectstack-fleet

Half 2 of #23104, mixed selector. The maintainer's order, verbatim: 「objectui pin 更新到最新版,并使用浏览器对前端界面进行完整的测试」. Every runnable surface:mixed item (API truth plus a console surface) was driven against objectstack 36b2889c, with the console built from the new objectui pin 1fb1ced36243 (a local stand-in for PR #23110's head). The surface:browser record for the same subject and run is #23163. 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, 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.
  • 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 CI push run 38332364381 at bcebd8409, the first full-battery main run carrying it, passed with Console Pin Gate included.
  • Checklist: items, RUNNER.md and the selector come from the subject tree. Revisions in the table match 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 ports 44100–44399 / 44400–44699 / 44700–44999. Browser: Playwright on /opt/pw-browsers/chromium. Admin admin@objectos.ai came from --seed-admin. Other personas were minted per item, and identity was proven with get-session before each persona cell.
  • Execution: three parallel runner subagents (lanes A, B, C) in Claude Code session session_016JB93R2KcQP4GgKaUnseVF, PM seat domain:devx#2, from about 23:30Z on 2026-10-12.
    • A container restart around 02:30Z killed all three. Each lane resumed from its own results file: judged items were kept byte-identical, and not-run items were re-run from scratch on fresh -r2 state.
    • The lanes finished on 2026-10-13, between 03:32Z and 04:28Z. Concurrency stayed at three lanes.
    • Tier-1 pins in this repository ran under os-verify-lock and are cited. objectui-only pins were driven by hand, or run from an objectui checkout at the pin where installed.
  • Hop regression: none. Every fail clause records hop_suspect: false. concurrent-edit-conflict N2 also carries an explicit hop-range git log over ObjectGrid.tsx that returned empty.
  • Deviations, stated (the full list is on QA run · surface:browser (65/65) · 36b2889c · 2026-10-12 · 50 PASS / 2 PARTIAL / 12 FAIL / 1 BLOCKED / 0 NOT-RUN #23163):
    • The CRM manifest incident (03:44:53–03:45:18Z, removed through the API, git status unchanged). No boot that scored an app-list clause started in that window.
    • Declared shared boots: lane B S1 / S2, lane C studio1, and one shared DB for lifecycle-retention-sweep + interrupted-migration-boot-report.
    • Scratch showcase copies under /tmp: capability probes, walled-posture boots, the picklist fixture, job fixtures and webhook stacks.
    • Non-default boots:
      • OS_LOG_LEVEL=info for the lifecycle / migration INFO lines; at the default level every migration-recovery line is WARN, so it cannot hide one.
      • OS_LOCALIZATION_TIMEZONE / OS_MAIL_SMTP_PASSWORD (env-lock legs) and OS_TENANCY_POSTURE=group|isolated with OS_PLATFORM_OWNER_EMAIL and OS_AUTH_MEMBERSHIP_POLICY=invite-only.
      • OS_PAGE_REACT=off, the scheduled-work boot, the local OIDC provider fixture (oidc2) and a scratch PostgreSQL 16 on 127.0.0.1:44790.
    • The two cli.scaffold-* items took the PUBLISHED path. create-objectstack@latest = 17.7.0 and the published console = objectui 0abd4f9f8769, so their verdicts describe the released bits, not the local pin. The tree's CLI refuses a 17.x scaffold on the ADR-0087 D1 protocol handshake, and the pre-release variant is handed off (see Scope).
    • Pins re-run at resume: one lane-B Tier-1 pin was re-run under the lock (2 files, 33/33), and so was lane C's metadata-diagnostics-sweep A7.
    • Time split (environment / test minutes, lane estimates): A 17 / 103 (resumed portion only), B ≈38 / 220, C ≈34 / 190.

Scope

node scripts/checklist-select.mjs surface:mixed --json on the subject tree returned 90 runnable items, all 90 judged (lane split A 21, B 37, C 32). The selector hid no item as blocked. One planned item matched and is recorded as planned: not driven, and not in the title's counts.

  • records-forms.picklist-shared-across-objects (rev 2): planned.

Handoff, not run: the pre-release (local-registry) variant of cli.scaffold-first-run and cli.scaffold-console-first-paint against the protocol-18 candidate. It needs a scratch monorepo build plus a localhost registry with no upstream. The published-path verdicts are recorded below.

Clause ids are the lanes' own labels, which the extracted cards cite.

item rev verdict evidence (server truth / browser / pin)
access-security.audit-log-browser 4 PASS page rows (login, config_change, delete, update) each backed by a sys_audit_log row with the same action / object / record / actor; Action filter re-queries; drawer shows before / after; POST / PATCH 405 and nothing forged lands
access-security.capability-declaration-lifecycle 3 PASS served capability equals its declaration; held / not-held dispatch through /actions; a shadowing declaration refuses boot with a named catalog conflict; a malformed one fails validate (scratch copies)
access-security.fls-mask-and-strip 3 PASS contributor field write on budget 403, admin 200 with the formula recomputed; inputs disabled for the contributor; liaison by-id / list strip budget keys; pins green
access-security.owd-save-gate 3 FAIL A3: packaged OWD widening is refused 403 NOT_OVERRIDABLE by the ADR-0131 D6 seal, so owd_widening_forbidden is unreachable; stale spec, #23121; A0–A2, A4, A5 pass
access-security.packaged-permission-set-lifecycle 1 FAIL C1 · detail withheld pending maintainer
access-security.permission-matrix-edit-loop 3 PASS a Studio matrix click autosaves a draft; enforcement follows the published set only; Delete and FLS edits flip the member's server answers after publish; assignment add / remove flips 403 / 200; editor reopens on the published state
access-security.public-form-intake 2 PASS anonymous schema lists the four declared fields only; forged anchors / status / source dropped (201, defaults stamped); lookup route 404 identical to an unregistered one; anonymous console submit 201; withdrawal 404 FORM_NOT_FOUND
access-security.readonly-package-locks-studio 4 PASS Studio read-only badges and disabled controls; bare and package-scoped PUTs refused (NOT_OVERRIDABLE / ITEM_LOCKED); writable-base control saves; object byte-identical after the refusals
access-security.record-access-explain 2 PASS explain panel layers, verdict and contributors equal POST /security/explain for the auditor (visible) and a plain member (invisible, sharing); live reads agree; permission-zoo pin green
access-security.sharing-rule-authoring-ui 2 PASS rule authored 201; criteria-less 400; share row source:rule = rule id; the audience gains, then loses access on delete (204, shares gone); Setup list mirrors the rules
api-backend.formula-stdlib-matrix 1 FAIL C1: the registration count moved to 29 (isoDate / isoDatetime, #22347), all 29 pass 73/73 known answers; C6: an unregistered function is refused 422 at the authoring door, not a silent null; stale spec ×2, #23121; C2–C5 pass
approvals.decision-action-matrix 4 PARTIAL A9-wire blocked(fixture: needs an org-less request); every route's status move and /actions row; revise / resubmit rounds and the revision-limit auto-reject; recall and resubmit submitter-only; lockRecord 409; remind throttle 429; A9 from its unit pin
approvals.dynamic-approver-routing 2 PASS decision outputs required (UI blocks, API 400); picked reviewers open stage 2 in pick order; the chain completes the run
approvals.ooo-delegation-reroute 4 PASS self-service delegation reroutes the next request to the delegate with a notification; the delegate's approve is recorded as herself; expiry restores routing; position-routed requests reroute; managing another's delegation 403
attachments-storage.download-authz-both-sides 3 PASS download refused 403 to a member without parent read, allowed on a public_read parent and to the admin; public-read ACL pin 8/8 and live flip; panel download refused after an owner move
automation.connector-dispatch-matrix 2 PASS registry lists plugin and declarative connectors with actions; REST, declarative and MCP dispatches complete from this boot; the Studio picker reads the registry; an unknown connector fails loudly
automation.flow-error-handling 3 PASS try_catch records 4 try failures with retryAttempt 0–3 and the backoff ladder; catch writes sync_error from $error.message; the unhandled probe fails with a run-level error and an ERROR line; designer Runs panel shows the regions
automation.flow-node-type-matrix 4 PARTIAL A1-http blocked(environment: egress denied, http steps fail "fetch failed"); 19 executor descriptors; every other node type has a live successful step; pauses resume; nodeType on every step; region tags; unknown type warns and fails NO_EXECUTOR
automation.flow-run-step-nesting 5 PASS loop × try tags (parent, region, iteration) on every step; parallel branch tags; the designer Runs tree equals the API tags; an empty loop logs no body steps
automation.flow-runs-page-test-trigger 1 PASS Flow Runs page Test Run with typed inputs; recent runs equal the API; a screen flow pauses into the FlowRunner dialog and resumes; Cancel keeps a reopenable pause
automation.rollup-summary-filter 4 PASS six filtered roll-ups equal an independent recomputation and move only when their predicate is touched (edit, flag flip, delete)
automation.time-relative-trigger 2 PASS designer renders the time-relative start; bound on the scheduled-work boot; the sweep (knownGaps cadence override) launches runs for in-window tasks only; a both-modes descriptor refused 422
automation.trigger-type-matrix 3 PASS record_change, signed webhook, schedule (60 s apart, unaided), screen and api triggers each produce runs with the declared trigger block; conformance pin 2/2; anonymous trigger 401; bad or missing signature 401
cli.scaffold-console-first-paint 3 PASS PUBLISHED 17.7.0 path (not the local pin): scaffold exit 0; os dev --ui and npm run dev serve the console; the seeded admin signs in and opens the scaffold object
cli.scaffold-first-run 3 PASS PUBLISHED 17.7.0 path: the blank template validates and builds; a retired template is refused by name; server ready with no protocol refusal; skills install; health inside the budget
dashboards.dataset-report-authoring 1 PASS a layout-less dataset dashboard drafts, publishes and auto-flows; summary / matrix / joined report cells equal direct dataset queries; the chart beside the table issues its own query
dashboards.empty-null-bucket-boundaries 1 PASS an empty window renders designed empty states and 0 tiles equal to direct queries; date-bucket and empty-group parity pins 8/8 + 4/4; null bucket served; a one-point series draws a lone dot
dashboards.strict-widget-rejects-stray-keys 2 PASS 16 stray / legacy widget keys each refused 422 naming the key and the ADR-0021 shape; nothing half-saved (404, no draft); the clean widget publishes and draws
dashboards.system-overview-live-counts 1 PASS Total Users / Active Sessions / login / config tiles equal direct reads; the requiresObject widget is absent with no blank slot; pie and table multi-bucket (A1 caveat and A3 roster stale, see accuracy list)
i18n.strict-translation-key-rejection 2 PASS 10 misplaced keys refused 422 at the metadata door and at both bundle helpers, with did-you-mean and prescriptions; nothing half-saved; the corrected bundle is served
identity-auth.admin-lifecycle-operations 7 PASS ban, credential lifecycle, by-design refusals (set-role / revoke / remove 403), impersonation banner and attribution, audit trail and the 31-route non-admin refusal: pins green with live corroboration
identity-auth.api-key-ui-lifecycle 1 PASS a member creates a key (shown once); key reads equal the owner's; revoke 401, restore 200; another member cannot list it; Account › API Keys lists it
identity-auth.auth-method-matrix 6 FAIL A9: anonymous POST /auth/delete-user answers 401 (session guard) while the clause demands 404 for every caller; authed 404 as pinned; assertion defect, #23121; A0–A8 pass
identity-auth.email-verification-loop 2 PASS sign-up routes to the prompt; the captured token verifies (GET) and flips admission; resend sends a fresh token; a garbage token 401 with the designed error state; requireEmailVerification false on stock
identity-auth.first-run-owner-bootstrap 1 PASS bootstrap-status false → wizard → true; the organization is renamed, never created; document load to Home; closed postures refuse anonymous sign-up; the wizard is unreachable once an owner exists
identity-auth.identity-import-wizard 2 FAIL C2b: the automatic-policy invitation link carries an empty callbackURL and lands on INVALID_TOKEN; product defect, #23152; C0, C1, C2a, C3–C5 pass (one-time passwords never stored in clear)
identity-auth.implicit-account-linking-ownership 1 PASS an unverified owner is not implicitly linked; verification through the product; unlink honoured; explicit signed-in link works; platform IdP exception pinned (local OIDC fixture)
identity-auth.invitation-scope-gates 3 PASS a delegated admin may invite members but not admins (403, no row); a plain member 403; the UI mirrors it; statuses in the enum; delegable scope empty
identity-auth.linked-accounts-social 3 PASS Linked Accounts lists only the viewer's rows; unlink through the row menu; no link affordance without configured providers; data-door writes 405
identity-auth.oauth-app-consent-loop 2 PASS discovery documents served; registration hides the secret; authorize → consent → code → token with PKCE; a remembered consent skips the page; an added scope re-prompts and Deny returns access_denied; others cannot read the consent
identity-auth.org-membership-team-management 3 PASS org record page; a role update grants invite; unknown roles 400; rename; removal revokes the old session; teams; a plain member is refused on every write
identity-auth.self-service-profile-password 1 PASS profile rename, avatar upload / remove, password change (old refused), wrong current password 400 with the credential unchanged; SSO-only leg staged on the OIDC fixture
identity-auth.self-signup-gate 2 FAIL N5: under stock invite_only the register form is not offered to an uninvited visitor (by-invitation notice; form only on an accept-invitation redirect, objectui#11691); stale spec, #23121; A0–A4 pass
identity-auth.session-list-revoke 2 PASS list-sessions and sys_session scoped to the owner; revoke-one and revoke-others take effect on the next request; Setup all-sessions view; data-door writes 405
identity-auth.teams-bu-membership 2 PASS team membership rows; a BU child under its parent; BU membership scopes inquiry visibility; a plain member is refused
identity-auth.workspace-org-switch 2 PARTIAL C3b skipped (premise retired: metadata writes are deployment-level); single posture shows no switcher; a switch posts set-active and reloads the document; the isolated posture bounds reads; group hint; foreign org 403 (walled boots from a scratch copy)
integration-system.datasource-credential-refusal-matrix 4 PASS credential keys refused or redacted alike on every door × publish path; live PostgreSQL binds through credentialsRef; no cleartext in any read; legacy rows redacted; an echo does not overwrite; non-admin 403
integration-system.email-template-render 5 PARTIAL A5 partial (admin half pass; the declared-source edit needs a writable showcase copy); the authored template renders through sendTemplate; a missing variable dead-letters before the transport; inactive refused; locale ladder; from / reply-to; build probes; raw send
integration-system.external-schema-browser-ui 2 PARTIAL A6 blocked(environment: objectui checkout not installed, the stock boot always federates); tables and column counts equal the API; import draft; refresh catalog; validation clean; member 403
integration-system.job-scheduled-run 3 PASS interval / once / cron jobs fire on schedule (scratch copy); rows keyed by name; retry ladder 1 s / 2 s; timeout recorded; disabled and handler-less jobs logged; retired keys refused at build
integration-system.notification-preference-suppression 1 PARTIAL A3-mandatory blocked(fixture: no mandatoryTopics on the stock showcase); a per-user mute suppresses with no dead letter; re-enable and default-on deliver; most-specific wins; template rendering
integration-system.notify-inbox-delivery 2 PARTIAL A3-501 blocked(fixture: the showcase requires messaging); the inbox row lands for the assignee only; read clears; anonymous 401; the push channel adds no inbox row
integration-system.webhook-lifecycle 5 PARTIAL A2 blocked(dependency: in-org bulk flow events carry no organization, so no tenant subscription can receive them); N1 / N2 skipped (time budget); materialization pin; HMAC signature and custom header; redeliver; build refusals; the admin edit survives reboot; durable retry
platform-core.app-management-toggle 2 FAIL C5b: Delete on a code-package app toasts "deleted" for a 200 reset:false; N1: Disable on a writable app toasts success, writes a shadow env-wide row and changes nothing; product defect, objectstack-ai/objectui#12300; C0–C5a pass
platform-core.boot-health 7 PASS health 200 in 16.1 s; ready 200; no misauthored-flow warning or ERROR in the boot window; console served with stamp = pin; served grp_data equals the authored 12
platform-core.interrupted-migration-boot-report 2 PASS a seeded interrupted journal is reported once per boot and not resumed; health and ready stay green; quiet when empty; a scan failure is reported (pins)
platform-core.lifecycle-retention-sweep 1 PASS terminal runs reaped on the real timer (the line needs OS_LOG_LEVEL=info); non-terminal survivors; the archive-less audit row survives; batching pins; kill switch; vocabulary
platform-core.metadata-authoring-roundtrip 2 PASS draft → publish-drafts → published body; the page designer seeds a record page; read-only package 422; managed object 403 while overlays accept; an invalid body 422 with nothing stored
platform-core.notification-center 1 PASS grouped rows (×5, ×3) expand; group Mark read sends one body with all members; Mark all read; the approvals count equals pending requests; no revert after reload
platform-core.package-lifecycle-enable-disable 1 PASS disable hides data and nav, enable restores; delete removes registry entry and rows; commits +1 per publish; revert restores; read-only package refused 422; the console drops the disabled app
platform-core.settings-hub-roundtrip 3 PASS tenant timezone cascade with audit rows; form source badges; env lock read-only with refused writes; SMTP test names the missing host; secrets encrypted and served masked; mask echoes no-op; anonymous refused; 11 namespaces served
records-forms.action-param-widgets 2 PASS each param renders its declared control with accept / multiple; a conformant confirm 200 with every param received; a missing required param blocked in the UI and 400 at the API
records-forms.cascading-multilevel-and-clear 2 PASS the 2-level cascade clears the child on a parent change; the server refuses an out-of-cascade option; the lookup cascade clears and re-scopes; two known gaps recorded as specified
records-forms.cascading-options 3 PASS dependent options in the form; the server refuses an invalid combination; an admin-only option visible to an org admin only; filtered lookup picker; UI create round-trips
records-forms.concurrent-edit-conflict 2 FAIL N2: list-grid inline Save All sends no If-Match, so a stale grid edit silently overwrites a concurrent write; product defect, objectstack-ai/objectui#12292; A0–A5 pass on the form and detail-inline paths (409 dialog, reload, overwrite)
records-forms.conditional-rules-header 2 PASS requiredWhen blocks form and API; readonlyWhen renders text and the server drops the write; a visibleWhen field; action visibility by status; one rule at both ends
records-forms.encrypted-field-behavior 2 PASS a secret is stored as a ref with aes-256-gcm ciphertext and served masked; mask echo no-op; fail-closed pin; aggregate / groupBy on credential fields refused
records-forms.field-group-visible-when 2 PASS the group gates live on the form and on the detail page (stale expected-fail, objectui#11630 fixed); visibleOn refused 422; passthrough pin; hidden members untouched by saves
records-forms.field-history-tracking 1 PASS a tracked field writes a per-field activity row; an untracked edit gives the generic row; History tab gating; the history apiOperation advertised; reference-summary pin
records-forms.field-type-constraints 1 PASS max length, min / max, options, multiselect, reference existence, readonly autonumber and computed formula enforced server-side; the currency-scale known gap recorded as specified
records-forms.field-type-matrix 2 PASS field-zoo pins 46/46 + 45/45; every type renders its control; invalid values refused; masked kinds; computed fields; reference targets; invoice totals equal line sums
records-forms.import-job-undo-cancel 3 PASS console import job (manual, the spec is gated): undo deletes exactly the 40 imported rows; cancel stops a 3000-row job at 600; job listing fields
records-forms.object-hook-lifecycle 3 PASS 5 hooks listed; before-hooks normalize; after-hooks log on the right transition only; record = stored ⊕ payload; abort / log error modes; author-time and runtime condition faults; priority order
search.console-global-search 3 PASS the palette opens by every door; typing queries /api/v1/search; hits grouped by object; Enter navigates; no query for empty / 1-char input; a member gets no hits on rows it cannot read; full results page
search.freshness-and-empty 1 PASS create / rename / delete visible to search immediately; the pinyin companion recomputes without restart; empty result envelope; designed empty state
search.pinyin-flag-both-sides 3 PASS flag ON: full and initial pinyin recall on name fields only; flag OFF: recall gone while source columns still hit; the roster differs by exactly PinyinSearchPlugin; first-boot backfill
studio-authoring.authoring-validation-not-persisted 3 PASS an invalid object and stray view-container keys refused 422 with located messages; nothing persisted (404, draft state included); the designer shows the located banner; corrected bodies save
studio-authoring.custom-page-render-and-blocks 1 PASS command-center KPIs and charts equal the data plane; token-scoped my-work grid; sorted / filtered grid; project workspace child table; a faulty grid block renders a named error; 0 ERROR lines
studio-authoring.custom-page-source-tiers 1 PASS the html tier is static and never executes author JS; the jsx tier fires no data query; the react tier queries live and edits; OS_PAGE_REACT=off withdraws it; a react error renders named
studio-authoring.doc-on-app-menu 1 PASS app-menu doc / book entries pruned per reader audience (6 / 3 / 3); entries resolve to the claiming book; the outsider is refused on every direct route
studio-authoring.draft-publish-lifecycle 4 PASS a draft is never served before publish; publish flips the live read; stale If-Match 409; publish-drafts atomic; a legacy key refused at the draft door; Changes panel; history, diff, rollback and audit attribute the authenticated actor
studio-authoring.expression-editors 3 PARTIAL A7 blocked(environment: pin-only clause, objectui checkout not installed); the formula editor completes and type-checks like the engine; returnType kept per field; visibleWhen catalog; RLS warning vs parse error; test-policy dialog; parity table matches
studio-authoring.first-run-loop 3 PASS new package (CJK name) → object with options → record → app published and launched, all on one server process; forged writes into the read-only package 422 / 403
studio-authoring.metadata-diagnostics-sweep 2 PARTIAL A6 blocked(fixture: no invalid stored row plantable on a stock boot); bare diagnostics envelope; per-type stats equal list reads; package scope; a misspelled type 400; all-clear page; outage pin 10/10
studio-authoring.object-designer-roundtrip 2 PASS the designer derives asset_code on blur; an underscore survives typing; empty picklist rows dropped without the identifier banner (manual run)
studio-authoring.page-variables-and-actions 1 PASS the gated block stays hidden until a project is picked; a reactive hint on typing; submit sends resolved values and creates a real inquiry; reload re-initializes
studio-authoring.permission-matrix-editor-ux 2 PASS field filter + bulk Write / Read / Clear touch only filtered fields; the saved map carries only set fields; clear persists; the matrix scrolls inside its pane at 820 px; the packaged set is read-only with Clone
studio-authoring.picklist-bound-select 1 PASS a bound field saves without a both-declared error; Options-from offers the served picklists; binding autosaves; the inspector shows picklist values read-only; published forms render them; picklist pages read-only
studio-authoring.record-page-roundtrip 3 PASS a new record page is seeded from the default layout; block picker; publish; the end-user record renders the added card
studio-authoring.view-authoring-live 2 PASS a view draft is not served before publish; publish changes list and form on client reload with no restart; a second draft stays isolated until its publish

Totals: 72 PASS / 10 PARTIAL / 8 FAIL / 0 BLOCKED / 0 NOT-RUN (planned: 1, outside the counts).

Fails — reproduction rules and dispositions

Product defects

records-forms.concurrent-edit-conflict · N2: product defect, objectstack-ai/objectui#12292.

  1. On a fresh boot as admin, open /_console/apps/showcase_app/showcase_task/view/grid (inline edit on). Note that Ingest pipeline's Estimate reads 60.
  2. Concurrently PATCH /api/v1/data/showcase_task/ID {estimate_hours:77} with If-Match set to its updated_at → 200.
  3. In the stale grid, click the Estimate cell, type 61, press Enter and click "Save All (1)".
  • Expected: the grid save rides the OCC token, and the stale write is refused 409 with the conflict dialog (the item's negative: an unguarded inline save is a FAIL).
  • Actual: PATCH /api/v1/data/showcase_task/ID {estimate_hours:61} goes out with no If-Match → 200, and the re-read is 61. No 409, dialog or toast. Reproduced twice (77 → 61, 33 → 31).
  • Source: plugin-grid ObjectGrid.tsx defaultRowSave / defaultBatchSave call dataSource.update(object, id, changes) with no ifMatch. The hop range is empty.

platform-core.app-management-toggle · C5b: product defect, objectstack-ai/objectui#12300.

  1. On the stock showcase, sign in as admin through the form and open /_console/apps/setup/system/apps.
  2. Click getByRole('button',{name:'Delete Showcase'}), then getByRole('button',{name:'Confirm delete Showcase'}).
  • Wire: DELETE /api/v1/meta/app/showcase_app → 200 {success:true, reset:false, message:'No customization overlay found … already at artifact default.'}.
  • Expected: no "deleted" success; a neutral "nothing to reset" notice or an error instead.
  • Actual: a success toast "Showcase deleted", while the row stays "Showcase Active" and /meta/app still lists showcase_app after reload. Seen on 2 fresh loads.
  • Source: objectui apps/console/src/pages/system/AppManagementPage.tsx handleDelete calls toast.success without reading reset.

platform-core.app-management-toggle · N1: product defect, objectstack-ai/objectui#12300.

  1. As admin, POST /api/v1/packages {manifest:{id:'com.qa.lanebapp', name:'x', version:'0.1.0', type:'app'}}.
  2. PUT /api/v1/meta/app/lanebapp_app?package=com.qa.lanebapp with {name, label, icon, active:true, navigation:[{id, type:'object', objectName:'showcase_task', label}]}.
  3. In the console, open /_console/apps/setup/system/apps and click getByRole('button',{name:'Disable QA LaneB App'}).
  • Wire: PUT /api/v1/meta/app/lanebapp_app with the body {…app, active:false} and no package query → 200 "Saved app … (env-wide, state=active)".
  • Expected: the app goes inactive and the launcher drops it, or the write is refused with an error toast.
  • Actual: a success toast "disabled", the app unchanged everywhere (GET reports active:true from com.qa.lanebapp), and a new shadow sys_metadata row with package_id null and active:false that is never served. Seen on 2 fresh loads.
  • Source: client handleToggleActive calls meta.saveItem('app', name, {...app, active}) with no package scope. On the server, a PUT without ?package= on a package-owned item writes an env-wide row the reader never serves, and answers 200. Set-default and Bulk take the same path.

identity-auth.identity-import-wizard · C2b: product defect, #23152.

  1. On the stock showcase (dev log email transport), as admin, go to Setup › Users › Import.
  2. Upload a CSV email,name with one row, click Next, choose the policy Automatic, then Import. Wire: POST /api/v1/auth/admin/import-users {rows:[{email,name}], mode:'insert', passwordPolicy:'auto'} → 200 delivery email.
  3. Read the sys_email row to that address: the body link is /api/v1/auth/reset-password/TOKEN?callbackURL= (empty).
  4. GET that link.
  • Expected: landing on a set-password page (/_console/reset-password?token=…), as the console's own forgot-password flow does.
  • Actual: 302 to /api/v1/auth/error?error=INVALID_TOKEN, then a console login banner reading "Single sign-on could not be completed". The token is valid: POSTing it to /auth/reset-password answers 200.
  • Control: request-password-reset WITH redirectTo yields a working link. Reproduced on two wizard imports.
  • Source: packages/plugins/plugin-auth/src/admin-import-users.ts:704 calls requestPasswordReset({ body: { email } }) with no redirectTo.
  • Secondary, on the card: the invitation reuses the password-reset copy.

Authorization finding (RUNNER rule 2 carve-out)

access-security.packaged-permission-set-lifecycle · C1: detail withheld pending maintainer.

Checklist clauses (no product defect)

access-security.owd-save-gate · A3: stale spec, #23121 (item rev 4 on main via #23132).

  • Driven: with the admin bearer, GET /api/v1/meta/object/showcase_announcement and set sharingModel public_read_write, externalSharingModel private. Then PUT /api/v1/meta/object/showcase_announcement with that body.
  • Clause expects: 403 {code:'PERMISSION_DENIED', declaredCode:'owd_widening_forbidden'}.
  • Actual: 403 {code:'NOT_OVERRIDABLE'} ("sealed against in-place edits … ADR-0131") with no declaredCode. The tightened control and ?package=com.example.showcase are refused the same way, and the object stays byte-identical.
  • Why the product is right: the ADR-0131 D6 managed-content seal (feat(metadata-protocol)!: managed content is sealed — OS_METADATA_WRITABLE no longer opens an item a managed package ships (ADR-0131 D6, #15206 S2) #22401) now answers ahead of the plugin-security R1 gate the clause pins. The protection holds.

identity-auth.auth-method-matrix · A9: assertion defect, #23121 (rev 7 via #23132).

  • Actual: POST /api/v1/auth/delete-user {} with no credentials → 401 UNAUTHORIZED; with a member bearer → 404; the callback → 404. No caller gets 2xx.
  • Clause expects: 404 for every caller.
  • Why the product is right: packages/plugins/plugin-auth/src/change-email-delete-user-wiring.test.ts pins anonymous 401 (mounted, session-guarded) next to authed 404. Re-word: authed 404, anonymous 401, never 2xx.

identity-auth.self-signup-gate · N5: stale spec, #23121 (rev 3 via #23132).

  • Actual: on a stock boot (no auth.audience declared), /_console/login shows no Sign up link, and /_console/register renders [data-testid=register-by-invitation] with no inputs.
  • Control: /_console/register?redirect=%2Faccept-invitation%2FINVITATION-ID renders the full form.
  • Clause expects: the link and the form for every visitor.
  • Why the product is right: objectui RegisterPage.tsx / signUpOffer.ts have offered the form only to invitation redirects and zero-owner deployments since objectui#11691 / objectui#11705.

api-backend.formula-stdlib-matrix · C1: stale spec, #23121 (rev 2 via #23132).

  • Actual: step 1's re-count moved. registerStdLib registers 29 functions: the item's 27 plus isoDate and isoDatetime (345d3f3d8, feat(formula): isoDate(t) / isoDatetime(t), the string form of a CEL timestamp #22347). content/docs/data-modeling/formulas.mdx lists the same 29.
  • All 29 pass their known answers against the built packages/formula/dist: 73/73 asserted rows. Int / double types were asserted CEL-side.
  • Inside the item: the literal row joinNonEmpty(['a', null, ' ', 'b'], '-') cannot evaluate, because cel-js refuses a heterogeneous list. The same semantics over record fields give 'a-b'.

api-backend.formula-stdlib-matrix · C6: stale spec, #23121 (rev 2 via #23132).

  • Actual: PUT /api/v1/meta/object/qa_formula_probe adding a field bad_f = sqrt(4) → 422 INVALID_METADATA "… sqrt is not a callable name here — a NAME fault …", and nothing is stored. Reproduced twice.
  • Clause expects: a silent null at head. The authoring door now refuses first, so the clause flips to the positive refusal its own text anticipates.
  • Not ticked green.

Partial and blocked coverage (named, not dropped)

  • approvals.decision-action-matrix A9-wire: blocked(fixture). The live 500 envelope needs an org-less request, which no stock flow opens (knownGaps).
  • automation.flow-node-type-matrix A1-http: blocked(environment). Egress is denied, so every http step fails "fetch failed".
  • identity-auth.workspace-org-switch C3b: skipped. The premise is retired, because metadata writes are deployment-level and no org-only metadata id exists (see accuracy list).
  • integration-system.email-template-render A5: partial. The admin half passes; the declared-source half needs a writable showcase copy.
  • integration-system.external-schema-browser-ui A6: blocked(environment). The objectui checkout is not installed, and the stock boot always wires federation.
  • integration-system.notification-preference-suppression A3-mandatory: blocked(fixture). The stock showcase declares no mandatoryTopics, and they are not runtime-writable.
  • integration-system.notify-inbox-delivery A3-501: blocked(fixture). The 501 arm needs a boot without MessagingServicePlugin, and the showcase requires messaging.
  • integration-system.webhook-lifecycle:
    • A2: blocked(dependency, tenant wall). Flow multi-writes publish bulk events with no organizationId, the org-owned subscription refuses them, and an org-less subscription cannot be authored.
    • N1 / N2: skipped for time.
  • studio-authoring.expression-editors A7: blocked(environment). It is a pin-only clause, and the objectui checkout has no install.
  • studio-authoring.metadata-diagnostics-sweep A6: blocked(fixture). No invalid stored row is plantable on a stock boot; it is pending a stale-row DB snapshot fixture.

Fixture gaps / checklist accuracy

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

  1. identity-auth.workspace-org-switch fixtures.requires names only OS_TENANCY_POSTURE. A walled posture refuses to boot the stock showcase without:

    • @objectstack/organizations declared in the host app's package.json (ADR-0093 D5);
    • OS_PLATFORM_OWNER_EMAIL;
    • a declared membership policy (OS_AUTH_MEMBERSHIP_POLICY). With invite-only, the invitee must also accept-invitation.

    C3b's meta half needs re-grounding, because metadata writes are env-wide now.

  2. platform-core.lifecycle-retention-sweep step 3: the [lifecycle] line is INFO and os dev defaults to warn, so the grep needs OS_LOG_LEVEL=info. Step 5's idle-proof expectation does not hold: a clean DB still logs "18 policy(ies) applied, ~0 rows reaped" on every sweep. A ruling is owed: stale step, or product defect.

  3. identity-auth.email-verification-loop C2 / step 4 name a POST variant. POST /auth/verify-email answers 404, and the console uses GET (VerifyEmailPage.tsx:47-56).

  4. cli.scaffold-first-run C2: the verify text says "each of the six templates", which is stale against variants [blank] (rev 2).

  5. records-forms.field-group-visible-when A3 expects the detail half to FAIL per objectui#11630. At this pin the detail page gates the group correctly (stale spec).

  6. dashboards.system-overview-live-counts:

    • A1's "no active-only filter" caveat is stale: the widget now filters revoked_at null, expires_at > now.
    • A3's roster is stale: there is no widget_organizations and no permission-events KPI.
  7. records-forms.object-hook-lifecycle A7: the log wording differs from the quoted [hook] async handler error (fire-and-forget). It is wording drift only.

  8. Persona recipe search:qa-contributor-bound-member step 5: a member-created showcase_invoice is invisible to its creator unless the body sets owner to the member's email. The same class applies to showcase_task: a contributor's own task needs assignee set to the member's email.

  9. attachments-storage.download-authz-both-sides (qa-scratch-authz step 6): persona B also needs sys_attachment read. Without it the panel shows "You don't have access to these attachments." before any download.

  10. search.console-global-search step 6: "Open Full Search Page" is offered only for an empty query or one matching "search all results full page". Reach /search by URL or through that query.

  11. approvals.ooo-delegation-reroute A0: steps 3–4 prescribe an autolaunched flow started by POST /api/v1/automation/FLOW/trigger. That route cannot open an approval, because buildAutomationContext maps the record into params only and the engine seeds $record from context.record ("no record id in $record"). Reword to a record-triggered start.

  12. studio-authoring.custom-page-source-tiers A5 (step 8, knownGaps[0]): an html compile error is refused at save / publish (422 INVALID_METADATA), so the runtime error panel is reachable only in the designer's draft preview. Name the preview and the 422 gate as the observable surfaces.

  13. studio-authoring.metadata-diagnostics-sweep A1: stats.locked is the served envelope lock (finding(metadata-protocol): two lock reports the #21670 read fix left unaligned — a host-config kernel's _lock gate admits a save the read now calls non-editable, and getMetaDiagnostics().stats[type].locked counts declared _lock only #21694), not rows whose declared _lock is not none. Compare against the item envelope's lock.

  14. studio-authoring.object-designer-roundtrip A3: step 4's literal "no banner for the empty row" (and objectui F4's toHaveCount(0)) collides with the select-needs-options rule whenever no real option exists yet. Assert with real options present.

  15. studio-authoring.record-page-roundtrip A0: the create form's Page type now defaults to list, so add "set Page type = record" to step 1.

  16. studio-authoring.draft-publish-lifecycle A8: step 10's ?from=1&to=2 compares the first draft save with its own publish, because history counts drafts and publishes. Name the publish versions read off /history.

  17. studio-authoring.doc-on-app-menu A0: the knownGaps recipe says the doc editor refuses the read-only package with 422. It now saves an env-wide draft, so drive the writable base over ?package=.

  18. automation.flow-runs-page-test-trigger A2: filling new_assignee in step 6 satisfies the screen, and the run completes without pausing. Leave it empty to exercise the hand-off.

  19. automation.flow-node-type-matrix A1: notify steps fail loudly for tasks or projects created without an assignee or owner. That is a correct refusal; set an assignee in the recipe.

  20. integration-system.webhook-lifecycle A1: the shipped showcase_task_changed webhook materializes org-less, so it can never fan out on the org-walled showcase. Author the webhook inside the organization, or org-stamp the fixture.

  21. integration-system.email-template-render:

    • A0 / step 1: templates no longer materialize to sys_email_template (0 rows; the registry serves the item), so rewrite step 1 and A5's "post-reboot row" against GET /api/v1/meta/email_template/NAME.
    • A6: fixtures.requires still names the retired category key.
  22. integration-system.external-schema-browser-ui:

    • A1 expects 5 columns, but the fixture DB carries 7 (API and panel agree).
    • A4's knownGap ("ValidationPanel lacks unreachable") is stale at this pin.
  23. identity-auth.implicit-account-linking-ownership C3: the local IdP derives sub from the email, so a second identity is a distinct sub (fixture note).

  24. Fixture gaps already in their items' knownGaps, parked for completeness:

    • metadata-diagnostics-sweep A6 (stale-row DB snapshot);
    • decision-action-matrix A9-wire (org-less request);
    • notify-inbox-delivery A3-501 (boot without messaging);
    • notification-preference-suppression A3-mandatory (mandatoryTopics);
    • email-template-render A5 (writable showcase copy).

Observations outside any clause (not verdicts)

Unverified product observations, UI polish and maintainer questions. None of them is scored, and none is filed unless a card is named.

  • identity-auth.oauth-app-consent-loop C2: the consent heading reads "CLIENT-ID wants to access your account" instead of the app name. OAuthConsentPage.tsx fetches /api/v1/auth/oauth2/applications/ID/public, a route the server does not serve. Filed: console OAuth consent page shows the raw client_id instead of the app's name — it fetches /oauth2/applications/ID/public, a route the server does not serve (its public-client lookup is /oauth2/public-client) objectui#12301.
  • identity-auth.oauth-app-consent-loop C1: registering a loopback redirect (http://127.0.0.1:… or localhost) is refused with a message calling the loopback host non-loopback, and the refusal is HTTP 500 OAUTH_REGISTER_FAILED rather than a 4xx.
  • records-forms.field-type-matrix: the DRAFT flow showcase_approver_bindings (served status draft) opens an approval on every showcase_field_zoo update and locks the row. The next write answers 409 RECORD_LOCKED.
  • identity-auth.workspace-org-switch C5: with no active org on the server, the switcher still shows "Default Organization", and a create answers 500 ERR_SYSTEM_WRITE_ORGANIZATION_REQUIRED instead of a designed 4xx.
  • platform-core.package-lifecycle-enable-disable A0: while a package is disabled, the by-name GET /api/v1/meta/app/NAME still answers 200 with the full app, so the list and by-name routes disagree.
  • automation.time-relative-trigger A0: the start node's Trigger select reads "—", and the populated sweep fields carry the amber "Kept, not in effect" stamp, although the flow is bound and sweeping (FlowNodeConfigField.tsx). A product-defect candidate, seen once, not a hop regression.
  • integration-system.notification-preference-suppression A4: a template row authored with locale en-US is never reached on an en-default deployment. The ladder walks tag → primary subtag → en and never climbs to en-US.
  • identity-auth.admin-lifecycle-operations A7: the impersonation banner names the administrator by raw user id, and the page underneath stays on a Setup URL the target cannot open.
  • approvals.ooo-delegation-reroute A3: the drawer Activity shows the raw action key ooo_substitute with a "—" actor, and raw user ids in the comment.
  • identity-auth.email-verification-loop C3: verification tokens are stateless and reusable until expiry.
  • identity-auth.linked-accounts-social C3: even on a provider-configured boot, Linked Accounts offers no link affordance. Linking is reachable only through link-social or the login page.
  • identity-auth.identity-import-wizard C3: the wizard offers "Update existing (skip if no match)", which the identity adapter refuses client-side with an honest message.
  • access-security.permission-matrix-edit-loop A5: the lower matrix renders title as editable=false although the set declares no title entry, and the member's create with a title succeeds (a display default).
  • platform-core.interrupted-migration-boot-report C1: describeInterruptedRun joins its sentence parts with no separator ("committed 1 chunk(s)").
  • cli.scaffold-console-first-paint C4: the scaffold object is in no app nav, and its activity line reads "System" while Created by reads Dev Admin.
  • studio-authoring.permission-matrix-editor-ux A4: at 820 px the breadcrumb row overprints the type / badge chips.
  • studio-authoring.metadata-diagnostics-sweep A5: the all-clear badge "0 issue(s)" renders in the red destructive style.
  • studio-authoring.doc-on-app-menu A2: after clicking "Gated doc", the highlighted entry is "Gated page in book", because three entries resolve to one URL.
  • Maintainer question (integration-system.webhook-lifecycle A2): as built, bulk webhook events from in-org flow predicate writes are undeliverable to any tenant subscription. Is the missing attribution of flow-node multi-writes intended?

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:59Z

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

    Every fail on this record has one of the four dispositions:

    Extracted: objectstack-ai/objectui#12292 · records-forms.concurrent-edit-conflict · N2
    Extracted: objectstack-ai/objectui#12300 · platform-core.app-management-toggle · C5b
    Extracted: objectstack-ai/objectui#12300 · platform-core.app-management-toggle · N1
    Extracted: #23152 · identity-auth.identity-import-wizard · C2b
    Extracted: #23121 · access-security.owd-save-gate · A3
    Extracted: #23121 · identity-auth.auth-method-matrix · A9
    Extracted: #23121 · identity-auth.self-signup-gate · N5
    Extracted: #23121 · api-backend.formula-stdlib-matrix · C1
    Extracted: #23121 · api-backend.formula-stdlib-matrix · C6
    Extracted: objectstack-ai/objectui#12301 · identity-auth.oauth-app-consent-loop · (observation outside its clauses)
    Parked-on: #23121 · identity-auth.workspace-org-switch · fixtures.requires: walled-posture prerequisites
    Parked-on: #23121 · identity-auth.workspace-org-switch · C3b skipped: meta-half premise retired
    Parked-on: #23121 · platform-core.lifecycle-retention-sweep · step 3 log level / step 5 idle-proof (ruling owed)
    Parked-on: #23121 · identity-auth.email-verification-loop · C2 / step 4: verify-email is GET only
    Parked-on: #23121 · cli.scaffold-first-run · C2 verify text names six templates
    Parked-on: #23121 · records-forms.field-group-visible-when · A3 expected-fail stale (objectui#11630 fixed)
    Parked-on: #23121 · dashboards.system-overview-live-counts · A1 caveat / A3 widget roster stale
    Parked-on: #23121 · records-forms.object-hook-lifecycle · A7 log wording drift
    Parked-on: #23121 · search.console-global-search · persona step 5: member rows need owner / assignee
    Parked-on: #23121 · search.console-global-search · step 6: Open Full Search Page offer rule
    Parked-on: #23121 · attachments-storage.download-authz-both-sides · persona step 6: B needs sys_attachment read
    Parked-on: #23121 · approvals.ooo-delegation-reroute · A0: use a record-triggered start
    Parked-on: #23121 · studio-authoring.custom-page-source-tiers · A5: compile panel only in the designer preview
    Parked-on: #23121 · studio-authoring.metadata-diagnostics-sweep · A1: locked is the envelope lock
    Parked-on: #23121 · studio-authoring.metadata-diagnostics-sweep · A6 blocked(fixture): stale-row snapshot
    Parked-on: #23121 · studio-authoring.object-designer-roundtrip · A3: step 4 banner wording
    Parked-on: #23121 · studio-authoring.record-page-roundtrip · A0: set Page type = record
    Parked-on: #23121 · studio-authoring.draft-publish-lifecycle · A8: name the publish versions
    Parked-on: #23121 · studio-authoring.doc-on-app-menu · A0 knownGaps recipe stale
    Parked-on: #23121 · automation.flow-runs-page-test-trigger · A2: step 6 new_assignee skips the pause
    Parked-on: #23121 · automation.flow-node-type-matrix · A1: notify recipe needs an assignee
    Parked-on: #23121 · integration-system.webhook-lifecycle · A1: shipped webhook materializes org-less
    Parked-on: #23121 · integration-system.webhook-lifecycle · A2 blocked(dependency) + maintainer question
    Parked-on: #23121 · integration-system.webhook-lifecycle · N1 / N2 not attempted (time budget)
    Parked-on: #23121 · integration-system.email-template-render · A0 / A5 / A6 stale; A5 partial (writable copy)
    Parked-on: #23121 · integration-system.external-schema-browser-ui · A1 column count / A4 knownGap stale
    Parked-on: #23121 · identity-auth.implicit-account-linking-ownership · C3 IdP sub fixture note
    Parked-on: #23121 · approvals.decision-action-matrix · A9-wire blocked(fixture): org-less request
    Parked-on: #23121 · integration-system.notify-inbox-delivery · A3-501 blocked(fixture)
    Parked-on: #23121 · integration-system.notification-preference-suppression · A3-mandatory blocked(fixture)
    

    An authorization finding on access-security.packaged-permission-set-lifecycle C1 is held for the maintainer. It carries no card and no detail, here or anywhere on GitHub (RUNNER rule 2).

    Some legs need nothing more than the record body:

    • Environment-blocked legs (RUNNER extraction obligation): automation.flow-node-type-matrix A1-http (egress), integration-system.external-schema-browser-ui A6 and studio-authoring.expression-editors A7 (objectui checkout not installed).
    • The handoff: the pre-release variant of the two cli.scaffold-* items stays in the record's own handoff list (§4).

    ⚠ #23121 is closed. #23132 landed its first six rows, and the rows parked above are added 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:04Z

    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 · identity-auth.workspace-org-switch · fixtures.requires: walled-posture prerequisites
    Parked-on: #23169 · identity-auth.workspace-org-switch · C3b skipped: meta-half premise retired
    Parked-on: #23169 · platform-core.lifecycle-retention-sweep · step 3 log level / step 5 idle-proof (ruling owed)
    Parked-on: #23169 · identity-auth.email-verification-loop · C2 / step 4: verify-email is GET only
    Parked-on: #23169 · cli.scaffold-first-run · C2 verify text names six templates
    Parked-on: #23169 · records-forms.field-group-visible-when · A3 expected-fail stale (objectui#11630 fixed)
    Parked-on: #23169 · dashboards.system-overview-live-counts · A1 caveat / A3 widget roster stale
    Parked-on: #23169 · records-forms.object-hook-lifecycle · A7 log wording drift
    Parked-on: #23169 · search.console-global-search · persona step 5: member rows need owner / assignee
    Parked-on: #23169 · search.console-global-search · step 6: Open Full Search Page offer rule
    Parked-on: #23169 · attachments-storage.download-authz-both-sides · persona step 6: B needs sys_attachment read
    Parked-on: #23169 · approvals.ooo-delegation-reroute · A0: use a record-triggered start
    Parked-on: #23169 · studio-authoring.custom-page-source-tiers · A5: compile panel only in the designer preview
    Parked-on: #23169 · studio-authoring.metadata-diagnostics-sweep · A1: locked is the envelope lock
    Parked-on: #23169 · studio-authoring.metadata-diagnostics-sweep · A6 blocked(fixture): stale-row snapshot
    Parked-on: #23169 · studio-authoring.object-designer-roundtrip · A3: step 4 banner wording
    Parked-on: #23169 · studio-authoring.record-page-roundtrip · A0: set Page type = record
    Parked-on: #23169 · studio-authoring.draft-publish-lifecycle · A8: name the publish versions
    Parked-on: #23169 · studio-authoring.doc-on-app-menu · A0 knownGaps recipe stale
    Parked-on: #23169 · automation.flow-runs-page-test-trigger · A2: step 6 new_assignee skips the pause
    Parked-on: #23169 · automation.flow-node-type-matrix · A1: notify recipe needs an assignee
    Parked-on: #23169 · integration-system.webhook-lifecycle · A1: shipped webhook materializes org-less
    Parked-on: #23169 · integration-system.webhook-lifecycle · A2 blocked(dependency) + maintainer question
    Parked-on: #23169 · integration-system.webhook-lifecycle · N1 / N2 not attempted (time budget)
    Parked-on: #23169 · integration-system.email-template-render · A0 / A5 / A6 stale; A5 partial (writable copy)
    Parked-on: #23169 · integration-system.external-schema-browser-ui · A1 column count / A4 knownGap stale
    Parked-on: #23169 · identity-auth.implicit-account-linking-ownership · C3 IdP sub fixture note
    Parked-on: #23169 · approvals.decision-action-matrix · A9-wire blocked(fixture): org-less request
    Parked-on: #23169 · integration-system.notify-inbox-delivery · A3-501 blocked(fixture)
    Parked-on: #23169 · integration-system.notification-preference-suppression · A3-mandatory blocked(fixture)


    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