Skip to content

chore: version packages - #24524

Merged
os-zhuang merged 1 commit into
mainfrom
changeset-release/main
Oct 20, 2026
Merged

os-zhuang merged 1 commit into
mainfrom
changeset-release/main

Conversation

@github-actions

@github-actions github-actions Bot commented Oct 19, 2026 •

Copy link
Copy Markdown
Contributor

This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and publish to npm yourself or setup this action to publish automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.

Releases

The changelog information of each package has been omitted from this message, as the content exceeds the size limit.

@objectstack/console@18.0.0

@objectstack/lint@18.0.0

@objectstack/metadata-protocol@18.0.0

@objectstack/objectql@18.0.0

@objectstack/plugin-security@18.0.0

@objectstack/service-automation@18.0.0

@objectstack/spec@18.0.0

@objectstack/trigger-api@18.0.0

@objectstack/hono@18.0.0

@objectstack/cli@18.0.0

@objectstack/client@18.0.0

@objectstack/cloud-connection@18.0.0

@objectstack/connector-imap@18.0.0

@objectstack/connector-mcp@18.0.0

@objectstack/core@18.0.0

create-objectstack@18.0.0

@objectstack/driver-memory@18.0.0

@objectstack/driver-mongodb@18.0.0

@objectstack/driver-sql@18.0.0

@objectstack/driver-sqlite-wasm@18.0.0

@objectstack/driver-turso@18.0.0

@objectstack/formula@18.0.0

@objectstack/mcp@18.0.0

@objectstack/metadata@18.0.0

@objectstack/metadata-core@18.0.0

@objectstack/platform-objects@18.0.0

@objectstack/plugin-approvals@18.0.0

@objectstack/plugin-audit@18.0.0

@objectstack/plugin-auth@18.0.0

@objectstack/plugin-dev@18.0.0

@objectstack/plugin-email@18.0.0

@objectstack/plugin-hono-server@18.0.0

@objectstack/plugin-sharing@18.0.0

@objectstack/plugin-webhooks@18.0.0

@objectstack/rest@18.0.0

@objectstack/runtime@18.0.0

@objectstack/service-analytics@18.0.0

@objectstack/service-datasource@18.0.0

@objectstack/service-i18n@18.0.0

@objectstack/service-mailbox@18.0.0

@objectstack/service-messaging@18.0.0

@objectstack/service-package@18.0.0

@objectstack/service-print@18.0.0

@objectstack/service-realtime@18.0.0

@objectstack/service-settings@18.0.0

@objectstack/service-sms@18.0.0

@objectstack/service-storage@18.0.0

@objectstack/skills@18.0.0

@objectstack/types@18.0.0

@objectstack/verify@18.0.0

@objectstack/account@18.0.0

@objectstack/setup@18.0.0

@objectstack/studio@18.0.0

@objectstack/client-react@18.0.0

@objectstack/connector-openapi@18.0.0

@objectstack/connector-rest@18.0.0

@objectstack/connector-slack@18.0.0

@objectstack/metadata-fs@18.0.0

@objectstack/observability@18.0.0

@objectstack/embedder-openai@18.0.0

@objectstack/knowledge-memory@18.0.0

@objectstack/knowledge-ragflow@18.0.0

@objectstack/organizations@18.0.0

@objectstack/plugin-pinyin-search@18.0.0

@objectstack/service-cache@18.0.0

@objectstack/service-cluster@18.0.0

@objectstack/service-cluster-redis@18.0.0

@objectstack/service-job@18.0.0

@objectstack/service-knowledge@18.0.0

@objectstack/service-queue@18.0.0

@objectstack/trigger-record-change@18.0.0

@objectstack/trigger-schedule@18.0.0

@objectstack/sdui-parser@18.0.0

@objectstack/example-crm@4.0.100

@objectstack/example-multi-package@0.0.7

@objectstack/example-showcase@0.3.22

@objectstack/example-todo@4.0.100

@objectstack/example-embed-objectql@0.0.40

@objectstack/dogfood@0.0.48

@objectstack/downstream-contract@0.0.46

@objectstack/http-conformance@0.1.8

