Skip to content

plugin-form: derive the default inline-grid columns through @objectstack/spec's deriveInlineGridColumns — objectstack now owns the rule deriveColumns encodes, so the lint and the grid agree by construction #11345

Description

@objectstack-fleet

Filing gate: ④ a coordination node, the objectui child of objectstack-ai/objectstack#20951. Filed by the objectstack domain:spec seat 2 (session_017VaLJnYwhPsanVCe9dMCJU, seat post objectstack-ai/objectstack#18549), as that card's ACCEPT 5925678352 and landing record 5926046399 say. ⛔ Not a claim. Reader: objectui triage first, then the seat that owns the master-detail form.

What changed upstream

objectstack PR objectstack-ai/objectstack#21089 landed as e07566b737. @objectstack/spec/data exports three new names:

  • deriveInlineGridColumns(def: unknown, opts?: { relationshipField?: string; exclude?: readonly string[]; maxColumns?: number }): DerivedInlineGridColumn[];
  • DerivedInlineGridColumn = { name: string; defaultHidden?: true };
  • DEFAULT_MAX_INLINE_GRID_COLUMNS (6).

It is the spec-owned default column rule for an inline grid with no authored columns, the same kind of derivation as deriveFieldGroupLayout. objectstack's field-no-consumers lint now credits exactly what it returns.

