plan_driven 0.1.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 (55) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +76 -0
  3. data/LICENSE.txt +21 -0
  4. data/README.md +823 -0
  5. data/exe/plan-driven +7 -0
  6. data/lib/generators/plan_driven/install_generator.rb +37 -0
  7. data/lib/generators/plan_driven/templates/create_plan_driven_tables.rb.tt +73 -0
  8. data/lib/generators/plan_driven/templates/plan_driven.rb +39 -0
  9. data/lib/plan_driven/agent_prompt.rb +86 -0
  10. data/lib/plan_driven/cli/plan_commands.rb +158 -0
  11. data/lib/plan_driven/cli/setup_commands.rb +97 -0
  12. data/lib/plan_driven/cli/ticket_commands.rb +155 -0
  13. data/lib/plan_driven/cli/ui.rb +101 -0
  14. data/lib/plan_driven/cli.rb +150 -0
  15. data/lib/plan_driven/configuration.rb +114 -0
  16. data/lib/plan_driven/credentials.rb +90 -0
  17. data/lib/plan_driven/cursor_agents.rb +82 -0
  18. data/lib/plan_driven/cursor_llm.mjs +70 -0
  19. data/lib/plan_driven/cursor_llm.rb +79 -0
  20. data/lib/plan_driven/delivery.rb +362 -0
  21. data/lib/plan_driven/drafter.rb +122 -0
  22. data/lib/plan_driven/errors.rb +22 -0
  23. data/lib/plan_driven/evidence.rb +108 -0
  24. data/lib/plan_driven/gherkin.rb +42 -0
  25. data/lib/plan_driven/github.rb +118 -0
  26. data/lib/plan_driven/guards/migration_guard.rb +94 -0
  27. data/lib/plan_driven/guards/plan_guard.rb +84 -0
  28. data/lib/plan_driven/guards/pr_guard.rb +140 -0
  29. data/lib/plan_driven/guards/ticket_guard.rb +178 -0
  30. data/lib/plan_driven/guards/ticket_normalizer.rb +90 -0
  31. data/lib/plan_driven/guards.rb +57 -0
  32. data/lib/plan_driven/http.rb +60 -0
  33. data/lib/plan_driven/json_reply.rb +26 -0
  34. data/lib/plan_driven/llm.rb +80 -0
  35. data/lib/plan_driven/models/approval.rb +12 -0
  36. data/lib/plan_driven/models/event.rb +13 -0
  37. data/lib/plan_driven/models/evidence_run.rb +17 -0
  38. data/lib/plan_driven/models/plan.rb +98 -0
  39. data/lib/plan_driven/models/record.rb +8 -0
  40. data/lib/plan_driven/models/ticket.rb +58 -0
  41. data/lib/plan_driven/models.rb +8 -0
  42. data/lib/plan_driven/railtie.rb +9 -0
  43. data/lib/plan_driven/renderer/html.rb +106 -0
  44. data/lib/plan_driven/renderer/markdown.rb +145 -0
  45. data/lib/plan_driven/renderer/pdf.rb +39 -0
  46. data/lib/plan_driven/renderer/style.css +22 -0
  47. data/lib/plan_driven/renderer.rb +41 -0
  48. data/lib/plan_driven/repository.rb +35 -0
  49. data/lib/plan_driven/schema_context.rb +98 -0
  50. data/lib/plan_driven/template.rb +113 -0
  51. data/lib/plan_driven/ticket_generator.rb +98 -0
  52. data/lib/plan_driven/version.rb +5 -0
  53. data/lib/plan_driven/workflow.rb +59 -0
  54. data/lib/plan_driven.rb +72 -0
  55. metadata +146 -0
