Skip to content

test(e2e/live): the eleven stale live specs, each brought back to the shipped showcase or retired (objectui#13104) - #13132

Merged
objectstack-fleet[bot] merged 5 commits into
mainfrom
claude/issue-13104-live-specs-current
Oct 20, 2026
Merged

objectstack-fleet[bot] merged 5 commits into
mainfrom
claude/issue-13104-live-specs-current

Conversation

@objectstack-fleet

@objectstack-fleet objectstack-fleet Bot commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor

Fixes #13104

Clause-②: no

Every row has its conclusion: the card's eleven, plus studio-editor, which the claim's amendment (comment 6283451551) added as row 12. Eleven specs are repaired against the current surface and the shipped showcase. One case is deliberately retired (user-filters' lookup quick filter). screen-flow needs no change because its red does not reproduce. ⛔ No product source is touched; the diff is eleven files under e2e/live/. No test.skip / test.fixme is added, and record-history-display's skip guard is gone.

This is a resume dispatch. The first dev's draft (2f09525) was unverified when its container restarted. Every row below was re-measured, red on BASE df943a2 and green on this head. Three commits on top of the draft change what did not hold (R1, R4, R5 below). Patch round 1 adds 8493767 for row 12. Session: https://claude.ai/code/session_014MXhk1yjWh37d634hLy3p7.

How it was measured

  • Backend (the one the card names, "the shipped showcase"): objectstack main d20bf9b09, whose .objectui-sha is the shipped console pin 12dc7b47c340. Its examples/app-showcase ran from a built objectstack worktree with objectstack dev --seed-admin --fresh -p 4113, on a fresh database for each whole-suite run.
  • Console: this worktree's console Vite dev server (cd apps/console && DEV_PROXY_TARGET=http://localhost:4113 pnpm exec vite --port 5213 --strictPort). The diff touches only e2e/live/, so the console source under test is BASE's.
  • Runner: pnpm exec playwright test with playwright.live.config.ts wrapped only to add executablePath: /opt/pw-browsers/chromium. This container's Playwright 1.62.1 wants chromium revision 1234, and 1194 is the one installed. The BASE specs ran from a git archive df943a2 e2e/live copy.
  • Whole-suite runs: every spec under e2e/live/, in one run, alphabetical, one worker, as the Tier 1 run (QA run · tier1:automated-pins (149/166) · ba4afcc2 · 2026-10-19 · 60 PASS / 89 PARTIAL / 0 FAIL / 0 BLOCKED / 17 NOT-RUN objectstack#24598) ran them.
    • BASE: 46 passed, 15 failed or timed out, 1 skipped.
    • Head 3afb8d1 (round 1): 59 passed, 2 failed, both studio-editor.
    • Head 8493767 (patch round 1, row 12 repaired): 61 passed (11.0m), exit 0. Every spec is green, studio-editor included.
  • Control backend (H2): objectui's own CI-lane backend: e2e/live/ci/start-backend.sh, published @objectstack/*@18.0.0-next.5 plus the showcase at its release tag (820fd5ae), on :4114, with a second console dev server on :5214. The head 3afb8d1 whole-suite run there gave the same reading as the primary: 59 passed, 2 failed, both studio-editor. In patch round 1 the repaired studio-editor also ran there at 8493767: 2 passed. backend.env is not edited.

Per-row conclusions

Before = BASE df943a2, after = the final head, both read from the whole-suite runs above (tests passed / tests in the spec).

spec cause, re-measured at BASE conclusion before → after
studio-object-designer F1 timed out: it opens the Studio app, which a stock boot does not serve. F4: the banner is "A select field needs its choices", for a picklist with no option source repaired: F1 on the Studio surface's package switcher (R4); F4 gives the picklist one option before adding the empty row 2/4 → 4/4
studio-record-page getByLabel(/^Object/i) resolves first to the app bar's "ObjectOS home" link, and the Object control is a role=combobox; Page type now defaults to list repaired: anchored label, combobox and option, Page type set to record 0/1 → 1/1
user-filters tabs: no view-tab-urgent (ADR-0053 made tabs an interface-page element); switcher: not in the toolbar; hollow view: cell where the grid exposes gridcell; lookup filter: no filter bar on showcase_task.tabular repaired: tabs on the Task Triage page, the switcher through the Display popover with the exact shipped whitelist, gridcell. The lookup case is retired (R2) 2/6 → 5/5
inline-edit-polish-2572 the lock poll read 8 edit affordances where 0 were expected: the request opens on manager_review (lockRecord: false); the spec also spent the seeded project repaired: its own project, and the lock asserted at exec_review (R1) 0/1 → 1/1
field-conditional-rules no tax_rate input where toBeDisabled waited: a readonlyWhen field renders the read-only field group repaired: the input is gone and the read-only group is shown under paid, and back to an editable input under sent / draft 0/1 → 1/1
grid-file-upload getByText('Line Items') matches the sr-only DialogDescription and the section heading (strict mode). The second cause (ADR-0104 stored form) sits behind it repaired: the section found by its heading role; the receipt is a file id, read back byte for byte through GET /api/v1/storage/files/ID 0/1 → 1/1
form-view-subforms the same Line Items collision repaired: heading role 0/1 → 1/1
cascading-options no md-form-submit on showcase_cascade's flat ModalForm repaired: waits for the ModalForm's modal-form-footer 1/2 → 2/2
detail-related-list waitForURL(/[?&]recordId=/) timed out: a row's name link opens /record/ID repaired: the id read from the route, on Northwind; the primary Projects list in its own tab (R3) 0/1 → 1/1
record-history-display skipped by its app-todo guard repaired: targets showcase_account, with no skip guard (R5) skipped → 1/1
screen-flow passes at BASE, both alone and in the whole-suite order no change: the card's red does not reproduce (below) 1/1 → 1/1
studio-editor (row 12) the shipped showcase_project_workspace opens read-only (lock no-overlay), so there is no "Add block"; and the page form has no "Layout" section heading. Both are intended (below) repaired: each test authors an editable copy of the page; the Layout check reads where the layout renders, on the canvas 0/2 → 2/2

screen-flow (read first, as triage asked). No record names a cause for the Tier 1 red. objectstack-ai/objectstack#24598 says only "FAILED (known-stale, not consulted)". On the shipped showcase it passes at BASE alone and in the whole-suite order. objectui's own Live E2E lane (published 18.0.0-next.5) also reads it green, judged by the step Run live E2E allowlist = success with no continue-on-error:

  • main's scheduled run 39213623070, at 4484a11. That is three commits after the Tier 1 console pin 4016370a, and the three touch record-page reads and publish tooling.
  • PR run 39359398003, today.

The job log itself answered 403 through this container's proxy, so the reading rests on the step conclusion.

Review points

R1 · inline-edit-polish-2572: the lock assertion is kept.

  • The draft swapped the lock for an "In approval · editable" reading. The lock is back, at a step that locks.
  • Before (BASE): poll until page.locator('[title="Double-click to edit"]').count() is 0 after the request opens. Then lockedBudgetGroup.dblclick() and expect(saveBtn).toBeHidden().
  • Now:
    • (2a, an addition) at manager_review: "In approval · editable" is shown, and a double-click opens a session.
    • (2b) The test approves manager_review with POST /api/v1/approvals/requests/ID/approve. The seeded admin holds the manager position (ADMIN_APPROVAL_POSITIONS in the showcase's seed-approval-demo.ts). It waits for the pending exec_review request with lock_record: true.
    • Then it asserts the original lock unchanged: zero affordances after a fresh mount, and a double-click that opens nothing. It adds the "Locked for approval" band as a positive signal.
  • The budget edit moves from 160000 to 600000, because exec_review is reached only over the flow's decision edge for a budget above 500000 (showcase_budget_approval in the showcase's automation/flows/index.ts).
  • Measured: BASE red (8 vs 0); 46625db green alone (24.3 s); green in the head whole-suite run.

R2 · user-filters' lookup quick filter: retired, with the measurement.

  • git grep -n userFilters d20bf9b09 -- examples/app-showcase/src lists every declaration in the shipped showcase (positive control: allowedVisualizations is found in task.view.ts).
  • The views and pages read:
    • page showcase_active_projects (health, status);
    • page showcase_task_triage (tabs);
    • page showcase_task_workbench (status, priority);
    • project.view.ts (status, health).
  • task.view.ts declares none by design; its own ADR-0053 note says so.
  • Every one of those fields is Field.select. The task object's one lookup, project (master-detail), is a user filter nowhere. So no shipped fixture can drive the case, and it is deleted.
  • Unit reading (not a diff): four plugin-list tests render the lookup filter picker (filter-lookup-FIELD):
    • UserFilters.declaredDisplayField-10545
    • UserFilters.lateTypeCoercion-12008
    • UserFilters.pendingLabel-12890
    • UserFilters.retiredFieldType
  • 10545 pins the picker's display-field read. None of the four picks a record through the picker: the selection is seeded with initialSelections, and 12008's emitted-filter assertions are on boolean and numeric fields.
  • Coverage lost: picking a record in a lookup quick filter narrows the list, persists as a uf_FIELD URL param and badges the count. Nothing pins that end to end now.

R3 · detail-related-list: Northwind and its related list are in the shipped seed.

  • examples/app-showcase/src/data/seed/index.ts seeds the account Northwind and its projects "Website Relaunch" (active) and "Legacy Sunset" (completed).
  • examples/app-showcase/src/data/objects/project.object.ts declares the account lookup with relatedList: 'primary' and relatedListTitle: 'Projects'.
  • "Rule Z" is objectui's own default in buildDefaultPageSchema.ts: an isPrimary related list gets its own tab. It is pinned by the plugin-detail test "promotes an isPrimary related list to its OWN tab (rule Z default)".

R4 · studio-object-designer F1: the title's promise holds, and the mechanism coverage is narrower.

  • Before (BASE): create the package on the Studio app's developer/packages page, then getByTestId('package-switcher').click() and expect(getByRole('option', { name: pkgName })).toBeVisible().
  • After: on /studio/com.example.showcase/data, create the package through the switcher's "New package" dialog, with no reload. Then:
    • expect(chip).toContainText(pkgName);
    • the open switcher lists a button named by the package's name followed by its id. This commit tightened the draft's id-only match to the name the refreshed list carries.
  • Why it moved: the sidebar package-switcher (ContextSelectors.tsx) renders only for an app that declares contextSelectors. A stock showcase boot serves showcase_app, setup and account (GET /api/v1/meta/app), and none declares one.
  • What it no longer pins: the original watched a switcher that stays mounted while a package is created elsewhere, so it pinned the objectui:packages-changed refetch. On the Studio surface the create dialog navigates into the new package, and the switcher's list effect is keyed on the package id, so the route change alone refetches the list.
    • No unit test pins either switcher's objectui:packages-changed refetch. The only test that names the event is packages-io.inflightShare-11797, and it pins the in-flight read drop.
    • The draft cited ADR-0048 for "no stock boot loads the Studio app". objectstack's ADR-0048 is about cross-package metadata collision, so both comments now state the reading and its instrument instead.
  • F4's BASE banner was the "needs its choices" error, not the "System identifier must be" error F4 guards. Giving the picklist an option first keeps F4 on its own bug.

R5 · record-history-display: showcase_account declares enable: { trackHistory: true } in examples/app-showcase/src/data/objects/account.object.ts.

  • It is the only showcase object that does.
  • Its fields, with the extension's, carry no boolean and no datetime. So the original's booleans-as-words and datetime legs cannot be driven on the showcase. Both stay pinned in app-shell's auditHistoryDisplay.test.ts ("localizes booleans through t with Yes/No fallback", "localizes datetime values instead of raw ISO strings"), and the spec header now says so.
  • This head also asserts the "Customer Since" diff line before asserting no raw YYYY-MM-DD, so that check cannot pass on an absent line. Read once: "Customer Since: 7/26/2026 → 8/4/2026".

H4

grid-file-upload and form-view-subforms share the Line Items cause. Each spec now finds the section by its heading role. e2e/live/helpers.ts is unchanged, so no other spec's reading moves.

Row 12 · studio-editor (patch round 1)

Correction first. Round 1 said "Tier 1 read it green at 4016370a", and that was wrong: it was inferred, not measured. Tier 1 (objectstack-ai/objectstack#24598) never ran this spec. For studio-authoring.record-page-roundtrip, its pin set is "files 0/1 … (studio-record-page.spec.ts …)", and studio-editor appears nowhere in that record. Nothing moved between Tier 1 and now. objectstack-ai/objectstack#7753 item 6 (closed 2026-08-11) had already recorded both causes against QA run objectstack-ai/objectstack#7695: "targets a 'Layout' heading that no longer exists, plus a shipped page the editor correctly locks". objectstack's checklist carries the same record as automated.stale on that item.

The producers, and whether each state is intended. Both states are intended.

  • The lock. page is registered create-only: supportsOverlay: true, allowEnvironmentOverlay: false, allowRuntimeCreate: true (metadata-plugin.zod.ts). ADR-0005's override table lists page as ❌ ("Conservative default — these bind to routes and side-effects"). Its addendum "Two-tier authorization (PR-10d.7, 2026-05)" says "users may author brand-new items of this type, but artifact-shipped items remain immutable".
  • The missing "Layout" heading. objectui 29bc4bf00f (objectui#2308, 2026-07-06) prunes name / regions / children from the page form (PAGE_FIELDS_OWNED_ELSEWHERE, page-schema.ts): the block tree is "edited on the canvas", and no bare section header is left behind. The spec form's "Layout" section holds only regions, so it does not render.

The repair keeps every assertion and re-points the two stale ones.

  • Each test authors an editable copy of the shipped page in the environment: GET showcase_project_workspace, PUT it under e2e_studio_editor_STAMP, and DELETE it in finally. The copy reads lock: none, editable: true, and after a run the page list holds no e2e_ leftovers.
  • "Config sections": the Basics heading, as before, plus the Data Context heading, plus a guard that no lock banner stands in front of the editor. The guard is a precondition, not a replacement.
  • "Layout": read where the layout renders now, on the canvas. There is one Add block per region (the count is derived from the copied page's regions), and the canvas offers Add region. On the shipped page none of these render.
  • Add block, and the picker's Card / Section / Record details, are unchanged. Each match is unique among the picker's 33 entries.
  • Measured: BASE 0/2 (no "Layout" heading; no Add block, timeout); 8493767 2/2 alone, and green in the final whole-suite run.

Gates (head 8493767, exit codes captured before any pipe)

  • pnpm type-check:e2e: 0
  • pnpm exec eslint over the eleven changed specs: 0 errors, 11 warnings (BASE bytes of the same files: 12)
  • pnpm check:new-line-citations: 0 (0 new citations)
  • pnpm check:control-bytes: 0
  • pnpm check:test-path-roots: 0
  • node scripts/check-changeset-presence.mjs: 0. No source or published contract of a released package changed, so no changeset is owed.
  • The live suite table above is the acceptance reading.

Acceptance notes

  • The objectstack checklist's automated.stale markers for these specs are the objectstack domain:devx seat's to drop. ⛔ They are not edited here.
  • Coverage this PR does not restore, named once more:
    • the lookup quick-filter pick (R2);
    • the mounted-switcher objectui:packages-changed refetch (R4);
    • booleans and datetimes in History on the live stack (R5, unit-pinned).
  • Diff: 11 files, 353 insertions, 212 deletions.

Generated by Claude Code

…e and the shipped showcase

Each spec is re-measured against the shipped showcase (objectstack main,
console pin 12dc7b4) and repaired at the cause it hit, with no
assertion weakened to pass:

- form-view-subforms, grid-file-upload: the Line Items section is found
  by its heading role; a bare text match also hit the dialog's sr-only
  description and failed strict mode.
- grid-file-upload: the line's receipt follows ADR-0104's stored form, an
  opaque file id, and is read back through the file door byte for byte.
- cascading-options: the flat ModalForm is awaited by its own footer.
- detail-related-list: a row opens /record/ID, and the primary Projects
  related list is its own tab (rule Z), read on Northwind.
- field-conditional-rules: a readonlyWhen field renders the read-only
  field group in place of the input.
- studio-record-page: the Object control is a combobox, and Page type
  defaults to list, so record is picked.
- studio-object-designer: off the Studio app no stock boot loads; F1 runs
  on the Studio surface's package switcher; F4 gives the picklist an
  option source before adding the empty row.
- user-filters: tabs on Task Triage (ADR-0053), the switcher in the
  Display popover with the shipped whitelist, gridcell roles; the lookup
  quick-filter case is retired (no shipped fixture).
- inline-edit-polish-2572: its own project per run; manager_review is
  lockRecord: false, so the pending approval reads editable.
- record-history-display: targets showcase_account, the showcase's
  trackHistory object, with no skip guard.

Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014MXhk1yjWh37d634hLy3p7
…tion, at exec_review

The draft replaced item 2's lock assertion with an "In approval · editable"
reading. What was stale is the fixture, not the behaviour: the request opens
on `manager_review`, which declares `lockRecord: false`. The locking step is
`exec_review` (`lockRecord: true`), reached when `manager_review` is approved
and the budget is above the flow's 500k decision edge.

So the budget edit now goes to 600000, the editable reading at
`manager_review` stays as an addition, the test approves `manager_review`
through POST /api/v1/approvals/requests/ID/approve (the seeded admin holds
the `manager` position), waits for the pending `exec_review` request with
`lock_record: true`, and then asserts the original lock: zero "Double-click
to edit" affordances after a fresh mount, the "Locked for approval" band, and
a double-click on Budget that opens no session.

Measured on the shipped showcase (objectstack main d20bf9b09,
`objectstack dev --fresh`) with this worktree's console dev server:
- BASE df943a2: red (the lock poll read 8 affordances where 0 were expected).
- this commit: green, 1 passed (24.3s).

Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014MXhk1yjWh37d634hLy3p7
…k is not vacuous; correct two citations

studio-object-designer:
- F1 now finds the new package in the open switcher by its name followed by
  its id. The draft matched the id alone; the name is what only the refreshed
  list carries, which is what the original F1 asserted (an `option` named by
  the package name).
- The draft cited ADR-0048 for "no stock boot loads the Studio app".
  objectstack's ADR-0048 is about cross-package metadata collision, so both
  comments now state the reading and its instrument instead: the served apps
  are what GET /api/v1/meta/app lists, and the sidebar `package-switcher`
  renders only for an app that declares `contextSelectors`.

record-history-display:
- Asserts the "Customer Since" diff line is present before asserting no raw
  YYYY-MM-DD, so the date-localization check cannot pass on an absent line.
- The header names where the two legs the showcase cannot drive are pinned:
  `auditHistoryDisplay.test.ts` ("localizes booleans through t with Yes/No
  fallback", "localizes datetime values instead of raw ISO strings").

Measured on the shipped showcase (objectstack main d20bf9b09) with this
worktree's console dev server:
- studio-object-designer at this commit: 4 passed (F1, F2, F3, F4).
  BASE df943a2: F1 timed out, F4 failed (banner: "A `select` field needs its
  choices").
- record-history-display at this commit: 1 passed. BASE: skipped (its
  app-todo guard). Panel text read once: "Customer Since: 7/26/2026 ->
  8/4/2026".

Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014MXhk1yjWh37d634hLy3p7
…2 reads

The R1 repair read the approvals API's rows as `any`, which took the file
from 3 to 4 `no-explicit-any` warnings. A local `ApprovalRequestRow` type
(id, status, flow_node_id, lock_record) replaces both, leaving the file at 2,
below BASE df943a2's 3. `pnpm type-check:e2e` exit 0.

Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014MXhk1yjWh37d634hLy3p7
…d reads its layout on the canvas

Row 12 of objectui#13104, measured before editing. Both causes are intended
product states, not regressions:

- The shipped `showcase_project_workspace` opens read-only. `page` is a
  create-only type (`allowEnvironmentOverlay: false`, `allowRuntimeCreate:
  true`), and ADR-0005's two-tier rule (addendum PR-10d.7) keeps an item a
  code package ships immutable on such a type. ResourceEditPage's two-tier
  gate applies it; since objectstack#21670 the layered read's protection
  envelope also reports it (lock no-overlay, editable false), which draws the
  "This item is locked" banner.
- There is no "Layout" section heading. objectui 29bc4bf (objectui#2308)
  prunes `regions` from the page form (`PAGE_FIELDS_OWNED_ELSEWHERE`) because
  the block tree is edited on the canvas, leaving no bare section header.

objectstack#7753 item 6 (closed 2026-08-11) had already recorded both
causes ("a SHIPPED page the editor correctly locks"). The Tier 1 run
objectstack#24598 never ran this spec: its pins for that item were
studio-record-page only.

The repair keeps every assertion and re-points the stale two:
- each test authors an editable copy of the shipped page in the environment
  (GET the shipped page, PUT it under a fresh name, DELETE it in `finally`);
- "config sections": Basics as before, plus Data Context, and a guard that no
  lock banner stands in front of the editor;
- "Layout" now reads where the layout renders: one Add block per region
  (count derived from the copied page) and the canvas's Add region;
- Add block and the picker's Card / Section / Record details are unchanged.

Measured on the shipped showcase (objectstack main d20bf9b09):
- BASE df943a2: 0/2 (heading Layout not found; Add block absent, timeout);
- this commit: 2/2 passed (22.3s); the page list holds no e2e_ leftovers
  afterwards.

Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014MXhk1yjWh37d634hLy3p7
@objectstack-fleet

objectstack-fleet Bot commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor Author

席位核对 · ACCEPT · objectui#13104 · PR #13132 · domain:ui#1 · session_014MXhk1yjWh37d634hLy3p7 · 2026-10-20T05:02Z

Head 8493767718a1b501da1308d3eecfc813a13b8315. Reviewed against the claim and its amendment (6281818397, then 6283451551 adding row 12), and the dev reports 6283422462 (round 0) and 6283771633 (patch round 1). Each was read on GitHub rather than from the report. No contract-review record is owed: the claim and the PR body read Clause-②: no, the diff is test code under e2e/live/ only, there is no changeset, and no published face moves.

  1. Shape: draft PR against main. The body's first line is Fixes #13104, the only closing keyword. Assignee huangyiirene. 11 files, +353 / −212, all e2e/live/*.spec.ts. Not Tier H. node scripts/check-changeset-presence.mjs reads "no changeset is owed".
  2. History: the first dev was lost to a container restart. Its local draft 2f09525 was pushed unchanged by the seat and treated as unverified. Every row was re-measured on the resumed dispatch.
  3. Acceptance, the table: the whole live suite at 8493767 on the shipped showcase (objectstack main d20bf9b09 examples/app-showcase, fresh DB) reads 61 passed (11.0m), exit 0. At BASE df943a2 the same run read 46 passed, 1 skipped, 15 failed. The CI-lane backend (published 18.0.0-next.5) is the control. It read 59 passed / 2 failed at 3afb8d1, where the 2 were studio-editor, and 2/2 for studio-editor alone at 8493767. Per row:
    • Repaired, ten: studio-object-designer, studio-record-page, user-filters, inline-edit-polish-2572, field-conditional-rules, grid-file-upload (both causes, the ADR-0104 stored form included), form-view-subforms, cascading-options, detail-related-list, record-history-display.
    • Retired: user-filters' lookup quick-filter case. The shipped showcase declares no lookup user filter: git grep userFilters d20bf9b09 -- examples/app-showcase/src, re-run by the seat. The PR body names the lost coverage (the end-to-end pick to uf_FIELD), and the plugin-list unit tests that still render the picker.
    • No change: screen-flow. Its red does not reproduce at BASE, alone or in suite order, and objectui's Live E2E lane reads it green.
    • Row 12, studio-editor: repaired as a stale spec. ADR-0005's addendum "Two-tier authorization" makes shipped pages immutable ("artifact-shipped items remain immutable"). objectui 29bc4bf00f moved the page layout onto the canvas. studio-authoring run notes: one correction to #7637, two stale automated.ref specs, and three ledger/route observations objectstack#7753 item 6 already read both as "Neither is reporting a product defect". The spec now authors and removes its own environment copy of the page.
  4. Seat review points, each answered with a measurement:
    • R1: the approval-lock assertion is kept at exec_review: zero affordances, the "Locked for approval" band, and a no-op double-click.
    • R2: the retirement is measured.
    • R3–R5: the showcase sources are cited (seed, project.object.ts, account.object.ts enable.trackHistory).
    • R4: F1's original title promise holds. The mechanism coverage it narrows (a mounted switcher's objectui:packages-changed refetch) is named in the PR body.
  5. No assertion weakened: read in the diff.
    • studio-editor keeps Basics, Add block and the picker's Card / Section / Record details. The vanished Layout heading becomes one Add block per region plus Add region, where the layout now renders, with a no-lock-banner precondition guard.
    • No test.skip or test.fixme is added. record-history-display's stale skip guard is removed.
  6. Gates: the dev's local runs at 8493767: pnpm type-check:e2e exit 0; eslint over the changed specs 0 errors (11 warnings, against 12 on the same files at BASE); check:new-line-citations, check:control-bytes, check:test-path-roots and changeset presence all exit 0. CI on this head: 33 check-runs, 30 success and 3 expected skips. The changeset and bundle checks are path-filtered off for a test-only diff.
  7. Accepted deviations:
    • The runner used a gitignored config wrapper adding executablePath for the preinstalled Chromium, on isolated ports.
    • The primary backend was a built objectstack main worktree. It and the objectui worktree were removed at the end.
    • The PR body's footer is the bare form after a PATCH.
    • Round 1's "Tier 1 read studio-editor green" was an inference, and the dev corrected it in the body: Tier 1 never ran that spec.
  8. Owed after landing (the seat's): a pointer on qa(checklist): 18.0 release sweep anchor at 5b14b7f3 — re-point 5 red-row clauses + the wave's checklist-accuracy findings, fixture gaps and not-run handover (18 records) objectstack#24579, naming the repaired specs for the objectstack domain:devx seat's automated.stale markers (PR docs(qa): 18.0 sweep anchor round 6 — mark the objectui live specs stale at the console pin, and narrow or drop the pins that cover no full clause, in the UI-facing areas objectstack#24697). They reach the sweep when objectstack's .objectui-sha moves past the merge.
  9. Landing: not Tier H, and no contract-review face is hit. CI is green on this head, so the seat flips to ready and enables auto-merge.

@objectstack-fleet
objectstack-fleet Bot marked this pull request as ready for review October 20, 2026 05:04
@objectstack-fleet
objectstack-fleet Bot enabled auto-merge October 20, 2026 05:04
@objectstack-fleet
objectstack-fleet Bot added this pull request to the merge queue Oct 20, 2026
Merged via the queue into main with commit 0b36ffa Oct 20, 2026
34 checks passed
@objectstack-fleet
objectstack-fleet Bot deleted the claude/issue-13104-live-specs-current branch October 20, 2026 05:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

2 participants