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.
- checksums.yaml +7 -0
- data/CHANGELOG.md +76 -0
- data/LICENSE.txt +21 -0
- data/README.md +823 -0
- data/exe/plan-driven +7 -0
- data/lib/generators/plan_driven/install_generator.rb +37 -0
- data/lib/generators/plan_driven/templates/create_plan_driven_tables.rb.tt +73 -0
- data/lib/generators/plan_driven/templates/plan_driven.rb +39 -0
- data/lib/plan_driven/agent_prompt.rb +86 -0
- data/lib/plan_driven/cli/plan_commands.rb +158 -0
- data/lib/plan_driven/cli/setup_commands.rb +97 -0
- data/lib/plan_driven/cli/ticket_commands.rb +155 -0
- data/lib/plan_driven/cli/ui.rb +101 -0
- data/lib/plan_driven/cli.rb +150 -0
- data/lib/plan_driven/configuration.rb +114 -0
- data/lib/plan_driven/credentials.rb +90 -0
- data/lib/plan_driven/cursor_agents.rb +82 -0
- data/lib/plan_driven/cursor_llm.mjs +70 -0
- data/lib/plan_driven/cursor_llm.rb +79 -0
- data/lib/plan_driven/delivery.rb +362 -0
- data/lib/plan_driven/drafter.rb +122 -0
- data/lib/plan_driven/errors.rb +22 -0
- data/lib/plan_driven/evidence.rb +108 -0
- data/lib/plan_driven/gherkin.rb +42 -0
- data/lib/plan_driven/github.rb +118 -0
- data/lib/plan_driven/guards/migration_guard.rb +94 -0
- data/lib/plan_driven/guards/plan_guard.rb +84 -0
- data/lib/plan_driven/guards/pr_guard.rb +140 -0
- data/lib/plan_driven/guards/ticket_guard.rb +178 -0
- data/lib/plan_driven/guards/ticket_normalizer.rb +90 -0
- data/lib/plan_driven/guards.rb +57 -0
- data/lib/plan_driven/http.rb +60 -0
- data/lib/plan_driven/json_reply.rb +26 -0
- data/lib/plan_driven/llm.rb +80 -0
- data/lib/plan_driven/models/approval.rb +12 -0
- data/lib/plan_driven/models/event.rb +13 -0
- data/lib/plan_driven/models/evidence_run.rb +17 -0
- data/lib/plan_driven/models/plan.rb +98 -0
- data/lib/plan_driven/models/record.rb +8 -0
- data/lib/plan_driven/models/ticket.rb +58 -0
- data/lib/plan_driven/models.rb +8 -0
- data/lib/plan_driven/railtie.rb +9 -0
- data/lib/plan_driven/renderer/html.rb +106 -0
- data/lib/plan_driven/renderer/markdown.rb +145 -0
- data/lib/plan_driven/renderer/pdf.rb +39 -0
- data/lib/plan_driven/renderer/style.css +22 -0
- data/lib/plan_driven/renderer.rb +41 -0
- data/lib/plan_driven/repository.rb +35 -0
- data/lib/plan_driven/schema_context.rb +98 -0
- data/lib/plan_driven/template.rb +113 -0
- data/lib/plan_driven/ticket_generator.rb +98 -0
- data/lib/plan_driven/version.rb +5 -0
- data/lib/plan_driven/workflow.rb +59 -0
- data/lib/plan_driven.rb +72 -0
- metadata +146 -0
data/lib/plan_driven.rb
ADDED
|
@@ -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: []
|