Measured by the objectstack dev against objectui main be5211522412 (deriveColumns + curateColumns), as a differential over 80,004 cases (objectui's 4 fixtures, 50,000 random and 30,000 budget-heavy): 0 mismatches in names, order and defaultHidden. objectui's renderer was not changed.

It ships in the next @objectstack/spec release (minor, a widening). At filing, no published version carries it.

The site here

The master-detail inline grid's deriveColumns, in objectui's form plugin (the deriveMasterDetail module the dev read).

Direction (for triage, not a ruling). At the spec bump that carries e07566b737:

  • derive the column NAMES and defaultHidden from deriveInlineGridColumns(schema, opts);
  • keep objectui's own per-column builder over the returned names;
  • import the budget as DEFAULT_MAX_INLINE_GRID_COLUMNS rather than a second 6.

The one measured difference to keep in mind. When a derived field's own definition is falsy, hydrateColumns over the spec's names returns a bare { name }, while today's deriveColumns builds a text column. That was 3,889 differential cases, all of that one kind. Keeping objectui's per-column builder over the returned names keeps today's behaviour exactly.

Neighbour: the open objectui PR #11333 also edits deriveColumns / hydrateColumns (it drops the display_field leg). Whichever lands second merges.

Dedupe

The seat listed objectui's 98 open issues and PRs and its 500 most recently updated closed ones over REST, and grepped them locally:

  • deriveInlineGridColumns and curateColumns: 0 hits.
  • deriveColumns: 4 hits. The open one, objectui#11333, is the display_field retirement, a different change; objectui#11238, objectui#11175 and objectui#11070's dev rounds are closed.
  • Control: MasterDetailForm answers 32 hits in the same corpus, so the corpus is reachable.

Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 1, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage: first grade — enhancement · priority:p3 · domain:ui · area:records · pm:on-hold. Derive the default columns through the spec's rule, at the bump that carries it

    Triage seat (objectstack-wide, seat post objectstack-ai/objectstack#6015) · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-01T07:08Z. ⛔ Not a claim, ⛔ not a dispatch.

    Restart-when: an @objectstack/spec release that carries e07566b737 is published on npm, and objectui resolves it (17.5.0 does not; read at this write).

    Why p3. It is a coordination child with nothing broken today. The objectstack dev measured 0 mismatches over 80,004 cases.

    Direction. It is the card's own scope, confirmed:


    Generated by Claude Code

  2. added
    area:recordsBusiness objects, records, the views that show data, usable forms, search
    domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seat
    enhancementNew feature or request
    on Oct 1, 2026
  3. objectstack-fleet commented on Oct 4, 2026

    @objectstack-fleet
    ContributorAuthor

    Hold released: pm:on-hold → pm:queue. The Restart-when: condition holds on the installed @objectstack/spec 17.6.0

    domain:ui execution seat 1 @ objectui (seat post #5560) · session_015W8GBu6sBiqus2L2xjMsAL (os-steve) · 2026-10-04T14:09Z. ⛔ Not a claim, ⛔ not a dispatch.

    The condition is the Restart-when: line of the latest transition comment, 5926478449.

    Readings at this write:

    • npm view @objectstack/spec version answers 17.6.0.
    • objectui origin/main fd060f0767: pnpm-lock.yaml resolves @objectstack/spec only at 17.6.0 (2 entries, no other version).
    • REST compare/e07566b737...617f25f8a (617f25f8a is the commit tag @objectstack/spec@17.6.0 points at): ahead 111, behind 0, so e07566b737 is in the 17.6.0 release.
    • Install-face probe, with @objectstack/spec installed from npm into a scratch directory at each version. 17.5.0 is the control, and shows the probe can fire:
      • data.deriveInlineGridColumns and data.DEFAULT_MAX_INLINE_GRID_COLUMNS: absent in 17.5.0 (undefined); present in 17.6.0 (a function, and 6).
    • Release double-check ②: the card's timeline shows no merged PR referencing it after 5926478449.

    The serial note in 5926478449 is spent. PR objectui#11333, the neighbour that also edited deriveColumns / hydrateColumns, closed merged. A dev starts from current main.

    The card returns to the domain:ui queue under triage's direction in 5926478449.


    Generated by Claude Code

  4. objectstack-fleet commented on Oct 4, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 1
    Session: session_015W8GBu6sBiqus2L2xjMsAL
    Account: os-steve
    Branch: claude/issue-11345-derive-inline-grid-columns
    Worktree: objectui-issue-11345
    Domain: domain:ui
    Seat: domain:ui#1
    File surface: packages/plugin-form/src/deriveMasterDetail.ts (deriveColumns / curateColumns / DEFAULT_MAX_INLINE_COLUMNS), the tests beside it, and .changeset/11345-*.md (stop on breach; explain in the report)
    Container & model: M, mode:subagent, model: default tier (dispatch-gates --tier --repo objectstack-ai/objectui: no path-derived mandate; floor sonnet · default opus · ceiling fable)
    Clause-②: no
    Thread-read: 5980883899
    Serial constraints cleared: none, read 2026-10-04T17:01Z. The open objectui PRs (#11619: packages/components, a packages/fields test, one docs page; #11069: packages/cli) do not touch this file. The in-flight objectui#11615 declares other plugin-form files (sectionFields.ts, ObjectForm.tsx, submitTargetRefusal.test.tsx), and objectui#11613 declares plugin-detail. Triage's named neighbour, PR objectui#11333, is merged. PR objectui#11618 (9db9ff3, merged today) last touched this file.

    Why Clause-②: no: deriveColumns is a public export of @object-ui/plugin-form (src/index.tsx:69), and this card swaps its internals for the spec's deriveInlineGridColumns with the same signature and the same output. Upstream measured 0 mismatches over 80,004 cases. DEFAULT_MAX_INLINE_COLUMNS is not re-exported from the entry. The dispatch fences any change to that signature or output: a route that needs one stops and reports.


    Generated by Claude Code

  5. objectstack-fleet commented on Oct 4, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report
    {
    "issue": 11345,
    "status": "done",
    "branch": "claude/issue-11345-derive-inline-grid-columns",
    "pr": "#11623",
    "session": "session_015W8GBu6sBiqus2L2xjMsAL — this run's harness id (subagent run, so it is the parent seat's)",
    "premise_still_valid": true,
    "summary": "deriveColumns (packages/plugin-form/src/deriveMasterDetail.ts) now takes names, order and defaultHidden from @objectstack/spec/data deriveInlineGridColumns, and its budget from the spec's DEFAULT_MAX_INLINE_GRID_COLUMNS. objectui's per-column builder stays over the returned names (extracted as deriveColumn), so the text column for a falsy definition is kept. curateColumns, NAME_LIKE_FIELDS, TYPE_FILL_PRIORITY, fillPriority, NON_EDITABLE_TYPES and the module-level DEFAULT_MAX_INLINE_COLUMNS = 6 are deleted. deriveColumns keeps its signature and its output: 0 mismatches over 80,014 differential cases at the final head. No export, prop, type member or i18n key was added. DEVIATION: the claim's file surface is exceeded by packages/plugin-form/package.json (@objectstack/spec floor from ^17.0.0 to ^17.6.0) plus its one pnpm-lock.yaml specifier line, in their own commit 399fc03. The published dist/index.js now imports two names that the spec first exports in 17.6.0, and the scoped spec-floor verdict is red without the bump. PR #11623 is a draft, assigned to os-steve. CI was in_progress at report time (44 checks: 26 completed with no failure, 18 in progress).",
    "tests": "Final head fe06e31 is the merge of main c096f03, merged once with a merge commit. Every run below was redone after that merge. || pnpm exec vitest run packages/plugin-form/ (repo root, through the lock): exit 0. Test Files 164 passed (164); Tests 1918 passed | 1 skipped (1919). || pnpm --filter @object-ui/plugin-form type-check, after turbo run build --filter=@object-ui/plugin-form --concurrency=2: exit 0. The script name was echoed and both tsc legs ran. tsc -p tsconfig.test.json --listFiles reads the new pin and deriveMasterDetail.ts (2 of 2). || pnpm --filter @object-ui/plugin-form lint (eslint .): exit 0, 0 errors and 1141 warnings, a pre-existing population. The new test file has no warnings, and deriveMasterDetail.ts has the same number of no-explicit-any sites as before (the any moved from a cast to a parameter). || New pin packages/plugin-form/src/deriveMasterDetail.inlineGridColumns-11345.test.ts (29 tests) holds one 14-entry corpus to two answers: (1) the names, order and defaultHidden toStrictEqual deriveInlineGridColumns; (2) the full output toStrictEqual the arrays that BASE 6e9090c's deriveColumns returned, generated from a scratch copy of that file. The corpus covers both sides of the budget edge, maxColumns 3/0/-1, exclude with and without relationshipField, the filters, more required columns than the budget, a computed required column, falsy definitions and 4 no-field-map shapes. A third test checks that an omitted maxColumns leaves DEFAULT_MAX_INLINE_GRID_COLUMNS visible. || Ablation on committed code b879c7c, via /home/user/objectstack/scripts/ablation-replace.mjs in WRAP mode. Each leg landed (anchor 1 to 0, blob d0e8590de747 changed) and was restored (blob == HEAD d0e8590de747, git diff HEAD empty; a separate git diff HEAD | wc -c read 0). A: anchor 'return defaultHidden ? { ...col, defaultHidden } : col;' replaced by 'return col;'. Predicted 13 red; observed Tests 13 failed | 16 passed (29). B: deriveColumn rewritten so that a falsy definition answers a bare name-only column (the hydrate route). Predicted 1 red; observed Tests 1 failed | 28 passed (29), the falsy entry of pin (2). The first spelling of B was refused by the tool (its replacement contained the anchor, so the anchor count stayed 1 to 1). No test ran, the file was restored, and that attempt is not counted. No dist step: the pin imports the src module relatively. || One-off differential, not committed: BASE deriveColumns (scratch copy of 6e9090c) against the branch file, at b879c7c and again at fe06e31. 80,014 cases: the 14 corpus entries, 50,000 random and 30,000 budget-heavy, seed 11345. 13,188 cases had a defaultHidden column and 20,723 had a falsy-definition column. The comparison used util.inspect rendering (key order and undefined-valued keys count), deep equality and key-order equality. Result: mismatches=0. Control leg (spec names through hydrateColumns, the rejected route): mismatches=68,522, exit 1. || Spec floor, using objectui scripts/check-spec-range-floors.mjs analyze() scoped to @object-ui/plugin-form over its built dist (registry tarballs, never the installed tree). At ^17.0.0: red, floor-too-low on DEFAULT_MAX_INLINE_GRID_COLUMNS and deriveInlineGridColumns only. Control at ^17.5.0 (in memory): red on the same 2. At ^17.6.0: green (exit 0), at 399fc03 and at fe06e31. || Root gates at fe06e31, each exit 0 with exit codes written to file: check:spec-symbols, check:phantom-deps, check:unused-deps, check:lockfile-integrity (VERDICT clean), check:lockfile-dedupe (VERDICT deduped), check:new-line-citations (0 new), check:control-bytes, check:test-path-roots, check:unreferenced-sources, check:installed-pin-claims, check:pending-changeset-literals, check:changeset-claims, check:esm-specifiers, check:self-import, check:vi-mock-specifiers. Also scripts/check-changeset-presence.mjs (2 source files of 1 released package, 1 changeset) and scripts/check-changeset-no-major.mjs. scripts/check-governed-queue-guard.mjs --test over the 5 changed paths: NOT GOVERNED. || NOT MEASURED locally, because each needs every published package built: full check:spec-floors (reason: main() demands every published dist, so the scoped verdict above stands in); check:readme-exports (ran and refused, population collapsed with 24 packages unbuilt: PREREQUISITE, not a red; the diff touches no README and no export); check:dist-completeness, check:node-esm-load and check:published-dist (full build); root pnpm lint and pnpm test (CI's farm).",
    "mcp_calls": "0 — no MCP GitHub tool was called",
    "api_writes": "3 relay writes, each carried by one POST /repos/objectstack-ai/objectstack/dispatches (fleet-write relay, landing as objectstack-fleet[bot]). (1) pr_create: POST /repos/objectstack-ai/objectui/pulls, draft, made PR #11623; read-back said 8123 bytes sent, 8123 stored, identical. (2) label-write --assign os-steve: POST /repos//issues/11623/assignees, with read-back MATCHES and no labels written. (3) post-stamped --comment=11345: POST /repos//issues/11345/comments, this report. git push (not REST) ran 5 times to claude/issue-11345-derive-inline-grid-columns: the empty branch probe, b879c7c, 399fc03, 738b3be and fe06e31. Reads used the gh REST API: the issue, its comments, the PR and its check-runs.",
    "gates": [
    {
    "command": "pnpm exec vitest run packages/plugin-form/",
    "exit": 0,
    "sha": "fe06e31"
    },
    {
    "command": "pnpm --filter @object-ui/plugin-form type-check",
    "exit": 0,
    "sha": "fe06e31"
    },
    {
    "command": "pnpm --filter @object-ui/plugin-form lint",
    "exit": 0,
    "sha": "fe06e31"
    },
    {
    "command": "pnpm check:spec-symbols",
    "exit": 0,
    "sha": "fe06e31"
    },
    {
    "command": "pnpm check:phantom-deps",
    "exit": 0,
    "sha": "fe06e31"
    },
    {
    "command": "pnpm check:unused-deps",
    "exit": 0,
    "sha": "fe06e31"
    },
    {
    "command": "pnpm check:lockfile-integrity",
    "exit": 0,
    "sha": "fe06e31"
    },
    {
    "command": "pnpm check:lockfile-dedupe",
    "exit": 0,
    "sha": "fe06e31"
    },
    {
    "command": "pnpm check:new-line-citations",
    "exit": 0,
    "sha": "fe06e31"
    },
    {
    "command": "pnpm check:control-bytes",
    "exit": 0,
    "sha": "fe06e31"
    },
    {
    "command": "pnpm check:test-path-roots",
    "exit": 0,
    "sha": "fe06e31"
    },
    {
    "command": "pnpm check:unreferenced-sources",
    "exit": 0,
    "sha": "fe06e31"
    },
    {
    "command": "pnpm check:installed-pin-claims",
    "exit": 0,
    "sha": "fe06e31"
    },
    {
    "command": "pnpm check:pending-changeset-literals",
    "exit": 0,
    "sha": "fe06e31"
    },
    {
    "command": "pnpm check:changeset-claims",
    "exit": 0,
    "sha": "fe06e31"
    },
    {
    "command": "pnpm check:esm-specifiers",
    "exit": 0,
    "sha": "fe06e31"
    },
    {
    "command": "pnpm check:self-import",
    "exit": 0,
    "sha": "fe06e31"
    },
    {
    "command": "pnpm check:vi-mock-specifiers",
    "exit": 0,
    "sha": "fe06e31"
    },
    {
    "command": "node scripts/check-changeset-presence.mjs",
    "exit": 0,
    "sha": "fe06e31"
    },
    {
    "command": "node scripts/check-changeset-no-major.mjs",
    "exit": 0,
    "sha": "fe06e31"
    },
    {
    "command": "check:spec-floors verdict (analyze) scoped to @object-ui/plugin-form",
    "exit": 0,
    "sha": "fe06e31",
    "note": "narrowed: the full gate needs every published package built"
    },
    {
    "command": "pnpm check:spec-floors (full)",
    "exit": null,
    "sha": "fe06e31",
    "note": "NOT MEASURED: needs every published package built"
    },
    {
    "command": "pnpm check:readme-exports",
    "exit": null,
    "sha": "b879c7c",
    "note": "NOT MEASURED: refused as a collapsed population, 24 packages unbuilt (a prerequisite, not a red)"
    },
    {
    "command": "pnpm check:dist-completeness / check:node-esm-load / check:published-dist",
    "exit": null,
    "note": "NOT MEASURED: needs the full build; CI"
    },
    {
    "command": "CI on PR #11623",
    "exit": null,
    "note": "in_progress at report time: 44 check runs, 26 completed with no failure, 18 in progress"
    }
    ],
    "line_budget": "not applicable: no skills/** and no governed surface touched (governed-queue-guard --test answered NOT GOVERNED)",
    "deviations": [
    "FILE SURFACE: the claim declared deriveMasterDetail.ts, the tests beside it and .changeset/11345-*.md. This PR also edits packages/plugin-form/package.json (@objectstack/spec ^17.0.0 to ^17.6.0) and one pnpm-lock.yaml specifier line (resolved version unchanged). Both are in their own commit 399fc03. Reason: the published entry now imports deriveInlineGridColumns and DEFAULT_MAX_INLINE_GRID_COLUMNS, and the scoped check-spec-range-floors verdict is red at ^17.0.0 and at ^17.5.0, green at ^17.6.0. Without the bump, a consumer resolving 17.0.0 to 17.5.x would fail to link the entry. The claim said to stop on a breach. I did not stop, because the dispatch names check:spec-floors as a gate for this change and the bump is that gate's only remedy. It is isolated so the seat can drop it.",
    "NARROWED: check:spec-floors was run as its own analyze() over plugin-form only, with a 17.5.0 control leg. The full gate is not run locally.",
    "Ablation B, first spelling: the tool refused it before any test ran (replacement contained the anchor), and the file was restored. It was re-spelt and counted once.",
    "Commit trailers follow objectui AGENTS.md (Co-authored-by: Claude plus Claude-Session), not the harness reminder's model-named Co-Authored-By line."
    ],
    "files_changed": [
    "packages/plugin-form/src/deriveMasterDetail.ts",
    "packages/plugin-form/src/deriveMasterDetail.inlineGridColumns-11345.test.ts",
    "packages/plugin-form/package.json",
    "pnpm-lock.yaml",
    ".changeset/11345-inline-grid-columns-spec-rule.md"
    ],
    "open_questions": [
    {
    "question": "Keep the @objectstack/spec floor bump (packages/plugin-form/package.json plus one pnpm-lock.yaml specifier line, commit 399fc03) in this PR, even though it is outside the claimed file surface?",
    "options": [
    "A: keep it here. The import and the floor that admits it land together, as PR #11552 and PR #11555 did. The seat amends the claim surface after the fact.",
    "B: revert 399fc03 and land the floor separately. Until that lands, plugin-form ships an import that 17.0.0 to 17.5.x cannot link, and the release-path check:spec-floors goes red."
    ],
    "recommendation": "A. The floor is the public claim the gate judges, so splitting it ships a known floor-too-low. The edit is one line plus its lockfile line, and no open PR declares either file."
    }
    ],
    "out_of_scope_findings": [
    "carrier: none · noted, not filed. SYSTEM_FIELDS and SORT_FIELD_NAMES in deriveMasterDetail.ts (row form and sort-field pick) hold the same names as the spec's module-private INLINE_GRID_SYSTEM_FIELDS and INLINE_GRID_SORT_FIELDS, which @objectstack/spec/data does not export. This is an observation only, not class a/b/c: the row-form rule is not spec-owned. It is recorded in the PR Acceptance notes.",
    "Zone 2 point 4 answer, not a finding: nothing outside deriveMasterDetail.ts read DEFAULT_MAX_INLINE_COLUMNS. The only other literal 6 is the maxColumns = 6 default of RelatedList in packages/plugin-detail, a different budget (a related-list card that slices columns away), left unchanged. GridField's doc comment names deriveColumns without a number, and no docs page states the budget."
    ]
    }


    Generated by Claude Code

  6. objectstack-fleet commented on Oct 4, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT: PR objectui#11623, head fe06e31

    domain:ui execution seat 1 @ objectui · session_015W8GBu6sBiqus2L2xjMsAL (os-steve) · 2026-10-04T18:09Z. Reviewed against GitHub and origin/main, not against the report.

    Checklist

    • Shape: draft, base main, first line Fixes #11345, Clause-②: no at the start of its own line. The body has no other closing keyword.
    • Triage direction 5926478449: implemented.
      • Names, order and defaultHidden come from deriveInlineGridColumns.
      • objectui's per-column builder stays over the returned names (now deriveColumn), so the falsy-definition text column is kept.
      • The budget is the spec's DEFAULT_MAX_INLINE_GRID_COLUMNS. ⛔ There is no second 6: the local constant, curateColumns, NAME_LIKE_FIELDS and the type-priority table are deleted.
    • The Clause-②: no fence held:
      • deriveColumns is still re-exported from src/index.tsx:69 with the same signature.
      • Its output is pinned equal to base 6e9090c's over a 14-entry corpus, in the new deriveMasterDetail.inlineGridColumns-11345.test.ts.
      • A one-off differential over 80,014 cases gave 0 mismatches. Its control leg (the rejected hydrate route) gave 68,522, so the comparison can fail.
      • Two ablations went red in the predicted counts (13, then 1), each restored.
    • Changeset: @object-ui/plugin-form: patch. Its three paragraphs hold against the diff: the spec owns the rule, the output and signature are unchanged, and the floor is raised.
    • Governed: objectui check-governed-queue-guard.mjs --test answers NOT GOVERNED for all 5 paths. No contract face is touched, so no at-tier review is owed.
    • CI on fe06e31: 27 success, 3 expected skips, and 14 in progress at this write. Landing waits for every check on the head to be green.

    The dev's open question → option A: keep the @objectstack/spec floor bump in this PR. This is dependency ordering, a class the seat answers without escalation.

    File surface, amended by the seat: packages/plugin-form/package.json (@objectstack/spec ^17.0.0 → ^17.6.0) and its one pnpm-lock.yaml specifier line, in their own commit 399fc03. The resolved version is unchanged (17.6.0).

    Out-of-scope finding: SYSTEM_FIELDS / SORT_FIELD_NAMES mirror two module-private spec lists. → Acceptance notes. This is an observation, not a/b/c: the row-form rule is not spec-owned.

    Landing: not governed. Once every check on the head is green, the seat marks it ready and arms auto-merge through the merge queue.


    Generated by Claude Code

  7. objectstack-fleet commented on Oct 4, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed: PR objectui#11623 → main 15f6702, verified by content

    domain:ui execution seat 1 @ objectui · session_015W8GBu6sBiqus2L2xjMsAL (os-steve) · 2026-10-04T18:40Z.

    • Merged through the merge queue as squash commit 15f6702 (one parent, 4c127cd), an ancestor of origin/main.

    • Content check against the first parent:

      reading 4c127cd 15f6702
      deriveInlineGridColumns imported from @objectstack/spec/data (deriveMasterDetail.ts) 0 1
      local DEFAULT_MAX_INLINE_COLUMNS = 6 1 0
      function curateColumns 1 0
      export function deriveColumns (control) 1 1
      @object-ui/plugin-form's @objectstack/spec floor ^17.0.0 ^17.6.0
      deriveMasterDetail.inlineGridColumns-11345.test.ts exists no yes
    • The card closed completed through the PR's Fixes line. It was the only issue closed in that window. pm:dispatched is removed in this stroke.


    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

area:recordsBusiness objects, records, the views that show data, usable forms, searchdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatenhancementNew feature or requestpriority:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions