Repository navigation
Child record names are stored in English, so a zh-CN user reads "v2 · Clean", "Legal · Legal Counsel 1", "Wet ink · Completed" - #202
Merged
Conversation
The version, review, deviation and signature names were stored English strings composed by mirror.hook.ts, so a zh-CN reader saw "v2 · Clean", "Legal · Legal Counsel 1" and "Wet ink · Completed". @objectstack 18.3 ships label(record.<field>) (objectstack#26608), which a formula field evaluates in the request's locale. Each of the four display_name fields becomes a text formula, and the four stamping hooks are retired. The obligation and payment-plan mirrors hold no option label and stay. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017nzWFRUo2U7evMkPdVniAn
Contributor
Author
席位核对 — HOLD · head
|
| check | reading |
|---|---|
| CI on the head | both Validate check-runs success on 72fa60c |
| scope | 7 files: display_name on clm_contract_version / clm_review / clm_deviation / clm_signature becomes a text formula using label(record.FIELD) (18.3, objectstack#26608); four stamping hooks retired; obligation and payment-plan mirrors kept. Lint 18 warnings, the same as main |
| measured | a zh-CN reader now reads 「v6 · 清稿」「法务 · Legal Counsel 1」「保密义务存续 · 未决」「湿签 · 已完成」 on toasts, body tables and the H1; an en-US reader reads English on the same records |
| why held | AGENTS.md (governed, maintainer-only) says: "a stored display_name mirror declared as nameField — never a formula (formulas are not searchable)". This PR is exactly a formula nameField, and the measured cost is the one that rule names: REST search= no longer matches a version number, reviewer name or clause title (v6 1→0, Counsel 35→0, 不可抗力 2→0). No console surface searches these four objects today. Changing a governed rule is the maintainer's call, so this PR waits for a ruling (decision box) rather than being merged by the seat |
| residual (platform) | the activity panel stores the record name in the writer's language (sys_activity.record_label); the seat files it on objectstack whichever way this is ruled |
State: #157 moves to needs-user-decision; the PR stays a draft until the ruling.
Generated by Claude Code
Contributor
Author
席位核对 — ACCEPT · head
|
| check | reading |
|---|---|
| ruling | batch 12 item 5, letter A (6617239807): formula display_name with label() accepted for the four composed names; the seat merges this PR; the maintainer narrows the AGENTS.md naming rule (the seat carries the ruled text on PR #120) |
| shape | draft → main, Fixes #157; base 56ebd41, main has since gained PR #201 on disjoint files; mergeable clean |
| CI on the head | both Validate check-runs success on 72fa60c = PR head.sha |
| scope | 7 files, unchanged since the HOLD reading (6611591087): four display_name formulas, four stamping hooks retired, obligation and payment-plan mirrors kept. Lint 18 warnings, the same as main |
| residuals | REST search= no longer matches the parts of these four names (accepted by the ruling); the activity panel stores the name in the writer's language (objectstack#29962); the stale review_display_name comment in src/data/negotiation.seed.ts is fixed by the next card that touches that file (ruling step 4) |
Landing: under the maintainer's ruling (batch 12, 「同意」 2026-11-03T22:34Z) and merge authorization (project thread: 「你可以自己审核的就自己合并」).
Generated by Claude Code
zhuangjianguo
marked this pull request as ready for review
November 3, 2026 22:41
zhuangjianguo
pushed a commit
that referenced
this pull request
Nov 3, 2026
, #107) AGENTS.md: a name composed of select option labels may be a text formula display_name using label() (ruling 6617239807). DESIGN.md §03: the version, review, deviation and signature names are formulas in the reader's language (code: PR #202). §06 F15, §08 HotCRM: waiting on the distribution-model ruling; §11 M4 drops F15 (ruling 6617236113). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017nzWFRUo2U7evMkPdVniAn
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #157
Clause-②: no
Metadata-protocol: none
The version, review, deviation and signature names were English strings that
mirror.hook.tsstored once, so a zh-CN reader sawv2 · Clean,Legal · Legal Counsel 1andWet ink · Completed. @objectstack 18.3.0 shipslabel(record.FIELD)(objectstack#26608, PR #26755, merge76a12753, an ancestor of tag@objectstack/spec@18.3.0). A formula field calls it, and the engine evaluates it with the request'sAccept-Language. The four names now use it, so each reader sees option labels in their own language.What changed
src/objects/{contract-version,review,deviation,signature}.object.ts:display_namechanges from a storedField.texttoField.formulawithreturnType: 'text'. The key,nameField,highlightFieldsandrelatedListColumnsstay as they were, so every reader ofdisplay_namekeeps working.'v' + string(record.version_no) + ' · ' + label(record.kind)label(record.stage) + ' · ' + record.reviewer.name(one reference hop)record.clause.title + ' · ' + label(record.status)(one reference hop)label(record.method) + ' · ' + label(record.status)src/objects/mirror.hook.ts: removes the four stamping hooks and their inline English label maps. Theclm_obligationandclm_payment_planmirrors stay because neither name contains an option label. An obligation's name is the title its author typed. The payment mirror is#seq · date.src/translations/{en,zh-CN}/objects.lifecycle.ts: the review, deviation and signaturedisplay_namehelp text now says the name follows the reader's language. The version's help text lives inobjects.contract.ts, which is outside this claim's file surface. Its current wording ("Filled in automatically …") is still true, so it is unchanged.The obligation is not changed. Its name has no option label for
label()to translate.Measured (18.3.0,
pnpm demo:zh, port 3166, declared demo staff, Chromium)Before is origin/main
fc68eb6. After was measured on the upgraded DB (0b4e133), on a fresh DB, and again on the final head72fa60cafter rebasing onto56ebd41, also on a fresh DB.PATCHresponse (counsel2)湿签 · 已作废不可抗力 · WithdrawnGETwithoutAccept-LanguageWet ink · CompletedWet ink · Completed(declared labels)v5 · 最终签署版in zh-CN. The seed re-run applied 1130 rows with no refusal.24 author-time warning(s), the same as main, and the server log has no formula fault.财务 · Finance Controllerand业务 · Business Requester 2.src/references any of the four objects, so no lookup chip can cite these names. The ⌘K palette does not list these objects: in zh-CN as counsel2 it returns no result for 清稿, 湿签 or Counsel, and it finds the clause 保密义务存续.clm_execution_formalities_missing, cites the contract title and not the child name.What does not follow the reader
sys_activity.record_labelstores the name when the write happens, in the writer's locale. A system write gets the declared labels. On the review counsel2 created in zh-CN, an en-US reader seesCreated Review "法务 · Legal Counsel 1". After the current-version hook's update, a zh-CN reader sees更新了 合同版本 "v6 · Clean". Before this change, both readers saw English for both entries. This surface is the platform's, and this PR changes nothing in it. See the report on Child record names are stored in English, so a zh-CN user reads "v2 · Clean", "Legal · Legal Counsel 1", "Wet ink · Completed" #157.search=on these four objects. A formula is not indexed (18.3 docs: "Search never indexes a formula field"). Searching counsel2's data forv6,Counseland不可抗力used to return 1, 35 and 2 rows through the stored name and now returns 0.Clean/清稿/Legal/Open/Wetreturn the same counts as before (43 or 44 / 42 / 36 / 9 / 3). No console surface searches these objects: the body tables have no search box, and the palette does not list them.Gates (final head
72fa60c, rebased onto56ebd41)The validate warning lines are byte-identical to a run on main's
src/. That run used a temporary checkout of origin/main'ssrc/, restored afterwards, andgit diff HEADwas then empty.Acceptance notes
AGENTS.md(Naming: "a storeddisplay_namemirror declared asnameField— never a formula (formulas are not searchable)") andDESIGN.md§03 (four rows: "display_name(存储镜像 …)") no longer describe these four objects. Both files are governed, so this PR does not touch them. The proposed wording is in the report on Child record names are stored in English, so a zh-CN user reads "v2 · Clean", "Legal · Legal Counsel 1", "Wet ink · Completed" #157.src/data/negotiation.seed.tshas a doc comment that still saysreview_display_namere-stamps the review mirror. That file is outside this claim, so the comment is left for its next owner. The seed itself does not authordisplay_name, and it runs green.display_namecolumn stays in place. It is no longer written, and reads serve the formula value.🤖 Generated with Claude Code
https://claude.ai/code/session_017nzWFRUo2U7evMkPdVniAn