@github-actions github-actions Bot changed the title chore: version packages (next) chore: version packages Oct 19, 2026
@github-actions
github-actions Bot force-pushed the changeset-release/main branch from 61860d2 to 3fdde03 Compare October 19, 2026 18:26
@github-actions github-actions Bot added size/xl dependencies Pull requests that update a dependency file documentation Improvements or additions to documentation tooling labels Oct 19, 2026
@github-actions

github-actions Bot commented Oct 19, 2026 •

Copy link
Copy Markdown
Contributor Author

📓 Docs Drift Check

⚠️ 152 changed file(s) yielded no anchor (packages/adapters/hono/CHANGELOG.md, packages/adapters/hono/package.json, packages/apps/account/CHANGELOG.md, …), 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 76 changed package(s)).

What this run could not see
  • 152 changed file(s) yielded no anchor (packages/adapters/hono/CHANGELOG.md, packages/adapters/hono/package.json, packages/apps/account/CHANGELOG.md, …) — 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 — 173 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 abd5acdaf788df2092064c56583fd73d837fb858 → packageMentionDocs.

@github-actions
github-actions Bot force-pushed the changeset-release/main branch from 3fdde03 to 6bef92b Compare October 20, 2026 00:36
@github-actions
github-actions Bot force-pushed the changeset-release/main branch 2 times, most recently from c7ed951 to 25f8896 Compare October 20, 2026 08:04
@github-actions
github-actions Bot force-pushed the changeset-release/main branch from 25f8896 to 892a8ad Compare October 20, 2026 09:40
@github-actions
github-actions Bot force-pushed the changeset-release/main branch from 892a8ad to 31abb71 Compare October 20, 2026 11:10
@os-zhuang
os-zhuang enabled auto-merge October 20, 2026 11:11
@os-zhuang
os-zhuang added this pull request to the merge queue Oct 20, 2026
Merged via the queue into main with commit 06cab48 Oct 20, 2026
46 checks passed
@os-zhuang
os-zhuang deleted the changeset-release/main branch October 20, 2026 12:20
akarma-synetal pushed a commit to akarma-synetal/objectui that referenced this pull request Oct 28, 2026
…n pass renders objectui's 18.0.0 GA (objectstack-ai#13111)

Fixes objectstack-ai#13108

Clause-②: no

Exits Changesets pre mode on `main`, on the maintainer's order 「objectui
退出预发布模式」. After this lands, the next version pass renders the GA: the
40-member `fixed` group goes from `17.7.0` to **`18.0.0`**, not
`18.0.0-next.0`. **Draft, for the maintainer to merge**, because the
merge sets when the version PR renders the GA.

⛔ No release act. No `changeset version` output is committed. Nothing
was published or tagged, no workflow was dispatched, and neither release
PR objectstack-ai#11600 nor `changeset-release/main` was touched. The dry-run below
ran in a scratch clone whose push URL is an invalid path.

Head `9e3c1a1408` = base `df943a2a1a` (`origin/main` at worktree
creation, and still `origin/main` when this opened) plus two commits.

## The change

1. **`.changeset/pre.json`**, written by `pnpm changeset pre exit`
(`@changesets/cli` 3.0.1) and committed as the tool wrote it
(`fda18fcdf9`):

   | | content |
   |---|---|
   | before | `{ "mode": "pre", "tag": "next" }` |
   | after | `{ "mode": "exit", "tag": "next" }` |

Same 2-space JSON with a trailing newline. Under CLI 3 the file holds
only `mode` and `tag`, before and after; nothing else is expected or
written.

2. **One test assertion in
`scripts/__tests__/sync-quick-reference-release.test.ts`**
(`9e3c1a1408`). The first dry-run of the release lane on the exited tree
went red on exactly one test, and the control on `df943a2a1a` is green,
so the exit is what reddens it:
- The test "rewrites the Version row when the fixed group moves" bumps
the group to `99.9.9` and asserted that the doc no longer contains the
old version **as a raw substring**.
- With the group at `18.0.0`, that string is a prefix of the Spec and
Client rows' `^18.0.0-next.1`. So a correct rewrite failed.
- The assertion now reads the doc's version literals with the script's
own `VERSION_LITERAL` and `normalize`, the tokens the gate
(`quick-reference-current-release-4143.test.ts`) compares, and checks
that none is the old version. That gate's header already states the
rule: "Equality on extracted tokens, never `toContain` over the raw
row".
- **It keeps its teeth.** A probe of the script's own exports over
`QUICK_REFERENCE.md`, at group versions `17.7.0`, `18.0.0` and
`18.0.0-next.0`:

