Skip to content

Commit 5cf9fe5

Browse files
committed
chore(sync): mark cascaded files as linguist-generated in .gitattributes
Fleet cascade of socket-wheelhouse@a0e72c2. Adds a managed block to `.gitattributes` flagging all 204 cascaded files (IDENTICAL_FILES / OPTIONAL_IDENTICAL_FILES / SHARED_SKILL_FILES) as `linguist-generated`. GitHub now collapses these files in PR diff views by default (reviewer can still expand on click) and excludes them from the repo's language stats. Drift detection via sync-scaffolding still works as before.
1 parent aca8044 commit 5cf9fe5

10 files changed

Lines changed: 279 additions & 164 deletions

File tree

.gitattributes

Lines changed: 210 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,212 @@
11
* text=auto eol=lf
22
*.lockb binary diff=lockb
3+
4+
# ─── BEGIN fleet-canonical (managed by socket-wheelhouse sync) ──
5+
# Cascaded from socket-wheelhouse/template/. Don't edit locally —
6+
# edit upstream and re-cascade via sync-scaffolding. Marked
7+
# linguist-generated so GitHub PR diffs collapse them by default.
8+
.claude/agents/security-reviewer.md linguist-generated=true
9+
.claude/commands/quality-loop.md linguist-generated=true
10+
.claude/commands/security-scan.md linguist-generated=true
11+
.claude/commands/setup-security-tools.md linguist-generated=true
12+
.claude/commands/squash-history.md linguist-generated=true
13+
.claude/hooks/_shared/bash-quote-mask.mts linguist-generated=true
14+
.claude/hooks/_shared/test/bash-quote-mask.test.mts linguist-generated=true
15+
.claude/hooks/auth-rotation-reminder/README.md linguist-generated=true
16+
.claude/hooks/auth-rotation-reminder/index.mts linguist-generated=true
17+
.claude/hooks/auth-rotation-reminder/package.json linguist-generated=true
18+
.claude/hooks/auth-rotation-reminder/services.mts linguist-generated=true
19+
.claude/hooks/auth-rotation-reminder/test/auth-rotation-reminder.test.mts linguist-generated=true
20+
.claude/hooks/auth-rotation-reminder/tsconfig.json linguist-generated=true
21+
.claude/hooks/check-new-deps/README.md linguist-generated=true
22+
.claude/hooks/check-new-deps/index.mts linguist-generated=true
23+
.claude/hooks/check-new-deps/package.json linguist-generated=true
24+
.claude/hooks/claude-md-size-guard/README.md linguist-generated=true
25+
.claude/hooks/claude-md-size-guard/index.mts linguist-generated=true
26+
.claude/hooks/claude-md-size-guard/package.json linguist-generated=true
27+
.claude/hooks/claude-md-size-guard/test/index.test.mts linguist-generated=true
28+
.claude/hooks/claude-md-size-guard/tsconfig.json linguist-generated=true
29+
.claude/hooks/cross-repo-guard/README.md linguist-generated=true
30+
.claude/hooks/cross-repo-guard/index.mts linguist-generated=true
31+
.claude/hooks/cross-repo-guard/package.json linguist-generated=true
32+
.claude/hooks/cross-repo-guard/test/cross-repo-guard.test.mts linguist-generated=true
33+
.claude/hooks/cross-repo-guard/tsconfig.json linguist-generated=true
34+
.claude/hooks/excuse-detector/README.md linguist-generated=true
35+
.claude/hooks/excuse-detector/index.mts linguist-generated=true
36+
.claude/hooks/excuse-detector/package.json linguist-generated=true
37+
.claude/hooks/excuse-detector/test/index.test.mts linguist-generated=true
38+
.claude/hooks/excuse-detector/tsconfig.json linguist-generated=true
39+
.claude/hooks/gitmodules-comment-guard/README.md linguist-generated=true
40+
.claude/hooks/gitmodules-comment-guard/index.mts linguist-generated=true
41+
.claude/hooks/gitmodules-comment-guard/package.json linguist-generated=true
42+
.claude/hooks/gitmodules-comment-guard/tsconfig.json linguist-generated=true
43+
.claude/hooks/logger-guard/README.md linguist-generated=true
44+
.claude/hooks/logger-guard/index.mts linguist-generated=true
45+
.claude/hooks/logger-guard/package.json linguist-generated=true
46+
.claude/hooks/logger-guard/test/logger-guard.test.mts linguist-generated=true
47+
.claude/hooks/logger-guard/tsconfig.json linguist-generated=true
48+
.claude/hooks/markdown-filename-guard/README.md linguist-generated=true
49+
.claude/hooks/markdown-filename-guard/index.mts linguist-generated=true
50+
.claude/hooks/markdown-filename-guard/package.json linguist-generated=true
51+
.claude/hooks/markdown-filename-guard/test/index.test.mts linguist-generated=true
52+
.claude/hooks/markdown-filename-guard/tsconfig.json linguist-generated=true
53+
.claude/hooks/no-experimental-strip-types-guard/README.md linguist-generated=true
54+
.claude/hooks/no-experimental-strip-types-guard/index.mts linguist-generated=true
55+
.claude/hooks/no-experimental-strip-types-guard/package.json linguist-generated=true
56+
.claude/hooks/no-experimental-strip-types-guard/test/index.test.mts linguist-generated=true
57+
.claude/hooks/no-experimental-strip-types-guard/tsconfig.json linguist-generated=true
58+
.claude/hooks/no-fleet-fork-guard/README.md linguist-generated=true
59+
.claude/hooks/no-fleet-fork-guard/index.mts linguist-generated=true
60+
.claude/hooks/no-fleet-fork-guard/package.json linguist-generated=true
61+
.claude/hooks/no-fleet-fork-guard/test/index.test.mts linguist-generated=true
62+
.claude/hooks/no-fleet-fork-guard/tsconfig.json linguist-generated=true
63+
.claude/hooks/no-revert-guard/README.md linguist-generated=true
64+
.claude/hooks/no-revert-guard/index.mts linguist-generated=true
65+
.claude/hooks/no-revert-guard/package.json linguist-generated=true
66+
.claude/hooks/no-revert-guard/test/index.test.mts linguist-generated=true
67+
.claude/hooks/no-revert-guard/tsconfig.json linguist-generated=true
68+
.claude/hooks/path-guard/README.md linguist-generated=true
69+
.claude/hooks/path-guard/index.mts linguist-generated=true
70+
.claude/hooks/path-guard/package.json linguist-generated=true
71+
.claude/hooks/path-guard/segments.mts linguist-generated=true
72+
.claude/hooks/path-guard/test/path-guard.test.mts linguist-generated=true
73+
.claude/hooks/path-guard/tsconfig.json linguist-generated=true
74+
.claude/hooks/private-name-guard/README.md linguist-generated=true
75+
.claude/hooks/public-surface-reminder/README.md linguist-generated=true
76+
.claude/hooks/release-workflow-guard/README.md linguist-generated=true
77+
.claude/hooks/setup-security-tools/README.md linguist-generated=true
78+
.claude/hooks/stale-process-sweeper/README.md linguist-generated=true
79+
.claude/hooks/stale-process-sweeper/index.mts linguist-generated=true
80+
.claude/hooks/stale-process-sweeper/package.json linguist-generated=true
81+
.claude/hooks/stale-process-sweeper/test/stale-process-sweeper.test.mts linguist-generated=true
82+
.claude/hooks/stale-process-sweeper/tsconfig.json linguist-generated=true
83+
.claude/hooks/token-guard/README.md linguist-generated=true
84+
.claude/hooks/token-guard/index.mts linguist-generated=true
85+
.claude/hooks/token-guard/package.json linguist-generated=true
86+
.claude/hooks/token-guard/test/token-guard.test.mts linguist-generated=true
87+
.claude/hooks/token-guard/tsconfig.json linguist-generated=true
88+
.claude/settings.json linguist-generated=true
89+
.claude/skills/_shared/compound-lessons.md linguist-generated=true
90+
.claude/skills/_shared/env-check.md linguist-generated=true
91+
.claude/skills/_shared/multi-agent-backends.md linguist-generated=true
92+
.claude/skills/_shared/path-guard-rule.md linguist-generated=true
93+
.claude/skills/_shared/report-format.md linguist-generated=true
94+
.claude/skills/_shared/scripts/git-default-branch.mts linguist-generated=true
95+
.claude/skills/_shared/scripts/logger-guardrails.mts linguist-generated=true
96+
.claude/skills/_shared/scripts/resolve-tools.mts linguist-generated=true
97+
.claude/skills/_shared/security-tools.md linguist-generated=true
98+
.claude/skills/_shared/skill-authoring.md linguist-generated=true
99+
.claude/skills/_shared/variant-analysis.md linguist-generated=true
100+
.claude/skills/_shared/verify-build.md linguist-generated=true
101+
.claude/skills/driving-cursor-bugbot/SKILL.md linguist-generated=true
102+
.claude/skills/driving-cursor-bugbot/reference.md linguist-generated=true
103+
.claude/skills/guarding-paths/SKILL.md linguist-generated=true
104+
.claude/skills/guarding-paths/reference.md linguist-generated=true
105+
.claude/skills/guarding-paths/templates/check-paths.mts.tmpl linguist-generated=true
106+
.claude/skills/guarding-paths/templates/paths-allowlist.yml.tmpl linguist-generated=true
107+
.claude/skills/handing-off/SKILL.md linguist-generated=true
108+
.claude/skills/locking-down-programmatic-claude/SKILL.md linguist-generated=true
109+
.claude/skills/plug-leaking-promise-race/SKILL.md linguist-generated=true
110+
.claude/skills/refreshing-history/SKILL.md linguist-generated=true
111+
.claude/skills/refreshing-history/run.mts linguist-generated=true
112+
.claude/skills/reviewing-code/SKILL.md linguist-generated=true
113+
.claude/skills/reviewing-code/run.mts linguist-generated=true
114+
.claude/skills/scanning-quality/SKILL.md linguist-generated=true
115+
.claude/skills/scanning-quality/scans/bundle-trim.md linguist-generated=true
116+
.claude/skills/scanning-quality/scans/differential.md linguist-generated=true
117+
.claude/skills/scanning-quality/scans/insecure-defaults.md linguist-generated=true
118+
.claude/skills/scanning-quality/scans/variant-analysis.md linguist-generated=true
119+
.claude/skills/scanning-security/SKILL.md linguist-generated=true
120+
.claude/skills/squashing-history/SKILL.md linguist-generated=true
121+
.claude/skills/squashing-history/reference.md linguist-generated=true
122+
.claude/skills/updating-lockstep/SKILL.md linguist-generated=true
123+
.claude/skills/updating-lockstep/reference.md linguist-generated=true
124+
.claude/skills/updating/SKILL.md linguist-generated=true
125+
.claude/skills/updating/reference.md linguist-generated=true
126+
.claude/skills/worktree-management/SKILL.md linguist-generated=true
127+
.config/lockstep.schema.json linguist-generated=true
128+
.config/oxlint-plugin/index.mts linguist-generated=true
129+
.config/oxlint-plugin/package.json linguist-generated=true
130+
.config/oxlint-plugin/rules/_inject-import.mts linguist-generated=true
131+
.config/oxlint-plugin/rules/export-top-level-functions.mts linguist-generated=true
132+
.config/oxlint-plugin/rules/inclusive-language.mts linguist-generated=true
133+
.config/oxlint-plugin/rules/max-file-lines.mts linguist-generated=true
134+
.config/oxlint-plugin/rules/no-console-prefer-logger.mts linguist-generated=true
135+
.config/oxlint-plugin/rules/no-dynamic-import-outside-bundle.mts linguist-generated=true
136+
.config/oxlint-plugin/rules/no-fetch-prefer-http-request.mts linguist-generated=true
137+
.config/oxlint-plugin/rules/no-inline-logger.mts linguist-generated=true
138+
.config/oxlint-plugin/rules/no-npx-dlx.mts linguist-generated=true
139+
.config/oxlint-plugin/rules/no-placeholders.mts linguist-generated=true
140+
.config/oxlint-plugin/rules/no-promise-race-in-loop.mts linguist-generated=true
141+
.config/oxlint-plugin/rules/no-status-emoji.mts linguist-generated=true
142+
.config/oxlint-plugin/rules/personal-path-placeholders.mts linguist-generated=true
143+
.config/oxlint-plugin/rules/prefer-async-spawn.mts linguist-generated=true
144+
.config/oxlint-plugin/rules/prefer-exists-sync.mts linguist-generated=true
145+
.config/oxlint-plugin/rules/prefer-node-builtin-imports.mts linguist-generated=true
146+
.config/oxlint-plugin/rules/prefer-safe-delete.mts linguist-generated=true
147+
.config/oxlint-plugin/rules/prefer-undefined-over-null.mts linguist-generated=true
148+
.config/oxlint-plugin/rules/socket-api-token-env.mts linguist-generated=true
149+
.config/oxlint-plugin/rules/sort-equality-disjunctions.mts linguist-generated=true
150+
.config/oxlint-plugin/rules/sort-named-imports.mts linguist-generated=true
151+
.config/oxlint-plugin/rules/sort-regex-alternations.mts linguist-generated=true
152+
.config/oxlint-plugin/rules/sort-set-args.mts linguist-generated=true
153+
.config/oxlint-plugin/rules/sort-source-methods.mts linguist-generated=true
154+
.config/rolldown/lib-stub.mts linguist-generated=true
155+
.config/socket-wheelhouse-schema.json linguist-generated=true
156+
.config/taze.config.mts linguist-generated=true
157+
.git-hooks/_helpers.mts linguist-generated=true
158+
.git-hooks/commit-msg.mts linguist-generated=true
159+
.git-hooks/pre-commit.mts linguist-generated=true
160+
.git-hooks/pre-push.mts linguist-generated=true
161+
.git-hooks/test/_helpers.test.mts linguist-generated=true
162+
.git-hooks/test/commit-msg.test.mts linguist-generated=true
163+
.git-hooks/test/pre-commit.test.mts linguist-generated=true
164+
.git-hooks/test/pre-push.test.mts linguist-generated=true
165+
.husky/commit-msg linguist-generated=true
166+
.husky/pre-commit linguist-generated=true
167+
.husky/pre-push linguist-generated=true
168+
assets/README.md linguist-generated=true
169+
assets/socket-icon-brand-128.png linguist-generated=true
170+
assets/socket-icon-brand-16.png linguist-generated=true
171+
assets/socket-icon-brand-256.png linguist-generated=true
172+
assets/socket-icon-brand-32.png linguist-generated=true
173+
assets/socket-icon-brand-512.png linguist-generated=true
174+
assets/socket-icon-brand-64.png linguist-generated=true
175+
assets/socket-icon-brand-square.svg linguist-generated=true
176+
assets/socket-icon-brand.svg linguist-generated=true
177+
assets/socket-icon-shield-square.svg linguist-generated=true
178+
assets/socket-icon-shield.svg linguist-generated=true
179+
assets/socket-icon-square.svg linguist-generated=true
180+
assets/socket-icon.svg linguist-generated=true
181+
assets/socket-logo-dark-1680.png linguist-generated=true
182+
assets/socket-logo-dark-420.png linguist-generated=true
183+
assets/socket-logo-dark-840.png linguist-generated=true
184+
assets/socket-logo-dark.svg linguist-generated=true
185+
assets/socket-logo-light-1680.png linguist-generated=true
186+
assets/socket-logo-light-420.png linguist-generated=true
187+
assets/socket-logo-light-840.png linguist-generated=true
188+
assets/socket-logo-light.svg linguist-generated=true
189+
docs/claude.md/agent-delegation.md linguist-generated=true
190+
docs/claude.md/bypass-phrases.md linguist-generated=true
191+
docs/claude.md/error-messages.md linguist-generated=true
192+
docs/claude.md/inclusive-language.md linguist-generated=true
193+
docs/claude.md/no-local-fork-canonical.md linguist-generated=true
194+
docs/claude.md/sorting.md linguist-generated=true
195+
packages/build-infra/lib/release-checksums/consumer.mts linguist-generated=true
196+
packages/build-infra/lib/release-checksums/core.mts linguist-generated=true
197+
packages/build-infra/lib/release-checksums/producer.mts linguist-generated=true
198+
packages/build-infra/release-assets.schema.json linguist-generated=true
199+
scripts/ai-lint-fix.mts linguist-generated=true
200+
scripts/check-paths.mts linguist-generated=true
201+
scripts/fix.mts linguist-generated=true
202+
scripts/install-sfw.mts linguist-generated=true
203+
scripts/lockstep-emit-schema.mts linguist-generated=true
204+
scripts/lockstep-schema.mts linguist-generated=true
205+
scripts/lockstep.mts linguist-generated=true
206+
scripts/power-state.mts linguist-generated=true
207+
scripts/security.mts linguist-generated=true
208+
scripts/socket-wheelhouse-emit-schema.mts linguist-generated=true
209+
scripts/socket-wheelhouse-schema.mts linguist-generated=true
210+
scripts/update.mts linguist-generated=true
211+
scripts/validate-config-paths.mts linguist-generated=true
212+
# ─── END fleet-canonical ────────────────────────────────────────

