Skip to content

list bulk action confirmText: fill the template slot's declared holes — {{count}} first, the action's params second (the renderer half of objectstack#24798 ruling B) #13183

Open

Description

@objectstack-fleet

Filing gate ③ — the objectui half of ruling B on objectstack-ai/objectstack#24798 (the maintainer's 「同意」 in the director's chat, 2026-10-20), filed by the director seat (summon #45 continuation 1, session_01Lg6GQ4xjqmvEzYv78d6H7i) under ruling D on objectstack-ai/objectstack#24591: a card that straddles repositories is split by repository. ⛔ Not a claim.

Reader who acts: the objectui domain:ui seat, once the @objectstack/spec release that types confirmText as a template slot is installable here (the framework pin moves past that release). Until then this card is pm:blocked.

Blocked-by: objectstack-ai/objectstack#24798

What the ruling binds for this repository

  • Today packages/plugin-grid/src/components/BulkActionDialog.tsx:412 renders def.confirmText verbatim (objectui origin/main 91b658a75d64), and only the default t('grid.bulk.confirmDefault', { count }) fills a count. After the spec release, an authored confirmText is a template-dialect slot (ADR-0032 Decision 2 and 3): the dialog fills its {{ }} holes through the same template engine the flow notifications render with, over the bulk-confirm scope the spec declares.
  • Step 1, this card's first PR: {{count}} = the affected-record count (rows.length), plus the whitelist formatters the engine already carries.
  • Step 2, a second PR only after the spec PR states the display-value rule: {{<param name>}} = that param's display value (option label for picklists, record name for lookups, formatted dates and numbers via the whitelist).
  • Nothing else moves: no CEL inside holes (an ADR-0032 non-goal), no change to the default text, no change to where the confirm step sits. A hole the spec does not declare never reaches the dialog — objectstack validate, compile and the publish gate refuse it by name on the objectstack side.

Dedupe

#13154 (closed: moved to objectstack as the decision card). Open domain:ui cards scanned by title and body for confirmText / bulk confirm / template slot: 0 hits.

Related

objectstack-ai/objectstack#24798 (the ruling, letter B) · objectstack-ai/hotcrm#2188 (the maintainer's browser pass that found {{count}} on screen) · the sibling spec card on objectstack that types the remaining person-facing text slots.


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 20, 2026

    @objectstack-fleet
    ContributorAuthor

    Landing-order finding from objectstack domain:spec seat 3 (seat post objectstack-ai/objectstack#18883) · baozhoutao · session session_01D6F9axfoPzR7t8G1J7Ytzz · 2026-10-20T17:26Z · ⛔ Not a claim, ⛔ not a ruling.

    The spec half of objectstack-ai/objectstack#24798 (ruling B) is ready as objectstack-ai/objectstack#24947 and is held as a draft.

    With confirmText a template slot, the parsed and served value is { dialect: 'template', source }. plugin-grid/src/components/BulkActionDialog.tsx:412 renders def.confirmText as a React child, and types/objectql.ts:680 declares it as string. So if the spec lands first, every bulk def carrying confirmText breaks its confirm step in the console, and no typecheck sees it.

    Order the seat has put to the maintainer:

    1. A first, small PR here: an envelope reader (string | { source }, the shape formatTitleTemplate already reads for titleFormat), printing source verbatim for now. It needs no spec release, because it reads both shapes.
    2. objectstack's .objectui-sha moves past it.
    3. feat(spec,lint): a bulk action's confirmText is a template slot over count and its params, judged at validate, compile and the publish gate objectstack#24947 lands.
    4. This card's fill step ({{count}}, then the param roots) follows as the ruling describes.

    This card's pm:blocked label stays as triage set it until the maintainer answers. Details: objectstack-ai/objectstack#24798, seat hold comment.


    Generated by Claude Code

  2. objectstack-fleet commented on Oct 22, 2026

    @objectstack-fleet
    ContributorAuthor

    Order answered — block lifted, claim

    The domain:spec seat 3 (objectstack-ai/objectstack#18883) put a landing order to its user in the seat-hold comment 6296947690 on objectstack-ai/objectstack#24798. On 2026-10-22 the user (baozhoutao) directed the seat to carry objectstack-ai/objectstack#24947 through to merge, which takes that order. The pm:blocked hold, waiting "until the maintainer answers", is therefore lifted for step 1 only:

    1. This claim: a small objectui PR adds an envelope reader for confirmText that accepts string | { dialect?, source } (the shape formatTitleTemplate already reads for titleFormat) and prints source verbatim. It needs no spec release, because it reads both shapes.
    2. objectstack's .objectui-sha moves past it.
    3. feat(spec,lint): a bulk action's confirmText is a template slot over count and its params, judged at validate, compile and the publish gate objectstack#24947 lands.
    4. The fill step of this card ({{count}}, then the param roots) stays as ruling 6285948976 describes, and is not part of this claim.

    Claim: PM loop round 36
    Session: session_01D6F9axfoPzR7t8G1J7Ytzz
    Account: baozhoutao
    Branch: claude/issue-13183-confirm-text-envelope-reader
    Worktree: objectui-issue-13183
    Domain: domain:ui (cross-repo, serving objectstack domain:spec seat 3)
    File surface (at objectui origin/main 56cf4d8e89 or later; stop on a breach and explain it in the report):

    • packages/plugin-grid/src/components/BulkActionDialog.tsx (around :384), which renders confirmText through the envelope reader;
    • packages/types/src/objectql.ts (around :677), where BulkActionDef.confirmText becomes string | { dialect?: 'template'; source: string };
    • the reader's helper and its tests;
    • objectui's changeset.
      Container & model: S, mode:subagent, model: default (no path-derived mandate)
      Clause-②: no (a renderer reading both shapes; no spec change)
      Responsibility: step 1 of the landing order for objectstack-ai/objectstack#24947
      Thread-read: 6296947690
      Serial constraints cleared: no open objectui PR touches these files.

    Read on objectui origin/main 56cf4d8e89 at 2026-10-22T07:31Z: BulkActionDialog.tsx:384 renders def.confirmText as a React child, and types/objectql.ts:677 declares confirmText?: string.

  3. objectstack-fleet commented on Oct 22, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 13183,
      "status": "done",
      "branch": "claude/issue-13183-confirm-text-envelope-reader",
      "pr": "https://github.com/objectstack-ai/objectui/pull/13319",
      "session": "session_01D6F9axfoPzR7t8G1J7Ytzz",
      "premise_still_valid": true,
      "summary": "Step 1 of the landing order for objectstack-ai/objectstack#24947: BulkActionDef.confirmText in @object-ui/types is now string | { dialect?: template; source: string } (the shape BulkConfirmTextSchema in #24947 serves), and plugin-grid gains bulkConfirmTextSource (string, or the envelope source verbatim; undefined for absent, blank or no string source), modelled on core formatTitleTemplate reading titleFormat. BulkActionDialog renders the confirm sentence through it and keeps the grid.bulk.confirmDefault sentence otherwise; holes are not filled. File-surface breach, explained in the PR: the zod mirror ObjectGridBulkActionDefSchema.confirmText in packages/types/src/zod/objectql.zod.ts had to take the same union, because the zod-mirror-parity type ledger went red on the type change alone. BulkActionDialog is the only display reader of a bulk def confirmText in objectui; resolveBulkActions toBulkActionDef reads the object action slot (unchanged by #24947) and ObjectGrid stripCollectedActionKeys only destructures it. Behaviour change: a blank confirmText now shows the default sentence instead of an empty description. PR body starts Refs #13183; #13183 stays open for the fill step.",
      "tests": "At head fef2d040e: pnpm exec vitest run --maxWorkers=2 packages/types/ packages/plugin-grid/ -> Test Files 629 passed (629), Tests 12745 passed (12745), lock VERDICT command-exit 0. New file packages/plugin-grid/src/__tests__/bulkConfirmTextEnvelope-13183.test.tsx, 10 tests (reader: string, envelope, envelope without dialect, blank, absent/null, no source; dialog: envelope source shown and no [object Object], plain string unchanged, absent and blank keep the default). Ablation after commit bbb06a1f1: render site set back to def.confirmText via node anchor replace (inj=1 del=0 by grep -c), trap restore with git checkout HEAD; result 2 failed | 8 passed (the envelope test and the blank-default test); restore proven by empty git diff HEAD and HEAD blob hash match. No build step was needed for the ablation: the test imports ../components/BulkActionDialog by relative path. pnpm --filter @object-ui/types --filter @object-ui/plugin-grid run type-check -> exit 0, both scripts echoed, after turbo build of plugin-grid^... (13 tasks successful); a first run went red on zod-mirror-parity assertionDriftMatchesLedger, fixed by the mirror commit. apps/console registry-inputs-spec-parity.test.ts -> 260 passed. eslint on the 5 touched files -> 0 errors, 30 warnings (pre-existing plus two as-any casts in the new test); repo-wide lint left to CI. Gates exit 0: check:new-line-citations, check:control-bytes, check:spec-symbols, check:changeset-claims, check:pending-changeset-literals, check:unreferenced-sources, check:test-path-roots, scripts/check-changeset-presence.mjs. Gate list worked out by hand from objectui package.json, since objectui has no dispatch-gates.mjs. CI: in_progress at report time.",
      "mcp_calls": "0",
      "api_writes": "2 relay strokes as objectstack-fleet[bot]: (1) pr_create via fleet-write dispatch (POST /repos/objectstack-ai/objectstack/dispatches -> run 39744274511 -> POST /repos/objectstack-ai/objectui/pulls draft + POST /repos/objectstack-ai/objectui/issues/13319/assignees); (2) this os-dev-report comment via post-stamped.mjs (POST /repos/objectstack-ai/objectui/issues/13183/comments). Plus git push (not REST). Zero label writes: objectui path labels belong to labeler.yml and no label was named in the dispatch.",
      "open_questions": [],
      "out_of_scope_findings": [
        "carrier: the fill-step PR of objectui#13183 - bulkConfirmTextSource is the seam where {{ count }} and the param roots get filled; the type member JSDoc names it. noted, not filed."
      ],
      "deviations": "(1) The first source edits were made before the empty-branch push probe; the push went through on the first try right after. (2) Commit bbb06a1f1 has a Refs #13183 line in its message body, against the no-card-reference-in-commits rule; force-push is not allowed in objectui, so it stays and the PR body says so. (3) The claim file surface did not list the types zod mirror packages/types/src/zod/objectql.zod.ts; it was required by the parity ledger and is explained in the PR body. (4) Dev commits carry no Co-Authored-By or Claude-Session trailers (model-free, per the dispatch)."
    }

    Generated by Claude Code

  4. objectstack-fleet commented on Oct 22, 2026

    @objectstack-fleet
    ContributorAuthor

    Step 1 landed

    • objectui#13319 merged as cd14d8eef (single-parent squash). Its patch-id equals the reviewed head fef2d040e (cf541956d2).
    • BulkActionDef.confirmText accepts a string or the { dialect?: 'template', source } envelope. BulkActionDialog renders it through bulkConfirmTextSource, which gives the source as written, and a blank or absent value falls back to the default sentence. No hole is filled yet.
    • Next steps of the order: objectstack's .objectui-sha moves to cd14d8eef (in progress), then feat(spec,lint): a bulk action's confirmText is a template slot over count and its params, judged at validate, compile and the publish gate objectstack#24947 lands.
    • This card stays open for its fill step ({{count}}, then the param roots), as ruling 6285948976 describes. pm:dispatched stays while the seat carries the order.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatpm:dispatchedpriority:p2

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions