v1.5.0
v1.5.0 — Improved Parsing, Smart Ignore & Monorepo Clustering
What was wrong with the previous version
Analysis was broken or useless for:
- Monorepos — running on Mikk's own codebase produced 12,235 lines of lock file, 1 module called "Testing", and a main diagram with a single useless node
- Test files polluting results — no
.mikkignorewas ever generated, so test fixtures, helpers, and test directories were analyzed as production code - Projects with tsconfig.base.json — detected as JavaScript instead of TypeScript
- Single-file clusters never created — orphan files silently disappeared from analysis due to a premature assignment bug
- Duplicate module names — multiple clusters named "Search" or "Providers" with no disambiguation
- Massive unreadable diagrams — module diagrams dumped every internal function (88+ lines of noise)
Bug Fixes (19 total)
Critical Bugs
- C# detection used fs.access('*.csproj') which always fails — glob patterns don't work with fs.access. Switched to
fast-globfor.csproj/.slndetection. - Cluster detector orphan bug — files were marked as assigned during greedy expansion even when they didn't join any cluster. The orphan fallback (confidence: 0.3 single-file clusters) never fired, causing 0 modules for projects with weak cross-file coupling. Fixed by deferring assignment until a cluster reaches minClusterSize.
- parseMikkIgnore trailing-slash handling —
dist/stayed asdist/(no match in fast-glob). Now correctly expands: baredist/→**/dist/**, path packages/*/tests/ → packages/*/tests/**. - detectProjectLanguage missed tsconfig.base.json — monorepos using tsconfig.base.json (no tsconfig.json at root) were detected as JavaScript. Now checks tsconfig.*.json glob.
- TS parser crashed on .js/.jsx/.mjs/.cjs files —
ScriptKindwas always set toTS, causing parse failures on plain JS. Now maps extension → correctScriptKind(JS,JSX,TSX).
Analysis Quality Bugs
- Only 1 module detected on monorepos — all 71 files lumped into "Testing" because the cluster detector's greedy phase consumed every file as a seed, leaving nothing for orphan/merge logic.
- No
.mikkignoreauto-generated —mikk initnever created one. Test files, fixtures (packages/core/tests/fixtures/**), and build artifacts all included in analysis. - Main diagram showed single useless node — with 1 module, the main diagram was literally 📦 Testing, 14 files, 51 functions and nothing else.
- Module diagrams listed every internal function — no size limits. A module with 50+ functions produced 88+ line diagrams that were unreadable.
- Duplicate module names not disambiguated — "Search" appeared 4 times, "Providers" appeared 2 times with no way to tell them apart.
- "React hook" label in lock compiler — framework-specific. Changed to "Hook" (framework-neutral).
- shadcn false positive in tech stack detection — pattern
uimatched any path containing "ui" (e.g. src/ui/button.tsx). Tightened to check forcomponents.json+uidirectory. - Hardcoded TypeScript fallback entry point — index.ts used when no entry point found. Changed to detect from language (src/main.py, cmd/main.go, src/main.rs, etc.).
- Duplicate "Step 7" comment in init.ts — two steps both labeled "// 7." causing confusion.
Generality Bugs (hardcoded assumptions)
- Contract generator hardcoded index.ts as entry — now auto-detects per language.
- Contract generator hardcoded typescript as language — now uses detectProjectLanguage().
- extToLang only had 12 extensions — expanded to 40 (Python, Go, Rust, Java, Ruby, PHP, C#, Svelte, Vue, etc.).
- Tech stack detection only ~30 items — expanded to 70+ (Django, Flask, FastAPI, Rails, Spring, Laravel, Phoenix, etc.).
- Package manager hardcoded to
npm— now auto-detects pnpm/yarn/bun from lock files.
New Features
Auto-generated
.mikkignore—mikk initcreates a.mikkignorewith smart defaults per detected language. Monorepo-aware: readspackage.jsonworkspaces andpnpm-workspace.yamlto generate patterns like packages/*/tests/**.Multi-language file discovery — detectProjectLanguage() + getDiscoveryPatterns() support 10 languages: TypeScript, JavaScript, Python, Go, Rust, Java, Ruby, PHP, C#, and unknown fallback.
Diagram size limits — Module diagrams cap at 40 functions (exported/entry/cross-module only) and 15 file subgraphs. Smart single-module main diagram renders file-level view instead of one node.
Duplicate module name disambiguation — appends distinctive directory: "Search (Diagram Generator)", "Search (Intent Engine)", etc.
40 domain keyword categories for semantic module naming (up from 24).
Multi-language context file patterns — discovers schemas/models/routes for Python (Django/Flask), Ruby (Rails), Go, Rust, Java, PHP, not just TS/JS.
3 new parseMikkIgnore tests — trailing-slash directories, path-based directories, bare file patterns.
Stats
Metric | v1.3.x | v1.4.0 -- | -- | -- Builds | 9/9 | 9/9 Tests | 66 | 128 Languages supported | 1 (TS) | 10 Tech stack items | ~30 | 70+ extToLang entries | 12 | 40 Domain keyword categories | 24 | 40 Bugs fixed | — | 19 Files changed | — | 12Tested on: Mesh monorepo (9 packages, 67 files → 9 modules), zerovault (Next.js, 136 files → 25 modules), chanhdai.com (Next.js 16, 231 files → 34 modules)
v1.4.0 — Universal Language Support, Smart Ignore & Monorepo Clustering What was wrong with the previous version Analysis was broken or useless for:Any non-TypeScript project — file discovery, parsing, contracts, and context files were all hardcoded for TS/React
Monorepos — running on Mikk's own codebase produced 12,235 lines of lock file, 1 module called "Testing", and a main diagram with a single useless node
Test files polluting results — no .mikkignore was ever generated, so test fixtures, helpers, and test directories were analyzed as production code
Projects with tsconfig.base.json — detected as JavaScript instead of TypeScript
Single-file clusters never created — orphan files silently disappeared from analysis due to a premature assignment bug
Duplicate module names — multiple clusters named "Search" or "Providers" with no disambiguation
Massive unreadable diagrams — module diagrams dumped every internal function (88+ lines of noise)
Bug Fixes (19 total)
Critical Bugs
C# detection used fs.access('*.csproj') which always fails — glob patterns don't work with fs.access. Switched to fast-glob for .csproj/.sln detection.
Cluster detector orphan bug — files were marked as assigned during greedy expansion even when they didn't join any cluster. The orphan fallback (confidence: 0.3 single-file clusters) never fired, causing 0 modules for projects with weak cross-file coupling. Fixed by deferring assignment until a cluster reaches minClusterSize.
parseMikkIgnore trailing-slash handling — dist/ stayed as dist/ (no match in fast-glob). Now correctly expands: bare dist/ → /dist/, path packages/*/tests/ → packages/*/tests/**.
detectProjectLanguage missed tsconfig.base.json — monorepos using tsconfig.base.json (no tsconfig.json at root) were detected as JavaScript. Now checks tsconfig.*.json glob.
TS parser crashed on .js/.jsx/.mjs/.cjs files — ScriptKind was always set to TS, causing parse failures on plain JS. Now maps extension → correct ScriptKind (JS, JSX, TSX).
Analysis Quality Bugs
Only 1 module detected on monorepos — all 71 files lumped into "Testing" because the cluster detector's greedy phase consumed every file as a seed, leaving nothing for orphan/merge logic.
No .mikkignore auto-generated — mikk init never created one. Test files, fixtures (packages/core/tests/fixtures/**), and build artifacts all included in analysis.
Main diagram showed single useless node — with 1 module, the main diagram was literally 📦 Testing, 14 files, 51 functions and nothing else.
Module diagrams listed every internal function — no size limits. A module with 50+ functions produced 88+ line diagrams that were unreadable.
Duplicate module names not disambiguated — "Search" appeared 4 times, "Providers" appeared 2 times with no way to tell them apart.
"React hook" label in lock compiler — framework-specific. Changed to "Hook" (framework-neutral).
shadcn false positive in tech stack detection — pattern ui matched any path containing "ui" (e.g. src/ui/button.tsx). Tightened to check for components.json + ui directory.
Hardcoded TypeScript fallback entry point — index.ts used when no entry point found. Changed to detect from language (src/main.py, cmd/main.go, src/main.rs, etc.).
Duplicate "Step 7" comment in init.ts — two steps both labeled "// 7." causing confusion.
Generality Bugs (hardcoded assumptions)
Contract generator hardcoded index.ts as entry — now auto-detects per language.
Contract generator hardcoded typescript as language — now uses detectProjectLanguage().
extToLang only had 12 extensions — expanded to 40 (Python, Go, Rust, Java, Ruby, PHP, C#, Svelte, Vue, etc.).
Tech stack detection only ~30 items — expanded to 70+ (Django, Flask, FastAPI, Rails, Spring, Laravel, Phoenix, etc.).
Package manager hardcoded to npm — now auto-detects pnpm/yarn/bun from lock files.
New Features
Auto-generated .mikkignore — mikk init creates a .mikkignore with smart defaults per detected language. Monorepo-aware: reads package.json workspaces and pnpm-workspace.yaml to generate patterns like packages/*/tests/**.
Multi-language file discovery — detectProjectLanguage() + getDiscoveryPatterns() support 10 languages: TypeScript, JavaScript, Python, Go, Rust, Java, Ruby, PHP, C#, and unknown fallback.
Diagram size limits — Module diagrams cap at 40 functions (exported/entry/cross-module only) and 15 file subgraphs. Smart single-module main diagram renders file-level view instead of one node.
Duplicate module name disambiguation — appends distinctive directory: "Search (Diagram Generator)", "Search (Intent Engine)", etc.
40 domain keyword categories for semantic module naming (up from 24).
Multi-language context file patterns — discovers schemas/models/routes for Python (Django/Flask), Ruby (Rails), Go, Rust, Java, PHP, not just TS/JS.
3 new parseMikkIgnore tests — trailing-slash directories, path-based directories, bare file patterns.
Stats
Metric v1.3.x v1.4.0
Builds 9/9 9/9
Tests 66 128
Languages supported 1 (TS) 10
Tech stack items ~30 70+
extToLang entries 12 40
Domain keyword categories 24 40
Bugs fixed — 19
Files changed — 12
Tested on: Mesh monorepo (9 packages, 67 files → 9 modules), zerovault (Next.js, 136 files → 25 modules), chanhdai.com (Next.js 16, 231 files → 34 modules)