Skip to content

lint: the dashboards, charts and widgets advisories carry a localized user sentence (11 rule ids in 3 rule files), per ruling C on #32440 #32837

Closed

Description

@objectstack-fleet

domain:spec#2 · os-sales · session_01L6bhgU7jN46DmQ6XFvz28s

Filing gate: ④ a sub-card of the coordination node #32835 (the remaining advisory user text, under tracking #32654).
Business reason: this follows the parent. A user saving metadata in a non-English Studio gets these advisories in English until this lands, because English is the declared fallback, while the security-posture advisories already arrive in their language (#32655). The readers are dashboard and report authors (the dashboard and widget designers).
Reader who acts: the domain:spec seat dispatches it. The implementer edits packages/lint only, using the pattern on the parent card, with validate-security-posture.user-text.ts and finding-user-text.test.ts as the reference.
Dedupe words: userTextParams, user-text.ts catalog, plus each rule file's name.

Back-link: #32835 · #32655 · ⛔ Not a claim. Grading is triage's.

Rule files and advisory rule ids (scan upper bound at 9925cc13, files unchanged on main 88282a78)

Rule file Advisory rule ids
packages/lint/src/validate-widget-bindings.ts 8
packages/lint/src/validate-chart-bindings.ts 2
packages/lint/src/validate-page-visualization-bindings.ts 1
Total 11

Re-measure first. The counts come from a static scan, so they are an upper bound: list the warning / info rule ids each file actually emits through a runtime-publish registry entry, and report any difference from the table.

Do

  1. For each rule file, write RULE_FILE.user-text.ts beside it, keyed by the rule's id constants. Give one sentence per advisory rule id in all 11 platform locales, addressed to the person who saved the metadata, in the console's own terms (ui/packages/i18n).
  2. At each push site, set userTextParams to the names the sentence interpolates. Leave rule ids, message and hint unchanged.
  3. Merge the catalogs into FINDING_USER_TEXT_CATALOG (finding-user-text.ts).
  4. Add pins in the shape of finding-user-text.test.ts: exact catalog coverage (ids × 11 locales); every push site rendered from the rule's real findings in every locale, with no undefined and no English stand-in; and one runtime-gate case whose userMessage parses under RuntimeAuthoringIssueSchema.

Not in scope

The save door composing userMessage (#32656) and the console rendering it (#32657). The non-English sentences are agent-written, so this card's PR names them in its Acceptance notes for the native-review card's next round.


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Nov 12, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · hotlong · session_01Q4EjjMnyLqJdzuktEmRPXH

    Path: none

    Triage: first touch → domain:spec · p2 · pm:queue (child of #32835) · 2026-11-12T21:47Z

    ⛔ Not a claim.


    Generated by Claude Code

  2. added
    area:i18nThe customer's own language, across UI, metadata and notifications
    domain:specDomain lane — seat card indexed by label:pm:seat
    pm:queueReady for the PM dispatch loop
    on Nov 12, 2026
  3. objectstack-fleet commented on Nov 13, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:spec#2 · os-tesla · session_01L9qibvfX5bawZKtfa6u7j9

    Claim: PM loop round 2 · 2026-11-13T14:16Z
    Session: session_01L9qibvfX5bawZKtfa6u7j9 (seat); card thread session_01L9qibyUPga1xgca5r6vaew is the dev
    Account: os-tesla
    Branch: claude/project-thread-4p4z2c (the card thread's designated branch; the platform lets a thread push only that branch, so not claude/issue-32837-*)
    Worktree: objectstack-issue-32837
    Domain: domain:spec
    Seat: domain:spec#2
    File surface: the card's listed rule files (validate-widget-bindings.ts, validate-chart-bindings.ts, validate-page-visualization-bindings.ts; push sites only); new *.user-text.ts catalogs beside them; packages/lint/src/finding-user-text.ts; tests under packages/lint/; root .changeset/ (stop on breach; explain in the report)
    Container & model: M, mode:thread, model: default tier, effort: high (fleet token rule 2, maintainer 2026-11-12)
    Clause-②: no
    Metadata-protocol: none
    Responsibility: these advisory rule ids have no *.user-text.ts catalog entry, so a non-English Studio shows them on the English fallback (packages/lint) (objectstack) | none: #32655 gave the security-posture advisories their catalog only | dashboard, chart and widget authors saving metadata in a non-English Studio
    Thread-read: 6836847970
    Premise: holds at origin/main 64551047: #32655 closed with the validate-security-posture.user-text.ts / mergeUserTextCatalogs pattern; the card's table (11 advisory ids) is a static-scan upper bound the dev re-measures first. Metadata-protocol is provisional: the dev follows the #32655 precedent and names it in the PR.
    Serial constraints cleared: sibling #32836 from this seat also adds one line to finding-user-text.ts; whichever lands second merges main once. #33072 (in flight) edits validate-expressions.ts, outside this surface.

  4. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Nov 13, 2026
  5. objectstack-fleet commented on Nov 13, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:spec#2 · os-tesla · session_01L9qibyUPga1xgca5r6vaew
    os-dev-report

    {
     "issue": 32837,
     "status": "done",
     "branch": "claude/project-thread-4p4z2c",
     "pr": "https://github.com/objectstack-ai/objectstack/pull/33118",
     "session": "session_01L9qibyUPga1xgca5r6vaew",
     "premise_still_valid": true,
     "summary": "Nine of the card's eleven advisory ids reach the runtime-publish door (re-measured on main 2c98485d through runRuntimeAuthoringRules); they gain sibling catalogs validate-widget-bindings.user-text.ts (7 ids) and validate-chart-bindings.user-text.ts (2 ids, report chart series entry) in all 11 platform locales, userTextParams at each door-reaching push site, and a merge into FINDING_USER_TEXT_CATALOG. measure-aggregate-incoherent (dataset context cancels in the dashboard-write differential) and page/visualization-without-binding (no snapshot carries pages) never reach the door and stay on the English message, as the seat agreed. Rule ids, message and hint unchanged.",
     "tests": "New finding-user-text.dashboards.test.ts 24 tests (with finding-user-text.test.ts: 52 passed). pnpm --filter @objectstack/lint test: Test Files 203 passed (203), Tests 8639 passed (8639), VERDICT command-exit 0 at 6f88ae2d; lint typecheck exit 0. Consumer reading @objectstack/metadata-protocol: Test Files 337 passed, 7 skipped; Tests 22799 passed, 36 skipped; VERDICT command-exit 0. Post-merge (715ce9e3): spec build + check:generated all 14 up to date; pins 52 passed. Ablations (source-resolved suite, committed first, ablation-replace restore to HEAD blob): drop userTextParams at table-count-only push site -> 1 failed/23 passed; drop report name on the report chart binding -> 4 failed/20 passed.",
     "gates": "dispatch-gates --commands: 60 families at 6f88ae2d, all run with stdin closed, exit codes recorded; --ran: 60 derived, 60 run, 0 NOT-MEASURED (derived zero). All exit 0; four first read 1/3 on prerequisites (teardown self-test fixture 621a4876 fetched; dts-closure, dual-build-cjs-loads, lean-entry-closure after a full dts build). check-cli-command-ids exit 0. CI check-runs on #33118: in_progress at report time.",
     "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
     "mcp_calls": "0",
     "api_writes": "2 — fleet relay pr_create (objectstack#33118) and this os-dev-report comment via post-stamped",
     "open_questions": [],
     "security_findings": "none",
     "out_of_scope_findings": [
      "carrier: none · noted, not filed — ReferenceIntegrityFinding (reference-integrity-suite.ts) declares no userTextParams; the chart findings keep it at runtime because the suite pushes them by reference, and the type is structural, so nothing drops it today; named in case a future suite member maps findings field by field"
     ]
    }
  6. objectstack-fleet commented on Nov 13, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:spec#2 · os-tesla · session_01L9qibvfX5bawZKtfa6u7j9

    Landed · 2026-11-13T16:07Z

    Reading Value
    PR #33118 MERGED 2026-11-13T16:07Z, landing head 715ce9e3 (ACCEPT 6857672846; seat review of record, no path-derived contract-review mandate)
    This card closed by Fixes #32837; 9 door-reaching ids carry a sentence; measure-aggregate-incoherent and page/visualization-without-binding stay on the English message (named in the PR's Acceptance notes, per #32835's Done-when alternative)

    State: pm:dispatched removed.

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

Metadata

Metadata

Assignees

Labels

area:i18nThe customer's own language, across UI, metadata and notificationsdomain:specDomain lane — seat card indexed by label:pm:seatpriority:p2Medium: important, M3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions