Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
a0a9c23
feat(analysis): add DomainLanguageParser emitting cc.json 2.0 domain …
christian-huehn-mw Jul 17, 2026
b59a171
fix(visualization): stop the loading spinner from hanging on the doma…
christian-huehn-mw Jul 20, 2026
91b940f
refactor(visualization): extract shared bar UI kit from metricsBar
christian-huehn-mw Jul 20, 2026
d5ce052
feat(visualization): add domain lens data layer
christian-huehn-mw Jul 20, 2026
827c9ec
refactor(visualization): extract reusable hover tooltip service
christian-huehn-mw Jul 20, 2026
3cb62ba
feat(visualization): add domain view with word cloud
christian-huehn-mw Jul 20, 2026
9a6e422
refactor(visualization): keep the hover tooltip row type internal
christian-huehn-mw Jul 20, 2026
678c801
feat(visualization): scope nav bar controls to the active view
christian-huehn-mw Jul 20, 2026
c3660eb
fix(visualization): make the word cloud honor the requested word count
christian-huehn-mw Jul 20, 2026
7b3ee03
refactor: restructure domain language parser and domain view
christian-huehn-mw Jul 21, 2026
efe3a26
fix(visualization): keep re-rendering the metrics map after it has se…
christian-huehn-mw Jul 21, 2026
c37ddd0
refactor(visualization): split sidebar explorer into reusable ports
christian-huehn-mw Jul 21, 2026
7055d46
fix(visualization): persist all domain-state settings
christian-huehn-mw Jul 21, 2026
1e4d1bf
refactor(analysis): remove dead domain-parser code
christian-huehn-mw Jul 21, 2026
0f96236
refactor(visualization): collapse redundant domain-state migration
christian-huehn-mw Jul 21, 2026
2d1ab50
refactor(visualization): reuse route + node-name helpers
christian-huehn-mw Jul 21, 2026
6e6b250
style: format and fix feature boundaries
christian-huehn-mw Jul 21, 2026
c0c8a0a
fix(analysis): make framework keyword scoping deterministic
christian-huehn-mw Jul 21, 2026
dc62d63
refactor(analysis): dedupe and de-ceremony domain-parser processing
christian-huehn-mw Jul 21, 2026
3b04869
refactor(visualization): reuse shared helpers over duplicated logic
christian-huehn-mw Jul 21, 2026
9f3e8b7
refactor(visualization): fix bar-height fallback drift, extract nav d…
christian-huehn-mw Jul 21, 2026
1620ccd
refactor(visualization): extract copy-to-clipboard into a service
christian-huehn-mw Jul 21, 2026
1d1dce7
fix(visualization): drop unused bar-height constant exports
christian-huehn-mw Jul 21, 2026
208691f
refactor(analysis): single-source WordFrequency tfidf construction
christian-huehn-mw Jul 21, 2026
0f23910
refactor(visualization): share range helpers, trim redundant adapter …
christian-huehn-mw Jul 21, 2026
208f80c
feat(visualization): domain-view tree find, redirect toast, bar offset
christian-huehn-mw Jul 23, 2026
aac670f
fix(visualization): apply domain-view UI review findings
christian-huehn-mw Jul 23, 2026
7ba06b1
fix(visualization): revert word-cloud fill scaling that slowed layout
christian-huehn-mw Jul 23, 2026
93b4b74
test(visualization): fix DomainState mock type errors
christian-huehn-mw Jul 23, 2026
6039e9f
chore: gitignore generated analysis output; mark loading-indicator pl…
christian-huehn-mw Jul 23, 2026
a9a828a
feat(visualization): add the MaibornWolff M as a word-cloud shape
christian-huehn-mw Jul 23, 2026
a28ac80
feat(visualization): add word-cloud screenshot to domain view
christian-huehn-mw Jul 23, 2026
8a27b71
refactor(visualization): remove type and lint suppressions
christian-huehn-mw Jul 23, 2026
ee9a8e7
docs: add domain-language branch review notes
christian-huehn-mw Jul 23, 2026
46cc0e4
build(visualization): apply the echarts-wordcloud patch on npm run dev
christian-huehn-mw Jul 23, 2026
55ed22e
chore: gitignore generated cc.json maps at the repo root
christian-huehn-mw Jul 23, 2026
4aa4d45
docs: match the Kotlin function-syntax rule to ktlint
christian-huehn-mw Jul 23, 2026
d66f93a
refactor(visualization): drop comments that restate the code
christian-huehn-mw Jul 23, 2026
d7585a5
refactor(visualization): split the word sizing popover into controls
christian-huehn-mw Jul 23, 2026
d5c94dc
refactor(analysis): simplify the domain language parser internals
christian-huehn-mw Jul 23, 2026
0fb209f
test(visualization): assert exact text where the whole text is known
christian-huehn-mw Jul 23, 2026
a1a86db
fix(analysis): report domain parser progress on every run
christian-huehn-mw Jul 23, 2026
4643ad6
fix(visualization): keep the domain view on a browser refresh
christian-huehn-mw Jul 23, 2026
2e6c66f
fix(visualization): put the screenshot button in one place in both views
christian-huehn-mw Jul 23, 2026
43cf2b7
feat(visualization): add an Authors built-in scenario
christian-huehn-mw Jul 23, 2026
eaeb9f2
docs: require code to explain itself instead of comments
christian-huehn-mw Jul 23, 2026
dac2989
refactor: let names carry the intent the comments used to
christian-huehn-mw Jul 23, 2026
402e193
docs: keep only user-facing entries in the branch changelogs
christian-huehn-mw Jul 23, 2026
aa4edb1
refactor(visualization): carry semantics in elements instead of ARIA …
christian-huehn-mw Jul 23, 2026
d8b992d
refactor(visualization): take the last path segment with findLast
christian-huehn-mw Jul 23, 2026
34d8993
fix(visualization): make the persistence wait in e2e actually wait
christian-huehn-mw Jul 23, 2026
845a079
fix(visualization): wait for the persisted file name, not the map label
christian-huehn-mw Jul 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
1 change: 0 additions & 1 deletion .github/workflows/scripts/version-manager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -241,7 +241,6 @@ class VersionManager {
}

// CLI interface
// @ts-ignore
if (import.meta.main) {
const [command, ...args] = process.argv.slice(2)
const manager = new VersionManager()
Expand Down
6 changes: 6 additions & 0 deletions .github/workflows/test_visualization.yml
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,12 @@ jobs:
npm run lint:architecture || (echo "❌ Architecture violations detected! Check the output above for details." && exit 1)
working-directory: ${{env.working-directory}}

- name: Check component styles
run: |
echo "Checking for component style files (no-component-scss-files)..."
npm run lint:styles || (echo "❌ Component style files detected! Use Tailwind utility classes instead." && exit 1)
working-directory: ${{env.working-directory}}

- name: Check dead code
run: |
echo "Checking for unused exports/files (knip)..."
Expand Down
9 changes: 9 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,17 @@
codecharta-analyse.sonargraph
auth.txt
.cache
# brand reference — internal corporate palette, must not be committed
Ideas/brand.png
# call-graph exports (e.g. analysis.cg.json) — large, generated
*.cg.json
# analyser output written at the analysis root (e.g. dlc.cc.json.gz) — generated, not a tracked fixture
/analysis/*.cc.json
/analysis/*.cc.json.gz
# analyser output dropped at the repo root (e.g. maibornwolff-domain.cc.json) — generated, and biome
# would otherwise try to format the minified map. Tracked fixtures all live in subdirectories.
/*.cc.json
/*.cc.json.gz
**/node-wrapper/public
.scannerwork

Expand Down
15 changes: 12 additions & 3 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -291,14 +291,18 @@ Example: `feat(visualization): add dark mode toggle (#123)`
- Based on official Kotlin Coding Conventions
- Auto-formatted via `./gradlew ktlintFormat`
- Rules defined in `.editorconfig`
- **Function syntax**: Use block-body style with braces `{ }` consistently, not expression-body style with `=`
- **Function syntax**: Follow ktlint (`ktlint_code_style = ktlint_official`), which requires an
expression body (`=`) for a function whose body is a single expression, and a block body `{ }` for
everything else. `./gradlew ktlintFormat` rewrites this for you — do not hand-write the other form,
`ktlintCheck` fails it.
- **Guard clauses**: Use early returns for error conditions and edge cases to reduce nesting
- **If expressions**: Prefer concise single-line style when possible:
- ✅ `val x = if (condition) valueA else valueB`
- ❌ `val x = if (condition) { valueA } else { valueB }`
- Use multi-line only when branches contain multiple statements or complex logic
- **Magic strings/numbers**: Extract repeated literals to constants in `companion object`
- **Function organization**: Group related functions with section comments
- **Function organization**: Keep related functions next to each other; order them top-down (callers
before callees) instead of labelling groups with section comments
- **Parameter naming**: Use consistent, descriptive names across related functions

**Visualization (TypeScript)**:
Expand All @@ -322,7 +326,12 @@ Example: `feat(visualization): add dark mode toggle (#123)`
- **Expressive Naming**: Descriptive names that reveal intent (>2 chars, avoid abbreviations)
- **Fix Warnings**: Never suppress, always resolve
- **Consistent Style**: Match existing patterns; follow language conventions
- **Comments**: Use sparingly; explain *why* not *what*. Prefer clear function names over comments.
- **Comments**: Default to **no comment**. Write one only when the code cannot be made to explain
itself and a reader would otherwise draw a wrong conclusion — a non-obvious constraint, a
workaround (reference the issue), a deliberate trade-off. Never restate what the code does.
Naming is the tool: rename the method, extract a named helper, introduce a named constant or
intermediate variable instead of writing a sentence. Prose blocks that narrate a class, a
template section, or a sequence of steps do not belong in the code — delete them.
- **Method Size**: Keep methods <25 lines; split complex logic into focused helpers
- **Parameter Lists**: Max 3-4 parameters; use data classes for related groups
- **Metric Accuracy**: All metrics must be deterministic and reproducible across runs
Expand Down
7 changes: 6 additions & 1 deletion CODE_QUALITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,10 @@ private fun writeOutput(data: TransformedData): Result { ... }

### 4. Comments

**RULE:** Comments explain *why*, never *what*. Code should be so clear that *what* is obvious.
**RULE:** The default is **no comment**. Make the code explain itself through naming — rename the
method, extract a named helper, introduce a named constant or intermediate variable. Write a comment
only when that is impossible and a reader would otherwise draw a wrong conclusion; then it explains
*why*, never *what*.

**❌ BAD:**
```kotlin
Expand All @@ -119,6 +122,8 @@ val compatible = projects.filter { Project.isAPIVersionCompatible(it.apiVersion)
- ✅ Performance trade-offs
- ❌ Explaining obvious code
- ❌ Commented-out code (delete it)
- ❌ Prose that narrates a class, a template section, or a sequence of steps — rename and extract instead
- ❌ Doc comments (KDoc/JSDoc) that only repeat the signature

### 5. Function Parameters

Expand Down
Loading
Loading