Skip to content

A renewal draft is titled with the English "Renewal —" prefix for a zh-CN user #181

Closed

Description

@objectstack-fleet

Filing gate: ① user-visible defect, found by the launch-wizard dev (PR #180), measured under zh-CN on 18.2.0.

Symptom. 发起续签 (and the F13 auto-renewal) creates a draft whose title is Renewal — <source title>. A zh-CN user sees, for example, 「Renewal — 供应商协议 …」 in the list, the record header and notifications.

Where. src/flows/renewal-notice.flow.ts builds the title in code (Renewal — ${sourceTitle}).

Note for the dev. A stored title has a single value, so making it follow each reader's language is the per-reader record-name gap (objectstack#26608, which #157 waits on). The open question is what the app can do on 18.2 without working around that: for example, a language-neutral form, or the deployment's default locale. If none of those is honest, the card waits on objectstack#26608.


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 17
    Ruling-ref: none (seat-filed defect from the launch-wizard PR #180)
    Session: session_017nzWFRUo2U7evMkPdVniAn
    Account: zhuangjianguo (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/issue-181-renewal-title
    Worktree: hotclm-issue-181
    Domain: repo:hotclm (single-lane sister repo — no domain:*)
    Seat: repo:hotclm#1
    File surface: src/flows/renewal-notice.flow.ts (the renewal title) · its translations only if needed — 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 renewal-draft title (what a zh-CN user reads) | objectstack-ai/objectstack#26608 may carry the per-reader half | every requester who renews
    Thread-read: none
    Premise: re-measured by the dev on origin/main 706930a (@objectstack 18.2.0)
    Serial constraints cleared: the launch wizard landed (PR #180, which last touched this flow). In flight: #19 (src/data/**) and #179 (payment-overdue template); both on disjoint files.


    Generated by Claude Code

  2. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
    "issue": 181,
    "status": "done",
    "branch": "claude/issue-181-renewal-title",
    "pr": "#184",
    "session": "session_017nzWFRUo2U7evMkPdVniAn",
    "premise_still_valid": true,
    "summary": "I reproduced the defect on origin/main 706930a (@objectstack 18.2.0, pnpm demo:zh) as requester1 in zh-CN: pressing 发起续签 on SOW-2026-0016 stored the title 'Renewal — 工作说明书 — 潮汐酒店', and that is what the H1 and the list row show. F13's auto_compute node calls the same clm_renewal_draft function. The fix is in src/flows/renewal-notice.flow.ts only. renewalDraft now titles the draft with the source title followed by the new term's years, for example '工作说明书 — 潮汐酒店 (2027–2028)', or '(2027)' when the term falls inside one calendar year. A renewal of a renewal replaces the earlier year tag instead of stacking a second one, and a source with no end date keeps its title unchanged. I rejected the requester's locale and the deployment default locale. A stored title is read by several people, F13 has no requester, and the #157 ruling excludes choosing a locale at write time. A translated word that follows each reader's language is still objectstack#26608.",
    "tests": "Browser: Chromium at /opt/pw-browsers/chromium, port 3158, a fresh throwaway DB per run, persona requester1@example.com/admin123, managers set with set-user-manager (200 x3). BEFORE 706930a zh-CN: POST start_renewal 200, title 'Renewal — 工作说明书 — 潮汐酒店'; H1 'SOW-2026-0025 | 合同 | Renewal — 工作说明书 — 潮汐酒店'; list row the same. AFTER 97f0e8c zh-CN: start_renewal 200, title '工作说明书 — 潮汐酒店 (2027–2028)', start 2027-09-08, end 2028-09-07; H1 and list row show the new title; field 续签自 / 工作说明书 — 潮汐酒店. The same draft in en-US: H1 'Contract | 工作说明书 — 潮汐酒店 (2027–2028)', RENEWED FROM shown. AFTER en seed (pnpm demo), en-US: title 'Statement of Work — Tidewater Hospitality (2027–2028)' in the list row; in zh-CN the draft shows 续签自 / Statement of Work — Tidewater Hospitality. Console: the same two resource errors (404, 401) before and after. Function probe on the compiled branch file: a renewal of '… (2027–2028)' gives '… (2028–2029)'; 'MSA (2026-2027)' with 36 months gives 'MSA (2027–2030)'; a 200-character title gives length 200 ending in the tag; no end date gives the title unchanged. F13 live: NOT MEASURED. POST /api/v1/automation/expiration_sweep/trigger as the dev admin returned 403 PERMISSION_DENIED and the cron is 07:00, so I took no other route; the code reading is that auto_compute calls clm_renewal_draft. No vitest suite in this repo; no ablation, because no tested behaviour is pinned.",
    "gates": "head 97f0e8c, each exit captured before any pipe: pnpm install 0; pnpm validate 0 (the existing contract_approval gm_signoff advisory is the only warning, in a file this PR does not touch); pnpm lint 0, 6 suggestion(s) and 0 warnings, as on main; pnpm typecheck 0; pnpm lint:i18n-gate 0 (COVERAGE: 0 missing keys across 2 locales); CLM_DEMO_SEED=1 pnpm validate 0. PR check-run Validate: one run completed success, one in_progress at report time.",
    "dogfood_battery": "n/a: sister repo, no ! in the title, no narrowing arm",
    "mcp_calls": "0",
    "api_writes": "2: pr_create via the fleet-write relay (#184, read-back identical, 6615 bytes, assignee zhuangjianguo), and this os-dev-report comment via post-stamped (POST issues/181/comments). git push is not a REST write.",
    "open_questions": [
    {
    "question": "Is a year-tagged title the product behaviour you want for a renewal draft? It is a product choice as well as the defect fix: the name no longer says 'renewal' in any language. The link is shown through renewed_from (续签自 / Renewed From) and the source's 续签合同 / Renewals list.",
    "options": [
    "A: 'SOURCE_TITLE (YYYY–YYYY)' from the new term, replacing an earlier year tag (shipped in #184)",
    "B: the source title unchanged, which leaves two rows with the same name in lists and lookups",
    "C: keep the English 'Renewal —' prefix until objectstack#26608 ships a per-reader name"
    ],
    "recommendation": "A. It contains no words, so neither a zh-CN nor an en reader sees a foreign one, and it names what is actually new about the contract. B is ambiguous in lookups, and C keeps the defect."
    }
    ],
    "out_of_scope_findings": [
    "carrier: none · noted, not filed: renewal drafts created before this change keep the stored 'Renewal — …' title, because there is no data migration, and renewing one carries that title forward (listed in the PR Acceptance notes)",
    "carrier: none · noted, not filed: POST /api/v1/automation/expiration_sweep/trigger refuses a scheduled flow (403), so F13's auto-renewal draft cannot be driven on demand in a dev box; this is by platform design, recorded as the reason F13 is NOT MEASURED"
    ],
    "governed_text_proposal": "none: DESIGN.md §03 and §06 F12/F13 do not specify the renewal title format"
    }


    Generated by Claude Code

  3. added a commit that references this issue on Oct 27, 2026
    20b8275
  4. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    Ruling-ref: none (seat-filed defect from PR #180)

    Landed — PR #184 · 2026-10-27

    reading value
    PR #184 MERGED (squash on main), merged at its ACCEPT head 97f0e8c; Fixes #181 closes this card
    authority maintainer, project thread, verbatim: 「你可以自己审核的就自己合并」

    Release: a renewal draft is now titled after its source with the new term's years, for example 「工作说明书 — 潮汐酒店 (2027–2028)」, with no English word in it. State: pm:dispatched 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