| group version | correct rewrite: new / old assertion | Version row
left as is: new / old |
     |---|---|---|
     | `17.7.0` | green / green | RED / RED |
     | `18.0.0` | green / **RED** | RED / RED |
     | `18.0.0-next.0` | green / green | RED / RED |

- Why here and not in prose. The card expected the red, if any, to be
release text that states a prerelease status, as on objectstack.
objectui has none: it has no release pages, and a grep of the docs,
`README`s and `QUICK_REFERENCE.md` finds no sentence that states
objectui's own prerelease or "no GA" status. The only red is this test,
which the GA render makes false. It is not a gate: no gate's scope or
verdict changes, and it adds no check.

## Dry-run of the version step (scratch clone, never pushed)

Setup:
- A blobless clone of this branch from GitHub (`--filter=blob:none`,
full history, `--is-shallow-repository` false, 12164 commits), so
`@changesets/git` resolves every changeset's add-commit without the
shallow-clone deepen loop.
- `pnpm run setup`: the pin build copied from the machine store, then a
frozen install. `node_modules` is a real directory, not a symlink.
- The three steps `Render the post-version tree`, `Validate the
post-version tree` and `Restore the pre-version tree` were **extracted
verbatim from `.github/workflows/changeset-release.yml` with a YAML
parser**. The workflow blob is `533cf01fe5` in the clone and on `main`,
and the extracted bodies are byte-identical across the three legs. They
ran under `bash --noprofile --norc -eo pipefail` with `GITHUB_OUTPUT`,
`GITHUB_STEP_SUMMARY` and `GITHUB_SHA` pointed at scratch files, each
heavy step under `os-verify-lock.sh`.
- The job's earlier `Build packages` step was not replayed; see NOT
MEASURED.

| leg | Render | rendered version | Validate | Restore |
|---|---|---|---|---|
| head `9e3c1a1408` | **0** | `Version: 17.7.0 → 18.0.0` | **0**:
quick-reference check, control bytes, then `Test Files 190 passed, 2
skipped (192)` | **0**: "Pre-version tree restored: 857 pending
changeset(s), working tree clean." |
| first commit `fda18fcdf9` (exit only) | 0 | `17.7.0 → 18.0.0` | **1**:
`1 failed, 189 passed, 2 skipped`, the one test above | 0, same line |
| control: base `df943a2a1a` (still `mode: "pre"`) | 0 | `17.7.0 →
18.0.0-next.0` | 0: `190 passed, 2 skipped` | 0, same line |