@@ -0,0 +1,72 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "active_record"
4
+ require "active_support/core_ext/object/blank"
5
+ require "active_support/core_ext/string/inflections"
6
+ require "active_support/core_ext/string/filters"
7
+ require "pathname"
8
+ require "set"
9
+
10
+ require_relative "plan_driven/version"
11
+ require_relative "plan_driven/errors"
12
+ require_relative "plan_driven/credentials"
13
+ require_relative "plan_driven/configuration"
14
+ require_relative "plan_driven/template"
15
+ require_relative "plan_driven/schema_context"
16
+ require_relative "plan_driven/workflow"
17
+ require_relative "plan_driven/models"
18
+ require_relative "plan_driven/json_reply"
19
+ require_relative "plan_driven/llm"
20
+ require_relative "plan_driven/cursor_llm"
21
+ require_relative "plan_driven/guards"
22
+ require_relative "plan_driven/gherkin"
23
+ require_relative "plan_driven/drafter"
24
+ require_relative "plan_driven/ticket_generator"
25
+ require_relative "plan_driven/agent_prompt"
26
+ require_relative "plan_driven/http"
27
+ require_relative "plan_driven/github"
28
+ require_relative "plan_driven/cursor_agents"
29
+ require_relative "plan_driven/repository"
30
+ require_relative "plan_driven/renderer"
31
+ require_relative "plan_driven/evidence"
32
+ require_relative "plan_driven/delivery"
33
+ require_relative "plan_driven/railtie" if defined?(Rails::Railtie)
34
+
35
+ module PlanDriven
36
+ class << self
37
+ def configuration
38
+ @configuration ||= Configuration.new
39
+ end
40
+
41
+ def configure
42
+ yield configuration
43
+ end
44
+
45
+ def reset!
46
+ @configuration = nil
47
+ end
48
+
49
+ # Names like "Blažević" arrive tagged with the locale's encoding, which under LANG=C is
50
+ # binary, and binary strings can't be joined with the UTF-8 text of a plan.
51
+ def actor
52
+ name = ENV["PLAN_DRIVEN_ACTOR"].presence || git_identity || ENV.fetch("USER", "unknown")
53
+ utf8(name)
54
+ end
55
+
56
+ def utf8(text)
57
+ text.to_s.dup.force_encoding(Encoding::UTF_8).scrub
58
+ end
59
+
60
+ private
61
+
62
+ def git_identity
63
+ name = utf8(`git config user.name 2>/dev/null`).strip
64
+ email = utf8(`git config user.email 2>/dev/null`).strip
65
+ return if name.empty? && email.empty?
66
+
67
+ email.empty? ? name : "#{name} <#{email}>".strip
68
+ rescue StandardError
69
+ nil
70
+ end
71
+ end
72
+ end
metadata ADDED
@@ -0,0 +1,146 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: plan_driven
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Ivan Blažević
8
+ bindir: exe
9
+ cert_chain: []
10
+ date: 2026-09-30 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: activerecord
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '7.0'
19
+ - - "<"
20
+ - !ruby/object:Gem::Version
21
+ version: '9'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ version: '7.0'
29
+ - - "<"
30
+ - !ruby/object:Gem::Version
31
+ version: '9'
32
+ - !ruby/object:Gem::Dependency
33
+ name: railties
34
+ requirement: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - ">="
37
+ - !ruby/object:Gem::Version
38
+ version: '7.0'
39
+ - - "<"
40
+ - !ruby/object:Gem::Version
41
+ version: '9'
42
+ type: :runtime
43
+ prerelease: false
44
+ version_requirements: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: '7.0'
49
+ - - "<"
50
+ - !ruby/object:Gem::Version
51
+ version: '9'
52
+ description: |
53
+ plan_driven runs a Rails team's delivery process from the command line. A terminal interview
54
+ turns an idea into an implementation plan grounded in your real schema; the plan is checked
55
+ by guards written in Ruby, rendered to PDF and approved. Approved plans become tickets, each
56
+ ticket is handed to a Cursor cloud agent that opens a pull request, and only pull requests
57
+ you approve are merged. Acceptance criteria map to Cucumber scenarios, and every phase leaves
58
+ documentation behind: the plan, the tickets, the pull requests and a delivery report.
59
+ email:
60
+ - ivan.blazevic@rubycode.co
61
+ executables:
62
+ - plan-driven
63
+ extensions: []
64
+ extra_rdoc_files: []
65
+ files:
66
+ - CHANGELOG.md
67
+ - LICENSE.txt
68
+ - README.md
69
+ - exe/plan-driven
70
+ - lib/generators/plan_driven/install_generator.rb
71
+ - lib/generators/plan_driven/templates/create_plan_driven_tables.rb.tt
72
+ - lib/generators/plan_driven/templates/plan_driven.rb
73
+ - lib/plan_driven.rb
74
+ - lib/plan_driven/agent_prompt.rb
75
+ - lib/plan_driven/cli.rb
76
+ - lib/plan_driven/cli/plan_commands.rb
77
+ - lib/plan_driven/cli/setup_commands.rb
78
+ - lib/plan_driven/cli/ticket_commands.rb
79
+ - lib/plan_driven/cli/ui.rb
80
+ - lib/plan_driven/configuration.rb
81
+ - lib/plan_driven/credentials.rb
82
+ - lib/plan_driven/cursor_agents.rb
83
+ - lib/plan_driven/cursor_llm.mjs
84
+ - lib/plan_driven/cursor_llm.rb
85
+ - lib/plan_driven/delivery.rb
86
+ - lib/plan_driven/drafter.rb
87
+ - lib/plan_driven/errors.rb
88
+ - lib/plan_driven/evidence.rb
89
+ - lib/plan_driven/gherkin.rb
90
+ - lib/plan_driven/github.rb
91
+ - lib/plan_driven/guards.rb
92
+ - lib/plan_driven/guards/migration_guard.rb
93
+ - lib/plan_driven/guards/plan_guard.rb
94
+ - lib/plan_driven/guards/pr_guard.rb
95
+ - lib/plan_driven/guards/ticket_guard.rb
96
+ - lib/plan_driven/guards/ticket_normalizer.rb
97
+ - lib/plan_driven/http.rb
98
+ - lib/plan_driven/json_reply.rb
99
+ - lib/plan_driven/llm.rb
100
+ - lib/plan_driven/models.rb
101
+ - lib/plan_driven/models/approval.rb
102
+ - lib/plan_driven/models/event.rb
103
+ - lib/plan_driven/models/evidence_run.rb
104
+ - lib/plan_driven/models/plan.rb
105
+ - lib/plan_driven/models/record.rb
106
+ - lib/plan_driven/models/ticket.rb
107
+ - lib/plan_driven/railtie.rb
108
+ - lib/plan_driven/renderer.rb
109
+ - lib/plan_driven/renderer/html.rb
110
+ - lib/plan_driven/renderer/markdown.rb
111
+ - lib/plan_driven/renderer/pdf.rb
112
+ - lib/plan_driven/renderer/style.css
113
+ - lib/plan_driven/repository.rb
114
+ - lib/plan_driven/schema_context.rb
115
+ - lib/plan_driven/template.rb
116
+ - lib/plan_driven/ticket_generator.rb
117
+ - lib/plan_driven/version.rb
118
+ - lib/plan_driven/workflow.rb
119
+ homepage: https://github.com/blaz1988/plan-driven
120
+ licenses:
121
+ - MIT
122
+ metadata:
123
+ source_code_uri: https://github.com/blaz1988/plan-driven
124
+ documentation_uri: https://github.com/blaz1988/plan-driven#readme
125
+ changelog_uri: https://github.com/blaz1988/plan-driven/blob/main/CHANGELOG.md
126
+ bug_tracker_uri: https://github.com/blaz1988/plan-driven/issues
127
+ rubygems_mfa_required: 'true'
128
+ rdoc_options: []
129
+ require_paths:
130
+ - lib
131
+ required_ruby_version: !ruby/object:Gem::Requirement
132
+ requirements:
133
+ - - ">="
134
+ - !ruby/object:Gem::Version
135
+ version: 3.1.0
136
+ required_rubygems_version: !ruby/object:Gem::Requirement
137
+ requirements:
138
+ - - ">="
139
+ - !ruby/object:Gem::Version
140
+ version: '0'
141
+ requirements: []
142
+ rubygems_version: 3.6.4
143
+ specification_version: 4
144
+ summary: From implementation plan to merged, tested pull requests, driven from the
145
+ terminal.
146
+ test_files: []