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. added
    enhancementNew feature or request
    priority:p1High: required for production / M2
    pm:queueReady for the PM dispatch loop
    domain:specDomain lane — seat card indexed by label:pm:seat
    on Oct 15, 2026
  2. 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.

  3. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Oct 15, 2026
  4. 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):

  5. 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

  6. 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"
      ]
    }
  7. 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.

  8. 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

Labels

domain:specDomain lane — seat card indexed by label:pm:seatenhancementNew feature or requestpriority:p1High: required for production / M2target:v18

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions