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
Datasource driver forms: field labels and descriptions (Filename, Auto-migrate schema, Host, Port) are English in every console language #30563
Filing gate: ① product defect with a named landing, read in the tree and measured live. Filed by the domain:ui#5 seat from the out-of-scope finding of #30327's card thread, os-dev-report 6662619947 (#30327 asked for these labels in the console's language). Carrier: the server lane.
Business reason. An administrator in a Chinese console creating a datasource reads every driver field (Filename, Auto-migrate schema, Host, Port) and their help in English, beside Chinese text everywhere else in the dialog.
Reader. The server lane dev: the labels are the JSON-Schema title / description of packages/spec/src/data/driver/*.zod.ts, served by GET /api/v1/datasources/drivers (packages/services/service-datasource, driver-catalog.ts).
Measured
Live, zh console: the SQLite driver entry's fields read Filename and Auto-migrate schema, and the driver description is English.
The console draws what the drivers endpoint serves; it has no key of its own for these fields.
Expected
The drivers endpoint serves each field's label and description in the requester's language (or translation keys the console can resolve), so the dialog reads in one language.
The datasource driver form labels and help (Filename, Auto-migrate schema, Host, Port) are the English JSON-Schema title / description of packages/spec/src/data/driver/*.zod.ts, served by GET /api/v1/datasources/drivers, in every console language.
Claim: PM loop round 1 · 2026-11-05T21:35Z
Session: session_016WV4cytLmJxfAmgPVjUbbW
Account: os-elon-musk (the seat's linked user as GET /user answers it; the card's assignee)
Branch: the card thread's designated claude/project-thread-* branch, named in a claim amendment once the thread reports it
Worktree: objectstack-issue-30563
Domain: domain:server
Seat: domain:server#1
File surface: packages/services/service-datasource/src/driver-catalog.ts and the drivers endpoint (GET /api/v1/datasources/drivers) serving each driver field's label and description in the requester's language (or keys the console resolves), the translation values that serve them, their tests, one root .changeset/ file. ⛔ packages/spec/**: if the fix needs a spec key or a schema change, stop and report (spec lane)
Container & model: M, mode:thread, model: default (dispatch-gates --tier: no path-derived mandate; floor sonnet · default opus · ceiling fable), effort: high
Clause-②: no
Metadata-protocol: none
Responsibility: the datasource service's driver catalog (service-datasource, serves English JSON-Schema titles) | none (the console has no key of its own for these fields) | every administrator creating a datasource in a non-English console; measured live on the card (zh)
Thread-read: 6664790558
Premise: holds per the card's live measurement; the dev re-reads the drivers endpoint on origin/main first
Serial constraints cleared: none: no open PR touches service-datasource or the driver schemas (34 open PRs read at claim time)
席位核对 · Amendment · 2026-11-05T21:40Z · claim 6670164695 branch named
Branch: claude/project-thread-b5t886
The card thread's harness-designated branch (a project-thread platform exception to the claude/issue-<n>-<slug> convention); the dev thread is session session_016WV4czJVaL8SDBxjng4RLk. Everything else in claim 6670164695 stands.
{
"issue": 30563,
"status": "done",
"branch": "claude/project-thread-b5t886",
"pr": "https://github.com/objectstack-ai/objectstack/pull/30685",
"head": "b475fae0",
"session": "session_016WV4czJVaL8SDBxjng4RLk",
"premise_still_valid": true,
"summary": "Premise held on origin/main f4d568ba: GET /api/v1/datasources/drivers served the static English DRIVER_CATALOG (entry label/description from CURATED, field title/description from the spec's zod projection), and the console draws exactly those words, sending its own language as Accept-Language (createAuthenticatedFetch, html lang). The route now reads the requester's language (top Accept-Language tag, else a string ?locale, as the settings routes and REST metadata door do) and serves driverCatalogFor(locale), which negotiates through resolveLocaleAmong (@objectstack/spec/system, the ladder PR 30601 made shared) and overlays a service-local zh-CN table (driver-catalog-translations.ts) on the English catalog, copying the spec projection, never writing it. zh-CN covers all five offered drivers and every top-level field word; en, untranslated languages and untranslated words (product names) serve English, never a key. No spec key or schema change was needed.",
"tests": "pnpm --filter @objectstack/service-datasource test under os-verify-lock: Test Files 72 passed (72), Tests 1218 passed (1218), VERDICT command-exit 0 at b475fae0. Targeted: driver-catalog.test.ts + admin-routes.test.ts, 2 files 49 tests passed. typecheck VERDICT command-exit 0 (tsc --listFiles includes both changed test files). Ablations via scripts/ablation-replace.mjs (tests import src, no dist leg), each restored blob == HEAD and git diff HEAD empty: route ignores requester 1 failed/48; title overlay deleted 3 failed/46; schema written in place 3 failed/46.",
"gates": "dispatch-gates --commands --repo objectstack-ai/objectstack at b475fae0: 61 derived, all exit 0 (check-plugin-teardown-shape --self-test and check:dual-build-cjs-loads exited 3 first pass, re-run green after fetching the pinned fixture commit and a whole-tree build 119/119). --ran: 61 derived, 61 run, 0 NOT-MEASURED, 0 UNRUN. pnpm lint exit 0. check-commit-card-trailers --range origin/main..HEAD exit 0. PR check-runs: not yet reported at report time.",
"dogfood_battery": "n/a: no ! in the PR title and no (narrowing) arm",
"line_budget": "6 files, +420 -3 (source +100 incl. translations table 157 new, tests +156, changeset +10)",
"files_changed": [
".changeset/30563-driver-catalog-requester-language.md",
"packages/services/service-datasource/src/admin-routes.ts",
"packages/services/service-datasource/src/driver-catalog.ts",
"packages/services/service-datasource/src/driver-catalog-translations.ts",
"packages/services/service-datasource/src/__tests__/driver-catalog.test.ts",
"packages/services/service-datasource/src/__tests__/admin-routes.test.ts"
],
"deviations": "zh-CN only (the dialog's own studio strings exist in en and zh only; ja/es would make those dialogs mixed the other way). The route now reads ?locale= without declaring a closed query set (it had no query read before). PR body opens with the harness attribution block, not a seat signature line. No PR assignee and no reviewer request (standing lines).",
"mcp_calls": "4 — github issue_read x3 (get 30563, get_comments 30563, get 30504), pull_request_read x1 (get 30601); no MCP GitHub write",
"api_writes": "2 — relay pr_create (run 42121243692, PR 30685, 7548 bytes read back identical, assignees none, labels none); this os-dev-report via post-stamped. Plus git push x1 (not REST). REST reads: two issue comments via gh api (6662619947, 6670256081).",
"open_questions": [],
"security_findings": "none",
"out_of_scope_findings": [
"noted, not filed: a revised English field description in the spec leaves the zh-CN text stale; the coverage test catches added and removed fields, not revised wording · carrier: none",
"noted, not filed: GET /api/v1/datasources/drivers declares no closed query-parameter set (refuseUnknownQueryParams) and now reads ?locale · carrier: none"
]
}
{
"issue": 30563,
"round": "rework 1",
"status": "done",
"branch": "claude/project-thread-b5t886",
"pr": "https://github.com/objectstack-ai/objectstack/pull/30685",
"head": "2289fe00",
"session": "session_016WV4czJVaL8SDBxjng4RLk",
"premise_still_valid": true,
"summary": "Rework 1 per the seat review (one platform list of 11 languages, no tiers). DRIVER_CATALOG_TRANSLATIONS is now keyed by the platform locale table's tags and carries all ten non-English languages (zh-Hans, zh-Hant, es, ar, fr, pt-BR, ru, de, ja, ko) for every driver description, the memory label and every top-level field title/description; each language is written once as its distinct words and laid out per driver, technical terms and product names kept. The requested code is read through platformLocaleTagOf shortened one subtag at a time (the storage/test shape from PR 30627) in the new driverCatalogLocaleOf, replacing resolveLocaleAmong, whose first-variant step would hand zh-Hant-TW the Simplified text. The coverage describe walks PLATFORM_LOCALE_TAGS. The PR body is not edited by the dev: the round-1 body is at /mnt/project-files/server-lane-seat1/30563/pr-body-round1.md for the seat to write.",
"tests": "pnpm --filter @objectstack/service-datasource test under os-verify-lock at 2289fe00: Test Files 72 passed (72), Tests 1239 passed (1239), VERDICT command-exit 0. Targeted driver-catalog.test.ts + admin-routes.test.ts: 2 files, 70 passed. typecheck VERDICT command-exit 0. Ablations via scripts/ablation-replace.mjs, each restored blob == HEAD and git diff HEAD empty: route ignores requester 1 failed/69; title overlay deleted 4 failed/66; schema written in place 3 failed/67; subtag shortening removed 3 failed/67 (zh-Hant-TW, fr-CA/es-MX, route fr-FR).",
"gates": "dispatch-gates --commands at 2289fe00: 61 derived, all exit 0; --ran: 61 run, 0 NOT-MEASURED, 0 UNRUN. pnpm lint exit 0. check-commit-card-trailers exit 0 (2 commits). PR check-runs at 2289fe00: 48 total, 35 success, 13 skipped, 0 failed; required contexts TypeScript Type Check, Lint & Repo Gates, Test Core, Build Core, Governed Surface Queue Guard, Test UI, Live E2E UI success; Lint UI, Type Check UI, Build & E2E UI skipped by path. The round-0 TypeScript Type Check red at b475fae0 was the aggregator over the consumer-gates lane cancelled by this push (run 42121322456), not a type error.",
"dogfood_battery": "n/a: no ! in the PR title and no (narrowing) arm",
"line_budget": "6 files vs origin/main merge base: translations file 457 lines (10 languages), driver-catalog.ts +102, admin-routes.ts +19 -2, tests +~250, changeset +10",
"files_changed": [
".changeset/30563-driver-catalog-requester-language.md",
"packages/services/service-datasource/src/admin-routes.ts",
"packages/services/service-datasource/src/driver-catalog.ts",
"packages/services/service-datasource/src/driver-catalog-translations.ts",
"packages/services/service-datasource/src/__tests__/driver-catalog.test.ts",
"packages/services/service-datasource/src/__tests__/admin-routes.test.ts"
],
"deviations": "PR body not re-written by the dev (os-dev rule: body written once at pr_create); the round-1 body file is handed to the seat. Resolution uses platformLocaleTagOf with subtag shortening, not resolveLocaleAmong (named in the review as either), because resolveLocaleAmong answers zh-Hant-TW with the first zh variant.",
"mcp_calls": "0 this round (round 0: 4 reads); no MCP GitHub write",
"api_writes": "1 this round — this os-dev-report via post-stamped; plus git push x1. Round 0: pr_create + report comment 6671154488.",
"open_questions": [],
"security_findings": "none",
"out_of_scope_findings": [
"class: a · reach: New datasource dialog under Setup with the console in any table language other than en / zh-Hans; the dialog strings (studio namespace: title, Name, Display name, Driver, Schema mode and hints) exist only in ui/packages/i18n/src/namespaces/studio/en.ts and zh.ts, so the driver words now read in the console language inside an English dialog; read from the tree, not measured live · dedupe words: studio namespace locales, datasource dialog i18n, studio en zh only",
"noted, not filed: a revised English field description in the spec leaves every translation stale; the coverage test catches added and removed fields, not revised wording · carrier: none",
"noted, not filed: GET /api/v1/datasources/drivers declares no closed query-parameter set and reads ?locale · carrier: none"
]
}
Landed · 2026-11-05T23:39Z · PR #30685 merged by the queue as c35fed163a (2026-11-05T23:39Z), so the card closed by Fixes. This seat strips pm:dispatched in the same act.
Activity
objectstack-fleet commentedon Nov 5, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: none
Triage: audit · p2 ·
domain:server·area:i18n· 2026-11-05T17:33Z⛔ Not a claim.
title/descriptionofpackages/spec/src/data/driver/*.zod.ts, served byGET /api/v1/datasources/drivers, in every console language.Generated by Claude Code
objectstack-fleet commentedon Nov 5, 2026
domain:server#1 · os-elon-musk · session_016WV4cytLmJxfAmgPVjUbbW
Claim: PM loop round 1 · 2026-11-05T21:35Z
Session:
session_016WV4cytLmJxfAmgPVjUbbWAccount:
os-elon-musk(the seat's linked user asGET /useranswers it; the card's assignee)Branch: the card thread's designated
claude/project-thread-*branch, named in a claim amendment once the thread reports itWorktree:
objectstack-issue-30563Domain:
domain:serverSeat:
domain:server#1File surface:
packages/services/service-datasource/src/driver-catalog.tsand the drivers endpoint (GET /api/v1/datasources/drivers) serving each driver field's label and description in the requester's language (or keys the console resolves), the translation values that serve them, their tests, one root.changeset/file. ⛔packages/spec/**: if the fix needs a spec key or a schema change, stop and report (spec lane)Container & model:
M,mode:thread,model: default(dispatch-gates --tier: no path-derived mandate; floor sonnet · default opus · ceiling fable),effort: highClause-②: no
Metadata-protocol: none
Responsibility: the datasource service's driver catalog (
service-datasource, serves English JSON-Schema titles) | none (the console has no key of its own for these fields) | every administrator creating a datasource in a non-English console; measured live on the card (zh)Thread-read: 6664790558
Premise: holds per the card's live measurement; the dev re-reads the drivers endpoint on
origin/mainfirstSerial constraints cleared: none: no open PR touches
service-datasourceor the driver schemas (34 open PRs read at claim time)objectstack-fleet commentedon Nov 5, 2026
domain:server#1 · os-elon-musk · session_016WV4cytLmJxfAmgPVjUbbW
席位核对 · Amendment · 2026-11-05T21:40Z · claim 6670164695 branch named
Branch:
claude/project-thread-b5t886The card thread's harness-designated branch (a project-thread platform exception to the
claude/issue-<n>-<slug>convention); the dev thread is sessionsession_016WV4czJVaL8SDBxjng4RLk. Everything else in claim 6670164695 stands.objectstack-fleet commentedon Nov 5, 2026
domain:server#1 · os-elon-musk · session_016WV4czJVaL8SDBxjng4RLk
os-dev-report
{ "issue": 30563, "status": "done", "branch": "claude/project-thread-b5t886", "pr": "https://github.com/objectstack-ai/objectstack/pull/30685", "head": "b475fae0", "session": "session_016WV4czJVaL8SDBxjng4RLk", "premise_still_valid": true, "summary": "Premise held on origin/main f4d568ba: GET /api/v1/datasources/drivers served the static English DRIVER_CATALOG (entry label/description from CURATED, field title/description from the spec's zod projection), and the console draws exactly those words, sending its own language as Accept-Language (createAuthenticatedFetch, html lang). The route now reads the requester's language (top Accept-Language tag, else a string ?locale, as the settings routes and REST metadata door do) and serves driverCatalogFor(locale), which negotiates through resolveLocaleAmong (@objectstack/spec/system, the ladder PR 30601 made shared) and overlays a service-local zh-CN table (driver-catalog-translations.ts) on the English catalog, copying the spec projection, never writing it. zh-CN covers all five offered drivers and every top-level field word; en, untranslated languages and untranslated words (product names) serve English, never a key. No spec key or schema change was needed.", "tests": "pnpm --filter @objectstack/service-datasource test under os-verify-lock: Test Files 72 passed (72), Tests 1218 passed (1218), VERDICT command-exit 0 at b475fae0. Targeted: driver-catalog.test.ts + admin-routes.test.ts, 2 files 49 tests passed. typecheck VERDICT command-exit 0 (tsc --listFiles includes both changed test files). Ablations via scripts/ablation-replace.mjs (tests import src, no dist leg), each restored blob == HEAD and git diff HEAD empty: route ignores requester 1 failed/48; title overlay deleted 3 failed/46; schema written in place 3 failed/46.", "gates": "dispatch-gates --commands --repo objectstack-ai/objectstack at b475fae0: 61 derived, all exit 0 (check-plugin-teardown-shape --self-test and check:dual-build-cjs-loads exited 3 first pass, re-run green after fetching the pinned fixture commit and a whole-tree build 119/119). --ran: 61 derived, 61 run, 0 NOT-MEASURED, 0 UNRUN. pnpm lint exit 0. check-commit-card-trailers --range origin/main..HEAD exit 0. PR check-runs: not yet reported at report time.", "dogfood_battery": "n/a: no ! in the PR title and no (narrowing) arm", "line_budget": "6 files, +420 -3 (source +100 incl. translations table 157 new, tests +156, changeset +10)", "files_changed": [ ".changeset/30563-driver-catalog-requester-language.md", "packages/services/service-datasource/src/admin-routes.ts", "packages/services/service-datasource/src/driver-catalog.ts", "packages/services/service-datasource/src/driver-catalog-translations.ts", "packages/services/service-datasource/src/__tests__/driver-catalog.test.ts", "packages/services/service-datasource/src/__tests__/admin-routes.test.ts" ], "deviations": "zh-CN only (the dialog's own studio strings exist in en and zh only; ja/es would make those dialogs mixed the other way). The route now reads ?locale= without declaring a closed query set (it had no query read before). PR body opens with the harness attribution block, not a seat signature line. No PR assignee and no reviewer request (standing lines).", "mcp_calls": "4 — github issue_read x3 (get 30563, get_comments 30563, get 30504), pull_request_read x1 (get 30601); no MCP GitHub write", "api_writes": "2 — relay pr_create (run 42121243692, PR 30685, 7548 bytes read back identical, assignees none, labels none); this os-dev-report via post-stamped. Plus git push x1 (not REST). REST reads: two issue comments via gh api (6662619947, 6670256081).", "open_questions": [], "security_findings": "none", "out_of_scope_findings": [ "noted, not filed: a revised English field description in the spec leaves the zh-CN text stale; the coverage test catches added and removed fields, not revised wording · carrier: none", "noted, not filed: GET /api/v1/datasources/drivers declares no closed query-parameter set (refuseUnknownQueryParams) and now reads ?locale · carrier: none" ] }objectstack-fleet commentedon Nov 5, 2026
domain:server#1 · os-elon-musk · session_016WV4czJVaL8SDBxjng4RLk
os-dev-report
{ "issue": 30563, "round": "rework 1", "status": "done", "branch": "claude/project-thread-b5t886", "pr": "https://github.com/objectstack-ai/objectstack/pull/30685", "head": "2289fe00", "session": "session_016WV4czJVaL8SDBxjng4RLk", "premise_still_valid": true, "summary": "Rework 1 per the seat review (one platform list of 11 languages, no tiers). DRIVER_CATALOG_TRANSLATIONS is now keyed by the platform locale table's tags and carries all ten non-English languages (zh-Hans, zh-Hant, es, ar, fr, pt-BR, ru, de, ja, ko) for every driver description, the memory label and every top-level field title/description; each language is written once as its distinct words and laid out per driver, technical terms and product names kept. The requested code is read through platformLocaleTagOf shortened one subtag at a time (the storage/test shape from PR 30627) in the new driverCatalogLocaleOf, replacing resolveLocaleAmong, whose first-variant step would hand zh-Hant-TW the Simplified text. The coverage describe walks PLATFORM_LOCALE_TAGS. The PR body is not edited by the dev: the round-1 body is at /mnt/project-files/server-lane-seat1/30563/pr-body-round1.md for the seat to write.", "tests": "pnpm --filter @objectstack/service-datasource test under os-verify-lock at 2289fe00: Test Files 72 passed (72), Tests 1239 passed (1239), VERDICT command-exit 0. Targeted driver-catalog.test.ts + admin-routes.test.ts: 2 files, 70 passed. typecheck VERDICT command-exit 0. Ablations via scripts/ablation-replace.mjs, each restored blob == HEAD and git diff HEAD empty: route ignores requester 1 failed/69; title overlay deleted 4 failed/66; schema written in place 3 failed/67; subtag shortening removed 3 failed/67 (zh-Hant-TW, fr-CA/es-MX, route fr-FR).", "gates": "dispatch-gates --commands at 2289fe00: 61 derived, all exit 0; --ran: 61 run, 0 NOT-MEASURED, 0 UNRUN. pnpm lint exit 0. check-commit-card-trailers exit 0 (2 commits). PR check-runs at 2289fe00: 48 total, 35 success, 13 skipped, 0 failed; required contexts TypeScript Type Check, Lint & Repo Gates, Test Core, Build Core, Governed Surface Queue Guard, Test UI, Live E2E UI success; Lint UI, Type Check UI, Build & E2E UI skipped by path. The round-0 TypeScript Type Check red at b475fae0 was the aggregator over the consumer-gates lane cancelled by this push (run 42121322456), not a type error.", "dogfood_battery": "n/a: no ! in the PR title and no (narrowing) arm", "line_budget": "6 files vs origin/main merge base: translations file 457 lines (10 languages), driver-catalog.ts +102, admin-routes.ts +19 -2, tests +~250, changeset +10", "files_changed": [ ".changeset/30563-driver-catalog-requester-language.md", "packages/services/service-datasource/src/admin-routes.ts", "packages/services/service-datasource/src/driver-catalog.ts", "packages/services/service-datasource/src/driver-catalog-translations.ts", "packages/services/service-datasource/src/__tests__/driver-catalog.test.ts", "packages/services/service-datasource/src/__tests__/admin-routes.test.ts" ], "deviations": "PR body not re-written by the dev (os-dev rule: body written once at pr_create); the round-1 body file is handed to the seat. Resolution uses platformLocaleTagOf with subtag shortening, not resolveLocaleAmong (named in the review as either), because resolveLocaleAmong answers zh-Hant-TW with the first zh variant.", "mcp_calls": "0 this round (round 0: 4 reads); no MCP GitHub write", "api_writes": "1 this round — this os-dev-report via post-stamped; plus git push x1. Round 0: pr_create + report comment 6671154488.", "open_questions": [], "security_findings": "none", "out_of_scope_findings": [ "class: a · reach: New datasource dialog under Setup with the console in any table language other than en / zh-Hans; the dialog strings (studio namespace: title, Name, Display name, Driver, Schema mode and hints) exist only in ui/packages/i18n/src/namespaces/studio/en.ts and zh.ts, so the driver words now read in the console language inside an English dialog; read from the tree, not measured live · dedupe words: studio namespace locales, datasource dialog i18n, studio en zh only", "noted, not filed: a revised English field description in the spec leaves every translation stale; the coverage test catches added and removed fields, not revised wording · carrier: none", "noted, not filed: GET /api/v1/datasources/drivers declares no closed query-parameter set and reads ?locale · carrier: none" ] }objectstack-fleet commentedon Nov 5, 2026
domain:server#1 · os-elon-musk · session_016WV4cytLmJxfAmgPVjUbbW
ACCEPT → PR #30685 comment 6671985961 · head
2289fe00· ready + auto-merge set 2026-11-05T23:14Zobjectstack-fleet commentedon Nov 5, 2026
domain:server#1 · os-elon-musk · session_016WV4cytLmJxfAmgPVjUbbW
Landed · 2026-11-05T23:39Z · PR #30685 merged by the queue as
c35fed163a(2026-11-05T23:39Z), so the card closed byFixes. This seat stripspm:dispatchedin the same act.