mirror of
https://github.com/garrytan/gbrain.git
synced 2026-07-30 11:22:34 +00:00
Commit faf5cdba tracked `node_modules -> /tmp/fleet/repo/node_modules`.
That path exists only on the sandbox that produced it, so every other
clone materialized a dangling symlink and `bun install` aborted with
`ENOENT: could not open the "node_modules" directory`. That also broke
`gbrain upgrade` on bun-link installs, which shells out to bun install
and then prints a manual fallback that fails identically.
Three changes:
- Untrack the symlink (`git rm --cached node_modules`).
- Drop the trailing slash from the .gitignore node_modules patterns. A
`node_modules/` pattern matches directories only, which is why a
symlink of the same name was never ignored in the first place.
- Add scripts/check-no-tracked-symlinks.sh, wired into `bun run verify`
and `check:all`. The .gitignore fix alone is not sufficient, since
`git add -f` bypasses it; the guard fails on any mode-120000 entry.
The repo has no legitimate tracked symlinks, so it starts with an
empty allowlist.
Covered by test/no-tracked-symlinks-guard.test.ts, which builds a
throwaway repo containing the exact symlink shape and asserts the guard
exits 1 and names the offender.
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
52 lines
1.7 KiB
Plaintext
52 lines
1.7 KiB
Plaintext
# No trailing slash: a bare `node_modules/` pattern matches directories only,
|
|
# so a *symlink* named node_modules slips past it and can be committed
|
|
# (that's how the /tmp-pointing symlink in faf5cdba got in). Match any type.
|
|
node_modules
|
|
bin/
|
|
.DS_Store
|
|
*.log
|
|
.env
|
|
.env.*
|
|
!.env.*.example
|
|
# Bun --compile temp artifacts. Each build emits a new hash-named .bun-build
|
|
# file in cwd; glob catches all of them.
|
|
*.bun-build
|
|
.gstack/
|
|
supabase/.temp/
|
|
.claude/skills/
|
|
# admin/dist/ is the React SPA bundle. CLAUDE.md says it's committed for
|
|
# self-contained binaries (the bun --compile path embeds it via
|
|
# `import path from 'admin/dist/index.html' with { type: 'file' }`).
|
|
# Build via: cd admin && bun install && bun run build.
|
|
admin/node_modules
|
|
.idea
|
|
eval/reports/
|
|
eval/data/world-v1/world.html
|
|
|
|
# BrainBench amara-life-v1 Opus cache (regenerate via eval:generate-amara-life)
|
|
eval/data/amara-life-v1/_cache/
|
|
|
|
# claw-test E2E build cache (shim + scratch outputs)
|
|
test/.cache/
|
|
|
|
.claude/
|
|
export/
|
|
|
|
# Conductor workspace-local agent artifacts: plans, todos, run-unit-parallel
|
|
# failure logs and per-shard test output. v0.26.4 (run-unit-parallel.sh)
|
|
# writes .context/test-failures.log + .context/test-summary.txt +
|
|
# .context/test-shards/. Workspace-local by design — never committed.
|
|
.context/
|
|
|
|
# Local agent instruction overrides (CLAUDE.local.md / AGENTS.local.md) — personal,
|
|
# per-clone, loaded after the committed CLAUDE.md/AGENTS.md. Never committed.
|
|
CLAUDE.local.md
|
|
AGENTS.local.md
|
|
|
|
# Tier 3 PGLite snapshot fixture (built on demand by build:pglite-snapshot)
|
|
test/fixtures/pglite-snapshot.tar
|
|
test/fixtures/pglite-snapshot.version
|
|
|
|
# Private brain reports — never check these in (per CLAUDE.md privacy rule)
|
|
reports/network-intelligence/
|