23 Commits
Author SHA1 Message Date
james.maes 8ac4fdf2e1 feat(core): add doctor command and dependency pre-flight checks
- Add `qctl doctor` command to check Java, Maven, Git, Docker
- Add pre-flight dependency checks before running post-gen hooks
- Cross-platform support (Windows/Linux/macOS)
2026-01-04 19:13:29 -06:00
james.maes 386e6caecf fix: read version from properties file for native image compatibility 2026-01-04 18:09:38 -06:00
james.maes 73c271c201 feat(qqq): add structured error handling with suggestions
Add TemplateRenderException constructors for undefined variable errors
with suggestions. Refactor InitCommand/ListCommand to return Integer
exit codes. Fix TransformExecutor and TemplateManifest for schema v2.
2026-01-04 12:12:08 -06:00
james.maes bc93243f6b fix(template): use __VAR__ syntax in paths for CI compatibility
Rename fixture directories from $packagePath to __packagePath__ to
prevent shell/Maven interpretation. TemplateEngine now converts
__VARNAME__ to $VARNAME before Velocity rendering.
2026-01-04 12:07:10 -06:00
james.maes abc118dbe5 feat(qqq): add --merge mode for selective regeneration
Implements Story #26 with include/exclude patterns, interactive
conflict resolution, and file backups.

Closes #26
2026-01-03 21:21:40 -06:00
james.maes 30e124dde5 feat(qqq): add structured error handling with suggestions
- Add SuggestionEngine using Levenshtein distance for fuzzy matching
- Add TemplateError with categories mapped to exit codes
- Add ErrorFormatter for consistent ANSI-colored output
- Integrate did-you-mean suggestions in template commands
- Add --verbose flag for stack trace output
2026-01-03 21:10:32 -06:00
james.maes a2e85f7f93 feat(qqq): add prompt validation with retry loop (#24)
- Add PromptValidation record for validation rules (pattern, length, range, enum)
- Add PromptValidator with support for required, pattern, length, range, and enum validation
- Update PromptRunner to validate and re-prompt on failure
- Validate --var CLI overrides, fallback to interactive prompt if invalid
- Add ConsoleUI methods for validation feedback (error, success, warning)
- Add 20 unit tests for PromptValidator

Closes #24
2026-01-03 21:00:41 -06:00
james.maes e14565a277 feat(qqq): add TemplateRegistry abstraction for Voyage mock API
Story #23 - prepares for Voyage API integration:
- TemplateRegistry interface for template listing/download
- GitHubTemplateRegistry wraps existing TemplatesHub
- MockTemplateRegistry with embedded template data
- ListCommand/InitCommand refactored to use registry
- Added --refresh flag to bypass cache
2026-01-03 20:52:43 -06:00
james.maes 5a967f072f feat(qqq): implement Velocity template engine with computed vars and transforms
Stories #18-21 complete:
- Apache Velocity replaces Handlebars for QQQ consistency
- StringTool with $str.camel(), pascal(), replace() helpers
- Computed variables ($str.replace($packageName, '.', '/'))
- Transform executor for rename/delete operations
- Manifest schema v2 with minimumQctlVersion check
2026-01-03 20:45:06 -06:00
james.maes a71af51f47 feat: add native-image reflection for Velocity and verbatim file handling 2026-01-03 20:42:36 -06:00
james.maes 5a42f7b41e build: implement CI-friendly versioning with revision property 2025-12-31 06:42:14 -06:00
james.maes 418f09fea1 refactor(qqq): make init command interactive with ConsoleUI
- Add ConsoleUI for centralized console I/O
- InitCommand now prompts for template and directory
- Template defaults to new-qqq-application
- PromptRunner uses ConsoleUI for consistency
2025-12-30 20:50:42 -06:00
james.maes 759f40d61e fix(cli): add version provider to qqq subcommand 2025-12-30 20:27:06 -06:00
james.maes 618f09e5f0 fix: remove unused import, add README 2025-12-30 19:47:22 -06:00
james.maes a25309b75d feat(qqq): add init and list commands for template scaffolding
- Add qqq init command with hub-based template discovery
- Add qqq list command to display available templates
- Add Handlebars templating with native image support
- Add GitHub Actions workflow for multi-platform builds
- Add ExitCodes constants, cleanup duplicate Javadoc
- Remove native profile from qctl-core (only qctl-cli builds)
2025-12-30 19:43:32 -06:00
james.maes 12e4a0355b Build: add initial native build support and configuration setup
- Introduced `native-maven-plugin` configuration in `qctl-cli` for native image generation.
- Added reflection configuration files for native image requirements.
- Implemented GraalVM validation, build scripts, and environment checks in `scripts/`.
- Added tests for `TokenStore`, CLI authentication commands, and publish functionality.
- Registered SPI plugins for modules (`qbit`, `qqq`, `qrun`, `qstudio`).
- Documented native build process in `NATIVE-BUILD.md`.
2025-08-09 17:53:14 -05:00
james.maes 2afa12cb6c Style: update Checkstyle scan scope and normalize formatting; add constants and Javadoc in tests 2025-08-09 16:22:17 -05:00
james.maes ba1d5b19ea Style: Removed files from target directories from git 2025-08-09 15:59:42 -05:00
james.maes a7c0f96905 Fix: normalize header spacing per Spotless in qctl-shared 2025-08-09 08:28:36 -05:00
james.maes bf0f873415 Style: add/normalize headers and Kingsrook formatting in shared module
- Ensure blank line separation before package declarations
- Normalize brace placement and 3-space indentation
- Add package-level Javadoc where appropriate
2025-08-09 07:57:57 -05:00
james.maes fe177d13bf Style: adopt Kingsrook IntelliJ style in build tooling
- Treat Kingsrook as the project standard: Checkstyle uses codestyle/checkstyle.config.xml
- Spotless enforces license headers for Java, XML, YAML/Properties; removed Google formatter
- Added license templates for XML and hash comment styles
- Verified mvn verify passes across modules
2025-08-09 07:23:44 -05:00
james.maes 5aad4cc634 Build: enforce Checkstyle + Spotless across modules
- Add maven-checkstyle-plugin (validate phase) using codestyle/checkstyle.config.xml
- Add Spotless license header + Google Java Format; enforce at verify
- Point Header module to codestyle/license.txt; fix paths
- Apply formatting and headers across sources
2025-08-09 07:19:32 -05:00
james.maes 14e60277ef Scaffold qctl multi-module (Java 21, Maven) and V1 foundations:
- Reactor modules: qctl-shared, qctl-core, qctl-qqq, qctl-qbit, qctl-qrun, qctl-qstudio, qctl-integration-tests
- Core: Picocli CLI with SPI subcommand loading; config loader + schema validation; system paths; logging; Output (text/json)
- HTTP: ApiClient with retries/backoff and RFC7807→exit code mapping
- Auth: TokenStore (file fallback); auth login/logout/whoami stubs
- Cache: ls, prune --max-size, clean --all
- qrun: status command calling mock API (uses X-API-Key)
- qbit: Lockfile DTO + atomic YAML read/write
- Tests: core (config, sys paths), qbit (lockfile)
- Design & resume files: CODEGEN-LOCKS-V1.md, PROMPT-RESUME.md, cheaklist.md
2025-08-09 06:16:34 -05:00