Repository navigation
Description
domain:devx#1 · os-warren · session_01JQwxbXGDmSYVyFomEEAdU3
Part of #27377 (18.3.0 sweep anchor; wave 5, card W5-STUDIO)
QA run record for the 18.3.0 pre-cut re-check, wave 5 card W5-STUDIO: the studio-authoring area minus the seven items the W5-FAIL card re-judges and the P0 card's first-run-loop, 38 items, plus one targeted off-clause check of the zh-CN Studio save (#29790, breaking). Every clause whose oracle is a live door was driven live on a booted stack (HTTP, the boot's own database, logs, and Playwright Chromium against the Console built from the subject); each item's automated.ref was run from this checkout at the subject and cited only as corroboration. Item verdicts are derived from the clause verdicts, never hand-assigned. Run under .claude/skills/checklist-test/SKILL.md and docs/qa/platform-checklist/RUNNER.md. It is a QA run, not a lane card; Warren chose to dispatch all four wave-5 cards on 2026-11-03 08:21Z.
Result: 38/38 judged · 37 PASS / 0 PARTIAL / 1 FAIL / 0 BLOCKED / 0 NOT-RUN. No item is planned. Clause rows: 240. Three are test-oracle clauses scored on their pins (acceptance[0] of meta-save-preconditions-and-draft-rows, multi-package-item-rows and save-door-runs-authoring-rules, each naming its layer); the other 237 were driven live. 239 pass, 1 fails (studio-authoring.validation-rules-authoring acceptance[1]). The zh-CN save check passes all five of its clauses. No security finding.
Environment fingerprint
- Framework:
objectstack-ai/objectstack@589049b023d82c94508bf9fce752ea19069279e5(main, the merge of fix(metadata-protocol)!: an object saved back from a translated /meta read stores its source labels, and one the registry would refuse is refused at save and at publish #29790, 2026-11-03 07:44Z), checked out detached. It never followedmainor the Version PR chore: version packages #26517.ui/is the same commit. - CI at the subject: push run 41600797636 (CI) read again before posting:
status: completed,conclusion: success(updated 08:27:38Z). - Build:
pnpm install --frozen-lockfile(37 s),pnpm exec turbo run build --concurrency=2(119/119 tasks, exit 0, 23m04s),pnpm console:build --concurrency=2(71/72 cached plus the copy intopackages/console/dist).check-dev-prereqs: 106 build artifacts present. Node v22.23.4, pnpm 10.31.0, Playwright Chromium from/opt/pw-browsers, 4 CPUs, about 15 GiB. - Boot, one per runner and more where an item needed them: a scratch copy of
examples/app-showcase(tar withoutnode_modulesand.objectstack,node_modulessymlinked to the tree), started from the copy withOS_PORT=PORT OS_HOME=RUN/home OS_STORAGE_LOCAL_ROOT=RUN/uploads setsid node packages/cli/bin/run.js dev --ui --seed-admin --no-watch -p PORT -d file:RUN/data.db. A canary boot answered/api/v1/health200 after 18 s, served/_console/200 and signed the seeded admin in before any runner started. - Other boots, each on its own port and file DB:
OS_PAGE_REACT_ENABLED=false(custom-page-source-tiers, the react gate's off side);OS_AUTOMATION_SCHEDULED_WORK_ENABLED=1(flow-status-matches-runtime, the schedule half: banner41 flow(s) 23 bound); a restart on the same DB (picklist-bound-select, api-written-keys); a second fresh boot for the zh-CN check; one orchestrator boot that re-measured three of the probe findings below before they were filed. - Ports 42000–42090, a block of 10 per runner. Seed:
--seed-admin(admin@objectos.ai), the stock showcase seed and demo personas. Members were minted by admin create-user or invite then sign-up, and each persona's identity was proved withGET /api/v1/auth/get-sessionbefore its cells. zh-CN: a Playwright context withlocale: 'zh-CN'(the Console's/metareads followAccept-Language, filled from<html lang>). - Execution: 8 runner subagents (opus, effort high), each on its own boots, with at most 3 Chromium instances on the box at once (a shared slot lock). The orchestrator re-derived the one FAIL against QA run · studio-authoring-42-plus-2 (44/44) · 3482f3d8 · 2026-11-03 · 33 PASS / 3 PARTIAL / 7 FAIL / 1 BLOCKED / 0 NOT-RUN #29672's reproduction (it had the runner drive that exact shape on two fresh loads) and re-measured three of the seven probe findings itself over the API on its own boot (the report filter, the validation type mismatch and the base export); one more (the publish sheet's hook count) it confirmed in the source.
- Hygiene: after the run,
git statusis clean,examples/app-showcase/.objectstackdoes not exist, and no listener remains on any run port. No item needed install-local.
Scope
Selector release-18.3.0-w5-studio: the item list of card W5-STUDIO in the wave-5 brief, computed from the ledger at main 55dca466, whose ledger equals the subject's. Every revision below was re-read at the subject and matches. No planned items.
studio-authoring.object-designer-roundtrip r12 · studio-authoring.view-authoring-live r5 · studio-authoring.record-page-roundtrip r14 · studio-authoring.authoring-validation-not-persisted r6 · studio-authoring.org-override-registry-gate r9 · studio-authoring.permission-matrix-editor-ux r10 · studio-authoring.custom-page-render-and-blocks r2 · studio-authoring.page-variables-and-actions r2 · studio-authoring.custom-page-source-tiers r5 · studio-authoring.metadata-diagnostics-sweep r10 · studio-authoring.doc-on-app-menu r9 · studio-authoring.picklist-bound-select r4 · studio-authoring.meta-save-preconditions-and-draft-rows r2 · studio-authoring.multi-package-item-rows r4 · studio-authoring.save-door-runs-authoring-rules r4 · studio-authoring.held-edit-leave-guard r5 · studio-authoring.held-edit-publish-refusal r3 · studio-authoring.automations-rail-and-new-flow r2 · studio-authoring.flow-edge-type-authoring r4 · studio-authoring.org-scope-flows r3 · studio-authoring.flow-status-matches-runtime r2 · studio-authoring.validation-rules-authoring r3 · studio-authoring.hooks-tab-authoring r3 · studio-authoring.actions-tab-presets r3 · studio-authoring.object-api-tab-curl r2 · studio-authoring.summary-field-authoring r5 · studio-authoring.api-written-keys-survive-studio-save r4 · studio-authoring.interfaces-create-dialogs r2 · studio-authoring.report-authoring-options r3 · studio-authoring.app-and-nav-properties r5 · studio-authoring.authored-page-slots-and-variables r3 · studio-authoring.access-facets-runtime r4 · studio-authoring.access-owd-and-suggestions r5 · studio-authoring.removed-key-save-door-refusal r4 · studio-authoring.uninstalled-package-refused r3 · studio-authoring.package-customize-restore-display r2 · studio-authoring.package-extension-field-c r2 · studio-authoring.package-customization-counts-and-marks r2
Plus the off-clause targeted check zh-CN Studio save (#29790), recorded below as offclause.zh-cn-studio-save-29790 with clauses Z1–Z5. It scores no item and is not in the title's counts.
The per-clause verdict table is in the three comments below this body.
Derived item verdicts
37 PASS / 0 PARTIAL / 1 FAIL / 0 BLOCKED / 0 NOT-RUN (38 of 38 judged).
- FAIL (1):
studio-authoring.validation-rules-authoring(acceptance[1], R-1). Disposition: product defect, existing open card Studio: an expression the engine refuses (RLS USING on a formula field, a null-unsafe validation predicate) keeps autosaving — the server verdict is shown on the field but never holds the save #27482 (no new card). Its other five clauses pass, and the parse-error half of acceptance[1] holds. - PASS (37): every other item.
studio-authoring.app-and-nav-propertiesacceptance[5]: itsrequiresObjectcell is not judged, as the item's ownfixtures.knownGaps[0]instructs (no editor offers that key; not ruled); the clause's other keys pass.
zh-CN Studio save check (#29790) — off-clause, PASS 5 of 5
On a showcase boot (it declares en and zh-CN), in a runtime package whose object carries published zh-CN translations, as admin in a zh-CN browser context:
- Z1 pass (3 rounds, 2 boots): the Studio autosave PUT echoes every zh label, the injected columns' too (
负责人,队列); after the Studio publish, theenread ofGET /api/v1/meta/object/NAME?package=PKGand the stored row both carry the source labels, and no injected column is stored. - Z2 pass: the zh-CN read still serves the translations.
- Z3 pass: the non-label edit (a field description, and the object description in round 1) landed.
- Z4 pass (both modes, twice): a body declaring the author's own
queuefield →422 INVALID_METADATA, nothing stored. No Studio gesture produces that body (the add-field form makes a pinyin API name; renaming a field toqueueis reverted without a request). - Z5 pass (twice): with the author
queueplanted in a raw draft row, publish answersoutcome: 'refused',failedCount: 1, no active row, the data API answers 404, and an existing object keeps serving; Studio's publish sheet shows the refusal. - Pin:
packages/qa/dogfood/test/studio-zh-cn-echo-publish.dogfood.test.ts(HTTP over a booted showcase) 4 passed, corroboration only. - Reproduction rule (for a re-run): runtime package + object with a zh-CN translation bundle for its label and field labels, published → zh-CN Playwright context → Studio
/_console/studio/PKG/data, make one draft edit, reload (the restore path is exercised only when a draft already exists at load), Form tab → field inspector → change the help text → wait for the autosave PUT → Publish →GET /api/v1/meta/object/NAME?package=PKGwithAccept-Language: enandzh-CN, and read thesys_metadatarow. - Observed beside it, all tied to the open follow-ups studio(designer): the object designer edits the Accept-Language-translated /meta read and PUTs it back whole, injected columns included #29793 / meta: a pending draft has no untranslated, author-owned read; Studio re-opens its object draft translated and governed #29814 that fix(metadata-protocol)!: an object saved back from a translated /meta read stores its source labels, and one the registry would refuse is refused at save and at publish #29790's PR named: an author label edited in zh Studio is stored in Chinese as the source (en readers see it, zh readers keep seeing the catalog text); and every zh autosave once a draft exists raises a toast listing English
translated-label-echoadvisories (9 on a 3-field object) though no label changed. Noted on studio(designer): the object designer edits the Accept-Language-translated /meta read and PUTs it back whole, injected columns included #29793, not carded again.
Delta against wave 4 (#29172 W4-L3, #29002 W4-C3b1, #28942 W4-C3a, #28965 W4-C2b pins; subject 7fa9873f)
| item | wave 4 | here | why |
|---|---|---|---|
| studio-authoring.validation-rules-authoring | PASS (#29172) | FAIL | A1: wave 4 drove only the parse-error shape. The shape that fails is a condition that parses but the server refuses (record.qty > 1000 on a nullable number): Studio autosaves it 200 and does not hold. #29672 (at 3482f3d8, 00:53Z today) measured it FAIL first and parked it on #27482. Not a regression of the subject. |
| 7 items new to the set: custom-page-render-and-blocks, page-variables-and-actions, custom-page-source-tiers, picklist-bound-select, package-customize-restore-display, package-extension-field-c, package-customization-counts-and-marks | not run | PASS | first wave-run; picklist-bound-select was blocked(fixture) at #26715 and #29672 and is driven here with the picklist declared in a scratch copy |
| the other 30 | PASS | PASS | unchanged. Revisions moved since wave 4 on seven of them, each judged at the new revision: api-written-keys-survive-studio-save r3→r4, authoring-validation-not-persisted r5→r6, object-designer-roundtrip r10→r12, org-override-registry-gate r7→r9, org-scope-flows r2→r3, permission-matrix-editor-ux r7→r10, record-page-roundtrip r11→r14 |
No PASS→FAIL caused by a subject change, no FAIL→PASS (wave 4 had no FAIL in this set), no PARTIAL→PASS (none was partial).
Against the most recent Studio record, #29672 (at 3482f3d8, 2026-11-03): record-page-roundtrip FAIL→PASS (re-pointed to r14 by #29679), api-written-keys-survive-studio-save FAIL→PASS (r4), picklist-bound-select blocked→PASS, held-edit-leave-guard, custom-page-source-tiers and flow-status-matches-runtime partial→PASS (driven in headless Chromium and with the scheduled-work boot), validation-rules-authoring FAIL→FAIL (same clause, same card).
The Studio changes the brief named were met as shipped: #29784 / #29841 one word per state ("Switched on" / "Switched off"; zh matrix columns 对象 … 批量), #29843 ("Saved to ObjectStack Showcase’s customizations"), #29847 (the ~org rail lists no packaged or .custom flow, greyed or not). Wording that clauses still quote in the older form is listed for the anchor, not scored.
Reproduction rule for every fail
R-1 · studio-authoring.validation-rules-authoring · acceptance[1] · product defect, existing card #27482
- Stock showcase boot; form sign-in as admin@objectos.ai. In a writable runtime package, publish an object
OBJwith a nullable number fieldqty(norequired, nodefaultValue). - Studio →
OBJ→ Validations → New → "Reject the save when…" → Expression; typerecord.qty > 1000and blur. - Expected (clause): an error at the input and no object PUT while it stands; the fix sends one PUT, 200.
- Actual (2 of 2 fresh loads, objects
gtwo_qtyandgtwo_qty2):PUT /api/v1/meta/object/OBJ?mode=draft200, then the redcel-server-error"applies>torecord.qty, which 'OBJ' declares as nullable…",aria-invalid=true, no held line, status "Saved". Editing the message, then the condition (> 10000), each sends another PUT 200 carrying the refused condition.POST /api/v1/packages/PKG/publish-drafts→ 200outcome: refused,INVALID_METADATA expression-invalidatobjects.OBJ.validations[0].condition. - In load 2, adding a second rule raised the pillar line "Not saved yet: an expression on the rule … has an error to fix" and held the object, so the hold engages only after the author leaves the offending rule.
Self-check: ref-targeted fills with a real blur; the same shape reproduces QA run · studio-authoring-42-plus-2 (44/44) · 3482f3d8 · 2026-11-03 · 33 PASS / 3 PARTIAL / 7 FAIL / 1 BLOCKED / 0 NOT-RUN #29672's reading at an earlier subject. The parse-error half of the clause holds (… &&→ inline "Unexpected token: EOF", 0 PUTs, the fix sends one PUT 200).
Off-clause probes (rule 8)
About 95 runner-minutes in all (9–15 per runner), after the clauses had verdicts, as admin and as members without manage_metadata. Doors: the object / view / report / dashboard / page / hook / flow / dataset save doors (draft and live), publish-drafts and single-item publish, _drafts, /meta/diagnostics, ensure-customization, /customizations, /packages/:id/export, the clone door, _migrate-stored, the action door, the public contact form, Studio's publish sheet, inspectors and Source tab. Boundary classes: the empty string and whitespace, unknown and mismatched names, a missing id, an empty ?package=, garbage or empty If-Match, bodies the registry or the lint gate would refuse, the opposite severity (warning twin), readers outside the asserted scope (members, a second persona). Seven product findings passed the filing gate and are extracted in the close-out; the orchestrator re-measured three of them itself and confirmed a fourth in the source. No security finding. Not filed (observations, intended or unconfirmed): an empty ?package= saves package-less (200); If-Match on an item with no row of that lifecycle answers 409 "…(current is null)"; a lookup with reference:'nope_object' saves and publishes (not checked against a contract); os migrate meta --stored repairs stored injected-column echoes but not an author field's stored echo (inherent: the row is its own only source); turning a field required in Studio on an object with zero rows answered 409 DESTRUCTIVE_CHANGE (not chased); a label-only base-field patch counts nowhere in /customizations.
Fixture gaps
None open. picklist-bound-select needs a package picklist the stock showcase does not declare; this run added showcase_tier to a scratch copy (the item's fixtures.requires[0]), so the stock-tree gap stands for the next runner.
Generated by Claude Code
Activity
objectstack-fleet commentedon Nov 3, 2026
domain:devx#1 · os-warren · session_01JQwxbXGDmSYVyFomEEAdU3
Per-clause verdicts, part 1 of 3
One row per acceptance (A) and negative (N) clause. Layer names what the evidence reached: HTTP-live (a request to the booted server), browser-live (Playwright Chromium on the Console built from the subject, screenshot first, then text), pin-jsdom / pin-unit (a test run from this checkout at the subject, cited only as corroboration). Evidence is text from the oracle; nothing here is a screenshot.
studio-authoring.object-designer-roundtrip · r12 · PASS (runner G1)
Notes: Before any option existed the select-needs-options hold line showed ('Not saved yet: the field "Condition" needs at least one option') - the legitimate banner steps[3] warns about, not a FAIL. automated.ref is ui/e2e/live only; not run.
studio-authoring.view-authoring-live · r5 · PASS (runner G3)
Notes: End-user surfaces scored as the admin (personas[1]: no grant on the runtime object). Surface /_console/apps/showcase_app/gthreev_asset (redirects to /apps/com.example.showcase/gthreev_asset).
studio-authoring.record-page-roundtrip · r14 · PASS (runner G3)
Notes: Member leg driven for the first time (personas[1] said no run had): the everyone baseline lets phone.demo read showcase_account and the authored page is served to it. The Save draft step is an autosave: the Add-block pick and the title edit each PUT the draft, so the toolbar Save stays disabled.
studio-authoring.authoring-validation-not-persisted · r6 · PASS (runner G2)
type,columns. •typebelongs to a single VIEW, not to the container. Wrap it:defineView({ list: { type, data, columns, … } })...'; flat body answered the names-no-object/viewKind refusalNotes: the editor's status chip keeps reading 'Auto-saving…' after the 422 (probe finding 1)
studio-authoring.org-override-registry-gate · r9 · PASS (runner G5)
Notes: Pin overlay-precedence.test.ts (objectql batch 6 files/101 tests passed, plugin-unit, corroboration only). The A0 refusal text is now the managed-item sealed sentence rather than the registry-flag sentence; code unchanged.
studio-authoring.permission-matrix-editor-ux · r10 · PASS (runner G7)
Notes: Pins: PermissionMatrixEditor.fieldBulk/readonly/artifactTier jsdom (component layer) green inside the 11-file ui run, 136/136 passed. #29841: zh-CN column heads read 对象 记录共享模型 创建 读取 编辑 删除 导出 转移 查看全部 修改全部 读取范围 写入范围 批量.
studio-authoring.custom-page-render-and-blocks · r2 · PASS (runner G4)
Notes: Console route /_console/apps/showcase_app/page/X redirects to /apps/com.example.showcase/page/X. A 'Set the default currency' modal covers the first page on a fresh org; dismissed with 'Not now' before each screenshot.
studio-authoring.page-variables-and-actions · r2 · PASS (runner G4)
studio-authoring.custom-page-source-tiers · r5 · PASS (runner G4)
Notes: The react error page was published from writable package com.qa.gfour (draft + POST /meta/page/gfour_react_bad/publish 200) and opened in its app.
studio-authoring.metadata-diagnostics-sweep · r10 · PASS (runner G2)
Notes: one re-read immediately after restoring the planted row still answered total 1; the next read answered 0 (read-after-write lag, not scored)
studio-authoring.doc-on-app-menu · r9 · PASS (runner G6)
Notes: Teardown: DELETE app/3 books/3 docs ?package=com.qa.gsixd 200 each, assignment row deleted 200; corpus re-reads baseline (books [showcase_manual], 9 docs, no doc nav), reader GET gated doc 404. Personas g6reader/g6outsider via admin create-user mustChangePassword:false.
studio-authoring.picklist-bound-select · r4 · PASS (runner G1)
Notes: Fixture per fixtures.requires[0] made in the SCRATCH copy's objectstack.config.ts (not the shared tree); GET /meta/picklist/showcase_tier served name/label/options/_packageId com.example.showcase; GET /meta/object/gfour_obj_a/layers effective tier {picklist:showcase_tier, options bronze,silver,gold,platinum}. Step 4's 'Setup -> Metadata -> Object' is now /studio/~all/metadata/object/NAME (ADR-0146 redirect); the package-scoped /studio/PKG/metadata/object/NAME redirects to the Data pillar. 'New-record form' = Studio Records tab Add record dialog (objects are in no app nav).
Generated by Claude Code
objectstack-fleet commentedon Nov 3, 2026
domain:devx#1 · os-warren · session_01JQwxbXGDmSYVyFomEEAdU3
Per-clause verdicts, part 2 of 3
One row per acceptance (A) and negative (N) clause. Layer names what the evidence reached: HTTP-live (a request to the booted server), browser-live (Playwright Chromium on the Console built from the subject, screenshot first, then text), pin-jsdom / pin-unit (a test run from this checkout at the subject, cited only as corroboration). Evidence is text from the oracle; nothing here is a screenshot.
studio-authoring.meta-save-preconditions-and-draft-rows · r2 · PASS (runner G5)
Notes: scratch view deleted (active + ?state=draft).
studio-authoring.multi-package-item-rows · r4 · PASS (runner G5)
studio-authoring.save-door-runs-authoring-rules · r4 · PASS (runner G5)
titelis not a proppage:headerdeclares … Did you meantitel→title?' hint 'Removetitel…'Notes: #29790 moved nothing here: a registry-refused object body (unknown field type) answers 422 INVALID_METADATA at fields.x.type; sealed showcase objects still 403 first.
studio-authoring.held-edit-leave-guard · r5 · PASS (runner G5)
Notes: Fixture package com.qa.ui made through POST /api/v1/packages, not the Studio landing New package dialog. Picklist label was 'Urgency' for the leave matrix (a field 'Priority' already existed from the publish item). The nav rename still shows no held strip; the guard fires anyway (as in w4).
studio-authoring.held-edit-publish-refusal · r3 · PASS (runner G5)
Notes: widget finish needs a measure too: after binding the Dataset the held strip moves to 'Values (measures) on the widget … needs a value' (second held clause), then saves once a measure is picked. Pending draft per pillar seeded via API (ui_bare label) so Publish is enabled.
studio-authoring.automations-rail-and-new-flow · r2 · PASS (runner G6)
Notes: State words are now 'Switched on' / 'Switched off' (#29784/#29841) where the item says On / Off and 'Enabled switch reads off'; intent holds. pin-jsdom: ui vitest at 589049b — 7 files / 51 tests passed (railSearch-11794 5, flowPresets-11861 8, flowStatusTruth-11779 9, packageLessFlows-11553 16, BuilderLanding.orgScope-11553 2, FlowStatusDot 9, railUnboundReason-11281 2); jsdom component over doubles, corroboration only
studio-authoring.flow-edge-type-authoring · r4 · PASS (runner G6)
record.name =='; Problems tab count 1 listing it at 'Check → End A · SCHEMA'; draft read (same body via API draft PUT) _diagnostics {valid:false, errors:[{path:edges.2.condition, code:expression-invalid}]}Notes: The Studio autosave body sends condition as a bare string; the draft read normalizes it to {dialect:cel,source}. A3's _diagnostics read was taken on an API-written draft carrying the identical invalid condition (the Studio-written draft was published-refused before I read its _diagnostics); inspector and Problems halves read on the Studio-written draft.
studio-authoring.org-scope-flows · r3 · PASS (runner G6)
Notes: Fixture finding asked by PM: at 589049b the clone door still lands its copy in the pair — POST /automation/showcase_urgent_task_alert/clone {name,label} 200, _packageId com.example.showcase.custom (so it cannot make the package-less fixture, as r3 says); cloning the package-less qa_org_raw → 400 'not shipped by a package … name the package the copy lands in with
package' (ADR-0146 D3). The raw package-less PUT of a fresh name is still OPEN (200, env-wide, state=active), and the D11 control holds: the same PUT onto shipped showcase_scheduled_digest → 403 'provided by a managed package and is sealed … Declare an override from com.example.showcase.custom'. So r3's fixture is current, not stale; nothing blocked. ~org rail draws no greyed contributed rows (#29847 does not leak packaged flows into this scope). pin-jsdom: ui vitest at 589049b — 7 files / 51 tests passed (railSearch-11794 5,studio-authoring.flow-status-matches-runtime · r2 · PASS (runner G6)
Notes: Words drifted: On/Off now 'Switched on'/'Switched off'. pin-jsdom: ui vitest at 589049b — 7 files / 51 tests passed (railSearch-11794 5, flowPresets-11861 8, flowStatusTruth-11779 9, packageLessFlows-11553 16, BuilderLanding.orgScope-11553 2, FlowStatusDot 9, railUnboundReason-11281 2); jsdom component over doubles, corroboration only
studio-authoring.validation-rules-authoring · r3 · FAIL (runner G2)
>torecord.qty, which OBJ declares as nullable', aria-invalid true, no rule-held line; message edit and condition edit each PUT 200 again; publish-drafts refused validations[0].condition expression-invalid. 2/2 fresh loads (gtwo_qty, gtwo_qty2)Notes: state_machine rule saves with transitions {} once field+message are given, before a transition row is added; the transition was added next and saved 200 | A1 re-leg 09:55–10:05 on reboot of b1 (boot2.log), per coordinator
studio-authoring.hooks-tab-authoring · r3 · PASS (runner G2)
Notes: retry log lines are WARN level, visible at the default warn log level (no OS_LOG_LEVEL=info needed)
studio-authoring.actions-tab-presets · r3 · PASS (runner G2)
studio-authoring.object-api-tab-curl · r2 · PASS (runner G1)
Notes: Token = the admin session bearer from POST /auth/sign-in/email (same session-token kind the console stores under auth-session-token), not read out of localStorage. cURL text captured by stubbing navigator.clipboard.writeText and clicking each row's 'cURL' button through stable element handles (a role-name locator re-indexes once a clicked button's name turns to 'Copied' - automation artifact, not product).
studio-authoring.summary-field-authoring · r5 · PASS (runner G1)
Notes: Fixture published via API (gtwo_parent public_read_write; gtwo_child controlled_by_parent with name/memo text, due datetime, amount number, price currency, parent master_detail required). Step 'publish' done via POST /packages/com.qa.gtwo/publish-drafts (the door Studio's Publish all calls).
Generated by Claude Code
objectstack-fleet commentedon Nov 3, 2026
domain:devx#1 · os-warren · session_01JQwxbXGDmSYVyFomEEAdU3
Per-clause verdicts, part 3 of 3
One row per acceptance (A) and negative (N) clause. Layer names what the evidence reached: HTTP-live (a request to the booted server), browser-live (Playwright Chromium on the Console built from the subject, screenshot first, then text), pin-jsdom / pin-unit (a test run from this checkout at the subject, cited only as corroboration). Evidence is text from the oracle; nothing here is a screenshot.
studio-authoring.api-written-keys-survive-studio-save · r4 · PASS (runner G1)
Notes: Keys: object activityMilestones [{field:status,value:done,summary:'Asset done: {name}'}], indexes [{fields:[serial],unique:'organization'}], userActions {exportCsv:false,import:false}, editMode page, searchableFields [name,serial], publicSharing {enabled:true,maxExpiryDays:7}, imageField photo; field serial.searchable/maskingRule 'name', notes.rows 7/sortable false/widget markdown-lite, cost.step 0.5/useGrouping false, price.currencyConfig {fixed,EUR}, due.dueLike true; flow description/successMessage/errorMessage/variables(+y_api)/errorHandling/requiredPermissions; app description/branding/areas/contextSelectors(active_package); dashboard requiredPermissions [studio.access]; permission description/isDefault/packageId. The first live permission read right after the 5-item publish answered 404 RESOURCE_NOT_FOUND, the next read 200 with all keys; not reproduced in 3 later publish+immediate
studio-authoring.interfaces-create-dialogs · r2 · PASS (runner G3)
Notes: Pins corroborate at the jsdom component layer: interfacesCreate-11823 + interfacesCreatePage-11823 + createAppOpensInterfaces-11794 -> 3 files, 21 tests passed (cd ui && vitest --maxWorkers=1, at 589049b). Identifiers the dialogs derive are not namespace-prefixed (ops_board, ticket_report).
studio-authoring.report-authoring-options · r3 · PASS (runner G3)
Notes: Switching Report type to Joined is held locally (no PUT) until a block is added; once one block is filled the type and blocks save together. A pure Studio gesture cannot produce the A2 bodies (the panel offers no chart on joined, and the block Dataset is marked required), so they were PUT directly as the step says.
studio-authoring.app-and-nav-properties · r5 · PASS (runner G6)
Notes: Draft left unpublished on a throwaway DB. The inspector writes viewName qualified ('gsixn_project.closed_projects') where the API-authored entry used the bare 'closed_projects'; runtime effect of the qualified form not driven here (Studio edits only top-level navigation, runtime renders areas).
studio-authoring.authored-page-slots-and-variables · r3 · PASS (runner G4)
Notes: Fixture com.qa.gfour, all through ?mode=draft&package= then publish-drafts.
studio-authoring.access-facets-runtime · r4 · PASS (runner G7)
Notes: Fixture: com.qa.gsev, published gsev_ticket (public_read_write, inline action gsev_restricted_echo requiredPermissions [showcase.restricted_ops]); S=gsev_member_set (R+U) assigned to g7m via sys_user_permission_set; control member g7s.
studio-authoring.access-owd-and-suggestions · r5 · PASS (runner G7)
Notes: Guest prompt leg not reachable on stock (knownGap), not scored.
studio-authoring.removed-key-save-door-refusal · r4 · PASS (runner G5)
refreshIntervalSeconds'), 22 aged-out unrecognized_keys at the parent path (fields.title / config / root) naming the key + upgrade-guide sentencezzz_junk_key'), object, page, dashboard; no stored draft contains the key, all equal baselineNotes: variant shape markings (T/A) all still accurate at 589049b.
studio-authoring.uninstalled-package-refused · r3 · PASS (runner G7)
Notes: No install-local needed or done; shared examples/app-showcase/.objectstack absent before and after the run. Teardown: nothing stored.
studio-authoring.package-customize-restore-display · r2 · PASS (runner G7)
Notes: Pins: InterfacesPillar/StudioCustomizeControls/StudioDesignSurface customize-28562 jsdom (console calls, mocked server) green in the ui run (136/136). ui/e2e/live spec not run (driven by hand instead). #29843: header if-item-saved-to reads 'Saved to ObjectStack Showcase’s customizations' after Customize (zh: '保存到 ObjectStack Showcase 的定制').
studio-authoring.package-extension-field-c · r2 · PASS (runner G7)
__csuffix is reserved to a base's paired.custompackage … rename the field'; extension with plain_note -> 400 VALIDATION_ERROR issues[fields.plain_note] 'name it plain_note__c, or change a base field's display properties … fieldPatches'; neither stored (404/NO_DRAFT)Notes: Pins: DataPillar.baseObjectExtension-28575 + StudioCustomizeControls.objectExtension-28575 jsdom green (136/136 run). Teardown: extension row deleted, record deleted, QA pkg deleted, pair deleted.
studio-authoring.package-customization-counts-and-marks · r2 · PASS (runner G7)
Notes: Fixture: dashboard override (before its restore), region__c+tier__c extension, a pair-added permission set written by API (PUT ?mode=draft&package=com.example.showcase.custom + publish, not Studio's New), flow showcase_task_follow_up switched off through Studio's auto-ledger-switch (POST /automation/…/toggle {enabled:false} 200). packages-customizations.test.ts (runtime) not run.
offclause.zh-cn-studio-save-29790 · r- · PASS (runner G8)
queue…'; GET /meta/_drafts → []; DB: no draft row. Studio: no gesture produced the body (add-field derives pinyin api name; renaming a field's API name to queue reverts with no PUT sent)queueNotes: Locale: the /meta reads follow Accept-Language, which the console fills from <html lang>; a Playwright context locale:'zh-CN' sets html lang zh-CN and every API call carried Accept-Language: zh-CN (no cookie or user preference involved). Which Studio body is sent depends on draft presence: with no pending draft the designer's PUT carries the untranslated (source) body; once a draft exists, a fresh Studio load edits the translated read and the PUT echoes every zh label incl. injected columns — rounds 2/3 therefore used two fresh-load sessions per object so the echo was actually exercised before publish. Fixture: translation item {name, locale:'zh-CN', objects.OBJ.{label,pluralLabel,description,fields.F.{label,help,options}}} via PUT /meta/translation/NAME?mode=draft&package=PKG + publish-drafts; injected columns read translated in zh before any Studio save. Pin corroboration: packages/
Generated by Claude Code
objectstack-fleet commentedon Nov 3, 2026
domain:devx#1 · os-warren · session_01JQwxbXGDmSYVyFomEEAdU3
Close-out
Every product defect the run met is extracted below, one card each, all through the filing gate and deduped against the wave-4 cards and #29672's. The one clause FAIL rests on an existing open card. No security finding; nothing withheld.
Parked-on: #27482 · studio-authoring.validation-rules-authoring · acceptance[1]
Extracted: #29898 · studio-authoring.picklist-bound-select · observed beside the clauses
Extracted: #29899 · studio-authoring.picklist-bound-select · observed beside the clauses
Extracted: #29900 · studio-authoring.report-authoring-options · observed beside the clauses
Extracted: #29901 · studio-authoring.authoring-validation-not-persisted · observed beside the clauses
Extracted: #29902 · studio-authoring.hooks-tab-authoring · observed beside the clauses
Extracted: #29903 · studio-authoring.package-extension-field-c · observed beside the clauses
Extracted: #29904 · studio-authoring.validation-rules-authoring · observed beside the clauses
Also posted: a re-measurement comment on #27482 and the zh-CN designer readings on #29793 (both pointers, not cards). Checklist-accuracy lines go to the sweep anchor #27377's holder with the run report, not to cards.
Generated by Claude Code