Roadmap
Development
Every milestone leaves the product working and verifiable. No big bang.
Status
Section titled “Status”Today CodArch has:
- CLI (
codarch):analyze,diff,render,inspectandserve. Published on npm. - Model
cc.json2.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.
The phases
Section titled “The phases”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| Phase | What | Status | Decision |
|---|---|---|---|
| M0 | Model and map, without parsers | closed | ADR 0005 |
| M1 | Our own TypeScript parser | closed | ADR 0003 |
| M2 | Diff and PR | closed | ADR 0010 |
| M3 | MCP and distribution | closed | ADR 0014 |
| M4 | Migration lens | closed | ADR 0016 |
| M5 | Web app | closed | ADR 0008 |
| M5.1 | Usage basics | closed | ADR 0008 |
| M6 | Analysis in the browser | closed | ADR 0020 |
| M7 | Desktop app | closed | ADR 0021 |
| M8 | Migration, where it was still missing | closed | ADR 0022 |
| M9 | Domain lens, step by step | closed | ADR 0023 |
| M10 | Time evolution | closed | ADR 0024 |
| M11 | The symbols lens | closed | ADR 0025 |
| M12 | The life of a symbol | closed | ADR 0026 |
| M13 | Settings | closed | ADR 0027 |
| M14 | Plugins | closed | ADR 0028 |
| M15 | The 3D view | closed | ADR 0028 |
| M16 | Addons | closed | ADR 0029 |
| M17 | Installing and removing plugins and addons | closed | ADR 0030 |
| M18 | Ordered documents | closed | ADR 0031 |
| M19 | Documents, with icons and diagrams | closed | ADR 0031 |
| M20 | The guide, in HTML | closed | ADR 0031 |
| M21 | Versions and updates | closed | ADR 0032 |
| M22 | The repo, with its papers | closed | ADR 0033 |
| M23 | The project website | closed | ADR 0034 |
| M24 | The SQLite index of the documents | discarded | ADR 0036 |
| M25 | Delivery is automated | closed | ADR 0042 |
| M26 | Shared UI | closed | ADR 0043 |
| M27 | The web app in Docker | closed | ADR 0044 |
| M28 | The desktop installs and updates | closed | ADR 0045 |
| M29 | Documents with Starlight | closed | ADR 0046 |
| M30 | The changelog is the guide | closed | ADR 0047 |
| M31 | The site in two languages | closed | ADR 0046 |
| M32 | The desktop persists in .codarch/ | closed | ADR 0048 |
| M33 | Shared orchestration | closed | ADR 0049 |
| M34 | The state lives in the repository | closed | ADR 0050 |
| M35 | The second lint net | closed | ADR 0054 |
| M36 | Live does not re-analyse | closed | ADR 0056 |
| M37 | The file card talks about its lenses | closed | ADR 0057 |
| M38 | Rules get their own tab | closed | ADR 0058 |
| M39 | Three tabs | closed | ADR 0059 |
| M40 | The card reads as a table | closed | ADR 0060 |
| M41 | The project frame | closed | ADR 0061 |
| M42 | Symbols collapse too | closed | ADR 0062 |
| M43 | Every symbol in the module | closed | ADR 0063 |
| M44 | The card hides nothing | closed | ADR 0064 |
| M45 | A version per component | closed | ADR 0065 |
| M46 | The action returns to the monorepo | closed | ADR 0066 |
| M47 | The card shows the code | closed | ADR 0067 |
| M48 | The card opens the editor and its dependencies | closed | ADR 0068 |
| M49 | The card’s language, across the report | closed | ADR 0061 |
| M50 | Two tabs: the file and the change | closed | ADR 0069 |
| M51 | The files of the change, in one list | closed | ADR 0070 |
| M52 | The change table goes from base to head | closed | ADR 0071 |
| M53 | Changes since the last commit | closed | ADR 0072 |
| M54 | One single interface | closed | ADR 0073 |
| M55 | One single analysis session | closed | ADR 0074 |
| M56 | Changes are git | closed | ADR 0075 |
| M57 | Newlines are not code | closed | ADR 0076 |
| M58 | The diff, when the file opens | closed | ADR 0077 |
| M59 | Debt balance | closed | ADR 0078 |
| M60 | The inspector with an activity bar | closed | ADR 0079 |
| M61 | Java, Python, Go and C# | closed | ADR 0090 |
| M62 | The map, in a capture | closed | ADR 0091 |
| M63 | The folder has its ficha | closed | ADR 0092 |
| M64 | The map of what is not code | closed | ADR 0093 |
| M65 | Lint, on the map | closed | ADR 0094 |
| M66 | The project has its ficha | closed | ADR 0095 |
| M67 | Lint belongs to the project | closed | ADR 0096 |
| M68 | Duplication, measured | closed | ADR 0102 |
| M69 | Duplication, on the map | closed | ADR 0102 |
| M70 | Divergence, with a name | closed | ADR 0102 |
| M71 | Duplication, in the diff | closed | ADR 0102 |
| M72 | The checksum is of the code | closed | ADR 0103 |
| M73 | The browser reads the same scope | closed | ADR 0103 |
| M74 | The app compares code and history | closed | ADR 0103 |
| M75 | Lint is read by findings | closed | ADR 0104 |
| M76 | The rules of the rest | closed | ADR 0105 |
Backlog
Section titled “Backlog”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.
Live and index
Section titled “Live and index”- 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
Card, rules and tabs
Section titled “Card, rules and tabs”- 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
Action and Marketplace
Section titled “Action and Marketplace”- Add a root
action.ymlin the monorepo if GitHub Marketplace is wanted — ADR 0066
Docs (screenshots)
Section titled “Docs (screenshots)”- 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 design
Section titled “Map design”- Map capture checklist (folders, dominant red, findings without zoom, selection without color, black and white) — map design
Rest / docs
Section titled “Rest / docs”rest.linkslens with the link’s line (out of M76 v1; reopen only if the rest snapshot stores the lens) — ADR 0105
How to read this
Section titled “How to read this”- A phase is born in the roadmap of its decision (
## Roadmapin 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.