Skip to content

platform-objects: System Overview's six metric tiles declare layout.h: 2 and draw a half-empty box; set them to h: 1 (ruling B on objectui#12704) #24126

Closed

Description

@objectstack-fleet

Filed by the director seat (summon #43 continuation 3, session_01QJC7i981TSs9L1CGJK59Ax) on the maintainer's ruling B on objectstack-ai/objectui#12704 (batch #358 item 4, 「12704 同意」; the ruling record is that card's Ruled: line). ⛔ Not a claim. Filing gate ①: a measured defect in shipped metadata with a named site.

What is measured (objectstack origin/main be076dad28a0, objectui d0a00d795020)

packages/platform-objects/src/apps/dashboards/system_overview.dashboard.ts declares 6 type: 'metric' widgets, every one layout.h: 2. The console's positioned dashboard grid gives each row a floor of 5rem and spans a widget over the rows its h names (packages/plugin-dashboard/src/DashboardRenderer.tsx, gridAutoRows: 'minmax(5rem, auto)'), and MetricCard fills its box (h-full), so at 1024 px each tile is about 135 px tall with the title and the number in the top 60 px and an empty lower half (objectui#12704's screenshots). The ruling: the platform draws what the metadata declares — ADR-0078 forbids an h that is read and not honoured — so the authored size is corrected, not the renderer.

Scope

  1. The 6 metric tiles go h: 2 → h: 1; the chart widgets (h: 4) and every x, y, w stay.
  2. No other dashboard, no packages/spec change, no renderer change.

Done when

  • The 6 tiles declare h: 1; the existing platform-objects tests are green.
  • Clause-②: no; a patch changeset for @objectstack/platform-objects (shipped metadata changes).
  • After objectui's regression pin (objectui#12704, re-scoped by the ruling) lands: System Overview at 1024 and 1280 px shows each metric tile at content height (88–96 px for a bare number).

Related: objectstack-ai/objectui#12704 (the ruling and the objectui pin), the hotcrm sibling card filed in the same act (HotCRM's metric tiles), objectui#12623 (the title on its own line, the precedent).

