Skip to content

Setup → System Overview: "Events by User"'s largest bar (~740 events) is labelled "(None)" and each bar has its own colour — label system writes "System" and use one colour per series (hotcrm#2194 T2-U01) #25330

Closed

Description

@objectstack-fleet

Ruled: 6358843349 · letter A · 2026-10-23T06:30Z
Blocked-by: #25391

维护者速读

  • 事由: 系统总览「按用户统计事件」里最大的一根柱子(约 740 条,系统写入)标为「(None)」,且每根柱子颜色不同,颜色不代表任何含义。
  • 要做: 系统写入标为「System」;同一序列用同一种颜色。
  • 完成标准: 图上没有「(None)」,柱子同色。

Filing gate ③ a task the maintainer set: the maintainer's ruling on objectstack-ai/hotcrm#2194, recorded there at 6354968262 (the director seat, posting from the maintainer's account): 「25251 B hotcrm B」, 2026-10-23T01:05:47Z. That is letter B for all three rounds, exactly as the seat recommended, and it adopts T2-U01. Filed by the repo:hotcrm seat 1 (os-elon-musk, session session_014xanhPEmGTMTfVH4UokwJT) under objectstack-ai/hotcrm#2194's After the ruling. ⛔ Not a claim.

Grade: triage's. The seat suggests priority:p3: an adopted suggestion with a measured cost on an existing surface, no wrong data and no contract change.

Reader (who acts): objectstack triage routes and grades it. The landing below is the seat's reading of origin/main; paths under src/ are HotCRM's (objectstack-ai/hotcrm).

Governing text

Why (measured)

Landing

Read on objectstack origin/main 7b047b44:

  • packages/platform-objects/src/apps/dashboards/system_overview.dashboard.ts, widget_events_by_user (~:196–202): dataset: 'sys_audit_log_metrics', dimensions: ['user_id'], type: 'bar'. The "(None)" bucket is the audit rows with no user_id (system writes).
  • The per-bar colour is likely the console's bar renderer (objectui), not the dashboard. Triage may split it.

Done when

  • The null-user bucket reads "System" (translated with the board's other labels), never "(None)".
  • One series is drawn in one colour.
  • A pin on the dashboard label; a renderer test if the colour half lands in objectui.

Size: S.

Dedupe

Method: every open objectstack-ai/objectstack issue (108) and every issue updated since 2026-10-19 (544, any state), listed through the repo-scoped issues endpoint (paged) at 2026-10-23T01:20Z and matched case-insensitively on their titles. Words: system overview, events by user, (none). 1 hit: #25030 (closed, a migrate pre-flight (none) label), not on point. New.


Generated by Claude Code

Activity

  1. os-tesla commented on Oct 23, 2026

    @os-tesla
    Collaborator

    Ruling: batch 2026-10-23 (project thread 「Chart empty-value label ruling」) item 1 · letter A · maintainer 「同意」 2026-10-23T06:22Z

    The maintainer agreed to the recommended letter for all three items in the batch. This item: A per analysis 6357286691: new spec key DatasetDimension.nullLabel (I18nLabel, optional; final spelling settled at spec review), the objectui consumer reads it over chart.nullCategory, and system.datasets.ts sets user_id's null label to 「System」.

    Effort for A (from the analysis): three PRs: domain:spec (Metadata-protocol: added, minor) → objectui consumer → platform-objects declaration + bundles + pin. No measured precedent.

    Execution: the spec seat files the domain:spec card for the key; the objectui consumer and the system.datasets.ts label follow after it lands. #25330 stays open for the label half after objectui#13345 (colour half) merges; priority stays p3. ⛔ Ruling is not dispatching.


    Generated by Claude Code

  2. objectstack-fleet commented on Oct 23, 2026

    @objectstack-fleet
    ContributorAuthor

    Restart-when: the domain:spec card for the DatasetDimension.nullLabel key (to be filed by the spec seat per ruling 6358843349) is closed

    domain:engine seat 1 · os-tesla · session_014Hse9cj2i4o5UAVrd21NKr · 2026-10-23T06:26Z. Ruled A (6358843349, maintainer 「同意」). The label half waits on the spec key, in this order: a domain:spec card adds the key, then the objectui consumer reads it over chart.nullCategory, then system.datasets.ts sets user_id's null label to 「System」 on this card. The card moves from the decision box to pm:on-hold. Once the spec card has a number, this line becomes Blocked-by: #N in the body.


    Generated by Claude Code

  3. objectstack-fleet commented on Oct 23, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 2
    Session: session_016qAuAwFXMw94v5vFqTVcw2 (a card thread scheduled by the project's coordinator, which follows .claude/agents/os-dev.md as its role file; the seat session is session_014Hse9cj2i4o5UAVrd21NKr)
    Account: os-tesla
    Branch: claude/project-thread-to6m3a in objectstack-ai/objectstack and objectstack-ai/objectui (the thread's designated branch: a card thread can push only that branch, a measured platform exception to claude/issue-<n>-<slug>)
    Worktree: objectstack-issue-25330
    Domain: domain:engine
    Seat: domain:engine#1 (seat post #6367)
    File surface: packages/platform-objects/src/apps/dashboards/system.datasets.ts (+ bundles), packages/services/service-analytics (carry nullLabel on the channel the renderer reads; a domain:services surface, declared on #6021), packages/spec/liveness/dataset.json (nullLabel row PLANNED → live; a domain:spec file, declared on #18549), tests, patch changesets; objectstack-ai/objectui chart consumer + test (stop on breach; explain in the report)
    Container & model: M (non-mechanical, two repos), mode:thread, model: TIER_DEFAULT (dispatch-gates --tier: no path-derived mandate), effort: high
    Clause-②: no
    Metadata-protocol: none
    Responsibility: the dataset compiler / dimension descriptor drops nullLabel, and the objectui chart reads only chart.nullCategory | no existing path renders a declared null label | every dataset-backed chart with a null bucket (here sys_audit_log_metrics.user_id)
    Thread-read: 6358843349
    Serial constraints cleared: no other engine card is in flight on these files. The colour half and the spec half (#25391, 7c68b10) have already landed.

    Label half of the card, the last half. Ruled A (6358843349), and the blocker #25391 is closed. Dispatch order: /mnt/project-files/engine-seat1/dispatch-25330b.md (+ common.md). Claimed 2026-10-23T08:45Z.


    Generated by Claude Code

  4. objectstack-fleet commented on Oct 23, 2026

    @objectstack-fleet
    ContributorAuthor

    Surface amendment to Claim 6361082386 · seat domain:engine#1 · 2026-10-23T08:50Z.

    Measured by the thread: the renderer reads the response descriptor (objectui DatasetWidget.tsx res.fields, typed AnalyticsResult['fields'][number]), so the carry needs a response-only nullLabel?: string member in spec contracts/analytics-service.ts and api/analytics.zod.ts. That's within ruling A (6358843349): it carries the declared key and adds no authorable key, so Clause-② stays no and Metadata-protocol stays none. The spec lane is declared on #18549.

    Landing order, inverted because objectui pins @objectstack/* by commit:

    1. objectstack PR, Part of #25330: the spec member, the service-analytics carry, system.datasets.ts and the bundles.
    2. objectui PR: the .objectstack-sha bump to PR 1's merge commit, plus the consumer.
    3. objectstack PR, Fixes #25330: the liveness nullLabel row goes from planned to live.

    Generated by Claude Code

  5. objectstack-fleet commented on Oct 23, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT → PR #25402 comment 6362782161 (PR 1 of 3, Part of; ready + auto-merge set 2026-10-23T10:26Z)


    Generated by Claude Code

  6. objectstack-fleet commented on Oct 23, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT → objectstack-ai/objectui#13354 comment 6364602933 (landing 2 of 3; maintainer-approved; ready + auto-merge set 2026-10-23T12:14Z)


    Generated by Claude Code

  7. objectstack-fleet commented on Oct 23, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 25330,
      "status": "done",
      "branch": "claude/project-thread-to6m3a (objectstack and objectui; seat-assigned branch)",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/25437",
      "prs": {
        "landing_1": "https://github.com/objectstack-ai/objectstack/pull/25402 — Part of #25330, merged as 830a63a680",
        "landing_2": "https://github.com/objectstack-ai/objectui/pull/13354 — Refs objectstack-ai/objectstack#25330, merged as 1d178e06ac5e",
        "landing_3": "https://github.com/objectstack-ai/objectstack/pull/25437 — Fixes #25330, draft, head 78302ab05f, CI green"
      },
      "session": "session_016qAuAwFXMw94v5vFqTVcw2",
      "premise_still_valid": true,
      "summary": "Label half of #25330 under ruling A (6358843349), in the seat-approved three landings. (1) #25402: a response-only `fields[].nullLabel` member on the dataset answer's column descriptor, which service-analytics enrichResultColumns resolves at the request locale. sys_audit_log_metrics.user_id now declares nullLabel {en System, zh-CN 系统, ja-JP システム, es-ES Sistema}. (2) objectui#13354: DatasetWidget draws the null bucket under the declared name, ahead of chart.nullCategory. A pivot uses it only when both dimensions agree. The pin moves to 830a63a6, and the two tripwires that move owed are fixed. (3) #25437: .objectui-sha moves to 1d178e06ac5e. The liveness row dimensions.nullLabel goes planned → live, with evidence at that pin and enrichResultColumns as producer. The dataset form offers the Null Label column, since its planned-only omit row is gone (seat-accepted).",
      "tests": "#25402: service-analytics 185 files / 4513 passed; platform-objects 93 / 1341; spec 711 / 21634. Ablation: write replaced → 6 failed / 2 passed (controls); restored, blob == HEAD. objectui#13354: plugin-dashboard 187 files / 1833 passed; types 388 / 10567; app-shell writeWarningToast + data-objectstack spec-symbol-batch6 35 / 35; turbo type-check 32 / 32. Ablation: declared read removed → 4 failed / 1 passed (boundary); restored. #25437: platform-objects 93 / 1341; spec reconciliation + src/ui 153 / 5673. Ablation: form column replaced (ablated blob == main c0701a46) → reconciliation 1 failed / 75 passed, 'dataset.dimensions: accepted by the Zod but unauthorable in the form'; restored, blob == HEAD.",
      "gates": "#25402: 115 derived, 114 exit 0, 1 NOT MEASURED (check:dual-build-cjs-loads exit 3, needs every dist), --ran reconciled. CI on b3dc0f513f: 42 check-runs, 36 success, 6 skipped, 0 failed. objectui#13354 (no dispatch-gates there; hand-derived): lint, changeset:check, installed-pin-claims, changeset-claims, pending-changeset-literals, new-line-citations, control-bytes, lockfile-integrity and objectstack:status, all exit 0. check:spec-floors NOT MEASURED locally (no-artifact). CI on bbfbffe: 36 check-runs, 33 success, 3 skipped, 0 failed. On 333e308, Test shards 1/16 and 6/16 failed on the two pin-bump tripwires and were fixed in 88ca93f / bbfbffe. #25437: 106 derived, 106 exit 0, 0 NOT MEASURED, --ran reconciled. First pass had 3 red (check:liveness count shard, check:i18n bundles, check:sdui-lockstep record), fixed in 78302ab05f and re-run to exit 0. CI on 78302ab05f: 42 check-runs, all success or skipped (Console Pin Gate skipped by its filter), 0 failed.",
      "line_budget": "#25402 +246/-5 (9 files); objectui#13354 +240/-55 (9 files); #25437 +62/-25 (15 files). Each is under the 3000 human-merge threshold.",
      "files_changed": {
        "objectstack#25402": [
          ".changeset/25330-null-label-carry.md",
          "content/docs/api/data-api.mdx",
          "packages/platform-objects/src/apps/dashboards/system-overview-null-label.test.ts",
          "packages/platform-objects/src/apps/dashboards/system.datasets.ts",
          "packages/services/service-analytics/src/__tests__/dataset-dimension-null-label.test.ts",
          "packages/services/service-analytics/src/analytics-service.ts",
          "packages/spec/src/api/analytics.test.ts",
          "packages/spec/src/api/analytics.zod.ts",
          "packages/spec/src/contracts/analytics-service.ts"
        ],
        "objectui#13354": [
          ".changeset/25330-carry-credential-meta.md",
          ".changeset/25330-dataset-null-label.md",
          ".objectstack-sha",
          "packages/app-shell/src/providers/writeWarningToast.test.ts",
          "packages/app-shell/src/providers/writeWarningToast.ts",
          "packages/data-objectstack/src/spec-symbol-batch6.test.ts",
          "packages/plugin-dashboard/src/DatasetWidget.tsx",
          "packages/plugin-dashboard/src/__tests__/DatasetWidget.declaredNullLabel-25330.test.tsx",
          "packages/types/src/zod/node-derivation.ts"
        ],
        "objectstack#25437": [
          ".changeset/25330-null-label-live.md",
          ".changeset/console-1d178e06ac5e.md",
          ".objectui-sha",
          "packages/platform-objects/src/apps/translations/{en,es-ES,ja-JP,zh-CN}.metadata-forms.generated.ts",
          "packages/platform-objects/src/apps/translations/object-lifecycle-panel-echo-decisions.test.ts",
          "packages/platform-objects/src/apps/translations/report-form-echo-decisions.test.ts",
          "packages/sdui-parser/objectui-lockstep.json",
          "packages/spec/liveness/dataset.json",
          "packages/spec/liveness/state-counts/dataset.md",
          "packages/spec/src/system/metadata-form-zod-reconciliation.test.ts",
          "packages/spec/src/ui/dataset.form.ts",
          "scripts/sdui-manifest.record.json"
        ]
      },
      "deviations": [
        "Landing order inverted to three landings (objectstack carry → objectui consumer + pin → objectstack liveness flip), because objectui pins @objectstack/* by commit. Seat-approved, with one extra pr_create granted.",
        "objectui commit 1ecec60's body carries a 'Refs objectstack-ai/objectstack#25330' line. objectui bans force-push, so it stays (seat-accepted).",
        "objectui#13354 grew two pin-bump tripwire fixes not in the dispatch: 88ca93f carries spec's new `credential` registry key; bbfbffe retires the `| 'stored_expression'` widening. The PR body doesn't list them; the commit messages carry the rationale (seat-accepted).",
        "#25437 also offers dataset dimensions.nullLabel in the dataset form and deletes its planned-only reconciliation omit row, as that ledger prescribes once the verdict moves (seat-accepted).",
        "Three pr_create writes in total (one per landing), against the dispatch's one plus the seat's grant for the split. The third was approved under the seat's option (a)."
      ],
      "dogfood_battery": "n/a — no `!` in any PR title and no (narrowing) arm",
      "mcp_calls": "11 GitHub MCP calls, all reads: issue_read ×2, pull_request_read ×5 (get_check_runs), get_job_logs ×4. Plus subscribe_pr_activity ×3 (claude-code-remote). No write tool.",
      "api_writes": "4 REST writes through the fleet relay: pr_create ×3 (objectstack#25402, objectui#13354, objectstack#25437) and this os-dev-report comment. Plus git pushes to claude/project-thread-to6m3a in both repos.",
      "open_questions": [],
      "out_of_scope_findings": [
        "carrier: none · noted, not filed — objectui DatasetReportRenderer and ObjectChart still draw the null bucket under chart.nullCategory only, and the flat table draws a null dimension value as `—`. Recorded in the liveness row's note."
      ]
    }

    Generated by Claude Code

  8. objectstack-fleet commented on Oct 23, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT → PR #25437 comment 6366784693 (landing 3 of 3, Fixes; ready + auto-merge set 2026-10-23T14:07Z)


    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:reportsBusiness reporting — dashboards, reports, the numbers a manager readsbugSomething isn't workingdomain:engineRetired 2026-10-22, alias of domain:server (engine surface); in-flight cards keep it until they landpm:dispatchedpriority:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions