chore(deps): upgrade @objectstack/* 17.0.0-rc.5 → 17.0.0-rc.6 - #1066
Merged
Conversation
Bump every `@objectstack/*` pin from 17.0.0-rc.5 to 17.0.0-rc.6 and regenerate `pnpm-lock.yaml`. `objectstack.config.ts` (`engines.protocol`) and `objectstack.manifest.json` (`specVersion` + `engines.protocol`) move with the pin, per #728. Five upstream changes reached this app; each was measured against an rc.5 baseline before being followed: - `filter-empty-node` is a new author-time error. `forecast_snapshot`'s "find every user" node declared `filter: {}`, which reduces to TRUE and is indistinguishable from an absent key — the key is deleted, as the rule prescribes. - `$regex` is retired (never declared by the Filter Protocol). No app metadata used it; the premise block in account-name-normalized-match now measures the retirement and reaches the same conclusion through `$icontains`. - The restrict-delete message speaks in display labels instead of API names. The refusal itself is unchanged, so the two assertions follow the wording. - `ctx.permissions` now enumerates the platform baseline set `member_default`. Reach is unchanged; the negative control pins the absence of `admin_full_access` directly instead of an exact one-element list. - The approvals plugin relabelled `my_pending` in zh-CN (我的待办 → 待我审批). Docs follow, and the #973 guard that retired 待我审批 as a sidebar label is released — the string now occurs once in the bundle, as that view's label. Verified: pnpm build, pnpm validate, pnpm lint all exit 0; 1887 tests pass (81 files, 1 skipped); dev server boots and serves /_console/ with HTTP 200 (38 plugins, 24 flows, 18 trigger-bound). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SpPDoyiMiwcbt2gAdg7vDN
|
The latest updates on your projects. Learn more about Vercel for GitHub. |
This was referenced Aug 11, 2026
Open
…rade-objectstack-rc6
The repo keeps BOTH lockfiles — `pnpm-lock.yaml` for development and
`package-lock.json` for the StackBlitz demo — and the rc.5 → rc.6 bump
regenerated only the first, so CI's staleness gate caught `package-lock.json`
still resolving all 12 `@objectstack/*` packages at 17.0.0-rc.5.
Regenerated exactly as the gate's log prescribes, in a temp directory off
`package.json` alone so no local install state leaks into it:
d=$(mktemp -d) && cp package.json "$d" \
&& (cd "$d" && npm install --package-lock-only --ignore-scripts) \
&& cp "$d/package-lock.json" .
Now 360 rc.6 references and zero rc.5.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SpPDoyiMiwcbt2gAdg7vDN
ObjectStack 17.0.0-rc.6 retired the `ReportInput` export from `@objectstack/spec/ui` and moved the bare name `Report` onto the authoring shape, under the ADR-0122 convention that `X` is the INPUT type and `XParsed` the post-parse one. The five `src/reports/*.report.ts` annotations follow. The underlying type is unchanged — `z.input<typeof ReportSchema>`, exactly what `ReportInput` named — so every report's typing intent is preserved. The rename is recorded in the reports barrel because on rc.5 the name `Report` meant the OPPOSITE (`z.infer`, the parsed shape): an annotation that already said `Report` changed meaning silently across this upgrade, and only `ReportInput` — removed outright — announced itself. `Action`, `Dashboard` and `Page` swapped the same way; this app uses all three on authoring literals, which is the side the swap made more correct. Caught by `pnpm typecheck`, which was missing from the verification list on the first pass. `objectstack build` does not typecheck app sources, so build, validate, lint, the full suite and a dev-server boot all passed while `tsc --noEmit` had five errors. Now verified: typecheck, build, validate and lint all exit 0; 1875 tests pass. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SpPDoyiMiwcbt2gAdg7vDN
14 tasks
huangyiirene
marked this pull request as ready for review
August 11, 2026 06:30
This was referenced Aug 11, 2026
feat(case): SLA policy matrix per priority × account tier, single first-response writer (#595)
#1071
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.
Fixes #1059
Description
Upgrades every
@objectstack/*dependency from17.0.0-rc.5to17.0.0-rc.6per the maintainer order on #1059, and carries the app's metadata and pinned upstream expectations across with it.Premise verified first. The card noted only
create-objectstack@17.0.0-rc.6was confirmed as a git tag at filing. All 12@objectstack/*packages this app depends on are published at17.0.0-rc.6on npm (pnpm view … versions), so the upgrade proceeded.Six upstream behavior changes reached this app. Each was measured against an rc.5 baseline before being followed — the six affected test files were re-run on rc.5 with the bumped files stashed, and all 164 tests in them passed, confirming every failure was rc.6-induced rather than pre-existing.
Type of Change
Related Issues
Fixes #1059
Related to #728 (config/manifest/build must not diverge), #901 (rc.2 → rc.3 precedent), #973 (the zh-CN view-label guard released below)
Changes Made
Pins + both lockfiles — all 12
@objectstack/*entries inpackage.jsonto17.0.0-rc.6. This repo maintains two lockfiles:pnpm-lock.yamlfor development (regenerated, 402 rc.6 refs) andpackage-lock.jsonfor the StackBlitz demo (regenerated vianpm install --package-lock-only --ignore-scriptsin a temp dir offpackage.jsonalone, 360 rc.6 refs). Zero rc.5 references remain in either.Metadata consistency ([17.0-rc2验收] objectstack.config.ts 的 engines.protocol 仍是 ^17.0.0-rc.1,与 objectstack.manifest.json(rc.2)及 build 产物不一致 #728) —
objectstack.config.tsengines.protocolandobjectstack.manifest.jsonspecVersion+engines.protocolmoved to^17.0.0-rc.6.filter-empty-node, a new author-time error — an empty filter node ({}) reduces to TRUE and matches every row, so it is indistinguishable from an absent key.forecast_snapshot's "find every user" query declared one; the key is deleted, which is what the rule prescribes and what the node already meant. This one failed the build, not just a test.$regexis retired upstream — never declared by the Filter Protocol; it compiled to a substringLIKEon SQL and a realRegExpin memory. No app metadata uses it (only three explanatory comments). The premise block intest/account-name-normalized-match.test.tsnow measures the retirement itself and reaches the same conclusion through$icontains, the declared replacement: still a substring match, so still no way to express normalize-then-exact. The stored normalized column remains the answer.Restrict-delete message now speaks in display labels — "… 1 Event Attendee record(s) through “Event” …" instead of API names. The refusal itself is unchanged, so the two assertions follow the wording while still pinning that the message names the blocking object and field.
ctx.permissionsnow enumeratesmember_default— the platform baseline set, alongside the app-declared profile. It is the set every member already carried (seesrc/sharing/demo-staffing.ts), and every reach assertion in that file is untouched, so this is enumeration, not a new grant. The negative control now pins the absence ofadmin_full_accessdirectly instead of an exact one-element list.Approvals plugin relabelled
my_pendingin zh-CN — 我的待办 → 待我审批. The four docs pages that quote it follow. Theguides/search-and-navigation的《内置 vs 个人 vs 共享》(:56,三语) 举的两个"内置视图"例子都不存在:*All Open Opportunities* 与 *Pending My Approval* 在src/双双零命中 #973 guard that retired 待我审批 here as "a sidebar label, not a view" is released with its reasoning recorded: the string now occurs exactly once in the shipped bundle, as that view's label, so the collision the pin guarded against is gone.ReportInputis retired from@objectstack/spec/ui, andReportnow means the opposite shape. Not a plain rename — read from the installed.d.mts:ReportInputz.input<typeof ReportSchema>Reportz.infer(parsed)z.input(authoring)ReportParsedz.inferz.infer(parsed)rc.6 moved the bare name onto the authoring shape under the ADR-0122 convention (
X= input,XParsed= post-parse). The fivesrc/reports/*.report.tsannotations follow; the underlying type is identical to whatReportInputnamed, so each report's typing intent is preserved. The trap worth knowing:Action,DashboardandPageswapped the same way, and because those names survived, an annotation already sayingReport/Action/Dashboard/Pagechanged meaning silently instead of failing to compile. OnlyReportInput, removed outright, announced itself. This app uses all four on authoring literals — the side the swap made more correct — so nothing broke behaviourally. Recorded insrc/reports/index.ts.Docs stating the installed platform version —
docs/STATUS.mdandcontent/docs/whats-new.mdx+ zh-Hans/zh-Hant twins move to rc.6.docs/MAINTENANCE.md's "17.0.0-rc.5addsos migrate summary-nulls" is left alone: it is a historical fact about which release added a migration, not a current-version claim.Changeset added.
Testing
pnpm test: 80 files, 1875 passed, 1 skipped, 0 failedpnpm lintexit 0 (warnings all pre-existing advisory)pnpm buildexit 0On
typecheck. It was missing from the first pass's verification list, and that is exactly how theReportInputbreakage reached CI:objectstack builddoes not typecheck app sources, so build, validate, lint, the full suite and a dev-server boot all passed green whiletsc --noEmithad five errors. Type-level upstream changes are invisible to every other gate in this repo. It is in the list now and runs first.Dev-server boot smoke check —
pnpm starton a reset datastore:✓ Server is ready,GET /_console/login→ HTTP 200, SqlDriver(better-sqlite3), 38 plugins loaded, 24 flows, 18 bound to triggers. One pre-existing boot warning (inline seed exceeding its 8s budget, continuing in background); no rc.6-related boot error.Tracked upstream-mirror re-probe
One cheap probe per card, as the issue asks — no deep dives. Probes are static (shipped schema / bundle / engine source) or in-process driver runs; nothing here required a browser or a multi-user token matrix, and the cards that do are marked skipped rather than guessed at.
member_default's*C/R/E wildcard is gone —objectPermissionsis now{}at runtime; rc.6 source states "#5491 removed that wildcard and the platform baseline is explicit-allow"owner_only_writes/owner_only_deleteswildcard RLS floor (created_by == current_user.id) still ships, butaccess_levelis now['read','edit']and the source states read and write gates match it; static evidence onlyAddressFieldwith a readonly formatter joining street / city / state+postal / country, instead of stringifying the object. Browser confirmation not runFlowVariableSchema.defaultValuedefaultValue: z.ZodOptional<z.ZodUnknown>, and the engine seeds it (else if (v.defaultValue !== void 0) variables.set(v.name, v.defaultValue))ctx.previousempty onmulti: truesys_fetch_previous_updateis retired, and predicate writes now dispatch per-rowbefore*hooks withpreviousbound to that row's pre-image (#5574 / ADR-0058 Addendum II)pagesgained acomponentsface —Record(id, { title, description, label, placeholder, emptyText, submitLabel }), mirroringdashboards.widgetslast_30_dayswindow on adatetimecolumn returned 3/3 expected rows;datecontrol also 3GLOBAL_ACTION_OBJECT_KEY = "global",isObjectLessActionKeytreating absent /"global"/"*"alike, andactionHandlerObjectKeysresolving across[objectName, "global", "*"]. The UI-swallows-failure half was not probedShort measurement comments have been left on the eight cards whose behavior clearly changed.
Checklist
.changeset/objectstack-17-0-0-rc-6.mdAdditional Notes
Scope kept tight per the card.
e2e/**is untouched by this branch's own commits (the merge of #1065 brings its e2e work in, unmodified). Dependabot PRs #1057 / #1058 were neither merged nor rebased — they touchpackage.jsonand are expected to self-rebase after this lands. No unrelated riders.origin/mainmerged (#1064, #1065, #1067) with no conflicts. #1067 sharesdocs/STATUS.mdand bothapprovals.zh-Hans/Hant.mdxwith this diff; both sides' intent was verified intact line-by-line rather than trusted to the clean auto-merge.On the test edits. Every one of them re-aims a pin at rc.6's behavior; none weakens what its test was written to establish. The two that change an assertion's shape rather than its wording — the
member_defaultenumeration and the released #973 guard — each carry an in-file comment recording the measurement that justified it, so the next reader does not have to re-derive it.One pre-existing docs inaccuracy noted, deliberately not fixed here (out of scope for a dependency PR, no test enforces it):
content/docs/revenue/approvals.zh-Hans.mdx:86and its Hant twin state that the Inbox sidebar entry displays as 待我审批 in zh-CN. On rc.6 that string occurs exactly once in the shipped bundle — as themy_pendingview label — so the sidebar claim is now stale. It predates this branch and was presumably true on rc.5.