Repository navigation
Implementation notes are shown to users as help text — field and dashboard-widget descriptions cite hook files, card numbers, DESIGN.md sections and PRs - #131
Merged
Conversation
Descriptions in the approval flow, the datasets, the row policies, the sharing rules and the party's Country help were developer notes: DESIGN.md sections, policy names, "the daily job stamps", a 会签 step name in the English UI, and a Country help promising governing-law defaults and screening that nothing in the app performs. Each now says what the reader needs; the notes moved to code comments beside the text. Bundles mirror every inline change in en and zh-CN. The intake wizard's version step showed `templateNote`, a runtime assignment string, so zh-CN users read English. On 18.1.0 an assignment value is not translatable and a screen text slot's hole is a bare variable path, so the step now carries a static description (a bundle key) and the template sentence moved to the "Draft from template" toggle's inlineHelpText (also a bundle key), shown only on a type with a template. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017nzWFRUo2U7evMkPdVniAn
clm.app.ts named the retired bind-position-sets.ts twice; members hold clm_requester through isDefault. signature-record.flow.ts called is_current's default false; it is true, and the flow writes false on purpose. The records.profile.ts docblock missed the approved read rule. flows/index.ts put F8 and F15 in cards 12 and 13; both are card 12. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017nzWFRUo2U7evMkPdVniAn
The three signing companies and seven departments are seeded rows too (measured: inserted 830 on a clean database). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017nzWFRUo2U7evMkPdVniAn
Contributor
Author
席位核对 — ACCEPT · head
|
| check | reading |
|---|---|
| shape | draft → main, Part of #95; assignee zhuangjianguo; mergeable clean against main 23c8a71 |
| CI on the head | both Validate check-runs success on aacd216 = PR head.sha |
| scope | 22 files (+107/−60), the claim's surface: approval rung-2 label and edge (no Chinese in the English UI; 会签 stays in zh-CN), flow description, country_code help, three dataset descriptions, 12 row-policy and 7 sharing-rule descriptions, the four stale comments, README's 830. src/sharing/contract.sharing.ts is read as inside the claim's "sharing descriptions" item — accepted. Nothing governed |
| templateNote | replaced by the supported route, not a workaround: a static screen description plus the toggle's inlineHelpText, both bundle keys; measured in zh-CN on a type with and without a template, and the template / upload branches behave as before |
| measured | boot signatures identical; the rewritten texts render in en and zh-CN where users read them; NOT MEASURED: the rung-2 label in an approver's inbox (needs a band B/C deviation) |
| not in this PR | the action descriptions (submit_contract, send_for_approval, activate_contract, executed_upload and two param helps) — their keys sat in the objects.contract.ts bundles #129 held; #129 has landed, so the seat dispatches them as the closing follow-up with the wording this PR's body proposes. Row-policy / sharing descriptions have no translation key on 18.1.0 (admin-facing, observation only) |
Landing: under the maintainer's merge authorization (project thread: 「你可以自己审核的就自己合并」).
Generated by Claude Code
zhuangjianguo
marked this pull request as ready for review
October 25, 2026 15:59
This was referenced Oct 25, 2026
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.
Part of #95 — left on the card: the action descriptions in
src/actions/contract-lifecycle.actions.tsandsrc/actions/contract-backfill.actions.ts. Their bundle keys (clm_contract._actions.*) live insrc/translations/{en,zh-CN}/objects.contract.ts, which the in-flight #129 holds, so neither the inline text nor the bundles were touched (changing only the inline text would leave the en bundle showing the old text). Proposed wording is under "What is left".What changed
User-facing text (inline and both bundles)
contract-approval.flow.ts: the rung-2 step label readsHead of Legal + Finance Controller (joint sign-off)in English (zh-CN keeps法务负责人 + 财务负责人(会签)); the designer edge readsLegal + finance, jointly; the flow description now names the rungs and drops "routing flags" (it also said rung 2 is always a joint sign-off, which is wrong: it can be legal only or finance only).party.object.tscountry_code: the help no longer claims "Drives governing-law defaults and screening". Nothing in the app reads the field, so it now just says what the field holds. Both bundles were updated.src/datasets/**:contract_cycle_timeno longer says "see the module comment…";obligation_metricsandpayment_metricsno longer say "the arrears the daily job stamps". The en bundle mirrors the inline text, and zh-CNcontract_cycle_timewas rewritten.src/profiles/**row policies (12) andsrc/sharing/contract.sharing.tssharing rules (7): no more "DESIGN.md §04", policy names, "permissive companion", "OR-merge", "§13 Q1" or "ruling A on [Decision] Who presses Start Signing? Records holds the capability but cannot read anapprovedcontract, legal can read it but lacks the capability, andclm_admincannot write the contract #100". Each now says what the rule allows, with exact status names where it is a window. The notes moved to code comments beside the text. These have no translation key on 18.1.0.The version step of the intake wizard (
templateNote)On 18.1.0 an
assignmentvalue is not translatable. A screen text slot's{{ }}hole is a bare variable path (@objectstack/formulaparseHole: "holes are a field path with an optional formatter … not arbitrary logic"), so no template can pick a sentence by locale. Translated screen copy is the supported route:flows.FLOW.screens.NODE.description(picked by the engine in the run's locale) and…fields.FIELD.inlineHelpText(overlaid by the runner). The step now has:inlineHelpText, shown only where the toggle is (a type with a template).templateNoteis gone from both assignments;templateAvailableand every edge are unchanged. The screen was not split.Stale code comments
src/apps/clm.app.ts: it named the retiredbind-position-sets.tstwice (no such file onmain). It now points atisDefault: trueinrequester.profile.tsand atpositions.ts.signature-record.flow.ts: it calledis_current's defaultfalse. The field defaults totrue(contract-version.object.ts), and the flow writesfalseon purpose.records.profile.tsdocblock: it named onlycontract_records_execution. It now also namescontract_records_approved_read.src/flows/index.ts: it said F8 and F15 arrive "with cards 12 and 13". Both are card 12 (docs/backlog/12-esign-and-crm-handoff.md); card 13 is the AI skills.README:
pnpm demo loads 830 rows, now including the three signing companies and seven departments. Measured:{"inserted":830,…}on a clean DB, both before and after this change.Gates (tree of head
aacd216, each exit captured before any pipe)Browser (18.1.0,
pnpm demo --port 3495, fresh.objectstack/dataeach run, Chromium /opt/pw-browsers/chromium)Two boots: before =
mainabd5401, after = this branch. Each seededinserted 830 / errored 404. The normalised WARN/ERROR signatures are 423 lines on each side and differ only in two timestamps. Nodegraded, nono such table, no plugin-load failure.Personas: the dev admin, and
Business Requester 1created the README way through the admin create-user route (POST /api/v1/auth/admin/create-user200, thenchange-password200). As admin, the NDA type was given a template on the type's Edit form (file input,PATCH clm_contract_type200), so there was one type with a template and one without (DPA).This contract type carries no template; upload the first version on the next step.这份合同的起点文件。默认在下一步上传。This contract type carries a template. Tick "Draft from template" …这类合同带有模板。勾选后,模板会作为第 1 版附上,不用再上传文件。The document this contract starts from. By default you upload it on the next step., plus on NDADraft from templatewithThis contract type carries a template. Tick to attach it as version 1 instead of uploading a file.v1 · Draftfiled withDrafted from the contract type template./nda-template.pdf. DPA → 上传首个版本 object form. Same paths as before.Two-letter ISO 3166-1 code of the country the party is based in (e.g. US, DE, CN).; zh-CN相对方所在国家或地区的两位 ISO 3166-1 代码,例如 US、DE、CN。; "Drives governing" / 「适用法律的默认值」 not foundThe finance controller edits contracts from approved onward. The legal fields and the status stay locked for finance.Head of Legal + Finance Controller (joint sign-off), edgeLegal + finance, jointly, the new description; 会签 not foundGET /api/v1/i18n/translations/{en,zh-CN}flows.contract_approval.approvals.legal_finance_jointen… (joint sign-off)/ zh-CN…(会签);screen_documentdescription anddraft_from_template.inlineHelpTextin bothBrowser console on every page: the pre-login
401(get-session) and one404resource, the same as before.NOT MEASURED: the rung-2 step label as an approver sees it in 待我处理. Reaching the joint rung needs a contract with an accepted deviation in band B or C, which needs a legal persona with a position; this run's personas were the admin and a requester. The served bundle key above is the closest reading.
What is left on #95
The action descriptions and their bundle keys (
objects.contract.tsis held by #129). Proposed wording for that follow-up:submit_contract: "Hand the draft over. Its approval route is worked out, and it is either assigned to a lawyer for review or, for a type without legal review, sent straight to approval."send_for_approval: "Close legal review and start approval. Not possible while any deviation is still open."activate_contract: "Bring a signed contract into force. Its activation date is recorded and the renewal reminder is set up."executed_upload: "Record a contract that was signed before this system, or outside it. It is created directly as active and marked as backfilled, skipping review and approval, and the executed copy is filed as its final signed version." Itssigned_datehelp becomes "The date on the executed document. It is recorded as both the signed date and the execution date.", and itsexecuted_filehelp becomes "The signed PDF or scan. It is filed as version 1, the final signed version."Acceptance notes
src/sharing/contract.sharing.tsis read as inside the claim's "row-policy and sharing descriptions" item. It is the only place the sharing-rule descriptions named in PR Implementation notes are shown to users as help text — field and dashboard-widget descriptions cite hook files, card numbers, DESIGN.md sections and PRs #103's ACCEPT live.TranslationDataSchemahas no group for permission sets or sharing rules), so Setup shows them in English under zh-CN. Observation, not filed.src/datasets/cycle-time.dataset.ts's header still says "against the 820-row demo". It records a 17.3.0 measurement and is left as written.🤖 Generated with Claude Code
https://claude.ai/code/session_017nzWFRUo2U7evMkPdVniAn