Skip to content

Commit 847e577

Browse files
docs(qa): re-point the cli / platform-core / records-forms bad-citation anchors (#18104 cut 3) (#19232)
Part of #18104 — cut 3 of the `SHARED_RESOLVER_RESIDUAL` drain. Five area files and the eight `accept-set` rows remain, so this PR closes nothing. ## What moved Fifteen `bad-citation` rows leave the ledger **by repair**: each anchor is re-pointed at a symbol `scripts/symbol-anchors.mjs` genuinely resolves, its row is deleted from `SHARED_RESOLVER_RESIDUAL` in the same edit, and `SHARED_RESOLVER_RESIDUAL_CEILING` comes down with it (**33 → 18**, rows == ceiling). ⛔ No floor was touched, ⛔ the shared resolver was not widened, ⛔ no `#symbol` was dropped to bare prose. | file | old anchor | re-pointed to | why the old one did not resolve | |---|---|---|---| | `areas/cli.json` | `commands/compile.ts#emitJson` | `#Compile` | imported and called, never declared here | | `areas/cli.json` | `doctor-deprecation-hint-commands.test.ts#Doctor` | `#unregisteredHintsIn` | imported and driven; the sweep itself is the local function | | `areas/cli.json` | `utils/format.exit-code.test.ts#emitJson` | `#asExitCode` | imported and called; `asExitCode` is the binding that carries the #4873 rejection | | `areas/cli.json` | `templates/blank/package.json#objectstack` | `#scripts.dev` | `objectstack` is a VALUE in that manifest, never a key | | `areas/cli.json` | `verify/src/verify.ts#VALIDATION_FAILED` | `#ObjectVerifyResult` | survives only inside a regex literal; the six-member union is on the interface | | `areas/platform-core.json` | `engine.ts#objectExtensions` | `#registerApp` | read off the manifest — a member access; the loop lives in `registerApp` | | `areas/platform-core.json` | `auth-plugin.ts#Providers` | `#nav_sso_providers` | a substring of longer tokens and label strings | | `areas/platform-core.json` | `package-first-authoring.dogfood.test.ts#writable_package_required` | `#WRITABLE_PACKAGE_REQUIRED` | lower-case spelling is only in a test title and comments; the test pins the ADR-0112 code | | `areas/platform-core.json` | `runtime/src/domains/notifications.ts#markRead` | `#handleNotificationRequest` | a provider method called off the inbox capability — a member access | | `areas/platform-core.json` | `runtime/src/route-ledger.ts#commitId` | `#ROUTE_LEDGER` | a route PATH PARAMETER inside a route string | | `areas/records-forms.json` | `object.zod.ts#query` | `#sharingModel` | `query` is not a key this schema declares | | `areas/records-forms.json` | `seed/index.ts#Specimen` | `#fieldZoo` | only inside the record names, a substring of a longer string | | `areas/records-forms.json` | `validate-action-locations.ts#action` | `#ACTION_NO_PLACEMENT` | a local binding inside the walk, not a declared surface | | `areas/records-forms.json` | `object.zod.ts#FEEDS_DISABLED` | `#enable.feeds` | named only inside a `.describe()` string and a comment | | `areas/records-forms.json` | `rest-route-ledger.ts#jobId` | `#REST_ROUTE_LEDGER` | a route PATH PARAMETER inside a route string | ⚠️ `areas/records-forms.json` still carries its **2 `accept-set` rows** and that is correct, not half-done: they are #18101's letter, and reaching them would mean widening the shared core. That file mixes both verdicts, so this slice judged it **row by row by verdict, never by file**. Every re-pointed value carries the `re-pointed #18104` trace cut 2 established, so the next cut can see what this one moved. ## Verification (at `76e8df900`) `node scripts/check-platform-checklist.mjs` — exit 0: ``` before symbol anchors: 600/633 resolved … 33 on the named #16898 residual, 17 file floors held after symbol anchors: 615/633 resolved … 18 on the named #16898 residual, 17 file floors held ``` `resolved` rose by exactly 15, `residual` fell by exactly 15, the 633 census total and the 310 cited sources are unchanged, and **17 file floors held** on both sides — a repair moves an anchor from `residual` to `resolved` and leaves the floor population where it was. `node scripts/check-platform-checklist.mjs --self-test` — exit 0, **221 assertions** (unchanged from cut 2). ### Positive control, both directions (ablation; committed first, restored byte-exact) **A — a repaired anchor is what resolves, not a row that merely left.** Reverting one repaired citation to its old anchor while its ledger row stays deleted: ``` ✗ areas/cli.json: ABSENT SYMBOL — `packages/cli/src/commands/compile.ts#emitJson` … exit 1 ``` **B — an unrelated row still reds.** Deleting one still-listed residual row (`areas/studio-authoring.json`, untouched by this slice): ``` ✗ areas/studio-authoring.json: ABSENT SYMBOL — `packages/rest/src/rest-route-ledger.ts#REST` … exit 1 ``` Both legs restored with `git checkout HEAD -- <path>`, proven by an empty `git diff HEAD` plus a `git hash-object` match against the HEAD blob, and the gate re-read 615/633 · exit 0 after each. ### Gate family Derived with `node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack` from the merge base — 31 commands; 30 run locally green (`check:pm-dispatch-gates` runs detached, its reference line records 430–450s while this container measures 535–712s). Repo-wide scans (`pnpm lint` and the 53 artifact-roster families the derivation scores silent for every card) are CI's. ### No changeset — measured, not assumed Every changed path (`docs/qa/platform-checklist/areas/*.json`, `scripts/check-platform-checklist.mjs`) is at the repo root, outside every one of the 70 published package directories, so no package's `files[]` can pack it and nothing this PR touches is published. `skip-changeset` applied. ## Acceptance notes - The `$comment` on `scripts/checklist-symbol-anchor-baseline.json` still reads «the count of anchors that RESOLVED in that family file» where an entry is now *resolved + residual*. That file is maintainer-only by its own `$authority` line; #18104's body already records the one-sentence edit it is owed. ⛔ Not touched here. - `SHARED_RESOLVER_RESIDUAL` now stands at 10 `bad-citation` + 8 `accept-set`. The gate's own self-test asserts `accept-set` count is strictly less than `bad-citation` count, so the next cut that drains more than one `bad-citation` row has to reckon with that assertion — noted for the next slice's dispatch, not a defect today. --- _Generated by [Claude Code](https://claude.ai/code/session_017ef78bLdybu3AffehKkhfk)_ Co-authored-by: Claude <noreply@anthropic.com>
1 parent e233db9 commit 847e577

4 files changed

Lines changed: 29 additions & 32 deletions

File tree

‎docs/qa/platform-checklist/areas/cli.json‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -170,9 +170,9 @@
170170
],
171171
"traps": ["stale-dist"],
172172
"source": [
173-
"packages/cli/src/commands/compile.ts#emitJson (the full gate pipeline: Zod parse, #4409 author-time rule registry, #3786 unknown-key advisory, --json shapes, #3782 conversion-notice parity; the human-path catches ending in this.error() — oclif's ExitError 2 — while the --json branch answers through emitJson + this.exit(1)) + build.ts (alias)",
173+
"packages/cli/src/commands/compile.ts#Compile (the full gate pipeline: Zod parse, #4409 author-time rule registry, #3786 unknown-key advisory, --json shapes, #3782 conversion-notice parity; the human-path catches ending in this.error() — oclif's ExitError 2 — while the --json branch answers through emitJson + this.exit(1) — re-pointed #18104: emitJson is IMPORTED here from format.ts and only ever called; the pipeline this item means is what the Compile command class this file declares runs) + build.ts (alias)",
174174
"packages/cli/src/utils/format.ts#CliExitCode (CliExitCode = 0 | 1 — the narrowed emitJson/emitText exit slot, NOT a bound on oclif's own error exit)",
175-
"packages/cli/src/utils/format.exit-code.test.ts#emitJson (the #4873 pin: the defect was an argument in the wrong slot — timer.elapsed() landing in emitJson's positional exit code — and a number can no longer reach it at all)",
175+
"packages/cli/src/utils/format.exit-code.test.ts#asExitCode (the #4873 pin: the defect was an argument in the wrong slot — timer.elapsed() landing in emitJson's positional exit code — and a number can no longer reach it at all — re-pointed #18104: emitJson is IMPORTED into this test and only called; asExitCode is the binding that carries the rejection, a duration typed into that positional slot under a @ts-expect-error)",
176176
"cli.flag-command-error-ux (the sibling item that owns oclif's exit 2 — cross-referenced so the two never re-collide)",
177177
"api-backend.formula-gates, api-backend.enforce-or-remove-authoring-gates (gate content — cross-referenced, not duplicated)"
178178
],
@@ -352,7 +352,7 @@
352352
"automated": { "kind": "unit", "ref": "packages/cli/src/commands/verify-tenancy-posture.test.ts" },
353353
"source": [
354354
"packages/cli/src/commands/verify.ts#hardFailures (hardFailures sum, exit contract, resolveVerifyMultiTenant / #5262 / ADR-0105 D1, separate RLS stack rationale)",
355-
"packages/verify/src/verify.ts#VALIDATION_FAILED (the six-member status union; 400-VALIDATION_FAILED→needs-fixture vs 5xx→create-failed classification)",
355+
"packages/verify/src/verify.ts#ObjectVerifyResult (the six-member status union; 400-VALIDATION_FAILED→needs-fixture vs 5xx→create-failed classification — re-pointed #18104: VALIDATION_FAILED survives in this file only inside a regex literal; the union this item means is declared on ObjectVerifyResult and the classification that reads it is isValidation)",
356356
"packages/verify/src/rls.ts (#1994 class: you can't write what you can't read)"
357357
],
358358
"history": [
@@ -841,7 +841,7 @@
841841
"traps": ["hydration-race", "first-boot-cold-start"],
842842
"source": [
843843
"content/docs/getting-started/quick-start.mdx ('How you verify' — `npx os validate` and `npx os dev --ui`, then open http://localhost:3000/_console/)",
844-
"packages/create-objectstack/src/templates/blank/package.json#objectstack (scripts.dev = `objectstack dev`, with no --ui — correct, see the chain below)",
844+
"packages/create-objectstack/src/templates/blank/package.json#scripts.dev (scripts.dev = `objectstack dev`, with no --ui — correct, see the chain below — re-pointed #18104: objectstack is a VALUE in this manifest and never a key; scripts.dev is the key pair this item reads)",
845845
"packages/cli/src/commands/serve.ts (`ui: Flags.boolean({..., default: true, allowNo: true })` — the console is default-ON here; `--no-ui` is the off switch)",
846846
"packages/cli/src/commands/dev.ts + (dev declares `ui` with NO default and forwards `...(flags.ui ? ['--ui'] : [])` — it only ever ADDS the flag, never forwards --no-ui, so an unflagged dev inherits serve's default-on)",
847847
"content/docs/deployment/cli.mdx ('--ui | Force Console UI on (already on by default in dev)') and ('--ui / --no-ui — Toggle Console UI at /_console/ (default on)')",
@@ -1038,7 +1038,7 @@
10381038
"traps": ["absence-inference", "stale-dist"],
10391039
"source": [
10401040
"packages/cli/src/commands/doctor.ts#scanDir (flag; scan block with the scanDir = <cwd>/src, the per-hit warning row, the --verbose `→ replacement`, the #10680 reasoning comment, the two-branch hint and the clean-run success line; DEPRECATED_PATTERNS — retired-lookup pair; scanDeprecatedPatterns — absent-dir [],.ts-only walk +.test.ts filter; walkDir node_modules prune)",
1041-
"packages/cli/src/commands/doctor-deprecation-hint-commands.test.ts#Doctor (#10680's pin — the class-closing sweep that every `os …` hint doctor can PRINT resolves under src/commands/, plus six end-to-end cases over Doctor.run. Added to source at revision 3 because revision 2's knownGaps asserted this surface had no automated coverage of any kind)",
1041+
"packages/cli/src/commands/doctor-deprecation-hint-commands.test.ts#unregisteredHintsIn (#10680's pin — the class-closing sweep that every `os …` hint doctor can PRINT resolves under src/commands/, plus six end-to-end cases over Doctor.run. Added to source at revision 3 because revision 2's knownGaps asserted this surface had no automated coverage of any kind — re-pointed #18104: Doctor is IMPORTED here and only driven; unregisteredHintsIn is the sweep itself, the one asserted empty)",
10421042
"content/docs/protocol/backward-compatibility.mdx (the documented workflow, including the admission that the codemod command is not yet available)",
10431043
"packages/cli/README.md §os doctor (documents -v and --scan-deprecations)",
10441044
"packages/create-objectstack/src/templates/blank/ (the scaffold whose src/ the seeds land in)",

‎docs/qa/platform-checklist/areas/platform-core.json‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -463,7 +463,7 @@
463463
"source": [
464464
"packages/runtime/src/route-ledger.ts (PUT /meta/:type/:name, GET /meta/_drafts, GET /meta/:type/:name/published, POST /packages/:id/publish-drafts)",
465465
"packages/spec/src/kernel/metadata-plugin.zod.ts#allowOrgOverride (allowOrgOverride 403 not_overridable contract; validateOnWrite; registry flags per type)",
466-
"ADR-0070 via packages/qa/dogfood/test/package-first-authoring.dogfood.test.ts#writable_package_required (writable_package_required)",
466+
"ADR-0070 via packages/qa/dogfood/test/package-first-authoring.dogfood.test.ts#WRITABLE_PACKAGE_REQUIRED (the runtime create into a loaded code package refused, with its writable-base control beside it — re-pointed #18104: the lower-case spelling survives here only inside a test title and comments; the code this test actually pins is the SCREAMING_SNAKE one, ADR-0112)",
467467
"ADR-0033 (drafts / publish)"
468468
],
469469
"history": [
@@ -561,7 +561,7 @@
561561
"packages/platform-objects/src/apps/studio.app.ts#requiredPermissions (static nav; requiredPermissions studio.access)",
562562
"packages/platform-objects/src/apps/account.app.ts#requiresObject (no requiredPermissions; hidden from App Switcher; requiresObject/requiresService entry gates)",
563563
"packages/platform-objects/src/apps/setup-nav.contributions.ts#nav_organizations (nav_organizations requiresService org-scoping; nav_api_keys manage_platform_settings; no nav_jwks — removed in #7544)",
564-
"packages/plugins/plugin-auth/src/auth-plugin.ts#Providers (SSO Providers nav_sso_providers contributed only when isSsoWired())",
564+
"packages/plugins/plugin-auth/src/auth-plugin.ts#nav_sso_providers (SSO Providers contributed only when isSsoWired() — re-pointed #18104: the bare word Providers is carried in this file only as a substring of longer tokens and label strings; nav_sso_providers is the contributed entry id, the same anchor shape the sibling nav rows use)",
565565
"ADR-0048 (Setup/Studio/Account as one-app packages com.objectstack.{setup,studio,account}); ADR-0029 (nav contributions); ADR-0066 (sys_jwks private)"
566566
],
567567
"history": [
@@ -819,7 +819,7 @@
819819
],
820820
"traps": ["dispatcher-vs-hono-route", "stale-console-bundle"],
821821
"source": [
822-
"packages/runtime/src/route-ledger.ts#commitId (PATCH /packages/:id/enable|disable, DELETE /packages/:id, POST /packages/:id/publish|publish-drafts, GET /packages/:id/commits, POST /packages/:id/commits/:commitId/revert, POST /packages/:id/revert)",
822+
"packages/runtime/src/route-ledger.ts#ROUTE_LEDGER (PATCH /packages/:id/enable|disable, DELETE /packages/:id, POST /packages/:id/publish|publish-drafts, GET /packages/:id/commits, POST /packages/:id/commits/:commitId/revert, POST /packages/:id/revert — re-pointed #18104: commitId is a route PATH PARAMETER, carried in this file only inside a route string)",
823823
"platform-core.metadata-authoring-roundtrip (the writable probe package this reuses)",
824824
"ADR-0070 (writable vs read-only packages), ADR-0033 (drafts/publish/commits)"
825825
],
@@ -913,7 +913,7 @@
913913
"objectui packages/app-shell/src/layout/inboxGrouping.ts (groupNotifications — (topic,title) coalescing, #2765)",
914914
"objectui packages/app-shell/src/layout/AppHeader.tsx (postMarkRead → POST /api/v1/notifications/read[/all]; poll GET /notifications?view=mine)",
915915
"packages/runtime/src/route-ledger.ts (GET /notifications, POST /notifications/read, POST /notifications/read/all)",
916-
"packages/runtime/src/domains/notifications.ts#markRead (markRead upserts sys_notification_receipt; empty/mis-keyed ids → 400)",
916+
"packages/runtime/src/domains/notifications.ts#handleNotificationRequest (markRead upserts sys_notification_receipt; empty/mis-keyed ids → 400 — re-pointed #18104: markRead is a PROVIDER METHOD this file only calls off the inbox capability, a member access; the POST /notifications/read branch that validates the body and issues it is in handleNotificationRequest)",
917917
"ADR-0030 (sys_inbox_message L5 materialization + sys_notification_receipt); ADR-0103 (receipt object api-method lockdown)"
918918
],
919919
"history": [
@@ -1640,7 +1640,7 @@
16401640
"traps": ["dispatcher-vs-hono-route", "cache-staleness"],
16411641
"source": [
16421642
"examples/app-showcase/src/data/extensions/account.extension.ts#AccountExtension (AccountExtension — the shipped fixture, priority 210)",
1643-
"packages/objectql/src/registry.ts#mergeObjectDefinitions (mergeObjectDefinitions — additive fields fold, the spread) + vicinity via engine: packages/objectql/src/engine.ts#objectExtensions (the objectExtensions loop registering 'extend' contributors)",
1643+
"packages/objectql/src/registry.ts#mergeObjectDefinitions (mergeObjectDefinitions — additive fields fold, the spread) + vicinity via engine: packages/objectql/src/engine.ts#registerApp (the objectExtensions loop registering 'extend' contributors — re-pointed #18104: objectExtensions is read off the manifest here, a member access; the loop this item means runs inside registerApp, which this file declares)",
16441644
"packages/spec/src/data/object.zod.ts#ObjectExtensionSchema (ObjectExtensionSchema — what an extension may carry, the #4001 silently-dropped history, 'Fields to add/override', priority wins-on-conflict; defineObjectExtension)",
16451645
"packages/metadata-protocol/src/protocol.ts#refusal (the NOT_OVERRIDABLE refusal text and escape hatch)",
16461646
"packages/plugins/plugin-auth/src/managed-extension-fields.ts + managed-extension-fields.test.ts (the build-time collision gate — better-auth-managed objects ONLY; adopted by ADR-0126 §3 as Regime E prior art, NOT a generic gate)",

‎docs/qa/platform-checklist/areas/records-forms.json‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949
}
5050
},
5151
"expect": "2xx. `enable.feeds` is stated EXPLICITLY false — unlike files it cannot be omitted, because omission means the spec default `true` (object.zod.ts) and would give a feeds-ENABLED object that scores both probes green for the wrong reason. `sharingModel` is public_read_write ON PURPOSE: the probes must be refused by the CAPABILITY gate, not by record access, and a caller who can read and edit this parent isolates FEEDS_DISABLED from the sibling RECORD_NOT_ACCESSIBLE refusal (packages/plugins/plugin-audit/src/comment-access-hooks.ts).",
52-
"source": "`enable.feeds` is the #2707 opt-out, default true (packages/spec/src/data/object.zod.ts#Record: 'Record comments/collaboration feed. Default on; explicit false hides the feed UI and rejects any write that makes a comment target this object (403 FEEDS_DISABLED) — a new comment and an update that re-threads an existing one alike'). `sharingModel` is a TOP-LEVEL object key, enum ['private','public_read','public_read_write','controlled_by_parent'] (packages/spec/src/data/object.zod.ts#query; ADR-0090 D4). `?package=` is read as `query.package` and threaded to saveMetaItem as packageId (packages/runtime/src/domains/meta.ts)"
52+
"source": "`enable.feeds` is the #2707 opt-out, default true (packages/spec/src/data/object.zod.ts#Record: 'Record comments/collaboration feed. Default on; explicit false hides the feed UI and rejects any write that makes a comment target this object (403 FEEDS_DISABLED) — a new comment and an update that re-threads an existing one alike'). `sharingModel` is a TOP-LEVEL object key, enum ['private','public_read','public_read_write','controlled_by_parent'] (packages/spec/src/data/object.zod.ts#sharingModel; ADR-0090 D4 — re-pointed #18104: query is not a key this schema declares, and sharingModel is the key this sentence is about). `?package=` is read as `query.package` and threaded to saveMetaItem as packageId (packages/runtime/src/domains/meta.ts)"
5353
}
5454
],
5555
"teardown": "DELETE /api/v1/packages/com.objectstack.qa.feeds (client `packages.uninstall`, ledgered at rest-route-ledger.ts) — or simply discard the isolated file DB, which is the cheaper path and the one an isolated boot makes free. Any throwaway qa_nofeeds record and any sys_comment row created against it go with the package.",
@@ -349,7 +349,7 @@
349349
"source": [
350350
"packages/spec/src/data/field.zod.ts#FieldType (FieldType enum — 49 members, listed exhaustively in variants)",
351351
"examples/app-showcase/src/data/objects/field-zoo.object.ts",
352-
"examples/app-showcase/src/data/seed/index.ts#Specimen (Specimen rows; expense/invoice roll-up expectations)",
352+
"examples/app-showcase/src/data/seed/index.ts#fieldZoo (Specimen rows; expense/invoice roll-up expectations — re-pointed #18104: Specimen survives in this file only inside the record names, a substring of a longer string; the rows this item means are the ones the fieldZoo seed declares, with invoices / expenseReports carrying the roll-up expectations)",
353353
"packages/qa/dogfood/test/field-zoo.matrix.ts",
354354
"objectui: e2e/live/summary-rollup.spec.ts"
355355
],
@@ -1581,7 +1581,7 @@
15811581
"source": [
15821582
"packages/spec/src/ui/action.zod.ts#ACTION_LOCATIONS (ACTION_LOCATIONS — the canonical 6-value enum, single source of truth; `global_nav` was the 7th until #6888 retired it — no product surface rendered it)",
15831583
"examples/app-showcase/src/ui/actions/index.ts#locations (per-location fixture fleet + the record:quick_actions filter note + the two headless `locations: []` declarations)",
1584-
"packages/lint/src/validate-action-locations.ts#action (the `action-no-placement` rule — this repo's codification of the current contract: an action with no `locations` renders nowhere and is therefore inert, while `locations: []` is the deliberate headless declaration and is NOT flagged)",
1584+
"packages/lint/src/validate-action-locations.ts#ACTION_NO_PLACEMENT (the `action-no-placement` rule — re-pointed #18104: action is a LOCAL BINDING inside this file's walk, not a declared surface; ACTION_NO_PLACEMENT is the exported rule id — this repo's codification of the current contract: an action with no `locations` renders nowhere and is therefore inert, while `locations: []` is the deliberate headless declaration and is NOT flagged)",
15851585
"objectui: packages/types/src/ui-action.ts `actionRendersAt` (the single placement predicate — a membership test, so an undeclared or empty `locations` matches nothing) + packages/.../action-bar.tsx, its consumer since objectui#3142",
15861586
"cross-ref: bulk dispatch-count semantics live in records-forms.list-view-capabilities (bulk-actions variant); param dialogs in records-forms.action-param-widgets"
15871587
],
@@ -2441,7 +2441,7 @@
24412441
"objectui: packages/plugin-detail/src/{RecordChatterPanel,CommentInput,MentionAutocomplete,extractMentions}.tsx (compose + @mention)",
24422442
"objectui: packages/app-shell/src/views/RecordDetailView.tsx (mergeFeedRows union-by-id, sys_comment + sys_activity fetch/merge, mentionSuggestions), packages/plugin-detail/src/renderers/recordActivityFeed.ts (activity→feed map)",
24432443
"objectui: packages/collaboration/src/useMentionNotifications.ts (recipient-scoped bell, unreadCount)",
2444-
"framework: packages/spec/src/data/object.zod.ts#FEEDS_DISABLED (enable.feeds default true → FEEDS_DISABLED, 'a new comment and an update that re-threads an existing one alike'); PENDING-GAPS §B record-discussion-mentions",
2444+
"framework: packages/spec/src/data/object.zod.ts#enable.feeds (enable.feeds default true → FEEDS_DISABLED — re-pointed #18104: FEEDS_DISABLED is named in this file only inside a describe() string and a comment; the key this item means is enable.feeds, 'a new comment and an update that re-threads an existing one alike'); PENDING-GAPS §B record-discussion-mentions",
24452445
"framework: packages/plugins/plugin-audit/src/audit-writers.ts#enforceFeedsCapability (enforceFeedsCapability, registered on beforeInsert AND beforeUpdate per #10170), packages/plugins/plugin-audit/src/comment-access-hooks.ts#RECORD_NOT_ACCESSIBLE (RECORD_NOT_ACCESSIBLE — the sibling refusal the probes isolate against), packages/plugins/plugin-audit/src/objects/sys-comment.object.ts#thread_id (thread_id is conventionally `{object}:{record_id}`)",
24462446
"framework: packages/spec/src/data/feed.zod.ts#FeedFilterMode (FeedFilterMode, 4 members — pinned above),+ (SYS_ACTIVITY_BUILTIN_TYPES + the #11507 open-vocabulary ruling: built-ins are the floor, never the ceiling); packages/plugins/plugin-audit/src/objects/sys-activity.object.ts#apiMethods (apiMethods ['get','list'] — why the probe cannot direct-POST)",
24472447
"objectui: packages/plugin-detail/src/RecordActivityTimeline.tsx (FeedFilterMode imported from the spec), (the four filter options), (filterItems); packages/plugin-detail/src/renderers/recordActivityFeed.ts (ACTIVITY_TYPE_TO_FEED_TYPE superset map + UNMAPPED_ACTIVITY_FEED_TYPE fallback + its diagnostic; drift held by the objectui#5969 two-directional pin, recordActivityFeed.test.ts)"
@@ -3006,7 +3006,7 @@
30063006
"ref": "objectui: e2e/import-console/import-console-undo.spec.ts, e2e/import-harness/import-undo.spec.ts (both self-gate)"
30073007
},
30083008
"source": [
3009-
"framework: packages/rest/src/rest-route-ledger.ts#jobId (POST /data/:object/import/jobs; /import/jobs/:jobId/{cancel,undo,results}; GET /import/jobs[/:jobId])",
3009+
"framework: packages/rest/src/rest-route-ledger.ts#REST_ROUTE_LEDGER (POST /data/:object/import/jobs; /import/jobs/:jobId/{cancel,undo,results}; GET /import/jobs[/:jobId] — re-pointed #18104: jobId is a route PATH PARAMETER, carried in this file only inside a route string)",
30103010
"objectui: e2e/import-console/import-console-undo.spec.ts, e2e/import-harness/import-undo.spec.ts",
30113011
"PENDING-GAPS §C import-job-undo-cancel"
30123012
],

0 commit comments

Comments
 (0)