diff --git a/CLAUDE.md b/CLAUDE.md index c31447d..19782c5 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -50,22 +50,28 @@ Temporary, task-scoped specs derived from the master specs. ## Current Focus -**Step3: Team Customization** (see `specs/roadmap.md`) +**v0.1.0 Public Release Preparation** (see `specs/roadmap.md`) + +Step1 through Step3 are implemented. Bundle them as the initial public version `v0.1.0` and prepare the repository for public release. ### Tasks -- [x] Config loading (`internal/config`, `.riskcheck.yaml`) -- [x] Apply config to existing signals (thresholds, weights, paths, test patterns) -- [x] S-8: high_complexity signal (`--complexity-file`) -- [x] S-9: low_coverage signal (`--coverage-file`) -- [x] CLI flags (`--config`, `--complexity-file`, `--coverage-file`) -- [x] Sample `.riskcheck.yaml.example` +- [x] Step1: Minimal (git diff scoring, S-1 to S-3, JSON/Text formatter) +- [x] Step2: Practical (git log integration, S-4 to S-7, per-file risk) +- [x] Step3: Team Customization (config, S-8/S-9, init command) +- [ ] Polish README for a public audience +- [ ] Tag `v0.1.0` +- [ ] Make the repository public ### Exit Criteria -- `.riskcheck.yaml` overrides default behavior -- External tool output can feed into scoring -- All existing tests still pass +- README is self-contained for external readers +- `v0.1.0` tag exists on `main` +- Repository is publicly visible + +### Post-v0.1.0 (v0.2.0 and beyond) + +Discuss with codex based on public feedback and the 4 known concerns (git stderr capture, external signal config, path-matching precision, cmd-package tests). Write the outcome into `specs/roadmap.md` as Step4. ## Tech Stack diff --git a/README.md b/README.md index 9e38a2e..db2050b 100644 --- a/README.md +++ b/README.md @@ -201,10 +201,9 @@ make clean # Remove bin/ See [specs/roadmap.md](specs/roadmap.md) for the full implementation plan. -- **v0.1.0** — Basic scoring from git diff (file count, insertions, deletions) -- **v0.2.0** — Hotspot detection, test change detection, per-file risk -- **v0.3.0** — Team-specific configuration, external tool integration -- **v1.0.0** — Stable API +- **v0.1.0** — Initial public release. Bundles git diff scoring, hotspot/test detection with per-file risk, and team-specific configuration with external tool integration (Step1 + Step2 + Step3). +- **v0.2.0+** — Post-public iteration based on real-world feedback (Step4: TBD). +- **v1.0.0** — Stable API, battle-tested with real projects. ## License diff --git a/specs/roadmap.md b/specs/roadmap.md index 8b7e423..e468e41 100644 --- a/specs/roadmap.md +++ b/specs/roadmap.md @@ -93,16 +93,40 @@ gantt ## Release Strategy +Step1 through Step3 were implemented prior to the first public release. They are bundled together as the initial public version `v0.1.0`. Subsequent versions track post-public iteration. + ```mermaid graph LR - S1["v0.1.0
Step1: Minimal"] -->|"git diff based scoring"| S2["v0.2.0
Step2: Practical"] - S2 -->|"git log + per-file risk"| S3["v0.3.0
Step3: Customization"] - S3 -->|"config + external tools"| V1["v1.0.0"] + V01["v0.1.0
Initial public release
(Step1+2+3)"] -->|"polish & dogfood"| V02["v0.2.0+
(Step4: TBD)"] + V02 -->|"stable API & battle-tested"| V1["v1.0.0"] ``` -| Version | Step | Key Value | -|---------|------|-----------| -| v0.1.0 | Step1 | "It runs and gives a score" | -| v0.2.0 | Step2 | "It gives useful, actionable insights" | -| v0.3.0 | Step3 | "It adapts to your team" | +| Version | Scope | Key Value | +|---------|-------|-----------| +| v0.1.0 | Step1 + Step2 + Step3 | "It runs, gives actionable insights, and adapts to your team" | +| v0.2.0+ | Step4 (TBD — see roadmap discussion) | Post-public iteration based on real-world feedback | | v1.0.0 | - | Stable API, battle-tested with real projects | + +## Ideas Under Consideration + +Design ideas that have been discussed but are not yet committed to a version. Items here may be promoted into the table above (with a target version), refined further, or dropped. + +### Custom evaluation functions / Lua-based rules + +Allow teams to define custom risk evaluation logic in Lua (e.g., `.riskcheck.lua`), going beyond the YAML-based config introduced in Step3. + +**Motivation** + +- `.riskcheck.yaml` covers thresholds, weights, paths, and patterns, but not custom logic. +- Some teams may want rules that depend on diff content, file relationships, or domain-specific conditions that cannot be expressed in YAML. +- An embedded Lua runtime (e.g., gopher-lua, Pure Go) keeps the "minimize external execution dependency" stance intact. + +**Open questions before adoption** + +1. **Necessity**: List 2-3 concrete rules that cannot be expressed in YAML config. If they can, Lua may not be needed. +2. **API surface**: What does a user-defined function receive (diff stats, file list, git log, existing signal results)? +3. **Execution model**: Are user functions full signals, or post-processing of the score? +4. **Portability**: Confirm a Pure Go Lua runtime keeps the binary dependency-free. +5. **Sandboxing**: Restrict file / network / exec access for `.riskcheck.lua` when running in CI. + +**Status**: Future consideration. Possible target: v0.3.0 or later, after the polish work in v0.2.0.