Activity

  1. objectstack-fleet commented on Oct 17, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 2 · 2026-10-17T18:13Z · on the maintainer's ruling B on objectstack-ai/objectui#12704 (the card's Ruled: record)
    Session: session_01JtSQQ3EWsbNPzyYMug1tXy (mode:subagent: the dev runs inside this session; its identity is this branch)
    Account: os-project-manager (the seat's linked user as GET /user answers it; always the card's assignee)
    Branch: claude/issue-24126-system-overview-metric-height
    Worktree: objectstack-issue-24126
    Domain: domain:engine
    Seat: domain:engine#1 (seat post #6367)
    File surface: packages/platform-objects/src/apps/dashboards/system_overview.dashboard.ts, the six type: 'metric' widgets' layout.h only (2 → 1). Plus a pin beside the existing platform-objects dashboard tests if none holds the tile heights, and one changeset .changeset/24126-*.md (patch for @objectstack/platform-objects). ⛔ Every x, y, w and the chart widgets stay, as the card's scope says. No other dashboard, no packages/spec, no renderer. Stop on any other breach and explain it in the report.
    Container & model: S mechanical, mode:subagent, model: TIER_FLOOR (this run's dispatch-gates.mjs --tier: "no path-derived mandate"; a mechanical six-value edit whose correctness the existing gates decide)
    Clause-②: no
    Responsibility: packages/platform-objects' System Overview declares layout.h: 2 on six metric tiles that render at content height | none: the ruling corrects the authored size, not the renderer | every admin opening Setup's System Overview today (objectui#12704's screenshots at 1024 px)
    Thread-read: none
    Serial constraints cleared: no open PR and no pm:dispatched claim touches system_overview.dashboard.ts (read at this claim). #24016, claimed beside this card, works identity/sys-organization.object.ts in the same package. Separate changesets; whichever lands later merges main.


    Generated by Claude Code

  2. objectstack-fleet commented on Oct 17, 2026

    @objectstack-fleet
    ContributorAuthor

    Dispatch · domain:engine seat 1 · session_01JtSQQ3EWsbNPzyYMug1tXy · 2026-10-17T18:17Z: mode:subagent at the floor tier, on branch claude/issue-24126-system-overview-metric-height, claim 6238376907. It is a mechanical edit of six values.

    • Ruling carried: ruling B on Dashboard metric tiles size to their content: a single-number tile is not 135 px tall with an empty lower half objectui#12704 and the card's scope, verbatim. The six metric tiles go h: 2 → h: 1, and every x, y, w and the charts stay.
    • Measured, not acted on: with every y kept, rows 1 and 3 hold no widget. The dev reads objectui's positioned grid to see whether those rows render as empty 5rem bands. The ruling is implemented literally either way. If bands follow, the report says so with the evidence, and the seat takes it from there.
    • Delivery: a draft PR with Fixes #24126, then an os-dev-report comment here.

    Generated by Claude Code

  3. objectstack-fleet commented on Oct 17, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 24126,
      "status": "done",
      "branch": "claude/issue-24126-system-overview-metric-height",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/24209",
      "session": "session_01JtSQQ3EWsbNPzyYMug1tXy",
      "premise_still_valid": true,
      "summary": "The six `type: 'metric'` tiles in `system_overview.dashboard.ts` now declare `layout.h: 1` (6 lines, +6/-6; every x, y, w and the h: 4 chart and table widgets untouched), with a new pin test beside the tile-semantics test and a `patch` changeset for `@objectstack/platform-objects`. H1 (empty 5rem bands at rows 1 and 3) is FALSIFIED: the console's DashboardRenderer places widgets by `gridColumn: span w` and `gridRow: span h` only and never reads `layout.y` (read at objectui 97538115b and at the shipped pin 5e15928b4, placement lines identical), so with h: 1 the tiles auto-flow into two content-height rows and no band appears; no y was moved. H2: no existing platform-objects test pinned these layouts, nothing flipped, and the only other `h: 2` copy is an inline fixture in objectql's test that never imports the shipped board. The rendered tile height (card: 88 to 96 px) is NOT MEASURED in a browser, because it needs the console at the pin plus objectui's regression pin, which the card places after this change.",
      "tests": "pnpm --filter @objectstack/platform-objects exec vitest run --maxWorkers=2 at b66de4d25 (lock slot dev-24126): Test Files 74 passed (74), Tests 1139 passed (1139), lock VERDICT command-exit 0. An earlier run under my scoped install showed 2 failed files (managed-api-method-affordance-sweep, platform-admin-affordance-standing: Cannot find package '@objectstack/spec/data' from packages/plugins/plugin-approvals); they walk every packages/ object file, so I ran a full pnpm install --frozen-lockfile and re-ran both: 2 files, 9 tests passed. `pnpm --filter @objectstack/platform-objects typecheck`: VERDICT command-exit 0; check:test-typecheck OK with the ledger held at 1 file / 3 errors, all in feature-gate-guard.test.ts, test-typecheck-debt.json byte-identical to origin/main; `tsc -p tsconfig.test.json --listFiles` names system-overview-tile-layout.test.ts (the plain tsconfig.json excludes tests). Reverse verification, one leg, run on the committed change: scripts/ablation-replace.mjs mutated all six `h: 1 },` to `h: 2 },` (anchor 6 to 0, blob 53aa021f4618 to 3444605e8a6b, on disk) and ran the new test file: 1 failed, 2 passed; the failure lists widget_total_users, widget_organizations, widget_active_sessions, widget_packages_installed, widget_login_events, widget_config_changes each at layout.h=2, and both controls stayed green. Direction: red, as expected. The test imports the dashboard by relative source path, so no rebuild stands between mutation and run. Restore proven: blob equals the HEAD blob and `git diff HEAD` is empty; afterwards git status is clean.",
      "gates": "LOCAL: node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack with NO paths at b66de4d25 (change set 3 paths vs merge base f792290df) derived 63 families; each run in the worktree with its exit code recorded straight after the redirect, before any pipe. Results: check-adr-0087-registration.mjs --base origin/main=0; check-adr-0087-registration.mjs --self-test=0; check-changeset-no-major.mjs --base origin/main=0; check-changeset-no-major.mjs --self-test=0; check-ci-filter-parity.mjs=0; check-closing-keyword-parity.mjs=0; check-closing-keyword-parity.mjs --self-test=0; check-comment-mask-adoption.mjs=0; check-comment-mask-adoption.mjs --self-test=0; check-comment-mask-corpus.mjs=0; check-dts-emitted.mjs --self-test=0; check-empty-changeset.mjs --base origin/main=0; check-empty-changeset.mjs --self-test=0; check-issue-citations.mjs=0; check-keyed-text-bounds.mjs=0; check-keyed-text-bounds.mjs --self-test=0; check-platform-object-tenancy-census.mjs=0; check-platform-object-tenancy-census.mjs --self-test=0; check-plugin-teardown-shape.mjs=0; check-plugin-teardown-shape.mjs --self-test=3; check-registry-log-declared.mjs=0; check-registry-log-declared.mjs --self-test=0; check-rest-log-spy-declared.mjs=0; check-rest-log-spy-declared.mjs --self-test=0; check-system-context-census.mjs=0; check-system-context-census.mjs --self-test=0; check-undeclared-dep-imports.mjs=0; check-undeclared-dep-imports.mjs --self-test=0; docs-audit/check-affected-docs.mjs=0; docs-audit/check-drift-comment.mjs=0; pm/release-rehearsal-clone.mjs --self-test=0; release-pending-publish.mjs --self-test=0; --filter @objectstack/spec run check:duration-unit-keys=0; check:changeset-gate-self-tests=0; check:cross-package-test-inputs=0; check:doc-authoring=0; check:driver-memory-census=0; check:dts-closure=0; check:dual-build-cjs-loads=0; check:engine-double-contract=0; check:gitlink-declared=0; check:i18n=0; check:i18n-stale-fill=0; check:issue-citations=0; check:lean-entry-closure=0; check:logger-receiver-detach=0; check:nul-bytes=0; check:objectql-double-limit=0; check:objectui-changeset=0; check:org-identifier=0; check:page-declaration-shape=0; check:pm-changeset-deadline-census=0; check:published-files=0; check:query-options-erasure=0; check:refd-timer-probe=0; check:slot-lookup=0; check:sourcemap-no-sources-content=0; check:test-source-alias=0; check:tier-file-adoption=0; check:type-check-coverage=0; check:type-check-debt=0; check:watch-hint-literal=0; check:where-matcher=0. The first run of check:dual-build-cjs-loads, check:i18n and check:lean-entry-closure exited 3 (PREREQUISITE NOT MET: missing dist/); after the turbo prerequisite build (cache hits, dist verified to carry the six h: 1 and three h: 4 layouts) the re-runs exited 0 and replace those entries above (check:i18n: all bundles in sync, no undeclared authoring keys). NOT MEASURED: check-plugin-teardown-shape.mjs --self-test exits 3 because its pinned positive control (commit 621a487607) is unreachable in this shallow clone; I did not deepen because that mutates the .git shared by every agent here, and the gate reads no file this PR touches. RECONCILIATION: dispatch-gates.mjs --ran with the final list: 63 derived, 62 run, 1 NOT-MEASURED, 0 UNRUN, exit 0. CI (single read of check-runs on b66de4d25 at about 18:53Z, no polling): in_progress: Check Changeset, Check Documentation Links, Check PR Size, Flag docs affected by code changes, Governed Surface Queue Guard, Lint CI release and engine gates, Lint ESLint, Lint PM dispatch-gates, Lint docs and code guards, Lint repo and tooling gates, Lint scoped query-options erasure, Lint scoped slot lookup and corpus, Lint scoped tooling self-tests, No other open PR may claim the same single-writer path, Part-of PR must not also close its card, The card this PR closes must claim this branch, Type Check consumer gates, Type Check debt ledger, Type Check source gates, Type Check workspace, filter. completed success: No other open PR may claim the same issue. completed skipped: Packed-tarball smoke (opt-in). Test Core and Build Core had no check-run yet at that read. NOT run locally by design (CI-owned): pnpm lint, test:repo, the full-farm check:* roster.",
      "line_budget": "none set; diff +92/-6 across 3 files: system_overview.dashboard.ts +6/-6, system-overview-tile-layout.test.ts +72/-0, .changeset/24126-system-overview-metric-height.md +14/-0",
      "deviations": [
        "Install scope: my first install was scoped to the platform-objects closure; two cross-package tests then failed for a missing sibling dependency (environment, not the diff). Fixed by a full `pnpm install --frozen-lockfile`; no repo file changed.",
        "Builds beyond the platform-objects closure: ran `turbo run build --concurrency=2` with the 11 filters check:i18n names, under the lock (VERDICT command-exit 0, all 61 tasks cache hits), only to satisfy the PREREQUISITE of check:i18n, check:lean-entry-closure and check:dual-build-cjs-loads that dispatch-gates derived.",
        "NOT MEASURED: check-plugin-teardown-shape.mjs --self-test (exit 3, shallow clone); everything else derived was run.",
        "Commit trailers are the model-free pair (Claude-Session and Co-authored-by Claude, per AGENTS.md and the pre-push hook), and the PR footer is the session-URL form from AGENTS.md, instead of the harness attribution reminder's model-named Co-Authored-By and its tail line; os-dev and AGENTS.md outrank that reminder.",
        "Read-only objectui clone at depth 1 in my scratchpad (97538115b) plus one raw file read at the repo's pin 5e15928b4 via the contents API; nothing in objectui was written.",
        "The 'rendered 88 to 96 px' Done-when bullet is not claimed: not measured in a browser (see summary)."
      ],
      "files_changed": [
        "packages/platform-objects/src/apps/dashboards/system_overview.dashboard.ts (+6/-6)",
        "packages/platform-objects/src/apps/dashboards/system-overview-tile-layout.test.ts (+72/-0, new)",
        ".changeset/24126-system-overview-metric-height.md (+14/-0, new)"
      ],
      "mcp_calls": "0 (no MCP GitHub tool called)",
      "api_writes": "2 relay strokes through scripts/pm/fleet-write/dispatch.mjs, each one POST /repos/objectstack-ai/objectstack/dispatches that the relay workflow executes as objectstack-fleet[bot]: (1) op pr_create: POST /repos/objectstack-ai/objectstack/pulls (draft forced) then POST /repos/objectstack-ai/objectstack/issues/24209/assignees (os-project-manager); relay read-back: 5893 bytes sent, 5893 stored, identical; (2) op comment: POST /repos/objectstack-ai/objectstack/issues/24126/comments (this report). Plus 2 git pushes (the empty branch, then b66de4d25), which are not REST. No label write (none named for this card; the diff publishes, so no skip-changeset). Reads only otherwise (GET issue, comments, pull, check-runs, contents).",
      "open_questions": [],
      "out_of_scope_findings": [
        "carrier: none (承接者:无) · noted, not filed · `layout.y` is not a placement input on the console's view path: DashboardRenderer places by span only (read at objectui 97538115b and pin 5e15928b4), and only DashboardGridLayout, which the console does not mount (its dashboard-grid node key is retired), reads x and y as positions; the spec still declares layout.y required (`y: z.number()` in dashboard.zod.ts) and the liveness ledger row for `layout` is live on 'column-count inference and effective grid span'. Read-only inference, no wrong answer reproduced, so it stays in the PR's Acceptance notes."
      ]
    }
  4. objectstack-fleet commented on Oct 17, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT → PR #24209 comment 6239042597 · domain:engine seat 1 · session_01JtSQQ3EWsbNPzyYMug1tXy · 2026-10-17T18:58Z. The seat's review of record is at TIER_DEFAULT: none of the four contract faces is touched. The six tiles now declare h: 1. The dev's empty-band hypothesis is falsified: the console's renderer places by span only and never reads y. The PR flips to ready with auto-merge once every check on b66de4d254 is green.


    Generated by Claude Code

  5. objectstack-fleet commented on Oct 17, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed · domain:engine seat 1 · session_01JtSQQ3EWsbNPzyYMug1tXy · 2026-10-17T19:59Z

    Probe Reading
    Queue PR #24209 entered the merge queue at 2026-10-17T19:29Z after ACCEPT 6239042597. No contract review was owed: the PR touches no packages/spec/src/** and no governed rule text. It left the queue merged at 2026-10-17T19:57Z. After the merge, git ls-remote lists no gh-readonly-queue/main/pr-24209-* branch.
    origin/main a19b2a7a5 is on origin/main (git merge-base --is-ancestor: exit 0). It carries PR #24209's same 3 files, +92 / −6.
    Cards closed Since the enqueue, two lane cards closed: #24126 (this PR's Fixes) and #24097 (PR #24208). No other issue closed in the window. None is a card this PR names.

    Status: #24126 is closed completed, and its pm:dispatched is removed in this stroke. The dev was a local worktree agent, so there is no cloud session to archive. System Overview's six metric tiles now declare layout.h: 1. objectui's DashboardRenderer places tiles by span only, so the tiles render one row tall.

    Follow-up: layout.x / layout.y are declared but never read by the renderer. That is with the domain:spec seat (pointer 6239050604).


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

area:reportsBusiness reporting — dashboards, reports, the numbers a manager readsdomain:enginepriority:p2Medium: important, M3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions