From 92a5b1b3cea393f7f5aab3aa6f6d03d413c54687 Mon Sep 17 00:00:00 2001 From: jdalton Date: Sat, 15 Aug 2026 02:52:50 -0400 Subject: [PATCH 1/2] chore(lint): satisfy no-shop-metaphor-jargon across main MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Contextual rewrites at all 44 sites: 'seam' becomes 'injection point' where the comment means a DI/test injection (spawn injection point, test injection path, injectable launch point) and 'boundary' where it means a plain architecture boundary (factory boundary, streaming boundary, node:http boundary); 'wedged' becomes 'unresponsive'; the plural 'seams' naming pure helper modules becomes 'helpers'. Comment-only — no behavior changes. The git temp-repo suites are flaky on this machine (extended-real-ops 'temporary git repository' fails intermittently on pristine main too); every other suite passes, and the socket lint error count is 0. --- src/ai/advisor.ts | 8 +++---- src/ai/builtin.ts | 2 +- src/ai/credentials.ts | 12 +++++----- src/ai/exec.ts | 22 +++++++++---------- src/ai/json.ts | 2 +- src/ai/route.ts | 21 +++++++++--------- src/ai/spawn-local.ts | 10 ++++----- src/ai/spawn.ts | 2 +- src/exe/smol/path.ts | 8 +++---- src/fs/allowed-dirs-cache.ts | 12 +++++----- src/github/cli.ts | 4 ++-- src/node/fs.ts | 13 ++++++----- src/node/os.ts | 2 +- src/node/path.ts | 2 +- src/primordials/process.ts | 6 ++--- src/process/open-url.ts | 20 ++++++++--------- src/process/spawn/pty.ts | 4 ++-- src/process/spawn/run.ts | 7 +++--- src/secrets/addon.ts | 4 ++-- src/secrets/broker.ts | 2 +- src/secrets/oauth-pkce.ts | 4 ++-- src/term/effects/shimmer-keyframes.ts | 2 +- test/unit/ai/advisor.test.mts | 2 +- test/unit/ai/exec.test.mts | 2 +- test/unit/ai/spawn-local.test.mts | 2 +- .../cli/check-primordials-render.test.mts | 4 ++-- test/unit/git/extended-real-ops.test.mts | 2 +- test/unit/github/cli.test.mts | 5 +++-- test/unit/github/refs-write.test.mts | 2 +- test/unit/process/open-url.test.mts | 6 ++--- test/unit/secrets/addon.test.mts | 10 ++++----- test/unit/secrets/oauth-pkce.test.mts | 2 +- 32 files changed, 105 insertions(+), 101 deletions(-) diff --git a/src/ai/advisor.ts b/src/ai/advisor.ts index 904f3f2d2..d1a4c2718 100644 --- a/src/ai/advisor.ts +++ b/src/ai/advisor.ts @@ -1,6 +1,6 @@ /** - * @file Spawn advisor — composes tier + route + billing + profile into ONE - * call so callers stop hand-wiring the AI stack layer by layer. Given a + * @file Spawn advisor — composes tier + route + billing + profile into ONE call + * so callers stop hand-wiring the AI stack layer by layer. Given a * `TaskClass` and a probed `RouteContext` (plus an optional * `BillingContext`), `adviseSpawn` resolves the capability tier * (`taskClassToTier`), orders the usable cross-engine candidates @@ -10,8 +10,8 @@ * I/O, no spawn: the caller still probes availability/billing once * (`billing-context.mts`) and hands the resulting `RouteContext` / * `BillingContext` in, then calls `spawnAiAgent` / `spawnTierWithFallback` - * with the advice. Modeled on the "advisor" pattern from Copilot-style - * CLIs: one seam a skill consults instead of importing four modules and + * with the advice. Modeled on the "advisor" pattern from Copilot-style CLIs: + * one entry point a skill consults instead of importing four modules and * reimplementing the same composition at every call site. */ diff --git a/src/ai/builtin.ts b/src/ai/builtin.ts index ce81d4498..4832c24c2 100644 --- a/src/ai/builtin.ts +++ b/src/ai/builtin.ts @@ -16,7 +16,7 @@ export type LanguageModelAvailability = | 'unavailable' /** - * Stable factory seam shared by Chrome and the native Node implementations. + * Stable factory boundary shared by Chrome and the native Node implementations. * The session is intentionally opaque while the Prompt API surface is still * changing across browser versions. */ diff --git a/src/ai/credentials.ts b/src/ai/credentials.ts index 3b7e76770..e1d311d04 100644 --- a/src/ai/credentials.ts +++ b/src/ai/credentials.ts @@ -17,7 +17,7 @@ * hook-point: the forthcoming biometric credential daemon slots in as a * layer between the env check and the keychain read inside `resolve()`'s * implementation — call sites here do not change when it lands. This module - * is the stable seam. + * is the stable injection point. */ import { resolve } from '../secrets/find' @@ -43,11 +43,11 @@ export type KeyedCredentialProvider = /** * The keyless on-device provider: a `local` engine (the `builtin.mts` - * LanguageModel seam / an injected local runner) that needs NO credential — it - * runs on the machine, so it is "always present with no token". It is a - * `CredentialProvider` so routing can name it uniformly, but it is deliberately - * NOT in `PROVIDER_CREDENTIALS` because there is nothing to resolve. Use - * `isKeylessProvider` to branch before a token lookup. + * LanguageModel injection point / an injected local runner) that needs NO + * credential — it runs on the machine, so it is "always present with no token". + * It is a `CredentialProvider` so routing can name it uniformly, but it is + * deliberately NOT in `PROVIDER_CREDENTIALS` because there is nothing to + * resolve. Use `isKeylessProvider` to branch before a token lookup. */ export const KEYLESS_PROVIDER = 'local' as const diff --git a/src/ai/exec.ts b/src/ai/exec.ts index e95aa158a..520312b65 100644 --- a/src/ai/exec.ts +++ b/src/ai/exec.ts @@ -1,15 +1,15 @@ /** - * @file Exec-backend seam: WHERE a shell command runs, a separate axis from - * WHICH model produced it (`ai/backends`). The lib owns the INTERFACE plus - * the cheap built-in `real` runner (the host shell via lib `spawn`); a - * SANDBOXED runner is INJECTED by the caller, never imported here. That keeps - * the small-dist lib free of a heavy sandbox dependency — Socket's sandbox - * of choice (`just-bash`, ~40MB incl. WASM) is owned by the wheelhouse hook / - * CI tooling and passed in, so a lib consumer that never sandboxes pays - * nothing. Layering: ExecRunner.run() — the injectable primitive (real | - * sandboxed) composed into ExecContext — { runners: { real, sandboxed? }, - * resolve(trust) } used by runShell(script, { context, trust }) — the - * ergonomic entry point Pick a runner by TRUST LEVEL, never by model. + * @file Exec-backend injection point: WHERE a shell command runs, a separate + * axis from WHICH model produced it (`ai/backends`). The lib owns the + * INTERFACE plus the cheap built-in `real` runner (the host shell via lib + * `spawn`); a SANDBOXED runner is INJECTED by the caller, never imported + * here. That keeps the small-dist lib free of a heavy sandbox dependency — + * Socket's sandbox of choice (`just-bash`, ~40MB incl. WASM) is owned by the + * wheelhouse hook / CI tooling and passed in, so a lib consumer that never + * sandboxes pays nothing. Layering: ExecRunner.run() — the injectable + * primitive (real | sandboxed) composed into ExecContext — { runners: { real, + * sandboxed? }, resolve(trust) } used by runShell(script, { context, trust }) + * — the ergonomic entry point Pick a runner by TRUST LEVEL, never by model. * `untrusted` resolves to the sandboxed runner — which a caller that hasn't * injected one cannot run, so `resolve` throws a clear "provide a sandboxed * runner" error rather than silently falling back to the host shell. Both diff --git a/src/ai/json.ts b/src/ai/json.ts index 59e6b17f6..f30b48450 100644 --- a/src/ai/json.ts +++ b/src/ai/json.ts @@ -5,7 +5,7 @@ * code fences, synonymous keys, an object that ends one `}` short, or prose * wrapped around the payload. The router already parses JSON out of model * output (`cost.mts` reads usage objects), so these tolerant, pure repair - * primitives live here as the shared seam: strip a fence, normalize + * primitives live here as the shared boundary: strip a fence, normalize * typographic punctuation, canonicalize keys, extract the first balanced * object, or close an under-terminated one. Every function is pure and * allocation-light, and each runs only on a REPAIR path after a strict parse diff --git a/src/ai/route.ts b/src/ai/route.ts index e9aafc11a..9deda39e0 100644 --- a/src/ai/route.ts +++ b/src/ai/route.ts @@ -29,9 +29,9 @@ import type { AiTier } from './tier' * A non-CLI, on-device engine. Distinct from `AiAgentName` (the agent CLIs that * drive `spawn.mts`'s per-agent switch and the `which` probe) so a keyless * local target is nameable WITHOUT widening the CLI unions. `builtin` is the - * `builtin.mts` LanguageModel seam (`getLanguageModel()`); the heavy provider - * impl is injected at the spawn layer (`spawn-local.mts`), never imported - * here. + * `builtin.mts` LanguageModel injection point (`getLanguageModel()`); the heavy + * provider impl is injected at the spawn layer (`spawn-local.mts`), never + * imported here. */ export type LocalEngineName = 'builtin' @@ -52,10 +52,10 @@ export interface CliTierCandidate { /** * A keyless on-device target: a `local` engine driven through the `builtin.mts` - * LanguageModel seam or an injected local provider (see `spawn-local.mts`). It - * carries `kind: 'local'`, `provider: 'local'` (keyless — no credential gates - * it), and a non-CLI `engine`. Reserved for grunt-tier TAIL rungs; never a - * chain head. + * LanguageModel injection point or an injected local provider (see + * `spawn-local.mts`). It carries `kind: 'local'`, `provider: 'local'` (keyless + * — no credential gates it), and a non-CLI `engine`. Reserved for grunt-tier + * TAIL rungs; never a chain head. */ export interface LocalTierCandidate { readonly effort: AiEffort | undefined @@ -98,9 +98,10 @@ export interface RouteContext { readonly keyed: ReadonlySet /** * Whether the keyless local engine is usable, probed once by the caller via - * the `builtin.mts` availability seam (`getLanguageModel().availability()` — - * see `isLocalEngineAvailable` in `spawn-local.mts`). Undefined/false means a - * `local` candidate is skipped, so callers that never probe are unaffected. + * the `builtin.mts` availability injection point + * (`getLanguageModel().availability()` — see `isLocalEngineAvailable` in + * `spawn-local.mts`). Undefined/false means a `local` candidate is skipped, + * so callers that never probe are unaffected. */ readonly localAvailable?: boolean | undefined } diff --git a/src/ai/spawn-local.ts b/src/ai/spawn-local.ts index 7a62cd492..d296d0204 100644 --- a/src/ai/spawn-local.ts +++ b/src/ai/spawn-local.ts @@ -1,5 +1,5 @@ /** - * @file Keyless on-device execution seam for a `local` TierCandidate, the + * @file Keyless on-device execution path for a `local` TierCandidate, the * non-CLI complement to `spawn.mts`. Where `spawnAiAgent` shells out to an * installed agent CLI, this drives an on-device LanguageModel and normalizes * the reply into the SAME `AgentSpawnResult` shape, so a caller (or @@ -10,7 +10,7 @@ * provider — a real on-device model such as odai — is INJECTED by the caller * and never imported here. That keeps the small-dist lib free of any model * dependency: a consumer that never routes local pays nothing, and the local - * engine is discovered lazily through the seam. + * engine is discovered lazily through the injection point. */ import { errorMessage } from '../errors/message' @@ -140,9 +140,9 @@ export function isLocalModelSession( * Tier-orchestration entry: run a `local` candidate for * `spawnTierWithFallback`. Maps the shared spawn options plus the candidate's * model onto a `LocalSpawnOptions`, defaults the provider to the built-in - * LanguageModel seam, and normalizes prototype-polluted input. Kept here (not - * inline in spawn.mts) so the null-proto normalization and provider default - * live beside the local seam they belong to. + * LanguageModel injection point, and normalizes prototype-polluted input. Kept + * here (not inline in spawn.mts) so the null-proto normalization and provider + * default live beside the local path they belong to. */ export async function runLocalTierSpawn( options: Pick, diff --git a/src/ai/spawn.ts b/src/ai/spawn.ts index 157d60862..1b3cd2abd 100644 --- a/src/ai/spawn.ts +++ b/src/ai/spawn.ts @@ -360,7 +360,7 @@ export async function spawnTierWithFallback( let last: { candidate: TierCandidate; result: AgentSpawnResult } | undefined for (let i = 0, { length } = candidates; i < length; i += 1) { const candidate = candidates[i]! - // A `local` candidate drives the keyless on-device seam (returning the same + // A `local` candidate drives the keyless on-device path (returning the same // AgentSpawnResult) so the fall-over logic below stays uniform across kinds. const result = candidate.kind === 'local' diff --git a/src/exe/smol/path.ts b/src/exe/smol/path.ts index 32bc95c1b..da518949b 100644 --- a/src/exe/smol/path.ts +++ b/src/exe/smol/path.ts @@ -5,10 +5,10 @@ * an in-C++ `findUp`). Returns `undefined` on stock Node, non-Node runtimes, * and on socket-btm binaries that haven't shipped the binding yet; callers * fall back to the JS implementation. Result is cached. The binding does not - * exist yet, since the plan is unbuilt. This accessor is the seam so that - * when it lands, only this file changes and `paths/walk`, `fs/access`, and - * `fs/find` light up natively. Today `getSmolPath()` is always `undefined` - * and the JS paths run. + * exist yet, since the plan is unbuilt. This accessor is the injection point + * so that when it lands, only this file changes and `paths/walk`, + * `fs/access`, and `fs/find` light up natively. Today `getSmolPath()` is + * always `undefined` and the JS paths run. */ import { isNodeBuiltin, requireBuiltin } from '../../node/module' diff --git a/src/fs/allowed-dirs-cache.ts b/src/fs/allowed-dirs-cache.ts index fe7073cc2..646728fd7 100644 --- a/src/fs/allowed-dirs-cache.ts +++ b/src/fs/allowed-dirs-cache.ts @@ -42,12 +42,12 @@ export function invalidatePathCache(): void { * module-init turn, so the circular import is fully wired before the call. * Guarded + self-rescheduling: in the require cycle (`allowed-dirs-cache → * shared → paths/socket → … → rewire`) the `registerCacheInvalidation` live - * binding can still be in its temporal dead zone when the first microtask - * fires under some import orders, throwing `registerCacheInvalidation is not - * defined`. Vitest loads many modules concurrently, so those orders do come - * up. Check that the binding is callable; if not, re-defer to the next - * microtask. The registration is a test-seam best-effort that lets path-rewire - * flush this cache, so a bounded retry that lands on a later turn is correct. A + * binding can still be in its temporal dead zone when the first microtask fires + * under some import orders, throwing `registerCacheInvalidation is not + * defined`. Vitest loads many modules concurrently, so those orders do come up. + * Check that the binding is callable; if not, re-defer to the next microtask. + * The registration is a test-injection best-effort that lets path-rewire flush + * this cache, so a bounded retry that lands on a later turn is correct. A * never-resolving binding, as in production where rewire is unused, simply * stops retrying without throwing. * diff --git a/src/github/cli.ts b/src/github/cli.ts index 1d76f9a3c..e3b5af3ce 100644 --- a/src/github/cli.ts +++ b/src/github/cli.ts @@ -30,7 +30,7 @@ import { safeDeleteSync } from '../fs/safe' /** * How long a `gh` invocation may run before it is killed. A CLI call that has - * not answered in this long is wedged rather than slow: `gh` does its own + * not answered in this long is unresponsive rather than slow: `gh` does its own * network retries well inside it. */ export const GH_DEFAULT_TIMEOUT_MS = 30_000 @@ -83,7 +83,7 @@ export interface GhResult { /** * Options for {@link runGh}. `body` is JSON text written to a temp file whose * path replaces {@link GH_BODY_PLACEHOLDER}. `spawnGh` is the injectable launch - * seam, so a test drives the runner without a `gh` binary present. + * injection point, so a test drives the runner without a `gh` binary present. */ export interface RunGhOptions { readonly body?: string | undefined diff --git a/src/node/fs.ts b/src/node/fs.ts index e135c822a..5df53e9cd 100644 --- a/src/node/fs.ts +++ b/src/node/fs.ts @@ -10,10 +10,11 @@ * capture when `getNodeFs` is unused. Was a lazy first-call loader; the * eager-but-guarded form keeps the browser-safe behavior while gaining the * load-time snapshot. Two surfaces: `getNodeFs()` returns the module object - * with LATE method lookup (spy-able — the test seam); the `fs` consts - * (`fsExistsSync`, `fsReadFileSync`, …) are method references FROZEN at - * load, tamper-proof against a method swap but not spy-able, for Socket's - * hot fs calls. Both stay browser-safe behind IS_NODE + `/*@__PURE__*\/`. + * with LATE method lookup (spy-able — the test injection point); the + * `fs` consts (`fsExistsSync`, `fsReadFileSync`, …) are method + * references FROZEN at load, tamper-proof against a method swap but not + * spy-able, for Socket's hot fs calls. Both stay browser-safe behind IS_NODE + * \+ `/*@__PURE__*\/`. */ import type * as NodeFs from 'node:fs' @@ -32,7 +33,7 @@ const nodeFs = IS_NODE ? /*@__PURE__*/ require('fs') : undefined // `getNodeFs()` returns the captured MODULE object; methods are looked up LATE // off it (`getNodeFs().existsSync(...)`). That is deliberate: the object // snapshot defends against `require.cache['fs']` redirection, while late method -// lookup keeps the test seam intact — a `vi.spyOn(getNodeFs(), 'existsSync')` +// lookup keeps the test injection point intact — a `vi.spyOn(getNodeFs(), 'existsSync')` // (or a direct property swap, as binary-cache.test does) is still observed. // For a HOT path that wants tamper-proof methods too (a method swap on the // captured object can't redirect a frozen ref), use the `fs` consts @@ -48,7 +49,7 @@ export function getNodeFs(): typeof NodeFs { // binding needed — verified), so a plain member read freezes the reference: // unlike `getNodeFs().existsSync`, a later `nodeFs.existsSync = evil` cannot // redirect these — the method-level twin of the object snapshot. Frozen refs -// are NOT spy-able — use `getNodeFs()` for the test-seam path; reach for these +// are NOT spy-able — use `getNodeFs()` for the test injection path; reach for these // only on a hot path that wants tamper-resistance. Exported as direct consts // (the `primordials/intl` shape) so there's no helper/getter to sort and no // `/*@__PURE__*/`-on-a-call concern; an unused const tree-shakes on its own. diff --git a/src/node/os.ts b/src/node/os.ts index ce6600f86..a63a7f663 100644 --- a/src/node/os.ts +++ b/src/node/os.ts @@ -24,7 +24,7 @@ export function getNodeOs(): typeof NodeOs { // ── Frozen hot-method snapshots ────────────────────────────────────── // Socket's hottest os methods, captured by reference at load off the // IS_NODE-gated module, which is undefined in a browser. Frozen refs aren't -// spy-able — use `getNodeOs()` for the test-seam path. See node/fs.ts for the +// spy-able — use `getNodeOs()` for the test injection path. See node/fs.ts for the // full two-surface rationale. export const osArch = nodeOs?.arch export const osHomedir = nodeOs?.homedir diff --git a/src/node/path.ts b/src/node/path.ts index 17b03e6c2..df51fbb98 100644 --- a/src/node/path.ts +++ b/src/node/path.ts @@ -27,7 +27,7 @@ export function getNodePath(): typeof NodePath { // IS_NODE-gated module, which is undefined in a browser. path methods are // standalone (no `this`), so a member read freezes the reference; a later // `nodePath.join = evil` can't redirect these. Frozen refs aren't spy-able — -// use `getNodePath()` for the test-seam path. Direct-const exports (the +// use `getNodePath()` for the test injection path. Direct-const exports (the // primordials/intl shape) keep it sort-clean + tree-shakable. export const pathBasename = nodePath?.basename export const pathDirname = nodePath?.dirname diff --git a/src/primordials/process.ts b/src/primordials/process.ts index 9b40430f2..9e3e70121 100644 --- a/src/primordials/process.ts +++ b/src/primordials/process.ts @@ -5,9 +5,9 @@ * is CALLED at access time off that captured object — so `vi.spyOn(process, * 'cwd')`, which mutates the same captured object, still intercepts. Binding * the method reference instead (`process.cwd.bind(process)`) would freeze it - * and break that test seam, so we deliberately keep the late call. Consumers - * read cwd / platform / env / argv through these instead of touching - * `process` directly; enforced Socket-wide by + * and break that test injection point, so we deliberately keep the late call. + * Consumers read cwd / platform / env / argv through these instead of + * touching `process` directly; enforced Socket-wide by * `socket/prefer-process-primordial`. This is the `process` leaf of the * node-module primordials: where `node/fs` / `node/path` lazy-load a `node:` * module behind a function, this captures the always-present `process` global diff --git a/src/process/open-url.ts b/src/process/open-url.ts index 77f9c1f53..ab0b404bc 100644 --- a/src/process/open-url.ts +++ b/src/process/open-url.ts @@ -80,9 +80,9 @@ export const NEW_WINDOW_BROWSERS: Readonly> = export const BROWSER_BINARY_ENV_VAR = 'SOCKET_BROWSER_BINARY' /** - * Set by a suite that MOCKS the spawn seam and wants to assert on the opener's - * invocation. Without it a test run never spawns at all, which is the safe - * default; with it the call proceeds into whatever the suite mocked. + * Set by a suite that MOCKS the spawn injection point and wants to assert on + * the opener's invocation. Without it a test run never spawns at all, which is + * the safe default; with it the call proceeds into whatever the suite mocked. */ export const ALLOW_SPAWN_ENV_VAR = 'SOCKET_OPEN_URL_ALLOW_SPAWN' @@ -152,15 +152,15 @@ export function openUrl( ...options, } as OpenUrlOptions const invocation = buildOpenUrlInvocation(url, options) - // A unit test must never launch a real browser, and mocking the spawn seam + // A unit test must never launch a real browser, and mocking the spawn injection point // is not enough on its own to guarantee it: this module can be reached // through a dynamic import several layers down, so a suite can mock - // `node:child_process`, miss the seam this actually uses, and open a window + // `node:child_process`, miss the injection point this actually uses, and open a window // on the developer's machine on every run. // // Default-deny under a runner, with two ways through: an injected `spawn`, // since a caller passing its own spy is asking to observe the call, or the - // ALLOW_SPAWN_ENV_VAR opt-in for a suite that mocked the seam and asserts + // ALLOW_SPAWN_ENV_VAR opt-in for a suite that mocked the injection point and asserts // on the invocation. Forgetting both costs an assertion, never a stray // window. if (skipUnderTestRunner && !options?.spawn && shouldSkipSpawn(env)) { @@ -194,7 +194,7 @@ export function pickOpenCommand(platform: NodeJS.Platform): string { /** * Options for {@link openUrl}. `platform` is injectable so a test can exercise * every opener branch on one host; it defaults to `process.platform`. `spawn` - * is the injectable launch seam; it defaults to {@link defaultOpenUrlSpawner}. + * is the injectable launch point; it defaults to {@link defaultOpenUrlSpawner}. * * `newWindow` opts into a NEW WINDOW rather than a tab, which needs a browser * binary rather than the platform opener. It is opt-in so every existing caller @@ -203,9 +203,9 @@ export function pickOpenCommand(platform: NodeJS.Platform): string { * reason `platform` is. * * `skipUnderTestRunner` (default: `true`) makes {@link openUrl} a no-op when - * {@link shouldSkipSpawn} detects a test runner and no `spawn` seam was - * injected, so a suite that reaches this module through layers of imports can - * never pop a real browser window. Pass `false` to launch anyway. + * {@link shouldSkipSpawn} detects a test runner and no `spawn` injection point + * was injected, so a suite that reaches this module through layers of imports + * can never pop a real browser window. Pass `false` to launch anyway. */ export interface OpenUrlOptions { readonly env?: Record | undefined diff --git a/src/process/spawn/pty.ts b/src/process/spawn/pty.ts index 8b9f16aa3..76332190c 100644 --- a/src/process/spawn/pty.ts +++ b/src/process/spawn/pty.ts @@ -56,8 +56,8 @@ export interface PtyInvocation { /** * Options for {@link ptyRun}. `platform` is injectable so a test can exercise a * non-host branch; it defaults to `process.platform`. `onStdout`/`onStderr` - * receive each decoded chunk as it arrives, the streaming seam that keeps the - * runner from hard-wiring writes to the parent's stdout. + * receive each decoded chunk as it arrives, the streaming boundary that keeps + * the runner from hard-wiring writes to the parent's stdout. */ export interface PtyRunOptions { readonly cwd?: string | undefined diff --git a/src/process/spawn/run.ts b/src/process/spawn/run.ts index 4ce3b1c66..39a5b84d4 100644 --- a/src/process/spawn/run.ts +++ b/src/process/spawn/run.ts @@ -49,9 +49,10 @@ export interface TeedRun { /** * Options for {@link runInheritTee}. `onStdout`/`onStderr` are the forwarding - * seam: each raw chunk goes to the matching sink as it arrives, defaulting to - * the parent's own stdout/stderr so the operator sees the stream live. A test - * injects sinks to observe the forwarding without touching the real streams. + * boundary: each raw chunk goes to the matching sink as it arrives, defaulting + * to the parent's own stdout/stderr so the operator sees the stream live. A + * test injects sinks to observe the forwarding without touching the real + * streams. */ export interface TeeRunOptions extends RunOptions { readonly onStderr?: ((chunk: Buffer) => void) | undefined diff --git a/src/secrets/addon.ts b/src/secrets/addon.ts index a252afba6..38cffd767 100644 --- a/src/secrets/addon.ts +++ b/src/secrets/addon.ts @@ -104,8 +104,8 @@ export function readSecretBiometric(slot: SecretSlot): string | undefined { } /** - * Test seam and embedder override. Passing an addon forces it; passing - * `undefined` forces ABSENCE (reads fall through). To return to lazy + * Test injection point and embedder override. Passing an addon forces it; + * passing `undefined` forces ABSENCE (reads fall through). To return to lazy * detection on the next read, pass `undefined` with `{ probe: true }`. */ export function setKeychainAddon( diff --git a/src/secrets/broker.ts b/src/secrets/broker.ts index edf494659..6b2e60800 100644 --- a/src/secrets/broker.ts +++ b/src/secrets/broker.ts @@ -22,7 +22,7 @@ import { getRuntimeSocketPath } from '../paths/socket' // and this client both compute (1 path, 1 reference). const PROTEUS_SOCKET_NAME = 'proteus' -// A live daemon answers within milliseconds; cap the wait so a wedged socket +// A live daemon answers within milliseconds; cap the wait so an unresponsive socket // can't stall credential resolution for the whole process. const BROKER_TIMEOUT_MS = 1000 diff --git a/src/secrets/oauth-pkce.ts b/src/secrets/oauth-pkce.ts index 7ed9797fa..e6f11f287 100644 --- a/src/secrets/oauth-pkce.ts +++ b/src/secrets/oauth-pkce.ts @@ -1,11 +1,11 @@ /** - * @file Pure seams for a client-side OAuth authorization-code flow: PKCE + * @file Pure helpers for a client-side OAuth authorization-code flow: PKCE * S256 pair generation (RFC 7636 §4), the RFC 8414 issuer-discovery URL, * the authorization URL the browser opens, and the loopback callback * parser (RFC 8252). Every function here is network-free so the whole * protocol surface is unit-testable; the flow driver — listener, browser * open, token exchange — lives with the caller. - * `./login`'s `loginWithSocketOauth()` adopts these seams in v7; until + * `./login`'s `loginWithSocketOauth()` adopts these helpers in v7; until * then it carries its own inline copies and both stand. */ diff --git a/src/term/effects/shimmer-keyframes.ts b/src/term/effects/shimmer-keyframes.ts index 7d00a6aba..3a37b2cd5 100644 --- a/src/term/effects/shimmer-keyframes.ts +++ b/src/term/effects/shimmer-keyframes.ts @@ -94,7 +94,7 @@ export function toShimmerKeyframes( } // Anchor t=1 to the same value as frame 0 so the loop wraps without a - // visible glitch at the seam. + // visible glitch at the boundary. for (let i = 0; i < textLength; i++) { const track = tracks[i]! track.times.push(1) diff --git a/test/unit/ai/advisor.test.mts b/test/unit/ai/advisor.test.mts index 5af9d2b9e..ff94a189c 100644 --- a/test/unit/ai/advisor.test.mts +++ b/test/unit/ai/advisor.test.mts @@ -1,5 +1,5 @@ /** - * @file Tests for ai/advisor — the composition seam over tier + route + + * @file Tests for ai/advisor — the composition boundary over tier + route + * billing + profile. Covers every TaskClass's default advice, the * billing-reorder path vs the no-billing fallback path, the caller * profileFloor override, and the empty-candidates (nothing installed + diff --git a/test/unit/ai/exec.test.mts b/test/unit/ai/exec.test.mts index 99d18bdd0..9db1f1917 100644 --- a/test/unit/ai/exec.test.mts +++ b/test/unit/ai/exec.test.mts @@ -1,5 +1,5 @@ /** - * @file Tests for the ai/exec injection seam. The lib ships the `real` runner, + * @file Tests for the ai/exec injection point. The lib ships the `real` runner, * which drives the host shell via spawn, and the ExecContext policy; the * sandboxed runner is INJECTED by the caller, so these tests inject a * trivial fake sandbox rather than pulling a real one. The `real` runner is diff --git a/test/unit/ai/spawn-local.test.mts b/test/unit/ai/spawn-local.test.mts index 2430a944a..75198ee35 100644 --- a/test/unit/ai/spawn-local.test.mts +++ b/test/unit/ai/spawn-local.test.mts @@ -1,5 +1,5 @@ /** - * @file Tests for ai/spawn-local — the keyless on-device execution seam. The + * @file Tests for ai/spawn-local — the keyless on-device execution path. The * built-in provider drives an injected LanguageModel factory; spawnLocalAgent * normalizes availability, generation, and failure into the AgentSpawnResult * shape a CLI spawn returns. diff --git a/test/unit/cli/check-primordials-render.test.mts b/test/unit/cli/check-primordials-render.test.mts index 51d671d89..fa4b0d1e8 100644 --- a/test/unit/cli/check-primordials-render.test.mts +++ b/test/unit/cli/check-primordials-render.test.mts @@ -1,8 +1,8 @@ /** * @file CLI plumbing shards for `socket-lib check primordials`: config-path * resolution, help rendering, and human-readable output. Split from - * check-primordials.test.mts along describe seams (500-line soft cap); the - * handler-boundary smoke tests stay in the base file. + * check-primordials.test.mts along describe boundaries (500-line soft cap); + * the handler-boundary smoke tests stay in the base file. */ import { mkdtempSync, promises as fs } from 'node:fs' diff --git a/test/unit/git/extended-real-ops.test.mts b/test/unit/git/extended-real-ops.test.mts index 49cf5334d..e59b735b8 100644 --- a/test/unit/git/extended-real-ops.test.mts +++ b/test/unit/git/extended-real-ops.test.mts @@ -1,7 +1,7 @@ /** * @file Extended integration tests for git utility functions against real * temporary git repositories. Split from extended.test.mts along the "real - * git operations" seam to stay under the file-line cap. Each test seeds a + * git operations" boundary to stay under the file-line cap. Each test seeds a * fresh temp repo and exercises actual repository state changes (init, add, * commit, rename, delete) through the git helpers. */ diff --git a/test/unit/github/cli.test.mts b/test/unit/github/cli.test.mts index 0e84f3e4b..fd6a23e23 100644 --- a/test/unit/github/cli.test.mts +++ b/test/unit/github/cli.test.mts @@ -4,7 +4,8 @@ * `-f` / `-F` split that only one of four copies got right, the temp-file * body that exists because the lib spawn leaves the child's stdin unwired, * and the resolve-don't-throw contract that lets a caller treat a 404 as a - * state. The spawn seam is injected, so no test needs a `gh` binary. + * state. The spawn injection point is injected, so no test needs a `gh` + * binary. */ import { describe, expect, it } from 'vitest' @@ -191,7 +192,7 @@ describe('runGh', () => { expect(result.stderr).toBe('gh not found') }) - it('carries the default timeout, since a wedged gh should not hang a run', async () => { + it('carries the default timeout, since an unresponsive gh should not hang a run', async () => { const calls: SpawnCall[] = [] await runGh(['auth'], { spawnGh: scriptedSpawn(calls, {}) }) // The literal, not the constant: importing it from the module under test diff --git a/test/unit/github/refs-write.test.mts b/test/unit/github/refs-write.test.mts index 5143adbc6..cd30c184c 100644 --- a/test/unit/github/refs-write.test.mts +++ b/test/unit/github/refs-write.test.mts @@ -1,6 +1,6 @@ /** * @file Unit tests for the GitHub git-refs write helpers. The transport is - * mocked with nock at the node:http seam, the same way the refs read / + * mocked with nock at the node:http boundary, the same way the refs read / * request tests mock GitHub — request bodies, methods, and auth headers are * asserted on the intercepted calls; nothing reaches the network. */ diff --git a/test/unit/process/open-url.test.mts b/test/unit/process/open-url.test.mts index 42794d4cc..1eb7da45a 100644 --- a/test/unit/process/open-url.test.mts +++ b/test/unit/process/open-url.test.mts @@ -24,9 +24,9 @@ import type { OpenUrlSpawnOptions } from '../../../src/process/open-url' // Observe the DEFAULT spawner's launch path without ever spawning: the // default lane reaches node:child_process through the lazy getNodeChildProcess -// seam, so mocking that module records what would have launched. The stub +// injection point, so mocking that module records what would have launched. The stub // carries only the surface the default spawner touches (spawn → on/unref), -// hence the cast to the seam's full module type. +// hence the cast to the injection point's full module type. const nodeSpawnCalls = vi.hoisted( () => [] as Array<{ args: readonly string[]; command: string }>, ) @@ -265,7 +265,7 @@ describe('openUrl skip-under-test-runner', () => { expect(nodeSpawnCalls[0]!.command).toBe('xdg-open') }) - it('proceeds into an injected spawn seam — the spy is asking to observe', () => { + it('proceeds into an injected spawn boundary — the spy is asking to observe', () => { const launches: Launch[] = [] openUrl(URL, { platform: 'darwin', spawn: recordingSpawner(launches) }) expect(launches).toHaveLength(1) diff --git a/test/unit/secrets/addon.test.mts b/test/unit/secrets/addon.test.mts index 88a965792..8a2f911f2 100644 --- a/test/unit/secrets/addon.test.mts +++ b/test/unit/secrets/addon.test.mts @@ -1,11 +1,11 @@ /** * @file Unit tests for `secrets/addon` — the sockeye `keychain.node` biometric * backend. The native addon is absent in CI by design, so these drive the - * `setKeychainAddon` seam: the contract under test is the SELF-GATING — - * absence, a missing item, and a cancelled Touch ID prompt (a throw from the - * Secure-Enclave ACL) must all read as `undefined`/`false` fall-throughs, - * never as errors, because `resolve()` treats this layer exactly like the - * broker: dormant unless it can answer. + * `setKeychainAddon` injection point: the contract under test is the + * SELF-GATING — absence, a missing item, and a cancelled Touch ID prompt (a + * throw from the Secure-Enclave ACL) must all read as `undefined`/`false` + * fall-throughs, never as errors, because `resolve()` treats this layer + * exactly like the broker: dormant unless it can answer. */ import { afterEach, describe, expect, it, vi } from 'vitest' diff --git a/test/unit/secrets/oauth-pkce.test.mts b/test/unit/secrets/oauth-pkce.test.mts index 460037ad1..e582c7d25 100644 --- a/test/unit/secrets/oauth-pkce.test.mts +++ b/test/unit/secrets/oauth-pkce.test.mts @@ -1,5 +1,5 @@ /** - * @file Unit tests for the pure OAuth PKCE seams. The S256 relationship is + * @file Unit tests for the pure OAuth PKCE helpers. The S256 relationship is * re-derived with node:crypto rather than trusted; the discovery URL cases * cover the RFC 8414 path-inserted form; the callback parser cases walk the * RFC 8252 loopback shapes — success, provider error, state mismatch, and a From e38f83ffecf073bf9688920cea7768b1f7494c94 Mon Sep 17 00:00:00 2001 From: jdalton Date: Sat, 15 Aug 2026 03:07:51 -0400 Subject: [PATCH 2/2] fix(build): realign the lockfile so frozen installs work again MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ERR_PNPM_LOCKFILE_CONFIG_MISMATCH: the lockfile's catalogs block drifted from pnpm-workspace.yaml's catalog config (broken on main — every recent CI run fails the frozen install in setup-and-install). Regenerated with pnpm install --no-frozen-lockfile; the workspace yaml and .gitignore are untouched. The catalog entries refresh within their declared ranges; pnpm install --frozen-lockfile now passes. --- pnpm-lock.yaml | 667 +++++++++++++++++++++++++------------------------ 1 file changed, 338 insertions(+), 329 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4df5469d5..3a42f3eda 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -206,8 +206,8 @@ settings: catalogs: default: '@playwright/mcp': - specifier: 0.0.78 - version: 0.0.78 + specifier: 0.0.79 + version: 0.0.79 '@redwoodjs/agent-ci': specifier: 0.17.1 version: 0.17.1 @@ -227,8 +227,8 @@ catalogs: specifier: 4.0.4 version: 4.0.4 '@types/node': - specifier: 26.1.2 - version: 26.1.2 + specifier: 26.2.0 + version: 26.2.0 '@types/semver': specifier: 7.8.0 version: 7.8.0 @@ -329,8 +329,8 @@ catalogs: specifier: 4.0.2 version: 4.0.2 taze: - specifier: 19.17.2 - version: 19.17.2 + specifier: 20.0.0 + version: 20.0.0 typescript: specifier: 7.0.2 version: 7.0.2 @@ -374,7 +374,7 @@ overrides: ssri@>=12: 13.0.1 string-width@>=5: 8.2.2 tinyexec: 1.3.0 - typebox: 1.3.10 + typebox: 1.3.11 undici@<6: 6.28.0 update-notifier@>=4.0.0: 7.3.1 uuid: 11.1.1 @@ -476,7 +476,7 @@ patchedDependencies: minipass-sized@1.0.3: 2048620f836b8d07ca6b41a3500944fe7a43fb7542aa6d45bceb405afa513738 node-gyp@12.4.0: 140ba43d43d74f7d3577feb3f8a6efad544dbb0059784102b144a0e2daa437f9 pony-cause@2.1.11: 39b2eb2567818b7c60126d03e252dbbabd8738082fca850582300d45b0a8cfb8 - taze@19.17.2: 7c18a31c38b364e6289a527b92d7fc919760b2cb9795dc8e5dc11fd02b8498f6 + taze@20.0.0: c86e6ad40e739f1381b0d847ea27f334a26a834a7c837d0406ffdfed85f98f9a importers: @@ -496,22 +496,22 @@ importers: version: 7.29.7 '@inquirer/checkbox': specifier: 5.2.1 - version: 5.2.1(@types/node@26.1.2) + version: 5.2.1(@types/node@26.2.0) '@inquirer/confirm': specifier: 6.1.1 - version: 6.1.1(@types/node@26.1.2) + version: 6.1.1(@types/node@26.2.0) '@inquirer/input': specifier: 5.1.2 - version: 5.1.2(@types/node@26.1.2) + version: 5.1.2(@types/node@26.2.0) '@inquirer/password': specifier: 5.1.1 - version: 5.1.1(@types/node@26.1.2) + version: 5.1.1(@types/node@26.2.0) '@inquirer/search': specifier: 4.2.1 - version: 4.2.1(@types/node@26.1.2) + version: 4.2.1(@types/node@26.2.0) '@inquirer/select': specifier: 5.2.1 - version: 5.2.1(@types/node@26.1.2) + version: 5.2.1(@types/node@26.2.0) '@npmcli/arborist': specifier: 9.9.0 version: 9.9.0(supports-color@10.2.2) @@ -526,7 +526,7 @@ importers: version: 0.5.1220 '@playwright/mcp': specifier: 'catalog:' - version: 0.0.78 + version: 0.0.79 '@redwoodjs/agent-ci': specifier: 'catalog:' version: 0.17.1(supports-color@10.2.2) @@ -565,7 +565,7 @@ importers: version: 4.0.4 '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 '@types/semver': specifier: 'catalog:' version: 7.8.0 @@ -583,7 +583,7 @@ importers: version: 4.1.10(vitest@4.1.10) '@vitiate/core': specifier: 'catalog:' - version: 0.3.1(typescript@7.0.2)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(yaml@2.9.0))(vitest@4.1.10) + version: 0.3.1(typescript@7.0.2)(vite@8.2.0(@types/node@26.2.0)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(yaml@2.9.0))(vitest@4.1.10) '@yarnpkg/extensions': specifier: 2.0.7 version: 2.0.7(@yarnpkg/core@4.9.1(patch_hash=90d84a2833b418e806d5458847773c4c9104fc8e8aa2fa3971f1fd0a68bad1c9)(typanion@3.14.0)) @@ -754,7 +754,7 @@ importers: version: 3.2.0 taze: specifier: 'catalog:' - version: 19.17.2(patch_hash=7c18a31c38b364e6289a527b92d7fc919760b2cb9795dc8e5dc11fd02b8498f6) + version: 20.0.0(patch_hash=c86e6ad40e739f1381b0d847ea27f334a26a834a7c837d0406ffdfed85f98f9a) terminal-link: specifier: 2.1.1 version: 2.1.1 @@ -762,8 +762,8 @@ importers: specifier: 2.30.1 version: 2.30.1(typescript@7.0.2) typebox: - specifier: 1.3.10 - version: 1.3.10 + specifier: 1.3.11 + version: 1.3.11 typescript: specifier: 'catalog:' version: 7.0.2 @@ -772,10 +772,10 @@ importers: version: 6.0.2 vitest: specifier: 'catalog:' - version: 4.1.10(@types/node@26.1.2)(@vitest/coverage-v8@4.1.10)(@vitest/ui@4.1.10)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(yaml@2.9.0)) + version: 4.1.10(@types/node@26.2.0)(@vitest/coverage-v8@4.1.10)(@vitest/ui@4.1.10)(vite@8.2.0(@types/node@26.2.0)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(yaml@2.9.0)) vitiate: specifier: 'catalog:' - version: 0.3.1(typescript@7.0.2)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(yaml@2.9.0))(vitest@4.1.10) + version: 0.3.1(typescript@7.0.2)(vite@8.2.0(@types/node@26.2.0)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(yaml@2.9.0))(vitest@4.1.10) webpack: specifier: 5.109.2 version: 5.109.2(@swc/core@1.15.43)(csso@5.0.5)(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.25) @@ -800,13 +800,13 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/adversarial-review-nudge: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/agents-skills-mirror-nudge: dependencies: @@ -816,7 +816,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/ai-config-drift-nudge: dependencies: @@ -826,7 +826,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/ai-config-poisoning-guard: dependencies: @@ -836,7 +836,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/alpha-sort-nudge: dependencies: @@ -846,19 +846,19 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/answer-questions-nudge: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/answer-status-requests-nudge: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/anti-prose-guard: dependencies: @@ -868,13 +868,13 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/ask-suppression-nudge: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/auth-rotation-nudge: dependencies: @@ -884,13 +884,13 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/brew-supply-chain-guard: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/broken-hook-detector: dependencies: @@ -903,7 +903,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/bump-defers-to-release-guard: dependencies: @@ -916,7 +916,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/bundle-flags-guard: dependencies: @@ -926,7 +926,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/bundle-stale-reminder: dependencies: @@ -936,19 +936,19 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/c8-ignore-reason-guard: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/cascade-first-triage-nudge: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/cascade-graph-defers-to-script-guard: dependencies: @@ -958,7 +958,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/catch-message-guard: dependencies: @@ -968,7 +968,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/cdn-allowlist-guard: devDependencies: @@ -977,7 +977,7 @@ importers: version: '@socketsecurity/lib@6.7.0(patch_hash=6013bc5930e8dc12861356e4d5a6affc9c860745c8c0cfdabb4ec9fc635009af)(typescript@7.0.2)' '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/changelog-entry-shape-nudge: dependencies: @@ -987,13 +987,13 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/changelog-no-empty-guard: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/check-new-deps: dependencies: @@ -1009,7 +1009,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/claude-code-action-lockdown-guard: dependencies: @@ -1019,7 +1019,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/claude-lockdown-guard: dependencies: @@ -1029,19 +1029,19 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/claude-md-defer-detail-nudge: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/claude-md-rule-add-guard: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/claude-md-section-size-guard: dependencies: @@ -1051,7 +1051,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/claude-md-size-guard: dependencies: @@ -1061,7 +1061,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/claude-segmentation-guard: devDependencies: @@ -1070,7 +1070,7 @@ importers: version: '@socketsecurity/lib@6.7.0(patch_hash=6013bc5930e8dc12861356e4d5a6affc9c860745c8c0cfdabb4ec9fc635009af)(typescript@7.0.2)' '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/clone-reviewed-repo-nudge: devDependencies: @@ -1079,7 +1079,7 @@ importers: version: '@socketsecurity/lib@6.7.0(patch_hash=6013bc5930e8dc12861356e4d5a6affc9c860745c8c0cfdabb4ec9fc635009af)(typescript@7.0.2)' '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/codex-no-write-guard: dependencies: @@ -1089,13 +1089,13 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/codex-session-budget-guard: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/commit-author-guard: dependencies: @@ -1105,25 +1105,25 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/commit-cadence-nudge: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/commit-message-format-guard: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/commit-pr-nudge: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/commit-size-nudge: dependencies: @@ -1133,19 +1133,19 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/compound-lessons-nudge: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/consumer-grep-nudge: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/convo-prose-nudge: devDependencies: @@ -1154,7 +1154,7 @@ importers: version: '@socketsecurity/lib@6.7.0(patch_hash=6013bc5930e8dc12861356e4d5a6affc9c860745c8c0cfdabb4ec9fc635009af)(typescript@7.0.2)' '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/corrupt-rebase-guard: dependencies: @@ -1164,7 +1164,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/cross-repo-guard: dependencies: @@ -1174,7 +1174,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/dated-citation-guard: dependencies: @@ -1184,13 +1184,13 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/default-branch-guard: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/denied-domain-reference-guard: dependencies: @@ -1200,7 +1200,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/dep-derived-source-nudge: dependencies: @@ -1210,7 +1210,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/dirty-lockfile-nudge: dependencies: @@ -1220,7 +1220,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/dirty-worktree-stop-guard: dependencies: @@ -1230,13 +1230,13 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/disowned-dirt-guard: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/dogfood-cascade-nudge: dependencies: @@ -1246,31 +1246,31 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/dont-blame-nudge: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/dont-stop-mid-queue-nudge: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/drift-check-nudge: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/enqueue-dont-pivot-nudge: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/enterprise-push-nudge: dependencies: @@ -1283,7 +1283,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/error-message-quality-nudge: dependencies: @@ -1293,13 +1293,13 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/excuse-detector: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/file-size-nudge: dependencies: @@ -1309,7 +1309,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/fixes-need-tests-nudge: dependencies: @@ -1319,13 +1319,13 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/follow-direct-imperative-nudge: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/generic-export-name-nudge: dependencies: @@ -1335,7 +1335,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/gh-token-hygiene-guard: dependencies: @@ -1348,7 +1348,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/git-config-write-guard: dependencies: @@ -1358,13 +1358,13 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/git-identity-drift-nudge: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/gitmodules-comment-guard: dependencies: @@ -1376,13 +1376,13 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/handoff-command-nudge: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/headroom-proxy-start: dependencies: @@ -1398,7 +1398,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/immutable-release-guard: dependencies: @@ -1408,13 +1408,13 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/inline-script-defer-guard: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/judgment-nudge: dependencies: @@ -1424,13 +1424,13 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/keep-working-while-waiting-nudge: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/land-as-you-go-nudge: dependencies: @@ -1440,7 +1440,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/land-fast-nudge: devDependencies: @@ -1449,7 +1449,7 @@ importers: version: '@socketsecurity/lib@6.7.0(patch_hash=6013bc5930e8dc12861356e4d5a6affc9c860745c8c0cfdabb4ec9fc635009af)(typescript@7.0.2)' '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/lock-step-ref-nudge: dependencies: @@ -1459,7 +1459,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/logger-guard: dependencies: @@ -1469,7 +1469,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/markdown-filename-guard: dependencies: @@ -1479,7 +1479,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/mass-delete-guard: dependencies: @@ -1492,19 +1492,19 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/memory-codify-nudge: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/memory-enforcement-stamp-guard: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/minimum-release-age-guard: dependencies: @@ -1514,7 +1514,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/mixed-clock-recency-guard: dependencies: @@ -1524,7 +1524,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/module-noun-name-guard: dependencies: @@ -1534,7 +1534,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/new-hook-claude-md-guard: dependencies: @@ -1544,19 +1544,19 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/no-blanket-file-exclusion-guard: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/no-blind-keychain-read-guard: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/no-boolean-trap-guard: dependencies: @@ -1566,7 +1566,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/no-branch-reuse-nudge: dependencies: @@ -1576,13 +1576,13 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/no-chained-pausing-git-guard: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/no-copyleft-source-read: dependencies: @@ -1592,13 +1592,13 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/no-corepack-guard: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/no-description-aside-guard: dependencies: @@ -1608,7 +1608,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/no-designated-ignore-guard: dependencies: @@ -1618,7 +1618,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/no-direct-linter-guard: devDependencies: @@ -1627,13 +1627,13 @@ importers: version: '@socketsecurity/lib@6.7.0(patch_hash=6013bc5930e8dc12861356e4d5a6affc9c860745c8c0cfdabb4ec9fc635009af)(typescript@7.0.2)' '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/no-disable-lint-rule-guard: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/no-duplicate-pr-guard: dependencies: @@ -1643,7 +1643,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/no-empty-commit-guard: dependencies: @@ -1653,7 +1653,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/no-env-kill-switch-guard: dependencies: @@ -1663,7 +1663,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/no-ext-issue-ref-guard: dependencies: @@ -1673,13 +1673,13 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/no-file-oxlint-disable-guard: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/no-fleet-fork-guard: dependencies: @@ -1689,7 +1689,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/no-fleet-pr-to-main-guard: dependencies: @@ -1699,19 +1699,19 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/no-fleet-scope-in-non-member-guard: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/no-force-push-guard: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/no-github-ai-attribution-guard: dependencies: @@ -1721,7 +1721,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/no-hook-cmd-regex-guard: dependencies: @@ -1731,7 +1731,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/no-meta-comments-guard: dependencies: @@ -1741,7 +1741,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/no-new-config-guard: dependencies: @@ -1751,7 +1751,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/no-non-fleet-push-guard: dependencies: @@ -1761,7 +1761,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/no-npm-otp-flag-guard: dependencies: @@ -1771,7 +1771,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/no-orphaned-staging: dependencies: @@ -1781,13 +1781,13 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/no-other-linters-guard: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/no-pkgjson-pnpm-overrides-guard: dependencies: @@ -1797,7 +1797,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/no-placeholder-commit-subject-guard: dependencies: @@ -1807,7 +1807,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/no-platform-import-guard: dependencies: @@ -1817,7 +1817,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/no-pm-exec-guard: devDependencies: @@ -1826,25 +1826,25 @@ importers: version: '@socketsecurity/lib@6.7.0(patch_hash=6013bc5930e8dc12861356e4d5a6affc9c860745c8c0cfdabb4ec9fc635009af)(typescript@7.0.2)' '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/no-pr-from-default-branch-guard: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/no-pr-from-default-checkout-guard: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/no-pr-in-squash-repo-guard: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/no-pr-review-verdict-guard: dependencies: @@ -1854,7 +1854,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/no-premature-commit-kill-guard: devDependencies: @@ -1863,13 +1863,13 @@ importers: version: '@socketsecurity/lib@6.7.0(patch_hash=6013bc5930e8dc12861356e4d5a6affc9c860745c8c0cfdabb4ec9fc635009af)(typescript@7.0.2)' '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/no-primary-branch-switch: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/no-private-path-in-source-guard: dependencies: @@ -1879,7 +1879,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/no-private-ref-in-tests-docs-guard: dependencies: @@ -1889,7 +1889,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/no-private-repo-leak-guard: dependencies: @@ -1899,7 +1899,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/no-raw-gh-auth-login-guard: dependencies: @@ -1912,7 +1912,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/no-registry-mutation-in-repo-script-nudge: dependencies: @@ -1922,13 +1922,13 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/no-removal-comment-nudge: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/no-repo-scope-in-fleet-config-guard: dependencies: @@ -1938,7 +1938,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/no-revert-guard: dependencies: @@ -1951,7 +1951,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/no-self-referential-symlink-guard: dependencies: @@ -1961,7 +1961,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/no-strip-types-guard: dependencies: @@ -1971,13 +1971,13 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/no-subagent-commit-guard: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/no-tail-install-out-guard: dependencies: @@ -1987,7 +1987,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/no-test-in-scripts-guard: dependencies: @@ -1997,25 +1997,25 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/no-token-in-dotenv-guard: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/no-total-squash-guard: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/no-tsx-guard: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/no-underscore-ident-guard: dependencies: @@ -2025,7 +2025,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/no-unisolated-git-fixture-guard: dependencies: @@ -2035,7 +2035,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/no-unmocked-net-guard: dependencies: @@ -2045,7 +2045,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/no-upstream-gitlink-guard: dependencies: @@ -2055,7 +2055,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/no-verify-format-nudge: dependencies: @@ -2065,7 +2065,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/no-version-bump-pr-guard: dependencies: @@ -2075,19 +2075,19 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/no-wheelhouse-pr-guard: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/node-modules-staging-guard: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/non-fleet-pr-issue-ask-guard: dependencies: @@ -2099,7 +2099,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/npm-otp-flow-nudge: dependencies: @@ -2109,7 +2109,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/npmrc-trust-optout-guard: dependencies: @@ -2119,7 +2119,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/options-param-naming-guard: dependencies: @@ -2134,7 +2134,7 @@ importers: version: '@socketsecurity/lib@6.7.0(patch_hash=6013bc5930e8dc12861356e4d5a6affc9c860745c8c0cfdabb4ec9fc635009af)(typescript@7.0.2)' '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/overeager-staging-guard: dependencies: @@ -2147,7 +2147,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/oxlint-plugin-load-nudge: dependencies: @@ -2157,7 +2157,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/package-manager-auto-update-guard: devDependencies: @@ -2166,25 +2166,25 @@ importers: version: '@socketsecurity/lib@6.7.0(patch_hash=6013bc5930e8dc12861356e4d5a6affc9c860745c8c0cfdabb4ec9fc635009af)(typescript@7.0.2)' '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/parallel-agent-edit-guard: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/parallel-agent-on-stop-nudge: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/parallel-agent-removal-nudge: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/parallel-agent-staging-guard: dependencies: @@ -2194,13 +2194,13 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/parallel-spawn-nudge: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/path-guard: dependencies: @@ -2216,7 +2216,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/paths-mts-inherit-guard: dependencies: @@ -2226,13 +2226,13 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/personal-path-guard: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/plan-location-guard: dependencies: @@ -2242,19 +2242,19 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/plan-review-nudge: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/pnpm-filter-zero-match-nudge: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/pointer-comment-nudge: dependencies: @@ -2267,13 +2267,13 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/post-push-ci-monitor-nudge: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/pr-vs-push-default-nudge: dependencies: @@ -2283,13 +2283,13 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/pre-commit-race-nudge: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/prefer-async-spawn-guard: dependencies: @@ -2299,13 +2299,13 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/prefer-evergreen-target-nudge: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/prefer-fn-decl-guard: dependencies: @@ -2315,7 +2315,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/prefer-json-clone-guard: dependencies: @@ -2331,7 +2331,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/prefer-rebase-over-revert-nudge: dependencies: @@ -2344,13 +2344,13 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/prefer-type-import-guard: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/prefer-vitest-guard: dependencies: @@ -2360,7 +2360,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/primary-checkout-branch-guard: dependencies: @@ -2370,7 +2370,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/primary-checkout-on-default-stop-guard: dependencies: @@ -2380,13 +2380,13 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/private-name-nudge: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/proc-environ-exfil-guard: dependencies: @@ -2396,7 +2396,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/prompt-injection-guard: dependencies: @@ -2406,7 +2406,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/provenance-publish-nudge: dependencies: @@ -2416,13 +2416,13 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/public-surface-nudge: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/pull-request-target-guard: dependencies: @@ -2432,13 +2432,13 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/push-protected-branch-guard: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/readme-fleet-shape-guard: dependencies: @@ -2448,7 +2448,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/release-defers-to-script-guard: dependencies: @@ -2458,7 +2458,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/release-tag-tied-guard: dependencies: @@ -2468,7 +2468,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/release-workflow-guard: dependencies: @@ -2481,13 +2481,13 @@ importers: version: '@socketsecurity/lib@6.7.0(patch_hash=6013bc5930e8dc12861356e4d5a6affc9c860745c8c0cfdabb4ec9fc635009af)(typescript@7.0.2)' '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/reply-prose-nudge: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/report-location-guard: dependencies: @@ -2497,7 +2497,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/reserved-script-dir-guard: dependencies: @@ -2507,7 +2507,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/rg-replace-flag-guard: devDependencies: @@ -2516,7 +2516,7 @@ importers: version: '@socketsecurity/lib@6.7.0(patch_hash=6013bc5930e8dc12861356e4d5a6affc9c860745c8c0cfdabb4ec9fc635009af)(typescript@7.0.2)' '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/rust-target-sweep-nudge: dependencies: @@ -2526,7 +2526,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/scan-label-in-commit-guard: dependencies: @@ -2536,7 +2536,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/secret-content-guard: devDependencies: @@ -2545,19 +2545,19 @@ importers: version: '@socketsecurity/lib@6.7.0(patch_hash=6013bc5930e8dc12861356e4d5a6affc9c860745c8c0cfdabb4ec9fc635009af)(typescript@7.0.2)' '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/sed-in-place-guard: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/session-handoff-nudge: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/setup-basics-tools: dependencies: @@ -2567,7 +2567,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/setup-claude-scanners: dependencies: @@ -2577,7 +2577,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/setup-firewall: dependencies: @@ -2587,7 +2587,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/setup-misc-tools: dependencies: @@ -2597,7 +2597,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/setup-security-tools: dependencies: @@ -2616,25 +2616,25 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/shallow-clone-guard: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/single-lander-guard: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/skill-usage-logger: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/small-pr-nudge: dependencies: @@ -2644,7 +2644,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/soak-exclude-date-guard: dependencies: @@ -2660,7 +2660,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/soak-pin-needs-annotation-guard: dependencies: @@ -2670,13 +2670,13 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/squash-freeze-boundary-guard: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/squash-history-nudge: dependencies: @@ -2686,7 +2686,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/stale-process-sweeper: dependencies: @@ -2698,7 +2698,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/stop-means-commit-guard: dependencies: @@ -2708,7 +2708,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/sweep-ds-store: dependencies: @@ -2718,7 +2718,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/target-arch-env-guard: dependencies: @@ -2728,7 +2728,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/test-script-defers-guard: dependencies: @@ -2738,7 +2738,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/token-guard: {} @@ -2746,13 +2746,13 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/trust-downgrade-guard: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/tsc-canonical-tsconfig-guard: dependencies: @@ -2762,7 +2762,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/unaddressed-review-feedback-guard: dependencies: @@ -2775,7 +2775,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/unbacked-claim-commit-guard: dependencies: @@ -2785,13 +2785,13 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/uncodified-lesson-nudge: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/uncommitted-sweep-nudge: dependencies: @@ -2801,7 +2801,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/unpushed-main-nudge: devDependencies: @@ -2810,13 +2810,13 @@ importers: version: '@socketsecurity/lib@6.7.0(patch_hash=6013bc5930e8dc12861356e4d5a6affc9c860745c8c0cfdabb4ec9fc635009af)(typescript@7.0.2)' '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/untrusted-coauthor-guard: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/untrusted-content-directive-nudge: dependencies: @@ -2826,19 +2826,19 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/upstream-is-read-only-guard: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/use-repo-test-script-guard: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/uses-sha-verify-guard: dependencies: @@ -2850,13 +2850,13 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/verify-absence-claims-nudge: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/verify-render-pre-commit-nudge: dependencies: @@ -2866,7 +2866,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/version-bump-order-guard: dependencies: @@ -2879,7 +2879,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/vitest-vs-node-test-guard: dependencies: @@ -2889,7 +2889,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/wheelhouse-drift-guard: dependencies: @@ -2899,7 +2899,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/workflow-multiline-body-guard: dependencies: @@ -2909,7 +2909,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .claude/hooks/fleet/workflow-uses-comment-guard: dependencies: @@ -2925,7 +2925,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 26.1.2 + version: 26.2.0 .config/fleet/oxlint-plugin: dependencies: @@ -3034,6 +3034,8 @@ importers: .config/fleet/oxlint-plugin/fleet/no-runtime-features-below-engine-floor: {} + .config/fleet/oxlint-plugin/fleet/no-shop-metaphor-jargon: {} + .config/fleet/oxlint-plugin/fleet/no-source-content-tests: {} .config/fleet/oxlint-plugin/fleet/no-source-sniffing: {} @@ -4069,8 +4071,8 @@ packages: engines: {node: '>=16'} hasBin: true - '@playwright/mcp@0.0.78': - resolution: {integrity: sha512-XLTUeA6mEN9sQ+hJ4dfG8EIkDbxS0K3Trc2RBkUJuf02TgE2FQRNTMtq/aJfhyRMINsRl/Ybc4sxcWLtFn4/TQ==} + '@playwright/mcp@0.0.79': + resolution: {integrity: sha512-VpqD4a3vFyGQMY9sh3UJiO6wjcurggkljKfAyCHL0QWGY5m6Ehr3MNsAAHPDHO//n13g0PCjpHatAOiulrqdZQ==} engines: {node: '>=18'} hasBin: true @@ -4440,6 +4442,9 @@ packages: '@types/node@26.1.2': resolution: {integrity: sha512-Vu4a5UFA9rIIFJ7rB/Vaafh9lrCQszopTCx6KjFboXTGQbPNasehVR5TEiithSDGyd1DEiUByggTZsg8jukeIg==} + '@types/node@26.2.0': + resolution: {integrity: sha512-5IviulTZeRNp2vAJ514cc/HUlY5nZ9fCbq9DMyC52BrhFZACo3nI0R7qBxhQmo/d27NFe96ur/b7Wwxklda+kg==} + '@types/responselike@1.0.3': resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} @@ -6323,18 +6328,18 @@ packages: resolution: {integrity: sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==} engines: {node: '>=16.20.0'} - playwright-core@1.62.0-alpha-1783623505000: - resolution: {integrity: sha512-CPJZdsA/KGT2QQlekiV6Wt+QlQrZHVSZ6oiNtOI/bYYOIVLM8jfKGWTM4zQiyd4UN+40Cq4cA6lxmZHZbtPvJQ==} + playwright-core@1.62.1: + resolution: {integrity: sha512-wPYSwEBJY9GHraISXqyqtx0na0LpO3XEX7jNDhntbex7tzUS7kLnZsOlFruFJB4Hi/rhDMjXGqHewDZ68nYZVw==} engines: {node: '>=20'} hasBin: true - playwright-core@1.62.1: - resolution: {integrity: sha512-wPYSwEBJY9GHraISXqyqtx0na0LpO3XEX7jNDhntbex7tzUS7kLnZsOlFruFJB4Hi/rhDMjXGqHewDZ68nYZVw==} + playwright-core@1.63.0-alpha-2026-08-05: + resolution: {integrity: sha512-YussvUybTfBtyYbGXWh43f+5kNP03wg98M6mu4DphYET7PSbNVajsdLGjWE1xrsjqOw32i2wFlRP7U5mcOpMZg==} engines: {node: '>=20'} hasBin: true - playwright@1.62.0-alpha-1783623505000: - resolution: {integrity: sha512-6KV9h4PP3hqu4NaGdxxcijWfYh9LJcFI/R2sP4TTC4I5cFo3oRawN0ETlW5MkE3cQEgKhhoj0KUNz4sfpCT0Tg==} + playwright@1.63.0-alpha-2026-08-05: + resolution: {integrity: sha512-zbGZUK+JYkoDV3cUgfvh2czTBJL34Gmz5gHVI25xiIpvYSR17Q1M7TS8hnwECUe+IkKaeXbKrSyJTyogm2DVWw==} engines: {node: '>=20'} hasBin: true @@ -6652,8 +6657,8 @@ packages: resolution: {integrity: sha512-MFO/QzvtAOmJbkhOaCTvbGcFN9L9b+JunIsDwaKljSOdcLMea3NJ1k9Usz/rjdfSXTq4dfzfeS7W4p4YOAAHeA==} engines: {node: '>=18'} - taze@19.17.2: - resolution: {integrity: sha512-1WH+LUf5H0R07EF606fuP5TuHPVvtrMIPpn69EkqaOVJYg0foL8xnD+lEs0s19Zfmplul5nRd3TpbbF0twXCkw==} + taze@20.0.0: + resolution: {integrity: sha512-aygXyZ0wQrQGjuclEWE1qSyxnlVERKO51Re+xhHwgS0Ml2dqCIXpMjRrUdV1thJFOUwKJj9XPvv9ZVlAaV0CWg==} hasBin: true teex@1.0.1: @@ -6764,8 +6769,8 @@ packages: resolution: {integrity: sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==} engines: {node: '>= 18'} - typebox@1.3.10: - resolution: {integrity: sha512-L0MT00X96q0P30f1NrGULgaSbmu8hfTjWbLULeVoM+j5u0jR5wyefoDquX2NmRa39f0KiNIBo1wWSaVvHJTZlA==} + typebox@1.3.11: + resolution: {integrity: sha512-tZGKIS02Opbh4EYMmAEVuXl+y3EQJ9ZlkitLZ1CmFCY4ZOqr/xWR9dDSCFmIjNDICGMWkOqMh6WxGTyRXqcSGQ==} typescript@5.9.3: resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} @@ -6856,8 +6861,8 @@ packages: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} - verkit@0.3.1: - resolution: {integrity: sha512-w2Eo8LSIIoW7qxNBzT7/17k+bh8plXo7G3dHjEIDqPlnluhzaxr9JX8F28VSYEtDvc1/a3WBDih6xNUZseebXg==} + verkit@0.3.2: + resolution: {integrity: sha512-zj/ob3UsvJGN0whEAKFp53REA5X66hvffVqoCtVQAakJKnKlH+/PcOfMoFwIG/o4rElqLv/ycAFlx8ZlXUorCg==} engines: {node: '>=18.12.0'} vite@8.2.0: @@ -7316,71 +7321,71 @@ snapshots: '@inquirer/ansi@2.0.7': {} - '@inquirer/checkbox@5.2.1(@types/node@26.1.2)': + '@inquirer/checkbox@5.2.1(@types/node@26.2.0)': dependencies: '@inquirer/ansi': 2.0.7 - '@inquirer/core': 11.2.1(@types/node@26.1.2) + '@inquirer/core': 11.2.1(@types/node@26.2.0) '@inquirer/figures': 2.0.7 - '@inquirer/type': 4.0.7(@types/node@26.1.2) + '@inquirer/type': 4.0.7(@types/node@26.2.0) optionalDependencies: - '@types/node': 26.1.2 + '@types/node': 26.2.0 - '@inquirer/confirm@6.1.1(@types/node@26.1.2)': + '@inquirer/confirm@6.1.1(@types/node@26.2.0)': dependencies: - '@inquirer/core': 11.2.1(@types/node@26.1.2) - '@inquirer/type': 4.0.7(@types/node@26.1.2) + '@inquirer/core': 11.2.1(@types/node@26.2.0) + '@inquirer/type': 4.0.7(@types/node@26.2.0) optionalDependencies: - '@types/node': 26.1.2 + '@types/node': 26.2.0 - '@inquirer/core@11.2.1(@types/node@26.1.2)': + '@inquirer/core@11.2.1(@types/node@26.2.0)': dependencies: '@inquirer/ansi': 2.0.7 '@inquirer/figures': 2.0.7 - '@inquirer/type': 4.0.7(@types/node@26.1.2) + '@inquirer/type': 4.0.7(@types/node@26.2.0) cli-width: 4.1.0 fast-wrap-ansi: 0.2.2 mute-stream: 3.0.0 signal-exit: 4.1.0 optionalDependencies: - '@types/node': 26.1.2 + '@types/node': 26.2.0 '@inquirer/figures@2.0.7': {} - '@inquirer/input@5.1.2(@types/node@26.1.2)': + '@inquirer/input@5.1.2(@types/node@26.2.0)': dependencies: - '@inquirer/core': 11.2.1(@types/node@26.1.2) - '@inquirer/type': 4.0.7(@types/node@26.1.2) + '@inquirer/core': 11.2.1(@types/node@26.2.0) + '@inquirer/type': 4.0.7(@types/node@26.2.0) optionalDependencies: - '@types/node': 26.1.2 + '@types/node': 26.2.0 - '@inquirer/password@5.1.1(@types/node@26.1.2)': + '@inquirer/password@5.1.1(@types/node@26.2.0)': dependencies: '@inquirer/ansi': 2.0.7 - '@inquirer/core': 11.2.1(@types/node@26.1.2) - '@inquirer/type': 4.0.7(@types/node@26.1.2) + '@inquirer/core': 11.2.1(@types/node@26.2.0) + '@inquirer/type': 4.0.7(@types/node@26.2.0) optionalDependencies: - '@types/node': 26.1.2 + '@types/node': 26.2.0 - '@inquirer/search@4.2.1(@types/node@26.1.2)': + '@inquirer/search@4.2.1(@types/node@26.2.0)': dependencies: - '@inquirer/core': 11.2.1(@types/node@26.1.2) + '@inquirer/core': 11.2.1(@types/node@26.2.0) '@inquirer/figures': 2.0.7 - '@inquirer/type': 4.0.7(@types/node@26.1.2) + '@inquirer/type': 4.0.7(@types/node@26.2.0) optionalDependencies: - '@types/node': 26.1.2 + '@types/node': 26.2.0 - '@inquirer/select@5.2.1(@types/node@26.1.2)': + '@inquirer/select@5.2.1(@types/node@26.2.0)': dependencies: '@inquirer/ansi': 2.0.7 - '@inquirer/core': 11.2.1(@types/node@26.1.2) + '@inquirer/core': 11.2.1(@types/node@26.2.0) '@inquirer/figures': 2.0.7 - '@inquirer/type': 4.0.7(@types/node@26.1.2) + '@inquirer/type': 4.0.7(@types/node@26.2.0) optionalDependencies: - '@types/node': 26.1.2 + '@types/node': 26.2.0 - '@inquirer/type@4.0.7(@types/node@26.1.2)': + '@inquirer/type@4.0.7(@types/node@26.2.0)': optionalDependencies: - '@types/node': 26.1.2 + '@types/node': 26.2.0 '@isaacs/fs-minipass@4.0.1': dependencies: @@ -7771,10 +7776,10 @@ snapshots: '@perryts/perry-linux-x64-musl': 0.5.1220 '@perryts/perry-win32-x64': 0.5.1220 - '@playwright/mcp@0.0.78': + '@playwright/mcp@0.0.79': dependencies: - playwright: 1.62.0-alpha-1783623505000 - playwright-core: 1.62.0-alpha-1783623505000 + playwright: 1.63.0-alpha-2026-08-05 + playwright-core: 1.63.0-alpha-2026-08-05 '@polka/url@1.0.0-next.29(patch_hash=60d82e95c5e67e66c41fe2987ddd4fc3f4992f12158e5c56838e7682e6ef72ea)': {} @@ -8047,6 +8052,10 @@ snapshots: dependencies: undici-types: 8.3.0 + '@types/node@26.2.0': + dependencies: + undici-types: 8.3.0 + '@types/responselike@1.0.3': dependencies: '@types/node': 26.1.2 @@ -8164,7 +8173,7 @@ snapshots: obug: 2.1.2 std-env: 4.2.0 tinyrainbow: 3.1.0 - vitest: 4.1.10(@types/node@26.1.2)(@vitest/coverage-v8@4.1.10)(@vitest/ui@4.1.10)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(yaml@2.9.0)) + vitest: 4.1.10(@types/node@26.2.0)(@vitest/coverage-v8@4.1.10)(@vitest/ui@4.1.10)(vite@8.2.0(@types/node@26.2.0)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(yaml@2.9.0)) '@vitest/expect@4.1.10': dependencies: @@ -8175,13 +8184,13 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.1.0 - '@vitest/mocker@4.1.10(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(yaml@2.9.0))': + '@vitest/mocker@4.1.10(vite@8.2.0(@types/node@26.2.0)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(yaml@2.9.0))': dependencies: '@vitest/spy': 4.1.10 estree-walker: 3.0.3 magic-string: 1.1.0 optionalDependencies: - vite: 8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(yaml@2.9.0) + vite: 8.2.0(@types/node@26.2.0)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(yaml@2.9.0) '@vitest/pretty-format@4.1.10': dependencies: @@ -8210,7 +8219,7 @@ snapshots: sirv: 3.0.2 tinyglobby: 0.2.17 tinyrainbow: 3.1.0 - vitest: 4.1.10(@types/node@26.1.2)(@vitest/coverage-v8@4.1.10)(@vitest/ui@4.1.10)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(yaml@2.9.0)) + vitest: 4.1.10(@types/node@26.2.0)(@vitest/coverage-v8@4.1.10)(@vitest/ui@4.1.10)(vite@8.2.0(@types/node@26.2.0)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(yaml@2.9.0)) '@vitest/utils@4.1.10': dependencies: @@ -8218,7 +8227,7 @@ snapshots: convert-source-map: 2.0.0 tinyrainbow: 3.1.0 - '@vitiate/core@0.3.1(typescript@7.0.2)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(yaml@2.9.0))(vitest@4.1.10)': + '@vitiate/core@0.3.1(typescript@7.0.2)(vite@8.2.0(@types/node@26.2.0)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(yaml@2.9.0))(vitest@4.1.10)': dependencies: '@optique/core': 1.1.0 '@optique/run': 1.1.0 @@ -8230,8 +8239,8 @@ snapshots: ipaddr.js: 2.4.0 magic-string: 1.1.0 valibot: 1.4.2(typescript@7.0.2) - vite: 8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(yaml@2.9.0) - vitest: 4.1.10(@types/node@26.1.2)(@vitest/coverage-v8@4.1.10)(@vitest/ui@4.1.10)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(yaml@2.9.0)) + vite: 8.2.0(@types/node@26.2.0)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(yaml@2.9.0) + vitest: 4.1.10(@types/node@26.2.0)(@vitest/coverage-v8@4.1.10)(@vitest/ui@4.1.10)(vite@8.2.0(@types/node@26.2.0)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(yaml@2.9.0)) transitivePeerDependencies: - '@swc/helpers' - typescript @@ -9217,7 +9226,7 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 26.1.2 + '@types/node': 26.2.0 merge-stream: 2.0.0 supports-color: 10.2.2 @@ -10119,13 +10128,13 @@ snapshots: pkce-challenge@5.0.1: {} - playwright-core@1.62.0-alpha-1783623505000: {} - playwright-core@1.62.1: {} - playwright@1.62.0-alpha-1783623505000: + playwright-core@1.63.0-alpha-2026-08-05: {} + + playwright@1.63.0-alpha-2026-08-05: dependencies: - playwright-core: 1.62.0-alpha-1783623505000 + playwright-core: 1.63.0-alpha-2026-08-05 optionalDependencies: fsevents: 2.3.2 @@ -10182,7 +10191,7 @@ snapshots: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.1 - '@types/node': 26.1.2 + '@types/node': 26.2.0 long: 5.3.2 proxy-addr@2.0.7: @@ -10500,7 +10509,7 @@ snapshots: minizlib: 3.1.0 yallist: 5.0.0 - taze@19.17.2(patch_hash=7c18a31c38b364e6289a527b92d7fc919760b2cb9795dc8e5dc11fd02b8498f6): + taze@20.0.0(patch_hash=c86e6ad40e739f1381b0d847ea27f334a26a834a7c837d0406ffdfed85f98f9a): dependencies: '@antfu/ni': 30.3.0 '@henrygd/queue': 1.2.0 @@ -10514,7 +10523,7 @@ snapshots: tinyexec: 1.3.0 tinyglobby: 0.2.17 unconfig: 7.5.0 - verkit: 0.3.1 + verkit: 0.3.2 yaml: 2.9.0 teex@1.0.1: @@ -10630,7 +10639,7 @@ snapshots: media-typer: 1.1.0 mime-types: 3.0.2 - typebox@1.3.10: {} + typebox@1.3.11: {} typescript@5.9.3: {} @@ -10736,9 +10745,9 @@ snapshots: vary@1.1.2: {} - verkit@0.3.1: {} + verkit@0.3.2: {} - vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(yaml@2.9.0): + vite@8.2.0(@types/node@26.2.0)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(yaml@2.9.0): dependencies: lightningcss: 1.33.0 picomatch: 4.0.5 @@ -10746,17 +10755,17 @@ snapshots: rolldown: 1.2.3 tinyglobby: 0.2.17 optionalDependencies: - '@types/node': 26.1.2 + '@types/node': 26.2.0 esbuild: 0.28.1 fsevents: 2.3.3 jiti: 2.7.0 terser: 5.48.0 yaml: 2.9.0 - vitest@4.1.10(@types/node@26.1.2)(@vitest/coverage-v8@4.1.10)(@vitest/ui@4.1.10)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(yaml@2.9.0)): + vitest@4.1.10(@types/node@26.2.0)(@vitest/coverage-v8@4.1.10)(@vitest/ui@4.1.10)(vite@8.2.0(@types/node@26.2.0)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(yaml@2.9.0)): dependencies: '@vitest/expect': 4.1.10 - '@vitest/mocker': 4.1.10(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(yaml@2.9.0)) + '@vitest/mocker': 4.1.10(vite@8.2.0(@types/node@26.2.0)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(yaml@2.9.0)) '@vitest/pretty-format': 4.1.10 '@vitest/runner': 4.1.10 '@vitest/snapshot': 4.1.10 @@ -10773,18 +10782,18 @@ snapshots: tinyexec: 1.3.0 tinyglobby: 0.2.17 tinyrainbow: 3.1.0 - vite: 8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(yaml@2.9.0) + vite: 8.2.0(@types/node@26.2.0)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(yaml@2.9.0) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 26.1.2 + '@types/node': 26.2.0 '@vitest/coverage-v8': 4.1.10(vitest@4.1.10) '@vitest/ui': 4.1.10(vitest@4.1.10) transitivePeerDependencies: - msw - vitiate@0.3.1(typescript@7.0.2)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(yaml@2.9.0))(vitest@4.1.10): + vitiate@0.3.1(typescript@7.0.2)(vite@8.2.0(@types/node@26.2.0)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(yaml@2.9.0))(vitest@4.1.10): dependencies: - '@vitiate/core': 0.3.1(typescript@7.0.2)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(yaml@2.9.0))(vitest@4.1.10) + '@vitiate/core': 0.3.1(typescript@7.0.2)(vite@8.2.0(@types/node@26.2.0)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(yaml@2.9.0))(vitest@4.1.10) transitivePeerDependencies: - '@swc/helpers' - typescript