Skip to content

i18n: a native-speaker read of the agent-written security advisory sentences before the console renders them (ar, ja, ko, zh-Hant first) #32843

Closed

Description

@objectstack-fleet

domain:spec#2 · os-sales · session_01L6bhgU7jN46DmQ6XFvz28s

Filing gate: ④ a sub-card of tracking #32654. Layer 3 (#32657, the console renders userMessage) should be Blocked-by: this card, at least for the four locales named below.
Business reason: #32655 (PR #32790) ships non-English user sentences for 7 security-posture advisory rules in 10 locales: 70 entries, of which the field-mask entry has three arms per locale (which half of the restriction is inert) and the owner-policy entry three remedy variants. An agent wrote all of them, borrowing terms from the console packs (ui/packages/i18n), and no native speaker has read them. Once #32656 composes them and #32657 renders them, they become the first platform-composed text a non-English admin reads about their permission sets. A wrong term in a security sentence, such as the setting's name or what the fix grants, sends the admin to the wrong setting or makes them distrust the advice. The rule ids stay the same, so a correction is a data-only PR.
Reader who acts: the domain:ui / area:i18n seat arranges the read. A native read means a human reader per locale: an agent can check the terms against the console packs but cannot sign off a native read. If the fleet has no such reader, this card needs the maintainer's call on who reads it, or on whether to ship on the English-reviewed terms alone.
Dedupe words: native review, security posture user text, validate-security-posture.user-text, agent-written translation.

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

What to read

packages/lint/src/validate-security-posture.user-text.ts: one sentence per rule id per locale. The BYPASS_LABEL table holds each locale's label for View All Records and Modify All Records.

Rule id What the sentence tells the admin
security-private-no-readscope holders of the set see only the records of a private object that they own or that are shared with them; give the set a read scope or widen sharing
security-master-detail-ungranted no permission set grants a detail object, so everyone but administrators is refused it
security-book-audience-unknown-set a book is restricted to a permission set that is not defined, so no one can open it
security-superuser-field-mask-inert hiding a field, making it read-only, or both, has no effect because the set holds View All / Modify All Records on the object (three arms, by the inert param)
security-controlled-by-parent-master-reference-hidden the set hides the link to the master record, so a refused holder is not told which master the change needs
security-update-policy-no-check an update policy sets no check condition, so an update may save rows the default ownership rule allows. Contract review nit N2 (record 6835490406): the sentence prescribes adding a check condition without the side effect the rule's hint states (a creator who is not the owner loses update unless the check admits them); the reader decides whether every locale should carry that caveat
security-controlled-by-parent-owner-policy-without-opt-in an update policy on an object that takes edit access from its master can only narrow who edits it (three remedy variants)

Locales: zh-Hans, zh-Hant, ja, ko, ar, de, fr, es, pt-BR, ru. Read ar, ja, ko and zh-Hant first. The #32655 developer reported that those console packs had the least existing wording to borrow terms from (report 6823397904).

Done when

Each locale has a named reader's sign-off, or a data-only PR that edits that locale's sentences in the catalog. The rule ids, params and pins stay the same. Each edited sentence must still pass finding-user-text.test.ts, which requires that no sentence is the English stand-in.

Not in scope

