Skip to content

Commit 285e36b

Browse files
docs(citations): re-point the 30 dead objectstack#N citations and the bare apiMethods-card number (objectui#10803, batch 7) (#10962)
Part of #10803 Clause-②: no Dispatched implementation of the `domain:ui` seat #1 claim (comment `5867587761`) on objectui#10803, batch 7, session `https://claude.ai/code/session_01DuWo5bdP9SdVebamn99GGk`. Citations only: no sentence's claim moves, and every edited pending changeset's frontmatter is byte-identical. The only runtime text that moves is two console warnings, one in `@object-ui/app-shell` and one in `@object-ui/plugin-detail`, which lose their dead pointer and nothing else (amendment `5860244997`, Q1 = A; `patch` changeset). No test pins any changed text: the literal-anchor sweep below finds no specific anchor, so no test file is edited. This batch carries release `5866922219`'s two lists: - the **30 `objectstack#N` citations that answer 404**, in the card's two classes (pending changeset prose and non-test `packages/*/src`); - the **28 bare `#3391` lines in 10 files** that mean objectstack's apiMethods whitelist card, which batch 6 fixed at 2 other sites. ## Why `Part of`, not a closing line Both lists read **0** after this batch (**Census**). The brief's rule was a closing line if the card's lists all read 0. They do, but reading the sentences found **10 more lines in the same two classes that cite a dead objectstack number written bare**, three numbers in all (**Acceptance notes** 1). Triage item 3 puts a dead number found later in these classes on this card, so the card is not finished. Whether it carries them as a batch 8 or closes is the seat's call. ## Premise, re-measured on `origin/main` `3b469c8ea` (the branch point) - **Every distinct `objectstack#N` in the two in-scope classes.** 372 numbers (the one objectstack issue URL in these classes names 6227, which is among them). Each was read once with REST `GET /repos/objectstack-ai/objectstack/issues/N`: - 341 answer 200; - 1 answers 301: objectstack#14026, transferred to objectui#10102, which batch 6 re-qualified; - **30 answer 404**, exactly the 30 batch 6 listed. - **The 30, read again.** A second `issues/N` read of each answers 404 (30 of 30), and `pulls/N` answers 404 for all 30. Lit controls in the same run: objectstack#3391, #3720 and #3546 answer 200 as issues, and `pulls/13267` answers 200. - **#3391 and #3546, both repositories.** - objectui#3391 is the record-header api-action placeholder card, unrelated. - objectstack#3391 is the apiMethods whitelist contract card: "UI 操作按钮与 apiMethods 白名单一致性契约落地". Its body names the effective operation set, `/me/permissions`, the 405 import refusal and export derived from list, which is what each of the 28 sentences says. - objectui#3546 is the missing-i18n-keys card, unrelated. - objectstack#3546 is "detail/form 面的 edit/delete 按钮接入服务端 effective 操作集", the inline-edit gate the two paired lines describe. - **objectstack history.** Read from a full, not shallow, treeless clone of objectstack `main` (`git rev-parse --is-shallow-repository`: false). - Every objectstack sha this PR cites is an ancestor of objectstack `main` (`git merge-base --is-ancestor`, exit 0): the 24 this PR adds to the tree, the 3 its edited sentences already cited (`c459da6bc`, `89448a52b`, `9bd4344e4`), and the 7 this body names besides. - `git rev-parse --short=9` returns the same 9 characters for each. - Control legs in the same clone: the head of the open PR objectstack#20421 (`a22b90fc0`) answers exit 1; the known ancestor `51789064` answers exit 0. - **The one objectui sha.** `7a197e7c5` is an ancestor of the branch point, exit 0. Control legs: the head of PR objectui#10945 answers exit 1, and `5f789538d` answers exit 0. This checkout is not shallow. - **A cross-check, not the method.** objectstack's own sweep of dead tracker citations in its tree (objectstack#19123's landing `66e266c93`, its stages `21ab41041`, `5cf58eb16` and `0d7ed5a37`, and `f415bcf18`) anchored eight of these numbers in its own files. For each of the eight (#5970, #6483, #9934, #10485, #11330, #11846, #12868 and #17147) it chose the same commit this PR cites. - Every edited changeset is pending: it is present in `.changeset/` on `main`. ## Census (the enumeration pin for this batch) The 30 numbers (REF = a commit or tree): ``` git grep -nE 'objectstack#(5970|5976|6038|6124|6281|6331|6450|6483|6515|9933|9934|10354|10485|10695|11330|11507|11513|11658|11703|11753|11846|12009|12868|13117|13670|16126|17147|17762|17987|18012)([^0-9]|$)' REF -- '.changeset/*.md' 'packages/*/src/**' ':!**/__tests__/**' ':!**/*.test.*' ':!**/*.spec.*' ':!**/test/**' ':!**/tests/**' | wc -l ``` The bare `#3391`, with the same pathspec: ``` git grep -nE '(^|[^0-9A-Za-z_#/])#3391([^0-9]|$)' REF -- '.changeset/*.md' 'packages/*/src/**' ':!**/__tests__/**' ':!**/*.test.*' ':!**/*.spec.*' ':!**/test/**' ':!**/tests/**' | wc -l ``` | REF | the 30 | bare `#3391` | |:--|:--|:--| | `3b469c8ea` (branch point) | **82**: 26 changeset lines in 24 files, 56 src lines in 39 files | **28** in 10 files | | `c292a6400` (this head) | **0** | **0** | | this head merged with `main` `5c94589f0` (`git merge-tree --write-tree`, clean, tree `bba27eece`) | **0** | **0** | | `5c94589f0` (`main` alone) | 82 | 28 | - Lit controls on the same instruments at this head: live objectstack#10856 reads 4 lines (4 at the branch point); `objectstack#3391` reads 32 lines, against 3 at the branch point (28 re-qualified here, and this PR's sweep changeset names it once). - **Out of scope, as it stands** (whole tree at this head, unfiltered): - the 30 numbers: 84 test lines in 47 files, 1 scripts line, 2 lines in 2 `apps/console` files, 2 package READMEs (`auth`, `react`), 11 lines of published `CHANGELOG.md` history in 8 files; 0 `.github`, 0 governed, 0 `content/docs`; - bare `#3391`: 12 test lines in 9 files and 23 `CHANGELOG.md` lines in 8 files. ## Citation form - **An objectstack commit** is written the way batch 6 wrote its stand-ins: objectstack and the 9-character backticked sha of the commit on objectstack `main` that landed the change the sentence rests on. - **A dead card beside its own dead pull request** collapses to that pull request's squash commit (#5970 with PR #6450, #10485 with PR #10695). - **A dead number beside the live landing it already names** is dropped: #11846 beside PR objectstack#12718, #16126 beside PR objectstack#16920, #12868 beside objectstack `c459da6bc`, and #12009 beside objectstack `89448a52b` (**Special cases** 3). - **A ruling the dead card carried** is cited by its date, with the commit that executed or recorded it, as batches 3 to 6 did for objectui rulings. - **One sentence cites this repository's commit**, `7a197e7c5`, because the change it names landed here (#6331). - **Runtime text carries no sha.** In the two console warnings the dead pointer is dropped (**Special cases** 8). - **The bare `#3391`** becomes `objectstack#3391`, and on the two lines that write `#3391/#3546`, `objectstack#3391/objectstack#3546`. ## Mapping, the 30 numbers Lines / files are the branch-point census for that number (a line naming two of them counts under both). | dead number | resolution | what that commit carries | lines / files | |:--|:--|:--|:--| | #5970 | objectstack `97e7e3caa` | "unify ActionSchema.visible/disabled on one condition shape (#6450)", body "(#5970)": `visible` gains the boolean arm | 2 / 1 | | #6450 (PR) | the same `97e7e3caa`, its squash | as above; the card / PR pair collapses | 2 / 1 | | #5976 (PR) | objectstack `795b6e1aa`, its squash | "5 值子集改名 `HttpMethodSubset`" | 1 / 1 | | #6038 | objectstack `7618ee814` | "key a container's default `list` `_views` name by the runtime identity": leg 2 of 3 of the objectstack#5164 ruling, the `packages/lint` half | 1 / 1 | | #6124 (PR) | objectstack `b3c1f3cd5`, its squash | "key `_views` translations by the runtime view identity"; "The extractor now ASKS the composer for the key" | 1 / 1 | | #6281 (PR) | objectstack `85ec26d28`, its squash, 2026-08-07 | "SDUI props — enforce or remove (#5775) (#6281)": the shared `PageContainerProps`, whose single key is `children`, for `page:section` / `page:footer` / `page:sidebar`, which were `EmptyProps` | 1 / 1 | | #6331 | objectui `7a197e7c5` | this repository's "SchemaForm reads the canonical `visibleWhen`, reviving every metadata-form predicate (objectstack#6331)" | 1 / 1 | | #6483 | objectstack `ee58392e1` | "ADR-0005 白名单强制 … (#6483)"; its diff carries the sentence the comment quotes, "Runtime-created sets … ride `allowRuntimeCreate` (still `true`) and keep working" | 1 / 1 | | #6515 (PR) | objectstack `2fdb36eb9`, its squash | "SpecifierSchema gains a closed `valueDomain` enum": "`bcp47_locale` is deliberately not in the vocabulary", because `localization.locale`'s options ARE the shipped catalogs | 1 / 1 | | #9933 | objectstack `d5552ca13` | "admit columnState as an explicitly runtime-only view-overlay key" (subject ending "(#9996)"; "(#9933)" is on the message's first body line), on the overlay faces including `viewItemWireFields` | 3 / 3 | | #9934 | objectstack `79c46da90` | "producer-side user-facing marking for hook refusal messages — userMessage channel (#9934)": `ApiErrorSchema.userMessage`, the contract half of the objectui#5210 split | 10 / 9 | | #10354 (PR) | objectstack `9e04c3e35`, its squash | "let the publish door state the package it is promoting"; its changeset and code comment carry the key-presence / `no_draft` warning `ResourceEditPage.tsx` points at | 4 / 3 | | #10485 | objectstack `35ad101bc` | "retire the `themes` carrier key and ThemeSchema (#10485, ADR-0049) (#10695)": "Ruled B (退役授权面, 2026-08-21)", "delete ui/theme.zod.ts whole" | 15 / 13 | | #10695 (PR) | the same `35ad101bc`, its squash | as above; the card / PR pair collapses | 6 / 6 | | #11330 | objectstack `a9ee98992` | "manifest.runtime trust-tier text states publish-gate-only enforcement truthfully", the trust-tier half (**Special cases** 2) | 1 / 1 | | #11507 | objectstack `88b9d749a` | "declare sys_activity.type as an open, author-extensible vocabulary": "Maintainer ruling 2026-08-24, direction 4" | 13 / 9 | | #11513 | objectstack `e170b0ae5` | "lock package-declared permission sets at the save door; clone to customize", quoting the 2026-08-24 ruling 「同意 第一步(创业阶段,Salesforce 式)」 | 3 / 3 | | #11658 | objectstack `1a6a19c31` | "open RecordActivityProps.types to author-contributed activity kinds"; its message names #11658 as the card it settles, and it executes the 2026-08-24 ruling | 1 / 1 | | #11703 | objectstack `5cb62d88b` | "make clone_permission_set carry all five copied facets"; its message names #11703 as the card it settles: the silent-grant-loss shape | 1 / 1 | | #11753 | "the 2026-08-25 ruling whose spec half is objectstack `0e4e51b0a`" | `ActionParamSchema.carryOver`, whose changeset reads "(#11753 ruling, spec half; #11992)" and "The maintainer's 2026-08-25 ruling on #11753" | 2 / 2 | | #11846 | objectstack `0c2334f6c`; dropped beside PR objectstack#12718 | "retire preview mode — the RuntimeMode 'preview' value and the whole PreviewModeConfig block (#12718)" | 3 / 3 | | #12009 | dropped beside objectstack `89448a52b` | the card of the `AUTH_SSO_PROVIDER_SCHEMA` removal, whose landing the line already cites (**Special cases** 3) | 1 / 1 | | #12868 | dropped beside objectstack `c459da6bc` | the line already cites the commit that executed the ruling; objectstack's own `f415bcf18` anchors #12868 to the same `c459da6bc` | 1 / 1 | | #13117 (PR) | objectstack `225e7690f`, its squash | "Readiness read for the Phase-2 members … global:search and global:notifications both have shipped platform data sources, so per the ruling both STAY declared" | 1 / 1 | | #13670 | "maintainer ruling 2026-08-31, option 2, recorded in objectstack `8c6a7fc0b`" | "The #13670 ruling settled the question: text's intended evaluation channel is `content` alone" | 1 / 1 | | #16126 | dropped beside PR objectstack#16920 | PR objectstack#16920 (200) names #16126 in its body as the card it settles; merged 2026-09-08 as `859ded3ec` | 2 / 2 | | #17147 | objectstack `aaacf1d5c` | "the install-time granted permission set is REGISTERED at load and refuses nothing — say so, and pin the measurement (#17147)", the measurement on `9bd4344e4` | 2 / 2 | | #17762 | objectstack `4342c9923` | "guard three data lookups against Object.prototype fall-through"; its message names #17762 as a card it settles, `classifyFilterToken` among the three lookups | 1 / 1 | | #17987 | objectstack `e233db9db` | "declare element-level `navigation` on object-kanban / object-calendar …"; its message names #17987 as the card it settles, and its Downstream note: objectui#8652 waits on it, unlock criterion a released, installable `@objectstack/spec` (**Special cases** 1) | 2 / 2 | | #18012 | objectstack `176b03582` | "`$between` requires two non-blank endpoints (#18012)": "Ruling executed: decision batch #146 item 5, **letter A**" | 3 / 3 | The 28 `#3391` lines, all now `objectstack#3391`: `ObjectDataPage.tsx` (3) and `ObjectView.tsx` (2) in app-shell; `managedBy.ts` (5); `MePermissionsProvider.tsx` (2), `PermissionContext.ts`, `PermissionProvider.tsx`; `fieldWriteGate.ts`; `ImportWizard.tsx` (6), `ObjectGrid.tsx` (4); `ListView.tsx` (3). Each was read: every one names the server's effective API operation set, `/me/permissions` `apiOperations`, or the 405 import refusal. ## Special cases (the judgement calls) 1. **#17987, two sentences.** - `ObjectTree.tsx`: "blocked on objectstack#17987, whose unlock criterion is a released `@objectstack/spec` carrying the declaration being installable here" becomes "blocked on objectstack `e233db9db`, whose unlock criterion …". That commit's Downstream note states the same criterion. - `ObjectCalendar.tsx`: "that card is `pm:blocked` on objectstack#17987" becomes "that card waits on objectstack `e233db9db`". The label word is not kept, because objectui#8652's label reads `pm:on-hold` today (measured); "waits on" is the phrase `e233db9db`'s own note uses for that card. 2. **#11330.** "it is objectstack#11330's half of the same panel" becomes "it is the trust-tier half of the same panel, which objectstack `a9ee98992` settled separately". `aaacf1d5c`'s message calls #11330 "the sibling half of this very sentence", ruled the same way on 2026-08-30, and `a9ee98992` (2026-08-30) is that half's landing. 3. **#12009 collapses into the sha beside it.** objectui#6910's body and ruling comment `5534414562` name "objectstack#12009 / PR #13413" together as the one `AUTH_SSO_PROVIDER_SCHEMA` precedent, a card and its pull request. Batch 6 replaced PR #13413 with its squash `89448a52b`, so the card goes the way of batch 3's #5401 / #5505 pair. 4. **#11753, two sites.** The card carried the ruling, and `0e4e51b0a` is its spec half. Both sites keep "ruling" as the antecedent that `ActionParamDialog.tsx`'s next paragraph ("The ruling's point …") reads. 5. **#10354 in `ResourceEditPage.tsx`.** "since objectstack#10354 `doPublish` states" gains a comma, "since objectstack `9e04c3e35`, `doPublish` states", so two adjacent code spans do not read as one. 6. **#11507 in the 8137 changeset.** "objectstack#11658 executing the maintainer's 2026-08-24 ruling on objectstack#11507" becomes "objectstack `1a6a19c31` executing the maintainer's 2026-08-24 ruling": the executing commit is named, and the ruling is cited by its date. 7. **Line breaks moved** where the stand-in is longer or shorter: `ActionRunner.ts` (two sites), `ActionParamDialog.tsx`, `theme.ts`, `theme.zod.ts` (two sites), `index.zod.ts` and the metadata-admin `i18n.ts` comment, where "ruling on" became "ruling of 2026-08-24,". 8. **The runtime strings.** Only the listed text moves. | file | member | before | after | |:--|:--|:--|:--| | `app-shell/src/layout/activityItemType.ts` | the `console.warn` in `warnUnmappedActivityType` | "… `sys_activity.type` is author-extensible (objectstack#11507, ruled 2026-08-24) and is not validated on write …" | "… `sys_activity.type` is author-extensible (ruled 2026-08-24) and is not validated on write …" | | `plugin-detail/src/renderers/recordActivityFeed.ts` | the `warnOnce` message in `warnUnknownActivityType` | "… `sys_activity.type` is author-extensible (objectstack#11507, ruled 2026-08-24) and is not validated on write …" | "… `sys_activity.type` is author-extensible (ruled 2026-08-24) and is not validated on write …" | No test, doc or changeset quotes either message with the pointer: the census reads 0 in `.changeset/`, and the anchor sweep finds no test literal that drops. 9. **`#3391/#3546`.** On the two lines that pair them (`managedBy.ts`, `ObjectGrid.tsx`), both halves are qualified, as batch 6 qualified both halves of "#13337/#13086". The other bare `#3546` lines are not in this batch's lists and are left (**Acceptance notes** 2). ## The literal-anchor sweep (both test-pin classes, ruling `5861900779`) - **Instrument.** Every string, template and regex literal in all 4073 tracked test and script files (106544 distinct literals), read with the TypeScript scanner. - **Candidate filter.** A literal is a candidate if it matches the diff's removed lines with two lines of context, raw or comment-flattened: 1983. - **Test.** Does its occurrence count DROP between `3b469c8ea` and `c292a6400` in any of the 74 changed files, raw or comment-flattened? 136 do. - **Every one is generic:** digits, punctuation, single words ("object", "blocked", "locked"), character classes, and two regexes that read no changed file: `/objectui#\d+|objectstack#\d+/` in `registry-inputs-spec-parity`, which asserts over its own ledger's reasons, and the older spelling of the three submitRedirect tests' ruling matcher, quoted in their own doc comments (the live `CITES_ITS_RULING` asserts over their own refusal text). None is a changed phrase, a dead number or a changed warning. ## Held **By the serial rule: nothing.** Open PRs were mapped at branch time (9 open) and again after the push, before this PR opened (11 open). The second mapping came after the push, not before it; the same three files were shared both times. Three open PRs share a file with this PR: - _Both PRs below have merged since this PR opened (objectui#10945 as `06a96e948`, objectui#10908 as `b45d463a9`). The trial merge with today's `main` is clean, and both censuses read 0 on it (contract review `5870922323`), so nothing is owed. The two rows are kept as the record at the time._ - **objectui#10945, `RecordDetailView.tsx`.** The blob at its merge-base equals the branch point's. Its hunks are the imports and one block far below; this PR's one changed line in that file is far from both. - **objectui#10908, `types/src/zod/index.zod.ts`.** Its one insertion is in the export list, far below this PR's two changed comment lines. - **objectui#10278, `plugin-grid/src/ObjectGrid.tsx`.** The file drifted between its merge-base and the branch point, so this PR's four changed lines were mapped onto its merge-base by a line alignment: the nearest of its hunks is more than 150 lines from any of them. Trial merges with this head (`git merge-tree --write-tree`): - clean for objectui#10952, #10950, #10949, #10947, #10945, #10944, #10930, #10908 and #10777; - objectui#10278 conflicts in `ObjectGrid.tsx`, `plugin-grid/README.md` and `content/docs/plugins/plugin-grid.mdx`, and conflicts in the same three files against `main` alone; - objectui#5400 (Version Packages) regenerates and is not a hold. `.changeset/9954-read-rate-banner.md` is held by this seat's objectui#10913 dispatch (PR objectui#10949) and is untouched here. It carries none of this batch's numbers. ## Changesets - `.changeset/10803-dead-citation-sweep-seventh-batch.md`, EMPTY frontmatter. It covers the comment-only edits in 17 released packages; no published behaviour changes through them. It points at the second file for the runtime text. - `.changeset/10803-seventh-batch-runtime-strings.md`, `'@object-ui/app-shell': patch` and `'@object-ui/plugin-detail': patch`: the two warnings lose their pointer. What renders, and when and how often each warning fires, are unchanged. ## Proof of prose-only (C4), against `3b469c8ea` - **Source.** Each of the 48 touched `.ts` / `.tsx` files was parsed at `3b469c8ea` and at this head with TypeScript 6.0.3's `createSourceFile`, and re-printed by `createPrinter({ removeComments: true })`. - 46 of 48 prints are identical. - `activityItemType.ts` and `recordActivityFeed.ts` are equal once the one listed substitution each (**Special cases** 8) is applied to the base print, each matched once. - 0 parse diagnostics. - Lit controls on the same instrument: editing a string literal moves the print; re-spacing a comment does not. - **Changesets.** The frontmatter block of every one of the 24 edited changesets is byte-identical at `3b469c8ea` and this head (24 of 24, md5). The overwrite gate below agrees. - **Scope of the diff:** 74 files, +157 / −115: 24 edited and 2 new changesets, and 48 non-test source files in 17 released packages. No test file. ## Gates, on this head `c292a6400` Each line is the gate's own verdict and exit code, captured by redirect-then-`$?`. - `node scripts/check-changeset-presence.mjs`, exit 0: "48 source file(s) of 17 released package(s) changed, and this change declares 2 changeset(s): .changeset/10803-dead-citation-sweep-seventh-batch.md, .changeset/10803-seventh-batch-runtime-strings.md." - `pnpm changeset:check`, exit 0: "All workspace packages are in the changeset fixed group." / "No changeset declares a `major` bump." - `node scripts/check-changeset-overwrite.mjs` (report-only), exit 0: "2 changeset(s) added, 24 modified, 0 deleted". `declared at base` equals `declares now` for each of the 24. - `pnpm check:changeset-claims` (report-only), exit 0: - "Every one of those 1 address(es) either names the tree it was read from, or points at a line this change does not move"; - "Every package declared across those 22 body(ies) is either not negated …"; - the standing notice "87 pending changeset(s) describe a file this change touches". Read against the diff: a pending changeset quoting a replaced pointer would itself carry a dead number and sit in the census, which reads 0. - `pnpm check:control-bytes`, exit 0: "check-control-bytes: OK (scanned 9229 tracked text file(s); skipped 85 binary)." A `grep -P` control-byte self-scan of the 74 files finds none. - `pnpm check:new-line-citations`, exit 0: "VERDICT new-cross-file-line-citations: 0 new citation(s), enforcement report-only -> exit 0". - `pnpm check:pending-changeset-literals`, exit 0: "No test source names a pending changeset." - Also run over the touched comments: - `pnpm check:spec-symbols`, exit 0: "spec member citations: 1421 sources + 184 documentation pages; nothing cites a key its spec symbol does not declare."; - `pnpm check:installed-pin-claims`, exit 0 ("OK"); - `pnpm check:comment-mask-corpus`, exit 0 (1 disagreeing file, within the ceiling objectui#7882 holds open); - `node scripts/check-hand-rolled-comment-mask.mjs`, exit 0 ("OK every carrier is a DEBT entry, and every DEBT entry still carries one."); - `pnpm check:handler-key-reads`, exit 0 ("every judged read is a declared member of it"). - The governed-surface predicate over the 74 paths, exit 0: "NOT GOVERNED — 74 path(s) checked against 5 governed surface(s); none matched." Lit control `AGENTS.md`: exit 3. **Tests and type-check**, through the shared verify lock, on `c292a6400`. Each is `VERDICT command-exit 0`. - `scripts/__tests__/`, the whole directory, whose whole-tree scanners read the touched files and changesets: `Test Files 177 passed | 2 skipped (179)`, `Tests 5332 passed | 2 skipped (5334)`. The two skipped files are the network-escape fixtures that run only as a child. - `packages/types/`, `core/`, `react/`, `i18n/`, `providers/`, `permissions/` and `data-objectstack/`, whole packages, in one run: `Test Files 704 passed (704)`, `Tests 13170 passed | 13 skipped (13183)`. - The eight touched plugin packages (calendar, designer, detail, form, grid, kanban, list, tree): `Test Files 787 passed | 1 skipped (788)`, `Tests 7521 passed | 27 skipped (7548)`. - `packages/components/`: `Test Files 324 passed | 1 skipped (325)`, `Tests 3148 passed | 24 skipped (3172)`. - `packages/app-shell/`: `Test Files 854 passed | 1 skipped (855)`, `Tests 8789 passed | 9 skipped (8798)`. - Type-check: `turbo run build` of the 28-package dependency closure (`Tasks: 28 successful, 28 total`), then `pnpm --workspace-concurrency=2` with the 17 package filters `run type-check`: 17 script echoes, 17 `Done`. A first attempt before the build exited 2 on an unbuilt dependency (`Cannot find module '@object-ui/types'`) and measured nothing. - No red leg: the sweep found no anchor to move, so there is no pin whose old copy should fail. CI on `c292a6400`: 43 check-runs, 40 success, 3 skipped, 0 failed; `Spec Main Shape Gate` success. ## Acceptance notes 1. **Dead objectstack numbers written bare: 10 more lines in the same two classes.** A bare number resolves to this repository, where each of these is a live, unrelated card, so no `objectstack#` census sees them. - **Measurement.** The bare-number instrument of PRs objectui#10875 / #10892 / #10914 reads 965 distinct numbers at this head. The 916 between 100 and 25000 were each read once as objectstack issues: 877 answer 200 and 39 answer 404. Reading the sentences of those 39, three mean an objectstack card or pull request (below); the other 36 cite objectui cards or objectui pull requests. - **#9934**, 7 lines in 7 files: `.changeset/7980-agent-key-envelope-read.md`, and in app-shell `index.ts`, `apiErrorEnvelope.ts` (2), `PackageFormDialog.tsx`, `StudioDesignSurface.tsx` and `packages-io.ts`. All mean the `userMessage` channel, objectstack `79c46da90`. - **"PR #6281"**, 2 lines in `containers.tsx`, beside objectstack#5775. The landing is objectstack `85ec26d28`. - **"objectstack PR #8452"**, 1 line in `useRecordCrudVerdicts.ts`. The landing is objectstack `27358d517` ("add batch recordIds to security/explain (#8326) (#8452)"). - None of them sits in a sentence this PR edits, so they are outside this batch's lists and left. Carrier: this card, triage item 3. 2. **The rest of the bare `#3546` population.** Five more comment lines write objectstack#3546 as a bare `#3546` (`RecordDetailView.tsx` 2, `RelatedRecordActionsBridge.tsx`, `record-details.tsx`, `fieldWriteGate.ts`), and one writes it as `objectui#3546` (`plugin-detail`'s `index.tsx`). Each names the server's effective API operation set on a detail or form surface. It is live-but-wrong, not a 404, like the `#3391` class this batch closed. Carrier: none. 3. **A stale label in a comment.** The `ObjectCalendar.tsx` sentence said objectui#8652 is `pm:blocked`; that card reads `pm:on-hold` today. **Special cases** 1 says how the repaired sentence avoids the label. 4. **Filenames are not citations.** `.changeset/17147-plugin-disclosure-not-enforced.md` carries one of the 30 numbers in its name; it stays, as in PRs objectui#10707, #10797, #10854, #10869, #10875, #10892 and #10914. --- _Generated by [Claude Code](https://claude.ai/code/session_01DuWo5bdP9SdVebamn99GGk)_ _Tests block completed by the `domain:ui` seat #1 from the dev report `5870507620` (the suites that finished after this PR opened), and three figures corrected after contract review `5870922323` (the #9933 and #6515 quotes, and the Held rows); no code claim moved._ Co-authored-by: Claude <noreply@anthropic.com>
1 parent 40c076f commit 285e36b

