Skip to content

fix(deps): move zod to ^4.6.6 and clear the lockfile's high and critical advisories - #25657

Merged
objectstack-fleet[bot] merged 2 commits into
mainfrom
claude/project-thread-q33ihw
Oct 24, 2026
Merged

objectstack-fleet[bot] merged 2 commits into
mainfrom
claude/project-thread-q33ihw

Conversation

@objectstack-fleet

@objectstack-fleet objectstack-fleet Bot commented Oct 24, 2026 •

Copy link
Copy Markdown
Contributor

Requested by Elon · project thread
Fixes #25631
Clause-②: no
Metadata-protocol: none

Every manifest that declares zod now asks for ^4.6.6, past GHSA-mrhx-c7xc-m3w5, and the workspace resolves one zod, 4.6.7. Every other advisory pnpm audit matched on main moves to its patched release, except @azure/msal-node, which has no upstream path yet (below).

pnpm audit, before and after

Measured with pnpm 10.31.0 against the lockfile, main at 49653f9 vs this branch.

critical high moderate low
pnpm audit --prod, main 5 10 8 3
pnpm audit (all), main 5 11 10 3
pnpm audit (all), this branch 0 1 0 0

What moved

Package Was Now Advisories How
zod 4.6.1, 4.6.5 4.6.7 (one copy) GHSA-mrhx-c7xc-m3w5 (high) ^4.6.6 in the 12 manifests that declared ^4.6.5 and in apps/docs (^4.6.1)
next 16.3.8 16.4.1 GHSA-2464-fhr4-w9xw, GHSA-673q-mjm6-r5xr (critical), GHSA-p3m5-59mp-jv5r (high) apps/docs exact pin moved; better-auth's optional next peer followed it
dompurify 3.4.16 3.4.17 GHSA-cg2g-xh64-v4q7 (critical), GHSA-mrv2-3pqr-j5jr (high), 1 low override target ^3.4.17 (mermaid ^3.3.3 admits it)
body-parser 2.3.0 2.4.0 GHSA-27r3-jxmh-p828 (high) new override over the 2.x major → ^2.4.0 (express 5.2.1 ^2.2.1 admits it)
happy-dom 20.10.2 not installed GHSA-834v-8h66-3h79 (high) new override from the advisory's 17.0.0 floor up to the 22.0.0 major boundary → ^21.0.4; see Acceptance notes
postal-mime 4.0.5 4.1.4 GHSA-f2hq-32vh-53cc (high) service-mailbox ^4.0.5 → ^4.0.8
undici 7.30.0, 8.11.2 7.30.1, 8.12.3 GHSA-xjj6-f33q-929c (high), 2 moderate, on both lines override targets ^7.30.1 and ^8.12.2, selectors unchanged
nodemailer 10.0.13 10.2.1 3 moderate plugin-email ^10.0.2 → ^10.1.4
fast-uri 3.1.8 3.1.9 2 moderate, 2 low override target ^3.1.9
ip-address 10.7.2 10.7.4 1 moderate override target ^10.7.4

