Skip to content

fix: refactor project naming setup to isolate generated name mappings - #434

Merged
cdsap merged 1 commit into
mainfrom
issue/431-hermes-refactor-project-naming-setup-to-iso-a1
Sep 1, 2026
Merged

fix: refactor project naming setup to isolate generated name mappings#434
cdsap merged 1 commit into
mainfrom
issue/431-hermes-refactor-project-naming-setup-to-iso-a1

Conversation

@cdsap

@cdsap cdsap commented Sep 1, 2026

Copy link
Copy Markdown
Owner

Summary

Problem

ProjectGenerator.write currently owns both generation orchestration and the rules for mutating the global NameMappings singleton in project-generator/src/main/kotlin/io/github/cdsap/projectgenerator/ProjectGenerator.kt. NameMappings itself is just mutable storage in project-generator/src/main/kotlin/io/github/cdsap/projectgenerator/NameMappings.kt, while writers and planners consume it implicitly from many locations such as project-generator/src/main/kotlin/io/github/cdsap/projectgenerator/writer/ProjectWriter.kt and project-generator/src/main/kotlin/io/github/cdsap/projectgenerator/writer/ModulesWriter.kt.

Why this matters

The module and layer naming policy is core generation behavior, but it is hidden inside the application service and applied through global mutable state. That makes naming harder to test directly, increases coupling between graph generation and file-writing infrastructure, and leaves tests vulnerable to state leakage when NameMappings is changed by previous runs.

Proposed change

Extract the name-map calculation from ProjectGenerator.write into a small internal naming component, for example ProjectNameMappings or ProjectNameMappingFactory, that returns immutable layer and module maps from layers, nodes, configured layer names, module name parts, and app-layer rules. Keep NameMappings as the existing compatibility access point for now, but have ProjectGenerator call one configure/apply method with the computed maps instead of building them inline.

Notes

This is a small clean-architecture step: keep file generation infrastructure unchanged, but move a core naming policy out of the orchestration method and make the boundary around global mutable state explicit.

Fixes #431

Changes

  • project-generator/src/main/kotlin/io/github/cdsap/projectgenerator/NameMappings.kt
  • project-generator/src/main/kotlin/io/github/cdsap/projectgenerator/ProjectGenerator.kt
  • project-generator/src/main/kotlin/io/github/cdsap/projectgenerator/ProjectNameMappingFactory.kt
  • project-generator/src/test/kotlin/io/github/cdsap/projectgenerator/ProjectGeneratorTest.kt
  • project-generator/src/test/kotlin/io/github/cdsap/projectgenerator/ProjectNameMappingFactoryTest.kt

Verification

  • ./gradlew :project-generator:unitTest
  • ./gradlew :cli:test
  • ./gradlew ktlintCheck

@cdsap
cdsap merged commit f9d50a4 into main Sep 1, 2026
12 checks passed
@cdsap
cdsap deleted the issue/431-hermes-refactor-project-naming-setup-to-iso-a1 branch September 1, 2026 17:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Refactor project naming setup to isolate generated name mappings

1 participant