74 files changed

Lines changed: 157 additions & 115 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.changeset/10061-filter-builder-incomplete-range.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
fix(components): a half-typed `between` range in the filter builder shows itself as
66
incomplete instead of being dropped with no signal (objectui#10061)
77

8-
Ruling batch #146 item 5 letter A (objectstack#18012) declares that while one bound of a
8+
Ruling batch #146 item 5 letter A (objectstack `176b03582`) declares that while one bound of a
99
`between` pair is blank the condition is incomplete — **not emitted, and shown as
1010
incomplete in the UI**. The first half has been true since objectui#5025: every write
1111
path folds the row through the builder's own arity-aware `isFilterValueComplete`, so a

‎.changeset/10062-dataset-filter-between-arm.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
fix(app-shell): the Studio dataset-filter inspector stores a `between` range as the
66
spec's `$between`, with both bounds required (objectui#10062)
77

8-
Executes ruling batch #146 item 5 letter A (objectstack#18012): the `between` arm of the
8+
Executes ruling batch #146 item 5 letter A (objectstack `176b03582`): the `between` arm of the
99
dataset-filter bridge maps once a both-bounds completeness rule exists, and one does. Until
1010
now a `Between` row in a dataset's or a measure's filter was dropped on every commit —
1111
inertly since objectui#9372, but dropped — so a date range could be drawn in the inspector
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
---
2+
---
3+
4+
Comment-only in `@object-ui/app-shell`, `@object-ui/components`, `@object-ui/core`,
5+
`@object-ui/data-objectstack`, `@object-ui/i18n`, `@object-ui/permissions`,
6+
`@object-ui/plugin-calendar`, `@object-ui/plugin-designer`, `@object-ui/plugin-detail`,
7+
`@object-ui/plugin-form`, `@object-ui/plugin-grid`, `@object-ui/plugin-kanban`,
8+
`@object-ui/plugin-list`, `@object-ui/plugin-tree`, `@object-ui/providers`,
9+
`@object-ui/react` and `@object-ui/types` (two console warnings in `@object-ui/app-shell`
10+
and `@object-ui/plugin-detail` are runtime text, declared separately below): docblocks and
11+
code comments that cited an `objectstack` issue or pull request which answers 404 now cite
12+
the commit in that repository that landed the change, written as objectstack and a
13+
9-character sha (objectui#10803, the seventh batch). Where the sentence already names that
14+
change's live pull request or commit, or dates the ruling it points at, the dead number is
15+
dropped instead, and one sentence cites this repository's own landing commit, because the
16+
fix it names landed here. Comments that named the apiMethods whitelist card as a bare
17+
number now read `objectstack#3391`, and the two that paired it with a second bare number
18+
read `objectstack#3546` for it: a bare number resolves to this repository, where both
19+
numbers are unrelated cards. None of these comment edits moves a claim or changes a code or
20+
type token. No published behaviour changes through them, so this declares no release.
21+
22+
The same repair in the pending changesets that carried these citations is prose-only, and
23+
their frontmatter is byte-identical.
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
---
2+
'@object-ui/app-shell': patch
3+
'@object-ui/plugin-detail': patch
4+
---
5+
6+
fix(app-shell, plugin-detail): the unmapped activity type warnings no longer point at an objectstack issue that answers 404
7+
8+
`@object-ui/app-shell` warns on the console, once per value, when a `sys_activity` row's
9+
`type` maps to no activity item type, and `@object-ui/plugin-detail`'s `[record:activity]`
10+
block does the same when it maps to no feed item type. Both messages said `sys_activity.type` is
11+
author-extensible with a pointer to an objectstack issue that answers 404 beside the
12+
ruling's date. A reader of a console warning has no repository to resolve a commit
13+
against, so the pointer is dropped rather than replaced: both now read "author-extensible
14+
(ruled 2026-08-24)" (objectui#10803).
15+
16+
Nothing else in either message moves, and what renders, and when and how often each
17+
warning fires, are unchanged.

‎.changeset/17147-plugin-disclosure-not-enforced.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55

66
The marketplace consent panel no longer promises confinement the runtime does not provide.
77

8-
`PluginDisclosure` introduced a code-bearing package's structured permission set with "On install, this package will be granted:". A list of grants on a security panel is read as a confinement promise — the complement assumed denied — and on this platform it is not. The consented set is persisted (`sys_package_installation.granted_permissions`), re-confirmed on a widening upgrade, and registered on the runtime's `PluginPermissionEnforcer` at load; it is queried by nothing, because `SecurePluginContext` has zero production construction sites and the fs/network gates have no caller at all (measured on objectstack `9bd4344e4`; objectstack#17147).
8+
`PluginDisclosure` introduced a code-bearing package's structured permission set with "On install, this package will be granted:". A list of grants on a security panel is read as a confinement promise — the complement assumed denied — and on this platform it is not. The consented set is persisted (`sys_package_installation.granted_permissions`), re-confirmed on a widening upgrade, and registered on the runtime's `PluginPermissionEnforcer` at load; it is queried by nothing, because `SecurePluginContext` has zero production construction sites and the fs/network gates have no caller at all (measured on objectstack `9bd4344e4`; recorded upstream in objectstack `aaacf1d5c`).
99

1010
`marketplace.disclosure.grantsIntro` now states a REQUEST — "This package requests:" — and a new `marketplace.disclosure.notEnforced` line beside the list says the set is recorded at install, re-confirmed if a later version asks for more, and not yet a runtime restriction. Both land in all ten locale packs; the `ja` value stays predicate-final so that pack's halfwidth-colon rule still decides it.
1111

12-
The trust-tier badge is deliberately untouched: it is objectstack#11330's half of the same panel.
12+
The trust-tier badge is deliberately untouched: it is the trust-tier half of the same panel, which objectstack `a9ee98992` settled separately.

‎.changeset/3719-settings-valuedomain-combobox.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ exists.
2424
**Undeclared → the closed dropdown is untouched**, which is half the change rather than a
2525
caveat. Those `options` are still exhaustive under objectstack#5131 (the sms/mail provider
2626
selects), and `localization.locale` had its domain declaration deliberately **rejected** in
27-
objectstack#6515 because its options *are* the shipped catalogs. Widening those to free
27+
objectstack `2fdb36eb9` because its options *are* the shipped catalogs. Widening those to free
2828
input would be a regression wearing this fix's clothes, so the two branches are pinned
2929
against each other from the specifier data rather than from a list of key names — a key
3030
that gains a domain server-side joins the right side of the pin with no edit here.

‎.changeset/5896-feeditem-single-constructor.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ table (objectui#5878) and then built the `FeedItem` itself, ending in
1212
situations: a type the table maps to `undefined` **on purpose** (`commented` /
1313
`mentioned` / `login` / `logout`), and a type the table has never heard of. The
1414
second is an **author-extended** value — `sys_activity.type` is
15-
author-extensible (objectstack#11507 direction 4, ruled 2026-08-24), every
15+
author-extensible (objectstack `88b9d749a`, direction 4, ruled 2026-08-24), every
1616
column on that table is `readonly` so objectql never validates a write, and
1717
ADR-0052 §5b.2 forwards an author's `activityMilestones[].type` into it
1818
verbatim. So an activity that happened, was written and is queryable had no row

‎.changeset/5987-permset-clone-to-customize.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ The permission matrix already locks a set a code package ships (the artifact
88
tier: `isArtifactBackedLayer`, the client mirror of the server's
99
`isArtifactBacked`), and its guidance offered only the pre-ruling remedies —
1010
edit the source artifact and redeploy, a new runtime set, the
11-
`OS_METADATA_WRITABLE` hatch. The ruled path (objectstack#11513, 「同意 第一步
11+
`OS_METADATA_WRITABLE` hatch. The ruled path (objectstack `e170b0ae5`, 「同意 第一步
1212
(创业阶段,Salesforce 式)」: lock the base, clone to customize) was never on the
1313
screen, and the metadata-door refusal a Studio save receives names only the
1414
pre-ruling remedies; the data door's refusal is the one that names the Clone

‎.changeset/6654-retire-preview-mode-consumption.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ Retire the discovery-wire preview mode — the console no longer turns
77
authentication off because a server said `mode: 'preview'` (objectui#6654).
88

99
`@objectstack/spec` retired the `RuntimeMode` value `'preview'` and the whole
10-
`PreviewModeConfig` block (objectstack#11846). This console still read that
10+
`PreviewModeConfig` block (objectstack `0c2334f6c`). This console still read that
1111
surface back off the runtime discovery payload, which is a different layer from
1212
the retired compile-time type — so the consumption could not simply be assumed
1313
dead, and its removal was ruled deliberately (2026-08-29).

‎.changeset/6730-shared-activity-type-bucket.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ a `scheduled` meeting, a `login`, a nightly `system` rollup and an author's
2121
its own icon, label and notification toggle. Following
2222
`UNMAPPED_ACTIVITY_FEED_TYPE`'s precedent, an unrecognised value renders
2323
through it and is named once on `console.warn` rather than being dropped —
24-
`sys_activity.type` is author-extensible (objectstack#11507 direction 4), so
24+
`sys_activity.type` is author-extensible (objectstack `88b9d749a`, direction 4), so
2525
an unmapped value is real activity nobody has ruled on, not a mistake.
2626
- The built-ins that had no honest presentation among the four existing kinds —
2727
`system`, `completed`, `scheduled`, `login`, `logout` — now land in that

0 commit comments

Comments
 (0)