v0.16.0
Theme: a name says only what the reader's position does not.
Added
--features params. Parameter names were 14–24% of a real map and were
the one large fact class with no name, because they sat in the always-on
"identity" remainder alongside the trie and the type headers. They are a fact
about the code, not the map's structure, so they are selectable now.
Deselecting keeps arity and drops only the names —place(order,items)
becomesplace(_,_), reusing the placeholder the renderer already emits for
an argument no extractor could name — and takes about 7% off a map that keeps
everything else.
Changed
- Grouped landmarks take the declared extension too.
{ItemId,OrderId}.java
now renders{ItemId,OrderId}under a# hologram ·.javaheader, like every
other leaf. They had been exempt so that payload naming files could tell a
reader the bare node above it was a directory — which cost the hoist most of
its value exactly where it pays best, on the one-public-class-per-file
languages whose every landmark is grouped. Worth 3.9% of thejavamini
fixture, 0.7% of a Spring corpus and 0.5% (306 tokens) of a 16,000-file Java
codebase. The reader's rule is now simply that a node with nodes below it is a
directory; a directory whose files are all grouped landmarks reads as a file,
measured at about one node in fifty, and never silently — the reconstructed
path does not exist while the directory does. - Call targets are named relative to the caller. The description ladder
picked the shortest name that is unambiguous across the whole project, which
is the right question to ask once and the wrong one to answer on every line:
a chain insidea/b/Order.javathat read> a/b/Order.java:Order.total
spent 24 characters restating the node the reader was standing in. A target
now carries only what the caller's own path, file and owner do not already
say. Worth 7.9% of a monorepo of near-identical services, 2.4% of a Java
example corpus, and 1.2% — 699 tokens — of a 16,000-file Java codebase. Two
targets that would shorten to the same text both keep their project-wide
names, so one name never stands for two.
Fixed
- Framework-wired code is no longer reported as dead.
×0means no static
project reference, and a container's wiring is invisible to static fan-in, so
Spring stereotypes and@Beanfactories, JSR-330@Named/@Inject,
@PostConstruct/@PreDestroylifecycle callbacks, JPA@Entity, and Spring
AI/MCP@Toolsurfaces now join routes, listeners and schedulers as
entrypoints. On a Spring AI corpus this removed 63 of 113×0markers — a
@Configuration @EnableWebSecurityclass and every@Beanfactory had been
reading as deletable — and made the map 38 tokens smaller in the process.