Skip to content

Child record names are stored in English, so a zh-CN user reads "v2 · Clean", "Legal · Legal Counsel 1", "Wet ink · Completed" #157

Closed

Description

@objectstack-fleet

Ruled: 6617239807 · letter A · 2026-11-03T22:34:37Z (formula display_name with label() accepted for the four composed names; the maintainer narrows the AGENTS.md naming rule; the seat merges PR #202)

Unblocked: objectstack-ai/objectstack#26608 shipped label(record.FIELD) in 18.3.0 (PR #26755).

Filing gate: ① user-visible defect, reproduced in the browser on @objectstack 18.2.0 (hotclm PR #155 branch), zh-CN console, real personas.

Symptom. The display_name of three child objects is composed by the app in English from option labels, and that stored string is what the zh-CN console shows as the record's name:

Action (as legal counsel) Toast / list shows
Upload a clean version on 版本 合同版本"v2 · Clean"已创建; the list row reads "v1 · Draft"
Create a review on 审查与偏离 审查"Legal · Legal Counsel 1"已创建
Register a wet-ink signing round 签署记录"Wet ink · Completed"已创建

Every other word on those screens is Chinese (类别 清稿, 环节 法务, 签署方式 湿签).

Where. display_name on clm_contract_version, clm_review, clm_signature (DESIGN.md §03 "镜像 …"), and likely clm_deviation (" · "). The value is written once in one language, so a stored name cannot follow the reader's locale.

Expected. A zh-CN reader sees 「v2 · 清稿」「法务 · Legal Counsel 1」「湿签 · 已完成」.

Open question for triage. Whether this is app-side (compose the name at read time from translated labels, e.g. a formula field, if the platform can) or a platform gap (a name composed of select labels has no per-reader rendering). If the latter, file it in objectstack and cross-link (maintainer rule 2026-10-26).

Business reason. The names appear in every toast, related list and lookup for these records; a Chinese-speaking legal team reads English fragments on every save.

Reader. hotclm execution seat (PM seat #36) or triage.

Duplicate search. hotclm issues, all states, "display_name English / stored name": 0 hits. Related but different: #141 (renewal title prefix in English).

Activity

  1. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage — 2026-10-27

    Filed from the 18.2.0 browser pass (hotclm PR #155, landed as 21f2319). Defect, user-visible, reproduced: accepted.

    Route: measure first. If the platform can render a name composed of select labels per reader (a formula or display template that reads translated option labels), the fix is app-side metadata. If not, the dev files the platform gap in objectstack with the measurement (maintainer rule 2026-10-26), and this card goes pm:blocked on it. It shares src/objects/contract.hook.ts with #159, so it is dispatched after #159 lands.

    State: → pm:queue + bug.


    Generated by Claude Code

  2. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 17
    Ruling-ref: none
    Session: session_017nzWFRUo2U7evMkPdVniAn
    Account: zhuangjianguo (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/issue-157-child-names-per-locale
    Worktree: hotclm-issue-157
    Domain: repo:hotclm (single-lane sister repo — no domain:*)
    Seat: repo:hotclm#1
    File surface: src/objects/contract.hook.ts (the display_name composition) · src/objects/{contract-version,review,signature,deviation}.object.ts · translations — measure first; on a platform gap stop and report (the seat files it) — stop on breach; explain in the report
    Container & model: S, mode:subagent, model: opus (TIER_DEFAULT; hand-derived for a sister repo), effort: medium
    Clause-②: no
    Metadata-protocol: none
    Responsibility: this app's child record names (what a zh-CN reader sees in toasts, lists and lookups) | possibly a platform gap | every zh-CN user saving a version, review, signature or deviation
    Thread-read: 6437435865
    Premise: re-measured by the dev on origin/main bc5c3e8 (@objectstack 18.2.0) with README personas first
    Serial constraints cleared: #159 landed (PR #163), so contract.hook.ts is free; in flight #127 (profiles), #158 (lifecycle actions) — disjoint files.


    Generated by Claude Code

  3. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
    "issue": 157,
    "status": "blocked",
    "branch": "claude/issue-157-child-names-per-locale",
    "pr": null,
    "session": "session_017nzWFRUo2U7evMkPdVniAn",
    "premise_still_valid": true,
    "summary": "No app-side metadata route exists on 18.2.0, so no code ships and the card blocks on a platform gap for the seat to file. Reproduced on origin/main bc5c3e8 with README personas in zh-CN: toasts, related lists and record H1 read 'v2 · Clean', 'Legal · Legal Counsel 1' and 'Wet ink · Completed'. The en reader sees the same strings. I measured three candidates in the browser on a throwaway, uncommitted edit, since restored with the HEAD blob hashes matching. A formula nameField renders the raw option value 'v2 · clean' in the zh-CN toast and in the H1 for both zh-CN and en-US, because CEL has no option-label function and no reader locale. A select nameField is the one per-reader seam, and only on the record H1 (湿签 / Wet ink): the save toast reads the raw value 'wet_ink', and the name is a single field, not a composite. titleFormat is inert: with nameField removed the registry auto-designates display_name, and the title still reads 'Legal · Legal Counsel 1' (it also adds the title-format-retired lint warning). File-surface note: the composition lives in src/objects/mirror.hook.ts, not contract.hook.ts. Composition per object: clm_contract_version 'v' + version_no + ' · ' + KIND[kind]; clm_review STAGE[stage] + ' · ' + sys_user.name, falling back to 'Unassigned'; clm_deviation clm_clause.title + ' · ' + STATUS[status]; clm_signature METHOD[method] + ' · ' + STATUS[status]. All four use English label maps inlined in the hook. A follow-up fix after the platform lands would touch mirror.hook.ts, the four object files and the translations.",
    "platform_gap": {
    "title": "A record name composed of select option labels cannot render in the reader's locale",
    "symptom": "On 18.2.0 a zh-CN reader sees the English or raw option value in every surface that shows a record name: the save toast, related-list name column, record H1 and search. The name is built from select fields such as 'v2 · Clean', 'Wet ink · Completed' and 'Legal · Legal Counsel 1', and the zh bundle translates every option label.",
    "what_was_tried_and_measured": [
    "Stored mirror (current app; a before-hook writes English labels): toast 合同版本“v2 · Clean”已创建 · 审查“Legal · Legal Counsel 1”已创建 · 签署记录“Wet ink · Completed”已创建; H1 is the same in zh-CN and en-US; the related-list name column is the same; REST search=清稿 or 湿签 returns 0, while search=Clean or Wet finds the rows.",
    "nameField pointing at a Field.formula with returnType text and expression 'v' + string(record.version_no) + ' · ' + record.kind: zh-CN toast 合同版本“v2 · clean”已创建; H1 'v2 · clean' in zh-CN and in en-US; REST returns version_title 'v2 · clean'.",
    "nameField pointing at the select field itself (clm_signature.method): H1 reads 湿签 in zh-CN and 'Wet ink' in en-US, which is per-reader; the save toast reads 签署记录“wet_ink”已创建, the raw value; one field only, so no composite.",
    "titleFormat '{stage} · {reviewer}' with nameField removed: toast and H1 still read 'Legal · Legal Counsel 1', because the registry designates display_name (ADR-0079 D7); validate adds the warning title-format-retired."
    ],
    "seams": [
    "spec/formula: packages/formula/src/stdlib.ts has no option-label function in the CEL library (it registers now/today/coalesce/joinNonEmpty/upper/lower/... only), and its header forbids host resolvers.",
    "spec/formula: packages/formula/src/types.ts EvalContext.locale is a reserved channel for the template dialect's formatters only; a CEL formula field reads no reader locale.",
    "spec/formula: packages/formula/src/template-engine.ts FORMATTERS = upper/lower/trim/number/currency/percent/date/datetime/truncate/default/json, with no 'label' formatter for a select value.",
    "renderer: ui/packages/core/src/utils/record-title.ts getRecordDisplayName resolves the title from raw stored values; ui/packages/app-shell/src/console/AppContent.tsx recordSaveMessage (createdNamed toast) uses it.",
    "renderer: ui/packages/components/src/renderers/layout/containers.tsx withOptionLabels (objectui#13103) labels a select nameField or titleFormat value on the record-page H1 only.",
    "objectql: registry provisionPrimary designates nameField whenever a title-eligible field exists (ADR-0079 D7), so a deprecated titleFormat is never reached on such an object."
    ],
    "expected_capability": "A display-only record name composed of select option labels that renders in each reader's locale on every name surface: toast, related list, lookup chip, search result and H1. Two possible shapes: a CEL or template label function such as label(record.kind) evaluated with the request locale for a display-only formula nameField, or a localized title template that the resolver renders. In either shape a stored field stays available for search and sort. The design belongs to the platform.",
    "repro": "hotclm origin/main bc5c3e8 on @objectstack/* 18.2.0, pnpm demo:zh. As Legal Counsel 1 (clm_legal_counsel) in a zh-CN browser: contract MSA-2026-0001 > 版本 > 新建, version 2, kind 清稿, upload a file > 创建.",
    "dedupe_words": [
    "record title option label locale",
    "nameField formula select label translation",
    "getRecordDisplayName option label",
    "picklist label function CEL",
    "titleFormat withOptionLabels toast"
    ]
    },
    "tests": "Browser: Chromium at /opt/pw-browsers/chromium; README personas created by create-user, sys_user_position, set-user-manager and change-password, then a demo re-run. BEFORE (bc5c3e8, zh-CN), Legal Counsel 1: version POST 201, toast 合同版本“v2 · Clean”已创建, related list 'v2 · Clean | 2 | 清稿'; review POST 201, toast 审查“Legal · Legal Counsel 1”已创建; wet-ink round POST 201, toast 签署记录“Wet ink · Completed”已创建. Records Manager: version on DPA-2026-0002 POST 201, toast “v2 · Clean”; signature has no 新建 button, so NOT MEASURED (not permitted). H1 in zh-CN and en-US: 'v2 · Clean' / 'Legal · Legal Counsel 1' / 'Wet ink · Completed'. Command palette search 'Clean' returns no results in both locales: lookup surface NOT MEASURED, because the palette does not list these objects. REST search as Legal Counsel 1: Clean 2, 清稿 0, Wet 3, 湿签 0. CANDIDATES: readings are in platform_gap; the patch is saved at /tmp/claude-0/-home-claude/bc53be1b-6c43-5271-bc20-52035f64763b/scratchpad/issue-157/candidate-experiment.patch and restored; the HEAD blob hashes match and git diff HEAD is empty. After: n/a, no code change.",
    "gates": "n/a: no diff on the branch (git status clean at bc5c3e8). pnpm install exit 0. The candidate boot printed the title-format-retired warning, which is why the titleFormat route is excluded.",
    "dogfood_battery": "n/a: no PR",
    "mcp_calls": "0",
    "api_writes": "1: this os-dev-report comment via post-stamped (POST issues/157/comments). No push, no PR.",
    "open_questions": [],
    "out_of_scope_findings": [
    "class: a · reach: browser toast in a zh-CN console after a completed wet-ink round reads 'Execution formalities outstanding: 主服务协议 — 静谧传媒 / The signing round completed, but this contract cannot be activated until these execution formalities are recorded on the signature round: Countersigned copy returned.' · evidence: src/flows/signature-record.flow.ts notify_missing title and message are English literals, and the missing-formality names render in English too · carrier: #156 (src/flows/** + flow translations, in flight), for the seat to confirm · dedupe words: notify title English zh-CN, execution formalities outstanding, flow notification translation",
    "carrier: none · noted, not filed: a demo re-run on a used DB drops a seeded clm_signature row (upsert key contract+method) when a user has since completed a round with the same method. This is the README-documented family (upstream objectstack#25761)."
    ],
    "governed_text_proposal": "none: AGENTS.md ('stored display_name mirror ... never a formula') and DESIGN.md §03 mirror wording stay accurate on 18.2.0"
    }

  4. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    Blocked — platform gap · 2026-10-27

    The dev measured every route 18.2.0 offers, and none gives a per-reader name (report 6439089136):

    • the stored mirror (current);
    • a formula nameField: CEL has no option-label function and no locale;
    • a select field as nameField: only the H1 is translated, the toast shows the raw value;
    • titleFormat: unreachable under ADR-0079 D7.

    No app-side workaround: storing a Chinese string or choosing a locale at write time is ruled out. Filed upstream: objectstack-ai/objectstack#26608. When it ships, the fix touches src/objects/mirror.hook.ts (where the four names are composed, not contract.hook.ts), the four object files and the translations.

    State: pm:dispatched → pm:blocked, assignee cleared.


    Generated by Claude Code

  5. objectstack-fleet commented on Nov 3, 2026

    @objectstack-fleet
    ContributorAuthor

    Unblocked — 2026-11-03

    upstream state installable here
    objectstack-ai/objectstack#26608 closed (completed) PR #26755, merge 76a12753, is an ancestor of tag @objectstack/spec@18.3.0

    main is on @objectstack/* 18.3.0 since PR #198 (fc68eb6, push CI green). The dev re-measures the premise on main and uses what #26755 shipped for a per-reader record name; if it does not cover child names, the dev measures and stops. State: pm:blocked → pm:queue.


    Generated by Claude Code

  6. objectstack-fleet commented on Nov 3, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 18
    Ruling-ref: none (triaged defect)
    Session: session_017nzWFRUo2U7evMkPdVniAn
    Account: zhuangjianguo (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/issue-157-child-names
    Worktree: hotclm-issue-157
    Domain: repo:hotclm (single-lane sister repo — no domain:*)
    Seat: repo:hotclm#1
    File surface: src/objects/mirror.hook.ts and the child objects' name fields (src/objects/*.object.ts, the five children) · src/translations/{en,zh-CN}/objects.lifecycle.ts · src/data/** only if seeded names must change — stop on breach; explain in the report
    Container & model: S, mode:subagent, model: opus (TIER_DEFAULT; hand-derived for a sister repo), effort: medium
    Clause-②: no
    Metadata-protocol: none
    Responsibility: this app's child record names (a zh-CN user reads them in zh-CN) | objectstack-ai/objectstack#26608 shipped in 18.3.0 | every reader of versions, reviews, deviations, signatures and obligations
    Thread-read: none
    Premise: re-measured by the dev on origin/main fc68eb6 (@objectstack 18.3.0) with the declared demo staff
    Serial constraints cleared: 18.3.0 landed (PR #198). Dispatched together on disjoint files: #195 (lifecycle actions), #197 (demoStaff, README, demo script), #157 (child-name mirror), #31 (SLA field, datasets, dashboards); #195 and #31 both add translation keys to objects.contract.ts and rebase before their PRs.


    Generated by Claude Code

  7. objectstack-fleet commented on Nov 3, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
    "issue": 157,
    "status": "done",
    "branch": "claude/issue-157-child-names",
    "pr": "#202",
    "session": "session_017nzWFRUo2U7evMkPdVniAn",
    "premise_still_valid": true,
    "summary": "Re-measured on origin/main fc68eb6 (18.3.0). As requester2 in zh-CN, the contract page tables and record H1 read 'v5 · Clean', 'Legal · Legal Counsel 2', '重大违约终止 · Accepted' and 'E-signature · Sent', and counsel2's save toasts read 合同版本“v6 · Clean”已创建 / 审查“Legal · Legal Counsel 1”已创建 / 偏离“不可抗力 · Open”已创建 / 签署记录“Wet ink · Completed”已创建. 18.3 covers all four composed shapes. label(record.FIELD) (objectstack PR #26755, merge 76a12753, an ancestor of tag @objectstack/spec@18.3.0) renders an option label in the request's Accept-Language, and a formula may read one reference hop (record.reviewer.name, record.clause.title). display_name on clm_contract_version, clm_review, clm_deviation and clm_signature becomes a text formula. The key, nameField and relatedListColumns are unchanged, and the four stamping hooks in mirror.hook.ts are retired. clm_obligation is unchanged: its name is the title its author typed, so there is no option label for label() to render. The payment-plan mirror is also unchanged. After the change, a zh-CN reader reads v6 · 清稿 / 法务 · Legal Counsel 1 / 保密义务存续 · 未决 / 湿签 · 已完成 on the toast, all body tables and the H1, and an en-US reader reads the English labels on the same records. Two surfaces do not follow the reader. (1) The activity entry on a child record page: the platform stores sys_activity.record_label at write time in the writer's locale. (2) REST search=: a formula is not indexed, so searching for a version number, reviewer name or clause title no longer matches through the name, though no console surface searches these objects. Both are in open_questions and out_of_scope_findings. File surface: my first commit also changed the version help text in src/translations/{en,zh-CN}/objects.contract.ts. That file is outside the claim's surface, so the change was reverted before the push and the shipped diff stays inside the claim. The relay opened PR #202 as a draft even though the pr_create op carried no draft key. I left that state as it is.",
    "tests": "Browser: Playwright with Chromium at /opt/pw-browsers/chromium, declared demo staff, password admin123, pnpm demo:zh on port 3166, throwaway DB, requester managers set through POST /api/v1/auth/admin/set-user-manager (200 ×3). BEFORE (fc68eb6, zh-CN): counsel2 created all four children from the DPA-2026-0002 body tables. POST clm_contract_version 201, toast 合同版本“v6 · Clean”已创建; POST clm_review 201, toast 审查“Legal · Legal Counsel 1”已创建; POST clm_deviation 201, toast 偏离“不可抗力 · Open”已创建; POST clm_signature 201, toast 签署记录“Wet ink · Completed”已创建. requester2 read the body tables and H1 in zh-CN and en-US, and both locales were identical: 'v5 · Clean', 'Legal · Legal Counsel 2', '重大违约终止 · Accepted', 'E-signature · Sent', H1 'v6 · Clean'. AFTER, on the main-seeded DB upgraded in place (0b4e133), on a fresh DB, and again on the final head 72fa60c on a fresh DB: zh-CN toasts 合同版本“v6 · 清稿”已创建 / 审查“法务 · Legal Counsel 1”已创建 / 偏离“保密义务存续 · 未决”已创建 / 签署记录“湿签 · 已完成”已创建, and en-US toasts Contract Version "v7 · Clean" created / Signature "Wet ink · Draft" created. requester2 in zh-CN: tables 'v1 · 草稿', 'v6 · 清稿', '法务 · Legal Counsel 1', '保密义务存续 · 未决', '湿签 · 已完成'; H1 v6 · 清稿 / 法务 · Legal Counsel 1 / 保密义务存续 · 未决 / 湿签 · 已完成. The same records in en-US read v6 · Clean / Legal · Legal Counsel 1 / 保密义务存续 · Open / Wet ink · Completed. The other body tables were read on the fresh DB as requester1 in zh-CN (version, review, obligation, instalment and signature on SOW-2026-0023: 'v4 · 最终签署版', '财务 · Finance Controller', '电子签 · 已完成'; obligation titles and '#1 · 2025-12-13' unchanged) and as counsel1 in en-US on ORD-2026-0005 ('Business · Business Requester 2', '抵销权 · Rejected'). REST as counsel2: PATCH signature voided with zh-CN returns 200 '湿签 · 已作废'; PATCH deviation withdrawn with en-US returns 200 '不可抗力 · Withdrawn'; GET with no Accept-Language returns 'Wet ink · Completed'. The server log has 0 formula faults. Seeds: fresh DB 120/300/60/25/30/200/300 rows (contracts, versions, reviews, deviations, signatures, obligations, instalments), the same as main; the upgraded DB applied 1130 rows with no refusal. Search as counsel2, before → after: 'v6' 1→0, 'Counsel' 35→0, '不可抗力' 2→0; 'Clean' 43→43/44, '清稿' 42→42, 'Legal' 36→36, 'Open' 9→9, 'Wet' 3→3. ⌘K palette in zh-CN, after: 清稿, 湿签 and Counsel return 未找到结果, and 保密义务存续 finds only the clause (the palette lists none of these objects; no before reading on 18.3, and 18.2's report 6439089136 also had no results). Lookups: no field in src/ references the four objects, so no lookup chip shows these names. Notifications: counsel2's message center holds only clm_execution_formalities_missing, which cites the contract title. The activity entry on a child record page stores the name the writer saw. An en-US reader of the review counsel2 created in zh-CN reads Created Review "法务 · Legal Counsel 1"; before the change, every entry was English.",
    "gates": "Final head 72fa60c (rebased onto origin/main 56ebd41). Each exit code captured before any pipe: pnpm install 0 · pnpm validate 0 (✓ Validation passed (746ms)) · pnpm lint 0 (18 warning(s), 6 suggestion(s), the same as main) · pnpm typecheck 0 · pnpm lint:i18n-gate 0 (COVERAGE : 0 missing keys across 2 locale(s)) · CLM_DEMO_SEED=1 pnpm validate 0 (✓ Validation passed (784ms)). The validate warning lines diff empty against a validate of origin/main's src/: a temporary checkout of src from origin/main, restored with git checkout HEAD -- src, after which git diff HEAD and git status were empty. Boot: 24 author-time warning(s), the same as main; no degraded or no-such-table line. PR check-runs on 72fa60c: Validate completed success; a second Validate run was in_progress when this report was written.",
    "dogfood_battery": "n/a — hotclm sister repo; no ! in the title and no (narrowing) arm",
    "mcp_calls": "0",
    "api_writes": "2: pr_create #202 through the fleet-write relay (run 41686982570; read-back 7991 bytes identical; assignee zhuangjianguo); this os-dev-report comment through post-stamped (POST issues/157/comments). git push of claude/issue-157-child-names is not a REST write.",
    "open_questions": [
    {
    "question": "REST search= on clm_contract_version, clm_review, clm_deviation and clm_signature no longer matches the version number, the reviewer name or the clause title, because a formula field is not indexed. The select halves still match ('Clean', '清稿', 'Legal', 'Open', 'Wet' have the same counts). Is that acceptable?",
    "options": [
    "A. Accept. No console surface searches these objects: the contract page body tables have no search box, and the ⌘K palette does not list them. The governed text below records that a formula name is unsearchable.",
    "B. Keep a hidden stored search key beside the formula name, for example the old hook-stamped string under another key. That brings back the stored English mirror this card retires, plus a hook to keep it in step."
    ],
    "recommendation": "A, because the loss is REST-only and nobody measured relies on it, while B brings back the stored English string the card set out to remove."
    }
    ],
    "out_of_scope_findings": [
    "class: a · reach: browser, the child record page's activity panel. An en-US reader of a review counsel2 created in the zh-CN console reads 'Created Review "法务 · Legal Counsel 1"'. A zh-CN reader reads '更新了 合同版本 "v6 · Clean"' after contract-version.hook's system update. · evidence: the platform stores sys_activity.record_label (and the quoted name in summary) when the write happens, in the writer's Accept-Language; a system write gets declared labels. The verb and the object label render per reader, but the record name does not. This is platform-side; nothing in hotclm writes sys_activity. · carrier: none; the seat decides whether to file it in objectstack · dedupe words: sys_activity record_label locale, activity feed record name writer locale, formula nameField activity snapshot, label() activity summary",
    "carrier: seat (raised before in 6439089136) · noted, not filed: on fc68eb6 the F7 inbox notification clm_execution_formalities_missing still reads 'Execution formalities outstanding: 数据处理协议 — 奎隆软件 / The signing round completed, but …' in English, in counsel2's zh-CN message center. It cites the contract title, not a child name.",
    "carrier: none · noted, not filed: the doc comment in src/data/negotiation.seed.ts (around line 79) still says review_display_name re-stamps the '"stage · reviewer"' mirror on a re-deal, and that hook is retired by this PR. The seed does not author display_name, and the re-dealt reviewer's name now follows through the formula. src/data/** is outside this claim's surface.",
    "carrier: none · noted, not filed: a demo re-run on a used DB re-deals the reviewer of a review the user added (seed upsert key contract+stage). The legal review LFmOa91kT6lGeFgO that counsel2 created for Legal Counsel 1 read Legal Counsel 2 after the second boot. This is the README-documented re-run family."
    ],
    "governed_text_proposal": {
    "AGENTS.md, Naming bullet 'Every object resolves a title.'": "Every object resolves a title. A stored name/title field; a stored display_name mirror declared as nameField; or, for a name composed of select options, a text formula display_name that renders each option with label(record.FIELD) in the reader's locale (18.3, objectstack#26608). A formula is not searchable: use it only for a name nothing searches by its parts, and never for a name a stored string can carry in every language.",
    "DESIGN.md §03 field rows": "clm_contract_version: display_name(公式 "v版本号 · label(kind)",按读者语言显示,nameField)· clm_review: display_name(公式 "label(stage) · reviewer.name")· clm_deviation: display_name(公式 "clause.title · label(status)")· clm_signature: display_name(公式 "label(method) · label(status)"). The clm_obligation and clm_payment_plan rows keep 镜像. §11 '(状态机守卫、盖戳、display_name 镜像)' stays true for those two."
    }
    }

  8. zhuangjianguo commented on Nov 3, 2026

    @zhuangjianguo
    Collaborator

    Ruling: batch #12 item 5 · letter A · maintainer 「同意」 2026-11-03T22:34:37Z

    裁定:A —— 接受公式型 display_name,AGENTS.md 命名规则改窄,合 PR #202

    决策箱文档:https://claude.ai/artifact/VTMgyRUKZu1gQChSijSnXD 。前提:objectstack#26608 的 label(record.FIELD) 已进 18.3.0(PR #26755),平台文档 content/docs/data-modeling/formulas.mdx 以本仓「'v' + string(record.version_no) + ' · ' + label(record.kind)」为示例并写明「搜索从不索引公式字段」;PR #202 head 72fa60c CI 绿,席位 HOLD 读数 6611591087 属实。REST search= 不再按版本号 / 审查人 / 条款标题匹配,今天没有任何界面搜这四个对象,维护者接受这一损失。

    裁后执行

    1. AGENTS.md 命名条(受管,维护者改或授权席位按此拟文提 PR 由维护者合):「Every object resolves a title. A stored name/title field; a stored display_name mirror declared as nameField; or, for a name composed of select option labels, a text formula display_name that renders each option with label(record.FIELD) in the reader's locale (18.3, objectstack#26608). A formula is not searchable: use it only for a name nothing searches by its parts, and never for a name a stored string can carry in every language.」
    2. 席位合 PR Child record names are stored in English, so a zh-CN user reads "v2 · Clean", "Legal · Legal Counsel 1", "Wet ink · Completed" #202(版本 / 审查 / 偏离 / 签署改公式,四个盖戳 hook 退役;义务与收付款镜像不动)。
    3. §03 四行「镜像」→「公式(按读者语言)」随席位设计文档 PR;§11「display_name 镜像」对义务与收付款仍成立。
    4. src/data/negotiation.seed.ts 里关于 review_display_name 重盖的注释随后续任意触及该文件的卡顺手改。
    5. 平台残留「动态面板按写入者语言存记录名」已立 objectstack#29962,本卡不等它。

    ⛔ 不取 B(公式名 + 隐藏英文搜索键 + hook)、C(保持英文存储名)。⛔ 本席不动标签。


    Generated by Claude Code

  9. objectstack-fleet commented on Nov 3, 2026

    @objectstack-fleet
    ContributorAuthor

    Ruling-ref: 6617239807

    Landed — PR #202 · 2026-11-03

    reading value
    PR #202 MERGED (squash on main), merged at its ACCEPT head 72fa60c; Fixes #157 closes this card
    authority batch 12 item 5, letter A, maintainer 「同意」 2026-11-03T22:34:37Z

    Release: version, review, deviation and signature names follow the reader's language (「v6 · 清稿」 for a zh-CN reader, 「v6 · Clean」 for an en-US one). The AGENTS.md naming rule and the §03 rows are on PR #120, which the maintainer merges. State: needs-user-decision removed, assignee cleared.


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions