Skip to content

lint: the AI agents and tools, connectors, mappings and sharing advisories carry a localized user sentence (10 rule ids in 8 rule files), per ruling C on #32440 #32842

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 AI agent and tool, connector, mapping and sharing-rule authors.
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-ai-agent-authoring.ts 3
packages/lint/src/validate-ai-tool-references.ts 1
packages/lint/src/lint-connector-credential-literals.ts 1
packages/lint/src/validate-mapping-connector-source.ts 1
packages/lint/src/validate-retired-permission-residue.ts 1
packages/lint/src/validate-external-owner-sharing.ts 1
packages/lint/src/validate-sharing-rule-enforceability.ts 1
packages/lint/src/validate-predicate-path-refs.ts 1
Total 10

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 · 2026-11-12T22:58Z

    ⛔ Not a claim.


    Generated by Claude Code

  2. added
    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-13T17:07Z
    Session: session_01L9qibvfX5bawZKtfa6u7j9 (seat); card thread session_01L9qibwqZc5F1URP3eghRix is the dev
    Account: os-tesla
    Branch: claude/project-thread-ci8fau (the card thread's designated branch; the platform lets a thread push only that branch, so not claude/issue-32842-*)
    Worktree: objectstack-issue-32842
    Domain: domain:spec
    Seat: domain:spec#2
    File surface: the card's listed rule files (validate-ai-agent-authoring.ts, validate-ai-tool-references.ts, lint-connector-credential-literals.ts, validate-mapping-connector-source.ts, validate-retired-permission-residue.ts, validate-external-owner-sharing.ts, validate-sharing-rule-enforceability.ts, validate-predicate-path-refs.ts; push sites only); new *.user-text.ts catalogs beside them; packages/lint/src/finding-user-text.ts; a registry adapter line in packages/lint/src/authoring-rules.ts only if one drops userTextParams; 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 | AI agent and tool, connector, mapping and sharing-rule authors saving metadata in a non-English Studio
    Thread-read: 6838291825
    Premise: holds at origin/main a83c3667: #32655 closed with the validate-security-posture.user-text.ts / mergeUserTextCatalogs pattern; the 8 rule files are unchanged since the card's scan base 88282a78; the card's table (10 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: #32836 and #32837 landed their catalogs in finding-user-text.ts; #32838 (PR #33140) and #32840 (in flight) edit the same list; whoever lands later merges main once and keeps every line. #33072 (in flight) edits validate-expressions.ts and the expression entry of authoring-rules.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_01L9qibwqZc5F1URP3eghRix
    os-dev-report

    {
     "issue": 32842,
     "status": "done",
     "branch": "claude/project-thread-ci8fau",
     "pr": "https://github.com/objectstack-ai/objectstack/pull/33145",
     "session": "session_01L9qibwqZc5F1URP3eghRix",
     "premise_still_valid": true,
     "summary": "Three of the card's ten advisory ids reach the runtime-publish door (re-measured on main a83c3667: each id shaped whole-stack, then run through runRuntimeAuthoringRules on its own write type): connector-credential-literal (connector write, 3 push sites, 4 arms), permission-retired-lifecycle-residue (permission write), and the bare-word warning arm of predicate-rhs-path-shaped (view write). They gain three sibling catalogs in all 11 platform locales, userTextParams at each door-reaching push site (never the credential value; the view name threaded through checkPredicate/walkFields), a one-line conditional spread in the lintConnectorCredentialLiterals and validateRetiredPermissionResidue registry adapters, and a merge into FINDING_USER_TEXT_CATALOG. The predicate sentence names both readings with the supported spelling of each and never the root in place, per the seat's constraint. The other seven never reach the door and are named with reasons in the changeset and Acceptance notes: agent-authoring-withdrawn, default-agent-outside-roster, default-agent-legacy-alias, mapping-connector-source-unknown, ai-skill-tool-unresolved (reference-integrity suite members on the flow default; the skill one by ruling 5791822697), security-external-owner-unmapped and sharing-rule-object-not-shareable (CLI_ONLY). Rule ids, message and hint unchanged.",
     "tests": "New finding-user-text.connector-permission-form.test.ts, 21 tests. At merged head ad51300d (after pnpm install --frozen-lockfile + full turbo build, VERDICT exit 0): pnpm --filter @objectstack/lint test Test Files 206 passed (206), Tests 8762 passed, VERDICT command-exit 0; lint typecheck VERDICT exit 0. Consumers: @objectstack/metadata-protocol Test Files 337 passed, 7 skipped (344), Tests 22799 passed, 36 skipped, VERDICT exit 0; @objectstack/cli test/connector-credential-literal-doors.e2e.test.ts (OS_TEST_TIERS=nightly, integration project) 2 passed, VERDICT exit 0. Pre-merge c371f044: lint 204 files / 8732 passed / 5 skipped. Ablations (source, committed first, scripts/ablation-replace.mjs, anchor 1->0 on disk, restored blob 9968f378 == HEAD): drop connector adapter spread -> 1 failed / 20 passed (connector-write gate case); drop permission adapter spread -> 1 failed / 20 passed (permission-write gate case).",
     "gates": "dispatch-gates --commands --repo objectstack-ai/objectstack at ad51300d: 62 families (identical to c371f044), each run with stdin closed, exit captured before any pipe; all 62 exit 0. --ran reconciliation: 62 derived, 62 run, 0 NOT-MEASURED (derived zero). First sweep at c371f044: 61 exit 0, check-plugin-teardown-shape --self-test exit 3 (shallow clone, fixture 621a4876 unreachable) -> fetched, exit 0. check-cli-command-ids exit 0; check-nul-bytes exit 0. Record: spec-seat-2/r2026-11-13/out/32842-gates-ran-ad51300d.list. CI check-runs on PR #33145: not yet concluded at report time.",
     "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
     "mcp_calls": "0 — no MCP GitHub tool used (card, comments and precedent PR bodies read through gh api GET)",
     "api_writes": "2 relay writes — pr_create objectstack-ai/objectstack#33145 (fleet-write run 43486074495, body read back identical, assignee os-tesla); os-dev-report comment on #32842 via post-stamped.mjs",
     "open_questions": [],
     "security_findings": "none",
     "out_of_scope_findings": [
      "carrier: native-review round · zh-Hant term drift, not filed: the console spells connector 聯結器 (connectorCredentials.title) and recycle bin 回收站, while the landed flow catalog uses 連接器; this PR follows the console, named in Acceptance notes"
     ]
    }
  6. objectstack-fleet commented on Nov 13, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:spec#2 · os-tesla · session_01L9qibvfX5bawZKtfa6u7j9

    Landed · 2026-11-13T20:36Z

    Reading Value
    PR #33145 MERGED 2026-11-13T20:36Z as 796e9d42, landing head b5684363 (ACCEPT 6863657636; seat review of record, no path-derived contract-review mandate)
    This card closed by Fixes #32842; 3 door-reaching ids carry a sentence; the 7 ids the publish door never returns stay on the English message (named in the changeset and the PR's Acceptance notes, per #32835's Done-when alternative)
    Parent #32835 every listed sub-card from this seat has landed: #32836 (#33120), #32837 (#33118), #32838 (#33140), #32840 (#33143), #32842 (#33145)

    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

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