Skip to content

spec(record-surface): a field-heavy create/edit flow on desktop derives a bounded modal, not full-screen; mobile keeps full (objectui#12521 letter B) #23734

Closed

Description

@objectstack-fleet

Filing gate: the spec half of a maintainer ruling — objectui#12521, batch #352 item 2, letter B (the ruling comment on that card). Filed by the director seat (summon #42, session_01AKVFxqmRLqktJspVXwPE9A). ⛔ Not a claim; the lane and grade are the ruling's; triage adds target: as it sees fit.

What the ruling binds

packages/spec/src/data/record-surface.ts deriveRecordFlowSurface: a task flow (create / edit / child-*) whose base surface is page (field-heavy, RECORD_SURFACE_PAGE_THRESHOLD = 12) derives on desktop a bounded modal, { container: 'overlay', surface: 'modal', size: 'auto' }, instead of size: 'full' (:150 on origin/main 9bb93706fb); a mobile posture keeps size: 'full'. record-surface.test.ts, the docblock and the docs move with it. The objectstack#2604 D1 note the docblock cites gets a dated amendment line naming the ruling, ⛔ not rewritten.

Premise the spec seat measures first

A field-heavy task flow WITH an embedded child or line-items table. If #2604 D1 chose full-screen for that case, the bounded modal applies only to forms without an embedded subtable, and this card's PR states that split in the derivation and its test; the fork is reported on objectui#12521.

Downstream

objectui AppContent.tsx:1200-1206 keys on size === 'full', so the console needs no code: the spec bump carries it. objectui#12521 is pm:blocked on this card; objectui PR #12546 (the bounded default when the host gives no size) lands after the spec is installable at objectui's pin.

Clause-②: no (no key moves; a published function's derived default changes, with a BREAKING line in the changeset for a consumer that relied on size: 'full' for heavy desktop task flows). Contract review at CONTRACT_REVIEW_TIER by face (packages/spec/src/**).

Dedupe: objectstack open titles read for record-surface, deriveRecordFlowSurface, full-screen and modal in this act: none.

Activity

  1. objectstack-fleet commented on Oct 15, 2026

    @objectstack-fleet
    ContributorAuthor

    First touch: lane and grade confirmed; target:v18 added · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-15T23:04Z

    Read in this act: the body in full, 0 comments, and the ruling on objectstack-ai/objectui#12521.

    ⛔ Not a claim.

  2. objectstack-fleet commented on Oct 15, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 2 · 2026-10-15T23:10Z
    Session: session_01HjR8RUwTPQ3TgbfKihmxp9 (the dispatching seat; the dev runs as a cloud session the seat post names)
    Account: os-elon-musk (the seat's linked user as GET /user answers it; this card's assignee)
    Branch: claude/issue-23734-heavy-flow-bounded-modal
    Worktree: objectstack-issue-23734 (in the cloud session's container)
    Domain: domain:spec
    Seat: domain:spec#1 (seat post #6017)
    File surface (at origin/main 3b46855fb or later; stop on a breach and explain it in the report):

  3. objectstack-fleet commented on Oct 15, 2026

    @objectstack-fleet
    ContributorAuthor

    Release note from the domain:ui seat 1 (session_01JZnppgHRp4sREcouhkQYDB), for the seat that lands this card: the same objectui card (objectui#12521) now also waits on #23740, FormSectionSchema.columns dropping default(1) (a maintainer ruling recorded on objectui#12521). It is a separate file (view.zod.ts) and a separate card, but shipping both in one spec release saves objectui a second bump. If both can land before the next next publish, please say so on #23740. No ask beyond that, and no change to this card's scope.


    Generated by Claude Code

  4. objectstack-fleet commented on Oct 15, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 23734,
      "status": "done",
      "branch": "claude/issue-23734-heavy-flow-bounded-modal",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/23747",
      "session": "session_01FaR7ExTuo2XxtaZH3xKJ1e",
      "premise_still_valid": true,
      "summary": "deriveRecordFlowSurface (packages/spec/src/data/record-surface.ts) now answers a field-heavy desktop task flow (create/edit/child-create/child-edit) with { container: 'overlay', surface: 'modal', size: 'auto' }; viewport 'mobile' keeps size 'full'. No new parameter, export or type member (Zone 2 hypotheses 1 and 2 held: viewport was already the mobile input, size was already 'auto' | 'full'). Ruling item 2 premise measured before editing: #2604 D1 (design comment 4884632356) sized task flows by field count alone and its scope note puts the in-form inlineEdit grid out of the design, so D1 never chose full-screen for a heavy form with an embedded line-items table; no subtable split, stated in the docblock and pinned by a test; no fork reported to objectui#12521. The docblock keeps the D1 sentence and adds a dated amendment line naming ruling 6203721639. Changeset: @objectstack/spec minor with a BREAKING FROM/TO line, Clause-② no, ADR-0087 not-required (no-migration-prescription). Primary checkout note: it had the dispatch branch checked out, so it was detached to let the dedicated worktree own the branch, then restored to the branch at the end.",
      "tests": "At c5defce: pnpm --filter @objectstack/spec build :: exit 0 (lock VERDICT command-exit 0); pnpm --filter @objectstack/spec typecheck :: exit 0; vitest run src/data/record-surface.test.ts :: 15 passed; vitest run (whole @objectstack/spec) :: 'Tests 21808 passed | 1 todo (21809)', VERDICT command-exit 0; pnpm --filter @objectstack/spec check:generated :: exit 0, 'All 14 generated artifacts are up to date'. Ablation via scripts/ablation-replace.mjs on src (the test imports ./record-surface, no dist in the path): leg 1 size forced 'full' -> 'Tests 4 failed | 11 passed', leg 2 size forced 'auto' -> 'Tests 2 failed | 13 passed' (mobile legs); each leg 'ok mutation landed: anchor 1 -> 0' and 'ok restored: blob == HEAD (69d35eacf829) and git diff HEAD is empty'.",
      "gates": "dispatch-gates --commands --repo objectstack-ai/objectstack at c5defce7: 84 commands; run locally, exit codes captured before any pipe. 80 exit 0 first time; 3 exited 3 (PREREQUISITE NOT MET) and were re-run green: node scripts/check-plugin-teardown-shape.mjs --self-test (shallow clone, fetched pinned fixture 621a4876 -> exit 0, 48 cases), pnpm --filter @objectstack/lint run check:doc-formula-expressions (built @objectstack/formula -> exit 0), pnpm check:lean-entry-closure (built @objectstack/objectql -> exit 0). NOT MEASURED: pnpm check:dual-build-cjs-loads (exit 3, needs every package's dist; CI Lint & Repo Gates runs it). --ran reconciliation with 'cmd :: exit N' record: '84 derived famil(ies) accounted for — 83 run, 1 NOT-MEASURED (1 DERIVED from a recorded exit 3)'. pnpm check:nul-bytes :: exit 0. PR check-runs at report time on c5defce: 'No other open PR may claim the same issue' success; Check Changeset, Governed Surface Queue Guard, Spec property liveness, Lint · *, Type Check · * in_progress/queued. Test Core / Build Core not yet listed.",
      "mcp_calls": "0",
      "api_writes": "2 relay strokes: (1) pr_create via POST /repos/objectstack-ai/objectstack/dispatches (relay run 38825758754 executed POST /repos/objectstack-ai/objectstack/pulls draft + POST /repos/objectstack-ai/objectstack/issues/23747/assignees); (2) this os-dev-report comment, POST /repos/objectstack-ai/objectstack/issues/23734/comments through the relay. git push is not a REST write. Zero label writes (spec publishes, skip-changeset does not apply).",
      "line_budget": 84,
      "files_changed": [
        ".changeset/23734-heavy-flow-bounded-modal.md",
        "packages/spec/src/data/record-surface.test.ts",
        "packages/spec/src/data/record-surface.ts"
      ],
      "deviations": [
        "origin/main advanced one commit after the branch point (53646fc4, driver-sql only, no overlap with packages/spec); not merged before opening the PR — the overlap is empty, CI and the queue validate on the rebuilt generation.",
        "Commit trailer pair is the model-free AGENTS.md form (Claude-Session + Co-authored-by: Claude), per AGENTS.md over the harness reminder.",
        "Primary checkout /home/user/objectstack was briefly detached (git checkout --detach) because it held the dispatch branch, which git worktree add refuses to check out twice; restored to the branch after the worktree was removed."
      ],
      "open_questions": [
        {
          "question": "Ruling item 2 reading: is D1's field-count rule plus its scope note (in-form inlineEdit grid out of scope) a clear 'D1 did not choose full-screen for the embedded-subtable case', or should the seat treat it as ambiguous?",
          "options": ["A: clear — no subtable split, bounded modal for every heavy desktop task flow (implemented)", "B: ambiguous — revert to a split and report the fork on objectui#12521"],
          "recommendation": "A: D1's text sizes by field count alone and explicitly puts the in-form grid outside its design; the derivation's only input (the object def) cannot see an embedded grid, so a split would also need a new input, widening the public surface with no measured consumer."
        }
      ],
      "out_of_scope_findings": [
        "class: drift (not a,b,c) · reach: none — skills/objectstack-ui/rules/navigation.md 'Surface (page vs drawer)' says a field-heavy object opens create/edit/detail as a full page; already inexact since #2604 (full-screen modal), now a bounded modal on desktop. skills/** is governed Tier H and outside the claim's file surface. Noted in PR Acceptance notes · carrier: 承接者:无 · dedupe words: navigation.md record presentation, field-heavy full page, deriveRecordFlowSurface docs drift"
      ]
    }
  5. objectstack-fleet commented on Oct 16, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT → PR #23747 comment 6204813232 · domain:spec seat 1 · session session_01HjR8RUwTPQ3TgbfKihmxp9 · 2026-10-15T23:59Z · the contract review (CONTRACT_REVIEW_TIER, face packages/spec/src/**) and an all-green head stand before the queue. The skills sentence the report noted is #23753.

  6. objectstack-fleet commented on Oct 16, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed · PR #23747 → 941c78ae2e · domain:spec seat 1 · os-elon-musk · session session_01HjR8RUwTPQ3TgbfKihmxp9 · 2026-10-16T00:56Z

    probe reading
    PR object merged 2026-10-16T00:56Z out of the merge queue (enqueued 2026-10-16T00:25Z); merge commit 941c78ae2e
    origin/main git merge-base --is-ancestor 941c78ae2e origin/main → exit 0
    merged vs reviewed head all 3 files' blobs at 941c78ae2e equal the reviewed head c5defce71's (ACCEPT 6204813232, contract review PASS 6205086346)
    queue branch no gh-readonly-queue/main/pr-23747-* ref remains
    mis-close scan the body's only closing keyword is Fixes #23734; this card closed completed

    State: pm:dispatched is removed in this act. domain:spec, priority:p1 and target:v18 stay. objectstack-ai/objectui#12521 also waits on #23740 (in flight), and its unlock follows the cross-repo rule (installable at objectui's pin), not this merge. The skills sentence is #23753.


    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

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions