Repository navigation
Upgrade the @objectstack/* dependencies from 17.7.0 to 18.1.0, walking the official upgrade checklists of 18.0 and 18.1 - #110
Merged
Conversation
Walks the official 18.0.0 and 18.1.0 upgrade checklists:
- pin every @objectstack/* dependency to exactly 18.1.0 and hold the CLI's own
ranges with a pnpm override (18.1 checklist step 1)
- declare protocol ^18 in the stack manifest and objectstack.manifest.json
- rewrite every flow value slot from the retired {path} template dialect to a
CEL value envelope (ref/must in src/flows/_values.ts) and every text slot to
{{ }} holes (ADR-0032, 252 refusals)
- drop page template 'full-width', removed in spec 18
- bind positions to permission sets through permissionSets on the position
definition; the sys_position_permission_set binder retires with the object
- add the zh-CN (and mirrored en) keys 18.1's flow i18n surface now walks:
screen descriptions, select options, successMessage, approval step labels
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LWgCfQwCTdEDv21fUM79aB
Contributor
席位核对 — ACCEPT · head
|
| check | reading |
|---|---|
| shape | draft → main, base 936f3de (= main), line 1 Part of #82; no closing keyword anywhere in the body |
| scope | 26 files, +1010/−1038 (lockfile +617/−637); governed surface none (AGENTS.md · CLAUDE.md · DESIGN.md · docs/design/** untouched); under the 3000-line threshold |
| pins | @objectstack/{spec,runtime,plugin-hono-server,cli} exactly 18.1.0; pnpm-workspace.yaml overrides hold the CLI's own ranges at 18.1.0 (18.1 checklist step 1); protocol ^18 in stack and manifest |
| positions | src/security/bind-position-sets.ts + onEnable deleted; each position names [own set, clm_requester] in permissionSets — same pairs as the 17.x binder (two leadership rungs: clm_requester only) |
| flows | value slots → ref() / must() CEL envelopes (src/flows/_values.ts), {$User.Id} → current_user.id, text slots → {{ }}, date macros left plain; browser-exercised: intake (NDA, new counterparty, upload, submit), Order Form → in_approval, the approval ladder to approved, Start Renewal ×2, all six daily sweeps completed |
| CI on the head | both Validate check-runs success on 7ba038e = PR head.sha |
| gates (PR body) | validate ✓ · lint 6 suggestions, exit 0 · typecheck exit 0 · i18n gate 0 missing keys |
| known regression, accepted | executed_upload (Backfill Executed Contract) answers 403 on 18.1 until the release carrying objectstack-ai/objectstack#25643; the maintainer chose to land without it; #43 already carries Blocked-by: objectstack-ai/objectstack#25643 |
| acceptance note | two comments in src/apps/clm.app.ts (lines 31 and 321 on the head) still cite the deleted bind-position-sets.ts; folded into the #95 remainder (descriptions and stale notes), not a blocker |
Landing: under the maintainer's standing authorization (project thread, 2026-10-25: 「你可以自己审核的就自己合并」). After it lands the seat rewrites the upgrade Blocked-by: lines to #110 and dispatches the queue.
Generated by Claude Code
This was referenced Oct 25, 2026
Turn on the platform's scheduled work for
pnpm demo; README says how a deployment does the same
#111
Merged
7 tasks
This was referenced Oct 25, 2026
Merged
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.
Requested by Steedos · project thread
Part of #82. Unblocks #84, #86, #98, #100, #107 and the remainder of #95. Main is at
936f3de; this branch is rebased onto it.What changed
Each step of the official 18.0.0 and 18.1.0 checklists that applies to this app:
@objectstack/*dependencies are pinned to exactly18.1.0.pnpm-workspace.yamlgains the eight-lineoverridesblock that holds the CLI's own ranges (18.1 step 1). The lockfile now resolves no@objectstack/*package at any other version.engines.protocolin the stack and inobjectstack.manifest.jsonis now'^18', andspecVersionis now'^18.0.0'.os validaterefused 252 places on 18.1.fields/filter, scriptinputs, notifyrecipients/sourceId, loopcollection, screen defaults. The envelopes come from the newsrc/flows/_values.ts:ref(path)is the guarded read thatos validateprescribes. It returnsnullwherever the 17.x template wrote nothing.must(path)is used for filter operands. An absent operand refuses the node there, as before.{$User.Id}is nowcurrent_user.id.title/message, screendescription) take{{ path }}holes.'{today}','{tomorrow}','{N_days_ago}') stay plain strings, because they are query placeholders.template: 'full-width'is removed in spec 18. It rendered the same as the default, so it is deleted.sys_position_permission_set, sosrc/security/bind-position-sets.tsand theonEnablehook are deleted. Each position now names its sets inpermissionSets(src/sharing/positions.ts). The pairs are the same: its own set plusclm_requester.POST /security/explainshowsclm_adminarrivingvia position:clm_admin.successMessage, and approval step labels. This adds the 36 zh-CN keys it reported, mirrored inen. Option labels reuse the object bundle's own words.Not fixed here
executed_upload) answers403. The message is "This caller may not start this flow…". 18.1 refuses to start arunAs: 'system'autolaunchedflow from an action. The flow is elevated on purpose: only a system write may insert a contract bornactive. The platform's remedy is flow-levelrequiredPermissionson ascreen/apiflow, which is on objectstackmain(#25643) and not in 18.1.0. Changing the flow type alone would let any signed-in user reach an elevated insert through/automation/executed_upload/trigger. Per AGENTS.md ("platform gaps wait for the platform"), the button stays broken until the release that ships #25643. The user chose this on 2026-10-25.signature_record/signature_record_on_createwere validated statically only. Driving them needs a full signing round. Their rewrite is the same pattern as the flows exercised below.Gate output (on the head of this branch)
Browser evidence (Playwright, pre-installed Chromium, zh-CN, 1440×900,
pnpm demo:zhon an empty database)✓ Server is ready,Tenancy: single, andPlugins: 44 loaded. Nothing reporteddegraded,no such table, or a failed plugin. The only WARN is the CLI's ownPlugin superseded: com.objectstack.metadata. The seed loaded 120 contracts, 9 types, 40 parties and 60 reviews.resumereturned200, ending withsuccessMessage: "Contract launched.".NDA-2026-0022was savedsubmittedwith the counterparty created,version_count: 1, andowner_idset to the caller.FLOW_FAILED, the edit-window RLS policy refuses the post-submit row, while the header Submit button on the same draft succeeds #91.ORD-2026-0017went toin_approval, andcontract_approvalpaused atmanager_review.completedthroughmanager_review → finance_only → mark_approved → notify_approved, the contract isapproved, and the inbox shows "Contract approved: …".ORD-2026-0017. It carries 13 inherited fields identical to the source and dates rolled on a term.400 FLOW_FAILEDwith "This contract already has a renewal draft (ORD-2026-0017). Open that one instead of starting a second."* * * * *andOS_AUTOMATION_SCHEDULED_WORK_ENABLED=true.completed.turn_stalledsent 2 notifications.payment_overduesent 18, e.g. "Instalment 2 overdue: 订单 — 灯塔金融 … Planned 1400; received so far 700.".obligation_duerun caught a mis-wrapped{tomorrow}macro. It is fixed here and was re-runcompleted.401 GET /auth/get-sessionprobe.Generated by Claude Code