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 }}
Repository navigation
A renewal draft is titled with the English "Renewal —" prefix for a zh-CN user #181
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.
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/main706930a (@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.
{
"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"
}
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.
Activity
objectstack-fleet commentedon Oct 27, 2026
Claim: PM loop round 17
Ruling-ref: none (seat-filed defect from the launch-wizard PR #180)
Session:
session_017nzWFRUo2U7evMkPdVniAnAccount:
zhuangjianguo(the seat's linked user asGET /useranswers it; the card's assignee)Branch:
claude/issue-181-renewal-titleWorktree:
hotclm-issue-181Domain:
repo:hotclm(single-lane sister repo — nodomain:*)Seat:
repo:hotclm#1File surface:
src/flows/renewal-notice.flow.ts(the renewal title) · its translations only if needed — stop on breach; explain in the reportContainer & model:
S,mode:subagent,model: opus(TIER_DEFAULT; hand-derived for a sister repo),effort: mediumClause-②: 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 renewsThread-read: none
Premise: re-measured by the dev on
origin/main706930a(@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
objectstack-fleet commentedon Oct 27, 2026
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
A renewal draft is titled with its new term, not an English prefix (#184
objectstack-fleet commentedon Oct 27, 2026
Ruling-ref: none (seat-filed defect from PR #180)
Landed — PR #184 · 2026-10-27
MERGED(squash onmain), merged at its ACCEPT head97f0e8c;Fixes #181closes this cardRelease: 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:dispatchedremoved, assignee cleared.Generated by Claude Code