Fixed 🐞
- Two domain maps can now be merged.
ccsh mergerefused any pair of inputs that both carried domain words
(Opaque lens 'domain' has conflicting payloads), so domain-parsing a monorepo one subproject at a time and
merging the results was impossible. The lenses are now unioned by node id, and a word both inputs describe keeps
the higherfrequencyand the highertfidfindependently — the same "highest value wins" ruleccsh merge
already applies to metrics. A word only one input scored keeps its score.--largemerging no longer refuses
either: it re-keys the domain lens onto the wrapped paths instead of failing, so the words follow the files
into their prefix folder.
Chore 👨💻 👩💻
-
Cleared the SonarCloud code smells the analysis project had accumulated:
CSVRowreads its columns through the
indexed accessor,InputHelper.isInputValidFolderOrAnyFilereads as guard clauses,UnifiedParsertakes
TreeSitterExcavationSitefrom the version catalog instead of a hardcoded coordinate, and seven staleTODO
comments were removed. No behaviour changed. -
The
domainlens is now a typed part of the model alongsidemetricsanddependencyinstead of an opaque JSON payload, so
filters can read and rewrite it rather than pass it through blindly. The emitted.cc.jsonis unchanged, except that a run
that found no words at all now writes the reserved empty"domain": {}instead of"domain": {"nodes": {}}— the two always
meant the same thing, and only the latter used to count as carrying data.