Skip to content

Commit 443f563

Browse files
chore: delete the 211 inert no-explicit-any eslint-disable comments outside ui/ (#26252)
<!-- claude-projects-attribution: {"github_login":"os-steve"} --> _Requested by **Steve** · [project thread](https://claude.ai/code/project/chan_01FdL1XeUyvVNxLreh3F4Qi9?thread=cmsg_01FdL1XeUyvVNxLreh3F4Qi9CmR52V4tPmUNSq3TokKYLs)_ Fixes #26082 Clause-②: no Metadata-protocol: none ## What changed Ruling 6417062243, letter **C**: delete the 211 `@typescript-eslint/no-explicit-any` disable comments outside `ui/`. They are inert twice over: the root `eslint.config.mjs` never loads `@typescript-eslint/eslint-plugin`, and `pnpm lint` runs `eslint . --no-inline-config`. Nothing is installed, no rule is added, `eslint.config.mjs` and every baseline are untouched, and nothing under `ui/` is touched (#25918 owns that tree). Every comment named only this one rule, so no comment needed a partial edit. Two shapes, both handled mechanically: | Shape | Count | Edit | |---|---|---| | a whole-line `// eslint-disable-next-line @typescript-eslint/no-explicit-any` | 166 | the line is deleted, no blank line left in its place | | a trailing `// eslint-disable-line @typescript-eslint/no-explicit-any` | 45 | the comment and the whitespace before it are cut, the code is kept byte for byte | There were no block `/* eslint-disable … */` comments on this rule outside `ui/`. | Package | Files | Comments | |---|---|---| | `packages/qa/dogfood` | 41 | 120 | | `packages/verify` | 15 | 32 | | `packages/plugins/plugin-security` | 6 | 41 | | `packages/plugins/plugin-auth` | 1 | 10 | | `packages/core` | 1 | 6 | | `packages/runtime` | 1 | 1 | | `packages/types` | 1 | 1 | 65 of the 66 files are tests; the one source file is `packages/verify/src/handle.ts` (3 comment lines). ## How it was verified (head `cd984c91`) - **Grep.** `git grep -c 'eslint-disable.*@typescript-eslint/no-explicit-any' -- ':!ui'` was 66 files / 211 comments on `origin/main` (`601c7738` at start, still 211 at `e6dfeb08`); on this head it matches nothing (exit 1). - **Diff shape.** Every removed line contains the comment (0 removed lines without it); the 45 added lines are exactly the 45 trailing-comment lines with the comment cut (compared line for line); no `eslint` text is added; no file loses its final newline. - **`pnpm lint` before and after, output diff empty.** Before: a clean worktree at `origin/main` `e6dfeb08`; after: this head. Both exit 0, and the outputs are identical once the checkout path is normalised. The same pair was also run on the first head (`c91379fb` against `601c7738`), also identical. - **Typecheck.** `pnpm --filter … run typecheck` on the seven touched packages (`core`, `plugin-auth`, `plugin-security`, `dogfood`, `runtime`, `types`, `verify`), on this head after a full `pnpm build` (119/119 tasks): all seven `Done`, lock VERDICT command-exit 0. - **Tests on this head.** Each package's `vitest run --maxWorkers=2` under the verify lock, every VERDICT command-exit 0: `types` 29 files / 781 tests; `verify` 46 / 393; `plugin-auth` 198 / 3,779 (10 skipped); `plugin-security` 225 / 4,920 (45 skipped); `core` 121 / 2,778; `runtime` 455 / 7,408 (19 skipped) (`core`, `runtime` and `types` with `--project local`, their `test` script's project). `dogfood`: the 41 touched files only, 41 / 345 passed; the whole dogfood battery is CI's (no `!` in the title and no `(narrowing)` arm). The same set was green on the first head too. - **Gates.** `node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack` derived 67 commands; all 67 exit 0, each exit taken before any pipe; `--ran` reconciliation: `67 run, 0 NOT-MEASURED, 0 UNRUN`, a derived zero. (`check-plugin-teardown-shape.mjs --self-test` needs its pinned fixture commit, fetched into this shallow clone first; `check:dts-closure` and `check:dual-build-cjs-loads` read every package's `dist/`, so they were read after the full build.) - **Governed surface.** `node scripts/pm/check-governed-merges.mjs --test` on the 66 paths: `0 of 66 path(s) hit the register`. - **Changeset:** none, this carries `skip-changeset`. Only comments are deleted: 65 files are tests outside every package's `files[]`, and in `handle.ts` the three deleted lines are line comments, so no symbol, type or runtime behaviour in `@objectstack/verify`'s `dist` changes. ## Acceptance notes - One merge of `origin/main`: #26175 had changed `packages/verify/src/harness.org-context.test.ts`. On that file this branch takes main's version and deletes its 4 comments the same way; the branch's delta against main is still 66 files, +45 / −211. - `pnpm typecheck` was run on the seven touched packages, not the whole workspace; the whole-workspace run is the required `TypeScript Type Check` job on this PR. - The measurement option A would have bought (a per-file shrink-only `no-explicit-any` baseline over non-test `src/**`) is not part of this PR, as the ruling says; a later card can cite #26082 if the maintainer names that gate. --- _Generated by [Claude Code](https://claude.ai/code/session_01D8CEyQZUZgQM1xXhoZeKgb)_ Co-authored-by: Claude <noreply@anthropic.com>
1 parent dc71845 commit 443f563

66 files changed

Lines changed: 45 additions & 211 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.

‎packages/core/src/utils/metadata-activation-store.test.ts‎

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,6 @@ const TABLE = 'sys_metadata_activation';
5555
* gate then reports the matcher UNJUDGED, and unjudged is never treated as
5656
* passing.
5757
*/
58-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
5958
function matches(row: any, where: any): boolean {
6059
return Object.entries(where ?? {}).every(([k, v]) => {
6160
// Equality ONLY, and a loud REFUSAL for anything else rather than a
@@ -84,22 +83,17 @@ function matches(row: any, where: any): boolean {
8483
* read by `metadata_type` and a double that answered every row regardless would
8584
* pin nothing about the discriminator — which is this file's whole subject.
8685
*/
87-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
8886
function makeStoreEngine(rows: any[] = []) {
89-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
9087
const calls: Array<{ op: string; object: string; data?: any; options?: any }> = [];
9188
const engine = {
92-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
9389
find: vi.fn(async (object: string, options?: any) => {
9490
calls.push({ op: 'find', object, options });
9591
return rows.filter((r) => matches(r, options?.where));
9692
}),
97-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
9893
insert: vi.fn(async (object: string, data: any, options?: any) => {
9994
calls.push({ op: 'insert', object, data, options });
10095
return { id: 'row_new', ...data };
10196
}),
102-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
10397
update: vi.fn(async (object: string, data: any, options?: any) => {
10498
// Routed through the producer's OWN dispatch predicate, so this
10599
// fake cannot be looser than the engine it stands in for — #4434

‎packages/plugins/plugin-auth/src/first-session-membership-ordering.test.ts‎

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -86,11 +86,9 @@ function makeEngine(seed: MemberRow[] = []) {
8686
return {
8787
rows,
8888
insert,
89-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
9089
find: vi.fn(async (model: string, q: any) =>
9190
model === 'sys_member' ? rows.filter((r) => match(r, q?.where)).slice(0, q?.limit ?? 100) : [],
9291
),
93-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
9492
findOne: vi.fn(async (model: string, q: any) =>
9593
{
9694
assertEngineFindOnePredicate(model, q);
@@ -107,26 +105,21 @@ interface ManagerOpts {
107105
membershipPolicy?: 'auto' | 'invite-only';
108106
/** What `tenancy.defaultOrgId()` answers. `null` = no unambiguous target. */
109107
defaultOrgId?: string | null;
110-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
111108
databaseHooks?: any;
112109
}
113110

114-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
115111
function hooksFor(opts: ManagerOpts): any {
116112
const manager = new AuthManager({
117113
secret: 'test-secret-at-least-32-chars-long',
118114
baseUrl: 'http://localhost:3000',
119115
dataEngine: opts.engine,
120116
...(opts.membershipPolicy ? { membershipPolicy: opts.membershipPolicy } : {}),
121117
getTenancy: () => ({ defaultOrgId: async () => opts.defaultOrgId ?? null }),
122-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
123118
} as any);
124-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
125119
const hooks = (manager as any).composeDatabaseHooks(opts.databaseHooks);
126120
// What the adapter's `create` does for a `sys_user` row inside the creating
127121
// request (`onRecordCreated`; the real wiring is pinned in
128122
// `user-created-in-request.test.ts`).
129-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
130123
hooks.__stageCreated = (request: unknown, userId: string) => (manager as any).stageUserCreatedInRequest(request, userId);
131124
return hooks;
132125
}
@@ -136,7 +129,6 @@ function hooksFor(opts: ManagerOpts): any {
136129
* session minted inside ONE endpoint context (the request), and
137130
* `user.create.after` is deferred past both. Returns the session hook's result.
138131
*/
139-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
140132
async function firstSessionOfCreation(hooks: any, session: Record<string, unknown> = { userId: USER }): Promise<any> {
141133
const request = {};
142134
hooks.__stageCreated(request, USER);
@@ -251,7 +243,6 @@ describe("[#8247 rule 2] a user's FIRST session settles the membership before re
251243

252244
it('the HOST session hook still chains first and still wins', async () => {
253245
const engine = makeEngine();
254-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
255246
const hostHook = vi.fn(async (session: any) => ({
256247
data: { ...session, activeOrganizationId: 'org_host' },
257248
}));
@@ -274,7 +265,6 @@ describe("[#8247 rule 2] a user's FIRST session settles the membership before re
274265
find: vi.fn(async () => { throw new Error('db down'); }),
275266
insert: vi.fn(async () => { throw new Error('db down'); }),
276267
};
277-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
278268
const hooks = hooksFor({ engine: engine as any, defaultOrgId: DEFAULT_ORG });
279269
const result = await firstSessionOfCreation(hooks);
280270
expect(result?.data?.activeOrganizationId).toBeUndefined();

‎packages/plugins/plugin-security/src/app-default-permission-set.test.ts‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,6 @@ describe('the resolved options reach the constructed plugin (#7001)', () => {
9090
if (name === 'manifest') return { register() {} };
9191
return undefined;
9292
},
93-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
9493
} as any);
9594
return services.get('security.fallbackPermissionSet');
9695
};

‎packages/plugins/plugin-security/src/deployment-platform-global-exemption.test.ts‎

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -90,9 +90,7 @@ async function boot(
9090
},
9191
};
9292
const plugin = new SecurityPlugin({ fallbackPermissionSet: 'member_default' });
93-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
9493
await plugin.init(ctx as any);
95-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
9694
await plugin.start(ctx as any);
9795
return { plugin, logger };
9896
}
@@ -103,7 +101,6 @@ describe('[ADR-0131 D7] plugin-security reads no platformGlobalObjects — the s
103101
{ sys_widget_registry: walledSchema('sys_widget_registry') },
104102
{ entitlement: { platformGlobalObjects: ['sys_widget_registry'] } },
105103
);
106-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
107104
expect(await (plugin as any).getReadFilter('sys_widget_registry', MEMBER_CTX)).toEqual({
108105
organization_id: 'org-1',
109106
});
@@ -115,7 +112,6 @@ describe('[ADR-0131 D7] plugin-security reads no platformGlobalObjects — the s
115112
{ entitlement: { platformGlobalObjects: ['sys_widget_registry'] }, tenancy: { posture: 'group' } },
116113
);
117114
const groupCtx = { ...MEMBER_CTX, accessible_org_ids: ['org-1', 'org-2'] };
118-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
119115
expect(await (plugin as any).getReadFilter('sys_widget_registry', groupCtx)).toEqual({
120116
organization_id: { $in: ['org-1', 'org-2'] },
121117
});
@@ -126,7 +122,6 @@ describe('[ADR-0131 D7] plugin-security reads no platformGlobalObjects — the s
126122
{ sys_widget_registry: walledSchema('sys_widget_registry') },
127123
{ entitlement: { platformGlobalObjects: ['sys_widget_registry'] } },
128124
);
129-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
130125
const walled = await (plugin as any).computeWriteTenantCheckFilter(
131126
[PLAIN_MEMBER], 'sys_widget_registry', 'insert', NO_ORG_CTX,
132127
);
@@ -138,14 +133,11 @@ describe('[ADR-0131 D7] plugin-security reads no platformGlobalObjects — the s
138133
sys_widget_registry: plannedSchema('sys_widget_registry'),
139134
crm_task: walledSchema('crm_task'),
140135
});
141-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
142136
expect(await (plugin as any).getReadFilter('sys_widget_registry', MEMBER_CTX)).toBeUndefined();
143-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
144137
expect(await (plugin as any).computeWriteTenantCheckFilter(
145138
[PLAIN_MEMBER], 'sys_widget_registry', 'insert', NO_ORG_CTX,
146139
)).toBeNull();
147140
// CONTROL — a sibling on the same deployment walls as today.
148-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
149141
expect(await (plugin as any).getReadFilter('crm_task', MEMBER_CTX)).toEqual({ organization_id: 'org-1' });
150142
});
151143

@@ -154,9 +146,7 @@ describe('[ADR-0131 D7] plugin-security reads no platformGlobalObjects — the s
154146
{ sys_widget_registry: walledSchema('sys_widget_registry'), crm_task: walledSchema('crm_task') },
155147
{ entitlement: { platformGlobalObjects: ['sys_widget_registry'] }, tenancy: { posture: 'single' } },
156148
);
157-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
158149
expect(await (plugin as any).getReadFilter('sys_widget_registry', MEMBER_CTX)).toBeUndefined();
159-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
160150
expect(await (plugin as any).getReadFilter('crm_task', MEMBER_CTX)).toBeUndefined();
161151
});
162152
});
@@ -167,7 +157,6 @@ describe('[#12699] refusals: this plugin warns only for the key it reads', () =>
167157
{ sys_widget_registry: walledSchema('sys_widget_registry') },
168158
{ entitlement: { platformGlobalObjects: 'sys_widget_registry' } },
169159
);
170-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
171160
await (plugin as any).getReadFilter('sys_widget_registry', MEMBER_CTX);
172161
const warned = logger.warn.mock.calls.map((c) => String(c[0]));
173162
expect(warned.filter((m) => m.includes('org-scoping entitlement key'))).toEqual([]);

‎packages/plugins/plugin-security/src/federated-tenant-layer0.test.ts‎

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -73,9 +73,7 @@ async function bootWithSchema(schema: Record<string, unknown>, opts: { tenancy?:
7373
},
7474
};
7575
const plugin = new SecurityPlugin({ fallbackPermissionSet: 'member_default' });
76-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
7776
await plugin.init(ctx as any);
78-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
7977
await plugin.start(ctx as any);
8078
return plugin;
8179
}
@@ -102,7 +100,6 @@ const federatedSchema = (extra: Record<string, unknown> = {}) => ({
102100
describe('[#7835] Layer 0 vs federated (external) objects', () => {
103101
it('federated object with the INJECTED anchor: no organization_id predicate under `isolated`', async () => {
104102
const plugin = await bootWithSchema(federatedSchema());
105-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
106103
const filter = await (plugin as any).getReadFilter('ext_customer', MEMBER_CTX);
107104
// No Layer 1 policies and no Layer 0 contribution → nothing to AND at all.
108105
expect(filter).toBeUndefined();
@@ -114,7 +111,6 @@ describe('[#7835] Layer 0 vs federated (external) objects', () => {
114111
// suppression must hold — otherwise the fix would cover one posture and leave
115112
// the other emitting `organization_id IN (…)` against a table without it.
116113
const plugin = await bootWithSchema(federatedSchema(), { tenancy: { posture: 'group' } });
117-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
118114
const filter = await (plugin as any).getReadFilter('ext_customer', {
119115
...MEMBER_CTX,
120116
accessible_org_ids: ['org-1', 'org-2'],
@@ -135,7 +131,6 @@ describe('[#7835] Layer 0 vs federated (external) objects', () => {
135131
...REMOTE_COLUMNS,
136132
},
137133
});
138-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
139134
const filter = await (plugin as any).getReadFilter('ext_customer', MEMBER_CTX);
140135
expect(filter).toEqual({ organization_id: 'org-1' });
141136
});
@@ -147,7 +142,6 @@ describe('[#7835] Layer 0 vs federated (external) objects', () => {
147142
name: 'task',
148143
fields: { organization_id: { ...TENANT_SCOPE_FIELD_DEF }, ...REMOTE_COLUMNS },
149144
});
150-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
151145
const filter = await (plugin as any).getReadFilter('task', MEMBER_CTX);
152146
expect(filter).toEqual({ organization_id: 'org-1' });
153147
});
@@ -159,7 +153,6 @@ describe('[#7835] Layer 0 vs federated (external) objects', () => {
159153
// so there was never isolation here to lose. Object-level CRUD is still the
160154
// gate, and a caller without read permission is refused before this point.
161155
const plugin = await bootWithSchema(federatedSchema());
162-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
163156
const filter = await (plugin as any).getReadFilter('ext_customer', { ...MEMBER_CTX, tenantId: undefined });
164157
expect(filter).toBeUndefined();
165158
});
@@ -196,9 +189,7 @@ describe('[#7835] Layer 0 vs federated (external) objects', () => {
196189
},
197190
};
198191
const plugin = new SecurityPlugin({ fallbackPermissionSet: 'member_default' });
199-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
200192
await plugin.init(ctx as any); await plugin.start(ctx as any);
201-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
202193
const filter = await (plugin as any).getReadFilter('ext_customer', MEMBER_CTX);
203194
// Layer 0 gone, Layer 1's authored predicate intact — no `$and`, no org column.
204195
expect(filter).toEqual({ region: 'org-1' });

‎packages/plugins/plugin-security/src/no-active-organization-write-refusal.test.ts‎

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -117,22 +117,18 @@ async function boot(opts: BootOpts = {}) {
117117
},
118118
};
119119
const plugin = new SecurityPlugin({ fallbackPermissionSet: opts.fallback ?? 'member_default' });
120-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
121120
await plugin.init(ctx as any);
122-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
123121
await plugin.start(ctx as any);
124122
return {
125123
plugin,
126124
warn,
127-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
128125
readFilter: (object: string, context: any) => (plugin as any).getReadFilter(object, context),
129126
// [#20013] The terminal stands in for the engine, which runs the installed
130127
// `postHookWriteImageCheck` on an INSERT's rows once its `beforeInsert`
131128
// chain has run — here (no hooks) the rows as sent. The Layer 0 tenant wall
132129
// installs that seam on every insert it walls, and a terminal that skipped
133130
// it would be refused fail-closed. Only the insert path is modelled: every
134131
// walled write in this file that reaches the terminal is an insert.
135-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
136132
run: async (opCtx: any) => {
137133
await middleware!(opCtx, async () => {
138134
const seam = opCtx.postHookWriteImageCheck;
@@ -156,7 +152,6 @@ const ORG_BOUND = { userId: 'u1', tenantId: 'org-1', positions: [], permissions:
156152
* not: the sibling forge guard is also `PERMISSION_DENIED`/403, and any 403 at
157153
* all satisfies the first two.
158154
*/
159-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
160155
function expectConformingRefusal(err: any, opts: { principal?: 'session' | 'delegator' } = {}) {
161156
expect(err, 'the write was not refused at all').toBeDefined();
162157
expect(err.code).toBe('PERMISSION_DENIED');
@@ -174,10 +169,8 @@ function expectConformingRefusal(err: any, opts: { principal?: 'session' | 'dele
174169
expect(err.developerMessage).toMatch(/ADR-0123 D2/);
175170
}
176171

177-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
178172
async function refusalFrom(run: (opCtx: any) => Promise<unknown>, opCtx: unknown): Promise<any> {
179173
try {
180-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
181174
await run(opCtx as any);
182175
return undefined;
183176
} catch (e) {
@@ -399,7 +392,6 @@ describe('[ADR-0123 D2] tenant-scoped READS with no active organization resolve
399392
// would be `undefined` (unrestricted) and an ordinary wall would be
400393
// `organization_id = …`; both are different verdicts from this one.
401394
expect(filter).toEqual(RLS_DENY_FILTER);
402-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
403395
expect(matchesFilterCondition(ROW as any, filter as any)).toBe(false);
404396
});
405397

@@ -411,7 +403,6 @@ describe('[ADR-0123 D2] tenant-scoped READS with no active organization resolve
411403
const h = await boot();
412404
const filter = await h.readFilter('task', { isSystem: true, userId: 'sys', positions: [], permissions: [] });
413405
expect(filter).toBeUndefined(); // no scoping imposed at all
414-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
415406
expect(matchesFilterCondition(ROW as any, (filter ?? {}) as any)).toBe(true);
416407
});
417408

@@ -422,7 +413,6 @@ describe('[ADR-0123 D2] tenant-scoped READS with no active organization resolve
422413
const h = await boot();
423414
const filter = await h.readFilter('task', { ...ORG_BOUND });
424415
expect(filter).toEqual({ organization_id: 'org-1' });
425-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
426416
expect(matchesFilterCondition(ROW as any, filter as any)).toBe(true);
427417
});
428418

‎packages/plugins/plugin-security/src/objects/default-permission-sets.test.ts‎

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,6 @@ describe('default permission sets carry the managed denies (static baseline)', (
152152
describe('sys_invitation is row-scoped to its addressee (#8095)', () => {
153153
const SELF_PREDICATE = 'email == current_user.email';
154154

155-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
156155
const policiesFor = (setName: string, object: string): any[] =>
157156
(setByName(setName)?.rowLevelSecurity ?? []).filter((p: any) => p.object === object);
158157

@@ -297,7 +296,6 @@ describe('sys_invitation is row-scoped to its addressee (#8095)', () => {
297296
* they have now. So it is pinned here, structurally, next to the declaration.
298297
*/
299298
describe('sys_comment delete is moderation-shaped, not ownership-shaped (#8839)', () => {
300-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
301299
const policiesFor = (setName: string, object: string): any[] =>
302300
(setByName(setName)?.rowLevelSecurity ?? []).filter((p: any) => p.object === object);
303301

@@ -367,7 +365,6 @@ describe('sys_comment_reaction delete is ownership-shaped (#22566)', () => {
367365
it('no shipped set carries a row-level policy on sys_comment_reaction', () => {
368366
expect(defaultPermissionSets.length).toBeGreaterThanOrEqual(6);
369367
for (const set of defaultPermissionSets) {
370-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
371368
const scoped = (set.rowLevelSecurity ?? []).filter((p: any) => p.object === 'sys_comment_reaction');
372369
expect(scoped, `${set.name} sys_comment_reaction policies`).toEqual([]);
373370
}

‎packages/plugins/plugin-security/src/platform-owner-wall-bypass.test.ts‎

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -113,9 +113,7 @@ async function boot(opts: {
113113
},
114114
};
115115
const plugin = new SecurityPlugin({ fallbackPermissionSet: 'member_default' });
116-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
117116
await plugin.init(ctx as any);
118-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
119117
await plugin.start(ctx as any);
120118
return { plugin, findOne, warn };
121119
}
@@ -131,7 +129,6 @@ const sessionCtx = (over: Record<string, unknown> = {}) => ({
131129
});
132130

133131
const readFilter = (plugin: unknown, ctx: unknown) =>
134-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
135132
(plugin as any).getReadFilter('task', ctx);
136133

137134
const OLD_OWNER = process.env.OS_PLATFORM_OWNER_EMAIL;
@@ -266,12 +263,10 @@ describe('[#12974] the bypass lifts ONLY Layer 0', () => {
266263
users: { u_owner: { id: 'u_owner', email: OWNER_EMAIL, email_verified: true } },
267264
});
268265
// Org-carrying owner write: the equality wall stands.
269-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
270266
const owner = await (plugin as any).computeWriteTenantCheckFilter([PLAIN_MEMBER], 'task', 'update', sessionCtx());
271267
expect(owner).toEqual({ organization_id: 'org-1' });
272268
// Org-LESS owner write: the deny sentinel stands — this is the exact
273269
// verdict the ADR-0123 D2 refusal derives its 403 from.
274-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
275270
const ownerOrgless = await (plugin as any).computeWriteTenantCheckFilter(
276271
[PLAIN_MEMBER],
277272
'task',
@@ -280,7 +275,6 @@ describe('[#12974] the bypass lifts ONLY Layer 0', () => {
280275
);
281276
expect(ownerOrgless).toEqual({ ...RLS_DENY_FILTER });
282277
// Everyone else: unchanged, same wall.
283-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
284278
const member = await (plugin as any).computeWriteTenantCheckFilter(
285279
[PLAIN_MEMBER],
286280
'task',
@@ -302,7 +296,6 @@ describe('[#12974] audit — the ruled floor', () => {
302296
await readFilter(plugin, sessionCtx({ userId: 'u_m', email: 'member@corp.example' }));
303297
expect(bypassEvents()).toHaveLength(0);
304298
// Owner WRITE: no bypass happens, so no event may claim one did.
305-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
306299
await (plugin as any).computeWriteTenantCheckFilter([PLAIN_MEMBER], 'task', 'update', sessionCtx());
307300
expect(bypassEvents()).toHaveLength(0);
308301
await readFilter(plugin, sessionCtx());

0 commit comments

Comments
 (0)