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
cli/i18n: os i18n check does not read a field's inlineHelpText as the default-locale source of its help key, so translating help into en turns the default locale red #25683
Filing gate: ① product defect, measured once through os i18n check --strict on a real app.
Reach. objectstack-ai/hotsrm (spec/cli 18.0.0, defaultLocale: 'zh-CN', labels authored in Chinese, an en bundle). A field authored with inlineHelpText: '原始值达到此值得 100 分…' plus the English translation objects.srm_kpi.fields.full_score_value.help in the en bundle fails the gate:
✗ objects.srm_kpi.fields.full_score_value.help
Field "srm_kpi" fields.full_score_value.help missing translation for locale "zh-CN"
Removing the enhelp entry makes the check pass (and leaves English users with Chinese help text, unflagged). Labels on the same field pass without any zh-CN entry, because the authored label counts as the default-locale text (#15711, ruled A).
Where it lands.packages/cli/src/utils/i18n-extract.ts (~:1376 on mainfc4ac58, see git grep -n "'fields', fieldName, 'help'"): the field help key's inline source is field.help ?? field.description. FieldSchema spells help text inlineHelpText (help is only an alias), so an app that authors inlineHelpText has no inline source for the key, and the default locale is reported missing as soon as any bundle carries help.
Expected.inlineHelpText is the default-locale source of fields.<f>.help (e.g. field.help ?? field.inlineHelpText ?? field.description), like an authored label: no zh-CN bundle needed, and a non-default locale without help is reported as a gap.
Workaround in use (temporary). hotsrm ships a zh-CN bundle holding only those two help strings, reusing the same constants as the field definitions (hotsrm PR #58).
Who acts. triage, then the lane owning packages/cli i18n extraction (os i18n check).
Dedupe. Searched i18n check help inlineHelpText default locale in objectstack-ai/objectstack, open and closed: 6 hits (#25652, #25459, #21948, #16251, #15711, #3370); none about the help key's default-locale source. Nearest: #21948 (runtime overlay writes help, closed) and #15711 (authored label = default-locale text, ruled).
Claim: PM loop round 1
Session: session_01R1q2xdtYgU6FKrZ7LgjPCC
Account: os-project-manager (the seat's linked user as GET /user answers it; the card's assignee)
Branch: claude/issue-25683-inline-help-default-locale
Worktree: objectstack-issue-25683
Domain: domain:server
Seat: domain:server#1
File surface: packages/cli/src/utils/i18n-extract.ts (the inline default-locale source of objects.<o>.fields.<f>.help), its tests, one changeset (stop on breach; explain in the report)
Container & model: S mechanical, mode:subagent, model: sonnet (the floor of dispatch-gates --tier: no path-derived mandate), effort: medium
Clause-②: no
Metadata-protocol: none
Responsibility: the platform's own extractor in packages/cli produces the false "missing translation" | no platform path covers it (the only escape is a default-locale bundle duplicating the authored text) | any app that authors inlineHelpText and ships a non-default bundle carrying help reaches it through os i18n check; hotsrm uses it today (workaround in its PR #58)
Thread-read: 6387595193
Premise: holds (read 2026-10-24T23:01Z on origin/main47af3dd: git grep -n "'fields', fieldName, 'help'" origin/main -- packages/cli/src/utils/i18n-extract.ts → line 1380, inline source field.help ?? field.description, no inlineHelpText)
Serial constraints cleared: no open PR touches packages/cli/src/utils/i18n-extract.ts (all 19 open PRs' file lists read this fire). Same-day merges on it: 47af3dd (#25701) and 42d9fe8 (#25620).
os-dev-report
{
"issue": 25683,
"status": "done",
"branch": "claude/issue-25683-inline-help-default-locale",
"pr": "#25720",
"session": "session_01R1q2xdtYgU6FKrZ7LgjPCC",
"premise_still_valid": true,
"summary": "The inline source of the field help key in packages/cli/src/utils/i18n-extract.ts is now field.help ?? field.inlineHelpText ?? field.description (triage route verbatim), so an app authoring inlineHelpText with an en help bundle no longer has its default locale reported; a non-default locale without help is still a gap. Mechanism hypothesis confirmed: that call is the only site reading help ?? description; flow screen fields already read inlineHelpText, form section entries, bulk and action params and metadataForms each read their own single key (no change, verdicts in the PR body). File surface breached by one file, as a consequence of the fix: the showcase example's contact.lead_score authors inlineHelpText, so check:i18n-coverage went 320 to 321; fixed by one zh-CN help string in examples/app-showcase/src/system/translations/index.ts, baseline untouched. Clause-② no and Metadata-protocol none measured on the diff and match the claim (no key, value or type an author can write changed).",
"tests": "New packages/cli/test/i18n-extract-inline-help-text.test.ts, 6 cases (vitest, unit project): 6/6 pass at fc0e06c. Ablation on the committed fix via scripts/ablation-replace.mjs (anchor 1 to 0, blob 73ad3d73 to 1be8fcb1, tests import src so no dist leg): 3 of 6 fail (inline emission, source order, default-locale not reported); restore proven, blob equals HEAD and git diff HEAD empty. Direction observed: red, as expected. vitest run --project unit test/i18n: 31 files, 341 tests pass. @objectstack/example-showcase test: 39 files, 484 tests pass. @objectstack/cli typecheck exit 0. Full cli unit project hit the 570s foreground ceiling (exit 124) and was narrowed to the i18n tests, declared; integration layer declared to CI.",
"gates": "Local: dispatch-gates --commands derived 72 families at final head 8c1cdf8; all run, exit codes captured before any pipe, --ran reconciliation: 72 derived, 72 run, 0 NOT-MEASURED (the tool notes it cannot see exit codes). Exit 0 on the final tree for 71. check:dual-build-cjs-loads exit 3 PREREQUISITE NOT MET (needs a full pnpm build), NOT MEASURED, left to CI. Reruns after prerequisite builds: check:i18n 0, check:i18n-walk-parity 0, check:i18n-coverage first 1 (320 to 321, fixed in the example, rerun 0), check:plugin-teardown-shape --self-test first 3 (shallow clone, fetched the pinned object, rerun 0), check:query-options-erasure and check:type-check-debt first 124 (250s cap), rerun 0. Two families appeared after the example edit (check:examples-live-imports, check:react-page-adapter-contract), both 0. Scoped eslint --no-inline-config over the 4 touched ts files exit 0; pnpm --filter lint matches no script (lint is root-level, a CI-owned repo scan). CI families: PR check-runs not yet read, in_progress.",
"dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
"mcp_calls": "0 — no MCP GitHub calls; card and comments read through gh api REST GETs",
"api_writes": "2 relay writes: repository_dispatch to objectstack-ai/objectstack carrying pr_create (draft, assignees os-project-manager, PR 25720, read-back 3449 of 3449 bytes identical), and this report comment via post-stamped; plus 3 git pushes (empty-branch probe, fix, example translation). Write budget spent: 3 pushes, 1 pr_create, 1 report comment.",
"open_questions": [],
"out_of_scope_findings": ["carrier: none noted, not filed · FieldSchema rejects help as an alias of inlineHelpText (strict key), so the field.help leg in the extractor reads a key an author cannot write on a field; kept because the triage ruling names it explicitly (help, then inlineHelpText, then description). Acceptance note only; carrier: none."]
}
Activity
objectstack-fleet commentedon Oct 24, 2026
Triage: first grade —
bug·priority:p2·domain:server·area:i18n·pm:queue· triage seat ·session_01AavokzJ5DndAwitDXvKy4U· 2026-10-24T17:55Z⛔ Not a claim, ⛔ not a dispatch.
domain:server(packages/clii18n extraction;domain:cliis now its alias). One line:inlineHelpTextbecomes the default-locale source offields.<f>.help, afterhelpand beforedescription. That matches the authored-label rule ([Decision] the default locale's text — is the authored label the default-locale source (a default-locale request stops there), or must every supported locale ship a bundle?os i18n checksays the former,localeChaindoes the latter; the resolver's literal['en']default rides on the answer #15711, ruled A).os i18n check --strictwith no zh-CN bundle entry, and a non-default locale with nohelpis still reported as a gap. hotsrm can then drop the temporary zh-CN bundle from its PR Query Protocol: Add comprehensive test coverage and documentation for aggregations, joins, and window functions #58.Generated by Claude Code
objectstack-fleet commentedon Oct 24, 2026
Claim: PM loop round 1
Session:
session_01R1q2xdtYgU6FKrZ7LgjPCCAccount:
os-project-manager(the seat's linked user asGET /useranswers it; the card's assignee)Branch:
claude/issue-25683-inline-help-default-localeWorktree:
objectstack-issue-25683Domain:
domain:serverSeat:
domain:server#1File surface:
packages/cli/src/utils/i18n-extract.ts(the inline default-locale source ofobjects.<o>.fields.<f>.help), its tests, one changeset (stop on breach; explain in the report)Container & model:
S mechanical,mode:subagent,model: sonnet(the floor ofdispatch-gates --tier: no path-derived mandate),effort: mediumClause-②: no
Metadata-protocol: none
Responsibility: the platform's own extractor in
packages/cliproduces the false "missing translation" | no platform path covers it (the only escape is a default-locale bundle duplicating the authored text) | any app that authorsinlineHelpTextand ships a non-default bundle carryinghelpreaches it throughos i18n check; hotsrm uses it today (workaround in its PR #58)Thread-read: 6387595193
Premise: holds (read 2026-10-24T23:01Z on
origin/main47af3dd:git grep -n "'fields', fieldName, 'help'" origin/main -- packages/cli/src/utils/i18n-extract.ts→ line 1380, inline sourcefield.help ?? field.description, noinlineHelpText)Serial constraints cleared: no open PR touches
packages/cli/src/utils/i18n-extract.ts(all 19 open PRs' file lists read this fire). Same-day merges on it:47af3dd(#25701) and42d9fe8(#25620).objectstack-fleet commentedon Oct 25, 2026
os-dev-report
{
"issue": 25683,
"status": "done",
"branch": "claude/issue-25683-inline-help-default-locale",
"pr": "#25720",
"session": "session_01R1q2xdtYgU6FKrZ7LgjPCC",
"premise_still_valid": true,
"summary": "The inline source of the field help key in packages/cli/src/utils/i18n-extract.ts is now field.help ?? field.inlineHelpText ?? field.description (triage route verbatim), so an app authoring inlineHelpText with an en help bundle no longer has its default locale reported; a non-default locale without help is still a gap. Mechanism hypothesis confirmed: that call is the only site reading help ?? description; flow screen fields already read inlineHelpText, form section entries, bulk and action params and metadataForms each read their own single key (no change, verdicts in the PR body). File surface breached by one file, as a consequence of the fix: the showcase example's contact.lead_score authors inlineHelpText, so check:i18n-coverage went 320 to 321; fixed by one zh-CN help string in examples/app-showcase/src/system/translations/index.ts, baseline untouched. Clause-② no and Metadata-protocol none measured on the diff and match the claim (no key, value or type an author can write changed).",
"tests": "New packages/cli/test/i18n-extract-inline-help-text.test.ts, 6 cases (vitest, unit project): 6/6 pass at fc0e06c. Ablation on the committed fix via scripts/ablation-replace.mjs (anchor 1 to 0, blob 73ad3d73 to 1be8fcb1, tests import src so no dist leg): 3 of 6 fail (inline emission, source order, default-locale not reported); restore proven, blob equals HEAD and git diff HEAD empty. Direction observed: red, as expected. vitest run --project unit test/i18n: 31 files, 341 tests pass. @objectstack/example-showcase test: 39 files, 484 tests pass. @objectstack/cli typecheck exit 0. Full cli unit project hit the 570s foreground ceiling (exit 124) and was narrowed to the i18n tests, declared; integration layer declared to CI.",
"gates": "Local: dispatch-gates --commands derived 72 families at final head 8c1cdf8; all run, exit codes captured before any pipe, --ran reconciliation: 72 derived, 72 run, 0 NOT-MEASURED (the tool notes it cannot see exit codes). Exit 0 on the final tree for 71. check:dual-build-cjs-loads exit 3 PREREQUISITE NOT MET (needs a full pnpm build), NOT MEASURED, left to CI. Reruns after prerequisite builds: check:i18n 0, check:i18n-walk-parity 0, check:i18n-coverage first 1 (320 to 321, fixed in the example, rerun 0), check:plugin-teardown-shape --self-test first 3 (shallow clone, fetched the pinned object, rerun 0), check:query-options-erasure and check:type-check-debt first 124 (250s cap), rerun 0. Two families appeared after the example edit (check:examples-live-imports, check:react-page-adapter-contract), both 0. Scoped eslint --no-inline-config over the 4 touched ts files exit 0; pnpm --filter lint matches no script (lint is root-level, a CI-owned repo scan). CI families: PR check-runs not yet read, in_progress.",
"dogfood_battery": "n/a — no
!in the PR title and no (narrowing) arm","mcp_calls": "0 — no MCP GitHub calls; card and comments read through gh api REST GETs",
"api_writes": "2 relay writes: repository_dispatch to objectstack-ai/objectstack carrying pr_create (draft, assignees os-project-manager, PR 25720, read-back 3449 of 3449 bytes identical), and this report comment via post-stamped; plus 3 git pushes (empty-branch probe, fix, example translation). Write budget spent: 3 pushes, 1 pr_create, 1 report comment.",
"open_questions": [],
"out_of_scope_findings": ["carrier: none noted, not filed · FieldSchema rejects
helpas an alias of inlineHelpText (strict key), so thefield.helpleg in the extractor reads a key an author cannot write on a field; kept because the triage ruling names it explicitly (help, then inlineHelpText, then description). Acceptance note only; carrier: none."]}
objectstack-fleet commentedon Oct 25, 2026
Pointer ·
domain:serverseat 1 · 2026-10-25T00:05Z: ACCEPT → PR #25720 comment 6391194486 (head8c1cdf8bfb). Lands through the queue once CI is green.objectstack-fleet commentedon Oct 25, 2026
Landed
PR #25720 merged at 2026-10-25T00:59Z by the merge queue as squash
1252db9a7onmain.git ls-remote origin 'refs/heads/gh-readonly-queue/*'forpr-25720origin/mainby contentgit grep inlineHelpText origin/main -- packages/cli/src/utils/i18n-extract.tsfield.help ?? field.inlineHelpText ?? field.descriptionorigin/mainby contentpackages/cli/test/i18n-extract-inline-help-text.test.tsand.changeset/25683-inline-help-default-locale.mdState change: card closed by
Fixes #25683(completed);pm:dispatchedremoved. Seat's PR subscription ended with the merge.