The 67 advisory rules that do not have sentences yet (tracking card #32835). Their PRs name their own agent-written sentences for the same kind of read.


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 → needs-user-decision · domain:ui · p2 · 2026-11-12T22:59Z

    ⛔ Not a claim.


    Generated by Claude Code

  2. added
    domain:uiDomain lane — seat card indexed by label:pm:seat
    needs-user-decisionBlocked on a maintainer decision — do not dispatch; decision cards only, never on a PR
    on Nov 12, 2026
  3. objectstack-fleet commented on Nov 13, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · hotlong · session_01Q4EjjMnyLqJdzuktEmRPXH

    Path: none

    Ruling recorded · #32843 · A · 2026-11-13T00:58Z

    Maintainer, verbatim (triage#1 session): 「32843 32673 同意」, answering triage's A/B with A recommended.


    Generated by Claude Code

  4. added
    pm:queueReady for the PM dispatch loop
    and removed
    needs-user-decisionBlocked on a maintainer decision — do not dispatch; decision cards only, never on a PR
    on Nov 13, 2026
  5. objectstack-fleet commented on Nov 13, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#4 · os-tesla · session_01L9qibvZYR36KAJUv44oXZw

    Claim: PM loop round 6 · 2026-11-13T22:58Z
    Session: session_01L9qibvZYR36KAJUv44oXZw (seat); card thread session_01L9qibxH4HAskLfCAuooiH5 is the dev
    Account: os-tesla
    Branch: claude/project-thread-uw7gkv (the card thread's designated branch; the platform lets a thread push only that branch, so not claude/issue-32843-*)
    Worktree: objectstack-issue-32843
    Domain: domain:ui
    Seat: domain:ui#4
    File surface: packages/lint/src/validate-security-posture.user-text.ts (sentence and BYPASS_LABEL values only) and its tests; root .changeset/. ⛔ No server change, no packages/spec change (stop on breach; explain in the report)
    Container & model: S–M, mode:thread, model: default tier (thread confirms with check-governed-merges on its final file list), effort: medium (data-only text across 10 locales; fleet token rule 2)
    Clause-②: no (values of existing catalog entries; rule ids, params and pins unchanged)
    Metadata-protocol: none
    Responsibility: agent-written security-posture user sentences in 10 locales were never checked against the console packs' setting names (objectstack packages/lint) | maintainer ruling A 6840566887: ship on English-reviewed terms, an agent checks terms against ui/packages/i18n and corrects mismatches as a data-only PR | every non-English admin who will read these advisories once #32656/#32657 land
    Thread-read: 6840566887
    Premise: holds at origin/main 47f6c939: validate-security-posture.user-text.ts (699 lines) holds one sentence per rule id per locale plus BYPASS_LABEL; no term check is recorded on the card
    Serial constraints cleared: none of the 24 open PRs touches this surface (seat read 2026-11-13 ~22:30Z). Sibling seat cards in flight: #33098, #33073, #33052, #32592, #32904, with disjoint surfaces; no open PR touches validate-security-posture.user-text.ts (seat read ~22:58Z).

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

    @objectstack-fleet
    ContributorAuthor

    domain:ui#4 · os-tesla · session_01L9qibxH4HAskLfCAuooiH5
    os-dev-report

    {
     "issue": 32843,
     "status": "done",
     "branch": "claude/project-thread-uw7gkv",
     "pr": "https://github.com/objectstack-ai/objectstack/pull/33169",
     "session": "session_01L9qibxH4HAskLfCAuooiH5",
     "premise_still_valid": true,
     "summary": "Ruling A term check of the seven security-posture user sentences in ten locales against the console packs, with a term table per locale in the PR body. Main finding: View All / Modify All Records, Read scope, Write scope and a policy's CHECK are edited only in the Studio permission editor, whose studio namespace ships en + zh only (zh-Hant served zh), so the eight other locales now quote the English screen label (BYPASS_LABEL values; scope and CHECK labels added in parentheses), zh-Hant reads 查看所有記錄, zh names CHECK. Also corrected: the owner opt-in remedy quotes the object form's 'Owner may edit' switch in every locale; master/detail follow each locale's console child/parent words (es and the zh master record already matched); ko 권한 세트, de Eigentümer, ja 読み取り. N2 (update-policy caveat) not added, reasoning in the PR body. Values only; rule ids, params, en sentences and pins unchanged; no test edits.",
     "tests": "at 1d5360b3: pnpm --filter @objectstack/lint exec vitest run --maxWorkers=2 (finding-user-text, validate-security-posture x5, finding-user-text.{connector-permission-form,dashboards,data-model,pages-forms}, validate-approval-approvers.unsupported-type) -> Test Files 11 passed (11), Tests 505 passed (505), lock VERDICT command-exit 0; pnpm --filter @objectstack/lint run typecheck exit 0 (at 617f9108). No ablation: string values only.",
     "gates": "at 1d5360b3: dispatch-gates --commands derived 53, plus check-sdui-manifest; dispatch-gates --ran: 53 accounted, 51 exit 0, 2 NOT MEASURED (exit 3 PREREQUISITE NOT MET: check:dual-build-cjs-loads needs a full build, check:lean-entry-closure needs objectql built; declared narrowing, CI runs both), 0 unrun; check-sdui-manifest exit 0; check-nul-bytes OK; check-governed-merges --test on the final file list: NOT governed. Run list: /mnt/project-files/ui-seat-4/r2026-11-13/out/32843-gates-ran-1d5360b3.list. CI check-runs: in_progress at report time.",
     "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
     "mcp_calls": "3 — mcp__github__issue_read x3 (get, get_comments x2); 0 writes",
     "api_writes": "2 — relay POST /repos/objectstack-ai/objectstack/dispatches: pr_create (#33169, read-back identical, assignee os-tesla) and this os-dev-report comment",
     "open_questions": [],
     "security_findings": "none",
     "out_of_scope_findings": [
      "carrier: none · noted, not filed · console splits seen while checking (PR Acceptance notes): ko Setup assignment screen 권한 집합 vs permission-set form 권한 세트, and sibling catalog validate-retired-permission-residue.user-text.ts writes 권한 집합; zh-Hant pack 共享 vs object form 共用; es pack uso compartido vs form section Compartición; ko book 문서 북 vs form 문서 책",
      "deviation: the order names the changeset 33073-SLUG.md and the report comment --comment=33073; 33073 is a sibling card of this seat (dispatch-33073.md), so both use 32843, the repo's card-number convention",
      "deviation: the origin/main merge commit was amended once, before push, to carry the two model-free trailers",
      "ruling-grep hits on the surface: validate-security-posture.user-text.ts:675 (unknown remedy prescribes nothing) — kept, no remedy arm or selector changed"
     ]
    }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

domain:uiDomain 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