Skip to content
CodArchthe living map of the architecture
ESEN

Roadmap

Every milestone leaves the product working and verifiable. No big bang.

Today CodArch has:

  • CLI (codarch): analyze, diff, render, inspect and serve. Published on npm.
  • Model cc.json 2.x: file tree, metrics, dependency graph, cycles, migration lens and a deterministic checksum. It is the truth of the product and all apps share it.
  • Rules of architecture in .codarch.yml: layers, forbidden dependencies, thresholds and cycles, with severity and a blocking policy.
  • MCP read-only: twelve queries for agents.
  • GitHub Action: analyses the PR’s base and head, comments the result and blocks if the policy fails.
  • Web app: map, inspector, PR view, level of detail for large repos and analysis of a folder in the browser with the same checksum as the CLI.
  • Desktop app: Electron with its own interface, native analysis with git, system menu and unsigned installers.

Phases M0–M64 are closed (M24 discarded). M65–M76 are closed.

Each phase lives in the roadmap of the decision that brings it: the ADR has a ## Roadmap section with what is open and what is in progress. Here is only the index; the record of what is done lives in the guide feed (/guia/). If a phase grows, it grows in its ADR, not here.

flowchart TD
subgraph base["Base: model, parser, diff"]
M0["M0 · Model and map"] --> M1["M1 · TS parser"]
M1 --> M2["M2 · Diff and PR"]
M2 --> M3["M3 · MCP and distribution"]
end
subgraph apps["Apps: migration, web, browser, desktop"]
M4["M4 · Migration lens"] --> M5["M5 · Web app"]
M5 --> M6["M6 · Analysis in the browser"]
M6 --> M7["M7 · Desktop app"]
M7 --> M26["M26 · Shared UI"]
M26 --> M37["M37 · The file card and its lenses"]
M37 --> M38["M38 · Rules get their tab"]
M38 --> M39["M39 · Three tabs"]
M39 --> M40["M40 · A metrics table"]
M40 --> M41["M41 · The project frame"]
M41 --> M42["M42 · Symbols collapse too"]
M42 --> M43["M43 · Every symbol in the module"]
M43 --> M44["M44 · The card hides nothing"]
M44 --> M45["M45 · A version per component"]
M45 --> M46["M46 · The action returns"]
M46 --> M47["M47 · The card shows the code"]
M47 --> M48["M48 · Editor and dependencies"]
M48 --> M50["M50 · Two tabs"]
M50 --> M51["M51 · The files of the change, in one list"]
M51 --> M52["M52 · The table from base to head"]
end
subgraph lenses["Lenses: migration, domain, symbols, time"]
M8["M8 · Migration where it was missing"] --> M9["M9 · Domain lens"]
M9 --> M10["M10 · Time evolution"]
M10 --> M11["M11 · Symbols lens"]
M11 --> M12["M12 · Life of a symbol"]
end
subgraph ext["Settings and extensions"]
M13["M13 · Settings"] --> M14["M14 · Plugins"]
M14 --> M15["M15 · 3D view"]
M15 --> M16["M16 · Addons"]
M16 --> M17["M17 · Install and remove"]
end
subgraph docs["Documents and website"]
M18["M18 · Ordered documents"] --> M19["M19 · Icons and diagrams"]
M19 --> M20["M20 · The guide, in HTML"]
M20 --> M21["M21 · Versions and updates"]
M21 --> M22["M22 · The repo, with its papers"]
M22 --> M23["M23 · The project website"]
M23 --> M24["M24 · SQLite index"]
end
subgraph delivery["Delivery"]
M25["M25 · Delivery is automated"]
M25 --> M27["M27 · The web app in Docker"]
M26 --> M28["M28 · The desktop installs and updates"]
end
subgraph languages["More languages"]
M61["M61 · Java, Python, Go and C#"]
end
subgraph agent["For agents"]
M62["M62 · The map, in a capture"]
end
subgraph folder["The folder"]
M63["M63 · The folder has its ficha"]
end
subgraph rest["What is not code"]
M64["M64 · The map of what is not code"]
M64 --> M76["M76 · The rules of the rest"]
end
subgraph lint["Lint"]
M65["M65 · Lint, on the map"]
M67["M67 · Lint belongs to the project"]
M65 --> M75["M75 · Lint is read by findings"]
end
subgraph project["The project"]
M66["M66 · The project has its ficha"]
end
subgraph duplication["Duplication"]
M68["M68 · Duplication, measured"]
M69["M69 · Duplication, on the map"]
M70["M70 · Divergence, with a name"]
M71["M71 · Duplication, in the diff"]
end
M3 --> M4
M7 --> M8
M12 --> M13
M17 --> M18
M21 --> M25
M1 -.-> M61
M1 -.-> M62
M1 -.-> M63
M1 -.-> M64
M1 -.-> M65
M65 -.-> M66
M66 -.-> M67
M1 -.-> M68
M68 -.-> M69
M69 -.-> M70
M70 -.-> M71
M2 -.-> M71
PhaseWhatStatusDecision
M0Model and map, without parsersclosedADR 0005
M1Our own TypeScript parserclosedADR 0003
M2Diff and PRclosedADR 0010
M3MCP and distributionclosedADR 0014
M4Migration lensclosedADR 0016
M5Web appclosedADR 0008
M5.1Usage basicsclosedADR 0008
M6Analysis in the browserclosedADR 0020
M7Desktop appclosedADR 0021
M8Migration, where it was still missingclosedADR 0022
M9Domain lens, step by stepclosedADR 0023
M10Time evolutionclosedADR 0024
M11The symbols lensclosedADR 0025
M12The life of a symbolclosedADR 0026
M13SettingsclosedADR 0027
M14PluginsclosedADR 0028
M15The 3D viewclosedADR 0028
M16AddonsclosedADR 0029
M17Installing and removing plugins and addonsclosedADR 0030
M18Ordered documentsclosedADR 0031
M19Documents, with icons and diagramsclosedADR 0031
M20The guide, in HTMLclosedADR 0031
M21Versions and updatesclosedADR 0032
M22The repo, with its papersclosedADR 0033
M23The project websiteclosedADR 0034
M24The SQLite index of the documentsdiscardedADR 0036
M25Delivery is automatedclosedADR 0042
M26Shared UIclosedADR 0043
M27The web app in DockerclosedADR 0044
M28The desktop installs and updatesclosedADR 0045
M29Documents with StarlightclosedADR 0046
M30The changelog is the guideclosedADR 0047
M31The site in two languagesclosedADR 0046
M32The desktop persists in .codarch/closedADR 0048
M33Shared orchestrationclosedADR 0049
M34The state lives in the repositoryclosedADR 0050
M35The second lint netclosedADR 0054
M36Live does not re-analyseclosedADR 0056
M37The file card talks about its lensesclosedADR 0057
M38Rules get their own tabclosedADR 0058
M39Three tabsclosedADR 0059
M40The card reads as a tableclosedADR 0060
M41The project frameclosedADR 0061
M42Symbols collapse tooclosedADR 0062
M43Every symbol in the moduleclosedADR 0063
M44The card hides nothingclosedADR 0064
M45A version per componentclosedADR 0065
M46The action returns to the monorepoclosedADR 0066
M47The card shows the codeclosedADR 0067
M48The card opens the editor and its dependenciesclosedADR 0068
M49The card’s language, across the reportclosedADR 0061
M50Two tabs: the file and the changeclosedADR 0069
M51The files of the change, in one listclosedADR 0070
M52The change table goes from base to headclosedADR 0071
M53Changes since the last commitclosedADR 0072
M54One single interfaceclosedADR 0073
M55One single analysis sessionclosedADR 0074
M56Changes are gitclosedADR 0075
M57Newlines are not codeclosedADR 0076
M58The diff, when the file opensclosedADR 0077
M59Debt balanceclosedADR 0078
M60The inspector with an activity barclosedADR 0079
M61Java, Python, Go and C#closedADR 0090
M62The map, in a captureclosedADR 0091
M63The folder has its fichaclosedADR 0092
M64The map of what is not codeclosedADR 0093
M65Lint, on the mapclosedADR 0094
M66The project has its fichaclosedADR 0095
M67Lint belongs to the projectclosedADR 0096
M68Duplication, measuredclosedADR 0102
M69Duplication, on the mapclosedADR 0102
M70Divergence, with a nameclosedADR 0102
M71Duplication, in the diffclosedADR 0102
M72The checksum is of the codeclosedADR 0103
M73The browser reads the same scopeclosedADR 0103
M74The app compares code and historyclosedADR 0103
M75Lint is read by findingsclosedADR 0104
M76The rules of the restclosedADR 0105

Open items that are not a phase yet. They live here (not as loose checkboxes in each ADR) until their phase is born. Each line links the decision where it was decided.

  • Decide whether the parse cache is shared between desktop analysis and serve — ADR 0056
  • Measure whether churn on add/delete can request only the new paths — ADR 0056
  • Watcher safety net when the OS drops events (e.g. Windows overflows) — ADR 0056
  • Rules that touch a symbol (not only the file), when the report knows the line — ADR 0057
  • Show file evolution in Lenses when history has more than one snapshot — ADR 0057
  • Filter Rules by severity or origin and search by name — ADR 0058
  • Catalog of configured rules that are not violated — ADR 0058
  • Remember the card’s last open section when changing cell — ADR 0059
  • Fold imports if the metrics table grows — ADR 0060
  • Shortcut to fold or unfold every section — ADR 0061
  • Filter symbols by name in files with a huge list — ADR 0062
  • Distinguish a variable’s value (text, number, object) in the row — ADR 0063
  • Namespaces and loose code, only if they show up in a real repo — ADR 0064
  • Object keys, as detail of a variable — ADR 0064
  • Choose the editor (VS Code, Cursor, other) in settings — ADR 0068
  • Show the edge type (plain import, type-only, dynamic) — ADR 0068
  • Add a root action.yml in the monorepo if GitHub Marketplace is wanted — ADR 0066
  • Redo webapp and first-steps screenshots with the new frame — ADR 0082
  • Redo screenshots that show the gear and the rail/dock — ADR 0083
  • Map capture checklist (folders, dominant red, findings without zoom, selection without color, black and white) — map design
  • rest.links lens with the link’s line (out of M76 v1; reopen only if the rest snapshot stores the lens) — ADR 0105
  • A phase is born in the roadmap of its decision (## Roadmap in the ADR); here only its line is added.
  • A decision that grows grows its roadmap and leaves what is done in the guide, not in this file.
  • Ideas that are not a phase yet live in this file’s backlog (with the ADR link) or in the guide, in chronological order.
  • The index of decisions —with their date and status— is in docs/adr/index.md.