Skip to content

build(deps): bump @exadev/eslint-config to 3.0.0 - #354

Merged
Mearman merged 7 commits into
mainfrom
chore/eslint-config-3
Oct 10, 2026
Merged

Mearman merged 7 commits into
mainfrom
chore/eslint-config-3

Conversation

@Mearman

@Mearman Mearman commented Oct 10, 2026 •

Copy link
Copy Markdown
Member

Bumps @exadev/eslint-config to 3.0.0 in ts/, its five packages and conformance/. exadevConfig() now takes only its options, so each eslint.config.ts spreads its result inside defineConfig and lists its own blocks after it. The conformance config exported the call directly, so it now goes through defineConfig; its rules-only block is scoped to TypeScript files, because unscoped it applied to JSON files where the typescript-eslint plugin is not registered.

The packages were on 2.18 (conformance on 2.12), so most of the diff is the rules added since, not the major bump. There is one commit per package after the bump, each leaving that package's lint clean; the bump commit itself cannot (it only moves the configs and the dependency). Each package commit message says which await changes are concurrent (and why that is safe) and which stay sequential.

No published signature changes. The max-params and prefer-options-object-param rules would need wire-mesh-core's exported parameter lists folded into options objects, which is a breaking release, so those modules are exempted per file in ts/packages/core/eslint.config.ts with the reason beside the exemption. Internal functions and the private web-console app were changed instead.

The conformance golden vectors are ignored by eslint: generate.ts writes them and CI diffs them against a fresh generation. verify.test.ts is now verify.unit.test.ts for the test-kind rule.

Local runs of the CI commands (lint, typecheck, build, generated-file checks, tests) for ts/ and conformance/ pass.

Refs ExaDev/eslint-config#129

exadevConfig() takes its options object alone in 3.0.0, so every
eslint.config.ts spreads its result inside defineConfig and lists its own
blocks after it. The conformance rule block is scoped to TypeScript files:
unscoped, it applied to JSON files, where the typescript-eslint plugin is
not registered.
The golden vector files are ignored by eslint: generate.ts writes them and CI diffs them against
a fresh generation, so their key order and layout belong to the generator. The tampered advert
vectors return an altered copy instead of mutating the signed one, the verify suite is renamed
verify.unit.test.ts for the test-kind rule, tsconfig options are sorted, and trailing comments
move above the code they describe.

Concurrency: none introduced.
Trailing comments move above the code they describe, consecutive line comments become block
comments and statements are separated as the shared configuration requires.

- The successor certificates are minted together. Concurrency: independent and side-effect-free.
  Each start is derived from the last stored certificate and a mint is a key generation with no
  shared state, so the order the mints run in is not observable.
- The WebTransport server start returns its bound port instead of writing a variable it read
  before awaiting the bind.
- Frame polling in tests uses vi.waitFor, and the self-signed certificate override is a stubbed
  environment variable reset in a finally block.
Trailing comments move above the code they describe, consecutive line comments become block
comments and statements are separated as the shared configuration requires. The fake socket
stream in a test is drained by recursion. No concurrency change.
Trailing comments move above the code they describe, consecutive line comments become block
comments and statements are separated as the shared configuration requires.

- Offer sections are walked one after another, in offer order, through a small sequential
  helper. Sequential: each section produces or consumes on the mediasoup transport and registers
  what it made, so a failing section stops the ones after it, nothing registers once join has
  thrown, and map insertion order stays section order.
- Track maps are sent to the other participants in roster order, stopping at the first failure
  as the loop did. Sequential.
- The negotiation id moves off the mutated roster entry into a WeakMap keyed by the entry, so an
  offer still being authorised when its participant is removed cannot hand its id to the same
  device added again. A test pins that.
- A test clears its backend reference before awaiting the teardown.
Trailing comments move above the code they describe, consecutive line comments become block
comments and statements are separated as the shared configuration requires. The rules that
want positional parameter lists folded into options objects are not applied to the modules
that export those lists: every module under src is a subpath export except those named in
INTERNAL_MODULES, so changing them needs a major release. They are exempted per file in
eslint.config.ts, with the reason beside the exemption. Internal functions are changed.

Concurrency, each item classified:
- Narrowing checks, token conditions and revocation entries are tested through a shared
  helper strictly one after another and stop at the first offender. Sequential.
- Directory stats are read together. Independent and side-effect-free: reads of different paths,
  mapped in readdir order.
- Data-sync entries are read one key at a time, stopping at the first hole and never touching
  later keys, and written in ascending sequence with the head last. Sequential.
- Gossip adverts are verified together, in a session and in the relay hub. Independent and
  side-effect-free: verifyPeerAdvert derives a device id and checks a signature and never
  throws. Directory, registration and callbacks run afterwards in frame order.
- The relay hub forwards to its peers one connection at a time over the live set. Sequential.
- Notice log entries are read and verified in log order, so the first failure in log order is
  the one reported. Sequential.
- Advertised addresses are dialled in order by recursion, and byte stream chunks are read with
  for await. Sequential.
- The bulk sender still awaits its first ack inside the stream loop, so the turns between a
  chunk being sent and the next wait being registered are unchanged (an ack or a connection end
  with nothing waiting is dropped); later acks are awaited by recursion, and the final digest
  read fetches persisted chunks one at a time. Sequential.

Other internal changes: the highest received counter is advanced with Math.max after the decrypt
resolves, the direction key inputs, the shard to serve and the keygen round are passed as
objects, and the delegation-chain walker keeps its position in one value. Polling loops in
tests use recursion or vi.waitFor and ordered steps go through a small sequencing helper.
Trailing comments move above the code they describe, consecutive line comments become block
comments and statements are separated as the shared configuration requires. The console is a
private app, so its own signatures change where the rules ask: sendRoomMessage, requestToJoin,
mintRoomInviteGrant and useRoomMessaging take their optional arguments as objects.

Concurrency, each item classified:
- The grant, message and name stores read their values together. Independent and
  side-effect-free: reads of distinct keys, processed afterwards in key order.
- Revocation entries are verified and recorded together. Independent: each is verified on its
  own and recorded under its token id, whose entries are unordered by contract, and the
  unreadable list keeps key order.
- The held request permission is chosen by judging candidates one at a time in order and
  stopping at the first valid one, so later candidates are never judged. Sequential.
- Conversations are restored one room at a time, so the rooms before one whose list fails are
  already restored, and rekey keys are written in ascending epoch order. Sequential.
- The announcement stream is read in order into one array.

The IndexedDB and WebRTC adapters no longer assign to properties of their parameters, and test
helpers take optional arguments as objects.
@Mearman
Mearman force-pushed the chore/eslint-config-3 branch from 1990c7d to f077f83 Compare October 10, 2026 09:16
@Mearman
Mearman marked this pull request as ready for review October 10, 2026 09:23
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 10, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
🔒 Security Review ✅ Completed 2026-10-10T09:32:21.992912Z f077f83 Draft marked ready
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@Mearman
Mearman merged commit 07bf349 into main Oct 10, 2026
9 checks passed
@Mearman
Mearman deleted the chore/eslint-config-3 branch October 10, 2026 09:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant