Skip to content

chore(deps): upgrade the ObjectStack platform to 18.2.0 (folds the five drifted tests of #2308) #2319

Closed

Description

@objectstack-fleet

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-tag latest = 18.2.0; @objectstack/core@18.2.0 was published at 2026-10-27T06:18Z.
  • Built from framework release commit 27f38ada49 ("chore: version packages", chore: version packages objectstack#25640). main (9464673) pins 18.1.0, built from e649c2d91 (#25606). The framework range e649c2d91..27f38ada49 is 451 commits.

The work (AGENTS.md "Platform Upgrades", in order, as #2202 did)

  1. Read the release notes for 18.2.0 first (docs.objectstack.ai releases page, then each pinned package's CHANGELOG.md). List every breaking or behaviour change that touches this app.
  2. Bump every @objectstack/* entry together to 18.2.0, exact. Align specVersion / engines.protocol wherever the 18.0.0 bump aligned them. Regenerate the lockfile with pnpm.
  3. 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, successMessage parse ×1, the throwaway hierarchy-scope set ×1). The four framework commits behind them are all in 27f38ada49. 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).
  4. Re-scope pin claims that name 18.1.0 (AGENTS.md "Platform Upgrades" step 5): re-scope, never renumber.
  5. pnpm verify green, 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.
  6. 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

  1. added
    dependenciesDependency bumps and lockfile changes
    pm:queueReady for the PM dispatch loop
    priority:p1High: required for production / M2
    on Oct 27, 2026
  2. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    Dispatch order · #2319 (folds #2308) · repo:hotcrm seat 1 · huangyiirene · session session_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/agents types are not loaded in card threads). It wins over this order on any conflict. The repo's AGENTS.md (hotcrm) binds; read it before the first edit.
    Container & model: M · mode:thread · model: TIER_DEFAULT (sister repo, dispatch-gates --tier answers 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, base main, assignees: [huangyiirene]); comments, labels and bodies only through the relay write tools in objectstack scripts/pm/ (post-stamped.mjs, label-write.mjs); ⛔ no GitHub MCP write (create_pull_request, update_pull_request, issue_write, add_issue_comment and the like). Report both numbers: api_writes and mcp_calls.
    Report: the os-dev-report JSON 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)

    PM mechanism assumptions (measure before acting; falsify freely)

    Suggested route (optional; measurement wins)

    Serial constraints: package.json, pnpm-lock.yaml, objectstack.manifest.json are 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 objectstack 185512cc, block md5 abff5f852c8fd09b79ec0623439aa4f0

    每个方案必须沿四条固定评估轴分析,这是决策分析的核心原则,不是可选项:

    • 实际业务需求 — 它服务的是真实存在的业务场景,
      还是投机性能力面?判据要求实测(谁在写这个键、谁在读、
      示例应用与真实部署的用法),「读起来像有用」不作数。这条轴会改变结论,不是陪衬。
    • 项目长远合理性 — 哪个方案符合北极星方向与可持续架构(no workarounds、
      contract-first),临时补丁式选项要明说长期代价。
    • 防 AI 写代码犯错,尤其是防 AI 写元数据 app 犯错 — 哪个方案让 AI 在结构上更难写错:
      契约收紧(严格 schema、publish 时响亮拒绝)优于消费端宽容(?? 回退、静默容错)——
      宽容恰是 AI 批量犯错被掩盖的温床;声明即强制,绝不让 AI 声明一个运行时不兑现的能力。
    • 创业阶段不扩散需求 — 创业阶段聚焦原则:创业项目先专注核心能力,能力扩张默认
      从紧,无拉动的声明面按 implementation-first 处置,已发布零消费能力不因沉没成本豁免。
      过渡也从紧 —— 创业阶段不渐进:废弃别名/拼写与能力退役默认立即退休,无分阶段
      窗口、无双拼写宽限;staged 仅凭具名外部用户证据方可荐。新增门禁默认否:门禁是只减
      不增的零件,例外只有维护者点名;荐新增门禁须引其点名原话,否则荐「不加」。

    基本裁决原则:spec 声明 > 实现 > 文档面;声明而未兑现是实现缺口,补实现或退役,
    ⛔ 不在消费端收窄;未声明键随实现,文档随之。「声明即强制」只及 spec 与元数据契约、
    运行时能力,⛔ 不及 AGENTS.md 这类给 agent 读的约定 —— 那些的读者是 agent,不是门禁。
    推荐意见必须基于这四条轴给出理由;四轴冲突时如实呈现权衡,
    交维护者拍板。


    Generated by Claude Code

  3. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Oct 27, 2026
  4. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 1
    Session: session_01J8VVAnPkgK6CWrJa6t7Fk5
    Account: huangyiirene
    Branch: claude/project-thread-s7fynb
    Worktree: hotcrm-issue-2319 (card thread; branch is platform-designated, the measured platform exception to claude/issue-N-slug; implementing session session_01J8VVAnMh9QEFi5HAjrqwVs)
    Domain: repo:hotcrm (single-lane repo, no domain:*)
    Seat: repo:hotcrm#1
    File surface: package.json, pnpm-lock.yaml, objectstack.manifest.json, src/*/index.ts (specVersion / engines alignment), the five test files #2308 names under test/, 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 value
    Clause-②: 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/* latest 18.2.0, version commit objectstack 27f38ada49; 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 card

    Folds: #2308 (one PR, Fixes #2319 and Fixes #2308 on separate lines). Dispatch order: comment 6436282293.

  5. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim amendment · #2319 · repo:hotcrm seat 1 · session session_01J8VVAnPkgK6CWrJa6t7Fk5 · 2026-10-27T07:40Z
    Branch: claude/project-thread-s7fynb

    File 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.json as reserved for #2319 until it lands.


    Generated by Claude Code

  6. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    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

  7. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT pointer · repo:hotcrm seat 1 · session session_01J8VVAnPkgK6CWrJa6t7Fk5 · 2026-10-27T08:56Z

    The review of record is ## 席位核对 on PR #2322 (comment 6437676636): ACCEPT at head 14c2223542, 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

  8. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed · repo:hotcrm seat 1 · session session_01J8VVAnPkgK6CWrJa6t7Fk5 · 2026-10-27T08:59Z

    Reading Probe Result
    PR #2322 GET /pulls/2322 Merged 2026-10-27T08:58Z through the merge queue (enqueued by the relay's automerge_enable), on the ACCEPTed head 14c2223542. All check-runs were success on that head.
    origin/main git log + git show origin/main:package.json 1f3f888 "upgrade the ObjectStack platform to 18.2.0 … (#2322)". 23 @objectstack/* pins read 18.2.0, and there are 0 hits for 18.1.0 in package.json.

    State: #2319 and #2308 were closed completed by the PR's Fixes lines. pm:dispatched is 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

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

Metadata

Metadata

Assignees

Labels

dependenciesDependency bumps and lockfile changespriority:p1High: required for production / M2

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions