Repository navigation
chore(deps): upgrade the ObjectStack platform to 18.2.0 (folds the five drifted tests of #2308) #2319
Description
Filing gate ③ a task the maintainer directed, in the hotcrm project thread on 2026-10-27T07:19Z, verbatim 「首先 hotcrm 的 objectstack 升级到 18.2.0,然后派发卡片使用浏览器做完成的测试验证。」 and 「完整的测试验证」. This card is the upgrade half; the browser verification is its own card and runs on main once this lands. Filed by the repo:hotcrm seat 1 (huangyiirene, session session_01J8VVAnPkgK6CWrJa6t7Fk5). ⛔ Not a claim.
Reader (who acts): the repo:hotcrm seat 1, one dev.
Grade: priority:p1, by the precedent of the 18.0.0 bump (#2202) and the next.* bumps (#2179, #2136), under the maintainer's rule 「发版本优先的都p1」.
Business reason: HotCRM is the showcase of the platform; on 18.1.0 it cannot show nine fixes the lane is already waiting on (below), and every card blocked on a platform release stays blocked until the pin moves.
What is published (read from the npm registry when this card was filed)
@objectstack/*dist-taglatest=18.2.0;@objectstack/core@18.2.0was published at 2026-10-27T06:18Z.- Built from framework release commit
27f38ada49("chore: version packages", chore: version packages objectstack#25640).main(9464673) pins18.1.0, built frome649c2d91(#25606). The framework rangee649c2d91..27f38ada49is 451 commits.
The work (AGENTS.md "Platform Upgrades", in order, as #2202 did)
- Read the release notes for
18.2.0first (docs.objectstack.ai releases page, then each pinned package'sCHANGELOG.md). List every breaking or behaviour change that touches this app. - Bump every
@objectstack/*entry together to18.2.0, exact. AlignspecVersion/engines.protocolwherever the 18.0.0 bump aligned them. Regenerate the lockfile with pnpm. - Fix the test drift this card folds in: Five HotCRM tests assert framework behaviour that objectstack main (6390fe52) changed: NOT NULL wording ×3, successMessage parse ×1, a throwaway hierarchy-scope set ×1 — update them before HotCRM moves past 18.1.0 #2308. Five HotCRM tests assert framework behaviour that 18.2.0 changed (NOT NULL wording ×3,
successMessageparse ×1, the throwaway hierarchy-scope set ×1). The four framework commits behind them are all in27f38ada49. Five HotCRM tests assert framework behaviour that objectstack main (6390fe52) changed: NOT NULL wording ×3, successMessage parse ×1, a throwaway hierarchy-scope set ×1 — update them before HotCRM moves past 18.1.0 #2308's table names each test and what it needs; the protection each pins must survive (assert the refusal by code / validator message, not by the SQLite text). - Re-scope pin claims that name 18.1.0 (AGENTS.md "Platform Upgrades" step 5): re-scope, never renumber.
pnpm verifygreen, then browser-verify the main journeys on the new pin (leads → convert, opportunities, quotes, cases, web forms, dashboards, the Reports group). The full inventory pass is the next card, not this one.- A changeset records the upgrade. ⛔ No release, tag or marketplace push from this card.
Cards that unlock when this lands (each closes only through its own card)
Every fix below is an ancestor of 27f38ada49 (checked at filing, git merge-base --is-ancestor exit 0): #2276 and #2271 (cc10e74fef), #2242 (43edf90b56), #2294 and half of #2249 (47af3dde42, f6c619329a), #2296 (4391c5067f), #2306 (dd5e3554f0), #2285 (1ee1d1bd41; branch claude/project-thread-5o1adp @ 2002ca5 holds its guard), #2297 (4548ba34e6).
Dedupe
The repo-scoped issues?state=all listing (239 issues, #1805–#2318), titles grepped for 18.2, upgrade, bump, browser: 0 open upgrade cards; the closed precedents are #2202 (18.0.0), #2179, #2136, #2124, #2105, #2031, #1807. Control: the same grep for upgrade or 18.1.0 returns 11.
Activity
objectstack-fleet commentedon Oct 27, 2026
Dispatch order · #2319 (folds #2308) ·
repo:hotcrmseat 1 ·huangyiirene· sessionsession_01J8VVAnPkgK6CWrJa6t7Fk5· 2026-10-27T07:31Z⛔ Not the claim. The claim follows as its own comment once the card thread reports its branch; the thread starts only after the newest
Claim:on this card names its branch, and writes no claim and no assignee of its own.Role file:
objectstack-ai/objectstack.claude/agents/os-dev.md(read it in full; repo.claude/agentstypes are not loaded in card threads). It wins over this order on any conflict. The repo'sAGENTS.md(hotcrm) binds; read it before the first edit.Container & model: M ·
mode:thread· model:TIER_DEFAULT(sister repo,dispatch-gates --tieranswers only objectstack's tree, so the tier is hand-derived: a pin bump plus test updates, no protocol surface) · effort:xhigh(p1).Writes: the PR only through the relay op
pr_create(draft, basemain,assignees: [huangyiirene]); comments, labels and bodies only through the relay write tools in objectstackscripts/pm/(post-stamped.mjs,label-write.mjs); ⛔ no GitHub MCP write (create_pull_request,update_pull_request,issue_write,add_issue_commentand the like). Report both numbers:api_writesandmcp_calls.Report: the
os-dev-reportJSON as a comment on this card and as the final message to the seat thread. Machine-checkable fields only matter: gates, deviations, files_changed.Ruling (not to be re-decided)
18.2.0for every@objectstack/*entry. No ruling exists on any test-shape choice; Five HotCRM tests assert framework behaviour that objectstack main (6390fe52) changed: NOT NULL wording ×3, successMessage parse ×1, a throwaway hierarchy-scope set ×1 — update them before HotCRM moves past 18.1.0 #2308's "what each needs" list is the card's reading, not a ruling.PM mechanism assumptions (measure before acting; falsify freely)
48e84a90af,1af2cea684,a4eae06499,b029c9036f) are ancestors of objectstack27f38ada49, the 18.2.0 version commit — measured by the seat at filing; re-measure by running the five tests on the bumped pin (expect 8 failures before your test edits).e649c2d91..27f38ada49(451 commits) may carry more behaviour changes than Five HotCRM tests assert framework behaviour that objectstack main (6390fe52) changed: NOT NULL wording ×3, successMessage parse ×1, a throwaway hierarchy-scope set ×1 — update them before HotCRM moves past 18.1.0 #2308 lists; Five HotCRM tests assert framework behaviour that objectstack main (6390fe52) changed: NOT NULL wording ×3, successMessage parse ×1, a throwaway hierarchy-scope set ×1 — update them before HotCRM moves past 18.1.0 #2308 was measured on6390fe52, not on the release. Treat any further red as this card's, and report it.Suggested route (optional; measurement wins)
pnpm verifygreen, then browser-verify the main journeys on the new pin (Chromium at/opt/pw-browsers/chromium, neverplaywright install); one screenshot per journey into the PR body's Verification section is enough — the full inventory pass is QA: complete browser pass of HotCRM on @objectstack/* 18.2.0 — all 161 feature-inventory rows, Setup and Studio, in six tracks #2320.Fixes #2319, and a separate lineFixes #2308. A changeset recording the upgrade (notCHANGELOG.md).mainsince9464673at the time of this order; mergemainbefore opening the PR anyway.Serial constraints:
package.json,pnpm-lock.yaml,objectstack.manifest.jsonare reserved for this card on the seat post's hot-file queue. No other hotcrm card is in flight.Four-axis frame (only if you return
needs_decision), pasted verbatim from SKILL.md at objectstack185512cc, block md5abff5f852c8fd09b79ec0623439aa4f0每个方案必须沿四条固定评估轴分析,这是决策分析的核心原则,不是可选项:
还是投机性能力面?判据要求实测(谁在写这个键、谁在读、
示例应用与真实部署的用法),「读起来像有用」不作数。这条轴会改变结论,不是陪衬。
contract-first),临时补丁式选项要明说长期代价。
契约收紧(严格 schema、publish 时响亮拒绝)优于消费端宽容(
??回退、静默容错)——宽容恰是 AI 批量犯错被掩盖的温床;声明即强制,绝不让 AI 声明一个运行时不兑现的能力。
从紧,无拉动的声明面按 implementation-first 处置,已发布零消费能力不因沉没成本豁免。
过渡也从紧 —— 创业阶段不渐进:废弃别名/拼写与能力退役默认立即退休,无分阶段
窗口、无双拼写宽限;staged 仅凭具名外部用户证据方可荐。新增门禁默认否:门禁是只减
不增的零件,例外只有维护者点名;荐新增门禁须引其点名原话,否则荐「不加」。
基本裁决原则:spec 声明 > 实现 > 文档面;声明而未兑现是实现缺口,补实现或退役,
⛔ 不在消费端收窄;未声明键随实现,文档随之。「声明即强制」只及 spec 与元数据契约、
运行时能力,⛔ 不及 AGENTS.md 这类给 agent 读的约定 —— 那些的读者是 agent,不是门禁。
推荐意见必须基于这四条轴给出理由;四轴冲突时如实呈现权衡,
交维护者拍板。
Generated by Claude Code
objectstack-fleet commentedon Oct 27, 2026
Claim: PM loop round 1
Session:
session_01J8VVAnPkgK6CWrJa6t7Fk5Account:
huangyiireneBranch:
claude/project-thread-s7fynbWorktree:
hotcrm-issue-2319(card thread; branch is platform-designated, the measured platform exception toclaude/issue-N-slug; implementing sessionsession_01J8VVAnMh9QEFi5HAjrqwVs)Domain:
repo:hotcrm(single-lane repo, nodomain:*)Seat:
repo:hotcrm#1File surface:
package.json,pnpm-lock.yaml,objectstack.manifest.json,src/*/index.ts(specVersion / engines alignment), the five test files #2308 names undertest/, pin-claim re-scopes the sweep finds,.changeset/(stop on breach; explain in the report)Container & model:
M,mode:thread,model: TIER_DEFAULT (sister repo, hand-derived: pin bump plus test updates, no protocol surface),effort: high — the order asked xhigh (p1); the thread opened at the project's default effort, which only the maintainer sets (coordinator note), so this is the served valueClause-②: no
Metadata-protocol: none
Responsibility: n/a — not a defect card (#2308, folded here, is test drift from framework changes, its own table names the producer commits)
Thread-read: 6436282293
Premise: holds — npm
@objectstack/*latest18.2.0, version commit objectstack27f38ada49; the four commits behind #2308 are its ancestors (exit 0)Serial constraints cleared: #2307 in flight on four dashboard files and
.changeset/, disjoint; no other in-flight lane cardFolds: #2308 (one PR,
Fixes #2319andFixes #2308on separate lines). Dispatch order: comment 6436282293.objectstack-fleet commentedon Oct 27, 2026
Claim amendment · #2319 ·
repo:hotcrmseat 1 · sessionsession_01J8VVAnPkgK6CWrJa6t7Fk5· 2026-10-27T07:40ZBranch:
claude/project-thread-s7fynbFile surface, amended (the dev stopped on the breach and asked first, as it should): add
src/sales/translations/{zh-CN,es-ES,ja-JP}/app.ts,.../objects.pipeline.ts,.../objects.service.ts, and any i18n test that pins those packs.Why it is in scope: on 18.2.0,
pnpm lint(objectstack lint --strict, a CI step) exits 1 on 228 warnings, every one a translation class 18.2.0 added (report labels, positions, permission sets, lead/case form-section field copy): 76 strings × zh-CN / es-ES / ja-JP. Lint configuration is platform tooling (AGENTS.md §3), so the only in-repo answer is to translate them; ⛔ no lint suppression, no rule-off, no baseline.Overlap with blocked cards, and how it is handled: the reports half is #2306's ask; the positions and permission-set halves overlap the translated halves of #2249 and #2294. ⛔ No closing keyword for any of the three in this PR. The report names, per card, which of its items the diff delivers; the seat judges each card's closure at ACCEPT against its own acceptance text. Translations follow the conventions the packs already use (zh-CN wording of neighbouring entries; no coined terms where the pack already carries one).
Hot-file queue: the three locale packs above join
package.json/pnpm-lock.yaml/objectstack.manifest.jsonas reserved for #2319 until it lands.Generated by Claude Code
objectstack-fleet commentedon Oct 27, 2026
os-dev-report
{ "issue": 2319, "status": "done", "branch": "claude/project-thread-s7fynb", "pr": "https://github.com/objectstack-ai/hotcrm/pull/2322", "session": "session_01J8VVAnMh9QEFi5HAjrqwVs", "premise_still_valid": true, "summary": "All 23 @objectstack/* deps moved 18.1.0 → 18.2.0 exact; specVersion/engines.protocol in objectstack.manifest.json and the four src/*/index.ts manifests → ^18.2.0. Two further reds the card did not name, both this card's: (1) the regenerated lockfile kept better-auth's zod at 4.6.5 beside 18.2.0's 4.6.7, so better-call resolved twice and the hoisted linker nested it, failing 103/224 test files at load ('Cannot find package better-call'); `pnpm dedupe` fixed it, removing only older duplicates. (2) 18.2.0's new translation keys (reports, positions, permissions, form-section entry copy) made `objectstack lint --strict` fail on 228 i18n/missing-* warnings; translated all 76 strings x zh-CN/es-ES/ja-JP under the seat's amended claim (comment 6436422631), reusing pack wording, no suppression. #2308's five tests now assert the 18.2.0 answers with the protection intact (envelope + field for the NOT NULL refusals, template slot for Send Email, publish refusal for the hierarchy probe). Pin claims re-scoped incl. three pending changesets. Browser pass in zh-CN green on every journey the card named. Overlap for the seat to judge: #2306 reports half delivered (report labels in 3 locales, seen on the report index); #2249 and #2294: their existing names+descriptions translated in 3 locales, and Setup → Positions on 18.2.0 shows a description column; neither card's own description-writing scope is touched. No closing keyword for any of the three.", "tests": "Final head 14c2223: `pnpm verify` → Test Files 224 passed (224), Tests 4380 passed | 1 skipped (4381). Measured path: 88d6b41 (bump only) pnpm test 107 failed/117 passed files (103 = better-call load error); 6df68a8 (dedupe) 5 failed/219 passed files, 7 failed tests = #2308's five files + docs-declared-versions x3; after the test edits the targeted runs: form-required-server-defaults + opportunity-line-item-add-picker 32/32, hierarchy-read-depth + i18n-references 39/39, docs-declared-versions + permission/position-descriptions + account-workbench-exhibit 48/48. No separate ablation: no src behaviour changed (test-only edits); the picker test's own ABLATION case still exercises the unbound-hook refusal and passes on the new assertion. hierarchy-read-depth's enterprise flip leg is NOT MEASURED (no @objectstack/security-enterprise in this repo). Browser (Chromium headless 1440x900, zh-CN, pnpm dev fresh DB, dev admin, tree 7761a66): lead list + convert David Kim with opportunity → status converted, converted_account/contact/opportunity set, toast 线索转化成功!; opportunity/quote/case lists and record pages render with stored titles; /_console/f/contact-us and /_console/f/support show translated entry hints; five dashboards draw (recharts marks 12/19/14/16/12); report index lists ten Chinese report names, Opportunities by Stage draws; Setup Positions/Permission Sets show Chinese labels+descriptions; 0 page errors, 0 5xx. Screenshots: project files issue-2319/ (13 PNGs).", "gates": "Local (hotcrm chain = pnpm verify per AGENTS.md; dispatch-gates.mjs answers objectstack's tree only, so no --commands derivation): `pnpm verify` under os-verify-lock at 14c2223 → `os-verify-lock: VERDICT command-exit 0` (held 12m37s, waited 0s): validate `✓ Validation passed`, typecheck exit 0, lint exit 0, hygiene `✓ source hygiene clean`, hygiene:tokens exit 0, build `✓ Build complete`, test 224/224 files. Same chain green at 7761a66 before the main merge (VERDICT command-exit 0, 11m41s). CI on PR #2322 at report time: Vercel Preview Comments success, Label Pull Request success; Typecheck and Build, Analyze Code (javascript), Quality Checks, Playwright, Check Changeset, link-check, Build and Test (22.x) in_progress.", "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm; hotcrm has no dogfood battery", "mcp_calls": "6 — all reads: issue_read x5 (2319 get x2, 2319 get_comments x2, 2308 get), pull_request_read get_check_runs x1 (PR 2322). No MCP write.", "api_writes": "2 — fleet-write relay pr_create (POST /repos/objectstack-ai/hotcrm/pulls draft + POST /repos/objectstack-ai/hotcrm/issues/2322/assignees, relay run 40474816106, read-back identical 10590 bytes); this os-dev-report comment POST /repos/objectstack-ai/hotcrm/issues/2319/comments via post-stamped.mjs. Plus git pushes (not REST writes).", "deviations": [ "File surface widened mid-run with the seat's amendment (comment 6436422631) for the three packs' app.ts / objects.pipeline.ts / objects.service.ts; also edited under the claim's pin-claim and .changeset/ rows: docs/STATUS.md, content/docs/whats-new{,.zh-Hans,.zh-Hant}.mdx, src/sales/pages/account_workbench.page.ts (comment), test/permission-set-descriptions.test.ts (header), and three other cards' pending changesets (2230, 2249, 2294) whose release text 18.2.0 made false.", "To mount the platform-designated branch in a dedicated worktree (../hotcrm-issue-2319) the shared checkout /home/claude/hotcrm was switched to a detached HEAD at 9464673; nothing was edited there.", "Session context asked for a PR review request via MCP update_pull_request; skipped because the dispatch forbids MCP writes. Assignee set through pr_create.", "Screenshots are not embedded in the PR body (no allowed image host); the body carries the per-journey readings and points to the project files.", "CI runs `pnpm run test:coverage`; locally `pnpm test` (same vitest suite without coverage).", "PR footer uses os-dev.md's session-URL footer; commit trailers are model-free per os-dev.md, not the harness reminder's model-named pair." ], "files_changed": [ ".changeset/2230-stored-record-titles.md", ".changeset/2249-position-descriptions.md", ".changeset/2294-permission-set-descriptions.md", ".changeset/2319-objectstack-18-2-0.md", "content/docs/whats-new.mdx", "content/docs/whats-new.zh-Hans.mdx", "content/docs/whats-new.zh-Hant.mdx", "docs/STATUS.md", "objectstack.manifest.json", "package.json", "pnpm-lock.yaml", "src/marketing/index.ts", "src/revenue/index.ts", "src/sales/index.ts", "src/sales/pages/account_workbench.page.ts", "src/sales/translations/es-ES/app.ts", "src/sales/translations/es-ES/objects.pipeline.ts", "src/sales/translations/es-ES/objects.service.ts", "src/sales/translations/ja-JP/app.ts", "src/sales/translations/ja-JP/objects.pipeline.ts", "src/sales/translations/ja-JP/objects.service.ts", "src/sales/translations/zh-CN/app.ts", "src/sales/translations/zh-CN/objects.pipeline.ts", "src/sales/translations/zh-CN/objects.service.ts", "src/service/index.ts", "test/form-required-server-defaults.test.ts", "test/hierarchy-read-depth.test.ts", "test/i18n-references.test.ts", "test/opportunity-line-item-add-picker.test.ts", "test/permission-set-descriptions.test.ts" ], "open_questions": [], "out_of_scope_findings": [ "class: a (user-visible) · reach: browser zh-CN /_console/apps/app.objectstack.hotcrm/report/opportunities_by_stage shows the chart title 'Pipeline by Stage' in English while the heading and table are Chinese; no lint class reports it, so it is unclear whether the bundle has a key for a report chart's title (platform) or HotCRM lacks the entry · dedupe words: report chart title translation, Pipeline by Stage, report i18n · carrier: #2320 (the full browser inventory pass)", "observation · first `pnpm dev` boot logs `formula field display_title on crm_quote / crm_case could not be evaluated (No such key: quote_number / case_number)` while seeding; stored titles read back correct and record pages show them · carrier: none, noted in PR Acceptance notes" ] }Generated by Claude Code
objectstack-fleet commentedon Oct 27, 2026
ACCEPT pointer ·
repo:hotcrmseat 1 · sessionsession_01J8VVAnPkgK6CWrJa6t7Fk5· 2026-10-27T08:56ZThe review of record is
## 席位核对on PR #2322 (comment 6437676636): ACCEPT at head14c2223542, all checks green. The PR is non-governed, so the seat flips it ready and arms auto-merge, and the merge queue lands it.Generated by Claude Code
objectstack-fleet commentedon Oct 27, 2026
Landed ·
repo:hotcrmseat 1 · sessionsession_01J8VVAnPkgK6CWrJa6t7Fk5· 2026-10-27T08:59ZGET /pulls/2322automerge_enable), on the ACCEPTed head14c2223542. All check-runs weresuccesson that head.origin/maingit log+git show origin/main:package.json1f3f888"upgrade the ObjectStack platform to 18.2.0 … (#2322)". 23@objectstack/*pins read18.2.0, and there are 0 hits for18.1.0inpackage.json.State: #2319 and #2308 were closed
completedby the PR'sFixeslines.pm:dispatchedis removed from both in this stroke. Type and grade labels stay, and the assignee stays as the record of who carried it.Follow-through in the same round: #2306, #2249 and #2294 close on this landing (overlap judgment in the ACCEPT, comment 6437676636). #2320 (the browser pass) unblocks and is dispatched track by track. The in-flight cards #2310, #2312 and #2313 merge
origin/main.Generated by Claude Code