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 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
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 approval, flow, hook and action authors (the automation 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)
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-13T14:15Z
Session: session_01L9qibvfX5bawZKtfa6u7j9 (seat); card thread session_01L9qibymXZPShrjayTXHyCg is the dev
Account: os-tesla
Branch: claude/project-thread-ltr3oq (the card thread's designated branch; the platform lets a thread push only that branch, so not claude/issue-32836-*)
Worktree: objectstack-issue-32836
Domain: domain:spec
Seat: domain:spec#2
File surface: the card's listed rule files (approval approvers, flow trigger readiness, action/hook/flow body writes, flow template paths, read-only writes, flow credential literals, email template hole grammar; 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 | approval, flow, hook and action authors (the automation designer) saving metadata in a non-English Studio
Thread-read: 6836835235
Premise: holds at origin/main64551047: #32655 closed with the validate-security-posture.user-text.ts / mergeUserTextCatalogs pattern; the card's table (27 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 #32837 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.
Added to the file surface:packages/lint/src/authoring-rules.ts, the lintFlowCredentialLiterals registry adapter only (~L2024). It re-maps each finding field by field and drops userTextParams, so the flow-credential-literal catalog entry would never reach the runtime gate. The edit is one conditional spread (userTextParams: f.userTextParams); no other entry and no other field changes. The PR names it, and a pin shows the save door renders that rule's sentence.
Re-measure accepted: 29 advisory ids at origin/main2c98485d, not 27 (validate-action-body-writes 4, validate-flow-trigger-readiness 5). All 29 get catalog entries.
{
"issue": 32836,
"status": "done",
"branch": "claude/project-thread-ltr3oq",
"pr": "https://github.com/objectstack-ai/objectstack/pull/33120",
"session": "session_01L9qibymXZPShrjayTXHyCg",
"premise_still_valid": true,
"summary": "Nineteen advisory rule ids that the save door returns on a flow write now carry userTextParams and a user sentence in all 11 PLATFORM_LOCALE_TAGS, in six *.user-text.ts catalogs merged into FINDING_USER_TEXT_CATALOG; rule ids, message and hint unchanged, and refusals sharing an id carry no params. The lintFlowCredentialLiterals adapter in authoring-rules.ts keeps userTextParams (amendment 6855561105). Re-measure: card table 27, static scan 29, 19 reach the door; under #32835's Done-when alternative the other 10 are named in Acceptance notes: (a) 9 hook/action body and readonly ids whose suite members default to the flow runtimeType while a flow snapshot carries no hooks or actions (gate rulesRun 1/1/14, none of these advisories), (b) email-template-hole-grammar's warning arm, off at the door because liveUniverse is true there. Every non-English sentence (19 ids x 10 locales) is agent-written and named for native review. Head 8b347e57, merged with main 7c36f524 once before the PR.",
"tests": "pnpm --filter @objectstack/lint exec vitest run: 202 files, 8692 tests passed (post-merge). finding-user-text.test.ts 102 tests, 25 real-flow cases each rendered in 11 locales and run through runRuntimeAuthoringRules with RuntimeAuthoringIssueSchema parse; unsupported-type mock file 5 tests. Consumers: metadata-protocol 337 files passed / 7 skipped, 22799 tests passed / 36 skipped; objectql 595 files, 12789 tests passed; cli 4 files naming the ids, 63 tests passed; app-showcase author-time-advisories 2 passed. Ablations (committed first, ablation-replace restored to HEAD, git diff empty): authoring-rules.ts spread deleted -> 4 credential gate tests red; draft-status push-site params deleted -> 2 red. tsc --noEmit exit 0; lint typecheck VERDICT 0; check-cli-command-ids exit 0.",
"gates": "dispatch-gates --commands derived 63 (identical at merged head), each run with </dev/null; --ran reconciliation: 63 derived, 63 run, 0 NOT-MEASURED, 0 UNRUN. First-sweep non-zeros: check:test-source-alias exit 1 (real: spec imports inside a clocked body in validate-approval-approvers.unsupported-type.test.ts; fixed af4e1c7c, rerun 0); check-plugin-teardown-shape --self-test exit 3 (shallow clone; fixture commit fetched, 0); check:docs-transcript-drift 1 and check:dts-closure 1 (ran during a closure build rewriting spec/dist; rerun 0); check:dual-build-cjs-loads 3 and check:lean-entry-closure 3 (no dist; after pnpm build, 0); check:type-check-debt 124 (my 600s timeout; rerun 0). PR check-runs at report time: Governed Surface Queue Guard success; the rest in progress (seat reads them).",
"dogfood_battery": "n/a - no ! in the PR title and no (narrowing) arm",
"mcp_calls": "1 - mcp__github__pull_request_read get_check_runs on #33120 (read); 0 writes",
"api_writes": "3 - git push origin HEAD:claude/project-thread-ltr3oq (several pushes to the thread branch); relay pr_create (fleet-write run 43452084568, #33120, body read back identical, assignees os-tesla); this os-dev-report comment via post-stamped.mjs",
"open_questions": [],
"security_findings": "none",
"out_of_scope_findings": [
"carrier: none - the 10 door-unreachable ids are named in the PR's Acceptance notes under #32835's Done-when alternative, not filed"
]
}
MERGED 2026-11-13T17:03Z as a83c3667, landing head 08d77c00 (ACCEPT 6859034161; seat review of record, no path-derived contract-review mandate)
This card
closed by Fixes #32836; 19 door-reaching ids carry a sentence; the 10 ids the publish door never returns stay on the English message (named in 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(child of #32835) · 2026-11-12T21:47Z⛔ 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-13T14:15Z
Session:
session_01L9qibvfX5bawZKtfa6u7j9(seat); card threadsession_01L9qibymXZPShrjayTXHyCgis the devAccount:
os-teslaBranch:
claude/project-thread-ltr3oq(the card thread's designated branch; the platform lets a thread push only that branch, so notclaude/issue-32836-*)Worktree:
objectstack-issue-32836Domain:
domain:specSeat:
domain:spec#2File surface: the card's listed rule files (approval approvers, flow trigger readiness, action/hook/flow body writes, flow template paths, read-only writes, flow credential literals, email template hole grammar; 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 | approval, flow, hook and action authors (the automation designer) saving metadata in a non-English StudioThread-read: 6836835235
Premise: holds at
origin/main64551047: #32655 closed with thevalidate-security-posture.user-text.ts/mergeUserTextCatalogspattern; the card's table (27 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: sibling #32837 from this seat also adds one line to
finding-user-text.ts; 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-13T14:17Z · amends Claim 6855513639
packages/lint/src/authoring-rules.ts, thelintFlowCredentialLiteralsregistry adapter only (~L2024). It re-maps each finding field by field and dropsuserTextParams, so the flow-credential-literal catalog entry would never reach the runtime gate. The edit is one conditional spread (userTextParams: f.userTextParams); no other entry and no other field changes. The PR names it, and a pin shows the save door renders that rule's sentence.origin/main2c98485d, not 27 (validate-action-body-writes4,validate-flow-trigger-readiness5). All 29 get catalog entries.Metadata-protocol: none(@objectstack/lintpatch) per 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's stated reading stands.objectstack-fleet commentedon Nov 13, 2026
domain:spec#2 · os-tesla · session_01L9qibymXZPShrjayTXHyCg
os-dev-report
{ "issue": 32836, "status": "done", "branch": "claude/project-thread-ltr3oq", "pr": "https://github.com/objectstack-ai/objectstack/pull/33120", "session": "session_01L9qibymXZPShrjayTXHyCg", "premise_still_valid": true, "summary": "Nineteen advisory rule ids that the save door returns on a flow write now carry userTextParams and a user sentence in all 11 PLATFORM_LOCALE_TAGS, in six *.user-text.ts catalogs merged into FINDING_USER_TEXT_CATALOG; rule ids, message and hint unchanged, and refusals sharing an id carry no params. The lintFlowCredentialLiterals adapter in authoring-rules.ts keeps userTextParams (amendment 6855561105). Re-measure: card table 27, static scan 29, 19 reach the door; under #32835's Done-when alternative the other 10 are named in Acceptance notes: (a) 9 hook/action body and readonly ids whose suite members default to the flow runtimeType while a flow snapshot carries no hooks or actions (gate rulesRun 1/1/14, none of these advisories), (b) email-template-hole-grammar's warning arm, off at the door because liveUniverse is true there. Every non-English sentence (19 ids x 10 locales) is agent-written and named for native review. Head 8b347e57, merged with main 7c36f524 once before the PR.", "tests": "pnpm --filter @objectstack/lint exec vitest run: 202 files, 8692 tests passed (post-merge). finding-user-text.test.ts 102 tests, 25 real-flow cases each rendered in 11 locales and run through runRuntimeAuthoringRules with RuntimeAuthoringIssueSchema parse; unsupported-type mock file 5 tests. Consumers: metadata-protocol 337 files passed / 7 skipped, 22799 tests passed / 36 skipped; objectql 595 files, 12789 tests passed; cli 4 files naming the ids, 63 tests passed; app-showcase author-time-advisories 2 passed. Ablations (committed first, ablation-replace restored to HEAD, git diff empty): authoring-rules.ts spread deleted -> 4 credential gate tests red; draft-status push-site params deleted -> 2 red. tsc --noEmit exit 0; lint typecheck VERDICT 0; check-cli-command-ids exit 0.", "gates": "dispatch-gates --commands derived 63 (identical at merged head), each run with </dev/null; --ran reconciliation: 63 derived, 63 run, 0 NOT-MEASURED, 0 UNRUN. First-sweep non-zeros: check:test-source-alias exit 1 (real: spec imports inside a clocked body in validate-approval-approvers.unsupported-type.test.ts; fixed af4e1c7c, rerun 0); check-plugin-teardown-shape --self-test exit 3 (shallow clone; fixture commit fetched, 0); check:docs-transcript-drift 1 and check:dts-closure 1 (ran during a closure build rewriting spec/dist; rerun 0); check:dual-build-cjs-loads 3 and check:lean-entry-closure 3 (no dist; after pnpm build, 0); check:type-check-debt 124 (my 600s timeout; rerun 0). PR check-runs at report time: Governed Surface Queue Guard success; the rest in progress (seat reads them).", "dogfood_battery": "n/a - no ! in the PR title and no (narrowing) arm", "mcp_calls": "1 - mcp__github__pull_request_read get_check_runs on #33120 (read); 0 writes", "api_writes": "3 - git push origin HEAD:claude/project-thread-ltr3oq (several pushes to the thread branch); relay pr_create (fleet-write run 43452084568, #33120, body read back identical, assignees os-tesla); this os-dev-report comment via post-stamped.mjs", "open_questions": [], "security_findings": "none", "out_of_scope_findings": [ "carrier: none - the 10 door-unreachable ids are named in the PR's Acceptance notes under #32835's Done-when alternative, not filed" ] }Generated by Claude Code
objectstack-fleet commentedon Nov 13, 2026
domain:spec#2 · os-tesla · session_01L9qibvfX5bawZKtfa6u7j9
Landed · 2026-11-13T17:04Z
a83c3667, landing head08d77c00(ACCEPT 6859034161; seat review of record, no path-derived contract-review mandate)Fixes #32836; 19 door-reaching ids carry a sentence; the 10 ids the publish door never returns stay on the Englishmessage(named in the PR's Acceptance notes, per #32835's Done-when alternative)State:
pm:dispatchedremoved.