Uh oh!
There was an error while loading. Please reload this page.
docs(types): widget.ts anchors describe the retired spec WidgetManifest/WidgetSource as history - #7262
Merged
Conversation
…st/WidgetSource as history The two JSDoc blocks on `RuntimeWidgetManifest` / `RuntimeWidgetSource` were written when `@objectstack/spec/ui` still exported a field-widget-plugin `WidgetManifest` / `WidgetSource`. Protocol 17 retired that whole widget-registration vocabulary under ADR-0049 enforce-or-remove (objectstack#5055), so both blocks described a schema that no longer exists — in the present tense, including a per-key enumeration of it. That is the ADR-0033 shape: an AI author reads a JSDoc claim as fact. Rewritten as history: the spec ONCE owned the names, the retirement record is the D3 `SemanticMigration` `ui-widget-i18n-family-retired` plus `ui/WidgetManifest` in `RETIRED_DEFS_BY_MAJOR` for 17, the bare names are now owned by nobody, and the `Runtime` prefix is kept BY CHOICE under the objectstack#4988 precedent. The per-key enumeration of the retired schema is dropped; the live assertion is the "spec no longer owns" row in page-nav-misc-spec-parity.test.ts, which this comment now points at. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01V3hPr7riucnMfhcHY86Msd
…es patch The docblocks sit on exported declarations, so they publish: rebuilt from a cleared dist on both sides, `dist/widget.d.ts` changes (bb4f2fd7… -> db1d5fbd…) while `dist/widget.js` is byte-identical (a3de34c5… both sides). Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01V3hPr7riucnMfhcHY86Msd
Contributor
✅ Console Performance Budget
The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it. 📦 Bundle Size Report
Size Limits
|
This was referenced Sep 2, 2026
yinlianghui
marked this pull request as ready for review
September 2, 2026 02:15
Uh oh!
There was an error while loading. Please reload this page.
yinlianghui
deleted the
claude/issue-5213-widget-ts-spec-anchor-jsdoc
branch
September 2, 2026 02:29
This was referenced Sep 2, 2026
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 freeto 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#5213
Comment-only change to
packages/types/src/widget.ts, plus the changeset that declares it. No type, member, signature, export or test moved.What was wrong
The two JSDoc blocks on
RuntimeWidgetManifest(:30) andRuntimeWidgetSource(:109) were written while@objectstack/spec/uistill exported a field-widget-pluginWidgetManifestand aWidgetSourceunion. They said the local types were "Renamed off the spec'sWidgetManifestname (objectstack#4115)", in the present tense, and the manifest block enumerated the spec's shape key by key —{ fieldTypes, category, lifecycle, events, properties, implementation, screenshots, license, aria, performance }.None of that exists any more. That is the ADR-0033 failure the card names: an AI author reads a published docblock as present-tense fact, and a per-key description of a deleted schema is a planted premise, not stale documentation.
Installed-spec probe (measured in this worktree, not on the platform repo's main)
@objectstack/specresolves to 17.2.0 here (node_modules/@objectstack/spec/package.json).grep -rn "WidgetManifest\|WidgetSource" node_modules/@objectstack/spec/dist --include=*.d.ts --include=*.d.mts— zero hits. Nothing is exported under either name.grep -rn "WidgetManifestSchema\|WidgetSourceSchema" dist --include=*.js --include=*.mjs— zero hits. The only occurrences anywhere in the tarball are insidesourcesContentofdist/ui/index.js.map, i.e. the retired file's own tombstone comment.SemanticMigrationui-widget-i18n-family-retired(surfaceui.widgetManifest / ui.widgetLifecycle / ui.widgetEvent / ui.widgetProperty / ui.widgetSource …), andui/WidgetManifest/ui/WidgetSourcelisted inRETIRED_DEFS_BY_MAJORunder theretired-def:17block.The sentence the new JSDoc quotes verbatim is that entry's own
replacementtext: "objectui's registry has always carried its own runtime manifest for that (RuntimeWidgetManifest/RuntimeWidgetSourcein@object-ui/types, objectui#3161 / #4115), which models different keys and never derived from these". The same entry'sacceptanceCriteriaprescribes exactly this change: "packages/types/src/widget.ts's 'Renamed off the spec'sWidgetManifestname' comments now point at names that no longer exist. Both are prescribed responses to this removal, not collateral damage."What changed
Both blocks are now historical statements, and each says what is true today:
field.widgetis az.string()naming a registered component and never referencedWidgetManifest.RuntimeWidgetManifestis stated to be objectui's only widget-registration contract.Runtimeprefix is kept by choice — objectstack#4988's precedent, a freed word is not a reason to spend a second breaking rename taking it back. The unlock is recorded, not taken (objectui#4164).inlinecollision that made theWidgetSourcerename urgent is kept, in the past tense — it is the reason the prefix exists, so deleting it would lose the reason while keeping the workaround.packages/types/src/__tests__/page-nav-misc-spec-parity.test.ts:652-653. A comment cannot go red; that table can.Half 1 was already landed — verified on the ref, not assumed
page-nav-misc-spec-parity.test.tsalready carries both names in its "spec no longer owns" table (:652-653) with theRuntimeXxxnames kept — the card's option B — and the reverse assertions at:750-751are intact. Nothing in that file is touched by this PR.packages/fields/src/__tests__/spec-symbol-batch7.test.tsand itsFieldWidgetPropsimport are likewise untouched:FieldWidgetPropsSchemadeliberately survived the retirement.Changeset:
@object-ui/types: patch, and the emit was measuredBoth blocks sit on exported declarations, so they publish. Rebuilt from a cleared
distandtsconfig.tsbuildinfoon both sides and compared by SHA-256:dist/widget.d.ts—bb4f2fd702cac02a327b2bb498d01259313f6dc6004a99018b6ed036df9bba15todb1d5fbd53d305f5c82bf634e76d3f17ac4a59f53bf6448420b49c5f148f1f62— changed. A consumer reads this text on hover and in the API docs.dist/widget.js—a3de34c54213a269074b1858248c0f26d689957dda18410443972f90e879b3e1on both sides — byte-identical. Nothing runtime moved.So a
patchis the honest declaration and an empty-frontmatter "no release" changeset would not be. Nevermajor.Reverse-verification hygiene for that measurement: the implementation was committed first, the baseline text was restored with
git checkout HEAD~1 -- "$REPO_ROOT/packages/types/src/widget.ts"(absolute path) under atrap … EXIT INT TERM, the mutation was proved on disk before measuring (grep -c "Renamed off the spec's"= 2, new-marker count = 0,git hash-objectequal to theHEAD~1blob), and the restore was proved bygit diff HEAD --name-onlybeing empty with the working blob hash back to theHEADblob.Gates — all run at the final commit
015bec4, tree cleanpnpm --filter @object-ui/types type-checktsc --noEmit && tsc -p tsconfig.examples.json && tsc -p tsconfig.test.json, so the test project is included and the test sources really were checkedpnpm exec vitest run packages/types/src/__tests__/page-nav-misc-spec-parity.test.tspnpm exec eslint packages/types/src/widget.tspnpm check:control-bytespnpm check:spec-symbolsnode scripts/check-changeset-presence.mjsnode scripts/check-changeset-no-major.mjsnode scripts/check-changeset-overwrite.mjsnode scripts/check-changeset-fixed.mjsEvery heavy step ran through the shared verify lock (
os-verify-lock.sh, slotissue-5213-objectui), each returningVERDICT command-exit 0. Exit codes were captured before any pipe.Declared narrowing: the repo-wide farm (
pnpm lint, the other 30-oddcheck:*scripts) was not run locally — CI runs it exactly once anyway. The targeted set above is derived from the change surface: one comment-only edit topackages/types/src/widget.tsplus one.changeset/*.md.check:spec-symbolsis included because it is the gate that reads spec-symbol names and spec-alignment claims out of objectui source, which is precisely what this diff rewrites.One non-gate note:
pnpm --filter '@object-ui/types^...' buildreportsERR_PNPM_RECURSIVE_RUN_NO_SCRIPT — None of the selected packages has a "build" scriptand exits 1. That is an empty dependency closure, not a failure:@object-ui/typesis the base package with zero workspace dependencies.pnpm --filter @object-ui/types builditself exits 0.🤖 Generated with Claude Code
https://claude.ai/code/session_01V3hPr7riucnMfhcHY86Msd