Skip to content

perf(ignore): bind fallback directory listing to one snapshot - #774

Draft
seonghobae wants to merge 11 commits into
masterfrom
bolt-performance-io-optimization-7260943181691194926
Draft

seonghobae wants to merge 11 commits into
masterfrom
bolt-performance-io-optimization-7260943181691194926

Conversation

@seonghobae

@seonghobae seonghobae commented Sep 23, 2026 •

Copy link
Copy Markdown
Collaborator

Current authority

  • protected/base: master@728f0f33323e43573d6664209891099502827d5d
  • exact head: ea64ce03d8893d3591977bf393a235ae3f39dd67
  • lifecycle: Draft / open / mergeable
  • compare: ahead 6 / behind 0
  • effective diff: src/main/kotlin/html4tree/main.kt + src/test/kotlin/html4tree/IgnoreFileListingTest.kt only

Verified scope

process_ignore_file()의 dirFilesNames == null fallback은 protected base에서 .html4ignore가 유효한 경우 같은 directory에 대해 File.list()를 두 번 호출할 수 있습니다. Normal crawler path는 crawl_directories()가 이미 이름 배열을 전달하므로 이 fallback을 buyer hot path로 간주하지 않습니다.

Current source captures dirFilesNames ?: curr_dir.list() once and reuses that snapshot for ignore-pattern matching and hidden/sensitive-name filtering. This is a filesystem-snapshot consistency/call-count change; quantified latency, GC, or whole-crawl speedup is not established.

Executable contract

IgnoreFileListingTest uses a File subclass whose successive list() calls intentionally return different snapshots.

  • with a real .html4ignore, fallback processing must call list() exactly once and use that same first snapshot for both glob matching and hidden-file exclusion;
  • when dirFilesNames is supplied, list() must not be called at all and the supplied names remain the only listing authority.

Against protected base, the first case is deterministic source-level RED: the old implementation calls list() once inside the ignore-file block and again for hidden/sensitive filtering, so the call count becomes 2 and the second snapshot can change the exclusion result. On the current source the same contract is expected GREEN. Hosted execution is still required; source reasoning is not reported as hosted GREEN.

Drift repair

A generated continuation re-added retrospective .jules/bolt.md doctrine after the earlier cleanup. Its commit remains in ancestry. Ordinary non-force descendants restore .jules/bolt.md byte-for-byte to the protected blob and add only the focused executable contract above. Current protected-base diff contains no .jules path.

Remaining acceptance

Current exact workflows are freshly materialized and nonterminal: CI 35991201304, Security 35991201461, CodeQL PR 35991201403, SAST Semgrep 35991201536. Keep Draft until the unchanged exact head has terminal required checks and current-head review.

If this optimization is promoted as performance work, first demonstrate a representative/right-cleared direct-call workload where the fallback is actually used, then compare the same filesystem/runtime/host with declared warm-up/repetition policy, listing syscall count and wall/CPU median/p95. If the buyer path does not use this fallback, do not claim buyer-visible performance improvement.

No force push, destructive rebase, self-approval, source-neutral rerun, predecessor-GREEN transfer, gate weakening, or unsupported performance claim.

@google-labs-jules

Copy link
Copy Markdown

👋 Jules, reporting for duty! I'm here to lend a hand with this pull request.

When you start a review, I'll add a 👀 emoji to each comment to let you know I've read it. I'll focus on feedback directed at me and will do my best to stay out of conversations between you and other bots or reviewers to keep the noise down.

I'll push a commit with your requested changes shortly after. Please note there might be a delay between these steps, but rest assured I'm on the job!

For more direct control, you can switch me to Reactive Mode. When this mode is on, I will only act on comments where you specifically mention me with @jules. You can find this option in the Pull Request section of your global Jules UI settings. You can always switch back!

New to Jules? Learn more at jules.google/docs.


For security, I will only act on instructions from the user who triggered this task.

@coderabbitai

coderabbitai Bot commented Sep 23, 2026 •

Copy link
Copy Markdown

Important

Draft PR not reviewed

Draft PRs are not automatically reviewed by default.

  • Trigger a manual review

To automatically review draft PRs, update your CodeRabbit configuration:

reviews:
  auto_review:
    drafts: true

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@seonghobae
seonghobae marked this pull request as draft September 23, 2026 22:47
@seonghobae seonghobae changed the title ⚡ Bolt: [성능 개선] 중복 디렉토리 목록 I/O 호출 최적화 perf(ignore): evaluate single fallback directory listing Sep 23, 2026
@seonghobae seonghobae changed the title perf(ignore): evaluate single fallback directory listing perf(ignore): bind fallback directory listing to one snapshot Sep 24, 2026
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