Skip to content

fix: fingerprint ignored files and build with esbuild alone - #38

Merged
elkaix merged 4 commits into
mainfrom
fix/ignored-files-and-build
Sep 12, 2026
Merged

elkaix merged 4 commits into
mainfrom
fix/ignored-files-and-build

Conversation

@elkaix

@elkaix elkaix commented Sep 12, 2026

Copy link
Copy Markdown
Contributor

A plan-mode run that wrote a git-ignored file, .env say, passed as
read-only: the fingerprint asked git, and git never lists ignored files.
The git snapshot now also hashes the mode, size and mtime of every ignored
entry, with a wholly ignored directory counting as one entry, so the write
is seen while node_modules stays a single lstat.

Also:

  • Measured the fingerprint: about 75 ms per snapshot on a clean 3,500-file
    repository and about 750 ms with 300 modified and 3,000 untracked files.
    The README records the numbers.
  • Verified against agy 1.2.2 that plan mode is advisory with the permission
    bypass off as well as on; the docs no longer tie the caveat to the bypass.
  • Replaced tsup and the esbuild override with a direct esbuild invocation.
    tsup 8.5 still declares esbuild 0.27, so the override was a standing
    conflict; the build is now one tool with no pin.
  • Declared os: [darwin, linux]: the bridge kills process groups, which
    has no Windows equivalent, so npm now refuses the install instead of the
    bridge misbehaving at runtime.
  • CI runs the test job on macOS as well as Linux.

A plan-mode run that wrote a git-ignored file, `.env` say, passed as
read-only: the fingerprint asked git, and git never lists ignored files.
The git snapshot now also hashes the mode, size and mtime of every ignored
entry, with a wholly ignored directory counting as one entry, so the write
is seen while node_modules stays a single lstat.

Also:

- Measured the fingerprint: about 75 ms per snapshot on a clean 3,500-file
  repository and about 750 ms with 300 modified and 3,000 untracked files.
  The README records the numbers.
- Verified against agy 1.2.2 that plan mode is advisory with the permission
  bypass off as well as on; the docs no longer tie the caveat to the bypass.
- Replaced tsup and the esbuild override with a direct esbuild invocation.
  tsup 8.5 still declares esbuild 0.27, so the override was a standing
  conflict; the build is now one tool with no pin.
- Declared `os: [darwin, linux]`: the bridge kills process groups, which
  has no Windows equivalent, so npm now refuses the install instead of the
  bridge misbehaving at runtime.
- CI runs the test job on macOS as well as Linux.
@coderabbitai

coderabbitai Bot commented Sep 12, 2026

Copy link
Copy Markdown

Warning

Review limit reached

Next included review available in 10 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used all 3 included reviews currently available. Your 78 included PR review attempts over the past 7 days set your current allowance at 3 reviews per hour.

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Team

Run ID: 6c77cfe5-431f-4bd3-8a98-59de717564b7

📥 Commits

Reviewing files that changed from the base of the PR and between 6cbf208 and b97c742.

⛔ Files ignored due to path filters (1)
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (12)
  • .github/workflows/ci.yml
  • CLAUDE.md
  • README.md
  • package.json
  • skills/agy-delegate/SKILL.md
  • skills/agy-delegation/SKILL.md
  • src/delegation.ts
  • src/tools.ts
  • src/worktree.ts
  • test/e2e-stdio.test.ts
  • test/hardening.test.ts
  • tsup.config.ts

Comment @coderabbitai help to get the list of available commands.

- Ignored directories are walked by metadata up to 1,000 entries each, cut
  by count so an unchanged tree still compares equal; dependency and build
  trees at the repository top stay a single entry. A rewrite inside build/
  is now seen. One shared, deadline-checked walker serves git and non-git
  trees, so the ignored-entry loop cannot outlive the 10 s budget.
- An untracked nested repository or a file name with a newline no longer
  drops the whole snapshot to the metadata scan.
- The e2e suite pins AGY_DELEGATION_DEPTH=0 so an agent host cannot make
  the server under test refuse to delegate.
- esbuild externals are the two runtime dependencies by name, so a stray
  devDependency import is bundled rather than left to fail at run time.
- The build cleans dist with Node, and format and typecheck run once, on
  Linux.
An entry that vanished between git listing it and lstat reading it was
hashed as missing; the next snapshot never lists it, so an unchanged tree
compared as changed. Any such entry now makes the snapshot uncovered.

Also: an untracked directory whose whole content is ignored is walked
once, not again for each ignored directory git lists inside it; the
deadline is checked before the entry cap; the untracked split no longer
scans one list against the other.
The matrix renamed the job to test (os), so the required check the main
ruleset names never reported and the merge was blocked. A small job named
test now depends on the whole matrix.
@elkaix
elkaix merged commit 5838e36 into main Sep 12, 2026
5 checks passed
@elkaix
elkaix deleted the fix/ignored-files-and-build branch September 12, 2026 19:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant