Back to case study
codemap ~/carbon back to the case study Captured output

The map draws only the symbols your query returned.

codemap indexes 6,050 symbols in the carbon repository. This surface draws none of them until you ask it something, then renders exactly what the query returned. Every result below is captured from a real build.

query surface fresh: built at HEAD, tree clean
6,050 symbols indexed
Nothing is drawn yet, and that is deliberate. Ask a question in the terminal below and only the answer appears.
harry@huy.gg ~/carbon • zsh
harry@huy.gg ~/carbon
try

Why does it open empty?

Every codemap query refuses something. Results cap at 15 to 20 rows, hubs sort last, graph walks are opt-in. The existing export draws all 6,050 symbols at once, doing the exact opposite.

Ask what decision a picture supports. callers formula_index changes what you do next. impact FormulaError changes what you test. A whole-graph render changes how impressed someone is, and nothing follows from that.

What do the colors mean?

The existing export hashes each node's cluster into a hue. Carbon's 216 communities are unnamed, so the four largest take most of the area and the colors mean nothing a reader can recover.

Here only the symbol you asked about wears the accent. Size carries degree, kind is a word on hover.

Confidence rides the dash pattern, which both the export and the command line throw away. Solid means an import proved it. Dashed means a bare name matched and could be wrong. Try callers is_owner: nine callers, six solid, three dashed.

Why does it always look the same?

Angles come from a symbol's position in the result, so the same query draws the same picture on every machine and every run.

A force simulation would settle somewhere new each time. codemap does guess, since 554 of its 11,609 edges are bare-name matches. It never guesses differently twice, and a layout that wandered would break that.

What doesn't this design solve?

Shapes it cannot draw. The radial arrangement assumes one focus symbol with relations around it, which fits callers, callees, impact, def, and search. It does not fit path, a chain wanting a left-to-right sequence, cluster, which has no center to orbit, or locate, which returns a tree per hit.

The dropped count is not a virtue. Carbon emits 16,854 edges and keeps 11,609, so the map is 69 percent of what was found. The other 5,245 mixes two things: destinations that do not exist, and destinations the tie-breaker could not choose between. The second kind are real edges destroyed because an unrelated symbol shared a name, 15 imports into one module and 3 calls into another. That split has been measured on codemap's own map, never on carbon's.

callers under-reports. codemap binds bare names and self.method(), and emits nothing for module.function(), the dominant Python idiom. Mapping itself, it kept 156 edges and dropped 223, and callers returned empty for two functions whose only caller is its own command line. Both queries here check out against a text search, but only because both are called by bare name. A drawn subgraph is a floor, not a census.

Scale. Twenty nodes is about the ceiling. Several hundred would crowd the canvas the way the current export does, and the honest answer there may be a table.

Loose ends. Below 600px the labels at top and bottom dead center overlap, and results are captured rather than live. This is also the narrowest of three directions: it scopes the render, skips visual hub suppression, and never tests whether a treemap would beat a graph.