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 }}
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
Repository navigation
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
Migrated from objectstack-ai/objectstack#6968 under the file-at-destination ruling (objectstack-ai/objectstack#7167, maintainer 2026-08-10). Originally filed 2026-08-09T06:33:27Z. The full prior thread — including triage rulings and hold/restart conditions — remains on the source issue and MUST be read before acting on this card.
formatted 编辑后会留成旧值(数据一致性,当前休眠)。 widget 的只读渲染自己用 street / city / state postalCode / country 拼显示串,完全不读存储里的 formatted;编辑任一部件时也既不更新也不清除它。所以一旦有生产者(geocoder / 导入)写过 formatted,改完街道保存,记录里的 formatted 仍是改前那句话,而任何优先读 formatted 的消费方会显示旧地址,与同一条记录的 street 自相矛盾。
Findings-triage: held (finding stays) — grade carried over onto this card from the source thread so it is readable where the label lives.
The disposition recorded on objectstack#6968 (objectui shard PM, 2026-08-09 09:51Z) stands unchanged: formatted ownership (server-derived read-only vs client-writable-recompute) is a contract question that must be settled on the spec side first, and this repo currently has zero producers or consumers of formatted / countryCode — dormant. Restart conditions: (a) a spec ruling on formatted ownership, or (b) the first real producer/consumer landing (geocoding/import). The short-term type-gap half (adding the two optional members to AddressValue, zero behavior change) can ride any future card touching AddressField.
Findings round — held (finding kept), premise re-verified.
Re-checked @ objectui origin/maine638531: AddressValue still declares five of the seven AddressValueSchema parts (packages/fields/src/widgets/AddressField.tsx:22-28 — no countryCode, no formatted), and dormancy still holds: the widget's readonly path self-assembles its display line (formatAddress at :127 — a local, not the stored formatted part), and a repo grep shows no producer or consumer of the stored formatted/countryCode components (all other formatted hits are i18n/locale prose).
Held: the formatted ownership question (server-derived read-only vs client-recompute) is a spec-side contract question, and nothing reaches the stale-value consequence until a producer exists.
Findings round — held (finding kept), premise re-verified.
Re-checked @ objectui origin/mainb42558a: AddressValue still declares five of the seven AddressValueSchema parts (packages/fields/src/widgets/AddressField.tsx:22-28 — no countryCode, no formatted), and the dormancy holds: the readonly path still self-assembles its display line locally rather than reading a stored formatted part. Nothing a user hits today; the stored-formatted-goes-stale hazard stays latent until something starts producing/consuming those two parts.
Findings triage (cadence re-check): HOLD — stays finding.
Premise re-verified on origin/main @ 6d8231c: AddressField.tsx:94 still renders readonly via formatAddress(address) (own concatenation, never the stored formatted), and the exported AddressValue still omits countryCode/formatted versus the spec's seven-part AddressValueSchema. Both halves stand.
Why still held: consequence 1 is a pure type gap (runtime lossless — the widget spreads the whole object back), and consequence 2 (stale formatted after edit) stays dormant while nothing in-repo reads the stored formatted. Per the migrated thread's own hold conditions, this waits for the next AddressField pickup rather than a dispatch of its own.
Findings centralized round, batch 2 (triage seat, 2026-08-17): state transition finding → pm:on-hold per the 2026-08-13 status-semantics ruling. Standing grade unchanged and absorbed: formatted ownership (server-derived read-only vs client-recompute) is a spec-side contract question, and both consequences stay dormant while the repo has zero producers/consumers of formatted/countryCode. The pure type-gap half (two optional members on AddressValue, zero behaviour) rides the next AddressField pickup.
Restart-when: a dispatched card's file surface includes packages/fields/src/widgets/AddressField.tsx, or a spec ruling lands on AddressValueSchema.formatted ownership. Trigger file: packages/fields/src/widgets/AddressField.tsx.
Triage: domain:spec (lane only — pm:on-hold untouched). The card is a coverage gap between objectui's AddressValue and the spec's — a contract-shape question, with packages/fields / packages/plugin-map as the consumers that expose it.
Routed via the maintainer direct-dispatch channel, this session, verbatim: 「然后 批 4–5」. PM session session_0124Qg8rLvpXnQDwCmpKUmaJ. objectui three-stream split (maintainer 2026-08-21); not a Routine triage fire — the triage seat may re-grade.
Hold re-verification (spec@objectui seat, session session_01V3hPr7riucnMfhcHY86Msd, 2026-09-02) — premise drifted in the good direction; the type-gap half is closed, the formatted half is unchanged. Evidence only, hold kept.
Type gap (consequence 1): closed.packages/fields/src/widgets/address-format.ts:29import type { AddressValue } from '@objectstack/spec/data' and :64export type { AddressValue } — a direct re-export replacing the five-part local copy (its docstring :46-51 records that this closed objectui#4167 for exactly that reason); AddressField.tsx:24,30 uses it as the widget's value type. countryCode / formatted are typeable now.
Stale formatted after edit (consequence 2): unchanged and still dormant.AddressField.tsx:93-104handleFieldChange spreads the canonical value and overwrites one part, so a stored formatted / countryCode passes through untouched; the readonly render (:122) calls the local formatAddress(address, displayLocale) and never reads a stored formatted. git grep formatted|countryCode over packages/fields/src (non-test): zero producers or consumers of the stored parts; packages/plugin-map/src has no address hits. Reachable only if some producer starts writing formatted.
A narrowed card would strike consequence 1 and keep only "who owns formatted (spec-side producer vs widget recompute) — decide before any producer writes it".
Activity
os-zhuang commentedon Aug 10, 2026
Findings-triage: held (
findingstays) — grade carried over onto this card from the source thread so it is readable where the label lives.The disposition recorded on objectstack#6968 (objectui shard PM, 2026-08-09 09:51Z) stands unchanged:
formattedownership (server-derived read-only vs client-writable-recompute) is a contract question that must be settled on the spec side first, and this repo currently has zero producers or consumers offormatted/countryCode— dormant. Restart conditions: (a) a spec ruling onformattedownership, or (b) the first real producer/consumer landing (geocoding/import). The short-term type-gap half (adding the two optional members toAddressValue, zero behavior change) can ride any future card touchingAddressField.本评论来自分诊座位 Routine(#5474 试点),不构成认领。
Generated by Claude Code
claude commentedon Aug 10, 2026
Findings round — held (
findingkept), premise re-verified.origin/maine638531:AddressValuestill declares five of the sevenAddressValueSchemaparts (packages/fields/src/widgets/AddressField.tsx:22-28— nocountryCode, noformatted), and dormancy still holds: the widget's readonly path self-assembles its display line (formatAddressat:127— a local, not the storedformattedpart), and a repo grep shows no producer or consumer of the storedformatted/countryCodecomponents (all otherformattedhits are i18n/locale prose).formattedownership question (server-derived read-only vs client-recompute) is a spec-side contract question, and nothing reaches the stale-value consequence until a producer exists.本评论来自分诊座位 Routine(#5474 试点),不构成认领。
Generated by Claude Code
os-zhuang commentedon Aug 11, 2026
Findings round — held (
findingkept), premise re-verified.Re-checked @ objectui
origin/mainb42558a:AddressValuestill declares five of the sevenAddressValueSchemaparts (packages/fields/src/widgets/AddressField.tsx:22-28— nocountryCode, noformatted), and the dormancy holds: the readonly path still self-assembles its display line locally rather than reading a storedformattedpart. Nothing a user hits today; the stored-formatted-goes-stale hazard stays latent until something starts producing/consuming those two parts.本评论来自分诊座位 Routine(#5474 试点),不构成认领。
Generated by Claude Code
os-zhuang commentedon Aug 11, 2026
Findings triage (cadence re-check): HOLD — stays
finding.Premise re-verified on
origin/main@6d8231c:AddressField.tsx:94still renders readonly viaformatAddress(address)(own concatenation, never the storedformatted), and the exportedAddressValuestill omitscountryCode/formattedversus the spec's seven-partAddressValueSchema. Both halves stand.Why still held: consequence 1 is a pure type gap (runtime lossless — the widget spreads the whole object back), and consequence 2 (stale
formattedafter edit) stays dormant while nothing in-repo reads the storedformatted. Per the migrated thread's own hold conditions, this waits for the nextAddressFieldpickup rather than a dispatch of its own.本评论来自分诊座位 Routine(#5474 试点),不构成认领。
Generated by Claude Code
os-zhuang commentedon Aug 17, 2026
Findings centralized round, batch 2 (triage seat, 2026-08-17): state transition
finding→pm:on-holdper the 2026-08-13 status-semantics ruling. Standing grade unchanged and absorbed:formattedownership (server-derived read-only vs client-recompute) is a spec-side contract question, and both consequences stay dormant while the repo has zero producers/consumers offormatted/countryCode. The pure type-gap half (two optional members onAddressValue, zero behaviour) rides the nextAddressFieldpickup.Restart-when: a dispatched card's file surface includes
packages/fields/src/widgets/AddressField.tsx, or a spec ruling lands onAddressValueSchema.formattedownership. Trigger file:packages/fields/src/widgets/AddressField.tsx.Generated by Claude Code
os-zhuang commentedon Aug 23, 2026
Triage:
domain:spec(lane only —pm:on-holduntouched). The card is a coverage gap between objectui'sAddressValueand the spec's — a contract-shape question, withpackages/fields/packages/plugin-mapas the consumers that expose it.Routed via the maintainer direct-dispatch channel, this session, verbatim: 「然后 批 4–5」. PM session
session_0124Qg8rLvpXnQDwCmpKUmaJ. objectui three-stream split (maintainer 2026-08-21); not a Routine triage fire — the triage seat may re-grade.Generated by Claude Code
yinlianghui commentedon Sep 2, 2026
Hold re-verification (spec@objectui seat, session
session_01V3hPr7riucnMfhcHY86Msd, 2026-09-02) — premise drifted in the good direction; the type-gap half is closed, theformattedhalf is unchanged. Evidence only, hold kept.packages/fields/src/widgets/address-format.ts:29import type { AddressValue } from '@objectstack/spec/data'and:64export type { AddressValue }— a direct re-export replacing the five-part local copy (its docstring:46-51records that this closed objectui#4167 for exactly that reason);AddressField.tsx:24,30uses it as the widget's value type.countryCode/formattedare typeable now.formattedafter edit (consequence 2): unchanged and still dormant.AddressField.tsx:93-104handleFieldChangespreads the canonical value and overwrites one part, so a storedformatted/countryCodepasses through untouched; the readonly render (:122) calls the localformatAddress(address, displayLocale)and never reads a storedformatted.git grep formatted|countryCodeoverpackages/fields/src(non-test): zero producers or consumers of the stored parts;packages/plugin-map/srchas no address hits. Reachable only if some producer starts writingformatted.git log origin/main -- packages/fields/src/widgets/AddressField.tsx(03380aa, 2026-09-01, fix(plugin-detail): present the server's VALIDATION_FAILED as per-field inline-edit hints, and record the ruling that the server is the authority #7109 plugin-detail hints) but on a 50-commit shallow clone the diff cannot be read; nothing in the address-value logic changed. No spec ruling onAddressValueSchema.formattedownership found in code. Ambiguous, not a clean hit.formatted(spec-side producer vs widget recompute) — decide before any producer writes it".Generated by Claude Code
objectstack-fleet commentedon Sep 24, 2026
关闭
not_planned—— 维护者同意:类型缺口已修好;formatted由谁维护这个问题,在两个仓库里都还没有任何写入方,等真正写它的功能出现时再定分诊席(
session_01Tw7jnJinGHvoGSi8aFkhPJ,objectstack 座位贴 #6015),2026-09-24T14:09Z。objectui 清理第九批(#8587 的挂起卡一次性清点):本席读完了卡面和评论(7 条,全部读到),并在本地 main(62597c5)和 objectstack main(3b5607019f)上重新核对,把建议报给维护者。维护者答:「第⑨批 同意」。本卡说的是什么
地址组件的
AddressValue只覆盖 specAddressValueSchema七个部件中的五个。卡里有两件事:一是countryCode/formatted无法写类型;二是一旦有人写入formatted,编辑地址后它会留成旧值。第二件事需要先在 spec 上说清formatted归谁维护。本席实测
@objectstackfamily at17.0.0-rc.6— the adaptation surface beyond what objectstack#7100 could carry #4167):packages/fields/src/widgets/address-format.ts:29直接复用 spec 的AddressValue类型,七个部件都能写类型了。formatted仍没有任何写入方或读取方:objectui 的 fields / plugin-map 里没有;objectstack main 上field-value.zod.ts:474声明了这个键,但没有任何地理编码或导入功能写它。AddressField.tsx,或 spec 对formatted的归属作出裁定)都没有满足。为什么关
用户今天碰不到第二件事。
formatted归谁维护,应该由将来真正写它的那张卡来决定,那时才有真实的需求可以判断。同一个组件的 #4738 已在上一批关闭。什么时候重开
地理编码、导入等功能开始写入
formatted时,先在 spec 上定归属:要么服务端派生、客户端只读(组件编辑时清掉它),要么客户端可写(组件编辑时重算)。定完再改组件。标签:摘
pm:on-hold;以not_planned关闭。Generated by Claude Code