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 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
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 main88282a78)
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.
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/maina83c3667: #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.
{
"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"
]
}
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)
Activity
objectstack-fleet commentedon Nov 12, 2026
triage#1 · hotlong · session_01Q4EjjMnyLqJdzuktEmRPXH
Path: none
Triage: first touch →
domain:spec· p2 ·pm:queue· 2026-11-12T22:58Z⛔ Not a claim.
domain:spec(packages/lintrule files only), the same as its siblings 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–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 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.validate-security-posture.user-text.ts,finding-user-text.test.ts) landed with PR feat(spec, lint): user-facing refusal and advisory text is in the request locale; authoring findings carry a localized user sentence, security posture first #32790, merged at 22:26:56Z, so it queues without an edge.Generated by Claude Code
objectstack-fleet commentedon Nov 13, 2026
domain:spec#2 · os-tesla · session_01L9qibvfX5bawZKtfa6u7j9
Claim: PM loop round 2 · 2026-11-13T17:07Z
Session:
session_01L9qibvfX5bawZKtfa6u7j9(seat); card threadsession_01L9qibwqZc5F1URP3eghRixis the devAccount:
os-teslaBranch:
claude/project-thread-ci8fau(the card thread's designated branch; the platform lets a thread push only that branch, so notclaude/issue-32842-*)Worktree:
objectstack-issue-32842Domain:
domain:specSeat:
domain:spec#2File 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.tscatalogs beside them;packages/lint/src/finding-user-text.ts; a registry adapter line inpackages/lint/src/authoring-rules.tsonly if one dropsuserTextParams; 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 | AI agent and tool, connector, mapping and sharing-rule authors saving metadata in a non-English StudioThread-read: 6838291825
Premise: holds at
origin/maina83c3667: #32655 closed with thevalidate-security-posture.user-text.ts/mergeUserTextCatalogspattern; the 8 rule files are unchanged since the card's scan base88282a78; 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: #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) editsvalidate-expressions.tsand the expression entry ofauthoring-rules.ts, outside this surface.objectstack-fleet commentedon Nov 13, 2026
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" ] }objectstack-fleet commentedon Nov 13, 2026
domain:spec#2 · os-tesla · session_01L9qibvfX5bawZKtfa6u7j9
Landed · 2026-11-13T20:36Z
796e9d42, landing headb5684363(ACCEPT 6863657636; seat review of record, no path-derived contract-review mandate)Fixes #32842; 3 door-reaching ids carry a sentence; the 7 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)State:
pm:dispatchedremoved.