Repository navigation
chore(objectui): bump the console pin to f0268ad78485 (carries objectui#11880) - #22412
objectstack-fleet[bot] wants to merge 10 commits into
Conversation
…pt output) scripts/bump-objectui.sh f0268ad784854568aa58a2aa791f6a7502259186 --no-commit Claude-Session: https://claude.ai/code/session_0115N1oNnQS5WqofZ2DzaT3q Co-authored-by: Claude <noreply@anthropic.com>
pnpm gen:sdui-lockstep against objectui at the new pin: 214 grammar lines (blob 0131f27cf86d), 25 diagnostic codes and containment predicate 76c18fb95d1f, all unchanged, so no port is owed. Claude-Session: https://claude.ai/code/session_0115N1oNnQS5WqofZ2DzaT3q Co-authored-by: Claude <noreply@anthropic.com>
node scripts/gen-sdui-manifest-node.mjs over .cache/objectui-f0268ad78485 (107 components, sha256 097ae3cbcf95...). Claude-Session: https://claude.ai/code/session_0115N1oNnQS5WqofZ2DzaT3q Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0115N1oNnQS5WqofZ2DzaT3q Co-authored-by: Claude <noreply@anthropic.com>
… component.zod.ts) Claude-Session: https://claude.ai/code/session_0115N1oNnQS5WqofZ2DzaT3q Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0115N1oNnQS5WqofZ2DzaT3q Co-authored-by: Claude <noreply@anthropic.com>
… pin-citation changeset Claude-Session: https://claude.ai/code/session_0115N1oNnQS5WqofZ2DzaT3q Co-authored-by: Claude <noreply@anthropic.com>
pnpm --filter @objectstack/spec check:generated --fix (check:docs was the one stale artifact). Claude-Session: https://claude.ai/code/session_0115N1oNnQS5WqofZ2DzaT3q Co-authored-by: Claude <noreply@anthropic.com>
📓 Docs Drift CheckThis PR changes 2 package(s): 2 hand-written doc(s) NAME something this change touched and may need an implementation-accuracy re-verification:
⛔ 6 release-owned page(s) also name something this change touched. These are read-only:
What this run could not see
Coarse fallback — 140 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): Which tree this was computed onThis run read A worktree cut from an older # while this PR is open — GitHub drops the merge commit once it closes
git fetch origin 1a6954868eb00529fb117a2976950047ba33b77c && git checkout 1a6954868eb00529fb117a2976950047ba33b77c
# afterwards, rebuild it from the two parents, which stay fetchable
git fetch origin 27a8b33dec2eb98b73b3e5146e740067cdbd7806 eb7b6c35ebd18d33b705e770c2876f14dc302cf5 && git checkout -B drift-repro 27a8b33dec2eb98b73b3e5146e740067cdbd7806 && git merge --no-ff eb7b6c35ebd18d33b705e770c2876f14dc302cf5
node scripts/docs-audit/affected-docs.mjs --json 27a8b33dec2eb98b73b3e5146e740067cdbd7806
|
|
Generated by Claude Code |
Contract reviewServed-tier: PR #22412 for card #22385, read against ① Derived judgments
② Semver level
③ Boundary flags
Deviations (six), each answered:
Out-of-scope findings (four):
The acceptance notes in the PR body add nothing beyond the above. The Docs Drift advisory ( Implemented-by: VERDICT: PASS read 2026-10-09T06:12Z. Generated by Claude Code |
⛔ merge queue 构建失败 — 先分诊,再决定要不要重排队列构建 37894050587 红了。队列跑的是全量套件(PR 侧 CI 只跑 affected 子集), 分类: 失败的 job(日志抽取,best effort):
跨 PR 相同签名(24h,按失败测试文件聚合):
历史信号:
分诊清单:
Generated by Claude Code · merge-queue-triage workflow (#4859) |
|
Dequeued by a
Generated by Claude Code |
|
Correction to The contract review Generated by Claude Code |
Fixes #22385
Clause-②: no
This moves the bundled Console's objectui pin from
a58626c88dc8(PR #22015) tof0268ad784854568aa58a2aa791f6a7502259186, which was objectuimainwhen this run started. The new pin contains5bc55c0c5a1e, the closing merge of objectui#11880, so it carries both objectui halves of that card:element:record_pickerandelement:numberread their query from the node-leveldataSourceonly (objectui74add0c12), andelement:repeaterreads that binding first (objectuiaaba8655a). Ruling6051498447on #11509 orders the work this way ("objectui first …, and the spec retirement ships with the pin bump that carries it"). The spec retirement itself is #11509's, not this PR's: no key retires, no schema shape changes, no conversion or lint rule changes here.The bump follows the repo's own procedure (
scripts/bump-objectui.sh, thenpnpm objectui:buildandnode scripts/gen-sdui-manifest-node.mjs) and the gates it derives. It adds no step to that procedure.This is not a release act. Version Packages PR #21988 is untouched. That PR edits
packages/console/CHANGELOG.mdandpackages/console/package.json, and this diff edits neither. The console's release input is the new.changeset/console-f0268ad78485.md.Range
git ls-remote … refs/heads/mainreadf0268ad784854568aa58a2aa791f6a7502259186at 2026-10-09T02:23:09Z, the same sha the dispatch read at 01:49Z.compareon objectstack-ai/objectui proves containment (base...head, head = the new pin, read 02:24:10Z):5bc55c0c5a1e...f0268ad78485:status: ahead,ahead_by: 8,behind_by: 0, merge base5bc55c0c5a1e4202a55a45c092cce3880a09b27a. The pin contains objectui#11880's closing merge.74add0c12a70...f0268ad78485:ahead, 27 ahead, 0 behind (objectui#11880,element:record_picker/element:number).aaba8655aec5...f0268ad78485:ahead, 17 ahead, 0 behind (objectui#11880, the repeater half).a58626c88dc8...f0268ad78485:ahead, 170 ahead, 0 behind.5bc55c0c5a1e...a58626c88dc8readsbehind,behind_by: 162.a58626c88dc8..f0268ad78485has 170 commits, 0 merges and 1061 changed paths (482 added, 2 deleted).git merge-base --is-ancestor 5bc55c0c5a1e f0268ad78485in the objectui object store exits 0.Digest level and declared-breaking entries
The bump's own digest output: objectui declared 175 changesets over the range. 173 release, 2 are release-nothing, and 4 commits carry no changeset (listed by subject in the console changeset). One changeset added in the range was already consumed by an objectui release, and was read from the commit that added it. None declares
major. Four carry the author's breaking annotation. The highest declared level isminor, so the console changeset isminor. Six commit subjects carry!(objectui#6152 rounds 7 to 12,@object-ui/typesfaces taking@objectstack/specrows by reference); none of their changesets is annotated breaking, so the digest lists them at their declared level.The script wrote its
adr-0087: TODOplaceholder into the console changeset. It is answerednot-required (no-migration-prescription), in the wording the previous bumps used.check-adr-0087-registration --base origin/mainreports "1 declared-breaking changeset(s), each carrying an ADR-0087 disposition".check-changeset-no-major --base origin/mainreports "This diff introduces nomajorbump".Each declared-breaking entry, with its disposition:
18d7b489c): objectui's form-field faces takescaleandcurrencyConfigby reference to@objectstack/spec'sFieldSchema, so objectui's tolerant face now refuses what the spec already refuses. It follows this repo's existing declaration, so nothing here moves.172acc313): objectui'ssidebarnode declaressideasleftorright.sidebarhas no@objectstack/specrow.d92b2a15d): the metric sub-caption is retired on the reader side. The ObjectStack half shipped in@objectstack/spec17.7.0, with the conversiontranslation-widget-sub-caption-removedand the semantic entrytranslation-widget-sub-caption-retired. This repo'ssdui-parsercopy already dropsdescriptionfromCONSUMED_WIDGET_OPTION_KEYS, so the renderer and the save gate now agree.74add0c12):element:record_pickerandelement:numberread their query from the node-leveldataSourceonly. The flat keys they stop reading are still declared by@objectstack/spec. Their retirement, with its ADR-0087 conversion ontodataSource, is [Direction · v18] Retire the flatobject/filterdata-binding family —dataSourceas the single data-binding door (re-anchor of the deleted #6590 tracker) #11509, which the ruling sequences after this bump and ships in the same release.User-visible changes this brings into the Console
The full list is the console changeset (173 entries, capped at 100 in the rendered list). The ones a Console user meets:
element:repeaterreads the node-leveldataSourcebinding first, and its flat keys second. A repeater bound only throughdataSourcenow renders its rows; at the old pin it rendered nothing.element:record_pickerandelement:numberread their object, filter, sort and limit fromdataSourceonly. A page that wrote those keys flat underpropertiesnow shows no records (the picker) or the "No object named: set dataSource.object." notice (the number) until it moves them intodataSource. No example or package source in this repo writes the flat keys: the showcase'spage-variablespicker already binds throughdataSource.element:number's object todataSource.object.options.description(objectui#11389).disabledpredicate says why (objectui#11811, objectui#11839).action:buttonoffers Undo for anundoableupdate of the record in scope (objectui#11168).Select(objectui#11865). The form designer can be arranged from the keyboard (objectui#11871, objectui#11898). The field inspector picks a field type from a searchable, grouped list (objectui#11793).What changed here (22 files, +809 / -278)
.objectui-shaOBJECTUI_ROOT=… scripts/bump-objectui.sh f0268ad784854568aa58a2aa791f6a7502259186 --no-commit.changeset/console-f0268ad78485.mdcheck-adr-0087-registration,check:objectui-changesetsdui.manifest.json,scripts/sdui-manifest.record.jsonnode scripts/gen-sdui-manifest-node.mjsover.cache/objectui-f0268ad78485check-sdui-manifest.mjspackages/sdui-parser/objectui-lockstep.jsonnode scripts/check-sdui-lockstep.mjs --update(pnpm gen:sdui-lockstep) against the same treecheck:sdui-locksteppackages/spec/src(the generatedmigrations/registry.tsamong them), plus the quoted anchors of one datedview.zod.tsrecordregistry.tsbygen:migration-registrycheck:objectui-pin-citations(and--verify-anchors).changeset/objectui-pin-citations-f0268ad78485.md@objectstack/specpatchcontent/docs/references/ui/view.mdxcheck:generated --fixcheck:docsOBJECTUI_ROOTat a detached objectui worktree of my own (/home/user/objectui-issue-22385, at the pin), aftergit fetch origin mainthere. The objectui store was shallow and did not hold the old pin, so the script ran its owngit fetch --unshallow, then re-checked: "the range walks completely now". The shared objectui checkout's working tree, branch and index were not touched; the fetch and the deepen added objects and refs to its shared object store only.e0654735a318…to097ae3cbcf95…. objectui's workspace version stays 17.7.0. Ten components' inputs moved:action:buttongains anundoableinput.element:repeatergains thedataSourceinput and itsobjectdescription says a node-leveldataSource.objectwins.element:number'sobjectandfilterdescriptions now say NOT READ (objectui#11880).element:text'svariantenum losesheadingandsubheading, which@objectstack/spec17.7.0 already refuses.object-grid,object-kanban,object-calendar,object-gantt,object-master-detail-formandobject-timelinereword input descriptions (objectui#6152 rounds 7 to 12): thefilterinputs name theViewFilterRulearray, andresizablesays the legacyresizableColumnsis refused.0131f27cf86d), 25 diagnostic codes and containment predicate76c18fb95d1f. All are unchanged, so no port is owed. objectui'ssdui-parser/src/dashboard-widget-options.tschanged (objectui#11389) to the five-key set this repo's copy already carries.Records that turned false at the new pin
Three asserting records said something objectui changed. Only the false sentence of each is rewritten, and each new sentence names the objectui commit that changed it. Rollback for each: revert that docblock hunk alone (comment text, no schema or code); every other line of the record and of this PR stands without it.
1.
element:repeaterrow (ui/component.zod.ts, theElementRepeaterPropsSchemadocblock)dataSourcebinding. This renderer is not wrapped in objectui's element-data-source gate, so the query keys above are the only way to aim it." And: "objectis REQUIRED, aselement:number's is: without it the renderer never queries and shows its "No records" state (:171-174,:209) — indistinguishable from an object that really has no rows. The registration marks it required too."aaba8655a, the repeater half): the node-leveldataSourcebinding. The renderer resolves it throughuseElementDataSource(:172-173) … and reads it FIRST, the query keys above being its fallback." It then states the precedence:objectis the binding's (:192-195);filteris this row's AND the binding's (:180-188);sortandlimittake the binding's own value, then this row's key, then the binding's saved view (:196-199). The registration is marked withelementDataSourceBlock(:311). Theobjectbullet now says the renderer takesdataSource.objectfirst and this key second, and that with neither it never queries (:234-237,:279).object, and the registration still marks it required because the row does (:320-326). So a node that names its object only throughdataSourcerenders at this pin while this row refuses it. The text says so and names [Direction · v18] Retire the flatobject/filterdata-binding family —dataSourceas the single data-binding door (re-anchor of the deleted #6590 tracker) #11509 as the card that retires these flat keys. The schema is unchanged.git diff a58626c88dc8 f0268ad78485 -- packages/components/src/renderers/basic/data-list.tsx, +99/-16, one commit (aaba8655a). The read points cited at:171,:183,:148,:181and:182were rewritten fromprops.object/props.filter/props.sort/props.limitto the resolvedobject,scoped.filter,sortandlimit.2.
action:buttonrow (ui/component.zod.ts, theActionButtonPropsSchemadocblock)inputs(:427-572) publish twenty-seven of the twenty-nine keys … the two left unpublished areendpoint(refused here, above) andundoable, each still forwarded (:215-318), on objectui's measurement that the console's ownapihandler readstargetand neverendpoint, and that the runner offers Undo only with a host row stash this block never writes."inputs(:507-658) publish twenty-eight of the twenty-nine keys … twenty-seven since objectui#11168 slice 1, andundoablesince objectuif0496bdf1… the one left unpublished isendpoint…undoableis published because the block now writes the row stash the runner's Undo needs: anundoableoperation: 'update'of the record in scope carries that record as its Undo baseline (withUndoBaseline,:72-81, called at:247-251; objectui#11168, ruling B on objectui#11754), where ata58626c88it wrote none."git diff a58626c88dc8 f0268ad78485 -- packages/components/src/renderers/action/action-button.tsx, +95/-9 (f0496bdf1,cef0eeec0). The row already declaresundoable, so the accept set does not move.3.
action:iconrow (ui/component.zod.ts, theActionIconPropsSchemadocblock)labelis read five times at this pin (four atdb11afd49)::109…,:165(forwarded),:281(aria-label, falling back toname),:290(its first letter when no icon resolves) and:296/:302(the tooltip).descriptionis the tooltip's fallback (:302) as well as forwarded (:166)."labelis read six times at this pin (five ata58626c88, four atdb11afd49)", with the five re-pointed and a sixth: ":311(the heading of the disabled-reason tooltip a predicate-disabled icon is wrapped in, new with objectui#11839, objectuicef0eeec0)".descriptionis now the fallback of both tooltips (:311,:324).git diff a58626c88dc8 f0268ad78485 -- packages/components/src/renderers/action/action-icon.tsx, +22/-0 (cef0eeec0).How the other citations were re-measured
a58626c88and intersected with the range's 1061 changed paths. Every anchor in a changed file was mapped throughgit diff -U0 a58626c88 f0268ad78and its text compared at both pins. A record whose cited files are all byte-identical (git diff --quiet) gets that sentence and no re-pointing.containers.tsx,record-related-list.tsx,record-quick-actions.tsx, the fouraction-*.tsxrenderers,basic/data-list.tsx,data-objectstack/src/index.ts,previews/block-config.ts,previews/block-types.ts,ObjectGrid.tsx,data-table.tsx,plugin-kanban/src/index.tsx,ObjectCalendar.tsx,ObjectMap.tsx,plugin-gantt/src/index.tsx,ListView.tsx,ObjectView.tsx,ObjectTimeline.tsx,plugin-timeline/src/index.tsx,types/src/objectql.ts,types/src/zod/objectql.zod.ts,form.tsx,ActionRunner.ts,date-display.ts, and theen/zh/depacks.action:buttonparamsstatement (180-183->247-254, now wrapped inwithUndoBaseline);DisabledReasonMenuLabel, stillaction.label || action.name);formatDateindate-display.ts(445-480->568-605): objectui#11693 names an instant's day in the display zone, and itsshort/relative/ default style handling reads unchanged.FormField.spandescribe changes its sha only:WIDE_FIELD_TYPES, the field-type alias table andspanLadderForare byte-identical (spanLadderFormoved204-231->274-301).view.zod.tsmap record (.objectui-shapin53ded82b) carries seven quoted anchors that--verify-anchorschecks against the live pin. All seven moved byte-identical:resolveListMapConfig146->147,FLAT_MAP_CONFIG_SPELLING85->86,case 'map':2300->2340,ObjectMapConfigSchema2388->2513(still.strict()),LIST_VIEW_LOCAL_OVERRIDES1437->1506(still withoutmap), and the twogetMapConfiglines415->449and420->454. The record gains a "RE-READ again at pinf0268ad78" sentence, the way earlier bumps recorded it.keyboardNavigationhit lines: 15, against 3 forschema.editable;ObjectKanban.tsx'squickAdd/onQuickAdd: 2 each, against 11 foronCardClick; 0kanban-uiregistrations;ElementDataSourceGateoccurrences in the fivesrc/index.tsxshells: 0, 3, 3, 3 and 4;ObjectMap.tsx'sschema.*read set: the same 17 names at both pins.git grep -o -F. That method first reproduced everya58626c88number: 7754 files,timeout1431,RuntimeConfig299,resourceLimits2,objectstack17468,@objectstack/spec7246,useState2491,window4255,period247,interval200,metrics401,Span509,SpanSchema57,TTL184 andtenant1319.timeout1658,RuntimeConfig337,resourceLimits2 (the same twopackages/app-shellprose hits),objectstack17956,@objectstack/spec7522,useState2622,window4430,period249,interval213,metrics404,TTL184 andtenant1338.plugin-lifecycle-advanced.zod.ts,tracing.zod.tsandmetrics.zod.ts, plus every named key), exceptSpan/SpanSchema, which read 517 / 57. The eight newSpanhits are each acolSpan.For the contract review: changed lines in
packages/spec/src/**that are neither a comment nor a string fragmentThere are none. Measured mechanically: each changed file was parsed with the TypeScript compiler at
11d119ab18and at the head, comments and JSDoc dropped, and every string or template literal replaced by one placeholder token. The remaining token sequences are identical in 13 of the 15 files. The other two,18.system-metrics-jsdoc-durations-unit-in-key.tsand18.system-tracing-otel-exporter-durations-unit-in-key.ts, each gain one+joining one new string fragment into theirreasonstring;migrations/registry.tsmirrors both. No identifier, key, value or export moves.Console build (the local Console Pin Gate equivalent)
Both steps ran under the verify lock.
turbo run build --concurrency=2 --filter=@objectstack/client --filter=@objectstack/spec --filter=@objectstack/sdui-parserran 34 tasks and exited 0 in 4m50s on the shared box.pnpm objectui:buildexited 0, holding the lock 6m51s.OBJECTUI_ROOTpointed at a scratch repository holding no refs, with objectui's object store as its alternate, so the build'sgit worktree addregistered nothing in the sibling objectui checkout.check:console-shaandcheck:console-injectionran against that dist (results below).Gates and tests (head
21da749e30)Everything below ran at head
21da749e30, the merge oforigin/main(fdfdd7e76d), after a full workspace build at that head (72 turbo tasks, exit 0). Exit codes were captured before any pipe.node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstackderived 127 commands from 22 changed paths against merge basefdfdd7e76. All 127 ran and exited 0. The--ranreconciliation reads "127 derived, 127 run, 0 NOT-MEASURED, 0 UNRUN".check:objectui-pin-citations: "55 asserting objectui pin citation(s) match .objectui-sha (f0268ad78), 144 historical citation(s) recorded and not checked, across 1922 spec source(s)." With--verify-anchors: "13 anchor content assertion(s) verified against objectui at f0268ad78".check:sdui-lockstep: "OK — this copy is byte-identical to objectui@f0268ad78485 … over 214 grammar line(s) [blob 0131f27cf86d], agrees on all 25 diagnostic code(s) and on thenot-a-containerpredicate [blob 76c18fb95d1f]".check-sdui-manifest.mjs: "present, intact (sha256 097ae3cbcf95…, 107 components) and recorded at the live objectui pin f0268ad78485…".check:console-sha: "Console dist matches the objectui pin (objectui@f0268ad78485)".check:console-injection: "the dist carries this tree's copy, and not the published one".check-adr-0087-registration --base origin/main: one declared-breaking changeset, carrying its disposition.check-changeset-no-major --base origin/main: "This diff introduces nomajorbump".check:generated: "All 15 generated artifacts are up to date".check:migration-registry: "src/migrations/registry.ts is current (402 semantic, 247 retired-key, 222 retired-def)".check:nul-bytes: OK, no raw control bytes.@objectstack/specvitest, both projects: 680 files, 19658 passed, 1 todo.@objectstack/spectypecheck: exit 0.@objectstack/sdui-parser: 14 files, 225 passed; typecheck exit 0.@objectstack/lintvalidate-jsx-pages.production-witness.test.ts: 5 passed.@objectstack/metadata-protocolprotocol.runtime-authoring-gate.test.ts: 119 passed.@objectstack/cli, unit tier (sdui-manifest,console.sha-drift,validate-build-gate-parity,console-resolve): 4 files, 102 passed. The integration tier is declared to CI: this diff touches no integration-tier file and no spawn entry.packages/spec/src: 0 errors, 0 warnings, 15 files by the--format jsoncount. The population is theeslint.config.mjsblock that lints everytsfile (line 971). The config never enables type-aware linting (line 328), so this diff cannot move the verdict on any file it does not touch. The repo-widepnpm lintis CI's run.Acceptance notes
element:record_pickerandelement:numberdocblocks. Their rows inui/component.zod.tscite no.objectui-shavalue, so no pin gate reads them and they are outside this PR's file surface. Some of their sentences still describe the flat query keys as read, which is false at the new pin (objectui74add0c12). Their rewrite goes with the retirement of those keys. Carrier: [Direction · v18] Retire the flatobject/filterdata-binding family —dataSourceas the single data-binding door (re-anchor of the deleted #6590 tracker) #11509.object/filterdata-binding family —dataSourceas the single data-binding door (re-anchor of the deleted #6590 tracker) #11509 retirement lands, the Console ignoreselement:record_picker/element:numberflatobject/filter/sort/limitwhile@objectstack/specstill accepts them. The ruling ships both in the same release. No example or shipped page in this repo writes those flat keys. The only page that places anelement:record_picker, the showcase'spage-variables, binds throughdataSource. Test fixtures inpackages/lintare not shipped pages.dataSourcerenders at the new pin, but its row still requiresobject. The docblock now says so. Relaxing the requirement, and any lint waiver, is a schema change that belongs to [Direction · v18] Retire the flatobject/filterdata-binding family —dataSourceas the single data-binding door (re-anchor of the deleted #6590 tracker) #11509.previews/block-config.ts:338-345) still writes the flatobjectkey. The renderer still reads it as the fallback, so nothing breaks at this pin. It becomes relevant when [Direction · v18] Retire the flatobject/filterdata-binding family —dataSourceas the single data-binding door (re-anchor of the deleted #6590 tracker) #11509 retires the key. Carrier: [Direction · v18] Retire the flatobject/filterdata-binding family —dataSourceas the single data-binding door (re-anchor of the deleted #6590 tracker) #11509.scripts/build-console.shand linked worktrees. The script acceptsOBJECTUI_ROOTonly if$OBJECTUI_ROOT/.gitis a directory (line 162). A linked objectui worktree has a.gitfile, so the script silently falls back to the sibling../objectuicheckout and registers its build worktree there.bump-objectui.shchecks the same thing with-e(line 162), so it accepts a linked worktree. I built from a scratch repository whose object store points at objectui's as an alternate, so nothing was registered in the shared checkout. Noted here only, carrier: none.mainmoved after the single merge. After21da749e30,origin/maingainedac8f2c560(fix(spec)!: close the shared retry policy, and judge try_catch config keys at the build doors #22380),a55fdc470(fix(cli): console static plugin caches hashed assets immutable, stable-named files short-lived with a content etag #22395),b1f7a7a73c(fix(lint)!: os build and the object save door refuse a select option's visibleWhen that reads an unbound ctx/os member (#22274) #22392),d8d0711176(fix(spec,cli): os migrate meta lists and writes load-path conversions inside composed package bodies #22393) and83e7ae93ad(fix(cli): a multi-package artifact's flat src/docs rides the package that owns its manifest #22403). Of this PR's files, onlypackages/spec/src/migrations/registry.tschanges there: fix(spec)!: close the shared retry policy, and judge try_catch config keys at the build doors #22380's hunks sit at old lines 5659, 6403, 13522, 13550 and 20651, and this PR's sit between 15141 and 20302.git merge-tree --write-tree HEAD origin/mainexits 0 with no conflict. Per the dispatch, there is no second merge.registry.ts).scripts/pm/fleet-write/dispatch.mjs(pr_create, draft). Its assignee was set throughscripts/pm/label-write.mjs. No label was written,skip-changesetincluded. No MCP write was used.Generated by Claude Code