Skip to content

feat(core)!: retire DataScopeManager and its row-level filter types (objectui#7750) - #10467

Merged
objectstack-fleet[bot] merged 3 commits into
mainfrom
claude/issue-7750-retire-datascopemanager
Sep 25, 2026
Merged

objectstack-fleet[bot] merged 3 commits into
mainfrom
claude/issue-7750-retire-datascopemanager

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Fixes #7750
Clause-②: yes

Executes ruling 5564753628 on objectui#7750 (option C, maintainer 「同意」): DataScopeManager and its RowLevelFilter vocabulary are retired from @object-ui/core. No alias, no deprecation window. Implemented by the domain:ui seat 2 dispatch, session https://claude.ai/code/session_014mXUNuFomfj24w7s1pZzhN.

Public surface removed (@object-ui/core)

name kind
DataScopeManager class
defaultDataScopeManager const (shared instance)
RowLevelFilter type
DataScopeConfig type (read only by the class's registerScopeWithConfig; nothing else in the repo read it, so it goes with the class)

Kept: ViewDataProvider and every element data-source export in data-scope/, and the export * from './data-scope/index.js' line in the package barrel. DataScope / DataContext in @object-ui/types are not touched (not ruled).

Files

  • deleted: packages/core/src/data-scope/DataScopeManager.ts and its two tests __tests__/DataScopeManager.test.ts, __tests__/DataScopeManager.hardening.test.ts
  • packages/core/src/data-scope/index.ts: the four-name export block removed; the module docblock now describes what the module still holds and says row-level security is not evaluated here
  • packages/core/README.md: the "Data Scope" section becomes "Expressions" (evaluateExpression alone); the matching Features bullet follows
  • content/docs/guide/architecture-overview.md: the data-scope/ line in the directory map names what is left
  • scripts/check-doc-example-types.mjs: the ledger row for the deleted class's @example is removed
  • packages/permissions/src/evaluator.ts: the two docblock pointers to the deleted file are rewritten; they keep their point about the guard and cite only issues
  • packages/permissions/src/__tests__/evaluator.prototype-guard-8044.test.ts: outside the claim's file surface. Its header docblock cited the deleted file by path and the class by name, the same dangling-pointer class as the two evaluator.ts pointers. Bounded in-place repair: same defect class, mechanical, no open PR touches the file (all 12 open PR file lists read), same gate family (the permissions suite already runs for evaluator.ts). Comment-only.
  • .changeset/7750-retire-datascopemanager.md: '@object-ui/core': minor with a BREAKING body naming each removed export, "no replacement", and the migration (row-level security is the spec's RowLevelSecurityPolicySchema using CEL predicate, lowered to an ObjectQL filter, fail-closed). minor, not major, per this repo's AGENTS.md version section, enforced by check-changeset-no-major; precedent PR objectui#10453. One paragraph reconciles the three pending entries that describe the class (the two core-datascope-* entries and permissions-evaluator-prototype-guard-8044), which are not edited (check-changeset-overwrite).

Premise checks on this base (ab50ccc)

  • Consumers: git grep -E "DataScopeManager|RowLevelFilter|defaultDataScopeManager|DataScopeConfig" over the whole tree minus CHANGELOGs: on the head only the three pending changesets named above still hit. Lit control ViewDataProvider: 16 files.
  • DataContext (@object-ui/types): with the class gone it has no implementer and no consumer in this repository, only its declaration and the types barrel. Not removed, not ruled.
  • Surface pin: none exists for @object-ui/core. PR objectui#10426 (1237ae4) regenerated no artefact (its 25-file diff has no generated file); scripts/dump-public-manifest.mjs dumps the SDUI component manifest from a browser build, not package exports; no committed file lists core's exports (control: composeElementDataSource hits no json, snap or api file). The instruments that read core's export set are check:readme-exports (TypeScript getExportsOfModule on the built dist/index.d.ts) and check:doc-examples (its ledger). Both are shown red on the removal commit and green on the head below. There was nothing to regenerate.

Red, then green

Removal-only commit 094a2bd, core rebuilt from a clean dist/:

  • node scripts/check-readme-exports.mjs exit 1: check-readme-exports: 1 README import name(s) NO package exports / packages/core/README.md teaching import { DataScopeManager } from '@object-ui/core'; export symbols read 3379 on the base, 3375 here (the four names).
  • node scripts/check-doc-example-types.mjs exit 1: STALE LEDGER ROW packages/core/src/data-scope/DataScopeManager.ts DataScopeManager #1.
  • scripts/__tests__/check-doc-example-types.test.ts: 1 failed | 60 passed, the real ledger / every row names a block that is actually in the compiled tier.

Head: all three green (numbers below). Both gates were green on the base too (ab50ccc: readme-exports exit 0, doc-examples exit 0, 89 ledger rows).

Local verification

Gate union on ee616cc (the head):

  • check-changeset-presence exit 0: 6 source file(s) of 2 released package(s) changed, and this change declares 1 changeset(s)
  • check-changeset-fixed exit 0, check-changeset-no-major exit 0 (No changeset declares a major bump), check-changeset-overwrite exit 0 (No pre-existing changeset was modified or deleted), check:changeset-claims exit 0 (report-only)
  • check:new-line-citations exit 0: VERDICT new-cross-file-line-citations: 0 new citation(s)
  • check:control-bytes exit 0
  • check:readme-exports exit 0: 543 real, 0 wrong-path, 0 fabricated, 3375 export symbols
  • check:doc-examples exit 0: 123 blocks, 88 ledger rows, Every covered @example compiles, or fails exactly as its ledger row declares
  • docs:check-links exit 0, check:doc-snippets exit 0
  • vitest run scripts/__tests__/check-pending-changeset-literals.test.ts scripts/__tests__/check-changeset-no-major.test.ts scripts/__tests__/check-doc-example-types.test.ts (the suites that read .changeset/ or the edited ledger): Test Files 3 passed (3), Tests 83 passed (83)

On 9bb75c6 (its tree differs from ee616cc only in the changeset's wording, 4 lines):

  • pnpm exec vitest run packages/core/ packages/permissions/ scripts/__tests__/check-doc-example-types.test.ts scripts/__tests__/check-pending-changeset-literals.test.ts: Test Files 179 passed (179), Tests 3663 passed (3663)
  • pnpm --filter @object-ui/core --filter @object-ui/permissions type-check: both Done, exit 0
  • vitest run scripts/__tests__/check-doc-example-ids.test.ts scripts/__tests__/check-doc-example-types.test.ts (the suites that name the edited script): 87 passed; pnpm type-check:scripts exit 0
  • check:doc-fences, check:doc-types, check:unreferenced-sources, check:doc-example-readers, check:esm-specifiers: all exit 0
  • eslint (--no-inline-config --format json) on the four touched lintable source files: 4 files, 0 errors, 0 warnings; the config has no type-aware linting, so deleting or editing these files cannot change a verdict on an untouched file. The repo-wide pnpm lint is left to CI.

Consumer closure: the downstream type-check of every @object-ui/core importer is left to CI's Type Check; locally the tree-scoped absence grep above is the evidence that no importer names a removed export.

Acceptance notes

  • DataContext and DataScope (@object-ui/types) have no implementer or consumer left in this repository. Observation only, not carded (zero pull, not ruled).
  • objectui#7379 and objectui#7383 are moot for this evaluator once it is gone; the ruling assigns the note on them to the seat at landing. No write from this PR.
  • needs:contract-review is the seat's label to set at landing (Clause-② yes).
  • Stays draft; the dispatching seat flips it after review.

Generated by Claude Code

Deletes the class, its shared instance, the RowLevelFilter and
DataScopeConfig types, their barrel exports and the class's two test
files. ViewDataProvider and the element data-source helpers in the same
module stay exported.

Claude-Session: https://claude.ai/code/session_014mXUNuFomfj24w7s1pZzhN
Co-authored-by: Claude <noreply@anthropic.com>
The core README teaches evaluateExpression alone, the architecture
overview lists what data-scope/ still holds, the doc-example ledger drops
the row for the deleted example, and the evaluator docblocks stop citing
the deleted file while keeping their point about the guard. The changeset
states the removed public API as BREAKING (minor, per the fixed group's
version policy) and reconciles the pending entries that describe the
class.

Claude-Session: https://claude.ai/code/session_014mXUNuFomfj24w7s1pZzhN
Co-authored-by: Claude <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

Metric Value Budget
Eager closure (gzip, 329 chunks) 3044.7 KB 3104.5 KB
Main entry chunk (gzip) 147.8 KB 350 KB
Entry file index-jYB0dw1l.js —
Status PASS —

The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it.


📦 Bundle Size Report

Package Size Gzipped
app-shell (consoleActionDispatch.js) 0.20KB 0.19KB
app-shell (index.js) 16.68KB 6.20KB
app-shell (runtime-config.js) 20.68KB 7.36KB
app-shell (types.js) 0.01KB 0.04KB
app-shell (urlParams.js) 10.06KB 3.86KB
auth (ActiveOrganizationStorage.js) 27.95KB 10.04KB
auth (AuthContext.js) 0.31KB 0.24KB
auth (AuthGuard.js) 2.07KB 1.00KB
auth (AuthProvider.js) 40.18KB 10.59KB
auth (AuthShell.js) 3.49KB 1.40KB
auth (ForgotPasswordForm.js) 12.21KB 3.45KB
auth (LoginForm.js) 18.15KB 5.39KB
auth (PreviewBanner.js) 0.90KB 0.50KB
auth (RegisterForm.js) 6.65KB 2.22KB
auth (SocialSignInButtons.js) 9.61KB 3.89KB
auth (UserMenu.js) 3.41KB 1.23KB
auth (auth-gate-events.js) 1.29KB 0.66KB
auth (authStyles.js) 5.04KB 1.72KB
auth (createAuthClient.js) 40.21KB 10.80KB
auth (createAuthenticatedFetch.js) 8.52KB 3.45KB
auth (index.js) 3.63KB 1.64KB
auth (invitation-status.js) 1.22KB 0.70KB
auth (org-roles.js) 6.66KB 2.78KB
auth (phone-identifier.js) 1.11KB 0.66KB
auth (types.js) 0.59KB 0.35KB
auth (useAuth.js) 5.30KB 1.02KB
auth (useWorkspaceAdminStatus.js) 11.08KB 4.58KB
collaboration (CommentThread.js) 27.13KB 7.95KB
collaboration (LiveCursors.js) 3.17KB 1.27KB
collaboration (PresenceAvatars.js) 6.49KB 2.64KB
collaboration (PresenceProvider.js) 2.79KB 1.13KB
collaboration (index.js) 1.68KB 0.73KB
collaboration (useCollaborationTranslation.js) 6.05KB 2.52KB
collaboration (useCommentSearch.js) 1.98KB 0.88KB
collaboration (useConflictResolution.js) 7.75KB 1.86KB
collaboration (useMentionNotifications.js) 1.81KB 0.68KB
collaboration (usePresence.js) 6.33KB 1.84KB
collaboration (useRealtimeSubscription.js) 7.91KB 2.01KB
components (index.js) 544.08KB 129.99KB
core (index.js) 9.22KB 3.71KB
create-plugin (index.js) 27.94KB 9.51KB
data-objectstack (index.js) 223.86KB 62.25KB
fields (index.js) 256.89KB 65.08KB
i18n (LocalizationContext.js) 1.76KB 0.96KB
i18n (builtinAggregateLabels.js) 0.86KB 0.49KB
i18n (currency.js) 2.59KB 1.22KB
i18n (fallbackInterpolation.js) 6.25KB 2.77KB
i18n (i18n.js) 8.87KB 3.64KB
i18n (index.js) 5.24KB 2.27KB
i18n (pickLocalized.js) 9.86KB 3.95KB
i18n (provider.js) 39.40KB 12.91KB
i18n (useDisplayLocale.js) 3.52KB 1.76KB
i18n (useObjectLabel.js) 34.34KB 9.17KB
i18n (useSafeTranslation.js) 5.60KB 2.33KB
layout (index.js) 39.28KB 11.09KB
mobile (MobileProvider.js) 0.92KB 0.49KB
mobile (ResponsiveContainer.js) 0.94KB 0.38KB
mobile (breakpoints.js) 1.51KB 0.70KB
mobile (createOfflineDataSource.js) 5.61KB 1.75KB
mobile (index.js) 1.99KB 0.87KB
mobile (offlineQueue.js) 3.91KB 1.35KB
mobile (pwa.js) 0.97KB 0.49KB
mobile (serviceWorker.js) 1.48KB 0.62KB
mobile (serviceWorkerSource.js) 3.41KB 1.48KB
mobile (useBreakpoint.js) 1.54KB 0.65KB
mobile (useGesture.js) 6.96KB 1.98KB
mobile (useOfflineSync.js) 1.99KB 0.72KB
mobile (usePullToRefresh.js) 6.62KB 2.45KB
mobile (useResponsive.js) 0.72KB 0.42KB
mobile (useSpecGesture.js) 5.52KB 2.10KB
mobile (useTouchTarget.js) 1.01KB 0.54KB
permissions (MePermissionsProvider.js) 13.52KB 4.88KB
permissions (PermissionContext.js) 0.31KB 0.25KB
permissions (PermissionGuard.js) 0.89KB 0.45KB
permissions (PermissionProvider.js) 6.24KB 2.16KB
permissions (discardProofCache.js) 1.04KB 0.55KB
permissions (evaluator.js) 8.33KB 3.07KB
permissions (index.js) 0.93KB 0.41KB
permissions (store.js) 0.91KB 0.42KB
permissions (useFieldPermissions.js) 1.28KB 0.53KB
permissions (usePermissions.js) 4.83KB 2.27KB
plugin-ai (index.js) 16.01KB 3.93KB
plugin-calendar (index.js) 51.22KB 14.56KB
plugin-charts (index.js) 74.76KB 20.82KB
plugin-chatbot (index.js) 198.36KB 47.20KB
plugin-dashboard (index.js) 133.59KB 35.39KB
plugin-designer (index.js) 216.12KB 44.37KB
plugin-detail (index.js) 231.66KB 61.23KB
plugin-editor (index.js) 2.23KB 1.05KB
plugin-form (index.js) 146.34KB 37.47KB
plugin-gantt (index.js) 168.25KB 41.46KB
plugin-grid (index.js) 215.43KB 58.90KB
plugin-kanban (index.js) 49.30KB 15.39KB
plugin-list (index.js) 114.37KB 28.24KB
plugin-map (index.js) 21.83KB 7.07KB
plugin-markdown (index.js) 13.88KB 4.80KB
plugin-report (index.js) 43.55KB 11.99KB
plugin-timeline (index.js) 30.64KB 8.94KB
plugin-tree (index.js) 10.52KB 3.69KB
plugin-view (index.js) 87.90KB 21.97KB
providers (DataSourceProvider.js) 0.75KB 0.39KB
providers (MetadataProvider.js) 1.37KB 0.59KB
providers (ThemeProvider.js) 1.90KB 0.85KB
providers (UploadProvider.js) 11.66KB 3.50KB
providers (index.js) 0.45KB 0.23KB
providers (types.js) 0.01KB 0.04KB
react-runtime (index.js) 5.62KB 2.34KB
react (LazyPluginLoader.js) 4.47KB 1.63KB
react (SchemaRenderer.js) 114.58KB 37.60KB
react (data-invalidation.js) 5.05KB 2.08KB
react (index.js) 4.03KB 1.86KB
react (schema-input.js) 4.25KB 2.04KB
react (spec-input.js) 0.20KB 0.18KB
sdui-parser (body-dialect.js) 4.78KB 2.09KB
sdui-parser (codegen.js) 6.58KB 2.74KB
sdui-parser (dashboard-widget-options.js) 3.08KB 1.30KB
sdui-parser (index.js) 5.78KB 2.56KB
sdui-parser (input-type.js) 2.84KB 1.40KB
sdui-parser (kanban-quick-add.js) 3.89KB 1.87KB
sdui-parser (parse.js) 25.28KB 7.80KB
sdui-parser (provenance.js) 3.66KB 1.82KB
sdui-parser (types.js) 0.28KB 0.23KB
sdui-parser (validate.js) 18.27KB 6.20KB
types (ai.js) 4.11KB 2.06KB
types (api-types.js) 0.20KB 0.18KB
types (app.js) 2.87KB 1.00KB
types (base.js) 0.20KB 0.18KB
types (blocks.js) 0.20KB 0.18KB
types (complex.js) 2.93KB 1.49KB
types (crud.js) 0.20KB 0.18KB
types (dashboard-filter-alias.js) 6.23KB 2.74KB
types (data-display.js) 3.75KB 1.85KB
types (data-protocol.js) 0.20KB 0.19KB
types (data.js) 0.20KB 0.18KB
types (designer.js) 1.85KB 0.85KB
types (disclosure.js) 0.20KB 0.18KB
types (error-code.js) 1.54KB 0.88KB
types (expression.js) 0.20KB 0.18KB
types (feedback.js) 0.20KB 0.18KB
types (field-types.js) 0.20KB 0.18KB
types (form.js) 0.20KB 0.18KB
types (http-inflight.js) 8.87KB 3.73KB
types (http-retry.js) 4.32KB 2.02KB
types (icon-key-migration.js) 4.26KB 1.63KB
types (index.js) 4.74KB 2.25KB
types (layout.js) 0.20KB 0.18KB
types (managed-by.js) 0.19KB 0.18KB
types (mobile.js) 5.00KB 2.39KB
types (navigation.js) 0.20KB 0.18KB
types (objectql.js) 0.20KB 0.18KB
types (overlay.js) 0.20KB 0.18KB
types (permissions.js) 0.20KB 0.18KB
types (plugin-scope.js) 0.20KB 0.18KB
types (record-components.js) 0.20KB 0.19KB
types (record-semantics.js) 1.28KB 0.67KB
types (registry.js) 0.20KB 0.18KB
types (reports.js) 0.20KB 0.18KB
types (select-option.js) 0.20KB 0.19KB
types (spec-report.js) 5.05KB 1.93KB
types (spec-ui-namespace.js) 0.20KB 0.19KB
types (strict-authoring-face.js) 17.15KB 6.32KB
types (system-fields.js) 3.33KB 1.54KB
types (theme.js) 6.28KB 2.87KB
types (ui-action.js) 8.11KB 3.32KB
types (views.js) 0.20KB 0.18KB
types (widget.js) 0.20KB 0.18KB

Size Limits

  • ✅ Core packages should be < 50KB gzipped
  • ✅ Component packages should be < 100KB gzipped
  • ⚠️ Plugin packages should be < 150KB gzipped

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

Contract review

Served-tier: CONTRACT_REVIEW_TIER
Head-sha: ee616cc3c8dced820d40e84904a1fec9c1e6bbef

Branch claude/issue-7750-retire-datascopemanager still resolves to ee616cc (git rev-parse refs/review/pr-10467); merge-base with main is ab50ccc. Diff: 10 files, +78/−1024.

① Derived judgments

Removal set — exactly the ruled set plus DataScopeConfig. The deleted file's export lines at base are precisely four: RowLevelFilter (:25), DataScopeConfig (:49), DataScopeManager (:78), defaultDataScopeManager (:401). git grep -n DataScopeConfig ab50ccc (minus CHANGELOGs) hits only the interface, registerScopeWithConfig(name, config: DataScopeConfig) (:95) and the barrel; in the published @object-ui/core@17.6.0 typings the only readers are dist/data-scope/DataScopeManager.d.ts and the data-scope/index.d.ts re-export. So DataScopeConfig had no reader outside the class; taking it with the class is correct.

Nothing else moved. packages/core/src/index.ts: empty diff base..head; line 60 export * from './data-scope/index.js' kept. data-scope/index.ts: the ViewDataProvider block (4 names) and the element-data-source block (14 names) are byte-identical at base and head; only the four-name block and the module docblock changed. data-scope/ at head holds ViewDataProvider.ts, element-data-source.ts, index.ts and four tests.

In-repo consumers: zero. git grep -l -E "DataScopeManager|RowLevelFilter|defaultDataScopeManager|DataScopeConfig|registerScopeWithConfig" refs/review/pr-10467 -- . ':!**/CHANGELOG.md' = 4 files, all .changeset/ (the new entry and the three pending ones). Lit control ViewDataProvider = 18 files. Scoped to skills/ and .claude/: 0. Constructors at base outside the class and its tests: packages/core/README.md:72 only. Residual "data scope" wording left in content/, apps/, skills/ (7 lines) is the React useDataScope / bind concept, not this class. Main has moved 6 commits past ab50ccc: removed-name hits on refs/review/main are exactly the 12 files the PR deletes or edits, none new; git diff --stat ab50ccc refs/review/main -- [PR files] is empty.

Surface pin: the dev's H3 is verified — none exists. vitest.config.mts:220 defines DIST_PIN_GLOB = 'packages/*/src/**/*.dist.spec.tsx'; such files exist only in components (1) and types (1), packages/core has 0 at base and head; test:dist is turbo run test:dist --filter=@object-ui/components. Scripts named like pin/surface/manifest (check-component-surface-parity, check-installed-spec-pin-claims, check-sdui-registration-pins, dump-public-manifest, upstream-port-pin.json) enumerate components, spec ranges or SDUI registrations, not core exports. Commit 1237ae4 (#10426) is a 25-file refactor with no generated artefact. The only instrument reading core's export set is scripts/check-readme-exports.mjs (checker.getExportsOfModule at :808 over the built dist/index.d.ts), green on the head. The ruling's "regenerate the surface pin" has no object; it is discharged as moot with evidence, not left undone.

Docblock rewrites — comment-only and true. evaluator.ts: 12 changed lines, all inside /** */ on PROTOTYPE_FIELD_NAMES (:130, unexported const) and readField (:184, unexported function); published evaluator.d.ts exports only evaluatePermission and evaluateCondition, so no .d.ts byte moves (root tsconfig has no removeComments and permissions builds with tsc, so the text does reach dist/evaluator.js as comment bytes, not API). The 8044 test header: 11 changed lines, all comment. Both rewrites are supported by the pending 7751 entry (three-case own-member read landed on the core class) and 8044 entry (ported back to evaluateCondition); the 2772/352/0 figures are unchanged.

README and docs — true at head. README's "Expressions" section imports only evaluateExpression, exported via index.ts:55 from ExpressionEvaluator.ts:563; README Export Check is green. architecture-overview.md data-scope/ ViewDataProvider, element data sources matches the directory listing. The removed check-doc-example-types.mjs ledger row keyed on the deleted file; Doc Example Id Check green.

② Semver level

  • AGENTS.md ## 9. Operational Rules contains ### 版本号策略(version alignment) (:267–273): changesets never declare major; objectui's own breaking changes are minor with the breaking semantics stated in the body; enforced by scripts/check-changeset-no-major.mjs (exit 1 on any major unless OBJECTUI_ALLOW_MAJOR=1). .changeset/config.json fixes 39 packages including core and permissions. The "§9" citation resolves. Changeset Bump Policy check: success. Precedent 0348bc9 (feat(plugin-detail)!: delete seven unregistered, unmounted exports #10453, feat(plugin-detail)!:) also declared minor. The ruling's "major per the package's policy" maps to this minor mechanically.
  • Sentence-by-sentence: the three pending entries named exist at head (core-datascope-unknown-operator-denies-7378, core-datascope-field-and-comparison-guards-7751, permissions-evaluator-prototype-guard-8044); the 8044 entry says "The two evaluators now give the same answer for a prototype-named field and for an inherited value", which the paraphrase reports faithfully. "No code constructed one outside tests and documentation examples": README:72 and the class's own @example are the only constructors. "Not affected" list matches the barrel. Migration: npm view @object-ui/core versions lists 78 versions with 17.5.0 present (latest 17.6.0); both tarballs ship dist/data-scope/DataScopeManager.js with the class; git tag @object-ui/core@17.5.0 exists (9022277) and carries packages/core/src/data-scope/DataScopeManager.ts with the four exports, so "copy the src file from a release tag" is actionable. Spec claim: @objectstack/spec@17.4.0 src/security/rls.zod.ts:392 using: z.string().optional(), described as "authored in canonical CEL (ADR-0058 D1)... enforces when the predicate lowers to an ObjectQL filter... Anything that does not lower fails closed"; RowLevelSecurityPolicySchema is exported from security/index.d.ts. True.
  • @object-ui/permissions changeset: check-changeset-presence.mjs is presence-only, not per-package (its own note at :408–410); it reported 6 source files of 2 released packages and 1 changeset, Changeset Declaration success. The edits touch no exported declaration, and the pending 8044 entry in the same release already describes evaluator.ts's guard. Not required.

③ Boundary flags

Implemented-by: claude/issue-7750-retire-datascopemanager
Reviewed-by: session_014mXUNuFomfj24w7s1pZzhN

VERDICT: PASS


Generated by Claude Code

@objectstack-fleet
objectstack-fleet Bot marked this pull request as ready for review September 25, 2026 04:07
@objectstack-fleet
objectstack-fleet Bot added this pull request to the merge queue Sep 25, 2026
Merged via the queue into main with commit 93fea2e Sep 25, 2026
45 checks passed
@objectstack-fleet
objectstack-fleet Bot deleted the claude/issue-7750-retire-datascopemanager branch September 25, 2026 04:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation package: core package: permissions tests

Projects

None yet

2 participants