src/dlx/_internal.ts

Lines changed: 6 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -1,69 +1,15 @@
11
/**
2-
* @fileoverview Shared internals for the `dlx/package` split — lazy
3-
* `node:fs` / `node:path` loaders + the bounded LRU cache used by
4-
* `resolveBinaryPath` on Windows. Kept as a leaf so every other dlx
5-
* file in the split (`spec`, `firewall`, `binary-resolution`,
6-
* `package` itself) can layer above it without cycles.
2+
* @fileoverview Shared internals for the `dlx/*` module — the bounded
3+
* LRU cache used by `resolveBinaryPath` on Windows.
74
*
8-
* `binary.ts` ships its own duplicate `getFs` / `getPath` for now —
9-
* collapsing them into this single source of truth is a follow-up.
5+
* Webpack-safe lazy `node:fs` / `node:path` / `node:crypto` loaders
6+
* live in the canonical `@socketsecurity/lib/node/{fs,path,crypto}`
7+
* helpers — import `getNodeFs` / `getNodePath` / `getNodeCrypto`
8+
* directly from there.
109
*/
1110

1211
import { MapCtor } from '../primordials/map-set'
1312

14-
let _crypto: typeof import('node:crypto') | undefined
15-
let _fs: typeof import('node:fs') | undefined
16-
let _path: typeof import('node:path') | undefined
17-
18-
/**
19-
* Lazily load the crypto module to avoid Webpack errors.
20-
* Uses non-'node:' prefixed require to prevent Webpack bundling issues.
21-
*
22-
* @private
23-
*/
24-
/*@__NO_SIDE_EFFECTS__*/
25-
export function getCrypto() {
26-
if (_crypto === undefined) {
27-
// Use non-'node:' prefixed require to avoid Webpack errors.
28-
29-
_crypto = /*@__PURE__*/ require('node:crypto')
30-
}
31-
return _crypto as typeof import('node:crypto')
32-
}
33-
34-
/**
35-
* Lazily load the fs module to avoid Webpack errors.
36-
* Uses non-'node:' prefixed require to prevent Webpack bundling issues.
37-
*
38-
* @private
39-
*/
40-
/*@__NO_SIDE_EFFECTS__*/
41-
export function getFs() {
42-
if (_fs === undefined) {
43-
// Use non-'node:' prefixed require to avoid Webpack errors.
44-
45-
_fs = /*@__PURE__*/ require('node:fs')
46-
}
47-
return _fs as typeof import('node:fs')
48-
}
49-
50-
/**
51-
* Lazily load the path module to avoid Webpack errors.
52-
* Uses non-'node:' prefixed require to prevent Webpack bundling issues.
53-
*
54-
* @returns The Node.js path module
55-
* @private
56-
*/
57-
/*@__NO_SIDE_EFFECTS__*/
58-
export function getPath() {
59-
if (_path === undefined) {
60-
// Use non-'node:' prefixed require to avoid Webpack errors.
61-
62-
_path = /*@__PURE__*/ require('node:path')
63-
}
64-
return _path as typeof import('node:path')
65-
}
66-
6713
// Cache for binary path resolution to avoid repeated extension checks
6814
// on Windows. Bounded LRU: a long-running process that resolves many
6915
// distinct binary paths used to accumulate entries forever, and entries

