Skip to content

docs(spec): sync i18n-label-resolver's pickLocalized reference to objectui#3907 - #7953

Merged
os-zhuang merged 1 commit into
mainfrom
claude/issue-7864-picklocalized-sync
Aug 12, 2026
Merged

docs(spec): sync i18n-label-resolver's pickLocalized reference to objectui#3907#7953
os-zhuang merged 1 commit into
mainfrom
claude/issue-7864-picklocalized-sync

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

Fixes#7864

What was wrong

objectui PR #4359 (objectui#3907) hardened pickLocalized to own-property
reads plus a typeof === 'string' filter on every limb, collapsing to zero
the two RULE departures resolveI18nLabel
(packages/spec/src/ui/i18n-label-resolver.ts, from #6765) documented as
deliberate narrowings of its reference. i18n-label-resolver.test.ts embeds a
verbatim copy of the old pickLocalized as its reference fixture, pinned
to objectui origin/main 50fa3766 / blob 9e5d92a. Because the copy is local
rather than imported, that suite stayed green while silently stale.

What changed

  • Refreshed the verbatim reference copy to objectui origin/main d8d0d665dceba53dada4994f1eeef9f83bf1cf91 / blob
    30fcb0a86343b9b937432a1b2ea89e0a78321f46 (last touched by objectui PR
    fix(spec)!: 退役处方指向 protocol 17 —— 这趟车真正会发的 major (#4350) #4359 / objectui#3907), and updated the pin comment.
  • Flipped the two stale assertions: the prototype-chain case now expects
    pickLocalizedReference({ en: 'Owner' }, 'constructor') to be 'Owner'
    (was .toContain('function Object')), and the off-spec-value case now
    expects pickLocalizedReference(offSpec, 'zh-CN') to be 'Owner' (was
    .toBe('[object Object]')) — per objectui PR fix(spec)!: 退役处方指向 protocol 17 —— 这趟车真正会发的 major (#4350) #4359's own miss-vs-abort
    correction: "A guard makes its limb miss; it does not abort the
    resolution... pickLocalized({ en: 'Pricing' }, 'constructor') is
    'Pricing', not ''."
  • Mirrored the 18-vector CONVERGED table from objectui's
    plugin-list/src/__tests__/i18nLabel-resolver-parity.test.ts into
    PARITY_VECTORS as the sync's acceptance fixture — every row is now
    asserted against the refreshed reference AND against resolveI18nLabel,
    plus the single-pass "every vector agrees" check.
    (Note: the issue and its triage comment describe this as a "19-vector"
    table; measured count on objectui origin/main is 18 — noted for the
    record, not blocking.)
  • Reworded the describe('...the two deliberate departures...') title and
    body to 'the rule departures converged with objectui#3907; one departure survives', and the resolver's module doc ## Two deliberate departures
    section to ## Rule departures — converged as of objectui#3907, zero remain + a new ## What still differs section.

What did NOT change (guard honored)

The top-level scalar pass-through departure (pickLocalized(42, 'en')
'42' vs resolveI18nLabel(42, 'en')undefined, pinned in 'refuses an off-contract scalar rather than stringifying it') survives untouched
it concerns the value parameter, not a limb, and objectui#3907 did not touch
it. Zero runtime-code lines changed in i18n-label-resolver.ts; only the
module-doc prose moved.

Changeset measurement

The reworded module-doc prose is a non-.zod.ts file, so no reference-page
regeneration is expected. Measured directly: after pnpm --filter @objectstack/spec build, the rewritten ## Rule departures /
## What still differs sections appear verbatim in
packages/spec/dist/ui/index.d.ts:713-767, immediately preceding the
exported resolveI18nLabel declaration. Since it reaches dist/**/*.d.ts, a
patch changeset was added
(.changeset/i18n-label-resolver-parity-doc-sync.md) rather than
skip-changeset.

Verification

  • pnpm --filter @objectstack/spec build — green (dist regenerated, doc
    reaches .d.ts as noted above).
  • pnpm --filter @objectstack/spec test (full package suite, flock-serialized,
    --max-old-space-size=4096): 381 test files / 10067 tests passed.
  • Targeted vitest run src/ui/i18n-label-resolver.test.ts: 1 file / 99
    tests passed
    (up from the pre-change file's assertion count — the 18
    mirrored CONVERGED vectors plus the flipped/reworded departure tests).
  • pnpm --filter @objectstack/spec typecheck (tsc --noEmit +
    scripts-typecheck + test-typecheck): green, 0 new errors; the @ts-expect-error
    directives on the scalar-refusal test still hold (test-typecheck debt count
    unchanged at 57 files / 265 errors, per the shrink-only ledger @ts-expect-error 退役 pin 在 packages/spec 里是幽灵检查:tsconfig 把 **/*.test.ts 排除出唯一的 tsc --noEmit #5286).
  • node scripts/check-nul-bytes.mjs: OK.
  • pnpm check:adr-anchors: OK (self-test + full audit green).
  • npx changeset status: the new patch changeset parses and propagates
    correctly.

Generated by Claude Code

…ectui#3907 (#7864)
objectui PR #4359 hardened pickLocalized to own-property reads plus a
string filter on every limb, collapsing to zero the two rule departures
resolveI18nLabel documented as deliberate narrowings of its reference.
The verbatim copy embedded in i18n-label-resolver.test.ts stayed green
while silently stale.
- Refresh the verbatim reference copy to objectui origin/main d8d0d66 /
blob 30fcb0a8 and update the pin comment.
- Flip the two assertions that pinned the old prototype-chain and
object-stringification behavior to the converged answers (a guard
makes its limb miss, it does not abort resolution).
- Mirror the 18-vector CONVERGED table from objectui's plugin-list
parity suite into PARITY_VECTORS as the sync's acceptance fixture.
- Reword the "the two deliberate departures" describe title and the
resolver's module doc to record the convergence, keeping only the
two differences that survive: the miss spelling ('' vs undefined)
and the top-level scalar pass-through, which objectui#3907 did not
touch.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016YBUGvukaeVu9DjKdsHJa9
@vercel

vercelBot commented Aug 12, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
ProjectDeploymentActionsUpdated (UTC)
objectstackIgnoredIgnoredAug 12, 2026 8:46am

Request Review

@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 1 package(s): @objectstack/spec.

106 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:

  • content/docs/ai/agents.mdx(via @objectstack/spec)
  • content/docs/ai/skills-reference.mdx(via @objectstack/spec)
  • content/docs/ai/skills.mdx(via @objectstack/spec)
  • content/docs/api/client-sdk.mdx(via @objectstack/spec)
  • content/docs/api/environment-routing.mdx(via @objectstack/spec)
  • content/docs/api/error-catalog.mdx(via @objectstack/spec)
  • content/docs/api/error-handling-client.mdx(via @objectstack/spec)
  • content/docs/api/error-handling-server.mdx(via @objectstack/spec)
  • content/docs/api/index.mdx(via @objectstack/spec)
  • content/docs/automation/approvals.mdx(via @objectstack/spec)
  • content/docs/automation/connectors.mdx(via @objectstack/spec)
  • content/docs/automation/flows.mdx(via @objectstack/spec)
  • content/docs/automation/hook-bodies.mdx(via packages/spec)
  • content/docs/automation/hooks.mdx(via @objectstack/spec)
  • content/docs/automation/index.mdx(via @objectstack/spec)
  • content/docs/automation/webhooks.mdx(via @objectstack/spec)
  • content/docs/automation/workflows.mdx(via @objectstack/spec)
  • content/docs/concepts/architecture.mdx(via @objectstack/spec)
  • content/docs/concepts/design-principles.mdx(via packages/spec)
  • content/docs/concepts/index.mdx(via @objectstack/spec)
  • content/docs/concepts/metadata-driven.mdx(via @objectstack/spec)
  • content/docs/concepts/metadata-lifecycle.mdx(via packages/spec)
  • content/docs/concepts/north-star.mdx(via @objectstack/spec)
  • content/docs/data-modeling/analytics.mdx(via @objectstack/spec)
  • content/docs/data-modeling/drivers.mdx(via @objectstack/spec)
  • content/docs/data-modeling/external-datasources.mdx(via @objectstack/spec)
  • content/docs/data-modeling/field-types.mdx(via @objectstack/spec)
  • content/docs/data-modeling/fields.mdx(via @objectstack/spec)
  • content/docs/data-modeling/formulas.mdx(via @objectstack/spec)
  • content/docs/data-modeling/index.mdx(via @objectstack/spec)
  • content/docs/data-modeling/objects.mdx(via @objectstack/spec)
  • content/docs/data-modeling/queries.mdx(via @objectstack/spec)
  • content/docs/data-modeling/schema-design.mdx(via @objectstack/spec)
  • content/docs/data-modeling/seed-data.mdx(via @objectstack/spec)
  • content/docs/data-modeling/validation-rules.mdx(via @objectstack/spec)
  • content/docs/data-modeling/validation.mdx(via @objectstack/spec)
  • content/docs/deployment/cli.mdx(via @objectstack/spec)
  • content/docs/deployment/tenancy-modes.mdx(via @objectstack/spec)
  • content/docs/deployment/troubleshooting.mdx(via @objectstack/spec)
  • content/docs/deployment/validating-metadata.mdx(via @objectstack/spec)
  • content/docs/getting-started/build-with-claude-code.mdx(via @objectstack/spec)
  • content/docs/getting-started/common-patterns.mdx(via @objectstack/spec)
  • content/docs/getting-started/examples.mdx(via @objectstack/spec)
  • content/docs/getting-started/quick-reference.mdx(via @objectstack/spec)
  • content/docs/getting-started/quick-start.mdx(via @objectstack/spec)
  • content/docs/getting-started/your-first-project.mdx(via @objectstack/spec)
  • content/docs/kernel/cluster.mdx(via @objectstack/spec)
  • content/docs/kernel/contracts/auth-service.mdx(via packages/spec)
  • content/docs/kernel/contracts/cache-service.mdx(via packages/spec)
  • content/docs/kernel/contracts/data-engine.mdx(via @objectstack/spec)
  • content/docs/kernel/contracts/index.mdx(via @objectstack/spec)
  • content/docs/kernel/contracts/metadata-service.mdx(via packages/spec)
  • content/docs/kernel/contracts/storage-service.mdx(via @objectstack/spec)
  • content/docs/kernel/index.mdx(via packages/spec)
  • content/docs/kernel/runtime-services/data-service.mdx(via @objectstack/spec)
  • content/docs/kernel/runtime-services/email-service.mdx(via packages/spec)
  • content/docs/kernel/runtime-services/examples.mdx(via @objectstack/spec)
  • content/docs/kernel/runtime-services/index.mdx(via packages/spec)
  • content/docs/kernel/runtime-services/queue-service.mdx(via packages/spec)
  • content/docs/kernel/runtime-services/sharing-service.mdx(via @objectstack/spec)
  • content/docs/kernel/runtime-services/sms-service.mdx(via packages/spec)
  • content/docs/kernel/runtime-services/storage-service.mdx(via @objectstack/spec)
  • content/docs/kernel/services-checklist.mdx(via @objectstack/spec)
  • content/docs/kernel/services.mdx(via @objectstack/spec)
  • content/docs/permissions/authorization.mdx(via @objectstack/spec)
  • content/docs/permissions/permission-sets.mdx(via @objectstack/spec)
  • content/docs/permissions/permissions-matrix.mdx(via @objectstack/spec)
  • content/docs/permissions/positions.mdx(via @objectstack/spec)
  • content/docs/permissions/rls.mdx(via @objectstack/spec)
  • content/docs/permissions/sharing-rules.mdx(via @objectstack/spec)
  • content/docs/permissions/system-context.mdx(via packages/spec)
  • content/docs/plugins/adding-a-metadata-type.mdx(via @objectstack/spec)
  • content/docs/plugins/development.mdx(via @objectstack/spec)
  • content/docs/plugins/index.mdx(via @objectstack/spec)
  • content/docs/plugins/packages.mdx(via @objectstack/spec)
  • content/docs/protocol/backward-compatibility.mdx(via @objectstack/spec)
  • content/docs/protocol/diagram.mdx(via packages/spec)
  • content/docs/protocol/kernel/config-resolution.mdx(via @objectstack/spec)
  • content/docs/protocol/kernel/http-protocol.mdx(via @objectstack/spec)
  • content/docs/protocol/kernel/i18n-standard.mdx(via @objectstack/spec)
  • content/docs/protocol/kernel/index.mdx(via @objectstack/spec)
  • content/docs/protocol/kernel/lifecycle.mdx(via @objectstack/spec)
  • content/docs/protocol/kernel/plugin-spec.mdx(via @objectstack/spec)
  • content/docs/protocol/knowledge.mdx(via @objectstack/spec)
  • content/docs/protocol/objectql/index.mdx(via @objectstack/spec)
  • content/docs/protocol/objectql/query-syntax.mdx(via @objectstack/spec)
  • content/docs/protocol/objectql/schema.mdx(via @objectstack/spec)
  • content/docs/protocol/objectql/security.mdx(via packages/spec)
  • content/docs/protocol/objectql/state-machine.mdx(via @objectstack/spec)
  • content/docs/protocol/objectui/actions.mdx(via @objectstack/spec)
  • content/docs/protocol/objectui/concept.mdx(via @objectstack/spec)
  • content/docs/protocol/objectui/index.mdx(via @objectstack/spec)
  • content/docs/protocol/objectui/layout-dsl.mdx(via @objectstack/spec)
  • content/docs/protocol/objectui/record-alert.mdx(via @objectstack/spec)
  • content/docs/protocol/objectui/widget-contract.mdx(via @objectstack/spec)
  • content/docs/ui/actions.mdx(via @objectstack/spec)
  • content/docs/ui/apps.mdx(via @objectstack/spec)
  • content/docs/ui/create-vs-edit-form.mdx(via @objectstack/spec)
  • content/docs/ui/dashboards.mdx(via @objectstack/spec)
  • content/docs/ui/field-grouping-and-order.mdx(via @objectstack/spec)
  • content/docs/ui/forms.mdx(via @objectstack/spec)
  • content/docs/ui/index.mdx(via @objectstack/spec)
  • content/docs/ui/public-data-collection.mdx(via @objectstack/spec)
  • content/docs/ui/setup-app.mdx(via @objectstack/spec)
  • content/docs/ui/translations.mdx(via @objectstack/spec)
  • content/docs/ui/views.mdx(via @objectstack/spec)

7 release-owned page(s) also reference the affected code. These are read-only:

  • content/docs/releases/implementation-status.mdx(via @objectstack/spec)
  • content/docs/releases/index.mdx(via @objectstack/spec)
  • content/docs/releases/v12.mdx(via @objectstack/spec)
  • content/docs/releases/v13.mdx(via @objectstack/spec)
  • content/docs/releases/v16.mdx(via @objectstack/spec)
  • content/docs/releases/v17.mdx(via @objectstack/spec)
  • content/docs/releases/v9.mdx(via @objectstack/spec)

content/docs/releases/ is RELEASE-OWNED (AGENTS.md "Documentation Guardrails"): release
notes are written centrally at release time, and a code PR that edits them is the exact PR
that guardrail exists to stop. They are still audited — read-only. If one of them is actually
wrong, file an issue or open a dedicated docs-only PR; do not edit it here.

Advisory only. To re-verify, run the docs-accuracy-audit workflow scoped to these files:
node scripts/docs-audit/affected-docs.mjs origin/main → pass the list as args.docs.

@github-actionsgithub-actionsBot added documentation Improvements or additions to documentation tests protocol:ui tooling labels Aug 12, 2026
@os-zhuang
os-zhuang marked this pull request as ready for review August 12, 2026 09:18
@os-zhuang
os-zhuang added this pull request to the merge queueAug 12, 2026
@github-merge-queue
github-merge-queueBot removed this pull request from the merge queue due to failed status checks Aug 12, 2026
@github-actions

Copy link
Copy Markdown
Contributor

⛔ merge queue 构建失败 — 先分诊,再决定要不要重排

队列构建 31582369294 红了。队列跑的是全量套件(PR 侧 CI 只跑 affected 子集),
所以失败的测试可能在本 PR 没碰过的包里 —— 那不是重排能修的。每次盲目重排都会让排在后面的所有 PR 重建一轮。

失败的 job(日志抽取,best effort):

  • Test Core (3/3) — 失败步骤: Run this shard's tests

    �[90mstderr�[2m | src/sql-driver-unique-tenancy.test.ts�[2m > �[22m�[2mSqlDriver unique × tenancy (#3696)�[2m > �[22m�[2mretires a legacy global unique index and replaces it with the composite
    �[90mstderr�[2m | src/sql-driver-unique-tenancy.test.ts�[2m > �[22m�[2mSqlDriver unique × tenancy (#3696)�[2m > �[22m�[2mretires the legacy `uniq_<table>_<col>` index left by the drift rebuild path
    �[90mstderr�[2m | src/sql-driver-unique-tenancy.test.ts�[2m > �[22m�[2mSqlDriver unique × tenancy (#3696)�[2m > �[22m�[2mbare-composite tightening + duplicate pre-flight (ADR-0120 D4)�[2m > �[22m�[2ma
    �[90mstderr�[2m | src/sql-driver-unique-tenancy.test.ts�[2m > �[22m�[2mSqlDriver unique × tenancy (#3696)�[2m > �[22m�[2mbare-composite tightening + duplicate pre-flight (ADR-0120 D4)�[2m > �[22m�[2mB
    �[22m�[39m[schema-drift] product: cannot tighten 'uniq_product_organization_id_code' as UNIQUE (COALESCE(organization_id, '__global__'), code) — existing rows already violate the NULL-safe unique cons
    �[90mstderr�[2m | src/sql-driver-unique-tenancy.test.ts�[2m > �[22m�[2mSqlDriver unique × tenancy (#3696)�[2m > �[22m�[2mbare-composite tightening + duplicate pre-flight (ADR-0120 D4)�[2m > �[22m�[2mB
    �[22m�[39m[schema-drift] REFUSING to rebuild 'uniq_product_organization_id_code' on 'product' as a NULL-safe unique — 1 duplicate group(s) violate it (e.g. organization_id="__global__", code="DUP" × 2
    �[41m�[1m FAIL �[22m�[49m test/serve-mcp-capability-collision.e2e.test.ts�[2m > �[22m#7652: an app loading the MCP client connector still gets the MCP server
    

历史信号:

  • 本 PR 过去 24h 无队列失败记录(首次)。
  • 过去 24h 队列共有 71 个失败构建(不含本次)。

分诊清单:

  1. 失败测试在本 PR 改动的包里 → 真回归,修 PR。
  2. 失败测试与本 PR 无关 → 在其他 PR 的同类评论里搜同名测试;出现过 ⇒ flaky 实锤,开 issue 修/隔离那条测试。修好前重排只会再烧一轮全队列。
  3. 两者都不是 → 可能与同组 PR 语义冲突;等前面的 PR 落地或失败出队后再重排一次即可,不要连续重排。

Generated by Claude Code · merge-queue-triage workflow (#4859)

@os-zhuangClaude

Copy link
Copy Markdown
ContributorAuthor

Queue-ejection triage receipt (spec-surface lane seat, session session_016YBUGvukaeVu9DjKdsHJa9) — re-queuing ONCE.

Readings taken (per the triage checklist above):

Verdict: checklist branch 3 (not ours, not yet a proven flaky) ⇒ single re-queue. ⛔ If the SAME signature ejects this PR again: no further re-queue — escalate and file the flaky finding for serve-mcp-capability-collision.e2e.test.ts instead (it will then have two occurrences on unrelated diffs).


Generated by Claude Code

@os-zhuang
os-zhuang added this pull request to the merge queueAug 12, 2026
Merged via the queue into main with commit b85cc54Aug 12, 2026
27 checks passed
@os-zhuang
os-zhuang deleted the claude/issue-7864-picklocalized-sync branch August 12, 2026 09:51
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationprotocol:uisize/mteststooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

spec: i18n-label-resolver's verbatim reference copy of pickLocalized goes stale-while-green after objectui#3907 — precise sync worklist

2 participants

@os-zhuang@claude