plan_driven 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +74 -1
  3. data/README.md +437 -37
  4. data/app/controllers/plan_driven/wizard/application_controller.rb +59 -0
  5. data/app/controllers/plan_driven/wizard/configuration_controller.rb +62 -0
  6. data/app/controllers/plan_driven/wizard/jobs_controller.rb +16 -0
  7. data/app/controllers/plan_driven/wizard/plans_controller.rb +113 -0
  8. data/app/views/layouts/plan_driven/wizard/application.html.erb +151 -0
  9. data/app/views/plan_driven/wizard/configuration/show.html.erb +104 -0
  10. data/app/views/plan_driven/wizard/plans/_agents.html.erb +44 -0
  11. data/app/views/plan_driven/wizard/plans/_approve.html.erb +40 -0
  12. data/app/views/plan_driven/wizard/plans/_finish.html.erb +31 -0
  13. data/app/views/plan_driven/wizard/plans/_plan.html.erb +52 -0
  14. data/app/views/plan_driven/wizard/plans/_tickets.html.erb +42 -0
  15. data/app/views/plan_driven/wizard/plans/index.html.erb +31 -0
  16. data/app/views/plan_driven/wizard/plans/new.html.erb +21 -0
  17. data/app/views/plan_driven/wizard/plans/show.html.erb +37 -0
  18. data/app/views/plan_driven/wizard/plans/statistics.html.erb +94 -0
  19. data/config/routes.rb +17 -0
  20. data/exe/plan-driven +1 -0
  21. data/lib/generators/plan_driven/install_generator.rb +7 -0
  22. data/lib/generators/plan_driven/templates/plan_driven.rb +10 -1
  23. data/lib/plan_driven/charts.rb +252 -0
  24. data/lib/plan_driven/cli/config_commands.rb +60 -0
  25. data/lib/plan_driven/cli/plan_commands.rb +6 -2
  26. data/lib/plan_driven/cli/setup_commands.rb +10 -0
  27. data/lib/plan_driven/cli/ticket_commands.rb +64 -3
  28. data/lib/plan_driven/cli/ui.rb +41 -2
  29. data/lib/plan_driven/cli.rb +21 -4
  30. data/lib/plan_driven/configuration.rb +31 -3
  31. data/lib/plan_driven/connections.rb +69 -0
  32. data/lib/plan_driven/cursor_agents.rb +10 -2
  33. data/lib/plan_driven/delivery.rb +23 -5
  34. data/lib/plan_driven/evidence.rb +11 -4
  35. data/lib/plan_driven/github.rb +4 -0
  36. data/lib/plan_driven/guards/migration_guard.rb +86 -9
  37. data/lib/plan_driven/guards/ticket_guard.rb +1 -2
  38. data/lib/plan_driven/interview.rb +161 -0
  39. data/lib/plan_driven/local_agents.rb +254 -0
  40. data/lib/plan_driven/renderer/html.rb +34 -5
  41. data/lib/plan_driven/renderer/markdown.rb +67 -3
  42. data/lib/plan_driven/renderer/style.css +21 -0
  43. data/lib/plan_driven/renderer.rb +11 -4
  44. data/lib/plan_driven/statistics.rb +195 -0
  45. data/lib/plan_driven/template.rb +7 -2
  46. data/lib/plan_driven/usage.rb +114 -0
  47. data/lib/plan_driven/version.rb +1 -1
  48. data/lib/plan_driven/wizard/engine.rb +19 -0
  49. data/lib/plan_driven/wizard.rb +245 -0
  50. data/lib/plan_driven.rb +8 -1
  51. metadata +32 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 49e95b18ac3191d34d9d526ba2fea2428ea662fab966da32c15239ba39573e5d
4
- data.tar.gz: '099d0a1fae1854e186a894e95354118b086722ecb6b13c72e90e28dfa2a2bc13'
3
+ metadata.gz: 7ffc191c08d6787d03cfccdcb13fb559e2fb48f5d042fbe5597335544f36339f
4
+ data.tar.gz: f32edb2f3c5cd3fd1eed677bc834d6a60527c59d15d49a89065083dc07ee18b8
5
5
  SHA512:
6
- metadata.gz: 2bd6c949e802f2f2e7ccc1b98052ebc3c744b5e4bb381666cddbe79f7849e7ff1cf4205bde8a8f00b560bbce70f85ebac584c2ddd76f12156a8adf3f06843520
7
- data.tar.gz: c6605b055a96b9f2779038c2915ae2bf2585dfa28b66cd289a6b9a2dcbf295ed1ebda16d2df4476ea0d71b6dfd26ea05e9da39b596c905bbe18aeda6c6aa98a8
6
+ metadata.gz: 8a9a83308065071c48d13c575f06966a99fd517a3f6e2fbcacb5d804f937e433395305aef7578332fc171929c8e234923f5abc537ba21e5c6100cbb9e7ee7279
7
+ data.tar.gz: 79a273ff6f7d84e371445047646f9ea799a374ca0f2a838863b76eb3e9cf3a3a3ded7054235e68c3d500ef02f31e744bf2aa9e255364d071afc0112ed1c9af20
data/CHANGELOG.md CHANGED
@@ -6,6 +6,78 @@ All notable changes to this project are documented here. The format follows
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ### Added
10
+
11
+ - Statistics, computed from the audit trail: how long planning, tickets, development and proof
12
+ took, each ticket's time split into queued, agent coding, waiting for review, agent fixing
13
+ feedback and approved but not merged, the agents' share of the work, first-time approvals,
14
+ and acceptance criteria merged and proven over time. `plan-driven stats PLAN` prints them,
15
+ the wizard has a Statistics page with charts, and the delivery report has a Statistics
16
+ section.
17
+ - Charts drawn in Ruby as SVG, with no JavaScript: a burn-up of criteria merged and proven,
18
+ a timeline of each ticket, the split between agents and people, and a bar of every
19
+ criterion's result. The delivery report writes them next to the Markdown, so GitHub shows
20
+ them, and inlines them in the HTML and the PDF.
21
+
22
+ ### Changed
23
+
24
+ - The delivery report has colour: every acceptance criterion's result is a green, red, amber
25
+ or grey pill with a matching edge on its row, failed rows are tinted red, merged tickets are
26
+ marked green, and the Markdown shows ✅, ❌, ⏸️ or ⚠️ before each result.
27
+
28
+ ## [0.2.0] - 2026-09-30
29
+
30
+ ### Added
31
+
32
+ - The browser wizard: a Rails engine the install generator mounts at `/plan_driven`, in
33
+ development only. It walks a plan through the interview, plan, approval, tickets, agents
34
+ and evidence with Back and Next, and every button runs the matching `plan-driven` command in
35
+ the background, with the command and its live output shown beside the form. Only a fixed
36
+ list of commands can run, for local requests only (`config.wizard_enabled`).
37
+ - The wizard's Configuration page: Connections shows which services the app uses and whether
38
+ each has a key, and connects one from a pasted key; Interview questions changes, adds and
39
+ removes the questions `new` asks.
40
+ - `plan-driven connect SERVICE` (`cursor`, `openai`, `anthropic`, `github`) checks a key with
41
+ the service before storing it, and stores nothing when the service refuses it. The key is
42
+ read from stdin, never from the command line.
43
+ - `plan-driven questions` and `plan-driven question KEY` (`--title`, `--ask`, `--group`,
44
+ `--required`, `--optional`, `--remove`). The changes live in the app, in
45
+ `config/plan_driven/interview.yml`, so the team shares one interview; an added question is
46
+ a section of the plan like the others.
47
+ - `plan-driven edit PLAN SECTION --from FILE` replaces a section with a file's contents.
48
+ - Tokens and cost. Every model call (drafting, redrafts, tickets) and every agent run is
49
+ recorded with its tokens and duration. `plan-driven usage PLAN` prints them, and the delivery
50
+ report has a Tokens and cost table. `config.token_prices` turns tokens into dollars.
51
+ - Local coding agents: `config.agent_provider = :local` runs `config.agent_command` (Claude
52
+ Code, Codex, the Cursor CLI...) in its own git worktree per ticket, then commits, pushes and
53
+ opens the pull request. Feedback runs in the same worktree; the worktree is removed after
54
+ the merge. `{prompt_file}` in the command passes the prompt as a file instead of stdin.
55
+ - `GitHub#create_pull`, and Cursor agent runs carry `duration_ms`.
56
+
57
+ ### Changed
58
+
59
+ - MigrationGuard judges each removal or rename on its own sentence, or migration code line,
60
+ and the step it sits under. Before, the word "expand" or "contract" anywhere in Database
61
+ changes excused every destructive change in the section. Headings, negated sentences,
62
+ rollback notes and tables the plan creates are no longer read as removals.
63
+ - Terminal tables fit the terminal width, cutting the last column short instead of wrapping.
64
+ - When answers are piped into `plan-driven new`, the interview prints each answer after its
65
+ question, so the transcript reads like the terminal session.
66
+
67
+ ### Fixed
68
+
69
+ - Optional questions no longer read "(optional) (optional)" in the New plan form: the
70
+ interview adds "(optional)" itself, in the terminal and in the wizard alike.
71
+ - `plan-driven version` exits with status 0 instead of a TypeError after printing the version.
72
+ - `evidence` always runs Cucumber with `RAILS_ENV=test`. Started from a development server,
73
+ as the wizard does, it inherited `RAILS_ENV=development` and ran the scenarios against the
74
+ development database. The wizard also no longer passes the server's `RAILS_ENV` to commands.
75
+ - `remove_check_constraint` and other `remove_*` methods that drop no data are no longer
76
+ destructive changes; `remove_column(s)`, `remove_reference`, `remove_timestamps`,
77
+ `drop_table`, `rename_*` and `change_column` still are.
78
+ - Ticket coverage asks for tickets only for tables the plan creates or changes. Tables the
79
+ plan names in prose, or that already exist in the schema, no longer need their own ticket.
80
+
9
81
  ## [0.1.0] - 2026-09-30
10
82
 
11
83
  First public release.
@@ -72,5 +144,6 @@ First public release.
72
144
  - `plan-driven doctor` checks keys, the repository, the PDF browser, the Cursor API, the agent
73
145
  model, and Node and the SDK for `:cursor`.
74
146
 
75
- [Unreleased]: https://github.com/blaz1988/plan-driven/compare/v0.1.0...HEAD
147
+ [Unreleased]: https://github.com/blaz1988/plan-driven/compare/v0.2.0...HEAD
148
+ [0.2.0]: https://github.com/blaz1988/plan-driven/compare/v0.1.0...v0.2.0
76
149
  [0.1.0]: https://github.com/blaz1988/plan-driven/releases/tag/v0.1.0