v1.5.0 #3
Ansh-dhanani
announced in
Announcements
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
v1.4.0 — Universal Language Support, Smart Ignore & Monorepo Clustering
What was wrong with the previous version
Analysis was broken or useless for:
.mikkignorewas ever generated, so test fixtures, helpers, and test directories were analyzed as production codeBug Fixes (19 total)
Critical Bugs
fast-globfor.csproj/.slndetection.dist/stayed asdist/(no match in fast-glob). Now correctly expands: baredist/→**/dist/**, path packages/*/tests/ → packages/*/tests/**.ScriptKindwas always set toTS, causing parse failures on plain JS. Now maps extension → correctScriptKind(JS,JSX,TSX).Analysis Quality Bugs
.mikkignoreauto-generated —mikk initnever created one. Test files, fixtures (packages/core/tests/fixtures/**), and build artifacts all included in analysis.uimatched any path containing "ui" (e.g. src/ui/button.tsx). Tightened to check forcomponents.json+uidirectory.Generality Bugs (hardcoded assumptions)
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)
This discussion was created from the release v1.5.0.
All reactions