diff --git a/CHANGELOG.md b/CHANGELOG.md index ae5d1b1..baefb5a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - CI: install `wikifier[mcp]` only on Python ≥3.10 (`mcp` has no 3.8/3.9 wheels). +- Regenerated committed `library.md` from a full `update-maps` so deleted 4.6.10 leftovers (`mcp/tools/{intel,status,workflow}.py`, `parsers/javascript/_parser.py`, `health.py`, `server_backup.py`) no longer appear in the file tree, Mermaid graph, or reverse-deps. +- `generate_library_md` drops cache keys / reverse-deps whose source is not a file on disk (stale cache cannot resurrect ghosts). +- File-tree captions prefer `*.wiki.md` purpose/role text; health *reasons* are audit stamps and are not copied as descriptions. +- `session_bootstrap`: re-read `cache_backend` after ACS persist so creating an empty SQLite stub does not leave `cache_backend: "none"`. Additive `cache_empty` / `cache_files_indexed` distinguish sqlite-empty from no store. + +### Added +- `tests/test_library_map_honesty.py`: fails if committed `library.md` names a path that is not a file on disk. + +### Changed +- Agent Protocol **v0.6.1**: 4.6.x additive field notes (readiness tiers, `map_paths`, ACS v1.3 `agent_signal`, `needs_mark_green`, sqlite-empty vs `cache_backend: none`). +- README / protocol language table: deep/ACS (Python, JS/TS) vs regex hint (Rust/Go/C/C++/C#/Java). ## [4.6.13] - 2026-08-27 diff --git a/CLAUDE.md b/CLAUDE.md index 5a9415b..da977c8 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -6,7 +6,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co Wikifier is a **zero-dependency, agent-to-agent codebase wiki**: it gives AI agents a token-efficient, queryable map of a codebase (health matrix, dependency graph, per-file wiki summaries) so they can look things up instead of re-reading full sources. The human layer (`index.html` dashboard) is strictly secondary — a read-only viewer of the same artifacts. It is deliberately NOT a general human documentation tool. -**This repo dogfoods itself.** Wikifier runs on its own source, and you are expected to follow its agent protocol when working here (see below). The authoritative agent contract is `skills/run.md` (Agent Protocol v0.6 — package 4.6.x) — read it before substantive work. +**This repo dogfoods itself.** Wikifier runs on its own source, and you are expected to follow its agent protocol when working here (see below). The authoritative agent contract is `skills/run.md` (Agent Protocol v0.6.1 — package 4.6.x) — read it before substantive work. **USE WIKIFIER FIRST (non-negotiable in this repo, preferred on any managed target):** At session start call `session_bootstrap` (MCP or `python -m wikifier session-bootstrap`). Prefer Core daily tools (`list_core_tools`): bootstrap, `check_changes`, `prepare_edit`, `suggest_next_actions` (json `actions[]`), `record_change`, `mark_green`. Look up via map/wiki/deps before re-reading full sources. Selective work only (🔴 / actionable 🟡). Never skip `record_change` after edits. diff --git a/Findings/M5-Dogfood-Progress.md b/Findings/M5-Dogfood-Progress.md index 1450686..6e47104 100644 --- a/Findings/M5-Dogfood-Progress.md +++ b/Findings/M5-Dogfood-Progress.md @@ -126,7 +126,7 @@ See prior M5 sections + M4 handoff for full. All activity logged for 95%+ / 5-10 **Agents spawned (parallel, background, general-purpose):** 1. m5-dogfood-RecipeLlama (id 019e8c1b-3747-7c02-bd89-26772145c558): RecipeLab + RecipeLab_alt + llama_index heavy subs (core, integrations, etc.) + other cloned JS/py like airflow. Full cli + MCP wikifier + cross (chisel/stele/trammel). 44+ tool calls in first ~3min, running. 2. m5-dogfood-ConsistencyMeta (id 019e8c1b-619e-78c3-8adf-f9b2fb84930f): ConsistencyHub + CoordinationHub + Chisel + Trammel + stele-context (meta MCP test projects). Emphasis on cross-MCP dogfood + scale. Running, list_dir + runs. -3. m5-dogfood-OtherCustoms (id 019e8c1b-7f9b-7312-9615-c6040ef4082e): All remaining customs (AutoClacker, Chisel wait no, the smalls: Console-logger, Expense-Tracker, Foundry, Interpres, IronAdamant.github.io, lang_cobol, PolygonWatch, polymarket, Projects*, PythonBol, RustForge, Simple-Time, SolanaSniper, Time-Calculator) + remaining cloned OSS (Babylon.js, dotnet, linux, redox, rust). Breadth + MCP. Running. +3. m5-dogfood-OtherCustoms (id 019e8c1b-7f9b-7312-9615-c6040ef4082e): All remaining customs (AutoClacker, Chisel wait no, the smalls: Console-logger, Expense-Tracker, Foundry, Interpres, IronAdamant.github.io, lang_cobol, private project A, private project C, Projects*, PythonBol, RustForge, Simple-Time, private project B, Time-Calculator) + remaining cloned OSS (Babylon.js, dotnet, linux, redox, rust). Breadth + MCP. Running. 4. m5-dogfood-LargeScale (id 019e8c1b-a7e9-7110-8339-c2e1cf382c50): llvm-project (HEAVILY SCOPED subs e.g. llvm/llvm, clang for 50k+ test) + worktree consistencyhub copy. Scale/resilience metrics focus. 1 transient err on huge list but recovering. Running. **Prompts included:** Full M5 briefing (no self, allowed only, project_root always, absolute monitored, previous fixes), detailed per-target workflow (check-changes, health json/summary, validate, scoped update_maps, full wikifier MCP suite with project_root + directory, cross chisel/stele/trammel MCP, metrics collection, append to this doc with subagent_id + FRESH 3 + 9GPs/DF/calib), hygiene, autonomous tool use. @@ -161,7 +161,7 @@ Agents are delivering the broad M5 dogfood on *all* projects via parallel execut **Summary of execution:** - 4 parallel subagents launched and actively running full M5 dogfood workflows on *all* targets: - - Customs: RecipeLab/alt, ConsistencyHub, CoordinationHub, Chisel, Trammel, stele-context, AutoClacker, checkpoint_*, Console-logger, Expense-Tracker, Foundry, Interpres, IronAdamant.github, lang_cobol, PolygonWatch, polymarket, Project* checks, PythonBol, RustForge, Simple-Time, SolanaSniper, Time-Calculator. + - Customs: RecipeLab/alt, ConsistencyHub, CoordinationHub, Chisel, Trammel, stele-context, AutoClacker, checkpoint_*, Console-logger, Expense-Tracker, Foundry, Interpres, IronAdamant.github, lang_cobol, private project A, private project C, Project* checks, PythonBol, RustForge, Simple-Time, private project B, Time-Calculator. - Pulled OSS in cloned: llama_index (core/integrations/instrumentation/utils etc heavy), llvm-project (scoped subs for scale), Babylon.js, dotnet-dotnet, linux, redox, rust, airflow etc. - Workflows as specified: inits/monitored (absolutes), cli check/health/validate/update (scoped), full wikifier MCP suite (project_root + dir), cross-MCP (chisel triage/suggest on JS, stele map/find on py, trammel plans), metrics (yellows, barrels, scale, times, issues), evidence appends to this doc. - Hygiene: All prompts include FRESH 3, 9GPs (spectrum for llvm/llama 50k+, boundary, measurable), sub ids, no self on Wikifier. @@ -352,7 +352,7 @@ Additional: `grep -rn --include="*.py" ... -E "m5-dogfood-OtherCustoms-replaceme **Honest calib (long-term lens, subagent_id=m5-dogfood-OtherCustoms-replacement):** ~25-35% M5 for these 2 (strong on workflow adherence, cross equivs exercised end-to-end w/ scoping, metrics concrete, init/monitor fix, launcher used, BRC signals, no errors); low on full breadth (many more small customs + scoped OSS pending), sustained (no daemon/MA multi-day), MCP direct not, trammel absent here. Snapshot for smalls good (lean health, cross populates, root detection via doctor/launcher). Target 60%+ after remaining targets + appends. No overclaim. Ref LargeScale for how handled scale (note limits here smalls quick). These re-runs close partial from failed prior (timestamps ~00:36-00:47 updates). -**Next per this:** Continue breadth: next small customs (Console-logger, Foundry, Interpres, IronAdamant..., lang_cobol..., PolygonWatch, polymarket..., Project* , PythonBol, RustForge, Simple-Time, SolanaSniper, Time-Calculator, checkpoint_). For each: similar (init if needed, monitored scope if root bad w/ build/tool-dirs, full cli + cross chisel/stele if py/js/C#, sqlite, metrics, FRESH before each append or batch). Then scoped OSS (Babylon.js scope src? , dotnet small parts, linux/rust/redox note as large refer LargeScale, skip full or 1-2 files). Append brief per or after groups. Use project_root always. Keep main clean. +**Next per this:** Continue breadth: next small customs (Console-logger, Foundry, Interpres, IronAdamant..., lang_cobol..., private project A, private project C, Project* , PythonBol, RustForge, Simple-Time, private project B, Time-Calculator, checkpoint_). For each: similar (init if needed, monitored scope if root bad w/ build/tool-dirs, full cli + cross chisel/stele if py/js/C#, sqlite, metrics, FRESH before each append or batch). Then scoped OSS (Babylon.js scope src? , dotnet small parts, linux/rust/redox note as large refer LargeScale, skip full or 1-2 files). Append brief per or after groups. Use project_root always. Keep main clean. **subagent_id=m5-dogfood-OtherCustoms-replacement 100%** (this entry, all prior calls for these 2, hygiene, no main edits, only Findings append + 2 target monitored edits). 8-step DF + 9GPs verbatim. Ready continue breadth without loops. @@ -396,7 +396,7 @@ Additional: `grep -rn --include="*.py" ... -E "m5-dogfood-OtherCustoms-replaceme **Honest calib:** ~40-50% for group (added 5, rich cross on Rust/JS/cobol, scoping success on lang, metrics, no errs/loops); cumulative ~50%+ on smalls start. Still low on remaining ~10 customs + OSS. Good progress breadth, appends frequent. Ref prior for full 9gp. -**Next:** More smalls: PolygonWatch, polymarket_api_research, ProjectClickTest/ProjectSimpleCheck/ProjectSimplifiedCheck, PythonBol-Translator, RustForge, Simple-Time-Tracker-for-Tasks, SolanaSniper, Time-Calculator, checkpoint_project_management. Then Babylon (scope src), dotnet (small parts), note linux/rust/redox as large (ref LargeScale llvm example, scope 1-2 or skip full). Append after groups. sub id everywhere. +**Next:** More smalls: private project A, private project C, ProjectClickTest/ProjectSimpleCheck/ProjectSimplifiedCheck, PythonBol-Translator, RustForge, Simple-Time-Tracker-for-Tasks, private project B, Time-Calculator, checkpoint_project_management. Then Babylon (scope src), dotnet (small parts), note linux/rust/redox as large (ref LargeScale llvm example, scope 1-2 or skip full). Append after groups. sub id everywhere. **subagent_id=m5-dogfood-OtherCustoms-replacement 100%**. 8-step + hygiene +9GPs. Continuing without stuck. @@ -412,11 +412,11 @@ Additional: `grep -rn --include="*.py" ... -E "m5-dogfood-OtherCustoms-replaceme - **ProjectClickTest** (small 96k): Inited. health 2y (monitored+file_health +sh? ), validate 7 miss, update, 2y, 7h lines, check 0.03s. - **Simple-Time-Tracker-for-Tasks** (small 800k): Inited. health 1y (index.html +sh), validate 35 miss, update, 1y,3p,6h,11l lib, check0.04s. - **checkpoint_project_management** (3.7M): Inited. health 1y (wiki-local/... +sh), validate 140 miss (many?), partial run (batch timeout on output); note scale more files. -- **PolygonWatch** (322M, JS/TS with src 1.5M + node?): Inited, monitored scoped to src +wikifier files. check/health ran (yellows on ui/node_modules/... inside src + test +sh; 2y), validate 173 miss (large output killed full); update not reached (timeout). Note: src scoping included node_modules (pollution); would need exclude or finer src/ui etc. Partial metrics y=2, miss~173, scale src many. (Cross not full due time). +- **private project A** (JS/TS): Inited, monitored scoped to src +wikifier files. check/health ran (yellows on ui/node_modules/... inside src + test +sh; 2y), validate misses (large output killed full); update not reached (timeout). Note: src scoping included node_modules (pollution); would need exclude or finer src/ui etc. Partial metrics y=2. (Cross not full due time). - **PythonBol-Translator** (136M py, src 1.5M): Inited, monitored to src+key. (Workflow not fully run due prior kill, but state inited/scoped; py/cobol related per name, cross stele/chisel would apply on src). -- **SolanaSniper** (163M py, src 636k): Inited, monitored to src+key. Similar, partial run; py, good for cross. +- **private project B** (py): Inited, monitored to src+key. Similar, partial run; py, good for cross. - **RustForge** (1.5G large): Inited (sh), monitored root (large); no src. Per rule, noted as large-scale like linux/rust in cloned; refer LargeScale agent llvm example (heavy scope to 1-2 files/dirs e.g. README + small sub, or skip full scans to avoid timeout/repeated err as in failed prior OtherCustoms). No full workflow/MCP to prevent loop; scale limitation logged. -- Others like ProjectSimpleCheck, ProjectSimplifiedCheck, polymarket_api_research: similar partial state pre (monitored root, health~5l), inited in prior/this but not full re-run here (time); would follow same (init if, scope if large, cli cross). +- Others like ProjectSimpleCheck, ProjectSimplifiedCheck, private project C: similar partial state pre (monitored root, health~5l), inited in prior/this but not full re-run here (time); would follow same (init if, scope if large, cli cross). **OSS scoped start:** - **Babylon.js** (cloned, 2.1G JS graphics): Large, per "scoped cloned OSS (use directory= or update monitored to small key parts only, e.g. if has 'src' or 'README'...)". Would init if needed (cloned has wikifier state from prior), update monitored to src/ if exists + README, run cli with directory=src for ops, cross chisel (JS) with dir. Not fully executed in this pass (breadth customs priority + time), note as feasible with heavy scope (ref LargeScale success on llvm subs). @@ -424,11 +424,11 @@ Additional: `grep -rn --include="*.py" ... -E "m5-dogfood-OtherCustoms-replaceme - **linux** (8.1G), **rust** (1.4G), **redox** (57M): Large-scale as noted; "note linux/rust/redox as large-scale (refer to LargeScale agent for llvm example)". Redox 57M smaller but still, use very limited (1-2 subs or files) or skip full. Avoid massive scans per prompt. Cloned has state from LargeScale etc. - Other cloned (airflow etc) covered by other agents per prior. -**Overall metrics summary (this sub m5-dogfood-OtherCustoms-replacement):** ~12+ small/medium customs covered (full or partial re-runs: AutoClacker C# 2y/23m/146u, Expense py 1y/41m/47u, Console JS 1y/23m/21u, Foundry 2y/9m, Interpres Rust 2y/30m/185u/22gaps, Iron 1y/66m/36u, lang_cobol scoped 2y/37m, Time py 1y/41m/113u, ProjectClick 2y/7m, Simple 1y/35m, checkpoint 1y/140m, +partials Polygon etc). Yellows typically 1-2 per (auto mtime), greens 1 (sh), pending 2-8, missing 7-173 (lean health always), BRC prune 0 always, check times ~0.03-0.05s, update 0.1-15s (lang/rust), chisel 0.15-6s (scale), stele fast. Errors: 1 batch timeout (output flood on large validate), 1 partial kill; handled by skip/log no loop. Scale notes: used src/ subs for 300M+, 1 sub for 1.4G; node pollution in one. MCP wikifier: skipped (search partial x tries). Cross: chisel/stele exercised on C#/Rust/JS/py/cobol/text, often 0 tests but gaps/risk in Rust good, project_root in doctor confirmed targets. 9GP #1 multi-lang spectrum strong, #9 concrete nums, #8 boundary, hygiene FRESH+sub+Findings only. +**Overall metrics summary (this sub m5-dogfood-OtherCustoms-replacement):** ~12+ small/medium customs covered (full or partial re-runs: AutoClacker C# 2y/23m/146u, Expense py 1y/41m/47u, Console JS 1y/23m/21u, Foundry 2y/9m, Interpres Rust 2y/30m/185u/22gaps, Iron 1y/66m/36u, lang_cobol scoped 2y/37m, Time py 1y/41m/113u, ProjectClick 2y/7m, Simple 1y/35m, checkpoint 1y/140m, +partials private project A etc). Yellows typically 1-2 per (auto mtime), greens 1 (sh), pending 2-8, missing 7-173 (lean health always), BRC prune 0 always, check times ~0.03-0.05s, update 0.1-15s (lang/rust), chisel 0.15-6s (scale), stele fast. Errors: 1 batch timeout (output flood on large validate), 1 partial kill; handled by skip/log no loop. Scale notes: used src/ subs for 300M+, 1 sub for 1.4G; node pollution in one. MCP wikifier: skipped (search partial x tries). Cross: chisel/stele exercised on C#/Rust/JS/py/cobol/text, often 0 tests but gaps/risk in Rust good, project_root in doctor confirmed targets. 9GP #1 multi-lang spectrum strong, #9 concrete nums, #8 boundary, hygiene FRESH+sub+Findings only. **9GPs / calib (wrap, sub m5-dogfood-OtherCustoms-replacement):** All 9 upheld as before + #1 for breadth smalls + scoped larges (Rust 185u real gaps, cobol scope test); #9 (100s units, 10s-100s miss, times, 0-22 gaps, 12+ targets); calib ~55-65% visible for customs start (strong on smalls full + scoping examples + cross, FRESH every, no self); low on full OSS + remaining customs + sustained. Honest, no over. Ref LargeScale for large handling. M5 broad achieved on allowed externals. -**Remaining to do (if more passes):** Finish full on partials (Project*, polymarket, PythonBol, Solana, RustForge scoped), Babylon/dotnet scoped, note large linux/rust/redox. Append per. Use project_root. sub id m5-dogfood-OtherCustoms-replacement. +**Remaining to do (if more passes):** Finish full on partials (Project*, private project C, PythonBol, private project B, RustForge scoped), Babylon/dotnet scoped, note large linux/rust/redox. Append per. Use project_root. sub id m5-dogfood-OtherCustoms-replacement. **subagent_id=m5-dogfood-OtherCustoms-replacement 100%** (all this session, calls, edits to Findings only + monitored for scope, FRESH, 9GPs, no Wikifier source, external only). Completed many without looping per prompt. Evidence appended frequently. @@ -448,7 +448,7 @@ Additional: `grep -rn --include="*.py" ... -E "m5-dogfood-OtherCustoms-replaceme - Console-logger: manifest.json 🟡. - Expense-Tracker-Updated: index.html 🟡 (had prior state). - Foundry: .chisel/chisel.db-wal 🟡, file_health.md 🟡. -- (Batch continued for others like Interpres, IronAdamant.github.io, lang_cobol, PolygonWatch, polymarket, Project* , PythonBol, RustForge, Simple-Time, SolanaSniper, Time-Calculator; similar pattern of 0-2 yellows post-check, no major issues reported in summaries. MCP calls timed out on some.) +- (Batch continued for others like Interpres, IronAdamant.github.io, lang_cobol, private project A, private project C, Project* , PythonBol, RustForge, Simple-Time, private project B, Time-Calculator; similar pattern of 0-2 yellows post-check, no major issues reported in summaries. MCP calls timed out on some.) **Observations:** Small projects respond quickly to wikifier (check ~seconds, health small matrices). Mostly auto yellows from the supplement run itself. No heavy pollution or errors in cli. Large OSS (Babylon etc.) not fully covered here (too broad for manual; replacement agent or scoping needed; refer to LargeScale for how llvm was handled with heavy scoping). @@ -461,8 +461,8 @@ Additional: `grep -rn --include="*.py" ... -E "m5-dogfood-OtherCustoms-replaceme **subagent_id=m5-gamma-coord-agents** (FRESH 3 PASS pre-append; this replacement for the prior cancelled one succeeded after ~25min/1544s, 138 tools). **Summary from agent (full details/verbatim in its appended sections in this doc; started with partials AutoClacker+Expense, breadth all listed small + scoped larges):** -- Covered ~12+ small customs (AutoClacker C# with chisel/stele signals, Expense py, Console-logger, Foundry, Interpres Rust excellent 22 gaps/2 risk from chisel despite 0 tests, lang_cobol scoped 1.4G sub, Time py, ProjectClick, Simple-Time, checkpoint partial, Polygon/PythonBol/Solana 100M+ with src scope, IronAdamant etc.) + scoped OSS (Babylon 2.1G tiny 1-file sub 0 miss success; dotnet/linux/rust/redox noted large per prompt, ref LargeScale llvm). -- Workflows: inits for sh on partials; monitored edits to sensible abs (src/sub + key + wikifier state, e.g. 16-26 lines for Interpres/lang/Polygon etc.; tiny for Babylon); launcher/check/health/validate/update (Pruned 0 BRC always; lean health 1-2y + sh g; miss lists 23-140 but no bloat); cross chisel (real gaps/risk in Rust 185u+22gaps, C# 146u, etc.; triage 0-2); stele (doctor pr=target, map/search/index on py/rust/js/cobol/text; editable mismatches noted, tier2 0); sqlite pre/post (units created on run); MCP wikifier search x3+ "partial connecting" → equivs via cli+lib+internals (BRC from cache "has_brc", health dicts); no loops (1-2 try limit, skip on timeout/output flood, log proceed). +- Covered ~12+ small customs (AutoClacker C# with chisel/stele signals, Expense py, Console-logger, Foundry, Interpres Rust excellent 22 gaps/2 risk from chisel despite 0 tests, lang_cobol scoped 1.4G sub, Time py, ProjectClick, Simple-Time, checkpoint partial, private project A/PythonBol/private project B with src scope, IronAdamant etc.) + scoped OSS (Babylon 2.1G tiny 1-file sub 0 miss success; dotnet/linux/rust/redox noted large per prompt, ref LargeScale llvm). +- Workflows: inits for sh on partials; monitored edits to sensible abs (src/sub + key + wikifier state, e.g. 16-26 lines for Interpres/lang/private project A etc.; tiny for Babylon); launcher/check/health/validate/update (Pruned 0 BRC always; lean health 1-2y + sh g; miss lists 23-140 but no bloat); cross chisel (real gaps/risk in Rust 185u+22gaps, C# 146u, etc.; triage 0-2); stele (doctor pr=target, map/search/index on py/rust/js/cobol/text; editable mismatches noted, tier2 0); sqlite pre/post (units created on run); MCP wikifier search x3+ "partial connecting" → equivs via cli+lib+internals (BRC from cache "has_brc", health dicts); no loops (1-2 try limit, skip on timeout/output flood, log proceed). - Metrics (examples): Auto y=2 g=1 p=8 miss=23 scale26f/97l check0.03s update1.2s chisel 146u/0t/44c/76co 2 risk 22 gaps; Expense y1 g1 p4 miss41 check0.03s chisel0.15s stele pr=Expense 0d pre →6d post; Interpres y2 g1 p2 miss30 scale18f/185u check0.03s update15s chisel 185u/0t/2c/36co 2 risk+22gaps; lang scoped y2 g1 p2 miss37 scale37f check0.03s; Babylon scoped y1 p4 0 miss check0.045s; common fast smalls, BRC prune0, lean matrix, cross dbs populated, 0 OOM, pollution noted (src node, tool dbs, old paths); times 0.03-15s check/update, 0.15-6s cross. - Obs: scope critical for large (prevented floods; 0 miss on tiny Babylon vs potential); launcher root correct; init added sh; cross signals real (Rust gaps despite 0t, stele pr respected); MCP wikifier limited (search issues → equivs); some glitches (stele pr=None on one, git-warn sub, node in src); graceful on errors. - Evidence: 4+ frequent appends to this doc (with sub id, FRESH 3 verbatim PASS each, 9GPs traced esp #1 spectrum smalls+scoped, #8 external only, #9 #s like y/g/p/miss/units/times/gaps, #2 zero-dep, hygiene, calib ~55-65%+ for group, no overclaim; ref LargeScale for scale pattern + M5 docs). Only edited this doc + target monitored (no other Wikifier files). ~12+ targets full + OSS notes. @@ -484,7 +484,7 @@ Additional: `grep -rn --include="*.py" ... -E "m5-dogfood-OtherCustoms-replaceme - **OtherCustoms original (019e8c1b-7f9b-7312-9615-c6040ef4082e)**: Cancelled ~8.4h/77 tools (doom loop repeated err on breadth/large OSS; partial on AutoClacker/Expense). - **OtherCustoms-replacement (019e8dea-3669-7483-a26d-096eed0d26f9, m5-dogfood-OtherCustoms-replacement)**: Completed ~25min/138 tools. Breadth ~12+ small customs (AutoClacker C# chisel/stele, Expense, Console, Foundry, Interpres Rust 22 gaps/185u, lang_cobol scoped, Time, Projects, partials on 100M+ with src; scoped Babylon tiny 0 miss; notes on dotnet/linux/rust/redox ref LargeScale); frequent appends x4+ with FRESH/9GPs/calib ~55-65%; graceful skips; monitored edits + inits; cross chisel/stele/sqlite; no loops. -**Coverage:** ALL customs (Recipe family, Consistency/Coord/meta MCPs Chisel/Trammel/stele, AutoClacker+checkpoint+Console+Expense+Foundry+Interpres+Iron+lang_cobol+Polygon+polymarket+Projects+PythonBol+RustForge+Simple-Time+Solana+Time-Calculator + others) + pulled OSS in cloned (llama heavy, llvm 50k+ C++ scale success, Babylon scoped, notes on linux/rust etc.). Substantial evidence/metrics (yellow counts 1-2 per small, BRC 101/1363 on large, units/gaps 22-185, times 0.03-15s/4min, lean health, cross signals, scale 6f-79k files, pollution/resilience obs). +**Coverage:** ALL customs (Recipe family, Consistency/Coord/meta MCPs Chisel/Trammel/stele, AutoClacker+checkpoint+Console+Expense+Foundry+Interpres+Iron+lang_cobol+private project A+private project C+Projects+PythonBol+RustForge+Simple-Time+private project B+Time-Calculator + others) + pulled OSS in cloned (llama heavy, llvm 50k+ C++ scale success, Babylon scoped, notes on linux/rust etc.). Substantial evidence/metrics (yellow counts 1-2 per small, BRC 101/1363 on large, units/gaps 22-185, times 0.03-15s/4min, lean health, cross signals, scale 6f-79k files, pollution/resilience obs). **M5 doc updates:** Multiple appends (launch, monitors, LargeScale full report+synthesis, Other failure+manual supplement+replacement completion, overall); all with FRESH 3 PASS + sub ids + 9GPs/calib/hygiene. Main tree clean (4 🟢 greens post all). @@ -808,7 +808,7 @@ subagent_id=m5-phase1-reporter-repl 100% (replacement for failed m5-phase1-repor **Agents spawned (parallel, background, general-purpose):** 1. m5-dogfood-RecipeLlama-relaunch (id 019e8f47-1c59-75e1-8044-856816057142): RecipeLab + RecipeLab_alt + llama_index heavy subs (core, integrations, etc.). Full cli + MCP wikifier + cross (chisel/stele/trammel). Running (250s+, 13 tools, 1 transient err, 13% ctx). Actively on alt/Recipe/llama. 2. m5-dogfood-ConsistencyMeta-relaunch (id 019e8f47-4acd-73b3-9bac-d9e4e93ccb26): ConsistencyHub + CoordinationHub + Chisel + Trammel + stele-context. Emphasis on cross-MCP + scale. Running (169s+, 39 tools, 20% ctx). On Consistency+meta MCPs. -3. m5-dogfood-OtherCustoms-relaunch (id 019e8f47-72e0-77a0-8005-93fd7084f786): Remaining customs (AutoClacker, checkpoint_*, Console-logger, Expense-Tracker, Foundry, Interpres, IronAdamant, lang_cobol, Polygon, polymarket, Projects*, PythonBol, RustForge, Simple-Time, Solana, Time-Calculator) + remaining cloned OSS (Babylon.js, dotnet, linux, redox, rust etc.). Breadth + MCP. Running (93s+, 19 tools, 15% ctx). +3. m5-dogfood-OtherCustoms-relaunch (id 019e8f47-72e0-77a0-8005-93fd7084f786): Remaining customs (AutoClacker, checkpoint_*, Console-logger, Expense-Tracker, Foundry, Interpres, IronAdamant, lang_cobol, private project A, private project C, Projects*, PythonBol, RustForge, Simple-Time, private project B, Time-Calculator) + remaining cloned OSS (Babylon.js, dotnet, linux, redox, rust etc.). Breadth + MCP. Running (93s+, 19 tools, 15% ctx). 4. m5-dogfood-LargeScale-relaunch (id 019e8f47-9b22-7421-8036-1b4dda685a99): llvm-project (HEAVILY SCOPED subs e.g. llvm/llvm, clang for 50k+ test) + worktree consistencyhub copy. Scale/resilience focus. Running (83s+, 24 tools, 16% ctx). **Prompts included:** Full M5 briefing (no self, allowed externals only, project_root always, reference prior Assessment-Report for 85-90% ceiling/gaps/DoD/M5.3, previous fixes), detailed per-target workflow (check-changes, health json/summary, validate, scoped update_maps, full wikifier MCP suite with project_root + directory, cross chisel/stele/trammel where applicable), metrics collection, append to this doc with subagent_id + FRESH 3 + 9GPs/DF/calib, hygiene, autonomous tool use. Focus on sustained for 95%+ (boundedness, recovery, obs, "3", 7-criteria). @@ -928,35 +928,35 @@ run: `grep -rn --include="*.py" /home/aron/Documents/coding_projects/Wikifier/wi run: `grep -l "M5-Dogfood-Progress.md" /home/aron/Documents/coding_projects/Wikifier/wikifier/*.py 2>/dev/null || echo "0 py files reference M5 doc (FRESH #3, only edit via append to Findings/ for subagent_id=m5-dogfood-OtherCustoms-relaunch)"` → 0 py files reference M5 doc (FRESH #3, only edit via append to Findings/ for subagent_id=m5-dogfood-OtherCustoms-relaunch) (PASS) Additional greps for subid/prior 0 in py/Findings before cat. No main source touched, only this append + prior target mon copies (4 sh inits). -**Targets (all small customs first per priority + re-run full even partial prior state from mds; ~18 covered; some no sh pre copied per prior replacement pattern; monitored mostly sensible root/src/scoped e.g. Auto explicit files, Interpres/Polygon/Solana/PythonBol src, lang cobol examples, no reconfig for customs):** -- ProjectClickTest (small ~96k prior), ProjectSimpleCheck, ProjectSimplifiedCheck, Simple-Time-Tracker-for-Tasks, Time-Calculator (py), Console-logger (JS), PolygonWatch (ts src), polymarket_api_research, PythonBol-Translator (py/cobol src), RustForge, SolanaSniper (py src), AutoClacker (C# explicit), checkpoint_project_management, Expense-Tracker-Updated (py), Foundry, Interpres (Rust src/cargo), IronAdamant.github.io, lang_cobol_sample_projects_for_testing (scoped cobol ex). +**Targets (all small customs first per priority + re-run full even partial prior state from mds; ~18 covered; some no sh pre copied per prior replacement pattern; monitored mostly sensible root/src/scoped e.g. Auto explicit files, Interpres/private project A/private project B/PythonBol src, lang cobol examples, no reconfig for customs):** +- ProjectClickTest (small ~96k prior), ProjectSimpleCheck, ProjectSimplifiedCheck, Simple-Time-Tracker-for-Tasks, Time-Calculator (py), Console-logger (JS), private project A (ts src), private project C, PythonBol-Translator (py/cobol src), RustForge, private project B (py src), AutoClacker (C# explicit), checkpoint_project_management, Expense-Tracker-Updated (py), Foundry, Interpres (Rust src/cargo), IronAdamant.github.io, lang_cobol_sample_projects_for_testing (scoped cobol ex). (Cloned OSS scoped next.) **Workflow per (1 pass, breadth; WIKIFIER_PROJECT_ROOT=abs python -m wikifier ... ; graceful no loops, 0-1 retry):** -1. Prep: copy sh if missing (4: ProjectSimple*, polymarket, RustForge), mon sensible (no edit needed for these). +1. Prep: copy sh if missing (4: ProjectSimple*, private project C, RustForge), mon sensible (no edit needed for these). 2. wikifier: check-changes (all "Running incremental..."), health --summary (lean 1-2 🟡 mtime auto +1 🟢 sh), validate (head: many 🔴 MISSING for src + state like journal/.chisel/pyc/images/wiki-local but "✅ All monitored have health entries"), update-maps ("Rebuilding library.md"). 3. MCP wikifier: search_tool x3+ partial "servers still connecting" (per mds "MCP wikifier ... timed 6000s ... used shell+lib equivs"); used python -m health/validate + parse file_health.md (grep 🟡), no direct get_*. -4. Cross: for JS/TS (Console, Polygon, ProjectClick, Babylon later): chisel analyze/triage/test-gaps/suggest --project-dir=abs [dir] (json/head); for py (Time, Expense, Solana, PythonBol): stele-context doctor + map --path-prefix=... --compact; for C#/Rust (Auto, Interpres): chisel too. -5. Metrics/obs per: yellow 1-2 (mostly mtime on main/src/pkg/.chisel wal or state; sh g), barrel activity 0 (no "BRC auto-marked" / "Pruned 0" in outputs this pass, update no chains mention), file scale small (e.g. Auto ~26f prior/now ~16- , Interpres 18f/38 scanned now 59u, Polygon 306f/246u/85t/1377tu/19662 edges high, Console 2f 0u, RustForge 1y, lang ~37f scoped, Time 1.8M but 1y; miss 7-40+ lean), warnings: node_modules in Polygon mon (yellow on pkg), pycache in py (Solana/PythonBol/Time), .chisel dbs in Foundry/Console, build obj in Auto triage, .vs in Time; no OOM, fast 0.03- few s; stele cross: always reports Wikifier root 22/886 chunks 0 symbols "empty_with_chunks" + 6 editable_install_mismatch (chisel/trammel/stele/coordinationhub/cobol-safe-translator/PythonBol +1) + alerts + "m5_cross_note" (exact match prior mds "stele 6 mismatches... for sibling installs", "22/886/0 sym", gap4/DoD4); map path-prefix target: "No indexed documents" (no auto reindex externals per mds); chisel: units 0-246 (C# heuristic 0u despite files, Rust 59u/0t, JS/TS 0-2f/246u/ high edges in Polygon), gaps/risk 0 often or top on generated/legacy/build (0 actionable per mds "0 top_risk/gaps/triaged/stale often heuristic", prior Interpres 22g/2r now triage showed but head limited); 0 test_edges in smalls. +4. Cross: for JS/TS (Console, private project A, ProjectClick, Babylon later): chisel analyze/triage/test-gaps/suggest --project-dir=abs [dir] (json/head); for py (Time, Expense, private project B, PythonBol): stele-context doctor + map --path-prefix=... --compact; for C#/Rust (Auto, Interpres): chisel too. +5. Metrics/obs per: yellow 1-2 (mostly mtime on main/src/pkg/.chisel wal or state; sh g), barrel activity 0 (no "BRC auto-marked" / "Pruned 0" in outputs this pass, update no chains mention), file scale small (e.g. Auto ~26f prior/now ~16- , Interpres 18f/38 scanned now 59u, private project A high edges, Console 2f 0u, RustForge 1y, lang ~37f scoped, Time 1.8M but 1y; miss 7-40+ lean), warnings: node_modules in private project A mon (yellow on pkg), pycache in py (private project B/PythonBol/Time), .chisel dbs in Foundry/Console, build obj in Auto triage, .vs in Time; no OOM, fast 0.03- few s; stele cross: always reports Wikifier root 22/886 chunks 0 symbols "empty_with_chunks" + 6 editable_install_mismatch (chisel/trammel/stele/coordinationhub/cobol-safe-translator/PythonBol +1) + alerts + "m5_cross_note" (exact match prior mds "stele 6 mismatches... for sibling installs", "22/886/0 sym", gap4/DoD4); map path-prefix target: "No indexed documents" (no auto reindex externals per mds); chisel: units 0-246 (C# heuristic 0u despite files, Rust 59u/0t, JS/TS 0-2f, high edges in private project A), gaps/risk 0 often or top on generated/legacy/build (0 actionable per mds "0 top_risk/gaps/triaged/stale often heuristic", prior Interpres 22g/2r now triage showed but head limited); 0 test_edges in smalls. 6. Evidence: this append (group), prior per-target runs logged in cmds; ref mds for calib/prior nums (e.g. "Interpres Rust 185u/22 gaps/2 risk from chisel despite 0t, AutoClacker C# 146u" " ~55-65% for group" Other). 7. Hygiene + id: FRESH 3 verbatim above before cat; subagent_id in 100% (headers, every echo/cmd desc, this); after: record-change + mark-green. 8. Error: 0 repeated errs (all small quick success, 1-2 pass limit). **Per project / group metrics summary (yellow count, barrel, scale, warns, obs; from runs + prior mds refs):** -- Typical: y=1-2 (auto mtime), g=1 (sh), p=2-8, miss=7-40+ (src+state lean), units e.g. Interpres 59 (prior mds 185), Auto 0u/16f (prior 146u), Polygon 246u/306f/85t/1377tu/19662e (high TS), Console 0u/2f, others small 0- , check~0.03s, update 0.1s, chisel 0.1- few s. BRC: 0 activity/prune (small no heavy barrels this pass; "Pruned 0" common in mds). Scale: 12+ customs 6f-306f , 21-246u . Warns: pollution (node/pkg in Polygon mon, pyc/.chisel in py/JS, build obj in C# triage, .vs in Time) as "stale detection / BRC / health durability" obs per mds. Obs: lean health held 1-2y or sh g everywhere ("Pruned 0" BRC common in mds); scope worked (lang cobol examples, Polygon src); cross signals real (chisel units/gaps on Rust/TS/C# match design, 0 actionable often per "Chisel on stress/hybrid... 0 ... heuristic fallback" gap3/DoD3; stele 6mism/22/886/0s/empty as "cross-MCP boundary/worktree signal" gap4/DoD4 "stele 6 mismatches (Chisel/Trammel/stele/Coord/cobol)"); MCP equiv reliable vs direct partial; no bloat/OOM. +- Typical: y=1-2 (auto mtime), g=1 (sh), p=2-8, miss=7-40+ (src+state lean), units e.g. Interpres 59 (prior mds 185), Auto 0u/16f (prior 146u), private project A (high TS), Console 0u/2f, others small 0- , check~0.03s, update 0.1s, chisel 0.1- few s. BRC: 0 activity/prune (small no heavy barrels this pass; "Pruned 0" common in mds). Scale: 12+ customs 6f-306f , 21-246u . Warns: pollution (node/pkg in private project A mon, pyc/.chisel in py/JS, build obj in C# triage, .vs in Time) as "stale detection / BRC / health durability" obs per mds. Obs: lean health held 1-2y or sh g everywhere ("Pruned 0" BRC common in mds); scope worked (lang cobol examples, private project A src); cross signals real (chisel units/gaps on Rust/TS/C# match design, 0 actionable often per "Chisel on stress/hybrid... 0 ... heuristic fallback" gap3/DoD3; stele 6mism/22/886/0s/empty as "cross-MCP boundary/worktree signal" gap4/DoD4 "stele 6 mismatches (Chisel/Trammel/stele/Coord/cobol)"); MCP equiv reliable vs direct partial; no bloat/OOM. - Specifics ref mds: re-ran AutoClacker (C# 2y/23m prior), Interpres (Rust 2y/30m/185u/22gaps/2risk prior now 2y/59u), Console (1y/23m/21u prior), Expense (1y/41m/47u), Time (1y/41m/113u), ProjectClick (2y/7m), Simple (1y/35m), lang (2y/37m), Babylon scoped later 1y/0miss prior; cumulative ~18 covered (prior " ~12+ small/medium customs" + these re). **9 Guiding Principles traces (subagent_id=m5-dogfood-OtherCustoms-relaunch; using exact #s from mds + this):** -- #1 Spectrum: small customs multi-lang (C# AutoClacker 16f/0u/44c, Rust Interpres 38f/59u/2c, py Expense/Time/Solana/PythonBol, JS/TS Console 2f/Polygon 306f/19662e high, cobol lang scoped) vs prior mds Other smalls + alt JS stress BRC~20+ + llvm C++ 79k/168k u/4min/1363ch/101BRC + meta servers 1y + cloned OSS; breadth not depth. +- #1 Spectrum: small customs multi-lang (C# AutoClacker 16f/0u/44c, Rust Interpres 38f/59u/2c, py Expense/Time/private project B/PythonBol, JS/TS Console 2f/private project A high, cobol lang scoped) vs prior mds Other smalls + alt JS stress BRC~20+ + llvm C++ 79k/168k u/4min/1363ch/101BRC + meta servers 1y + cloned OSS; breadth not depth. - #2 Zero-dep: python -m wikifier (WIKIFIER_PROJECT_ROOT=abs) + chisel/stele cli ( /home/aron/.local/bin/ + --project-dir=abs ) + file parses (no new deps, launcher sh copies, per mds "zero-dep" "shell+lib equivs" "WIKIFIER_PROJECT_ROOT=abs"). - #8 M5 boundary: 100% (all /coding_projects/* external listed, no Wikifier source, only this Findings append + target mon/sh inits, main clean expected; "strict M5 boundary: external only" "100% external (the 5 + prior; only Findings/M5 doc edited)"). -- #9 Measurable: y=1-2 g=1 p=2-8 miss=7-40+ units=0-246 (Interpres 59, Polygon 246u/19662e, Auto 16f/0u/44c, prior mds 185u/22g/2r Auto 146u), times 0.03s- , BRC 0, chisel edges 0-19662, stele 22/886/0sym/6mism (exact mds), 18 targets, FRESH 0, subid 100%, 9GP/DF/calib. +- #9 Measurable: y=1-2 g=1 p=2-8 miss=7-40+ units=0-246 (Interpres 59, Auto 16f/0u/44c, prior mds 185u/22g/2r Auto 146u), times 0.03s- , BRC 0, chisel edges 0-19662, stele 22/886/0sym/6mism (exact mds), 18 targets, FRESH 0, subid 100%, 9GP/DF/calib. - #7 Multi: this relaunch as "replacement" pattern per mds (prior Other doom 77t/4e then repl 138t/25min success; "parallel agents + handling"). - #6 Obs: BRC/mtime y auto, stele 6mism/empty/alerts as "resilience/obs test case" "pollution as stale signal", chisel 0 gaps as "design gap obs" per mds. - Others (#3-5): incremental check fast, health lean persisted, state surfaces (file_health.md, library rebuild, .chisel dbs in targets); durability no bloat. (Traces #1/#8/#9 emphasized per mds "9GP #1 spectrum ... #8 boundary #9 #s"). -**8-step DF followed (verbatim):** 1. Review prior (read mds full/tail/key via prior calls: 60% snap, Other prior ~12+ e.g. Interpres 185u/22g/2r/Auto 146u/ y=1-2, stele 6mism/22/886, chisel 0/84e, calibs 40-65%/55-65% group, gaps/DoD). 2. Prep (list ls on coding_projects/cloned, FRESH 3 exact before edit, copy sh 4 targets, read mon some). 3. Chose safe (python-m + cli equivs for MCP partial, project_root always, 1-2 passes, skip on err, no loops; small customs first). 4. Exec (batches check/health/validate/update on 18, cross chisel on C#/Rust/JS/TS e.g. Interpres 59u/0t , Polygon 306f/19662e, stele on 4 py always main 6mism per mds; metrics via grep/head/json head). 5. (n/a cross mcp full, used cli). 6. Append this (post FRESH) + will record/mark. 7. Post: record-change + mark-green via terminal. 8. Final: this + OSS next + synth writeup with subid. +**8-step DF followed (verbatim):** 1. Review prior (read mds full/tail/key via prior calls: 60% snap, Other prior ~12+ e.g. Interpres 185u/22g/2r/Auto 146u/ y=1-2, stele 6mism/22/886, chisel 0/84e, calibs 40-65%/55-65% group, gaps/DoD). 2. Prep (list ls on coding_projects/cloned, FRESH 3 exact before edit, copy sh 4 targets, read mon some). 3. Chose safe (python-m + cli equivs for MCP partial, project_root always, 1-2 passes, skip on err, no loops; small customs first). 4. Exec (batches check/health/validate/update on 18, cross chisel on C#/Rust/JS/TS e.g. Interpres 59u/0t , stele on 4 py always main 6mism per mds; metrics via grep/head/json head). 5. (n/a cross mcp full, used cli). 6. Append this (post FRESH) + will record/mark. 7. Post: record-change + mark-green via terminal. 8. Final: this + OSS next + synth writeup with subid. **Honest calib (long-term lens, subagent_id=m5-dogfood-OtherCustoms-relaunch):** ~50-65% for customs group (strong: full re-runs all listed smalls first per "Prioritize: all small customs first (quick)", cross exercised (chisel units/gaps on Rust/TS/C# match prior mds nums like 185u/22g, stele 6mism/22/886/0 exact, lean 1-2y "Pruned 0" held, FRESH/subid/9GP/DF/hygiene 100%, breadth ~18 + metrics concrete, no err/loops, scope worked, ref mds prior Other "12+ ... 55-65%"); low/partial on MCP direct <30s (partial servers per gap2/DoD2), chisel actionable >=3 gaps (0 often heuristic per gap3/DoD3), stele target reindex (0 docs per gap4/DoD4), full sustained/"3"/obs trends (1-pass per gap1/DoD1/8), full OSS depth (smalls only here; ref LargeScale llvm per gap6/DoD6), trammel claims 0 (per gap7). Target 60%+ post OSS + M5.3 sustained. Honest no overclaim; matches mds "40-65% calibs per group" "snapshot 60%" "as close as possible without dogfooding". Ref phases/9GP/DoD in Assessment-Report.md + Progress tail. @@ -1098,12 +1098,12 @@ Additional greps for subid/prior 0 in py/Findings before cat. No main source tou **Full diary retrieved from completed subagent 019e8f47-72e0-77a0-8005-93fd7084f786 (777.06s | 48 tools | 1 turn; exit 0).** Verified in Progress (subid mentions now 10+; key sections present in tail + phrase counts: "m5-dogfood-OtherCustoms-relaunch", "scoped OSS", "Interpres 185u/22g", "Babylon 0 miss success", "FRESH 3 hygiene", "9 GPs", "honest calib", "timeout log skip", "50-65% customs", "40-55% OSS", "Interpres 59/ref 185", "8-step DF", subid 100%, refs to Assessment-Report mds data only). **Content summary (from full output; only existing mds data + this run metrics):** -- ~18+ small-medium customs re-ran full (prioritized small first per prompt: Project* x3, Simple/Time/Console/Polygon/polymarket/PythonBol/RustForge/Solana/Auto/checkpoint/Expense/Foundry/Interpres/Iron/lang_cobol). y=1-2/g=1 typical (mtime on src/pkg/.chisel or state; 1g sh); barrel 0/"Pruned 0"; scale 6-306f /21-246u (e.g. Polygon 306f/246u/85t/1377tu/19662e; Interpres ref mds 185u now 59u in run/2y/1g; Auto ref 146u now 16f/0u/2y/1g; Console 2f/0u/1y+1g); miss 7-40+ lean (src+state); times 0.03s+ check; cross chisel (units/gaps/risk on Rust/TS/C#/JS match mds prior nums e.g. 185u/22g/2r Interpres despite 0t, 146u Auto; high 19662e Polygon; 0 actionable often "heuristic all covered" per mds "0 top_risk... 84 edges"); stele 22/886/0s/6mism exact (chisel/trammel/stele/Coord/cobol + PythonBol) + alerts/empty per mds gap4; MCP equiv (shell/cli) reliable (direct partial "servers connecting" per mds gap2). +- ~18+ small-medium customs re-ran full (prioritized small first per prompt: Project* x3, Simple/Time/Console/private project A/private project C/PythonBol/RustForge/private project B/Auto/checkpoint/Expense/Foundry/Interpres/Iron/lang_cobol). y=1-2/g=1 typical (mtime on src/pkg/.chisel or state; 1g sh); barrel 0/"Pruned 0"; scale 6-306f /21-246u (e.g. Interpres ref mds 185u now 59u in run/2y/1g; Auto ref 146u now 16f/0u/2y/1g; Console 2f/0u/1y+1g); miss 7-40+ lean (src+state); times 0.03s+ check; cross chisel (units/gaps/risk on Rust/TS/C#/JS match mds prior nums e.g. 185u/22g/2r Interpres despite 0t, 146u Auto; high edges private project A; 0 actionable often "heuristic all covered" per mds "0 top_risk... 84 edges"); stele 22/886/0s/6mism exact (chisel/trammel/stele/Coord/cobol + PythonBol) + alerts/empty per mds gap4; MCP equiv (shell/cli) reliable (direct partial "servers connecting" per mds gap2). - OSS scoped (Babylon + dotnet + linux/rust/redox lim per mds "only scoped/tiny or ref Large" + prompt rule for 50k+): Babylon (mon ktx2decoder/src + README + state; 1y1g, validate 0 miss success per mds prior, update ok; chisel sub 1f0u/202t/2966tu/0e/47342c, triage no_data); dotnet (mon created 3 small .cs + state; 1y, chisel partial start); linux/rust/redox (mon created 1f scoped + state/sh; 1y lean; chisel batch timeout on large even scoped = logged "timeout on large batch, skip, proceed" per error rule 8 "1-2 retry limit... no doom loops"; wikifier lean only). - Common obs: lean 1-2y/sh g "Pruned 0" held everywhere (per mds "lean health held everywhere: 1-2y or sh 🟢 even on 79k llvm"); scope worked (Babylon 0 miss, mon create for lim, no flood); cross limits as mds (chisel 0 actionable heuristic, stele always main 6mism/0 ext); no OOM/bloat/pollution corruption (pollution as "stale detection / BRC / health durability" obs per mds); graceful on timeout (logged skip, proceed). -- 9 GPs (traces + exact mds refs): #1 spectrum (customs multi-lang C#/Rust/py/JS/cobol smalls + scoped OSS C#/C/rs/JS vs mds alt JS BRC~20+ named AdversarialScaffoldGenerator/CrossMCPRecipeValidator/MCPOrchestrationDashboard/MultiAgentLockStorm/WorkingTreeCoverageFuzzer + models/services + long hex chains/detector=none + llama py 5673u + llvm C++ 79k/168863u/4min/1363 ch/101 BRC/1537e/482k mon/1-2y lean + meta 1k + Consistency ~1k + prior Other ~12+); #2 zero-dep (python-m + WIKIFIER_PROJECT_ROOT + mon cat + chisel/stele --project-dir + file parses); #8 boundary 100% (ext /coding_projects/* + cloned only; no self; only Findings + target mon/sh inits for scope; main 4g); #9 measurable (y=1-2/g=1/p=2-8/miss=7-40+/units=0-246 e.g. Interpres 59/ref mds 185/Auto ref 146/Polygon 246u+19662e/Babylon 1f0u+47342c/0miss, times 0.03s+, BRC 0, stele 22/886/0s/6mism exact mds, chisel 0-19662e/0 actionable often/ref 84e, 18+customs+5 OSS scoped, FRESH 0, subid 100%, 9GP/DF/calib 40-65%; mds "concrete (#s)" "20+ BRC y ... 168k u/4min/1363 ch/101 BRC/84e/6mism/7 MISSING/1-2y lean/40-65%calibs"); #7 multi (relaunch as "replacement" per mds Other doom 77t/4e + repl 138t/25min + "parallel agents + handling delivered full coverage"); #6 obs (BRC/mtime y auto, stele 6mism/empty/alerts/pollution as "resilience/obs test case" "stale signal" per mds, chisel 0 gaps heuristic as "design gap obs" per gap3); #3-5 (incremental fast, health lean persisted no bloat, state surfaces, "3" proxy scoped partials). +- 9 GPs (traces + exact mds refs): #1 spectrum (customs multi-lang C#/Rust/py/JS/cobol smalls + scoped OSS C#/C/rs/JS vs mds alt JS BRC~20+ named AdversarialScaffoldGenerator/CrossMCPRecipeValidator/MCPOrchestrationDashboard/MultiAgentLockStorm/WorkingTreeCoverageFuzzer + models/services + long hex chains/detector=none + llama py 5673u + llvm C++ 79k/168863u/4min/1363 ch/101 BRC/1537e/482k mon/1-2y lean + meta 1k + Consistency ~1k + prior Other ~12+); #2 zero-dep (python-m + WIKIFIER_PROJECT_ROOT + mon cat + chisel/stele --project-dir + file parses); #8 boundary 100% (ext /coding_projects/* + cloned only; no self; only Findings + target mon/sh inits for scope; main 4g); #9 measurable (y=1-2/g=1/p=2-8/miss=7-40+/units=0-246 e.g. Interpres 59/ref mds 185/Auto ref 146/Babylon 1f0u+47342c/0miss, times 0.03s+, BRC 0, stele 22/886/0s/6mism exact mds, chisel 0-19662e/0 actionable often/ref 84e, 18+customs+5 OSS scoped, FRESH 0, subid 100%, 9GP/DF/calib 40-65%; mds "concrete (#s)" "20+ BRC y ... 168k u/4min/1363 ch/101 BRC/84e/6mism/7 MISSING/1-2y lean/40-65%calibs"); #7 multi (relaunch as "replacement" per mds Other doom 77t/4e + repl 138t/25min + "parallel agents + handling delivered full coverage"); #6 obs (BRC/mtime y auto, stele 6mism/empty/alerts/pollution as "resilience/obs test case" "stale signal" per mds, chisel 0 gaps heuristic as "design gap obs" per gap3); #3-5 (incremental fast, health lean persisted no bloat, state surfaces, "3" proxy scoped partials). - 8-step DF + hygiene: 1.review mds (gaps/DoD/60%/85-90%/prior Other nums like 185u/22g/2r/Auto 146u/Babylon 0miss/lean 1-2y/Pruned0/40-65%calib/agent 77t), 2.prep ls/explore + FRESH + mon create/cat for scope, 3.safe equiv cli (MCP partial per mds), 4.exec (wikifier all, chisel small/Babylon, timeout log skip large cross per rule), 5/6.append post FRESH (customs group + OSS group), 7.record/mark, 8.synth. FRESH (exact) before *every* append. -- Honest calib (per mds 40-65% agent/group + "snapshot 60%" + "as close as possible without dogfooding" 85-90% ceiling): ~50-65% customs group / ~40-55% OSS (strong: all listed re-ran full breadth-first per "Start with small ones", cross (chisel units/gaps on Rust/TS/C# match mds prior Interpres 185u/22g/2r/Auto 146u/Polygon high e, stele 22/886/6mism/0s/empty exact mds, Babylon 0miss per mds, lean 1-2y "Pruned 0" held everywhere per mds, FRESH/subid/9GP/DF/hygiene/record/mark 100%, scope for large per "external fixes enabled", no loops/errs on smalls, ref mds nums/gaps/DoD/calibs); low/partial: MCP direct <30s (partial servers per gap2/DoD2), chisel actionable >=3 real gaps on stress (0 often heuristic per gap3/DoD3 "0 top_risk/gaps/triaged/stale ... 84 edges"), stele external reindex >=50 chunks/find on 5+ sym (always Wikifier/0 per gap4/DoD4 "Stele external/cross: Always main ... 6 editable mismatches"), agent scale resilience (timeout on large batch logged/skipped per rule but per DoD5 "2+ full runs on 50k+ 0 "doom loop""), full OSS depth lean+BRC on linux/rust+1 (scoped 1f only per gap6/DoD6 "OSS depth" "only scoped/tiny or "ref Large"" + mds "linux 93k/rust 59k"), trammel >=3 claims (0 per gap7/DoD7), "3"/durab under churn (1-pass proxy per gap1/DoD1/8 "needs literal sustained concurrent MA+daemon over weeks/months for ... '3' 0-corruption"), central 95% (per gap9/DoD9/10; this + mds snapshot 60% + M5.2 85-90%). Matches mds "per-sub good (40-65%), no central 95%", "low on full sustained", "snapshot... needs literal sustained...". Target 60%+ post M5.3 (ref DoD1/8/9/10 + M5.3 plan in Assessment-Report.md). No overclaim. All per 9 GPs #8 boundary #9 measurable. +- Honest calib (per mds 40-65% agent/group + "snapshot 60%" + "as close as possible without dogfooding" 85-90% ceiling): ~50-65% customs group / ~40-55% OSS (strong: all listed re-ran full breadth-first per "Start with small ones", cross (chisel units/gaps on Rust/TS/C# match mds prior Interpres 185u/22g/2r/Auto 146u/private project A high e, stele 22/886/6mism/0s/empty exact mds, Babylon 0miss per mds, lean 1-2y "Pruned 0" held everywhere per mds, FRESH/subid/9GP/DF/hygiene/record/mark 100%, scope for large per "external fixes enabled", no loops/errs on smalls, ref mds nums/gaps/DoD/calibs); low/partial: MCP direct <30s (partial servers per gap2/DoD2), chisel actionable >=3 real gaps on stress (0 often heuristic per gap3/DoD3 "0 top_risk/gaps/triaged/stale ... 84 edges"), stele external reindex >=50 chunks/find on 5+ sym (always Wikifier/0 per gap4/DoD4 "Stele external/cross: Always main ... 6 editable mismatches"), agent scale resilience (timeout on large batch logged/skipped per rule but per DoD5 "2+ full runs on 50k+ 0 "doom loop""), full OSS depth lean+BRC on linux/rust+1 (scoped 1f only per gap6/DoD6 "OSS depth" "only scoped/tiny or "ref Large"" + mds "linux 93k/rust 59k"), trammel >=3 claims (0 per gap7/DoD7), "3"/durab under churn (1-pass proxy per gap1/DoD1/8 "needs literal sustained concurrent MA+daemon over weeks/months for ... '3' 0-corruption"), central 95% (per gap9/DoD9/10; this + mds snapshot 60% + M5.2 85-90%). Matches mds "per-sub good (40-65%), no central 95%", "low on full sustained", "snapshot... needs literal sustained...". Target 60%+ post M5.3 (ref DoD1/8/9/10 + M5.3 plan in Assessment-Report.md). No overclaim. All per 9 GPs #8 boundary #9 measurable. **M5 impact / next (per mds phases/DoD/gaps):** Breadth "all" customs + remaining cloned OSS scoped delivered (ref mds "Other replacement ... ~12+ ... + scoped OSS (Babylon ... )"); rich evidence for gates (lean always, cross signals match mds 6mism/0 actionable, scope works for large per "external fixes enabled 'just work'"); ready M5.3 sustained (72h+ MA on 3+ e.g. alt/Consistency/llvm per mds DoD1/M5.3 plan "literal multi-month ... on 3+ prepared targets (priority: 1. alt ... 2. ConsistencyHub ... 3. llvm sub or llama") to close remaining (compaction/obs/recovery/"3" 0-corr). Main clean (post mark 4g expected on Findings). Large still running (1157s+ 93t 24% 3err progressing; no full diary yet). @@ -1182,10 +1182,10 @@ Additional: `grep -rn --include="*.py" . -E "m5-dogfood-LargeScale-relaunch" 2>/ **All 4 agents now complete (same as before; 3/4 + Large; full round delivered):** - RecipeLlama-relaunch (5 mentions): alt BRC ~20+ exact named services/chains (AdversarialScaffoldGenerator... + models/services; detector=none/name-heuristic; long hex; 1 mtime +1 pending; lean ~21); llama core 724f/5673u/8e (chisel complete, py edges new); integrations lean *2 entries* on 1000s py; cross 6mm/0/70e/0; MCP equiv reliable; calib ~45-60%. - ConsistencyMeta-relaunch (6 mentions): Consist ~1k 0y (post time; hundreds MISS deliberate); 82162e/0; stele self 108d/495c/30947 sym/6 mism/0.81% tier2/38 stale; trammel target 2p/4t + decompose scaffold (e.g. CalendarModals.jsx); multi-pass "been while"; cross self+target; calib 35-50%. -- OtherCustoms-relaunch (10 mentions): ~18+ customs full re-runs (y=1-2/g=1 lean Pruned0; Interpres 59u/ref mds 185u/22g/2r; Auto ref 146u; Polygon 246u+19662e; cross chisel/stele match mds); 5 OSS scoped (Babylon 0 miss success/1f0u+47342c; linux/rust/redox 1f mon created + graceful "timeout on large batch logged/skipped" per rule 8; dotnet partial); calib 50-65% customs/40-55% OSS. +- OtherCustoms-relaunch (10 mentions): ~18+ customs full re-runs (y=1-2/g=1 lean Pruned0; Interpres 59u/ref mds 185u/22g/2r; Auto ref 146u; cross chisel/stele match mds); 5 OSS scoped (Babylon 0 miss success/1f0u+47342c; linux/rust/redox 1f mon created + graceful "timeout on large batch logged/skipped" per rule 8; dotnet partial); calib 50-65% customs/40-55% OSS. - LargeScale-relaunch (14-17 mentions): 79k+ C++ scoped (79221f llvm/llvm + lib/clang/etc.; ~540k total); lean 0 sub entries/20 lines (pollution obs); python-primary success on 5k dir (streams, small cache 8k, no OOM); validate ~79k miss managed; chisel 0% this pass (C++ lim vs prior 168k u/4min/1537e); stele path-prefix/index 4d/22ch; worktree 967f lean; barrel 0 C++; vs prior/ smaller proves scale handling; calib 45-60%; explicit years/M5.3 note. -**Round synth (all per 9 GPs/8DF/FRESH/record/mark/subid/honest/no self/existing mds data only/project_root/launcher; main 4+🟢 always):** Breadth + scale + cross + meta MCP + sustained multi-pass on 5k-50k+ (alt/llama/Consist 1k + customs ~18 + llvm 79k+ C++ + worktree) + remaining OSS scoped. Metrics expand prior mds snapshot (alt BRC 20+ named exact persistent, llama 5673u/8e py, Consist 82162e/108d/30k sym/6mism/2p, Other 185u/22g/19662e/0 miss Babylon, Large 79k f /0 sub health /python-primary success /chisel 0% lim /stele 22ch path-prefix /barrel 0 C++ /lean Pruned0 / no OOM / fast scoped; cross 6mm/0/70-84e/0 heuristic; bg confirm alt BRC exact live). 9 GPs ( #1 spectrum: alt JS BRC~20+ named + llama py 5.6k u + Consist ~1k React + customs C#/Rust/py/JS/cobol 6-306f + llvm C++ 79k/50k+ creative + worktree 967f + prior llvm 168k u/79k f/4min/1363 ch/101 BRC/1537e/482k mon vs meta 1k; multi-lang/scale/stress); #2 zero-dep (WIKIFIER_PROJECT_ROOT + python-m + launcher + chisel/stele --project-dir/storage + mon cat + lib equivs); #7 multi-agent (4 parallel + prior repls/manuals + coord + M5.1/2 swarms); #8 boundary 100% (all ext only: Recipe/alt/llama/Consist/Coord/Chisel/Trammel/stele + cloned customs/OSS/llvm + worktree; only Findings appends + temp target mon/sh for scope; main 4g; FRESH on main py only); #9 measurable (exact #s from all: 20+ BRC named chains, 5673u/8e, 82162e, 108d/495c/30947 sym/6 mism/2p, 185u/22g/2r, 19662e, 0 miss Babylon, 79k f/5k lib/540k total/4k miss printed/0 sub health/0 barrel C++/python-primary 5k/8k cache/20s update/2-5s check/0 OOM, 18+customs+5 OSS, FRESH 0, subid 100%, 9GP/DF/calib 35-65%; vs mds 168k u/4min/1363/101/1537/482k/1-2y/40-65%/60% snap/85-90% ceiling/8 gaps/10 DoD); #6 obs (BRC/mtime y auto, stele 6mism/empty/alerts as "resilience/obs test case"/"stale signal"/"cross boundary" per mds, chisel 0 heuristic as "design gap obs", pollution as durability, timeout graceful as recovery); others (incremental fast, lean persisted, state surfaces). Honest calib per group 35-65% (strong: re-runs/lean/cross/hygiene/scope/primary/no OOM/proof for 50k+; low/partial per 8 gaps/10 DoD: MCP<30s full on BRC/large, chisel >=3 actionable on stress (0 heuristic), stele target reindex (0 ext always main 6mism), agent 0-doom on 50k+ (this pass 0% chisel but no loop), lean on full linux/rust (scoped only), trammel claims (0), "3" 0-corr under sustained churn (1-pass/multi-pass proxy), central 95% viability (per mds "as close as possible without dogfooding" 85-90% ceiling; this + prior snapshot/hardening); target 75%+ post M5.3 literal >=72h concurrent MA+daemon on 3+ (alt/Consistency/llvm-llama priority per Assessment M5.3 plan/DoD1/8/9/10 + gap1/8). No overclaim. Contrib 85-90%+ (sustained signals on prepared 5k-50k+ creative/multi-lang/OSS; bounded/recovery/obs/"3" proxy; external fixes (abs mon/launcher/scope/primary/lean) enabled "just work"; cross obs useful; parallel + handling; harvestable for p6/M5.3/5-10yr gates). Main clean (4+🟢 M5 keys + artifacts; Progress green with Large complete + prior Other/coord reasons; only skills mtime 🟡). Evidence bundle: Progress (all diaries + launch/status/integration notes + FRESH verbatim + subid/9GP/DF/calib); Assessment-Report (60% base + 85-90% M5.2 + gaps/DoD/M5.3 + prior exact #s/services/chains/168k u etc.); p6/Milestones updated prior. +**Round synth (all per 9 GPs/8DF/FRESH/record/mark/subid/honest/no self/existing mds data only/project_root/launcher; main 4+🟢 always):** Breadth + scale + cross + meta MCP + sustained multi-pass on 5k-50k+ (alt/llama/Consist 1k + customs ~18 + llvm 79k+ C++ + worktree) + remaining OSS scoped. Metrics expand prior mds snapshot (alt BRC 20+ named exact persistent, llama 5673u/8e py, Consist 82162e/108d/30k sym/6mism/2p, Other 185u/22g/0 miss Babylon, Large 79k f /0 sub health /python-primary success /chisel 0% lim /stele 22ch path-prefix /barrel 0 C++ /lean Pruned0 / no OOM / fast scoped; cross 6mm/0/70-84e/0 heuristic; bg confirm alt BRC exact live). 9 GPs ( #1 spectrum: alt JS BRC~20+ named + llama py 5.6k u + Consist ~1k React + customs C#/Rust/py/JS/cobol 6-306f + llvm C++ 79k/50k+ creative + worktree 967f + prior llvm 168k u/79k f/4min/1363 ch/101 BRC/1537e/482k mon vs meta 1k; multi-lang/scale/stress); #2 zero-dep (WIKIFIER_PROJECT_ROOT + python-m + launcher + chisel/stele --project-dir/storage + mon cat + lib equivs); #7 multi-agent (4 parallel + prior repls/manuals + coord + M5.1/2 swarms); #8 boundary 100% (all ext only: Recipe/alt/llama/Consist/Coord/Chisel/Trammel/stele + cloned customs/OSS/llvm + worktree; only Findings appends + temp target mon/sh for scope; main 4g; FRESH on main py only); #9 measurable (exact #s from all: 20+ BRC named chains, 5673u/8e, 82162e, 108d/495c/30947 sym/6 mism/2p, 185u/22g/2r, 0 miss Babylon, 79k f/5k lib/540k total/4k miss printed/0 sub health/0 barrel C++/python-primary 5k/8k cache/20s update/2-5s check/0 OOM, 18+customs+5 OSS, FRESH 0, subid 100%, 9GP/DF/calib 35-65%; vs mds 168k u/4min/1363/101/1537/482k/1-2y/40-65%/60% snap/85-90% ceiling/8 gaps/10 DoD); #6 obs (BRC/mtime y auto, stele 6mism/empty/alerts as "resilience/obs test case"/"stale signal"/"cross boundary" per mds, chisel 0 heuristic as "design gap obs", pollution as durability, timeout graceful as recovery); others (incremental fast, lean persisted, state surfaces). Honest calib per group 35-65% (strong: re-runs/lean/cross/hygiene/scope/primary/no OOM/proof for 50k+; low/partial per 8 gaps/10 DoD: MCP<30s full on BRC/large, chisel >=3 actionable on stress (0 heuristic), stele target reindex (0 ext always main 6mism), agent 0-doom on 50k+ (this pass 0% chisel but no loop), lean on full linux/rust (scoped only), trammel claims (0), "3" 0-corr under sustained churn (1-pass/multi-pass proxy), central 95% viability (per mds "as close as possible without dogfooding" 85-90% ceiling; this + prior snapshot/hardening); target 75%+ post M5.3 literal >=72h concurrent MA+daemon on 3+ (alt/Consistency/llvm-llama priority per Assessment M5.3 plan/DoD1/8/9/10 + gap1/8). No overclaim. Contrib 85-90%+ (sustained signals on prepared 5k-50k+ creative/multi-lang/OSS; bounded/recovery/obs/"3" proxy; external fixes (abs mon/launcher/scope/primary/lean) enabled "just work"; cross obs useful; parallel + handling; harvestable for p6/M5.3/5-10yr gates). Main clean (4+🟢 M5 keys + artifacts; Progress green with Large complete + prior Other/coord reasons; only skills mtime 🟡). Evidence bundle: Progress (all diaries + launch/status/integration notes + FRESH verbatim + subid/9GP/DF/calib); Assessment-Report (60% base + 85-90% M5.2 + gaps/DoD/M5.3 + prior exact #s/services/chains/168k u etc.); p6/Milestones updated prior. **Next (per mds):** Monitor/poll if needed (all 4 done); manual only if Large had unhandled fail (none; completed 0). Commit/push evidence if clean (Findings only per boundary). M5.3 literal multi-month sustained concurrent MA+daemon on 3+ prepared (alt/Consistency/llvm or llama) for true 95%+/5-10yr viability (DoD1/8/9/10 + 7-crit full / gap1/8 closure); 72h+ 0-corr <5%gr/day <5min rec, "3" 0-loss 20+ cycles, full OSS depth lean+BRC on linux/rust, central 95% report, etc. This round + prior + M5.1/2 hardening gets "as close as possible without (more) dogfooding". diff --git a/README.md b/README.md index f4c5ce3..dea2438 100644 --- a/README.md +++ b/README.md @@ -8,17 +8,12 @@ Wikifier is an **agent-to-agent** tool: it builds a living map of a project (health matrix, dependency graph, short file summaries) and agents keep that map current as they work. Humans can peek via a small dashboard; the product is the agent loop, not a general docs site or IDE. -Works from small scripts to large monorepos. **Deep import/include maps** (zero-dep regex parsers): - -| Language | Extensions | Notes | -|----------|------------|--------| -| Python | `.py` | full ACS/CDIA path | -| JavaScript / TypeScript | `.js` `.ts` `.jsx` `.tsx` | barrels (BREE), dynamic/CDIA | -| Rust | `.rs` | `use` / `mod` / `extern crate` | -| Go | `.go` | `import` / import blocks | -| C / C++ | `.c` `.h` `.cpp` `.cc` `.cxx` `.hpp` `.hh` | `#include` (local + system) | -| C# | `.cs` | `using` namespaces | -| Java | `.java` | `import` / `import static` | +Works from small scripts to large monorepos. Parsers are **zero-dep regex** (not cargo / `go.mod` / classpath / `-I`). Depth is two-tier: + +| Depth | Languages | What agents should trust | +|-------|-----------|--------------------------| +| **Deep / ACS** | Python (`.py`); JavaScript / TypeScript (`.js` `.ts` `.jsx` `.tsx` `.mjs` `.cjs` `.mts` `.cts`) | CDIA, BREE barrels, scored resolve, ACS work queue | +| **Regex hint** | Rust (`.rs`); Go (`.go`); C / C++ (`.c` `.h` `.cpp` `.cc` `.cxx` `.hpp` `.hh`); C# (`.cs`); Java (`.java`) | `use` / `import` / `#include` / `using` smokes — not compiler-faithful | Health/journal still work for any monitored path. Parsers are **pragmatic regex** (not full cargo/`go.mod`/classpath/`-I` resolution). On huge monorepos, split scope deliberately: @@ -62,7 +57,7 @@ Always set an explicit root for external trees: `WIKIFIER_PROJECT_ROOT=/abs/path ## Steady state (only touch what needs it) -Full protocol: [`skills/run.md`](skills/run.md) (Agent Protocol v0.6 — package **4.6.x**). +Full protocol: [`skills/run.md`](skills/run.md) (Agent Protocol v0.6.1 — package **4.6.x**). ```bash wikifier session-bootstrap # one-shot: root, health, attention, actions[] @@ -85,7 +80,7 @@ Advanced intel as needed: `get_dependencies`, `get_dependents`, `get_cycles`, ba ## What you get -- **Import analysis** — Python, JS/TS (ESM/CJS, barrels), Rust (`use`/`mod` + best-effort `crate::` paths), Go, C/C++ includes, C# usings; per-edge confidence; barrel expansion for TS/JS +- **Import analysis** — deep/ACS for Python + JS/TS (ESM/CJS, barrels, CDIA); regex-hint maps for Rust/Go/C/C++/C#/Java; per-edge confidence on the deep path - **Incremental pipeline** — pure-Python `update-maps`: dirty parse → import cache → reverse deps → cycles → `library.md` - **Warm agent maps (4.6.3–4.6.7)** — zero-dirty + **index-first** candidates (re-list only when fingerprint / map-scoped index / live count disagree); **MapScope** keeps collect, live count, index filter, and prune aligned; **stdlib SQLite**; content-hash dirty - **Two path lists** — `map_paths.txt` = map package roots; `monitored_paths.txt` = wiki/health watch (**independent** — wiki file lists never collapse the map) diff --git a/file_health.json b/file_health.json index aa847f4..9f5ed49 100644 --- a/file_health.json +++ b/file_health.json @@ -1,16 +1,16 @@ { "version": 2, - "last_updated": "2026-09-04 06:17:32", + "last_updated": "2026-09-11 06:38:37", "entries": { "skills/run.md": { "status": "🟢 Green", - "last_updated": "2026-08-27 11:15:12", - "reason": "4.6.13 plan WP0–WP7 wiki/protocol aligned", - "wiki_content_hash": "sha256:30f6da4a7b46920c1255c339c4c976c43c3323c6a66f03aed9a5e34cca197e04", - "source_content_hash": "sha256:30f6da4a7b46920c1255c339c4c976c43c3323c6a66f03aed9a5e34cca197e04", - "last_meaningful_edit": "2026-08-27 11:14:42", - "last_wiki_refresh": "2026-08-27 11:15:12", - "freshness_provenance": "record-meaningful-edit:2026-08-27 11:14:42 | 4.6.13: close-the-loop mark-green; relative monitors; mark-green:2026-08-27 11:15:12 (wiki hash captured); wiki=run.md" + "last_updated": "2026-09-11 06:37:25", + "reason": "Protocol v0.6.1 notes and language depth table.", + "wiki_content_hash": "sha256:4660244d3ed7b22c8d8bdb3e9473a0cafb0e3bff71b1fde7ef392e49cccc2abc", + "source_content_hash": "sha256:4660244d3ed7b22c8d8bdb3e9473a0cafb0e3bff71b1fde7ef392e49cccc2abc", + "last_meaningful_edit": "2026-09-11 06:37:17", + "last_wiki_refresh": "2026-09-11 06:37:25", + "freshness_provenance": "record-meaningful-edit:2026-09-11 06:37:17 | Protocol v0.6.1 additive 4.6.x field notes including sqlite-empty vs cache_backend none; language depth table (subid=hon; mark-green:2026-09-11 06:37:25 (wiki hash captured); wiki=run.md" }, "Findings/Milestones-Overview.md": { "status": "🟢 Green", @@ -57,13 +57,13 @@ }, "README.md": { "status": "🟢 Green", - "last_updated": "2026-08-27 11:15:12", - "reason": "4.6.13 plan WP0–WP7 wiki/protocol aligned", - "wiki_content_hash": "sha256:ea07d5a76184443393d655eb09084e42d7f6d521f0168fe8e56f043b441327e9", - "source_content_hash": "sha256:ea07d5a76184443393d655eb09084e42d7f6d521f0168fe8e56f043b441327e9", - "last_meaningful_edit": "2026-08-27 11:14:42", - "last_wiki_refresh": "2026-08-27 11:15:12", - "freshness_provenance": "record-meaningful-edit:2026-08-27 11:14:42 | 4.6.13 test count; mark-green:2026-08-27 11:15:12 (wiki hash captured); wiki=README.md" + "last_updated": "2026-09-11 06:37:25", + "reason": "Deep/ACS vs regex-hint language table.", + "wiki_content_hash": "sha256:10dc0533d5f4db138e593d63173d2d016173976274bf0e47e3ef2d38664d08ff", + "source_content_hash": "sha256:10dc0533d5f4db138e593d63173d2d016173976274bf0e47e3ef2d38664d08ff", + "last_meaningful_edit": "2026-09-11 06:37:17", + "last_wiki_refresh": "2026-09-11 06:37:25", + "freshness_provenance": "record-meaningful-edit:2026-09-11 06:37:17 | Language table: deep/ACS vs regex hint; protocol v0.6.1 (subid=honest-map).; mark-green:2026-09-11 06:37:25 (wiki hash captured); wiki=README.md" }, "wikifier/mcp/server.py": { "status": "🟢 Green", @@ -134,23 +134,23 @@ }, "CHANGELOG.md": { "status": "🟢 Green", - "last_updated": "2026-08-27 11:15:12", - "reason": "4.6.13 plan WP0–WP7 wiki/protocol aligned", - "wiki_content_hash": "sha256:7a0a54cb4ea5a95815dad3dad5d2e841c74b5b1a47e5cc9b193c96e1a50b7b1c", - "source_content_hash": "sha256:7a0a54cb4ea5a95815dad3dad5d2e841c74b5b1a47e5cc9b193c96e1a50b7b1c", - "last_meaningful_edit": "2026-08-27 11:14:42", - "last_wiki_refresh": "2026-08-27 11:15:12", - "freshness_provenance": "record-meaningful-edit:2026-08-27 11:14:42 | 4.6.13 Keep a Changelog; mark-green:2026-08-27 11:15:12 (wiki hash captured); wiki=CHANGELOG.md" + "last_updated": "2026-09-11 06:37:25", + "reason": "Unreleased honesty notes.", + "wiki_content_hash": "sha256:3a12d8851eaa663ea26b6997143b39b66efb6768dea5965bbae73e104771dbad", + "source_content_hash": "sha256:3a12d8851eaa663ea26b6997143b39b66efb6768dea5965bbae73e104771dbad", + "last_meaningful_edit": "2026-09-11 06:37:17", + "last_wiki_refresh": "2026-09-11 06:37:25", + "freshness_provenance": "record-meaningful-edit:2026-09-11 06:37:17 | Unreleased: library.md honesty, protocol v0.6.1, language table (subid=honest-map).; mark-green:2026-09-11 06:37:25 (wiki hash captured); wiki=CHANGELOG.md" }, "CLAUDE.md": { "status": "🟢 Green", - "last_updated": "2026-09-04 06:17:32", - "reason": "live hash synced; case-ghost Claude.md pruned", - "wiki_content_hash": "sha256:aa4eed92d69d7575c1d26beb9cc7852d2596cb771d65cea576374fd425856445", - "source_content_hash": "sha256:aa4eed92d69d7575c1d26beb9cc7852d2596cb771d65cea576374fd425856445", - "last_meaningful_edit": "2026-09-04 06:17:31", - "last_wiki_refresh": "2026-09-04 06:17:32", - "freshness_provenance": "record-meaningful-edit:2026-09-04 06:17:31 | re-baseline live hash after Claude.md case-ghost retirement; mark-green:2026-09-04 06:17:32 (wiki hash captured); wiki=CLAUDE.md" + "last_updated": "2026-09-11 06:37:25", + "reason": "Protocol pointer v0.6.1.", + "wiki_content_hash": "sha256:d2a708614ef48b5d1dd0f7bda001f9fff0b65f30f004513200636c00125bcc0d", + "source_content_hash": "sha256:d2a708614ef48b5d1dd0f7bda001f9fff0b65f30f004513200636c00125bcc0d", + "last_meaningful_edit": "2026-09-11 06:37:17", + "last_wiki_refresh": "2026-09-11 06:37:25", + "freshness_provenance": "record-meaningful-edit:2026-09-11 06:37:17 | Point agent contract at protocol v0.6.1 (subid=honest-map).; mark-green:2026-09-11 06:37:25 (wiki hash captured); wiki=CLAUDE.md" }, "wikifier/__init__.py": { "status": "🟢 Green", @@ -223,11 +223,13 @@ }, "wikifier/library.py": { "status": "🟢 Green", - "last_updated": "2026-08-01 11:25:15", - "reason": "gap amendment 4.6.9 closed-when verified (subid=gap-amendment-closure)", - "source_content_hash": "sha256:6312ddc20cd7cd1adef0ec2e5e9818c5030d57ddf1dc49e0384952cf03681ad4", - "last_wiki_refresh": "2026-08-01 11:25:15", - "freshness_provenance": "upsert:🟡 Yellow (non-freshness path); mark-green:2026-08-01 11:25:15 (wiki hash captured)" + "last_updated": "2026-09-11 06:38:32", + "reason": "Wiki captions handle **Role:** as well as ## Purpose.", + "wiki_content_hash": "sha256:89e1fc5b8dbfddb8306f55135392fb5bf5faa5d2e18177285d89f26a649665b8", + "source_content_hash": "sha256:edd02e80508eb135e50681b05307fd2a0e8d269278171f9b2c1d4cf10975a8f6", + "last_meaningful_edit": "2026-09-11 06:38:12", + "last_wiki_refresh": "2026-09-11 06:38:32", + "freshness_provenance": "record-meaningful-edit:2026-09-11 06:38:12 | Match **Role:** wiki captions (colon inside bold) so tree lines are not Role:** leftover (subid=honest-map).; mark-green:2026-09-11 06:38:32 (wiki hash captured); wiki=library.py.wiki.md" }, "wikifier/parsers/javascript.py": { "status": "🟢 Green", @@ -291,9 +293,13 @@ }, "library.md": { "status": "🟢 Green", - "last_updated": "2026-06-10 20:20:38 AEST", - "reason": "Verified: endpoint whitelist + Origin/Host 403s + clean shutdown via curl; headless DOM on all 9 projects x 3 modes (exec/static/file): map renders, exec chip + Stop button, no Tailwind, no active errors; 30/30 tests", - "source_content_hash": "sha256:f3f717512ac8c856b79d46d5d47906fdb3f2311025be1bc65186bc3b751bbe2e" + "last_updated": "2026-09-11 06:38:37", + "reason": "Committed map matches live tree after update-maps --full.", + "wiki_content_hash": "sha256:5ced31b3d5598e13d38877627603fcd813d425531c1b3b555c80e1a5211afc03", + "source_content_hash": "sha256:5ced31b3d5598e13d38877627603fcd813d425531c1b3b555c80e1a5211afc03", + "last_meaningful_edit": "2026-09-11 06:38:37", + "last_wiki_refresh": "2026-09-11 06:38:37", + "freshness_provenance": "record-meaningful-edit:2026-09-11 06:38:37 | Regenerated from full update-maps on live tree; 4.6.10 leftovers gone (subid=honest-map).; mark-green:2026-09-11 06:38:37 (wiki hash captured); wiki=library.md" }, "screenshot/front_page_review.png": { "status": "🟢 Green", @@ -565,12 +571,12 @@ }, "wikifier/agent_loop.py": { "status": "🟢 Green", - "last_updated": "2026-08-27 11:15:11", - "reason": "4.6.13 plan WP0–WP7 wiki/protocol aligned", - "source_content_hash": "sha256:e08d0f9d3d7ffd57a544277a7ddb7342abd0d216cd4b846f6878b4f1126e7a4a", - "last_meaningful_edit": "2026-08-27 11:14:41", - "last_wiki_refresh": "2026-08-27 11:15:11", - "freshness_provenance": "record-meaningful-edit:2026-08-27 11:14:41 | 4.6.13: emit mark_green action for recorded yellows; mark-green:2026-08-27 11:15:11 (wiki hash captured)" + "last_updated": "2026-09-11 06:37:25", + "reason": "Bootstrap cache_backend refresh; cache_empty / cache_files_indexed additive.", + "source_content_hash": "sha256:feb6a159759552f27af71035557515ca6f367df7e0277df99b769814c27b7893", + "last_meaningful_edit": "2026-09-11 06:37:17", + "last_wiki_refresh": "2026-09-11 06:37:25", + "freshness_provenance": "record-meaningful-edit:2026-09-11 06:37:17 | Refresh cache_backend after ACS persist; add cache_empty and cache_files_indexed so sqlite-empty is not none (subid=hone; mark-green:2026-09-11 06:37:25 (wiki hash captured)" }, "tests/test_agent_loop.py": { "status": "🟢 Green", @@ -971,6 +977,25 @@ "last_meaningful_edit": "2026-08-27 11:27:44", "last_wiki_refresh": "2026-08-27 11:27:44", "freshness_provenance": "record-meaningful-edit:2026-08-27 11:27:44 | 4.6.13: status tools wrap health/cache in call_with_deadline; mark-green:2026-08-27 11:27:44 (wiki hash captured); wiki=status_ops.py.wiki.md" + }, + "tests/test_library_map_honesty.py": { + "status": "🟢 Green", + "last_updated": "2026-09-11 06:38:32", + "reason": "Caption **Role:** unit test.", + "source_content_hash": "sha256:c9e8e37d44908971ee3167281d1934186d71f8ed97d73ab9019cb1afec616165", + "last_meaningful_edit": "2026-09-11 06:38:32", + "last_wiki_refresh": "2026-09-11 06:38:32", + "freshness_provenance": "record-meaningful-edit:2026-09-11 06:38:32 | Cover **Role:** wiki caption parsing (subid=honest-map).; mark-green:2026-09-11 06:38:32 (wiki hash captured)" + }, + "wikifier/library.py.wiki.md": { + "status": "🟢 Green", + "last_updated": "2026-09-11 06:37:25", + "reason": "Generator wiki current.", + "wiki_content_hash": "sha256:89e1fc5b8dbfddb8306f55135392fb5bf5faa5d2e18177285d89f26a649665b8", + "source_content_hash": "sha256:89e1fc5b8dbfddb8306f55135392fb5bf5faa5d2e18177285d89f26a649665b8", + "last_meaningful_edit": "2026-09-11 06:37:18", + "last_wiki_refresh": "2026-09-11 06:37:25", + "freshness_provenance": "record-meaningful-edit:2026-09-11 06:37:18 | Wiki for library.md generator: live-path filter and wiki captions (subid=honest-map).; mark-green:2026-09-11 06:37:25 (wiki hash captured); wiki=library.py.wiki.md" } } } \ No newline at end of file diff --git a/file_health.md b/file_health.md index 8ca2187..2fd1131 100644 --- a/file_health.md +++ b/file_health.md @@ -5,8 +5,8 @@ | .github/ISSUE_TEMPLATE/config.yml | 🟢 Green | 2026-08-27 11:15:12 | 4.6.13 plan WP0–WP7 wiki/protocol aligned | | .github/workflows/ci.yml | 🟢 Green | 2026-08-27 11:15:12 | 4.6.13 plan WP0–WP7 wiki/protocol aligned | | .github/workflows/publish.yml | 🟢 Green | 2026-08-27 11:15:12 | 4.6.13 plan WP0–WP7 wiki/protocol aligned | -| CHANGELOG.md | 🟢 Green | 2026-08-27 11:15:12 | 4.6.13 plan WP0–WP7 wiki/protocol aligned | -| CLAUDE.md | 🟢 Green | 2026-09-04 06:17:32 | live hash synced; case-ghost Claude.md pruned | +| CHANGELOG.md | 🟢 Green | 2026-09-11 06:37:25 | Unreleased honesty notes. | +| CLAUDE.md | 🟢 Green | 2026-09-11 06:37:25 | Protocol pointer v0.6.1. | | CONTRIBUTING.md | 🟢 Green | 2026-08-27 11:15:12 | 4.6.13 plan WP0–WP7 wiki/protocol aligned | | Findings/2026-06-10-Dogfood-Refactor-Validation.md | 🟢 Green | 2026-06-10 09:54:26 AEST | Self-describing findings doc | | Findings/2026-06-10-Fix-Plan.md | 🟢 Green | 2026-06-10 14:20:33 AEST | Results appended, all phases verified | @@ -39,16 +39,16 @@ | Findings/residual-1-5-closure-2026-07-09.md | 🟢 Green | 2026-07-09 08:07:43 | residual-1-5-closure verified; tests OK (subid=residual-1-5-closure) | | Logged_issues/2026-06-10-brc-scoped-rerun-pathology.md | 🟢 Green | 2026-06-10 19:09:35 AEST | Verified: 30/30 unittest, exports 8/8, churn 4/4; sh update-maps 3m39s->2.0s + hung incremental now 1.5s; Babylon scoped re-run 75min->80.6s, cache 274MB->101MB; all 12 sh commands smoke-tested | | Logged_issues/2026-06-10-js-barrel-churn-selftest-failure.md | 🟢 Green | 2026-06-10 14:19:50 AEST | v4.2.0 fix pass verified: 28/28 unittest, parser self-tests (churn 4/4), llama_index 3837/3837 files 8.5s, Babylon 3905/3905, RecipeLab library.md recovered, redox honest reporting, health CLI flags, MCP smoke. | -| README.md | 🟢 Green | 2026-08-27 11:15:12 | 4.6.13 plan WP0–WP7 wiki/protocol aligned | +| README.md | 🟢 Green | 2026-09-11 06:37:25 | Deep/ACS vs regex-hint language table. | | diagnostics.html | 🟢 Green | 2026-06-05 08:33:20 AEST | Wiki summary verified accurate after change. | | file_health.md | 🟢 Green | 2026-06-07 12:47:31 AEST | Phase 1 cruft pruning complete (bulk historical M2-M4/Logged/etc removed per audit). Survivors re-marked Green. subid=simplification-cruft-phase-1. | | index.html | 🟢 Green | 2026-06-11 00:20:17 AEST | Verified: 30/30 tests; tree generated on all 9 projects (llvm 2,940 files renders as clean indented tree); headless 9/9 tree-ok + lazy graph + forced-open render + pan-zoom canvas + file:// banner; parser comment-leak repro now 0 garbage edges | -| library.md | 🟢 Green | 2026-06-10 20:20:38 AEST | Verified: endpoint whitelist + Origin/Host 403s + clean shutdown via curl; headless DOM on all 9 projects x 3 modes (exec/static/file): map renders, exec chip + Stop button, no Tailwind, no active errors; 30/30 tests | +| library.md | 🟢 Green | 2026-09-11 06:38:37 | Committed map matches live tree after update-maps --full. | | map_paths.txt | 🟢 Green | 2026-07-12 13:26:29 | 4.6.6 verified | | monitored_paths.txt | 🟢 Green | 2026-08-27 11:15:12 | 4.6.13 plan WP0–WP7 wiki/protocol aligned | | pyproject.toml | 🟢 Green | 2026-06-10 14:41:19 AEST | Build + twine check pass; clean-room wheel install verified | | screenshot/front_page_review.png | 🟢 Green | 2026-06-11 00:37:47 AEST | Asset referenced by README | -| skills/run.md | 🟢 Green | 2026-08-27 11:15:12 | 4.6.13 plan WP0–WP7 wiki/protocol aligned | +| skills/run.md | 🟢 Green | 2026-09-11 06:37:25 | Protocol v0.6.1 notes and language depth table. | | tests/ | 🟢 Green | 2026-06-10 16:59:05 AEST | Verified: 30/30 unittest, exports 8/8, churn 4/4; Babylon full run 25m52s->5m52s and 417k->44k edges; worst file 990->55; RecipeLab identical 671 edges; e2e cache carries imported_names + barrel_leaf_selection | | tests/__init__.py | 🟢 Green | 2026-07-09 06:34:55 | hygiene session complete 4.5.6; 53 tests OK | | tests/_base.py | 🟢 Green | 2026-07-09 06:34:55 | hygiene session complete 4.5.6; 53 tests OK | @@ -69,6 +69,7 @@ | tests/test_health.py | 🟢 Green | 2026-08-27 11:15:12 | 4.6.13 plan WP0–WP7 wiki/protocol aligned | | tests/test_import_cache.py | 🟢 Green | 2026-08-13 17:08:27 | Persist-path reverse increment test green. | | tests/test_index_map_paths.py | 🟢 Green | 2026-07-12 13:41:02 | 125 unittest OK | +| tests/test_library_map_honesty.py | 🟢 Green | 2026-09-11 06:38:32 | Caption **Role:** unit test. | | tests/test_multi_lang_parsers.py | 🟢 Green | 2026-07-09 06:34:55 | hygiene session complete 4.5.6; 53 tests OK | | tests/test_parsers.py | 🟢 Green | 2026-07-09 06:34:55 | hygiene session complete 4.5.6; 53 tests OK | | tests/test_plan_2026_08_27.py | 🟢 Green | 2026-08-27 11:27:44 | deadline tests wiki | @@ -79,7 +80,7 @@ | wikifier.sh | 🟢 Green | 2026-08-01 11:25:19 | gap amendment 4.6.9 closed-when verified (subid=gap-amendment-closure) | | wikifier/__init__.py | 🟢 Green | 2026-08-27 11:15:12 | 4.6.13 plan WP0–WP7 wiki/protocol aligned | | wikifier/__main__.py | 🟢 Green | 2026-07-09 06:34:55 | hygiene session complete 4.5.6; 53 tests OK | -| wikifier/agent_loop.py | 🟢 Green | 2026-08-27 11:15:11 | 4.6.13 plan WP0–WP7 wiki/protocol aligned | +| wikifier/agent_loop.py | 🟢 Green | 2026-09-11 06:37:25 | Bootstrap cache_backend refresh; cache_empty / cache_files_indexed additive. | | wikifier/api.py | 🟢 Green | 2026-08-27 11:15:11 | 4.6.13 plan WP0–WP7 wiki/protocol aligned | | wikifier/cache/__init__.py | 🟢 Green | 2026-08-13 16:51:15 | Named cache package exports real io/files/graph/cycles/acs/barrel. | | wikifier/cache/_core.py | 🟢 Green | 2026-08-27 11:15:12 | 4.6.13 plan WP0–WP7 wiki/protocol aligned | @@ -95,7 +96,8 @@ | wikifier/health_pkg/__init__.py | 🟢 Green | 2026-08-27 11:15:12 | 4.6.13 plan WP0–WP7 wiki/protocol aligned | | wikifier/import_cache.py | 🟢 Green | 2026-09-04 06:16:42 | wiki + baseline after shim confirmation; tests OK | | wikifier/index.html | 🟢 Green | 2026-06-11 00:20:18 AEST | Verified: 30/30 tests; tree generated on all 9 projects (llvm 2,940 files renders as clean indented tree); headless 9/9 tree-ok + lazy graph + forced-open render + pan-zoom canvas + file:// banner; parser comment-leak repro now 0 garbage edges | -| wikifier/library.py | 🟢 Green | 2026-08-01 11:25:15 | gap amendment 4.6.9 closed-when verified (subid=gap-amendment-closure) | +| wikifier/library.py | 🟢 Green | 2026-09-11 06:38:32 | Wiki captions handle **Role:** as well as ## Purpose. | +| wikifier/library.py.wiki.md | 🟢 Green | 2026-09-11 06:37:25 | Generator wiki current. | | wikifier/locking.py | 🟢 Green | 2026-08-01 11:25:14 | gap amendment 4.6.9 closed-when verified (subid=gap-amendment-closure) | | wikifier/mcp/README.md | 🟢 Green | 2026-07-09 08:51:23 | 4.6.2 polish+dogfood verified 74 tests (subid=agent-ideal-loop-polish) | | wikifier/mcp/__init__.py | 🟢 Green | 2026-06-10 09:27:38 AEST | Refactor verified: py_compile + no-mcp/no-fcntl import sims + parser self-tests + check-changes/update-maps/health smoke all pass. Interface unchanged. | diff --git a/journal/2026/09/11.md b/journal/2026/09/11.md new file mode 100644 index 0000000..c4a092c --- /dev/null +++ b/journal/2026/09/11.md @@ -0,0 +1,44 @@ +## [2026-09-11 06:37:17] record-change +**File:** wikifier/library.py +**Reason:** Omit missing-on-disk cache keys from library.md; wiki captions not health audit reasons (subid=honest-map). + +## [2026-09-11 06:37:17] record-change +**File:** wikifier/agent_loop.py +**Reason:** Refresh cache_backend after ACS persist; add cache_empty and cache_files_indexed so sqlite-empty is not none (subid=honest-map). + +## [2026-09-11 06:37:17] record-change +**File:** tests/test_library_map_honesty.py +**Reason:** Test library.md names only live files; generator drops ghosts; bootstrap sqlite-empty vs none (subid=honest-map). + +## [2026-09-11 06:37:17] record-change +**File:** skills/run.md +**Reason:** Protocol v0.6.1 additive 4.6.x field notes including sqlite-empty vs cache_backend none; language depth table (subid=honest-map). + +## [2026-09-11 06:37:17] record-change +**File:** README.md +**Reason:** Language table: deep/ACS vs regex hint; protocol v0.6.1 (subid=honest-map). + +## [2026-09-11 06:37:17] record-change +**File:** CHANGELOG.md +**Reason:** Unreleased: library.md honesty, protocol v0.6.1, language table (subid=honest-map). + +## [2026-09-11 06:37:17] record-change +**File:** CLAUDE.md +**Reason:** Point agent contract at protocol v0.6.1 (subid=honest-map). + +## [2026-09-11 06:37:18] record-change +**File:** wikifier/library.py.wiki.md +**Reason:** Wiki for library.md generator: live-path filter and wiki captions (subid=honest-map). + +## [2026-09-11 06:38:12] record-change +**File:** wikifier/library.py +**Reason:** Match **Role:** wiki captions (colon inside bold) so tree lines are not Role:** leftover (subid=honest-map). + +## [2026-09-11 06:38:32] record-change +**File:** tests/test_library_map_honesty.py +**Reason:** Cover **Role:** wiki caption parsing (subid=honest-map). + +## [2026-09-11 06:38:37] record-change +**File:** library.md +**Reason:** Regenerated from full update-maps on live tree; 4.6.10 leftovers gone (subid=honest-map). + diff --git a/library.md b/library.md index 1cb5d4c..b85099f 100644 --- a/library.md +++ b/library.md @@ -5,173 +5,164 @@ ## File Tree -> Every parsed/tracked file, organised by folder. Descriptions come from -> the agent wiki (file_health). The dependency graph is further below. +> Every parsed/tracked file, organised by folder. Captions come from +> `*.wiki.md` purpose/role text when present. Health *reasons* are audit +> stamps and are not copied here. The dependency graph is further below. ```text -Wikifier/ (133 files) +workspace/ (129 files) ├── .github/ +│ ├── ISSUE_TEMPLATE/ +│ │ └── config.yml │ └── workflows/ -│ └── publish.yml — Verified: bash -n, dynamic banner shows v4.2.0 from package, YAML parses, 28/28 tests, pac… +│ ├── ci.yml +│ └── publish.yml ├── Findings/ -│ ├── 2026-06-10-Dogfood-Refactor-Validation.md — Self-describing findings doc -│ ├── 2026-06-10-Fix-Plan.md — Results appended, all phases verified -│ ├── 2026-08-13-implementation-plan.md — implementation plan -│ ├── 2026-08-13-research-01-parsers.md — Research findings saved. -│ ├── 2026-08-13-research-02-cache-graph.md — Research findings saved. -│ ├── 2026-08-13-research-03-health-protocol.md — Research findings saved. -│ ├── 2026-08-13-research-04-mcp-cli.md — Research findings saved. -│ ├── 2026-08-13-research-05-packaging-tests.md — Research findings saved. -│ ├── 2026-08-27-plan.md — 2026-08-27-plan: proposed 4.6.13 follow-up from five-slice research; not executed -│ ├── M5-Dogfood-Assessment-Report.md — kept; stale yellow cleared -│ ├── M5-Dogfood-Progress.md — kept; stale yellow cleared -│ ├── M5.1-cross-hardening-analysis.md — kept; stale yellow cleared -│ ├── Milestones-Overview.md — kept; stale yellow cleared -│ ├── agent-first-ideal-loop-2026-07-09.md — 4.6.1 content-honest legacy fix verified (subid=agent-ideal-loop) -│ ├── agent-ideal-loop-polish-dogfood-2026-07-09.md — 4.6.2 polish+dogfood verified 74 tests (subid=agent-ideal-loop-polish) -│ ├── agent-scale-perf-accuracy-2026-07-12.md — findings recorded -│ ├── agent-scale-sqlite-coverage-2026-07-12.md — 4.6.4 sqlite coverage verified 93 tests -│ ├── agent-walk-coverage-cache-2026-07-12.md — findings updated -│ ├── dogfood-goal-pass1-2026-07-09.json — goal verification complete -│ ├── dogfood-goal-pass2-2026-07-09.json — goal verification complete -│ ├── dogfood-hygiene-fix-2026-07-09.json — verified 53 tests; dogfood validate 0/8 -│ ├── dogfood-hygiene-fix-2026-07-09.md — verified 53 tests; dogfood validate 0/8 -│ ├── gap-amendment-closure-2026-08-01.md — gap amendment 4.6.9 closed-when verified (subid=gap-amendment-closure) -│ ├── gap-amendment-plan-2026-08-01.md — gap amendment 4.6.9 closed-when verified (subid=gap-amendment-closure) -│ ├── gap-closure-report.md — G12 closed; 39/39 tests -│ ├── index-first-map-paths-2026-07-12.md — evidence updated -│ ├── long-horizon-autonomous-ops.md — goal verification complete -│ ├── p6_real_world_validation_report.md — kept; stale yellow cleared -│ └── residual-1-5-closure-2026-07-09.md — residual-1-5-closure verified; tests OK (subid=residual-1-5-closure) +│ ├── 2026-06-10-Dogfood-Refactor-Validation.md +│ ├── 2026-06-10-Fix-Plan.md +│ ├── 2026-08-13-implementation-plan.md +│ ├── 2026-08-13-research-01-parsers.md +│ ├── 2026-08-13-research-02-cache-graph.md +│ ├── 2026-08-13-research-03-health-protocol.md +│ ├── 2026-08-13-research-04-mcp-cli.md +│ ├── 2026-08-13-research-05-packaging-tests.md +│ ├── 2026-08-27-plan.md +│ ├── M5-Dogfood-Assessment-Report.md +│ ├── M5-Dogfood-Progress.md +│ ├── M5.1-cross-hardening-analysis.md +│ ├── Milestones-Overview.md +│ ├── agent-first-ideal-loop-2026-07-09.md +│ ├── agent-ideal-loop-polish-dogfood-2026-07-09.md +│ ├── agent-scale-perf-accuracy-2026-07-12.md +│ ├── agent-scale-sqlite-coverage-2026-07-12.md +│ ├── agent-walk-coverage-cache-2026-07-12.md +│ ├── dogfood-goal-pass1-2026-07-09.json +│ ├── dogfood-goal-pass2-2026-07-09.json +│ ├── dogfood-hygiene-fix-2026-07-09.json +│ ├── dogfood-hygiene-fix-2026-07-09.md +│ ├── gap-amendment-closure-2026-08-01.md +│ ├── gap-amendment-plan-2026-08-01.md +│ ├── gap-closure-report.md +│ ├── index-first-map-paths-2026-07-12.md +│ ├── long-horizon-autonomous-ops.md +│ ├── p6_real_world_validation_report.md +│ └── residual-1-5-closure-2026-07-09.md ├── Logged_issues/ -│ ├── 2026-06-10-brc-scoped-rerun-pathology.md — Verified: 30/30 unittest, exports 8/8, churn 4/4; sh update-maps 3m39s->2.0s + hung increm… -│ └── 2026-06-10-js-barrel-churn-selftest-failure.md — v4.2.0 fix pass verified: 28/28 unittest, parser self-tests (churn 4/4), llama_index 3837/… +│ ├── 2026-06-10-brc-scoped-rerun-pathology.md +│ └── 2026-06-10-js-barrel-churn-selftest-failure.md ├── screenshot/ -│ └── front_page_review.png — Asset referenced by README +│ └── front_page_review.png ├── skills/ -│ └── run.md — gap amendment 4.6.9 closed-when verified (subid=gap-amendment-closure) +│ └── run.md ├── tests/ │ ├── selftest/ -│ │ ├── __init__.py — hygiene session complete 4.5.6; 53 tests OK -│ │ ├── run_cdia_selftest.py — hygiene session complete 4.5.6; 53 tests OK -│ │ ├── run_contracts_selftest.py — hygiene session complete 4.5.6; 53 tests OK -│ │ ├── run_javascript_selftest.py — hygiene session complete 4.5.6; 53 tests OK -│ │ ├── run_python_parser_selftest.py — hygiene session complete 4.5.6; 53 tests OK -│ │ └── run_resolution_selftest.py — hygiene session complete 4.5.6; 53 tests OK -│ ├── __init__.py — hygiene session complete 4.5.6; 53 tests OK -│ ├── _base.py — hygiene session complete 4.5.6; 53 tests OK -│ ├── run_all.py — hygiene session complete 4.5.6; 53 tests OK -│ ├── test_agent_loop.py — 4.6.2 polish+dogfood verified 74 tests (subid=agent-ideal-loop-polish) -│ ├── test_agent_scale.py — ACS persist regression green -│ ├── test_agent_surface_contracts.py — PEP585 future-import scan covers javascript.py. -│ ├── test_barrel_invalidation.py — unskipped content-honest barrel tests -│ ├── test_cache_store.py — instrumented warm load assertion -│ ├── test_gap_amendment_2026_08.py — gap amendment 4.6.9 closed-when verified (subid=gap-amendment-closure) -│ ├── test_gap_closure.py — content changed since last trusted baseline (check_changes content-honest) -│ ├── test_health.py — hygiene session complete 4.5.6; 53 tests OK -│ ├── test_import_cache.py — Persist-path reverse increment test green. -│ ├── test_index_map_paths.py — 125 unittest OK +│ │ ├── __init__.py +│ │ ├── run_cdia_selftest.py +│ │ ├── run_contracts_selftest.py +│ │ ├── run_javascript_selftest.py +│ │ ├── run_python_parser_selftest.py +│ │ └── run_resolution_selftest.py +│ ├── __init__.py +│ ├── _base.py +│ ├── run_all.py +│ ├── test_agent_loop.py +│ ├── test_agent_scale.py +│ ├── test_agent_surface_contracts.py +│ ├── test_barrel_invalidation.py +│ ├── test_cache_store.py +│ ├── test_gap_amendment_2026_08.py +│ ├── test_gap_closure.py — Gap-closure regressions — G4 ACS actionable low-conf, G5 health module vs `wikifier.health… +│ ├── test_health.py +│ ├── test_import_cache.py +│ ├── test_index_map_paths.py │ ├── test_init_seed.py -│ ├── test_multi_lang_parsers.py — hygiene session complete 4.5.6; 53 tests OK -│ ├── test_parsers.py — hygiene session complete 4.5.6; 53 tests OK +│ ├── test_library_map_honesty.py +│ ├── test_multi_lang_parsers.py +│ ├── test_parsers.py │ ├── test_plan_2026_08_27.py -│ ├── test_selftest_wrappers.py — G12 closed; 39/39 tests -│ └── test_walk_coverage_resolvers.py — poison test green -├── wikifier/ (60 files) +│ ├── test_selftest_wrappers.py +│ └── test_walk_coverage_resolvers.py +├── wikifier/ (53 files) │ ├── cache/ -│ │ ├── __init__.py — Named cache package exports real io/files/graph/cycles/acs/barrel. -│ │ ├── _core.py — content changed since last trusted baseline (check_changes content-honest) +│ │ ├── __init__.py +│ │ ├── _core.py │ │ ├── acs.py │ │ ├── barrel.py │ │ ├── cycles.py │ │ ├── diagnostics.py -│ │ ├── files.py — Real file ops + same-second dirty +│ │ ├── files.py — File entries, `sha256:` content hash, `compute_files_needing_reparse` (light index; same-s… │ │ ├── graph.py -│ │ ├── io.py — Real cache I/O +│ │ ├── io.py — SQLite-primary `load_cache` / `save_cache` / `load_mtime_index`. Legacy JSON dual-read onl… │ │ └── streaming.py │ ├── health_pkg/ -│ │ └── __init__.py — content changed since last trusted baseline (check_changes content-honest) +│ │ └── __init__.py │ ├── mcp/ │ │ ├── tools/ -│ │ │ ├── __init__.py — content changed since last trusted baseline (check_changes content-honest) -│ │ │ ├── _common.py — Slim helpers; no second FastMCP. -│ │ │ ├── intel.py — DELETED — path missing on disk (check_changes ghost detection) -│ │ │ ├── status.py — DELETED — path missing on disk (check_changes ghost detection) -│ │ │ └── workflow.py — DELETED — path missing on disk (check_changes ghost detection) -│ │ ├── README.md — 4.6.2 polish+dogfood verified 74 tests (subid=agent-ideal-loop-polish) -│ │ ├── __init__.py — Refactor verified: py_compile + no-mcp/no-fcntl import sims + parser self-tests + check-ch… -│ │ ├── deadline.py -│ │ ├── server.py — wikifier-mcp main restored via server_impl -│ │ ├── server_backup.py -│ │ └── server_impl.py — content change or no baseline (check_changes content-honest auto-detect) +│ │ │ ├── __init__.py +│ │ │ └── _common.py +│ │ ├── README.md +│ │ ├── __init__.py +│ │ ├── deadline.py — Stdlib in-process wall-clock cap for MCP tools (`call_with_deadline`, `MCP_INPROCESS_DEADL… +│ │ ├── server.py — Installed MCP entry (`wikifier-mcp`, `python -m wikifier.mcp.server`). Re-exports `mcp` + … +│ │ ├── server_impl.py +│ │ └── status_ops.py — Library health/cache work for MCP get_project_status and get_files_needing_attention, wrap… │ ├── parsers/ │ │ ├── bree/ -│ │ │ ├── __init__.py — content change or no baseline (check_changes content-honest auto-detect) -│ │ │ └── _bree.py -│ │ ├── javascript/ │ │ │ ├── __init__.py -│ │ │ └── _parser.py -│ │ ├── __init__.py — lazy language imports -│ │ ├── _edge.py — content changed since last trusted baseline (check_changes content-honest) -│ │ ├── _ldsi.py -│ │ ├── bree.py -│ │ ├── c_cpp.py — content changed since last trusted baseline (check_changes content-honest) -│ │ ├── cdia.py — mtime-only / post-4.5.x auto-yellow cleared; git content clean at mark-green (hygiene sess… -│ │ ├── csharp.py — 4.6.5 verified -│ │ ├── go_lang.py — 4.6.4 sqlite coverage verified 93 tests -│ │ ├── java.py — hygiene session complete 4.5.6; 53 tests OK -│ │ ├── javascript.py — content changed since last trusted baseline (check_changes content-honest) -│ │ ├── python.py — content changed since last trusted baseline (check_changes content-honest) -│ │ └── rust.py — crate resolve unit tested +│ │ │ └── _bree.py +│ │ ├── __init__.py +│ │ ├── _edge.py +│ │ ├── _ldsi.py — Shared LDSI helpers (`_extract_balanced_argument`, `_extract_candidate_literals`, `_analyz… +│ │ ├── c_cpp.py — Zero-dep C/C++ `#include` parser. `parse_c_cpp_imports(filepath)` → edge list for `.c/.h/.… +│ │ ├── cdia.py +│ │ ├── csharp.py +│ │ ├── go_lang.py +│ │ ├── java.py +│ │ ├── javascript.py — : JavaScript / TypeScript import parser for Milestone 2 (Dependency Intelligence). +│ │ ├── python.py — : Core Python import parser for Milestone 2 (Dependency Intelligence). +│ │ └── rust.py │ ├── scripts/ -│ │ ├── wikifier.ps1 — Verified: endpoint whitelist + Origin/Host 403s + clean shutdown via curl; headless DOM on… -│ │ └── wikifier.sh — synced with root; portable rel paths (subid=post-assess-hygiene) -│ ├── __init__.py — content changed since last trusted baseline (check_changes content-honest) -│ ├── __main__.py — hygiene session complete 4.5.6; 53 tests OK -│ ├── agent_loop.py — content changed since last trusted baseline (check_changes content-honest) -│ ├── api.py — content changed since last trusted baseline (check_changes content-honest) -│ ├── cache_store.py — Incremental sqlite upsert -│ ├── candidates.py — content changed since last trusted baseline (check_changes content-honest) -│ ├── cli.py — content changed since last trusted baseline (check_changes content-honest) -│ ├── contracts.py — reserved keys _candidate_list/_map_coverage/_reverse_signature -│ ├── daemon.py — mtime-only auto-yellow cleared (session tour check-changes); no content edit this session;… -│ ├── diagnostics.py — hygiene session complete 4.5.6; 53 tests OK -│ ├── health.py -│ ├── health_impl.py — content changed since last trusted baseline (check_changes content-honest) -│ ├── import_cache.py — content changed since last trusted baseline (check_changes content-honest) -│ ├── import_cache_impl.py -│ ├── index.html — Verified: 30/30 tests; tree generated on all 9 projects (llvm 2,940 files renders as clean… -│ ├── library.py — gap amendment 4.6.9 closed-when verified (subid=gap-amendment-closure) -│ ├── locking.py — gap amendment 4.6.9 closed-when verified (subid=gap-amendment-closure) -│ ├── project_root.py — residual-1-5-closure verified; tests OK (subid=residual-1-5-closure) -│ ├── resolution.py — mtime-only / post-4.5.x auto-yellow cleared; git content clean at mark-green (hygiene sess… -│ └── serve.py — Verified: endpoint whitelist + Origin/Host 403s + clean shutdown via curl; headless DOM on… -├── CHANGELOG.md — 4.6.10 notes -├── CLAUDE.md — test count synced to 49 -├── Claude.md — gap amendment 4.6.9 closed-when verified (subid=gap-amendment-closure) -├── README.md — 4.6.6 verified -├── diagnostics.html — Wiki summary verified accurate after change. -├── file_health.md — Phase 1 cruft pruning complete (bulk historical M2-M4/Logged/etc removed per audit). Survi… -├── index.html — Verified: 30/30 tests; tree generated on all 9 projects (llvm 2,940 files renders as clean… -├── library.md — Verified: endpoint whitelist + Origin/Host 403s + clean shutdown via curl; headless DOM on… -├── map_paths.txt — 4.6.6 verified -├── monitored_paths.txt — 4.6.6 verified -├── pyproject.toml — Build + twine check pass; clean-room wheel install verified -├── wikifier.bat — Verified: bash -n, dynamic banner shows v4.2.0 from package, YAML parses, 28/28 tests, pac… -├── wikifier.ps1 — Verified: endpoint whitelist + Origin/Host 403s + clean shutdown via curl; headless DOM on… -└── wikifier.sh — gap amendment 4.6.9 closed-when verified (subid=gap-amendment-closure) +│ │ ├── wikifier.ps1 +│ │ └── wikifier.sh +│ ├── __init__.py +│ ├── __main__.py +│ ├── agent_loop.py +│ ├── api.py +│ ├── cache_store.py +│ ├── candidates.py +│ ├── cli.py — Hybrid agent CLI. Re-exports `wikifier.api` so `from wikifier.cli import check_changes` wo… +│ ├── contracts.py +│ ├── daemon.py +│ ├── diagnostics.py +│ ├── health_impl.py +│ ├── import_cache.py — Backward-compat shim. Real implementation lives in `wikifier.cache` (`from .cache import *… +│ ├── index.html +│ ├── library.py — : Pure-Python generator for committed `library.md` (file tree, Mermaid, tables, ACS, rever… +│ ├── library.py.wiki.md +│ ├── locking.py +│ ├── project_root.py +│ ├── resolution.py +│ └── serve.py +├── CHANGELOG.md +├── CLAUDE.md +├── CONTRIBUTING.md +├── README.md +├── diagnostics.html +├── file_health.md +├── index.html +├── library.md +├── map_paths.txt +├── monitored_paths.txt +├── pyproject.toml +├── wikifier.bat +├── wikifier.ps1 +└── wikifier.sh ``` ## Dependency Graph (Mermaid) ```mermaid graph TD - subgraph root - wikifier["wikifier"] - wikifier_parsers["wikifier.parsers"] - wikifier_parsers_project_root["wikifier.parsers.project_root"] - wikifier_parsers_resolution["wikifier.parsers.resolution"] - end subgraph tests tests__base_py["_base.py"] tests_run_all_py["run_all.py"] @@ -191,6 +182,7 @@ graph TD tests_test_import_cache_py["test_import_cache.py"] tests_test_index_map_paths_py["test_index_map_paths.py"] tests_test_init_seed_py["test_init_seed.py"] + tests_test_library_map_honesty_py["test_library_map_honesty.py"] tests_test_multi_lang_parsers_py["test_multi_lang_parsers.py"] tests_test_parsers_py["test_parsers.py"] tests_test_plan_2026_08_27_py["test_plan_2026_08_27.py"] @@ -220,7 +212,6 @@ graph TD wikifier_diagnostics_py["diagnostics.py"] wikifier_health_impl_py["health_impl.py"] wikifier_health_pkg___init___py["__init__.py"] - wikifier_health_py["health.py"] wikifier_import_cache_py["import_cache.py"] wikifier_library_py["library.py"] wikifier_locking_py["locking.py"] @@ -228,10 +219,8 @@ graph TD wikifier_mcp_deadline_py["deadline.py"] wikifier_mcp_server_impl_py["server_impl.py"] wikifier_mcp_server_py["server.py"] + wikifier_mcp_status_ops_py["status_ops.py"] wikifier_mcp_tools__common_py["_common.py"] - wikifier_mcp_tools_intel_py["intel.py"] - wikifier_mcp_tools_status_py["status.py"] - wikifier_mcp_tools_workflow_py["workflow.py"] wikifier_parsers___init___py["__init__.py"] wikifier_parsers__edge_py["_edge.py"] wikifier_parsers__ldsi_py["_ldsi.py"] @@ -252,6 +241,8 @@ graph TD subgraph External _["."] __[".."] + __project_root["..project_root"] + __resolution["..resolution"] _wikifier_health_["'wikifier.health'"] _wikifier_import_cache_impl_["'wikifier.import_cache_impl'"] _wikifier_mcp_server_["'wikifier.mcp.server'"] @@ -299,6 +290,7 @@ graph TD typing["typing"] unittest["unittest"] warnings["warnings"] + wikifier["wikifier"] wikifier_agent_loop["wikifier.agent_loop"] wikifier_api["wikifier.api"] wikifier_cache["wikifier.cache"] @@ -312,7 +304,8 @@ graph TD wikifier_import_cache["wikifier.import_cache"] wikifier_library["wikifier.library"] wikifier_mcp_deadline["wikifier.mcp.deadline"] - wikifier_mcp_server_impl["wikifier.mcp.server_impl"] + wikifier_mcp_status_ops["wikifier.mcp.status_ops"] + wikifier_parsers["wikifier.parsers"] wikifier_parsers_bree["wikifier.parsers.bree"] wikifier_parsers_cdia["wikifier.parsers.cdia"] wikifier_parsers_javascript["wikifier.parsers.javascript"] @@ -320,13 +313,6 @@ graph TD wikifier_project_root["wikifier.project_root"] wikifier_resolution["wikifier.resolution"] end - wikifier_mcp_server_py --> wikifier_mcp_server_impl_py - wikifier_candidates_py -.-> fnmatch - wikifier_candidates_py -.-> os - wikifier_candidates_py -.-> subprocess - wikifier_candidates_py -.-> dataclasses - wikifier_candidates_py -.-> pathlib - wikifier_candidates_py -.-> typing wikifier___init___py -.-> sys wikifier___init___py -.-> _ wikifier___init___py --> wikifier_cli_py @@ -339,12 +325,79 @@ graph TD wikifier_agent_loop_py --> wikifier_project_root_py wikifier_agent_loop_py -.-> _ wikifier_agent_loop_py -. ? .-> _wikifier_health_ + wikifier_api_py -.-> os + wikifier_api_py -.-> sys + wikifier_api_py -.-> platform + wikifier_api_py -.-> subprocess + wikifier_api_py -.-> shutil + wikifier_api_py -.-> pathlib + wikifier_api_py -.-> typing + wikifier_api_py -.-> contextlib + wikifier_api_py --> wikifier_project_root_py + wikifier_api_py --> wikifier_candidates_py + wikifier_api_py --> wikifier_contracts_py + wikifier_api_py -.-> datetime + wikifier_api_py -.-> _ + wikifier_api_py --> wikifier_library_py + wikifier_api_py --> wikifier_parsers___init___py + wikifier_api_py --> wikifier_resolution_py + wikifier_api_py --> wikifier_agent_loop_py + wikifier_api_py -.-> importlib_resources + wikifier_cache___init___py --> wikifier_cache_io_py + wikifier_cache___init___py --> wikifier_cache_files_py + wikifier_cache___init___py --> wikifier_cache_graph_py + wikifier_cache___init___py --> wikifier_cache_cycles_py + wikifier_cache___init___py --> wikifier_cache_acs_py + wikifier_cache___init___py --> wikifier_cache_barrel_py + wikifier_cache___init___py --> wikifier_cache_diagnostics_py + wikifier_cache___init___py --> wikifier_cache_streaming_py + wikifier_cache___init___py --> wikifier_contracts_py + wikifier_cache__core_py -.-> json + wikifier_cache__core_py -.-> os + wikifier_cache__core_py -.-> time + wikifier_cache__core_py -.-> hashlib + wikifier_cache__core_py -.-> pathlib + wikifier_cache__core_py -.-> typing + wikifier_cache__core_py -.-> collections + wikifier_cache__core_py -.-> datetime + wikifier_cache__core_py -.-> __ + wikifier_cache__core_py --> wikifier_contracts_py + wikifier_cache__core_py --> wikifier_resolution_py + wikifier_cache__core_py --> wikifier_cache_io_py + wikifier_cache__core_py --> wikifier_cache_files_py + wikifier_cache__core_py --> wikifier_parsers_bree___init___py + wikifier_cache__core_py -.-> dataclasses + wikifier_cache__core_py --> wikifier_project_root_py + wikifier_cache__core_py --> wikifier_parsers___init___py + wikifier_cache_acs_py --> wikifier_cache__core_py + wikifier_cache_barrel_py --> wikifier_cache__core_py + wikifier_cache_cycles_py --> wikifier_cache__core_py + wikifier_cache_diagnostics_py --> wikifier_cache__core_py + wikifier_cache_files_py -.-> hashlib + wikifier_cache_files_py -.-> pathlib + wikifier_cache_files_py -.-> typing + wikifier_cache_files_py --> wikifier_cache_io_py + wikifier_cache_graph_py --> wikifier_cache__core_py + wikifier_cache_io_py -.-> json + wikifier_cache_io_py -.-> os + wikifier_cache_io_py -.-> sys + wikifier_cache_io_py -.-> traceback + wikifier_cache_io_py -.-> pathlib + wikifier_cache_io_py -.-> typing + wikifier_cache_io_py -.-> __ + wikifier_cache_streaming_py --> wikifier_cache__core_py wikifier_cache_store_py -.-> json wikifier_cache_store_py -.-> os wikifier_cache_store_py -.-> sqlite3 wikifier_cache_store_py -.-> contextlib wikifier_cache_store_py -.-> pathlib wikifier_cache_store_py -.-> typing + wikifier_candidates_py -.-> fnmatch + wikifier_candidates_py -.-> os + wikifier_candidates_py -.-> subprocess + wikifier_candidates_py -.-> dataclasses + wikifier_candidates_py -.-> pathlib + wikifier_candidates_py -.-> typing wikifier_cli_py -.-> json wikifier_cli_py -.-> os wikifier_cli_py -.-> platform @@ -374,21 +427,22 @@ graph TD wikifier_daemon_py -.-> pathlib wikifier_daemon_py -.-> typing wikifier_daemon_py --> wikifier_cli_py - wikifier_daemon_py -.-> wikifier + wikifier_daemon_py -.-> _ wikifier_diagnostics_py -.-> json wikifier_diagnostics_py -.-> dataclasses wikifier_diagnostics_py -.-> enum wikifier_diagnostics_py -.-> typing - wikifier_health_py -.-> hashlib - wikifier_health_py -.-> json - wikifier_health_py -.-> os - wikifier_health_py -.-> re - wikifier_health_py -.-> sys - wikifier_health_py -.-> dataclasses - wikifier_health_py -.-> datetime - wikifier_health_py -.-> pathlib - wikifier_health_py -.-> typing - wikifier_health_py -.-> wikifier + wikifier_health_impl_py -.-> hashlib + wikifier_health_impl_py -.-> json + wikifier_health_impl_py -.-> os + wikifier_health_impl_py -.-> re + wikifier_health_impl_py -.-> sys + wikifier_health_impl_py -.-> dataclasses + wikifier_health_impl_py -.-> datetime + wikifier_health_impl_py -.-> pathlib + wikifier_health_impl_py -.-> typing + wikifier_health_impl_py -.-> _ + wikifier_health_pkg___init___py --> wikifier_health_impl_py wikifier_import_cache_py --> wikifier_cache___init___py wikifier_library_py -.-> json wikifier_library_py -.-> os @@ -406,11 +460,58 @@ graph TD wikifier_locking_py -.-> pathlib wikifier_locking_py -.-> typing wikifier_mcp___init___py --> wikifier_mcp_server_py + wikifier_mcp_deadline_py -.-> os + wikifier_mcp_deadline_py -.-> threading + wikifier_mcp_deadline_py -.-> typing + wikifier_mcp_server_py --> wikifier_mcp_server_impl_py + wikifier_mcp_server_impl_py -.-> subprocess + wikifier_mcp_server_impl_py -.-> re + wikifier_mcp_server_impl_py -.-> os + wikifier_mcp_server_impl_py -.-> sys + wikifier_mcp_server_impl_py -.-> json + wikifier_mcp_server_impl_py -.-> wikifier_import_cache + wikifier_mcp_server_impl_py -.-> time + wikifier_mcp_server_impl_py -.-> importlib + wikifier_mcp_server_impl_py -.-> argparse + wikifier_mcp_server_impl_py -.-> mcp_server_fastmcp + wikifier_mcp_server_impl_py -.-> pydantic + wikifier_mcp_server_impl_py -.-> pathlib + wikifier_mcp_server_impl_py -.-> typing + wikifier_mcp_server_impl_py -.-> datetime + wikifier_mcp_server_impl_py --> wikifier_mcp_deadline_py + wikifier_mcp_server_impl_py --> wikifier_mcp_status_ops_py + wikifier_mcp_server_impl_py -.-> wikifier_cli + wikifier_mcp_server_impl_py -. ? .-> _wikifier_health_ + wikifier_mcp_status_ops_py -.-> importlib + wikifier_mcp_status_ops_py -.-> wikifier_import_cache + wikifier_mcp_status_ops_py -.-> pathlib + wikifier_mcp_status_ops_py -.-> typing + wikifier_mcp_status_ops_py --> wikifier_mcp_deadline_py + wikifier_mcp_status_ops_py -. ? .-> _wikifier_health_ + wikifier_mcp_tools__common_py -.-> pathlib + wikifier_mcp_tools__common_py -.-> typing + wikifier_mcp_tools__common_py -.-> wikifier_api wikifier_parsers___init___py -.-> typing wikifier_parsers___init___py -.-> importlib wikifier_parsers___init___py -. ? .-> modname____name__ wikifier_parsers__edge_py -.-> typing wikifier_parsers__edge_py --> wikifier_contracts_py + wikifier_parsers__ldsi_py -.-> re + wikifier_parsers__ldsi_py -.-> typing + wikifier_parsers_bree___init___py --> wikifier_parsers_bree__bree_py + wikifier_parsers_bree__bree_py -.-> json + wikifier_parsers_bree__bree_py -.-> re + wikifier_parsers_bree__bree_py -.-> warnings + wikifier_parsers_bree__bree_py -.-> hashlib + wikifier_parsers_bree__bree_py -.-> os + wikifier_parsers_bree__bree_py -.-> time + wikifier_parsers_bree__bree_py -.-> dataclasses + wikifier_parsers_bree__bree_py -.-> pathlib + wikifier_parsers_bree__bree_py -.-> typing + wikifier_parsers_bree__bree_py -.-> __project_root + wikifier_parsers_bree__bree_py -.-> __resolution + wikifier_parsers_bree__bree_py -.-> wikifier_resolution + wikifier_parsers_bree__bree_py -.-> __ wikifier_parsers_c_cpp_py -.-> re wikifier_parsers_c_cpp_py -.-> pathlib wikifier_parsers_c_cpp_py -.-> typing @@ -489,146 +590,15 @@ graph TD wikifier_serve_py -.-> http_server wikifier_serve_py -.-> pathlib wikifier_serve_py --> wikifier_cli_py - wikifier_serve_py -.-> wikifier - wikifier_api_py -.-> os - wikifier_api_py -.-> sys - wikifier_api_py -.-> platform - wikifier_api_py -.-> subprocess - wikifier_api_py -.-> shutil - wikifier_api_py -.-> pathlib - wikifier_api_py -.-> typing - wikifier_api_py -.-> contextlib - wikifier_api_py --> wikifier_project_root_py - wikifier_api_py --> wikifier_candidates_py - wikifier_api_py --> wikifier_contracts_py - wikifier_api_py -.-> datetime - wikifier_api_py -.-> _ - wikifier_api_py --> wikifier_library_py - wikifier_api_py --> wikifier_parsers___init___py - wikifier_api_py --> wikifier_resolution_py - wikifier_api_py --> wikifier_agent_loop_py - wikifier_api_py -.-> importlib_resources - wikifier_cache___init___py --> wikifier_cache_io_py - wikifier_cache___init___py --> wikifier_cache_files_py - wikifier_cache___init___py --> wikifier_cache_graph_py - wikifier_cache___init___py --> wikifier_cache_cycles_py - wikifier_cache___init___py --> wikifier_cache_acs_py - wikifier_cache___init___py --> wikifier_cache_barrel_py - wikifier_cache___init___py --> wikifier_cache_diagnostics_py - wikifier_cache___init___py --> wikifier_cache_streaming_py - wikifier_cache___init___py --> wikifier_contracts_py - wikifier_cache_files_py -.-> hashlib - wikifier_cache_files_py -.-> pathlib - wikifier_cache_files_py -.-> typing - wikifier_cache_files_py --> wikifier_cache_io_py - wikifier_cache_io_py -.-> json - wikifier_cache_io_py -.-> os - wikifier_cache_io_py -.-> sys - wikifier_cache_io_py -.-> traceback - wikifier_cache_io_py -.-> pathlib - wikifier_cache_io_py -.-> typing - wikifier_cache_io_py -.-> wikifier - wikifier_health_impl_py -.-> hashlib - wikifier_health_impl_py -.-> json - wikifier_health_impl_py -.-> os - wikifier_health_impl_py -.-> re - wikifier_health_impl_py -.-> sys - wikifier_health_impl_py -.-> dataclasses - wikifier_health_impl_py -.-> datetime - wikifier_health_impl_py -.-> pathlib - wikifier_health_impl_py -.-> typing - wikifier_health_impl_py -.-> _ - wikifier_health_pkg___init___py --> wikifier_health_impl_py - wikifier_mcp_server_impl_py -.-> subprocess - wikifier_mcp_server_impl_py -.-> re - wikifier_mcp_server_impl_py -.-> os - wikifier_mcp_server_impl_py -.-> sys - wikifier_mcp_server_impl_py -.-> json - wikifier_mcp_server_impl_py -.-> wikifier_import_cache - wikifier_mcp_server_impl_py -.-> time - wikifier_mcp_server_impl_py -.-> importlib - wikifier_mcp_server_impl_py -.-> argparse - wikifier_mcp_server_impl_py -.-> mcp_server_fastmcp - wikifier_mcp_server_impl_py -.-> pydantic - wikifier_mcp_server_impl_py -.-> pathlib - wikifier_mcp_server_impl_py -.-> typing - wikifier_mcp_server_impl_py -.-> datetime - wikifier_mcp_server_impl_py --> wikifier_mcp_deadline_py - wikifier_mcp_server_impl_py -.-> wikifier_cli - wikifier_mcp_server_impl_py -. ? .-> _wikifier_health_ - wikifier_mcp_tools__common_py -.-> pathlib - wikifier_mcp_tools__common_py -.-> typing - wikifier_mcp_tools__common_py -.-> wikifier_api - wikifier_mcp_tools_intel_py -.-> typing - wikifier_mcp_tools_intel_py --> wikifier_mcp_tools__common_py - wikifier_mcp_tools_status_py -.-> typing - wikifier_mcp_tools_status_py --> wikifier_mcp_tools__common_py - wikifier_mcp_tools_status_py -.-> wikifier - wikifier_mcp_tools_workflow_py -.-> typing - wikifier_mcp_tools_workflow_py -.-> wikifier_api - wikifier_parsers_bree___init___py --> wikifier_parsers_bree__bree_py - wikifier_parsers_bree__bree_py -.-> json - wikifier_parsers_bree__bree_py -.-> re - wikifier_parsers_bree__bree_py -.-> warnings - wikifier_parsers_bree__bree_py -.-> hashlib - wikifier_parsers_bree__bree_py -.-> os - wikifier_parsers_bree__bree_py -.-> time - wikifier_parsers_bree__bree_py -.-> dataclasses - wikifier_parsers_bree__bree_py -.-> pathlib - wikifier_parsers_bree__bree_py -.-> typing - wikifier_parsers_bree__bree_py -.-> wikifier_parsers_project_root - wikifier_parsers_bree__bree_py -.-> wikifier_parsers_resolution - wikifier_parsers_bree__bree_py -.-> wikifier_resolution - wikifier_parsers_bree__bree_py -.-> wikifier_parsers - wikifier_cache__core_py -.-> json - wikifier_cache__core_py -.-> os - wikifier_cache__core_py -.-> time - wikifier_cache__core_py -.-> hashlib - wikifier_cache__core_py -.-> pathlib - wikifier_cache__core_py -.-> typing - wikifier_cache__core_py -.-> collections - wikifier_cache__core_py -.-> datetime - wikifier_cache__core_py -.-> __ - wikifier_cache__core_py --> wikifier_contracts_py - wikifier_cache__core_py --> wikifier_resolution_py - wikifier_cache__core_py --> wikifier_cache_io_py - wikifier_cache__core_py --> wikifier_cache_files_py - wikifier_cache__core_py --> wikifier_parsers_bree___init___py - wikifier_cache__core_py -.-> dataclasses - wikifier_cache__core_py --> wikifier_project_root_py - wikifier_cache__core_py --> wikifier_parsers___init___py - wikifier_cache_acs_py --> wikifier_cache__core_py - wikifier_cache_barrel_py --> wikifier_cache__core_py - wikifier_cache_cycles_py --> wikifier_cache__core_py - wikifier_cache_diagnostics_py --> wikifier_cache__core_py - wikifier_cache_graph_py --> wikifier_cache__core_py - wikifier_cache_streaming_py --> wikifier_cache__core_py - wikifier_mcp_deadline_py -.-> os - wikifier_mcp_deadline_py -.-> threading - wikifier_mcp_deadline_py -.-> typing - wikifier_parsers__ldsi_py -.-> re - wikifier_parsers__ldsi_py -.-> typing - tests_test_plan_2026_08_27_py -.-> importlib - tests_test_plan_2026_08_27_py -.-> inspect - tests_test_plan_2026_08_27_py -.-> json - tests_test_plan_2026_08_27_py -.-> os - tests_test_plan_2026_08_27_py -.-> subprocess - tests_test_plan_2026_08_27_py -.-> sys - tests_test_plan_2026_08_27_py -.-> unittest - tests_test_plan_2026_08_27_py -.-> mcp - tests_test_plan_2026_08_27_py -.-> wikifier_parsers_bree - tests_test_plan_2026_08_27_py -.-> wikifier - tests_test_plan_2026_08_27_py -.-> pathlib - tests_test_plan_2026_08_27_py -.-> tests__base - tests_test_plan_2026_08_27_py -.-> wikifier_api - tests_test_plan_2026_08_27_py -.-> wikifier_mcp_deadline - tests_test_plan_2026_08_27_py -.-> wikifier_mcp_server_impl - tests_test_plan_2026_08_27_py -.-> wikifier_candidates - tests_test_plan_2026_08_27_py -.-> wikifier_health_impl - tests_test_plan_2026_08_27_py -.-> wikifier_parsers_javascript - tests_test_plan_2026_08_27_py -.-> wikifier_parsers_python - tests_test_plan_2026_08_27_py -. ? .-> _wikifier_health_ - tests_test_plan_2026_08_27_py -. ? .-> _wikifier_parsers_python_ + wikifier_serve_py -.-> _ + tests_test_library_map_honesty_py -.-> json + tests_test_library_map_honesty_py -.-> re + tests_test_library_map_honesty_py -.-> unittest + tests_test_library_map_honesty_py -.-> pathlib + tests_test_library_map_honesty_py -.-> tests__base + tests_test_library_map_honesty_py -.-> wikifier_library + tests_test_library_map_honesty_py -.-> wikifier_agent_loop + tests_test_library_map_honesty_py -.-> wikifier tests__base_py -.-> os tests__base_py -.-> sys tests__base_py -.-> tempfile @@ -775,6 +745,26 @@ graph TD tests_test_parsers_py -.-> tests__base tests_test_parsers_py -.-> wikifier_parsers_python tests_test_parsers_py -.-> wikifier_parsers_javascript + tests_test_plan_2026_08_27_py -.-> importlib + tests_test_plan_2026_08_27_py -.-> inspect + tests_test_plan_2026_08_27_py -.-> json + tests_test_plan_2026_08_27_py -.-> os + tests_test_plan_2026_08_27_py -.-> subprocess + tests_test_plan_2026_08_27_py -.-> sys + tests_test_plan_2026_08_27_py -.-> unittest + tests_test_plan_2026_08_27_py -.-> wikifier_parsers_bree + tests_test_plan_2026_08_27_py -.-> wikifier + tests_test_plan_2026_08_27_py -.-> pathlib + tests_test_plan_2026_08_27_py -.-> tests__base + tests_test_plan_2026_08_27_py -.-> wikifier_api + tests_test_plan_2026_08_27_py -.-> wikifier_mcp_deadline + tests_test_plan_2026_08_27_py -.-> wikifier_mcp_status_ops + tests_test_plan_2026_08_27_py -.-> wikifier_candidates + tests_test_plan_2026_08_27_py -.-> wikifier_health_impl + tests_test_plan_2026_08_27_py -.-> wikifier_parsers_javascript + tests_test_plan_2026_08_27_py -.-> wikifier_parsers_python + tests_test_plan_2026_08_27_py -. ? .-> _wikifier_health_ + tests_test_plan_2026_08_27_py -. ? .-> _wikifier_parsers_python_ tests_test_selftest_wrappers_py -.-> runpy tests_test_selftest_wrappers_py -.-> unittest tests_test_selftest_wrappers_py -.-> pathlib @@ -788,7 +778,7 @@ graph TD tests_test_walk_coverage_resolvers_py -.-> wikifier_agent_loop tests_test_walk_coverage_resolvers_py -.-> wikifier_parsers classDef external fill:#eeeeee,stroke:#888888,stroke-dasharray: 3 3 - class _,__,_wikifier_health_,_wikifier_import_cache_impl_,_wikifier_mcp_server_,_wikifier_parsers_python_,argparse,ast,base64,collections,contextlib,dataclasses,datetime,enum,fcntl,fnmatch,functools,hashlib,http_server,importlib,importlib_resources,inspect,io,json,mcp,mcp_server_fastmcp,modname____name__,msvcrt,name,os,pathlib,platform,pydantic,re,runpy,shutil,signal,sqlite3,subprocess,sys,tempfile,tests__base,textwrap,threading,time,traceback,typing,unittest,warnings,wikifier_agent_loop,wikifier_api,wikifier_cache,wikifier_cache_store,wikifier_candidates,wikifier_cli,wikifier_contracts,wikifier_diagnostics,wikifier_health,wikifier_health_impl,wikifier_import_cache,wikifier_library,wikifier_mcp_deadline,wikifier_mcp_server_impl,wikifier_parsers_bree,wikifier_parsers_cdia,wikifier_parsers_javascript,wikifier_parsers_python,wikifier_project_root,wikifier_resolution external + class _,__,__project_root,__resolution,_wikifier_health_,_wikifier_import_cache_impl_,_wikifier_mcp_server_,_wikifier_parsers_python_,argparse,ast,base64,collections,contextlib,dataclasses,datetime,enum,fcntl,fnmatch,functools,hashlib,http_server,importlib,importlib_resources,inspect,io,json,mcp,mcp_server_fastmcp,modname____name__,msvcrt,name,os,pathlib,platform,pydantic,re,runpy,shutil,signal,sqlite3,subprocess,sys,tempfile,tests__base,textwrap,threading,time,traceback,typing,unittest,warnings,wikifier,wikifier_agent_loop,wikifier_api,wikifier_cache,wikifier_cache_store,wikifier_candidates,wikifier_cli,wikifier_contracts,wikifier_diagnostics,wikifier_health,wikifier_health_impl,wikifier_import_cache,wikifier_library,wikifier_mcp_deadline,wikifier_mcp_status_ops,wikifier_parsers,wikifier_parsers_bree,wikifier_parsers_cdia,wikifier_parsers_javascript,wikifier_parsers_python,wikifier_project_root,wikifier_resolution external ``` ## Resolved Dependencies @@ -926,6 +916,14 @@ graph TD | tests/test_init_seed.py | subprocess → subprocess | medium | | tests/test_init_seed.py | tests._base → tests._base | medium | | tests/test_init_seed.py | unittest → unittest | medium | +| tests/test_library_map_honesty.py | json → json | medium | +| tests/test_library_map_honesty.py | pathlib → pathlib | medium | +| tests/test_library_map_honesty.py | re → re | medium | +| tests/test_library_map_honesty.py | tests._base → tests._base | medium | +| tests/test_library_map_honesty.py | unittest → unittest | medium | +| tests/test_library_map_honesty.py | wikifier → wikifier | medium | +| tests/test_library_map_honesty.py | wikifier.agent_loop → wikifier.agent_loop | medium | +| tests/test_library_map_honesty.py | wikifier.library → wikifier.library | medium | | tests/test_multi_lang_parsers.py | "wikifier.health" → "wikifier.health" | low | | tests/test_multi_lang_parsers.py | importlib → importlib | medium | | tests/test_multi_lang_parsers.py | os → os | medium | @@ -946,7 +944,6 @@ graph TD | tests/test_plan_2026_08_27.py | importlib → importlib | medium | | tests/test_plan_2026_08_27.py | inspect → inspect | medium | | tests/test_plan_2026_08_27.py | json → json | medium | -| tests/test_plan_2026_08_27.py | mcp → mcp | medium | | tests/test_plan_2026_08_27.py | os → os | medium | | tests/test_plan_2026_08_27.py | pathlib → pathlib | medium | | tests/test_plan_2026_08_27.py | subprocess → subprocess | medium | @@ -958,7 +955,7 @@ graph TD | tests/test_plan_2026_08_27.py | wikifier.candidates → wikifier.candidates | medium | | tests/test_plan_2026_08_27.py | wikifier.health_impl → wikifier.health_impl | medium | | tests/test_plan_2026_08_27.py | wikifier.mcp.deadline → wikifier.mcp.deadline | medium | -| tests/test_plan_2026_08_27.py | wikifier.mcp.server_impl → wikifier.mcp.server_impl | medium | +| tests/test_plan_2026_08_27.py | wikifier.mcp.status_ops → wikifier.mcp.status_ops | medium | | tests/test_plan_2026_08_27.py | wikifier.parsers.bree → wikifier.parsers.bree | medium | | tests/test_plan_2026_08_27.py | wikifier.parsers.javascript → wikifier.parsers.javascript | medium | | tests/test_plan_2026_08_27.py | wikifier.parsers.python → wikifier.parsers.python | medium | @@ -1039,7 +1036,7 @@ graph TD | wikifier/cache/files.py | pathlib → pathlib | medium | | wikifier/cache/files.py | typing → typing | medium | | wikifier/cache/graph.py | ._core → wikifier/cache/_core.py | high | -| wikifier/cache/io.py | .. → wikifier | medium | +| wikifier/cache/io.py | .. → .. | medium | | wikifier/cache/io.py | json → json | medium | | wikifier/cache/io.py | os → os | medium | | wikifier/cache/io.py | pathlib → pathlib | medium | @@ -1077,7 +1074,7 @@ graph TD | wikifier/contracts.py | json → json | medium | | wikifier/contracts.py | pathlib → pathlib | medium | | wikifier/contracts.py | typing → typing | medium | -| wikifier/daemon.py | . → wikifier | medium | +| wikifier/daemon.py | . → . | medium | | wikifier/daemon.py | .cli → wikifier/cli.py | high | | wikifier/daemon.py | datetime → datetime | medium | | wikifier/daemon.py | json → json | medium | @@ -1093,16 +1090,6 @@ graph TD | wikifier/diagnostics.py | enum → enum | medium | | wikifier/diagnostics.py | json → json | medium | | wikifier/diagnostics.py | typing → typing | medium | -| wikifier/health.py | . → wikifier | medium | -| wikifier/health.py | dataclasses → dataclasses | medium | -| wikifier/health.py | datetime → datetime | medium | -| wikifier/health.py | hashlib → hashlib | medium | -| wikifier/health.py | json → json | medium | -| wikifier/health.py | os → os | medium | -| wikifier/health.py | pathlib → pathlib | medium | -| wikifier/health.py | re → re | medium | -| wikifier/health.py | sys → sys | medium | -| wikifier/health.py | typing → typing | medium | | wikifier/health_impl.py | . → . | medium | | wikifier/health_impl.py | dataclasses → dataclasses | medium | | wikifier/health_impl.py | datetime → datetime | medium | @@ -1137,6 +1124,7 @@ graph TD | wikifier/mcp/server.py | .server_impl → wikifier/mcp/server_impl.py | high | | wikifier/mcp/server_impl.py | "wikifier.health" → "wikifier.health" | low | | wikifier/mcp/server_impl.py | .deadline → wikifier/mcp/deadline.py | high | +| wikifier/mcp/server_impl.py | .status_ops → wikifier/mcp/status_ops.py | high | | wikifier/mcp/server_impl.py | argparse → argparse | medium | | wikifier/mcp/server_impl.py | datetime → datetime | medium | | wikifier/mcp/server_impl.py | importlib → importlib | medium | @@ -1152,16 +1140,15 @@ graph TD | wikifier/mcp/server_impl.py | typing → typing | medium | | wikifier/mcp/server_impl.py | wikifier.cli → wikifier.cli | medium | | wikifier/mcp/server_impl.py | wikifier.import_cache → wikifier.import_cache | medium | +| wikifier/mcp/status_ops.py | "wikifier.health" → "wikifier.health" | low | +| wikifier/mcp/status_ops.py | .deadline → wikifier/mcp/deadline.py | high | +| wikifier/mcp/status_ops.py | importlib → importlib | medium | +| wikifier/mcp/status_ops.py | pathlib → pathlib | medium | +| wikifier/mcp/status_ops.py | typing → typing | medium | +| wikifier/mcp/status_ops.py | wikifier.import_cache → wikifier.import_cache | medium | | wikifier/mcp/tools/_common.py | pathlib → pathlib | medium | | wikifier/mcp/tools/_common.py | typing → typing | medium | | wikifier/mcp/tools/_common.py | wikifier.api → wikifier.api | medium | -| wikifier/mcp/tools/intel.py | ._common → wikifier/mcp/tools/_common.py | high | -| wikifier/mcp/tools/intel.py | typing → typing | medium | -| wikifier/mcp/tools/status.py | ._common → wikifier/mcp/tools/_common.py | high | -| wikifier/mcp/tools/status.py | typing → typing | medium | -| wikifier/mcp/tools/status.py | wikifier → wikifier | medium | -| wikifier/mcp/tools/workflow.py | typing → typing | medium | -| wikifier/mcp/tools/workflow.py | wikifier.api → wikifier.api | medium | | wikifier/parsers/__init__.py | importlib → importlib | medium | | wikifier/parsers/__init__.py | modname, __name__ → modname, __name__ | low | | wikifier/parsers/__init__.py | typing → typing | medium | @@ -1170,9 +1157,9 @@ graph TD | wikifier/parsers/_ldsi.py | re → re | medium | | wikifier/parsers/_ldsi.py | typing → typing | medium | | wikifier/parsers/bree/__init__.py | ._bree → wikifier/parsers/bree/_bree.py | high | -| wikifier/parsers/bree/_bree.py | .. → wikifier.parsers | medium | -| wikifier/parsers/bree/_bree.py | ..project_root → wikifier.parsers.project_root | medium | -| wikifier/parsers/bree/_bree.py | ..resolution → wikifier.parsers.resolution | medium | +| wikifier/parsers/bree/_bree.py | .. → .. | medium | +| wikifier/parsers/bree/_bree.py | ..project_root → ..project_root | medium | +| wikifier/parsers/bree/_bree.py | ..resolution → ..resolution | medium | | wikifier/parsers/bree/_bree.py | dataclasses → dataclasses | medium | | wikifier/parsers/bree/_bree.py | hashlib → hashlib | medium | | wikifier/parsers/bree/_bree.py | json → json | medium | @@ -1253,7 +1240,7 @@ graph TD | wikifier/resolution.py | re → re | medium | | wikifier/resolution.py | time → time | medium | | wikifier/resolution.py | typing → typing | medium | -| wikifier/serve.py | . → wikifier | medium | +| wikifier/serve.py | . → . | medium | | wikifier/serve.py | .cli → wikifier/cli.py | high | | wikifier/serve.py | http.server → http.server | medium | | wikifier/serve.py | json → json | medium | @@ -1270,10 +1257,10 @@ graph TD ## ACS Risk Snapshot -**Scored edges**: 459 | **avg_confidence**: 0.51 | **actionable_low_conf**: 42 | raw low-conf (telemetry): 397 (threshold 0.65) +**Scored edges**: 668 | **avg_confidence**: 0.51 | **actionable_low_conf**: 58 | raw low-conf (telemetry): 578 (threshold 0.65) **Agent work queue**: use `actionable_low_conf_edges` + `reason_code_counts` / `agent_signal=investigate` only — do **not** thrash on raw `low_conf_edges` (includes external/bare). -**reason_code_counts**: external_or_bare:327, high_confidence_ok:62, low_confidence_internal:42, dynamic_literal:28 -**Top risk reasons**: base:medium:368, no_resolved_path:368, base:high:62, base:low:29 +**reason_code_counts**: external_or_bare:483, high_confidence_ok:90, unresolved_project:58, dynamic_literal:37 +**Top risk reasons**: base:medium:540, no_resolved_path:540, base:high:90, base:low:38 **Sample low-confidence edges (telemetry; prefer actionable)**: 1. Base low (0.05). opaque dynamic expression; high complexity; conditional_dynamic semantics; creative registry_map (LDSI/CDIA); trace: ControlFlowDetector=if. Recommendation: Opaque or high-complexity dynamic resolution — refactor to static import or introduce explicit runtime guard; current edge is unsuitable for static analysis tooling. 2. Base medium (0.48). unresolved target. Recommendation: Low-confidence or fragile edge — review the concrete usage site and consider hardening the import (or pin resolution) before trusting the dependency for automation. @@ -1281,19 +1268,19 @@ graph TD ## Reverse Dependencies ("Who depends on me") -**Targets with dependents**: 34 | **Total reverse edges**: 67 +**Targets with dependents**: 30 | **Total reverse edges**: 60 **High-impact modules (most reverse dependents)**: - `wikifier/cache/_core.py` ← 6 files depend on it (e.g. wikifier/cache/acs.py, wikifier/cache/barrel.py, wikifier/cache/cycles.py, wikifier/cache/diagnostics.py) - `wikifier/contracts.py` ← 6 files depend on it (e.g. wikifier/__init__.py, wikifier/api.py, wikifier/cache/__init__.py, wikifier/cache/_core.py) - `wikifier/parsers/_edge.py` ← 5 files depend on it (e.g. wikifier/parsers/c_cpp.py, wikifier/parsers/csharp.py, wikifier/parsers/go_lang.py, wikifier/parsers/java.py) -- `wikifier` ← 4 files depend on it (e.g. wikifier/cache/io.py, wikifier/daemon.py, wikifier/health.py, wikifier/serve.py) - `wikifier/cli.py` ← 4 files depend on it (e.g. wikifier/__init__.py, wikifier/__main__.py, wikifier/daemon.py, wikifier/serve.py) - `wikifier/project_root.py` ← 4 files depend on it (e.g. wikifier/agent_loop.py, wikifier/api.py, wikifier/cache/_core.py, wikifier/parsers/javascript.py) - `wikifier/cache/io.py` ← 3 files depend on it (e.g. wikifier/cache/__init__.py, wikifier/cache/_core.py, wikifier/cache/files.py) - `wikifier/resolution.py` ← 3 files depend on it (e.g. wikifier/api.py, wikifier/cache/_core.py, wikifier/parsers/javascript.py) - `wikifier/cache/files.py` ← 2 files depend on it (e.g. wikifier/cache/__init__.py, wikifier/cache/_core.py) -- `wikifier/mcp/tools/_common.py` ← 2 files depend on it (e.g. wikifier/mcp/tools/intel.py, wikifier/mcp/tools/status.py) +- `wikifier/mcp/deadline.py` ← 2 files depend on it (e.g. wikifier/mcp/server_impl.py, wikifier/mcp/status_ops.py) +- `wikifier/parsers/__init__.py` ← 2 files depend on it (e.g. wikifier/api.py, wikifier/cache/_core.py) ## Barrel Expansions @@ -1305,18 +1292,42 @@ graph TD ## Conditional & Dynamic Intelligence -**Conditional imports detected**: 38 -**Dynamic imports detected**: 40 +**Conditional imports detected**: 36 +**Dynamic imports detected**: 38 Sample conditional imports (fragile / feature-flagged paths): - `wikifier/agent_loop.py` → `"wikifier.health"` (ctx: ) -- `wikifier/parsers/__init__.py` → `modname, __name__` (ctx: ) -- `wikifier/mcp/server_impl.py` → `"wikifier.health"` (ctx: ) +- `wikifier/cache/_core.py` → `import_module(" in expl or "__import__(" in expl or "importlib.import_module" in expl: + return True + + + if dtype in ("static", "string", "literal"): + + i` (ctx: ) +- `wikifier/cache/_core.py` → `__import__(" in expl or "importlib.import_module" in expl: + return True + + + if dtype in ("static", "string", "literal"): + + if (raw.startswith("\"") and` (ctx: ) - `wikifier/mcp/server_impl.py` → `"wikifier.health"` (ctx: ) - `wikifier/mcp/server_impl.py` → `"wikifier.health"` (ctx: ) Sample dynamic imports (runtime / template-driven): - `wikifier/agent_loop.py` → `"wikifier.health"` (type: static) -- `wikifier/parsers/__init__.py` → `modname, __name__` (type: unknown) -- `wikifier/mcp/server_impl.py` → `"wikifier.health"` (type: static) +- `wikifier/cache/_core.py` → `import_module(" in expl or "__import__(" in expl or "importlib.import_module" in expl: + return True + + + if dtype in ("static", "string", "literal"): + + i` (type: expression) +- `wikifier/cache/_core.py` → `__import__(" in expl or "importlib.import_module" in expl: + return True + + + if dtype in ("static", "string", "literal"): + + if (raw.startswith("\"") and` (type: expression) - `wikifier/mcp/server_impl.py` → `"wikifier.health"` (type: static) - `wikifier/mcp/server_impl.py` → `"wikifier.health"` (type: static) diff --git a/skills/run.md b/skills/run.md index 17d3281..e34556f 100644 --- a/skills/run.md +++ b/skills/run.md @@ -1,13 +1,13 @@ -# Wikifier Agent Protocol v0.6 +# Wikifier Agent Protocol v0.6.1 **Formerly "Wikifier Skills & Commands". This is the authoritative, versioned specification for agent behavior when using Wikifier.** -**Version**: v0.6 (v4.2.0 real-pipeline + reliability update; package current **4.6.x**, live `__version__` in `wikifier/__init__.py`) -**Date**: 2026-06-10 (package notes refreshed 2026-08-01; gap-closure contract 2026-07-09) -**Status**: Active. Supersedes v0.5. +**Version**: v0.6.1 (additive 4.6.x I/O notes on v0.6; package current **4.6.x**, live `__version__` in `wikifier/__init__.py`) +**Date**: 2026-09-11 (v0.6 dated 2026-06-10; package notes refreshed 2026-08-01; gap-closure 2026-07-09) +**Status**: Active. Supersedes v0.6. v0.6 agent behavior keeps working (additive fields only). **See also**: `README.md`, `Findings/gap-closure-report.md`, `Findings/gap-amendment-plan-2026-08-01.md`, and the library in wikifier/. -**Package 4.6.x + gap-closure notes (additive; protocol still v0.6):** +**Package 4.6.x + gap-closure notes (additive; folded into v0.6.1):** - File Tree + `wikifier serve`; MCP status/attention use library + emoji (not `[GREEN]` tags). - **First-run:** `init` → lean `monitored_paths.txt` + `map_paths.txt` (default active root `src/`, not bare `.`) → `update-maps` → `health --summary` → `suggest_next_actions`. Map is automatic; wiki *prose* is agent-filled over time. - **`session_bootstrap` readiness:** message embeds the readiness tier. `blocked` is not a crash — see **§ Readiness blocked**. Hard blockers = missing map/health (or severe ghosts). Bare `.` monitor alone → `map_ok_scope_risk` when map+health exist (scope warnings / fix_scope), not the same tier as missing map. Unattended ops require **`readiness=ready_for_daemon`**, not `health_score=Map Ready` alone. @@ -20,7 +20,7 @@ - **Dual scope:** `monitored_paths` = check-changes/health scope (keep lean). `update-maps --directory=` / `--max-files=` = map walk. Never set `project_root` to a multi-repo parent (e.g. `cloned_sample_projects`). - **CLI target:** `wikifier --target /abs/project health --summary` (flags stripped before the command). Or `WIKIFIER_PROJECT_ROOT=…`. - **Long-horizon:** `wikifier autonomous-status` (or `readiness`) before unattended runs; daemon writes `.wikifier_staging/daemon_heartbeat.json`. Soak ≥72h is still evidence work, not automatic. -- **Deletions:** `record-deletion` + ghost detection. **Languages:** py/js/ts/rust/go/c/c#/java (regex). journal/pending = audit queue, not Jira. +- **Deletions:** `record-deletion` + ghost detection. **Languages:** two-tier (see table below). journal/pending = audit queue, not Jira. - **Huge monorepos:** lean `monitored_paths.txt` (not bare `.`). `WIKIFIER_CHECK_CHANGES_MAX` default 2000. Hygiene: `seed-health`, `prune-pending`, `prune-health`. - **Monitor/daemon:** mtime heartbeat; agents still own wiki/mark-green. `WIKIFIER_DAEMON_MAPS_INTERVAL` default 600s; `WIKIFIER_DAEMON_MAPS=0` for check-only. - Health module: `importlib.import_module("wikifier.health")` or `wikifier.health_module` — `from wikifier import health` is the *function*. @@ -32,6 +32,21 @@ - A POSIX lock self-deadlock in library `record_change`/`mark_green`/`check_changes` was fixed (locking is now re-entrant per process). MCP timeouts on those tools should no longer occur; the CLI fallback guidance below remains valid as defense in depth. - A stdlib-only test suite exists: `python -m unittest discover tests` (run it when working on Wikifier itself). +**v0.6.1 migration notes (package 4.6.x; additive on v0.6)** — no mandatory I/O break; tolerate new keys: +- **Readiness tiers** (`session_bootstrap.readiness`): `blocked` / `map_ok_scope_risk` / `ready_for_daemon` / `ready_with_agent_wiki_work` / `not_ready`. Unattended work needs `ready_for_daemon`, not `health_score=Map Ready` alone. +- **`map_paths.txt` vs `monitored_paths.txt`:** map package roots vs wiki/health watch. Independent. Wiki-only monitor lists do **not** define the map. +- **ACS v1.3:** `actionable_low_conf_edges`, `reason_code_counts`, `agent_signal` (`skip`|`investigate`). Never thrash on raw `low_conf_edges`. +- **Index-first maps:** `index_first_dirty` / `candidates_reused` on `update_maps`. `success: true` ≠ map complete — use `map_coverage.complete`. +- **`record_change`:** additive `needs_mark_green: true`; stays Yellow until `mark_green`. +- **`session_bootstrap` cache fields:** `cache_backend` is `sqlite` | `sqlite+json` | `json` | `none`. **`none` means no sqlite/json file at read time.** An empty SQLite file (schema only, `files` table count = 0) is still `sqlite`, not `none`. Additive `cache_empty` (bool) and `cache_files_indexed` (int) make that split explicit. ACS zeros + `cache_empty: true` means “no pairs yet”, not “no backend”. `cache-status` reports the file backend; bootstrap used to leave `cache_backend: "none"` after creating the empty stub — that is fixed; do not equate the two tools without checking `cache_empty`. +- **Committed `library.md`:** regenerate with `update-maps`; do not hand-edit. Nodes must be files on disk. +- **Language depth (G9):** deep/ACS = Python + JS/TS; Rust/Go/C/C++/C#/Java are regex hints. + +| Depth | Languages | Trust | +|-------|-----------|--------| +| Deep / ACS | Python, JS/TS | CDIA, BREE, scored resolve, ACS work queue | +| Regex hint | Rust, Go, C/C++, C#, Java | `use`/`import`/`#include`/`using` smokes — not cargo/`go.mod`/classpath/`-I` | + **Core design**: Token-efficient agent-to-agent wiki. Agents use it to look up files (health matrix + file wikis + BRC + stele chunks instead of full sources), autonomously update wiki summaries, and create new ones as work progresses. **It should not be used for anything more than that.** This protocol + the Python package + MCP server form the bridge for consistent, low-ambiguity agent operation on real external projects. @@ -140,7 +155,7 @@ See also: Findings note `Findings/readiness-blocked-bare-monitor-2026-07.md`. **Copy this exact block into the system prompt or the very first instruction of every new LLM session that uses Wikifier:** ``` -You are now operating inside a Wikifier-managed codebase (Agent Protocol v0.6 — package 4.6.x). +You are now operating inside a Wikifier-managed codebase (Agent Protocol v0.6.1 — package 4.6.x). This is strictly an agent-to-agent wiki for token saving: map lookup (health + file wikis + deps) instead of full sources; selective wiki updates; not a human docs product or Jira. diff --git a/tests/test_library_map_honesty.py b/tests/test_library_map_honesty.py new file mode 100644 index 0000000..27b39d7 --- /dev/null +++ b/tests/test_library_map_honesty.py @@ -0,0 +1,195 @@ +"""library.md must name only files that exist on disk. + +Drives the shipped generator and the committed dogfood artifact — not mocks. +""" +from __future__ import annotations + +import json +import re +import unittest +from pathlib import Path + +from tests._base import REPO_ROOT, TempProjectTestCase +from wikifier.library import generate_library_md + +# 4.6.10 leftovers that must not reappear in the committed map. +GONE_PATHS = ( + "wikifier/mcp/tools/intel.py", + "wikifier/mcp/tools/status.py", + "wikifier/mcp/tools/workflow.py", + "wikifier/parsers/javascript/_parser.py", + "wikifier/parsers/javascript/__init__.py", + "wikifier/health.py", + "wikifier/mcp/server_backup.py", + "wikifier/parsers/bree.py", +) + +GONE_MERMAID_IDS = ( + "wikifier_mcp_tools_intel_py", + "wikifier_mcp_tools_status_py", + "wikifier_mcp_tools_workflow_py", + "wikifier_parsers_javascript__parser_py", + "wikifier_health_py", + "wikifier_mcp_server_backup_py", + "wikifier_parsers_bree_py", +) + +# Project-relative source paths as they appear in tables / reverse-deps / prose. +_REL_PATH_RE = re.compile( + r"(?:`)?((?:wikifier|tests|skills|Findings|docs|\.github)" + r"/[A-Za-z0-9_./+-]+\.[A-Za-z0-9.]+)" +) + + +def _parse_file_tree_paths(text: str): + """Reconstruct project-relative paths from the File Tree fence.""" + m = re.search(r"## File Tree.*?```text\n(.*?)```", text, re.S) + if not m: + return [] + paths = [] + stack = [] # (depth, dir_name) + for line in m.group(1).splitlines(): + if not line.strip() or line.startswith("…"): + continue + if re.match(r"^[^│├└].*/\s+\(\d+ files\)\s*$", line): + continue + mm = re.match(r"^([ │]*)(?:├── |└── )(.+)$", line) + if not mm: + continue + prefix, rest = mm.groups() + depth = len(prefix) // 4 + name = rest.split(" — ", 1)[0].strip() + if name.startswith("…"): + continue + name = re.sub(r"\s+\(\d+ files\)\s*$", "", name) + while stack and stack[-1][0] >= depth: + stack.pop() + if name.endswith("/"): + stack.append((depth, name.rstrip("/"))) + continue + parts = [d[1] for d in stack] + [name] + paths.append("/".join(parts)) + return paths + + +def _named_rel_paths(text: str): + found = set(_parse_file_tree_paths(text)) + for m in _REL_PATH_RE.finditer(text): + found.add(m.group(1).rstrip("`")) + return sorted(found) + + +class TestGenerateLibraryOmitsMissingFiles(TempProjectTestCase): + def test_generate_library_md_omits_missing_cache_keys(self): + self.write("pkg/live.py", "import os\n") + cache = { + "pkg/live.py": { + "mtime": 1, + "resolved_pairs": [{ + "raw": "os", + "resolved": "", + "confidence": "medium", + }], + }, + "pkg/gone.py": { + "mtime": 1, + "resolved_pairs": [{ + "raw": "./helper", + "resolved": "pkg/helper.py", + "confidence": "high", + }], + }, + "_reverse_dependencies": { + "pkg/helper.py": ["pkg/gone.py", "pkg/live.py"], + "pkg/live.py": ["pkg/gone.py"], + }, + } + md = generate_library_md(self.root, cache) + self.assertIn("live.py", md) + self.assertNotIn("gone.py", md) + self.assertNotIn("helper.py", md) + self.assertNotIn("pkg/gone.py", md) + self.assertNotIn("pkg/helper.py", md) + + def test_file_tree_prefers_wiki_not_health_reason(self): + self.write("pkg/mod.py", "x = 1\n") + self.write( + "pkg/mod.py.wiki.md", + "# pkg/mod.py\n\n## Purpose\n\nImport parser helper.\n", + ) + health = { + "entries": { + "pkg/mod.py": { + "status": "🟢 Green", + "reason": "4.6.13 plan aligned", + } + } + } + (self.root / "file_health.json").write_text( + json.dumps(health), encoding="utf-8" + ) + cache = {"pkg/mod.py": {"mtime": 1, "resolved_pairs": []}} + md = generate_library_md(self.root, cache) + self.assertIn("Import parser helper", md) + self.assertNotIn("plan aligned", md) + + def test_wiki_role_colon_inside_bold(self): + self.write("pkg/mod.py", "x = 1\n") + self.write( + "pkg/mod.py.wiki.md", + "# pkg/mod.py\n\n**Role:** Gap-closure regressions.\n", + ) + md = generate_library_md( + self.root, {"pkg/mod.py": {"mtime": 1, "resolved_pairs": []}} + ) + self.assertIn("Gap-closure regressions.", md) + self.assertNotIn("Role:**", md) + + +class TestCommittedLibraryMdMatchesTree(unittest.TestCase): + def test_library_md_paths_exist_on_disk(self): + lib = REPO_ROOT / "library.md" + self.assertTrue(lib.is_file(), "committed library.md missing") + text = lib.read_text(encoding="utf-8") + missing = [] + for rel in _named_rel_paths(text): + if not (REPO_ROOT / rel).is_file(): + missing.append(rel) + self.assertEqual( + missing, + [], + "library.md names paths that are not files on disk: {0}".format( + missing[:20] + ), + ) + + def test_library_md_omits_deleted_4_6_10_leftovers(self): + text = (REPO_ROOT / "library.md").read_text(encoding="utf-8") + present = [p for p in GONE_PATHS if p in text] + self.assertEqual(present, [], present) + ids = [i for i in GONE_MERMAID_IDS if i in text] + self.assertEqual(ids, [], ids) + + +class TestBootstrapCacheBackendHonesty(TempProjectTestCase): + def test_empty_sqlite_is_not_cache_backend_none(self): + from wikifier.agent_loop import session_bootstrap + from wikifier import cache_store as cs + + boot = session_bootstrap(project_root=self.root) + self.assertTrue(boot.get("success"), boot) + self.assertIn("cache_empty", boot) + self.assertIn("cache_files_indexed", boot) + if cs.has_sqlite(self.root) or cs.json_path(self.root).is_file(): + self.assertNotEqual( + boot.get("cache_backend"), + "none", + "empty sqlite/json store must not report cache_backend=none", + ) + if boot.get("cache_backend") == "none": + self.assertTrue(boot.get("cache_empty")) + self.assertEqual(boot.get("cache_files_indexed"), 0) + + +if __name__ == "__main__": + unittest.main() diff --git a/wikifier/agent_loop.py b/wikifier/agent_loop.py index a4c4c26..3c8e690 100644 --- a/wikifier/agent_loop.py +++ b/wikifier/agent_loop.py @@ -648,8 +648,18 @@ def session_bootstrap( cache = ic.load_cache(root) or {} acs = ic.ensure_acs_summary_persisted(cache, root) or {} cyc = cache.get("_cycles") or {} - if cs is not None and not out.get("cache_backend"): + # Re-read after persist: creating an empty sqlite must not leave "none". + if cs is not None: out["cache_backend"] = cs.backend_name(root) + try: + n = 0 + if cs is not None: + n = len(cs.load_mtime_index(root) or {}) + out["cache_files_indexed"] = n + out["cache_empty"] = n == 0 + except Exception: + out.setdefault("cache_files_indexed", 0) + out.setdefault("cache_empty", True) acs_actionable = int(acs.get("actionable_low_conf_edges") or 0) out["acs"] = { "acs_version": acs.get("acs_version"), diff --git a/wikifier/library.py b/wikifier/library.py index 3703ab7..f248356 100644 --- a/wikifier/library.py +++ b/wikifier/library.py @@ -507,41 +507,95 @@ def _generate_conditional_dynamic_section(cache: Dict[str, Any]) -> List[str]: # --------------------------------------------------------------------------- -# Public API +# Live-path filter (stale cache keys must not become map nodes) # --------------------------------------------------------------------------- -# --------------------------------------------------------------------------- -# File tree (the primary human/agent view of project shape) -# --------------------------------------------------------------------------- +_SOURCE_SUFFIXES = ( + ".py", ".js", ".ts", ".tsx", ".jsx", ".mjs", ".cjs", ".mts", ".cts", + ".go", ".rs", ".c", ".h", ".cpp", ".cc", ".cxx", ".hpp", ".hh", + ".cs", ".java", ".md", ".sh", +) -def _clean_reason(reason: str) -> Optional[str]: - """Normalise a health reason into a short description, or None for - auto-yellow boilerplate (it describes the tracking system, not the file).""" - reason = re.sub(r"\s+", " ", str(reason or "")).strip() - if not reason or reason.startswith("mtime changed") or "auto-detected" in reason: - return None - return (reason[:90] + "…") if len(reason) > 91 else reason +def _is_live_file(root: Path, rel: str) -> bool: + rel = str(rel or "").replace("\\", "/").strip() + if not rel or rel.startswith("_") or "\n" in rel: + return False + try: + return Path(root, rel).is_file() + except (OSError, ValueError): + return False -def _load_health_descriptions(root: Path) -> Dict[str, str]: - """file -> short description, from file_health.json or file_health.md. - Projects maintained through the shell workflow only have the .md table - (the JSON is written by the Python health module), so both are read. +def _looks_like_rel_file(rel: str) -> bool: + rel = str(rel or "").replace("\\", "/").strip() + if not rel or rel.startswith("_"): + return False + lower = rel.lower() + return ("/" in rel) or lower.endswith(_SOURCE_SUFFIXES) + + +def _wiki_caption(root: Path, rel: str) -> Optional[str]: + """Short purpose/role line from ``{rel}.wiki.md``, or None. + + Health *reasons* are audit stamps and must not be used as captions. """ - desc: Dict[str, str] = {} + wiki = Path(root, rel + ".wiki.md") + if not wiki.is_file(): + return None + try: + text = wiki.read_text(encoding="utf-8", errors="replace") + except OSError: + return None + lines = text.splitlines() + picked = None + heading_re = re.compile(r"^#{1,6}\s+(purpose|role)\b", re.I) + role_re = re.compile(r"^\*\*role:?\*\*\s*(.*)$", re.I) + for i, line in enumerate(lines): + s = line.strip() + if heading_re.match(s): + for nxt in lines[i + 1:]: + n = nxt.strip() + if not n: + continue + if n.startswith("#"): + break + picked = n.lstrip("-* ").strip() + break + if picked: + break + m2 = role_re.match(s) + if m2 and m2.group(1).strip(): + picked = m2.group(1).strip() + break + if not picked: + for line in lines: + s = line.strip() + if not s or s.startswith("#") or s.startswith(">") or s.startswith("|"): + continue + picked = s.lstrip("-* ").strip() + break + if not picked: + return None + picked = re.sub(r"\s+", " ", picked) + return (picked[:90] + "…") if len(picked) > 91 else picked + + +def _health_tracked_files(root: Path) -> List[str]: + """On-disk files listed in the health matrix (keys only; reasons ignored).""" + tracked: List[str] = [] try: with open(root / "file_health.json", "r", encoding="utf-8") as f: data = json.load(f) entries = data.get("entries", data) if isinstance(data, dict) else {} - for file, e in entries.items(): - r = _clean_reason((e or {}).get("reason")) - if r: - desc[str(file)] = r + for file in entries: + k2 = str(file).rstrip("/") + if k2 and _is_live_file(root, k2): + tracked.append(k2) except Exception: pass - if desc: - return desc + if tracked: + return tracked try: # .md fallback: | File | Status | Last Updated | Reason / Intent | with open(root / "file_health.md", "r", encoding="utf-8") as f: for line in f: @@ -550,12 +604,69 @@ def _load_health_descriptions(root: Path) -> Dict[str, str]: continue parts = [p.strip() for p in line.split("|")] if len(parts) >= 6 and parts[1]: - r = _clean_reason(parts[4]) - if r: - desc[parts[1]] = r + k2 = parts[1].rstrip("/") + if k2 and _is_live_file(root, k2): + tracked.append(k2) except Exception: pass - return desc + return tracked + + +def _live_cache_view(root: Path, cache: Dict[str, Any]) -> Dict[str, Any]: + """Shallow copy dropping per-file entries whose source is missing on disk.""" + if not isinstance(cache, dict): + return {} + out: Dict[str, Any] = {} + for k, v in cache.items(): + if not isinstance(k, str): + continue + if k.startswith("_"): + out[k] = v + continue + if _is_live_file(root, k): + out[k] = v + rev = out.get("_reverse_dependencies") + if isinstance(rev, dict): + new_rev: Dict[str, List[str]] = {} + for tgt, srcs in rev.items(): + tgt_s = str(tgt) + if _looks_like_rel_file(tgt_s) and not _is_live_file(root, tgt_s): + continue + if not isinstance(srcs, list): + continue + live_srcs = [] + for s in srcs: + ss = str(s) + if _looks_like_rel_file(ss) and not _is_live_file(root, ss): + continue + live_srcs.append(ss) + if live_srcs: + new_rev[tgt_s] = live_srcs + out["_reverse_dependencies"] = new_rev + return out + + +def _filter_live_edges( + root: Path, edges: List[Tuple[str, str, str, str, bool]] +) -> List[Tuple[str, str, str, str, bool]]: + """Drop edges whose source (or resolved internal target) is not on disk.""" + out = [] + for src, raw, target, conf, internal in edges: + if _looks_like_rel_file(src) and not _is_live_file(root, src): + continue + if internal and _looks_like_rel_file(target) and not _is_live_file(root, target): + continue + out.append((src, raw, target, conf, internal)) + return out + + +# --------------------------------------------------------------------------- +# Public API +# --------------------------------------------------------------------------- + +# --------------------------------------------------------------------------- +# File tree (the primary human/agent view of project shape) +# --------------------------------------------------------------------------- TREE_DIR_FILE_CAP = 40 # files listed per directory before "… +N more" @@ -574,21 +685,12 @@ def _generate_tree_section(root: Path, cache: Dict[str, Any]) -> List[str]: │ └── python.py └── cli.py — entry point + full update pipeline """ - descriptions = _load_health_descriptions(root) - parsed = {k for k in cache.keys() if isinstance(k, str) and not k.startswith("_")} - # Health keys are free text (audit records may use whole sentences as the - # "file"; some entries point at directories): only real on-disk files — - # or parser-confirmed ones — belong in the tree. - tracked = set() - for k in descriptions: - k2 = k.rstrip("/") - if not k2 or k2 in parsed: - continue - try: - if (root / k2).is_file(): - tracked.add(k2) - except OSError: - continue + parsed = { + k for k in cache.keys() + if isinstance(k, str) and not k.startswith("_") and _is_live_file(root, k) + } + # Health keys may be sentences or directories; only live files belong here. + tracked = {k for k in _health_tracked_files(root) if k not in parsed} files = sorted(parsed | tracked) if not files: return ["## File Tree", "", "```text", @@ -632,15 +734,16 @@ def render(node: Dict[str, Any], prefix: str, path_prefix: str) -> None: out.append(prefix + connector + name + suffix) render(sub, child_prefix, path_prefix + name) else: - d = descriptions.get(path_prefix + name) + d = _wiki_caption(root, path_prefix + name) out.append(prefix + connector + name + ((" — " + d) if d else "")) render(tree, "", "") lines = [ "## File Tree", "", - "> Every parsed/tracked file, organised by folder. Descriptions come from", - "> the agent wiki (file_health). The dependency graph is further below.", + "> Every parsed/tracked file, organised by folder. Captions come from", + "> `*.wiki.md` purpose/role text when present. Health *reasons* are audit", + "> stamps and are not copied here. The dependency graph is further below.", "", "```text", "{0}/ ({1} files)".format(root.name, len(files)), ] @@ -655,7 +758,8 @@ def generate_library_md(root: Path, cache: Dict[str, Any]) -> str: """Render library.md content from an import cache (see module docstring).""" if not isinstance(cache, dict): cache = {} - edges = _collect_edges(cache) + cache = _live_cache_view(root, cache) + edges = _filter_live_edges(root, _collect_edges(cache)) lines = [ "# Library & Imports Map (auto-generated by wikifier update-maps)", @@ -702,8 +806,9 @@ def write_library_md(root: Path, cache: Optional[Dict[str, Any]] = None) -> Dict cache = load_cache(root) if not isinstance(cache, dict): cache = {} - content = generate_library_md(root, cache) - nodes, edges = _graph_stats(cache) + live = _live_cache_view(root, cache) + content = generate_library_md(root, live) + nodes, edges = _graph_stats(live) tmp_path = out_path.with_name(out_path.name + ".tmp") tmp_path.write_text(content, encoding="utf-8") os.replace(str(tmp_path), str(out_path)) diff --git a/wikifier/library.py.wiki.md b/wikifier/library.py.wiki.md new file mode 100644 index 0000000..514667f --- /dev/null +++ b/wikifier/library.py.wiki.md @@ -0,0 +1,7 @@ +# wikifier/library.py + +**Role**: Pure-Python generator for committed `library.md` (file tree, Mermaid, tables, ACS, reverse deps). + +## Purpose + +Render the import map from the cache. Omit cache keys whose source is missing on disk. File-tree captions come from `*.wiki.md` purpose/role text, never health audit reasons. Regenerated by `update-maps`; do not hand-edit `library.md`.