See @README.md for project overview. See @.claude/rules/desktop-java.md for desktop GUI module rules. See @.claude/rules/timeseries-algorithms.md for time series analysis rules.
# Full clean build with tests
mvn clean package
# Compile only
mvn clean compile
# Install to local repository (after dimension-di, dimension-db, and dimension-tt)
mvn clean install -U
# Run tests
mvn test
# Skip tests (when dependencies not available)
mvn package -DskipTests- desktop/: Main GUI application, Swing-based desktop UI
- jfreechart-fse/: Chart rendering library extension
- egantt/: Gantt chart visualization
- matrix-profile/: Time series analysis (anomaly detection, motif discovery)
- timeseries-forecast/: ARIMA forecasting algorithms
Layer separation (inside desktop):
bus/: Application-wide event bus (MBassador pub/sub)router/: Observable listener registry for UI lifecyclecomponent/broker/: Directed message routing between UI componentscollector/: Data collection (JDBC, HTTP, Prometheus)component/module/: GUI modules (MVP pattern)component/chart/: Chart visualization logiccache/: In-memory caching
Three inter-component messaging mechanisms. NEVER mix them — use the pattern already present in the target module.
- MBassador-based publish/subscribe for application-wide domain events
- Event records in
bus/event/(ConnectionAddEvent, ProfileRemoveEvent, etc.) - Subscribers annotated with
@Handler - IMPORTANT: Any
@Handlerthat updates Swing UI MUST dispatch to EDT viaSwingUtilities.invokeLater - Use for: cross-module notifications where sender doesn't know receivers
- Singleton with
Destination(Component, Module, Panel, Block)addressing - Actions enum for chart/panel management (ADD_CHART, REMOVE_CHART, CHANGE_TAB, etc.)
- Use for: targeted UI commands within workspace/dashboard/adhoc/preview
- Typed listener registration with
fire*callbacks - Keyed by
ProfileTaskQueryKeyfor collect start/stop lifecycle - Separate listener maps per context: workspace, preview, dashboard, zoom
- Use for: UI state changes (toolbar, config, progressbar, profile start/stop)
- Modify
.gitea/workflows/without CI/CD approval - Change
pom.xmlversion without checking parent pom${revision}— all modules share a single version via this property - Remove event handlers from EventBus without checking all
@Handlerconsumers - Commit without running
mvn teston changed modules - Touch
desktop/target/— generated files only - Unify or replace one messaging mechanism with another without explicit approval
- Show
git diffbefore committing - Update README for user-facing changes
- Use MVP pattern for new UI modules (see desktop-java rules)
- Verify Java 25+ compatibility
- For full build: install Dimension-DI, Dimension-DB, and Dimension-TT first
Use Conventional Commits format: <type>: <description>
Allowed types:
build— build system or external dependency changesci— CI configuration and scriptsdocs— documentation updatesfeat— new featurefix— bug fixperf— performance improvementrefactor— code change without fix or featurerevert— revert to previous commitstyle— code style (tabs, indents, commas, etc.)test— adding or updating testsbackport— porting features from previous versionai— AI agent infrastructure and configuration
Rules:
- Type in lowercase, description in lowercase
- No period at end
- Description must be concise (under 72 chars)
- Use scope when relevant:
feat(dashboard): add realtime filter
Use Conventional Commits format: <type>: <description>
Allowed types:
build— build system or external dependency changesci— CI configuration and scriptsdocs— documentation updatesfeat— new featurefix— bug fixperf— performance improvementrefactor— code change without fix or featurerevert— revert to previous commitstyle— code style changestest— adding or updating testsbackport— porting features from previous versionai— AI agent infrastructure and configuration
Rules:
- Type in lowercase, description in lowercase
- No period at end
- Description must be concise (under 72 chars)
- Use scope when relevant:
feat(dashboard): add realtime filter
Never execute git commit, git push, or git tag.
After preparing changes:
- Show
git status - Show
git diff - Print only the recommended commit command
- Do not run it automatically
Use this exact format:
git add . && git commit -m "<type>: <description>"Example:
git add . && git commit -m "ai: add claude code configuration files"- Backend:
mvn test+mvn verifyon affected modules - Build:
mvn clean packageproduces executable jar indesktop/target/ - UI: Manual verification of changed GUI components
When compressing, preserve in priority order:
- Architecture decisions and communication patterns (NEVER summarize)
- Modified files and their key changes
- Current verification status (pass/fail)
- Open TODOs and rollback notes
- Tool outputs (can delete, keep pass/fail only)