src/dlx/binary-cache.ts

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ import { DateNow } from '../primordials/date'
2828

2929
import { StringPrototypeStartsWith } from '../primordials/string'
3030

31-
import { getFs, getPath } from './_internal'
31+
import { getNodeFs } from '../node/fs'
32+
import { getNodePath } from '../node/path'
3233

3334
import type { DlxMetadata } from './binary-types'
3435

@@ -48,15 +49,15 @@ export async function cleanDlxCache(
4849
maxAge: number = DLX_BINARY_CACHE_TTL,
4950
): Promise<number> {
5051
const cacheDir = getDlxCachePath()
51-
const fs = getFs()
52+
const fs = getNodeFs()
5253

5354
if (!fs.existsSync(cacheDir)) {
5455
return 0
5556
}
5657

5758
let cleaned = 0
5859
const now = DateNow()
59-
const path = getPath()
60+
const path = getNodePath()
6061
const entries = await fs.promises.readdir(cacheDir)
6162

6263
for (const entry of entries) {
@@ -116,7 +117,7 @@ export async function cleanDlxCache(
116117
* ```
117118
*/
118119
export function getBinaryCacheMetadataPath(cacheEntryPath: string): string {
119-
return getPath().join(cacheEntryPath, '.dlx-metadata.json')
120+
return getNodePath().join(cacheEntryPath, '.dlx-metadata.json')
120121
}
121122

122123
/**
@@ -147,7 +148,7 @@ export async function isBinaryCacheValid(
147148
cacheEntryPath: string,
148149
cacheTtl: number,
149150
): Promise<boolean> {
150-
const fs = getFs()
151+
const fs = getNodeFs()
151152
try {
152153
const metaPath = getBinaryCacheMetadataPath(cacheEntryPath)
153154
if (!fs.existsSync(metaPath)) {
@@ -196,15 +197,15 @@ export async function listDlxCache(): Promise<
196197
}>
197198
> {
198199
const cacheDir = getDlxCachePath()
199-
const fs = getFs()
200+
const fs = getNodeFs()
200201

201202
if (!fs.existsSync(cacheDir)) {
202203
return []
203204
}
204205

205206
const results = []
206207
const now = DateNow()
207-
const path = getPath()
208+
const path = getNodePath()
208209
const entries = await fs.promises.readdir(cacheDir)
209210

210211
for (const entry of entries) {
@@ -291,7 +292,7 @@ export async function writeBinaryCacheMetadata(
291292
url,
292293
},
293294
}
294-
const fs = getFs()
295+
const fs = getNodeFs()
295296
// Use atomic write-then-rename pattern to prevent corruption on crash
296297
const tmpPath = `${metaPath}.tmp.${process.pid}`
297298
await fs.promises.writeFile(tmpPath, JSON.stringify(metadata, null, 2))

src/dlx/binary-download.ts

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@ import { normalizeHash } from './integrity'
2222

2323
import { ErrorCtor } from '../primordials/error'
2424

25-
import { getCrypto, getFs, getPath } from './_internal'
25+
import { getNodeCrypto } from '../node/crypto'
26+
import { getNodeFs } from '../node/fs'
27+
import { getNodePath } from '../node/path'
2628
import {
2729
getDlxCachePath,
2830
isBinaryCacheValid,
@@ -68,8 +70,8 @@ export async function downloadBinary(
6870
sha256 = normalized.value
6971
}
7072
}
71-
const fs = getFs()
72-
const path = getPath()
73+
const fs = getNodeFs()
74+
const path = getNodePath()
7375
// Generate cache paths similar to pnpm/npx structure.
7476
const cacheDir = getDlxCachePath()
7577
const binaryName = name || `binary-${process.platform}-${getArch()}`
@@ -168,9 +170,9 @@ export async function downloadBinaryFile(
168170
): Promise<string> {
169171
// Use process lock to prevent concurrent downloads.
170172
// Lock is placed in the cache entry directory as 'concurrency.lock'.
171-
const crypto = getCrypto()
172-
const fs = getFs()
173-
const path = getPath()
173+
const crypto = getNodeCrypto()
174+
const fs = getNodeFs()
175+
const path = getNodePath()
174176
const cacheEntryDir = path.dirname(destPath)
175177
const lockPath = path.join(cacheEntryDir, 'concurrency.lock')
176178

0 commit comments

Comments
 (0)