The lockfile is regenerated by pnpm install, never edited by hand. The resolved package set changes only in the rows above, the @next/* binaries that move with next, and happy-dom with its four private dependencies leaving. Each new or moved override carries its reason in pnpm-workspace.yaml, in the block dated 2026-10-24.

Not cleared: @azure/msal-node GHSA-xcx6-jx8p-x3h5 (high)

5.4.1 comes from @azure/identity 4.13.1 (^5.1.0) under tedious 18.6.2, driver-sql's optional mssql peer. The fix is only in msal-node 7.1.0. No @azure/identity release admits it: 4.14.0 (latest) and 4.15.0-beta.1 both declare ^6.0.0. Clearing it here would mean forcing two majors past identity's declared range on an Azure AD sign-in path that no test in this workspace runs, so it is reported as a finding and not pinned. This PR does not make it worse: the OSV verdict on a pull request is base-relative, and main already carries it.

Generated surfaces

pnpm --filter @objectstack/spec build, then pnpm --filter @objectstack/spec check:generated: all 14 generated artifacts are up to date under zod 4.6.7 (JSON schemas, API surface, export origins, declaration map, docs). Nothing was regenerated, so there is nothing to commit.

The vendored Console keeps one zod: objectui at the pinned 2958f17e9c6a already resolves zod 4.6.7, which satisfies the spec's new ^4.6.6 range.

Verification

Local, at head 5396e799bb:

  • pnpm build: 76 of 76 tasks.
  • Workspace typecheck (turbo run typecheck, 4096 MB heap, the runner's V8 default): 152 of 152 tasks. Under this container's 2096 MB default, @objectstack/plugin-hono-server's tsc --noEmit runs out of heap. That is not this change: the same program reports 4,167,189K memory used on main's dependency set and 4,166,613K on this branch (tsc --extendedDiagnostics).
  • Tests, every package whose manifest moved: spec 21725, core 2757, objectql 8700, runtime 7035, metadata 905, metadata-core 796, metadata-protocol 21474, rest 6400, mcp 533, driver-turso 2492, plugin-email 689, service-mailbox 152, lint 7244, cli --project unit 4816 tests. All pass.
  • dispatch-gates --commands: 101 derived families run, 101 exit 0, reconciled by --ran (0 unrun, 0 not measured). Two needed full history first: check-engine-split-ratio and check-plugin-teardown-shape --self-test refuse a shallow clone.
  • pnpm check:override-consistency, pnpm check:vendor-export-contract-resolve, node scripts/check-osv-exemptions.mjs, node scripts/check-commit-card-trailers.mjs --range origin/main..HEAD: exit 0.

CI on the same head: all 44 check runs are success or skipped, including Validate Package Dependencies (OSV base-relative), Build Docs (next 16.4.1), Build Core, Test Core 1 to 6, TypeScript Type Check and Lint & Repo Gates. Console Pin Gate runs neither on a pull request nor in the merge queue (its if: excludes both), so its first verdict comes after landing; the pinned objectui resolves zod 4.6.7, inside the spec's new ^4.6.6, which is the range its build asserts against.

Acceptance notes

  • @azure/msal-node stays, for the reason above. It needs either an @azure/identity release that accepts msal-node 7.1.0 or a maintainer decision to force it.
  • happy-dom no longer resolves at all. It was only vitest's optional happy-dom: * peer, auto-installed; no manifest declares it and no vitest config selects that environment. With the peer rewritten to ^21.0.4, pnpm does not install it. check:override-consistency lists the entry as having 0 consumers, which is a report, not a failure; the entry stays as the floor a future declaration lands on.
  • The moderate and low advisories ride along. The card asks for high and critical. The rest are target lifts in the same file and two declared ranges, and main's scheduled OSV scan fails on every severity.
  • Serial constraint: packaging: @objectstack/cli (8 deps), @objectstack/hono (1) and @objectstack/plugin-dev (12) publish @objectstack/* dependencies as caret ranges, so an app pinned exactly still installs a newer 18.x of them #25639 edits the cli, hono and plugin-dev manifests and may move pnpm-lock.yaml. Whichever lands second regenerates the lockfile with pnpm.

🤖 Generated with Claude Code

https://claude.ai/code/session_016n6CWTNgTQKqAHM3ga7ZRt

…cal advisories

zod 4.6.5 and earlier are open to GHSA-mrhx-c7xc-m3w5, and because 4.6.6
changed zod's v4/core declarations a consumer cannot take the fix while
this workspace resolves an older zod. Every manifest that declares zod
now asks for ^4.6.6, and the workspace resolves one copy, 4.6.7, the
version the pinned objectui console already bundles.

The rest of what `pnpm audit` matched on main moves to its patched line:
next 16.4.1 in apps/docs, postal-mime ^4.0.8 in service-mailbox,
nodemailer ^10.1.4 in plugin-email, target-only lifts of the undici,
dompurify, fast-uri and ip-address overrides, and new body-parser and
happy-dom floors. happy-dom was only vitest's auto-installed optional
peer and no longer resolves at all.

One advisory stays: @azure/msal-node GHSA-xcx6-jx8p-x3h5 under
tedious > @azure/identity. Its fix is msal-node 7.1.0 and no
@azure/identity release admits it, so it is reported rather than forced.

The lockfile is regenerated by pnpm. The spec's generated artifacts are
unchanged under zod 4.6.7 (check:generated, 14 of 14 current).

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016n6CWTNgTQKqAHM3ga7ZRt
@github-actions github-actions Bot added size/m dependencies Pull requests that update a dependency file documentation Improvements or additions to documentation tooling labels Oct 24, 2026
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

⚠️ 13 changed file(s) yielded no anchor (packages/cli/package.json, packages/core/package.json, packages/drivers/driver-turso/package.json, …), so the pages documenting them are NOT COVERED by this run — this is not a clean bill of health for those files. Nothing else in this diff resolved to a documentable surface (no symbol, route or SDK anchor derived from 13 changed package(s)).

What this run could not see
  • 13 changed file(s) yielded no anchor (packages/cli/package.json, packages/core/package.json, packages/drivers/driver-turso/package.json, …) — pages documenting those are invisible to this run
  • a page that states a rule by its inputs shares no identifier with the emitter that implements the rule, so an emitter-only diff cannot list it — not on this run and not on any run. Measured on fix(driver-sql): emit varchar(maxLength) for a text field a declared index keys on #11430: content/docs/protocol/objectql/types.mdx documents the text-family column mapping by the ObjectQL type names it maps FROM (text / textarea / html) while the diff changed createColumn; it went unlisted, and it was the page that diff falsified, in four places. No shared token exists to detect this on, so a rule your change carries has to be re-read by hand in the pages that restate it.
  • a key NAME is not a key, so the hand re-read the line above prescribes can land on the wrong schema. The same spelling is authorable on one governed type and a [REMOVED] tombstone on another for each of active, aria, joins, objects, template, tools and version (censused on [finding] tools is a key on BOTH AgentSchema (tombstoned, dead) and SkillSchema (live, cloud-attested), so a name-based search attributes skill examples to the agent key — it produced a false stop-the-line alarm on PR #19059 #19093 over the liveness ledger's governed types, top-level keys); nothing in a search result distinguishes the two, so a grep hit on a LIVE example reads as evidence about the DEAD key. Measured on fix(spec): the agent.tools liveness row says dead — it claimed live on a key the schema tombstoned #19059: content/docs/ai/agents.mdx was reported as contradicting the agent.tools tombstone over its tools: example at :161, which is inside the defineSkill({ block opened at :155 — the page was already correct. Settle ownership by PARSING the value against both schemas, never by the name: that literal PASSES SkillSchema, and as an AgentSchema it FAILS at tools with the tombstone prescription. ⛔ These names are not the whole class — a key retired through a .strict() guidance map leaves no tombstone in the walked shape and none of them here (tool.category, live as AIToolDefinition.category).

Coarse fallback — 163 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): node scripts/docs-audit/affected-docs.mjs --json baae6ed14e90e357b6e437e62aed01f0f1be9649 → packageMentionDocs.

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

ACCEPT · domain:devx seat 1 (seat post #6023) · session session_01LKHDniRQSWjRJyDtacwpEd · 2026-10-24T15:08Z

  • Reviewed at head 5396e799bb: 18 files, +375/-358.
    • zod: ^4.6.5 → ^4.6.6 in every manifest that declares it. The workspace now resolves one copy, 4.6.7, which is the same version the pinned objectui console bundles. The spec's generated artifacts are unchanged under it.
    • next: 16.3.8 → 16.4.1 in apps/docs, which clears two criticals and a high. Build Docs is green.
    • Other manifests: postal-mime ^4.0.8 (one high) and nodemailer ^10.1.4 (three moderates).
    • pnpm-workspace.yaml overrides: each one is a dedupe inside its dependents' declared ranges. body-parser, undici, dompurify, fast-uri and ip-address move this way. happy-dom is pushed to ^21.0.4 and stops installing at all, because it was only vitest's optional peer and no config selects it. The comment block records the reason for every override.
    • Lockfile: regenerated by pnpm.
  • The one high left, accepted as a finding: @azure/msal-node GHSA-xcx6-jx8p-x3h5 is fixed only in 7.1.0, and no @azure/identity release admits that version. The path is tedious under driver-sql's optional mssql peer. Clearing it would force two majors past identity's declared range on a sign-in path nothing here tests. The seat files it as its own card, blocked upstream, so it stays tracked after Dependency advisories in the framework lockfile: zod below 4.6.6 (GHSA-mrhx-c7xc-m3w5) blocks every consumer's fix; pnpm audit --prod on the pin reads 5 critical and 10 high #25631 closes.
  • Beyond the card's high/critical ask: the moderate and low lifts are declared and are dedupes inside declared ranges. The seat keeps them.
  • Console Pin Gate does not run on PR or merge_group, so its first verdict comes from the push run after landing. The pin's zod 4.6.7 is inside ^4.6.6.
  • Tier: not governed (check-governed-merges --pr 25657: 0 of 18 paths; 733 lines, under the cap). CI shows 44 runs, all success or skipped. The merge freeze was lifted at 13:21Z. It lands under the maintainer's standing grant.

Generated by Claude Code

@objectstack-fleet
objectstack-fleet Bot marked this pull request as ready for review October 24, 2026 15:04
@objectstack-fleet
objectstack-fleet Bot enabled auto-merge October 24, 2026 15:04
@objectstack-fleet
objectstack-fleet Bot added this pull request to the merge queue Oct 24, 2026
Merged via the queue into main with commit 7cd2ebf Oct 24, 2026
52 checks passed
@objectstack-fleet
objectstack-fleet Bot deleted the claude/project-thread-q33ihw branch October 24, 2026 15:45
os-tesla pushed a commit that referenced this pull request Oct 25, 2026
…ssions groups, at an objectstack pin that declares them (objectui#13478) (#13485)

<!-- claude-projects-attribution: {"github_login":"os-elon-musk"} -->
_Requested by **Elon** · [project
thread](https://claude.ai/code/project/chan_01WedDzV26nniwxv7jC88B9D?thread=cmsg_01WedDzV26nniwxv7jC88B9DSu9uoz6bLHskQmxnyBE86T)_

Fixes #13478
Clause-②: yes
Metadata-protocol: none

objectstack's `Console Pin Gate` is red on main because app-shell no
longer type-checks against objectstack `47af3dde42`
(#25701). That change added the `positions`
and `permissions` groups to the per-app `TranslationDataSchema`, and
`TranslationPreview`'s `CATEGORY_DEFS` is exhaustive over that schema's
shape by `satisfies`. This PR adds the two rows and moves objectui's own
pin to `47af3dde42`, so objectui type-checks against the same spec. Once
it merges, objectstack can move its `.objectui-sha` past the merge
commit (objectstack's own card names this one as its blocker).

## What changed

- **`TranslationPreview.tsx`**: two `CATEGORY_DEFS` rows, in the
schema's order (after `flows`, before `metadataForms`): `positions` with
`Users` and `permissions` with `ShieldCheck`, the icons
`PositionPreview` and `PermissionPreview` already draw. Both are nested
groups (`flat: false`), so each card counts the group's top-level keys
and samples them with their inner key count, as `objects` and `flows`
do.
- **`metadata-admin/i18n.ts`** (the designer table, the only pack these
keys live in, `en` and `zh`):
`engine.translationPreview.category.positions` = "Positions" / "岗位" and
`engine.translationPreview.category.permissions` = "Permission Sets" /
"权限集", the words the same table already uses for the two metadata types.
- **Tests**: `TranslationPreview.categories-11765.test.tsx` gets a
spec-valid fixture for each new group (its first case requires one per
schema group). `adminPreviews.i18n-10862-s2.test.tsx` lists the two
headings among the rendered locale sites and reads coverage over 13
groups (`2/13 (15%)`, was `2/11 (18%)`).
- **Changeset**
`.changeset/13478-translation-preview-positions-permissions.md`:
`@object-ui/app-shell` patch.

## The pin

- `.objectstack-sha` moves from `e649c2d91e` (the 18.1.0 release commit)
to `47af3dde42bb4e77fd92025605b89b4a473295a4`. REST compare
`e649c2d91e...47af3dd`: `status: ahead`, `ahead_by: 51`, `behind_by:
0`; the bump script also reported "(on origin/main)". It is pinned at
the card's floor, not at objectstack main's head: the four commits after
it on objectstack main are left for the next bump.
- Path: `scripts/bump-objectstack.sh
47af3dd --no-commit` (built and packed
the 7 packages), then `pnpm install`.
- What moved besides the sha: three packed manifests in
`.objectstack-pin/` (`core`, `lint`, `spec`), each only `zod` `^4.6.5`
to `^4.6.6` (#25657). The lockfile already
resolves `zod@4.6.7`, so **`pnpm-lock.yaml` is unchanged** and `pnpm
install --frozen-lockfile` exits 0.
- **Why the rows and the pin land together** (the seat's hypothesis; it
held). At `e649c2d91e` the schema declares neither group: `grep -c '^
positions: z.record'` over that commit's
`packages/spec/src/system/translation.zod.ts` reads 0, and 1 at
`47af3dde42`; the same for `permissions`. Under `satisfies`, an extra
key in an object literal is TS2353 "Object literal may only specify
known properties" (probed with this repo's tsc 6.0.3 on a two-key
`Record`). So the rows alone fail at the old pin, and the pin alone
fails as the gate does.

## Clause-② reading (the claim asked for it)

The claim declares `yes` because the seat could not tell whether
`metadata-admin/i18n.ts` reaches app-shell's published entry, and the
two lines above are copied from the claim. Measured on the built
declaration closure (`packages/app-shell/dist`, walking the relative
imports from `index.d.ts`, the only `exports` entry with types):

- The closure holds 182 `.d.ts` files. `views/metadata-admin/i18n.d.ts`
**is** one of them (the positive control), but its face is `t(key:
string, …)`, `tFormat(key: string, …)` and the other helpers: the key
table is not exported, and no key is a type.
- Closure files that carry the string `translationPreview`: **0**.
`previews/TranslationPreview.d.ts` is not in the closure at all.

So the diff widens no published accept set and no public face of
app-shell, and the reading is `no`. The declaration is the seat's, so
the lines stay as claimed.

## Verification (local, this worktree, at the new pin)

- `pnpm exec turbo run build --filter=@object-ui/console...
--concurrency=2` (under the verify lock, 6144 MB heap): 35 of 35 tasks,
including `@object-ui/app-shell`'s `tsc` and the console's vite build,
SDUI manifest and plugin tsc. That is the build the Console Pin Gate
runs, here at objectui's own pin.
- `pnpm exec vitest run packages/app-shell/src/views/metadata-admin/
packages/types/` (under the lock): 980 files passed; 17091 tests passed,
1 skipped.
- The three TranslationPreview test files: 63 of 63. Reverse check: with
the two rows removed from `TranslationPreview.tsx` (on-disk count 0,
back to 2 after the restore), the `categories-11765` file goes red on
its order-and-coverage case and on every per-group case, the two new
groups included.
- Gates, each exit 0: `check:i18n-keys`, `check:i18n-designer-parity`,
`check:i18n-dead-keys`, `check:i18n-drift`,
`check:installed-pin-claims`, `check:spec-symbols`,
`check:icon-record-names`, `check:control-bytes`,
`check:new-line-citations` (0 new), `check-changeset-presence`,
`check-changeset-no-major`, and `eslint` on the four changed source
files.
- `check:spec-floors`: exit 1 with the same two `floor-too-low` findings
(`@object-ui/auth` `MEMBERSHIP_ROLE_EXTERNAL`, `@object-ui/types`
`navItemVisibleDataNeedsDataSource`) that #13472 recorded as
pre-existing on main. This diff touches neither package. The gate runs
on push and schedule with `--cross-check`, which is its measurement, and
that run is green on main `cd70b78`.

NOT MEASURED locally (left to CI): the rest of the workspace `vitest`
shards, `lint` and `type-check` across all packages, and e2e.

## Acceptance notes

- objectui#13477 (the label render of the same objectstack change) is a
different defect; it remains open and nothing here touches it.

- [x] Adds no product-specific widget, dialog, hook or string (see
AGENTS.md › Product-neutral renderer)

Implemented by the ui lane card thread, session
`https://claude.ai/code/session_01Usjyy1hT9FNxZHea9u7drp`; claim on the
card, comment 6391374949.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

https://claude.ai/code/session_01Usjyy1hT9FNxZHea9u7drp

---
_Generated by [Claude
Code](https://claude.ai/code/session_01Usjyy1hT9FNxZHea9u7drp)_

---------

Co-authored-by: Claude <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file documentation Improvements or additions to documentation size/m tooling

Projects

None yet

2 participants