Repository navigation
fix(analyzer): scanner deadlock, CRUD feature collapse, dependency updates - #107
Merged
Merged
Conversation
…inks scanFiles ran visit() inside the same pLimit(50) as its child tasks. Once 50 directories were open at once, every slot was held by a directory waiting on children queued behind it, and the scan never finished (the CLI exited with code 13, "unsettled top-level await"). The limiter now only wraps real I/O. Also: - stat() failures (dangling symlink, file removed mid-scan) skip the entry instead of rejecting Promise.all and aborting the whole analyze run - non-regular files (symlinked directories, FIFOs, sockets) are skipped rather than reported as empty files or read forever - unreadable subdirectories are skipped; an unreadable project root still rejects Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019HJc4sv9pSLh7vhduSUxBE
deduplicateCapabilities keyed capabilities by `kind` only, so every CRUD
resource ("Post Management", "Invoice Management", ...) was folded into one
capability named after the first resource, with all routes as its evidence.
Because candidate reconciliation is union-find (transitive), that single
capability then bridged every entity candidate, and a project with posts,
invoices and users routes produced one "Invoice Management" feature holding
all three routes.
- dedupe capabilities on kind + name so each resource stays separate
- reconcileFeatureCandidates now refuses a union that would join two
entity-sourced clusters naming disjoint entities, so any remaining bridge
candidate (e.g. a behavioral capability touching two resources) attaches
to one entity instead of fusing them; refused merges are recorded as
"retained" decisions with the reason
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019HJc4sv9pSLh7vhduSUxBE
CLI: ignore 7.0.6 -> 7.0.12, p-limit 7.3.0 -> 7.3.3, tsx 4.22 -> 4.23, @types/node stays on the ^22 line (engines is >=22.12). The refreshed lockfile also pulls brace-expansion to 5.0.12 (via ts-morph > minimatch), clearing the 6 advisories `pnpm audit --prod` reported for the CLI. Web: lenis, postcss, autoprefixer, @astrojs/check patch/minor bumps. Not changed on purpose: astro 5 -> 7, tailwindcss 3 -> 4 and typescript 7 are major upgrades; the remaining `pnpm audit` findings are all in apps/web and need the astro major bump (see PR description). Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019HJc4sv9pSLh7vhduSUxBE
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
✅ Welcome ke DevMap!Terima kasih sudah buat PR. Pastikan checklist ini terpenuhi sebelum review:
CI akan jalan otomatis pada setiap update. Kalau gagal, akan muncul link run di komentar ini. Kalau DevMap membantu, tolong star ya: https://github.com/itsflaid/devmap Terima kasih kontribusinya! 🙏 |
This was referenced Oct 17, 2026
Merged
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Ringkasan
Hasil audit analyzer: tiga bug HIGH diperbaiki, masing-masing dengan test regresi (dicek gagal di kode lama, lulus di kode baru), plus update dependency dalam rentang semver.
1.
scanFilesdeadlock di repo dengan banyak foldervisit()dijalankan di dalampLimit(50)yang sama dengan task anaknya. Begitu ≥50 direktori terbuka bersamaan, semua slot dipegang parent yang menunggu anak yang antre di belakangnya. Hasilnyadevmap analyzeberhenti di "Scanning…" dan keluar denganexit 13(unsettled top-level await). Terbukti dengan 50 folder sejajar dan dengan pohon 8×8.readdir,stat+readFile).2. Semua resource CRUD runtuh jadi satu feature
deduplicateCapabilitiesmengelompokkan perkindsaja, sehingga semua resource CRUD jadi satu capability. Karena rekonsiliasi kandidat memakai union-find (transitif), capability itu menjembatani semua entity. Project dengan routeposts,invoices,usersmenghasilkan satu feature "Invoice Management".kind + name.reconcileFeatureCandidatesmenolak merge yang akan menyatukan dua cluster entity dengan nama entity yang tidak beririsan. Penolakan dicatat sebagai keputusanretainedbeserta alasannya.3. Update dependency (commit terpisah)
ignore7.0.12,p-limit7.3.3,tsx4.23,@types/nodetetap di ^22.pnpm audit --prodCLI: 6 advisorybrace-expansion→ bersih.lenis,postcss,autoprefixer,@astrojs/check.Sengaja tidak diubah
astro5 → 7,tailwindcss3 → 4,typescript7 adalah major upgrade. Sisa temuanpnpm audit(termasuk 1 critical diastro) semuanya ada diapps/webdan hanya bisa ditutup dengan upgrade astro mayor, yang perlu dikerjakan dan dites terpisah.extends, route detector, dll.) belum dikerjakan di PR ini.Verifikasi
pnpm testdipackages/cli(typecheck + unit): 281/281 lulus (sebelumnya 273)pnpm build:cli,pnpm build:web,pnpm test:package-e2e: lulusscanner-robustness(4 dari 5),crud-feature-separation, dan satu test bridge difeature-candidates🤖 Generated with Claude Code
https://claude.ai/code/session_019HJc4sv9pSLh7vhduSUxBE
Generated by Claude Code