Readings on the head's post-version tree:
- **Fixed group: 40 of 40 members at `18.0.0`.** One of them,
`object-ui`, is private, so 39 are publishable. This was read from the
manifests. `changeset publish-plan` was not run.
- **Changesets consumed: 857**, which is every `.changeset/*.md` except
`README.md` (`pending_before=857`). `.changeset/` afterwards holds only
`README.md` and `config.json`.
- **`.changeset/pre.json` is deleted by the pass.** On the base leg it
survives as `mode: "pre"` and the 857 move to `.changeset/pre/`.
- **Paths moved: 939.** That is 858 deletions (857 changesets plus
`pre.json`), 40 `package.json` files whose only changed line is
`"version"`, 40 `CHANGELOG.md` files that each gain a `## 18.0.0`
section, and `QUICK_REFERENCE.md`, whose Version row now reads `18.0.0`.
- **No dependency range moved**: zero `@objectstack/*` lines change in
the 40 `package.json` diffs.
- On the post-version tree: `check-changeset-no-major` exits 0 ("No
changeset declares a `major` bump.") and `check-changeset-fixed` exits
0.
- The publish dist-tag after the GA version commit would be `latest`.
`getReleaseTag` (`@changesets/cli` 3.0.1, `getPublishPlan.mjs`) returns
`preState.tag` only while a pre state exists, and the pass deletes
`pre.json`. This is a reading of the code; nothing was published.

## PR objectstack-ai#12401's two gate edits, judged on the exited tree

| edit | keyed on pre mode? | verdict |
|---|---|---|
| `scripts/check-changeset-no-major.mjs`: the computed admission of the
one synchronized `major` (group's current major + 1 = the
`@objectstack/spec` range's major), with `OBJECTUI_ALLOW_MAJOR` retired
| **No.** The script reads no `pre.json` and no mode. Its only pre-mode
clause is that it does not read `.changeset/pre/`, and that was its
behaviour before PR objectstack-ai#12401 too (that PR's body says so). | **Kept.** It
is the maintainer's GA-time version-alignment rule (ruling on
objectui#12030), and the next objectstack major needs it again. On the
exited pre-version tree, `pnpm changeset:check` still admits the sync
major and exits 0. On the 18.0.0 tree, a probe `"@object-ui/core":
major` gives **exit 1**, "carries the group from 18 to 19, but its
@objectstack/spec range names 18". So it re-arms, and refuses every
other `major`. |
| `scripts/check-spec-range-floors.mjs`: reads a prerelease lower bound
(`^18.0.0-next.N`) as a floor | **No.** It reads dependency ranges and
no changeset state: no `pre.json`, and no mode. The ranges are
objectstack's prerelease line, which `@objectstack/*` 18 sets (its
header says so). objectui's own mode does not set them. | **Kept.** The
exit does not move a range, and neither does the GA render (zero
`@objectstack` lines in the version diff). At publish,
`objectstack-floor.mjs` raises the ranges to the computed floor, and
that floor is itself a prerelease whenever the earliest published spec
release that contains the pin is one. Its pins,
`check-spec-range-floors.test.ts`, pass on the exited tree and inside
the post-version `scripts/__tests__` run. The live gate was not run here
(NOT MEASURED below). |

Neither edit is reversed. No gate is weakened or added.

## The dispatch's mechanism hypotheses, measured

1. **Holds, with the count corrected.** The version pass renders the
sync major onto `18.0.0` and consumes every pending changeset: **857**.
The card's 860 counts every entry under `.changeset/`, including
`README.md`, `config.json` and `pre.json`. `pre.json` itself is deleted
by the pass.
2. **Falsified.** Neither gate edit's condition is pre mode (table
above).
3. **Holds.** The sync writes `18.0.0` into the Version row, and nothing
in objectui's docs states objectui's own prerelease status. The Spec and
Client rows keep `^18.0.0-next.1` because those rows are the declared
`@objectstack/*` ranges, derived from the manifests, and that is
correct. They move when a range moves, not when objectui exits pre mode.

## Order note (for the maintainer; not a code change)

`pnpm changeset:publish` runs `objectstack-floor.mjs`, then
`check-published-dist-tooling.mjs`, then `check-spec-range-floors.mjs`,
then `changeset publish`.
- **Today the first step refuses.** `node scripts/objectstack-floor.mjs
--dry-run` at the pin `f4755a68a7` exits **2**: "No published
@objectstack/spec release contains the pin … the newest published
release is 18.0.0-next.5. Nothing is published until objectstack
releases a commit that contains the pin." Exit 2 is by design, and it
writes nothing.
- The same answer with git, from a full-history objectstack checkout:
`merge-base --is-ancestor` with the pin and the
`@objectstack/spec@18.0.0-next.5` tag commit `820fd5aef0` gives **exit
1**. The control leg, with the `18.0.0-next.3` tag commit `2c9bf9430a`,
which is older than the pin, gives exit 0. The pin (2026-10-19 10:57Z)
comes after the `next.5` version commit (08:58Z the same day).
- **So objectui 18.0.0 cannot publish before objectstack publishes a
spec release whose tag contains the pin.** In practice that release is
objectstack's 18.0.0 GA (objectstack-ai/objectstack#24524). The steps do
not read npm's `latest` tag. The floor is the *earliest* published
version, by semver precedence, whose tag contains the pin, and the floor
gate fetches that exact version.
- If objectstack 18.0.0 is the first release that contains the pin, the
floor is `18.0.0`, and objectui's published ranges become `^18.0.0`.
- If an `18.0.0-next.6` that contains the pin were published first, the
floor would be that prerelease, even after 18.0.0 GA. objectui 18.0.0
would then ship `^18.0.0-next.6` ranges. Those resolve to 18.0.0 once it
exists, but they name a prerelease floor.
- **Consequence for the release order:** merge objectstack's GA and let
it publish first. Then refresh objectui's version PR, check that it
renders `18.0.0`, and merge it. If the objectui version PR is merged
first, its publish lane goes red at the floor step, and nothing is
published.
- Merging **this** PR publishes nothing. The lane's guard asks whether
the commit's anchor version is on npm, and `@object-ui/core@17.7.0` is
(`dist-tags.latest` = `17.7.0`).

