v0.9.0 — bilingual semantics, finished end to end
Bilingual semantics, finished end to end
0.8.2 introduced Chinese and English business names compiled from evidence. Four places still showed the technical reading, or the wrong language, depending on how you looked at the same map. 0.9.0 closes them.
What changed for you
MCP answers in your language. Every tool (analyze_project, list_features, describe_feature, get_evidence) accepts an optional locale: zh-CN or en, default en. Names and descriptions follow it together, so an agent talking to a Chinese reader now sees exactly the names the Viewer shows. A name the compiler could not confirm from evidence is marked once, in the reader's language, instead of passing for a confirmed one. Unknown locales are refused rather than answered in the wrong language.
report.html reads the same whichever way you open it. Served over HTTP it always showed business names; double-clicked as a local file, the inline fallback printed technical names. The fallback now resolves the locale the way the Viewer does (?locale=, then your browser languages) and reads the same semantic slot, with the technical name kept beside the business name.
The optional LLM layer's feature names are visible again. With --semantic openai, a model's feature name was written into a field the Viewer never reads, while the lowered confidence it attached was shown. Feature names now land in the same slot as node names, under the same rule: only a name the deterministic pass could not read is filled; a name read from evidence is never overwritten.
Naming evidence is per language. SemanticLabel.evidence is now one list per locale. When the Chinese name comes from a README line and the English name is read off the identifier, each cites its own source; previously the document stood behind both. Older graph.json files still load; the first continuous build after upgrading reports every localized node as modified once.
Also in this release
- The Python adapter needs Python 3.10 or newer (
ast.Match); it now says so instead of failing with anAttributeError, and both READMEs document it. tsconfig.jsonuses./-relativepathswithoutbaseUrl, the form TypeScript 7 requires.docs/ROADMAP.mdis aligned with the code anddocs/CC_HANDOFF.md.- Repository only: the Action E2E workflow no longer holds GitHub Pages permissions, so it can never publish the fixture map to this repository's demo site again.
- Dependencies: elkjs 0.12, lucide-react 1.37, @xyflow/react 12.11.5, vite 8.
Compatibility
The GitHub Action's inputs and outputs are unchanged, so TheCrazyAnt/agent-runtime-map@v1 moves to this release. The SemanticLabel.evidence shape changed from a flat array to { "zh-CN": [], "en": [] }; nothing published read that field, but if you consume graph.json directly, adjust accordingly.
All three packages are published to npm with signed provenance from GitHub Actions.