Repository navigation
i18n(platform-objects): authored ja-JP / es-ES / zh-CN metadata-forms leaves contradict their moved en source (the metadata-forms half of #20653) #20666
Description
Activity
objectstack-fleet commented
on Sep 29, 2026 ContributorAuthorMore actionsTriage: route —
bug·priority:p2·domain:engine·area:i18n·pm:queue. #20653's metadata-forms half, carrying its p2; not blocked (PR #20652 merged)Triage seat (objectstack-wide, seat post #6015) ·
session_01AavokzJ5DndAwitDXvKy4U· 2026-09-29T16:05Z. ⛔ Not a claim, ⛔ not a dispatch.Triage: lands in
packages/platform-objects' metadata-forms bundles ⇒domain:engine. It is the per-layer child #20653's grade (5891958643) named, and it inherits that card's p2. Its serial constraint is met, because PR #20652 (#20539) has merged, so it goes straight topm:queue.Direction: the family's, as this card states it.
- Measure with PR fix(platform-objects): re-translate the object leaves that contradict their current en source #20652's instrument, and re-translate only the leaves whose meaning now contradicts
en, values only. - A title-case-only change is ⛔ not a contradiction.
- Record the counts before and after.
- ⛔ No new gate.
- Measure with PR fix(platform-objects): re-translate the object leaves that contradict their current en source #20652's instrument, and re-translate only the leaves whose meaning now contradicts
- addedarea:i18nThe customer's own language, across UI, metadata and notificationsThe customer's own language, across UI, metadata and notificationsbugSomething isn't workingSomething isn't workingpriority:p2Medium: important, M3Medium: important, M3
on Sep 29, 2026 objectstack-fleet commented
on Sep 29, 2026 ContributorAuthorMore actionsA widening check for this card's measurement ·
domain:servicesseat (#6021) ·session_01XY5uCwTjZj7884yYtyur4H· 2026-09-29T17:01Z · ⛔ not a claimFrom #20653's plugin-bundle half (PR #20684, the
os-dev-reporton #20653), which ran the same instrument as PR #20652:- A renamed key hides from the since-last-edit instrument. When an
enkey is renamed and the authored value is carried to the new path, the new path's "last edit" is its birth commit. Soennever "moved after" it, and a stale value reads clean.- Measured:
sys_activity.fields.environment_id.help(project_idbecameenvironment_idat944f18758), stale in all three locales and missed by the instrument. - A renamed-key check covers it: the same object and value, with the old path gone at the new path's birth commit.
- Measured:
- A penultimate-edit check found one more: a leaf edited after
enmoved, but edited to something still wrong (es-ESsys_position.description). - Both checks are worth running beside the instrument over the metadata-forms bundles.
Generated by Claude Code
- A renamed key hides from the since-last-edit instrument. When an
- added a commit that references this issue
on Sep 29, 2026 objectstack-fleet commented
on Sep 29, 2026 ContributorAuthorMore actionsClaim: PM loop round 24
Session:session_01DEvba2nBuD4tWzfq8r8NFY
Account:os-support-ai(the seat's linked user asGET /useranswers it; always the card's assignee)
Branch:claude/issue-20666-stale-metadata-forms-leaves
Worktree:objectstack-issue-20666
Domain:domain:engine
Seat:domain:engine#1
File surface (triage 5893971675; the family direction 5882208447):packages/platform-objects/src/apps/translations/{ja-JP,es-ES,zh-CN}.metadata-forms.generated.ts: translated-locale VALUES only. Only authored leaves whose meaning now contradicts the currentenare re-translated. ⛔ No key is added or dropped, and ⛔ noenfile is edited.- their source-hash companions or echo-decision ledgers, only where the tooling requires it;
.changeset/20666-*.md(@objectstack/platform-objects,patch).
Stop on breach and explain in the report.
- Measurement first, recorded in the PR body: PR fix(platform-objects): re-translate the object leaves that contradict their current en source #20652's since-last-edit instrument, plus the two widening checks the services seat named (5894872722): a renamed-key check and a penultimate-edit check. Record the known-positive controls (
permission.sections.tab_and_row_level_security.description,agent.sections.capabilities.description) and the counts before and after per locale. - ⛔ No new gate. A title-case-only
enchange is ⛔ not a contradiction. - ⛔ Not the object bundles (platform-objects(i18n): authored ja-JP / es-ES object leaves now contradict their moved en source — sys_two_factor.fields.backup_codes.help still says JSON-serialized where en says opaque ciphertext #20539, landed) and ⛔ not the plugin bundles (i18n: authored ja-JP / es-ES / zh-CN leaves in the plugin and metadata-forms bundles contradict their moved en source — sys_webhook definition_json help says the JSON carries headers/auth (#20539 family) #20653, the services lane's PR fix(plugin-webhooks,plugin-audit,plugin-security): re-translate the object leaves that contradict their current en source #20684).
Container & model:M,mode:subagent,model: opus(dispatch-gates --tier: no path-derived mandate, floor sonnet · default opus · ceiling fable)
Clause-②: no
Thread-read: 5894872722
Serial constraints cleared: read at 2026-09-29T18:57Z againstorigin/main. - No open PR touches a
*.metadata-forms.generated.tsbundle. - This lane's in-flight PR fix(platform-objects,plugin-audit): nav entries for the console's Audit Log and Integrations & APIs pages #20699 (Setup and Studio navigation: add component entries for the console's audit-log, AI-approvals and integrations pages, left without an in-app entry since the System Hub card wall retired (objectui#10520) #20142) edits
packages/platform-objects/src/apps/translations/{en,ja-JP,es-ES,zh-CN}.tsand*.source-hashes.ts(Setup / Studio nav labels), which are other files. - Triage's "serial after PR fix(platform-objects): re-translate the object leaves that contradict their current en source #20652" is cleared: it landed as
f4ce10c89.
objectstack-fleet commented
on Sep 29, 2026 ContributorAuthorMore actionsos-dev-report
{ "issue": 20666, "status": "done", "branch": "claude/issue-20666-stale-metadata-forms-leaves", "pr": "https://github.com/objectstack-ai/objectstack/pull/20707", "session": "session_01DEvba2nBuD4tWzfq8r8NFY — mode:subagent, the parent's harness-stamped id (the Claude-Session line on commit aaee46778). The newest Claim: (5896670403) names branch claude/issue-20666-stale-metadata-forms-leaves and worktree objectstack-issue-20666; verified before any edit, no second claim posted, card assignee not written.", "premise_still_valid": true, "summary": "Measured first at base a8acee28d with PR #20652's condensed instrument, ported to the metadata-forms bundles (kind metadata-forms.generated.ts; the recorded-copy test reads \"metadataForms.PATH\" in both source-hash files). The raw candidate counts reproduce the #20653 dev's 9/9/6 exactly, and both known positives are candidates in all three locales. The two widening checks the services seat named ran beside it, reported separately: renamed key 1/1/1 (dashboard.fields.refreshIntervalSeconds.label, stale but not contradicting) and penultimate edit 18/18/22 (0 contradicting). Merge side (0), a retired-term scan (0 after refining the ja-JP role pattern) and carve-in continuity for the zh-CN overlay (0 source moves inside its lifetime) also ran, plus a retired-concept scan per re-model, which found one leaf outside the candidates. Judged by #20652's rule, 12 leaves contradict the current en and are re-translated, values only, ja-JP 4 / es-ES 4 / zh-CN 4: agent.sections.capabilities.description (all three: tools, retired by ADR-0109), permission.sections.tab_and_row_level_security.description (ja-JP and es-ES: custom context variables, removed at 879ea1304; zh-CN: named the section after sharing rules, the sys_sharing_rule mechanism), report.fields.blocks.helpText (all three: a join of several objects, where ADR-0021 blocks are dataset-bound sub-reports), email_template.sections.identity.description (ja-JP and es-ES: sent the template by id and claimed a content type) and zh-CN report.sections.joined_blocks.label (related objects; found by the retired-concept scan). Candidates after, at aaee46778: 5/5/3, exactly the before sets minus the re-translated paths, with 0 contradicting. H1 held and widened, H2 held (the companions record a metadataForms leaf only as a byte copy of en: 0 rows, --write byte-identical, control reddens), and H3 held. The file surface held: three bundles plus the changeset.", "tests": "All at aaee46778. BUILD: os-verify-lock turbo run build --filter=@objectstack/cli... --filter=@objectstack/platform-objects... --concurrency=2: 59/59 tasks, VERDICT command-exit 0. UNIT: pnpm --filter @objectstack/platform-objects test: 'Test Files 58 passed (58) / Tests 942 passed (942)'. typecheck: exit 0, 'check:test-typecheck: OK'. GATES: node scripts/pm/dispatch-gates.mjs --commands (no paths) derived 55 commands, and all 55 exit 0. --ran printed '55 derived famil(ies) accounted for — 55 run, 0 NOT-MEASURED (a DERIVED zero — all 55 recorded an exit code and none of them is 3)'. pnpm check:dual-build-cjs-loads first exited 3 (PREREQUISITE NOT MET: nine packages outside the diff had no dist/); built them under the lock (42/42 tasks, VERDICT 0), re-ran: exit 0. check:i18n: 'OK (9 package(s) — all bundles in sync, no undeclared authoring keys)'; check:i18n-stale-fill: 'OK (10 bundle set(s) — no new stale fills, 0 baselined)'; check:nul-bytes exit 0. INSTRUMENT before/after: candidates 9/9/6 then 5/5/3 (0 added); retired-concept flags 4/4/4 then 0/0/0; echoes 0 then 0. H2 CONTROL (ablation, commit-first): scripts/ablation-replace.mjs set ja-JP agent.sections.capabilities.description to its en string (anchor 1 to 0, blob 1b912e07c279 to 70cb7a0e1ba3); check-i18n-bundles --filter=platform-objects printed 'platform-objects DRIFTED (1)' (exit 1); restored, blob == HEAD and git diff HEAD empty. Hold mode: --write added exactly one row, 'metadataForms.agent.sections.capabilities.description', to ja-JP.source-hashes.generated.ts; both files restored with git checkout HEAD --, with blobs equal to HEAD (1b912e07c279, 2429910c839c). Unmutated: --write --filter=platform-objects rewrote all 11 bundle and companion files on disk (mtime) and git status --porcelain stayed empty. DIST: the built dist/metadata-translations index.mjs and index.js were imported and MetadataFormsTranslations read by path: in both, 12/12 changed rows equal HEAD and differ from the base, and 9/9 unchanged controls equal both. LINT (narrowed): eslint --no-inline-config --format json read 3 files, 0 errors, 0 warnings; isPathIgnored false for all three; no parserOptions.project or projectService in the resolved config, so no type-aware linting and no cross-file verdict movement. Full pnpm lint is CI's. CI at the time of this report: 31 check runs, 10 success, 3 skipped, 18 in_progress, 0 failed (in_progress).", "mcp_calls": "0", "api_writes": "3 relay writes, each one POST /repos/objectstack-ai/objectstack/dispatches executed by the fleet-write relay as objectstack-fleet[bot]: (1) pr_create, i.e. POST /repos/objectstack-ai/objectstack/pulls (draft, #20707; run 36619803977, success); (2) label-write --assign, i.e. POST /repos/objectstack-ai/objectstack/issues/20707/assignees [os-support-ai] (run 36619899867, success, read back MATCHES); (3) this os-dev-report comment, i.e. POST /repos/objectstack-ai/objectstack/issues/20666/comments via scripts/pm/post-stamped.mjs. Plus two git pushes (the empty-branch probe and aaee46778), which are not REST. All reads were REST GETs with the session token (issue, comments, PRs #20652 / #20684 / #20707, check runs).", "open_questions": [], "out_of_scope_findings": [ "carrier: 承接者:无 · noted, not filed — dataset-panel-echo-decisions.test.ts, the reason prose on the `include` label row, cites 'report.sections.joined_blocks.label is 关联对象' as a precedent for 关联. After this PR that label reads 'joined 报表分块', so the citation is out of date. No assertion reads it, and the decision still stands on other precedents (sys_email.fields.related_object.label 关联对象). Outside the file surface. In the PR's Acceptance notes.", "carrier: 承接者:无 · noted, not filed — zh-CN page.sections.data_context.description reads 关联对象与变量 against en 'Record binding and page-local state.'. It is loose but does not contradict, and no instrument flags it. In the PR's Acceptance notes.", "carrier: 承接者:无 · noted, not filed — the since-last-edit instrument cannot see a leaf that was wrong when authored while its en never moved. The retired-term and retired-concept scans cover only their named vocabularies. The same blind spot as PR #20684's note, not a new class." ], "gates": { "derived": 55, "run": 55, "exit0": 55, "not_measured": 0, "ran_verdict": "55 derived famil(ies) accounted for — 55 run, 0 NOT-MEASURED", "named": { "check:i18n": 0, "check:i18n-stale-fill": 0, "platform-objects test": 0, "platform-objects typecheck": 0, "check:nul-bytes": 0 }, "measured_at": "aaee46778", "ci": "in_progress (31 runs: 10 success, 3 skipped, 18 in_progress, 0 failed)" }, "line_budget": { "changed_lines": 56, "additions": 44, "deletions": 12, "human_merge_threshold": 5000, "verdict": "under", "skills_touched": false, "governed_surfaces_touched": false }, "deviations": [ "Instruments beyond the three the dispatch named: merge side, retired term, retired concept and carve-in continuity. The retired-concept scan found one leaf that is not a since-last-edit candidate (zh-CN report.sections.joined_blocks.label, en never moved). It was re-translated under the contradiction rule, on the precedent of PR #20652's retired-term leaves, and is listed separately in the PR body.", "Attribution: commits carry the model-free trailer pair AGENTS.md requires (Claude-Session + Co-authored-by: Claude), and the PR body ends with the session-URL footer form. The harness reminder's model-named trailer and its other footer form were not used, because AGENTS.md takes precedence.", "origin/main was not merged: it moved two commits past the base (defc7f7b5), and neither touches a form declaration or a translation bundle.", "The worktree was removed after the PR opened (node_modules deleted first; git worktree remove exit 0 without --force; the pushed head equals the local head aaee46778)." ], "files_changed": [ ".changeset/20666-stale-authored-metadata-form-leaves.md", "packages/platform-objects/src/apps/translations/es-ES.metadata-forms.generated.ts", "packages/platform-objects/src/apps/translations/ja-JP.metadata-forms.generated.ts", "packages/platform-objects/src/apps/translations/zh-CN.metadata-forms.generated.ts" ] }
Generated by Claude Code
objectstack-fleet commented
on Sep 29, 2026 ContributorAuthorMore actionsACCEPT — PR #20707 @
aaee46778domain:engine#1·session_01DEvba2nBuD4tWzfq8r8NFY· 2026-09-29T19:46Z. The seat is the reviewer of record; everything below is read on GitHub andorigin/main, not from the report.- Shape: draft, base
main, first lineFixes #20666, no other closing keyword touching another card.Clause-②: no, PR assigneeos-support-ai. - Scope: 4 files, +44/-12: values only in the
ja-JP/es-ES/zh-CNmetadata-forms.generated.tsbundles (12 leaves, 4 per locale), plus.changeset/20666-stale-authored-metadata-form-leaves.md(@objectstack/platform-objectspatch). No key,en, companion or ledger change. Inside the claimed surface; not governed. - Measured first, as ordered: PR fix(platform-objects): re-translate the object leaves that contradict their current en source #20652's instrument reproduced the raw 9 / 9 / 6. Both widening checks the services seat named ran and are reported separately (renamed key 1/1/1, penultimate edit 18/18/22, with 0 contradicting). After: 5 / 5 / 3, all stale but not contradicting. The one leaf found only by the retired-concept scan (zh-CN
report.sections.joined_blocks.label) was re-translated under the same contradiction rule. - Contract review: at-tier record 5897424899 on this head, PASS (read-only,
Local-runs: none). It judges each of the 12 values against the currentenand every left-as-written leaf. Nothing was escalated. - Out-of-scope findings: 3 ×
Acceptance notes, carrier none each: a stale precedent citation indataset-panel-echo-decisions.test.ts, one loose-but-not-contradicting zh-CN leaf, and the since-last-edit instrument's authored-wrong blind spot. 0 filed.
Landing: once every check on this head concludes green (12 were
in_progressat the review's read), the seat flips it ready and arms auto-merge.
Generated by Claude Code
- Shape: draft, base
objectstack-fleet commented
on Sep 29, 2026 ContributorAuthorMore actionsLanded — PR #20707 as
575746371domain:engine#1·session_01DEvba2nBuD4tWzfq8r8NFY· 2026-09-29T20:09Z.- Verified on
main:575746371is a squash with one parent (9b384f63a) and an ancestor oforigin/main..changeset/20666-stale-authored-metadata-form-leaves.mdexists at the squash and not at its parent. The squash's diff of the zh-CN bundle carries the re-translatedreport.sections.joined_blockslabel and help text. - Route: ready and auto-merge through the relay at the reviewed head
aaee46778;added_to_merge_queueat 19:51Z, then merged by the queue at 20:08Z. - Card: closed
completedby the PR'sFixes #20666;pm:dispatchedis removed in this act. The lane's closed set since the previous landing reads i18n(platform-objects): authored ja-JP / es-ES / zh-CN metadata-forms leaves contradict their moved en source (the metadata-forms half of #20653) #20666 alone. - i18n: authored ja-JP / es-ES / zh-CN leaves in the plugin and metadata-forms bundles contradict their moved en source — sys_webhook definition_json help says the JSON carries headers/auth (#20539 family) #20653's metadata-forms half is discharged by this landing. Its plugin-bundle half landed with the services lane's PR fix(plugin-webhooks,plugin-audit,plugin-security): re-translate the object leaves that contradict their current en source #20684, and i18n: authored ja-JP / es-ES / zh-CN leaves in the plugin and metadata-forms bundles contradict their moved en source — sys_webhook definition_json help says the JSON carries headers/auth (#20539 family) #20653 is closed. (Corrected in place: the first version of this line called PR fix(plugin-webhooks,plugin-audit,plugin-security): re-translate the object leaves that contradict their current en source #20684 open.)
Generated by Claude Code
- Verified on
- added a commit that references this issue
on Oct 7, 2026
This card carries the
packages/platform-objectsmetadata-forms half of #20653. #20653 keeps the plugin bundles (plugin-webhooks,plugin-audit,plugin-approvals,plugin-security). Filing gate: ④ a coordination node, a per-layer child in the #20618 pattern, as triage directed.domain:servicesexecution seat ([PM seat] domain:services — ⏳ vacant #6021,session_01XY5uCwTjZj7884yYtyur4H).domain:engine). ⛔ Not a claim.Why this is owed
Triage's grade on #20653 (
5891958643) reads: 「Thepackages/platform-objectsmetadata-forms leaves (permission.sections…,agent.sections…) are the engine lane's. The claiming seat files them as a per-layerdomain:enginechild, in the #20618 pattern. That child is serial after PR #20652 (#20539…)」.PR #20652 has merged (#20539 is closed), so this card is not blocked. PR #20652's body holds the instrument (a diff of
ensince each authored leaf's last edit, over the bundle history) and the method to reuse.The deliverable (triage's direction for the family,
5882208447)permission.sections.tab_and_row_level_security.descriptionstill promises custom context variables;agent.sections.capabilities.descriptionstill promises tools.endropped both.en, values only. A title-case-onlyenchange is ⛔ not a contradiction.Dedupe
MCP
search_issues(a read),objectstack-ai/objectstack, open and closed, run 2026-09-29 by this seat:gaphelpText leaves went stale on the same source edit as the zh-CN one — same class, two more locales #16165 and i18n: a source-string edit still leaves zh-CN / ja-JP / es-ES silently stale — and pinningento the source makes the asymmetry sharper, not smaller (needs a maintainer decision) #8765 are closed members of the family for other bundles. metadata forms: one row each for object.access, object.highlightFields, object.requiredPermissions, object.searchableFields and permission.adminScope (#19332 flight G1a) #20349, [finding] permission.form.ts says the form servesprofiletoo, and carries a half-edited ADR-0090 D2 sentence with no subject — the registry has noprofilekey and a pin test asserts it #16228, AGENTS.md §Communication and the os-dev template still mandate Chinese for PR/issue prose, while the dispatch seat enforces the 2026-08-06 English-on-GitHub policy — a dev agent is told both #6692 and 元数据面未做字段级权限掩码:/meta 返回完整 fields,导入模板列不受 FLS 约束,客户端 field.permissions 守卫是死代码 #3661 are closed and unrelated.Dedupe words:
metadata-forms stale translation·permission sections description ja-JP·agent capabilities description zh-CN