Skip to content

Commit 2c75c20

Browse files
committed
Merge remote-tracking branch 'origin/main' into claude/issue-18893-four-doors-dedup-bound-r2
2 parents d663c2a + 847e577 commit 2c75c20

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)