You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
lint: the the data model: objects, fields, sorting, search, record titles and autonumbers advisories carry a localized user sentence (10 rule ids in 6 rule files), per ruling C on #32440 #32838
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 object and field authors (the object designer).
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 main88282a78)
Rule file
Advisory rule ids
packages/lint/src/data-model-rules.ts
3
packages/lint/src/lint-autonumber-formats.ts
2
packages/lint/src/validate-sortable-fields.ts
2
packages/lint/src/validate-searchable-fields.ts
1
packages/lint/src/validate-record-title.ts
1
packages/lint/src/validate-object-references.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
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).
At each push site, set userTextParams to the names the sentence interpolates. Leave rule ids, message and hint unchanged.
Merge the catalogs into FINDING_USER_TEXT_CATALOG (finding-user-text.ts).
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.
Grade: p2. Until it lands, users of a non-English Studio get these advisories in English (the declared fallback). The rule files are disjoint across the four children, so the claims may run in parallel.
Claim: PM loop round 2 · 2026-11-13T16:10Z
Session: session_01L9qibvfX5bawZKtfa6u7j9 (seat); card thread session_01L9qibzvBVSWuwHDeSGbNmG is the dev
Account: os-tesla
Branch: claude/project-thread-91iouu (the card thread's designated branch; the platform lets a thread push only that branch, so not claude/issue-32838-*)
Worktree: objectstack-issue-32838
Domain: domain:spec
Seat: domain:spec#2
File surface: the card's listed rule files (data-model-rules.ts, lint-autonumber-formats.ts, validate-sortable-fields.ts, validate-searchable-fields.ts, validate-record-title.ts, validate-object-references.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 | object and field authors (the data model designer) saving metadata in a non-English Studio
Thread-read: 6836860412
Premise: holds at origin/main5c005e0e: #32655 closed with the validate-security-posture.user-text.ts / mergeUserTextCatalogs pattern; 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: #32837 already landed its catalogs in finding-user-text.ts; PR #33120 (#32836) is open on the same list, and whichever lands second merges main once. #33072 (in flight) edits validate-expressions.ts, outside this surface.
Re-measure accepted: 5 of the card's 10 ids reach the publish door at origin/main5c005e0e: autonumber-unrecognized-token, autonumber-references-optional-field, sort-field-unprovisioned, searchable-field-unprovisioned, object-reference-unregistered-platform. They get catalogs. The other 5 never reach it, and the PR names them with the reason: the data-model-rules.ts warnings (CLI_ONLY, or lintDataModel with no registry entry) and title-unresolvable (CLI_ONLY).
{
"issue": 32838,
"status": "done",
"branch": "claude/project-thread-91iouu",
"pr": "https://github.com/objectstack-ai/objectstack/pull/33140",
"session": "session_01L9qibzvBVSWuwHDeSGbNmG",
"premise_still_valid": true,
"summary": "Five of the card's ten advisory ids reach the runtime-publish door (re-measured on main 5c005e0e through runRuntimeAuthoringRules on object, view, dataset, page and flow writes): autonumber-unrecognized-token and autonumber-references-optional-field (object), sort-field-unprovisioned and searchable-field-unprovisioned (object, view), object-reference-unregistered-platform (dataset base object). They gain four sibling catalogs in all 11 platform locales, userTextParams at each door-reaching push site, a one-line userTextParams spread in the lintAutonumberFormats registry adapter (surface amendment 6858508915), and a merge into FINDING_USER_TEXT_CATALOG. The other five (data-model-rules.ts warnings: CLI_ONLY or lintDataModel with no registry entry; title-unresolvable: CLI_ONLY) stay on the English message, as the seat agreed. page-field-unprovisioned, which sortable also pushes at its page-sort site, is left to #32840 (its owner) and named in the PR. Rule ids, message and hint unchanged.",
"tests": "New finding-user-text.data-model.test.ts 20 tests at f4ce7b50. pnpm --filter @objectstack/lint test: Test Files 204 passed (204), Tests 8654 passed, 5 skipped (8659), VERDICT command-exit 0; lint typecheck + build VERDICT command-exit 0. Consumer @objectstack/metadata-protocol (closure built): Test Files 337 passed, 7 skipped (344); Tests 22799 passed, 36 skipped; VERDICT command-exit 0. Post-merge head 4605d6ef (main 5b2ec820 via os-regen-merge.sh, no lint file incoming): spec build + spec check:generated all 14 up to date; three user-text pin files 72 passed, VERDICT command-exit 0. Ablations (source, committed first, scripts/ablation-replace.mjs, each landed anchor 1->0 and restored blob == HEAD): drop adapter spread -> 1 failed; drop dataset-site params -> 2 failed; drop searchable params -> 4 failed.",
"gates": "dispatch-gates --commands --repo objectstack-ai/objectstack at f4ce7b50: 62 families, each run with stdin closed, exit code captured before any pipe; all 62 exit 0. --ran reconciliation (also on 4605d6ef, same 12 paths): 62 derived, 62 run, 0 NOT-MEASURED (derived zero). Prerequisites: teardown-shape self-test fixture 621a4876 fetched; dual-build-cjs-loads and lean-entry-closure exit 3 until a full turbo build, then 0; type-check-debt run after the full build, exit 0. check-cli-command-ids exit 0; check-nul-bytes exit 0. Record: spec-seat-2/r2026-11-13/out/32838-gates-ran-f4ce7b50.list. CI check-runs on PR #33140: in_progress at report time.",
"dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
"mcp_calls": "4 — reads only: issue_read x4 (card get, card comments, parent #32835 get, parent sub-issues); 0 write tools",
"api_writes": "2 relay writes — pr_create objectstack-ai/objectstack#33140 (draft, assignee os-tesla) via fleet-write dispatch fw-20261113T165515Z-49cfcb; this os-dev-report comment via post-stamped. Plus git push (not REST).",
"open_questions": [],
"security_findings": "none",
"out_of_scope_findings": [
"carrier: #32840 · page-field-unprovisioned is also pushed by validate-sortable-fields.ts checkPageSortDeclaration (a page write returns it); #32840's catalog must set userTextParams there too · noted in PR #33140 Acceptance notes, not filed"
]
}
MERGED 2026-11-13T17:57Z as dd4ce50b, landing head 4605d6ef (ACCEPT 6860211519; seat review of record, no path-derived contract-review mandate)
This card
closed by Fixes #32838; 5 door-reaching ids carry a sentence; the 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); the page-field-unprovisioned page-sort site is #32840's
Activity
objectstack-fleet commentedon Nov 12, 2026
triage#1 · hotlong · session_01Q4EjjMnyLqJdzuktEmRPXH
Path: none
Triage: first touch →
domain:spec· p2 ·pm:queue(child of #32835) · 2026-11-12T21:48Z⛔ Not a claim.
domain:spec(packages/lintadvisory rules, following spec: user-facing refusal and advisory text is in the request locale (userMessage locale rule, advisory user text field), per ruling C on #32440 #32655's pattern). Linked under lint: every save-door advisory rule carries a localized user sentence (67 rule ids in 36 rule files remain after the security posture), per ruling C on #32440 #32835.Generated by Claude Code
objectstack-fleet commentedon Nov 13, 2026
domain:spec#2 · os-tesla · session_01L9qibvfX5bawZKtfa6u7j9
Claim: PM loop round 2 · 2026-11-13T16:10Z
Session:
session_01L9qibvfX5bawZKtfa6u7j9(seat); card threadsession_01L9qibzvBVSWuwHDeSGbNmGis the devAccount:
os-teslaBranch:
claude/project-thread-91iouu(the card thread's designated branch; the platform lets a thread push only that branch, so notclaude/issue-32838-*)Worktree:
objectstack-issue-32838Domain:
domain:specSeat:
domain:spec#2File surface: the card's listed rule files (
data-model-rules.ts,lint-autonumber-formats.ts,validate-sortable-fields.ts,validate-searchable-fields.ts,validate-record-title.ts,validate-object-references.ts; push sites only); new*.user-text.tscatalogs beside them;packages/lint/src/finding-user-text.ts; tests underpackages/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.tscatalog 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 | object and field authors (the data model designer) saving metadata in a non-English StudioThread-read: 6836860412
Premise: holds at
origin/main5c005e0e: #32655 closed with thevalidate-security-posture.user-text.ts/mergeUserTextCatalogspattern; the card's table (10 advisory ids) is a static-scan upper bound the dev re-measures first.Metadata-protocolis provisional: the dev follows the #32655 precedent and names it in the PR.Serial constraints cleared: #32837 already landed its catalogs in
finding-user-text.ts; PR #33120 (#32836) is open on the same list, and whichever lands second merges main once. #33072 (in flight) editsvalidate-expressions.ts, outside this surface.objectstack-fleet commentedon Nov 13, 2026
domain:spec#2 · os-tesla · session_01L9qibvfX5bawZKtfa6u7j9
Surface amendment · 2026-11-13T16:15Z · amends Claim 6858401007
packages/lint/src/authoring-rules.ts, thelintAutonumberFormatsregistry adapter only. It re-maps each finding field by field and dropsuserTextParams. The edit is one conditional spread, the same as lint: the automation writes: approvals, flows, hooks, actions and email templates advisories carry a localized user sentence (27 rule ids in 11 rule files), per ruling C on #32440 #32836'slintFlowCredentialLiteralsline; no other entry and no other field changes.origin/main5c005e0e:autonumber-unrecognized-token,autonumber-references-optional-field,sort-field-unprovisioned,searchable-field-unprovisioned,object-reference-unregistered-platform. They get catalogs. The other 5 never reach it, and the PR names them with the reason: thedata-model-rules.tswarnings (CLI_ONLY, orlintDataModelwith no registry entry) andtitle-unresolvable(CLI_ONLY).page-field-unprovisioned. Its constant belongs tovalidate-page-field-bindings.ts, butvalidate-sortable-fields.tsalso pushes it at the page-sort site. lint: the pages, forms, navigation and translations advisories carry a localized user sentence (9 rule ids in 8 rule files), per ruling C on #32440 #32840's catalog must setuserTextParamsat that site too; this PR names it.objectstack-fleet commentedon Nov 13, 2026
domain:spec#2 · os-tesla · session_01L9qibzvBVSWuwHDeSGbNmG
os-dev-report
{ "issue": 32838, "status": "done", "branch": "claude/project-thread-91iouu", "pr": "https://github.com/objectstack-ai/objectstack/pull/33140", "session": "session_01L9qibzvBVSWuwHDeSGbNmG", "premise_still_valid": true, "summary": "Five of the card's ten advisory ids reach the runtime-publish door (re-measured on main 5c005e0e through runRuntimeAuthoringRules on object, view, dataset, page and flow writes): autonumber-unrecognized-token and autonumber-references-optional-field (object), sort-field-unprovisioned and searchable-field-unprovisioned (object, view), object-reference-unregistered-platform (dataset base object). They gain four sibling catalogs in all 11 platform locales, userTextParams at each door-reaching push site, a one-line userTextParams spread in the lintAutonumberFormats registry adapter (surface amendment 6858508915), and a merge into FINDING_USER_TEXT_CATALOG. The other five (data-model-rules.ts warnings: CLI_ONLY or lintDataModel with no registry entry; title-unresolvable: CLI_ONLY) stay on the English message, as the seat agreed. page-field-unprovisioned, which sortable also pushes at its page-sort site, is left to #32840 (its owner) and named in the PR. Rule ids, message and hint unchanged.", "tests": "New finding-user-text.data-model.test.ts 20 tests at f4ce7b50. pnpm --filter @objectstack/lint test: Test Files 204 passed (204), Tests 8654 passed, 5 skipped (8659), VERDICT command-exit 0; lint typecheck + build VERDICT command-exit 0. Consumer @objectstack/metadata-protocol (closure built): Test Files 337 passed, 7 skipped (344); Tests 22799 passed, 36 skipped; VERDICT command-exit 0. Post-merge head 4605d6ef (main 5b2ec820 via os-regen-merge.sh, no lint file incoming): spec build + spec check:generated all 14 up to date; three user-text pin files 72 passed, VERDICT command-exit 0. Ablations (source, committed first, scripts/ablation-replace.mjs, each landed anchor 1->0 and restored blob == HEAD): drop adapter spread -> 1 failed; drop dataset-site params -> 2 failed; drop searchable params -> 4 failed.", "gates": "dispatch-gates --commands --repo objectstack-ai/objectstack at f4ce7b50: 62 families, each run with stdin closed, exit code captured before any pipe; all 62 exit 0. --ran reconciliation (also on 4605d6ef, same 12 paths): 62 derived, 62 run, 0 NOT-MEASURED (derived zero). Prerequisites: teardown-shape self-test fixture 621a4876 fetched; dual-build-cjs-loads and lean-entry-closure exit 3 until a full turbo build, then 0; type-check-debt run after the full build, exit 0. check-cli-command-ids exit 0; check-nul-bytes exit 0. Record: spec-seat-2/r2026-11-13/out/32838-gates-ran-f4ce7b50.list. CI check-runs on PR #33140: in_progress at report time.", "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm", "mcp_calls": "4 — reads only: issue_read x4 (card get, card comments, parent #32835 get, parent sub-issues); 0 write tools", "api_writes": "2 relay writes — pr_create objectstack-ai/objectstack#33140 (draft, assignee os-tesla) via fleet-write dispatch fw-20261113T165515Z-49cfcb; this os-dev-report comment via post-stamped. Plus git push (not REST).", "open_questions": [], "security_findings": "none", "out_of_scope_findings": [ "carrier: #32840 · page-field-unprovisioned is also pushed by validate-sortable-fields.ts checkPageSortDeclaration (a page write returns it); #32840's catalog must set userTextParams there too · noted in PR #33140 Acceptance notes, not filed" ] }objectstack-fleet commentedon Nov 13, 2026
domain:spec#2 · os-tesla · session_01L9qibvfX5bawZKtfa6u7j9
Landed · 2026-11-13T17:57Z
dd4ce50b, landing head4605d6ef(ACCEPT 6860211519; seat review of record, no path-derived contract-review mandate)Fixes #32838; 5 door-reaching ids carry a sentence; the ids the publish door never returns stay on the Englishmessage(named in the changeset and the PR's Acceptance notes, per #32835's Done-when alternative); thepage-field-unprovisionedpage-sort site is #32840'sState:
pm:dispatchedremoved.