## Changeset and labels

No changeset. `node scripts/check-changeset-presence.mjs`: "No source or
published contract of a released package changed in this range, so no
changeset is owed." This matches objectui's precedent for tooling-only
PRs. No label is written; objectui's path labels come from
`labeler.yml`.

## Gates (local, at `9e3c1a1408`, exit codes captured before any pipe)

- `pnpm changeset:check` 0 (both halves; the no-major half prints "Every
`major` is the synchronized one").
- `pnpm check:changeset-claims` 0, `pnpm
check:pending-changeset-literals` 0.
- `node scripts/check-changeset-presence.mjs` 0, `node
scripts/check-changeset-overwrite.mjs` 0.
- `pnpm check:new-line-citations` 0 (0 new), `pnpm check:control-bytes`
0, `pnpm check:test-path-roots` 0, `pnpm check:pre-install-import-graph`
0, `pnpm quick-reference:check` 0.
- `node scripts/check-governed-queue-guard.mjs --test` on both paths:
"NOT GOVERNED".
- `pnpm run type-check:scripts` 0. `tsc --listFilesOnly` lists the
changed test file.
- `eslint` on the changed test file: 0.
- `pnpm exec vitest run` on `sync-quick-reference-release`,
`quick-reference-current-release-4143`, `check-changeset-no-major`,
`check-spec-range-floors`, `check-changeset-presence` and
`doc-version-claims`: 6 files, 169 tests passed.
- The whole `scripts/__tests__` directory ran green on the post-version
tree inside Validate (table above).
- **NOT MEASURED:**
- the workflow's `Build packages` step before Validate, because
Validate's three commands read sources, manifests and docs, and all
three are green without it;
- the live `pnpm check:spec-floors`, because it needs a build of the
floored packages and its input ranges are byte-identical across the exit
and the render;
  - `changesets/action` itself, which is a GitHub Action;
  - the full `pnpm test`, which is CI's.
- CI check-runs: see the report comment on the card.

## Acceptance notes

- **Do not merge objectstack-ai#11600 as it stands.** It still renders `18.0.0-next.0`
from a pre-mode tree. After this merges, dispatch the
`refresh_version_pr` run (or wait for the six-hourly one), which
re-renders it at `18.0.0`. If the stale render were merged after this PR
instead, it would version `18.0.0-next.0` with `pre.json` at `mode:
"exit"`. Under CLI 3 that tree still publishes to the `next` tag, and
the next pass renders the GA. That is a reading of the code, not a
measurement, and the floor step would refuse its publish today anyway.
- **The 18.0.0 CHANGELOG sections are large.** The 40 `CHANGELOG.md`
files gain 22,251 lines in total, measured on the head's render.
- **File surface.** The claim's declared surface named
`.changeset/pre.json`, PR objectstack-ai#12401's pre-mode gate edits and release
prose. The test assertion in item 2 is outside it. It is here because it
is the only thing the GA render reddens, and the dispatch allows a
change at the real producer when it is named here.

## Wanted, mapped

- **`pre.json` written by `pnpm changeset pre exit`, in the repo's
shape:** done (The change, item 1).
- **Dry-run: the fixed group renders `18.0.0`, and every gate of the
version step and its validation stays green, each named:** done. Render,
Validate (quick-reference check, control bytes, `scripts/__tests__`) and
Restore all exit 0 on the head, and the base control renders
`18.0.0-next.0`.
- **PR objectstack-ai#12401's two gate edits, judged one by one:** both are kept, with
the reasons (table).
- **Release text that states a prerelease or "no GA" status:** objectui
has none. The one red is a test assertion, changed here (item 2).
- **Draft, and no release act:** held.

## 维护者速读(草稿)

**改了什么**:objectui 退出 Changesets 预发布模式。`.changeset/pre.json` 由 `pnpm
changeset pre exit` 写出,模式从 `pre` 改为 `exit`。另外改了一条工具测试的断言,原来它按子串比较版本号,在
18.0.0 下会误报。没有改任何门禁、工作流或发布包源码,也没有 changeset。

**为什么改**:执行您的指令「objectui 退出预发布模式」。在临时克隆里原样重放了发版工作流的版本步骤。退出后,下一次版本 PR 会把
40 个固定组包从 `17.7.0` 定为 `18.0.0`,不再是 `18.0.0-next.0`,并消费全部 857 条
changeset。只退出模式时,校验步骤有一条测试变红:QUICK_REFERENCE 里 Spec 行写着
`^18.0.0-next.1`,包含子串 `18.0.0`。断言改成按完整版本号比较后,渲染、校验、还原三步全部为 0。对照的 base
仍渲染 `18.0.0-next.0`。

**风险与代价(含回滚)**:
- 本 PR 合并本身不发布任何东西,npm 上已有 17.7.0。
- 发布顺序有硬约束:objectui 发版的第一步按 `.objectstack-sha` 计算 `@objectstack`
下限。今天它退出 2,原因是 npm 上还没有任何一个 objectstack 版本包含这个 pin(最新是
`18.0.0-next.5`)。所以 objectstack 18.0.0 必须先发布,objectui 18.0.0
才发得出去。顺序反了,发布这一步会变红,但什么都不会发出去。
- 现在的版本 PR objectstack-ai#11600 还是 `18.0.0-next.0`,不要直接合并它。本 PR 合并后先刷新一次。
- 回滚:版本 PR 合并之前直接 revert 本 PR,恢复 `mode: "pre"` 即可。GA 发布到 npm 之后无法回滚。

**席位意见**:

**你要做的**:
1. 决定 GA 时机,合并本 PR。
2. 等 objectstack 18.0.0 发布到 npm(objectstack-ai/objectstack#24524)。
3. 触发 objectui 版本 PR 刷新,确认它渲染为 `18.0.0`,再合并版本 PR。

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

---------

Co-authored-by: Claude <noreply@anthropic.com>
akarma-synetal pushed a commit to akarma-synetal/objectui that referenced this pull request Oct 28, 2026
…it 06cab4849a (objectui#13261) (objectstack-ai#13266)

Fixes objectstack-ai#13261
Clause-②: no

**Scope:** move `.objectstack-sha` from `f4755a68a797` to
`06cab4849a8a616487d468a11dd370e929137990`, objectstack's 18.0.0 version
commit. Then fix every test the pin delta turns red, with no skip and no
retry-wrap. The pin does not go past `06cab4849a`.

## The pin

- `git rev-parse 'refs/tags/@objectstack/spec@18.0.0^{}'` and `git
ls-remote origin` for the same ref both answer
`06cab4849a8a616487d468a11dd370e929137990`
(objectstack-ai/objectstack#24524, "chore: version packages").
- `git merge-base --is-ancestor 06cab4849a origin/main` exits 0 in the
objectstack checkout (origin/main `a8b44d4070`). Exit 0 holds in a
shallow checkout too.
- The pin and the seven packed manifests in `.objectstack-pin/` were
written by `scripts/bump-objectstack.sh --no-commit 06cab4849a…` and
committed together in `d51d0408ae`. The bump read a detached objectstack
worktree at the target. The script reported "(on origin/main)", and the
build ran under the verify lock with `VERDICT command-exit 0`.
- In the manifests, only version strings move (`18.0.0-next.5` to
`18.0.0`). No dependency name changes.
- **`pnpm-lock.yaml` is unchanged.** The printed second half, `pnpm
install`, rewrote it, but only by flipping which `esbuild` peer context
vite resolves under two importers (`0.27.7` and `0.28.2`). Nothing in
that diff comes from the pinned packages. I restored the committed
lockfile and ran `pnpm install --frozen-lockfile`, which exits 0.
`check:lockfile-integrity` reads clean and `check:lockfile-dedupe` reads
deduped.
- **Floor:** `node scripts/objectstack-floor.mjs --dry-run` exits 0 with
"Floor 18.0.0: the earliest published @objectstack/spec whose tag
@objectstack/spec@18.0.0 contains the pin
06cab4849a8a616487d468a11dd370e929137990." It reports 37 ranges that
would move to `^18.0.0` at publish and writes nothing.

## Reds at the new pin, and what this PR does

| Red | Upstream commit | Fix |
| --- | --- | --- |
| `registry-inputs-spec-parity`: 3 rows about
`list-view.filterableFields` | `4bc3becd5f` (objectstack#24640) | The
`UNPUBLISHED_EXEMPTIONS` entry leaves, as it said it would at this pin.
The key is now a harvested tombstone |
| `object-view-unmirrored-keys-7779`: 13 rows | `4bc3becd5f` | The sixth
census bucket (`BUCKET_SPEC_RETIRED_AHEAD_OF_PIN`) empties into
`PROTOCOL_RETIRED_KEYS` (now 8) and `BUCKET_PROTOCOL_RETIRED_TOMBSTONED`
(now 3), as its failure message prescribed. The live count goes 44 to
43. The accept legs parse the seven live mirrored keys. A new row pins
that `filterableFields` is refused by name on both entry paths with the
spec's prescription. The "legacy shorthand" description row is inverted
to the `[REMOVED]` marker |
| `object-view-spec-parity`: the `filterableFields` anchor reads RETIRED
| `4bc3becd5f` | Re-triaged at this bump, as its note said it would be:
out of `SPEC_COUNTERPART` and into `SANCTIONED_LOCAL`, on the same
footing as `viewTabBar` (a tombstone still declared on both faces) |
| `ListViewBlock.specInputs-13047`: 2 rows | `4bc3becd5f` | The spec's
`list-view` row now refuses the fixture. One row pins that refusal (path
`filterableFields`, prescription text, plus an accept control). The
Filter-panel measurement is kept on a node built past the row on
purpose. The old quick-filter-bar row is removed: no node the save gate
accepts can carry the key now |
| `SchemaForm.topLevelUnion-11251`: the served list form | `4bc3becd5f`
(`view.form.ts` drops the input) | The control lists the three keys the
form still offers, and pins `filterableFields` absent |
| `ci-cd-pipeline-doc`: live-e2e pin | the bump |
`e2e/live/ci/backend.env` reads `OBJECTSTACK_VERSION=18.0.0`. The tag
`@objectstack/cli@18.0.0^{}` resolves to `06cab4849a`, and npm serves
`@objectstack/cli@18.0.0` |
| `check:installed-pin-claims` and its blocking test: 34 sentences in 24
files | the bump | Each fact was re-measured and the sentence restamped
`18.0.0` (see below). Nine sentences that carry the re-measure chain
also gain `objectui#13261` |

The renderer needed no change. objectui#13118 had already removed the
`filterableFields` reader ahead of the pin.

### How the 34 sentences were re-measured

I wrote a probe and ran it unchanged against both builds in the pin
store: `f4755a68` (`18.0.0-next.5`) and `06cab4849a` (`18.0.0`). For
every exported zod schema in `@objectstack/spec`, `/ui`, `/data` and
`/automation` (510 schemas), plus every `ComponentPropsMap` row, it
hashes `z.toJSONSchema`. It also runs the concrete parses the sentences
state:

- `ViewDataSchema` providers;
- the three `CalendarConfigSchema` legs and the `object-calendar` `data`
arms;
- the `FieldSchema` lookup `referenceTo` / `reference` pair, `rows` on
four types, and `dependsOn` shapes;
- `SelectOptionSchema` with label `''` and with `description`;
- `record:highlights` `icon` and `layout: 'grid'`, and `record:details`
`columns`;
- the `object-kanban` key set and the `ObjectListViewSchema` key count;
- `@objectstack/lint`'s `fieldRuleRootIssue` text for `current_user` and
`app`.

Results:

- Every concrete parse answers identically on both builds.
- With descriptions stripped, 15 schemas differ. All of them are the
list-view family (the `filterableFields` tombstone) or schemas that
embed it (`ObjectSchema`, `ViewSchema`, the stack and artifact
aggregates).
- `FieldSchema`, `FlowSchema` and `RecordRelatedListProps` differ in
descriptions only.
- For the engine table in `flow-node-config.startGates-12780`: between
the two commits, the automation engine changed only run-as identity, and
the trigger packages changed only their changelogs and manifests.

## Verification at head `586a6233b5`

- **Closure build** under the verify lock: `pnpm
--workspace-concurrency=2` with `--filter` set to
`@object-ui/app-shell^...`, `@object-ui/plugin-view^...`,
`@object-ui/data-objectstack^...` and `@object-ui/plugin-list^...`, then
`build`. The lock printed `VERDICT command-exit 0`.
- **Type-check**, each exit 0: `@object-ui/types`, `core`,
`data-objectstack`, `plugin-list`, `plugin-view` and `app-shell`. Each
log echoes `type-check`. `types`, `plugin-list` and `app-shell` were
re-run after the test edits.
- **Targeted vitest** with `--maxWorkers=1`, one package directory at a
time, under the lock. These are the 106 test files that name a key or
symbol the delta moved (`filterableFields`, `NavigationItemSchema` /
`navItemVisibleDataNeedsDataSource`, the spec forms, `retiredKey`, the
pin and lockfile scripts), plus
`check-installed-spec-pin-claims.test.ts`.
- First run at the new pin: 18 groups, red in `apps/console`,
`app-shell`, `plugin-list`, `types` and `scripts`. Those are the reds in
the table.
- Re-run at `586a6233b5`: `apps/console` 325/325, `app-shell` 620 passed
and 1 skipped, `plugin-list` 220/220, `types` 658/658, `scripts`
318/318.
- The 13 other groups were green at the new pin, before the comment-only
restamps.
- **Gates at `586a6233b5`**, each exit 0:
- `check:phantom-deps`, `self-import`, `unreferenced-sources`,
`doc-example-readers` and `handler-key-reads`;
- `check:side-effects-array`, `element-data-source-declaration`,
`spec-symbols`, `action-forward-parity` and `designer-field-key-parity`;
- `check:icon-record-names`, `i18n-keys`, `i18n-drift`,
`i18n-designer-parity` and `control-bytes`;
- `check:installed-pin-claims`, `lockfile-integrity`, `lockfile-dedupe`
and `new-line-citations`;
- `check-hand-rolled-comment-mask.mjs`, `check-changeset-fixed.mjs` and
`check-changeset-presence.mjs`;
- `check:changeset-claims`, `check:pending-changeset-literals`,
`changeset:check` and `check-changeset-no-major.mjs`.
- **`check:spec-floors`** exits 1, with every finding `[no-artifact]`:
the workspace was not fully built. This is NOT MEASURED, not a red. The
order said to record it and leave it.
- **Lint, narrowed:** `eslint --no-inline-config --format json` over the
27 changed `.ts`/`.tsx` files reports `files 27, errors 0`. All 147
warnings sit on lines this PR does not change. `eslint.config.js` has no
`parserOptions.project` and no projectService, so type-aware linting is
off and this diff cannot change the verdict on any untouched file.
- **Declared to CI:** the full `pnpm test` (every package directory this
PR touches, including `plugin-calendar`, `plugin-designer`,
`plugin-detail`, `plugin-form`, `plugin-gantt`, `plugin-kanban` and
`core`), the whole-repo `pnpm lint`, `type-check` across the workspace,
and `spec-range-floors`.

## Changeset

`.changeset/13261-objectstack-pin-18-0-0.md` has an empty frontmatter,
so it releases nothing. The only published-source edits are doc
comments, which `check-changeset-presence` counts. It reads OK on the
empty declaration.

## Acceptance notes

- `pnpm install` at this pin rewrites `pnpm-lock.yaml` with an `esbuild`
peer-context flip that the pin did not cause. It is left uncommitted,
because the committed lockfile installs frozen. A later unrelated `pnpm
install` may show the same churn.
- `packages/plugin-detail` and `packages/types` still declare
`@objectstack/spec` `^18.0.0-next.5` in `package.json`. The floor step
moves every range to `^18.0.0` at publish, so this PR leaves them.
- objectui#13121, objectstack-ai#13119, objectstack-ai#13076 and objectstack-ai#12484 remain open. Releasing them
after this lands is triage's call.

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

---------

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/xl tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant