Class: Aidp::Watch::HierarchicalPrStrategy
- Inherits:
-
Object
- Object
- Aidp::Watch::HierarchicalPrStrategy
- Includes:
- MessageDisplay
- Defined in:
- lib/aidp/watch/hierarchical_pr_strategy.rb
Overview
Handles hierarchical PR creation strategy for parent and sub-issues. Parent issues get draft PRs targeting main. Sub-issues get PRs targeting the parent’s branch.
Constant Summary collapse
- PARENT_PR_LABEL =
Labels for hierarchical PR identification
"aidp-parent-pr"- SUB_PR_LABEL =
"aidp-sub-pr"
Constants included from MessageDisplay
MessageDisplay::COLOR_MAP, MessageDisplay::CRITICAL_TYPES
Instance Attribute Summary collapse
-
#repository_client ⇒ Object
readonly
Returns the value of attribute repository_client.
-
#state_store ⇒ Object
readonly
Returns the value of attribute state_store.
Instance Method Summary collapse
-
#branch_name_for(issue) ⇒ String
Generate branch name for hierarchical issues.
-
#initialize(repository_client:, state_store:) ⇒ HierarchicalPrStrategy
constructor
A new instance of HierarchicalPrStrategy.
-
#parent_branch_for_sub_issue(issue_number) ⇒ String?
Get the base branch for a sub-issue PR (the parent’s branch).
-
#parent_issue?(issue_number) ⇒ Boolean
Determine if an issue is a parent issue (has sub-issues).
-
#pr_description_for(issue, plan_summary:) ⇒ String
Build PR description with hierarchy context.
-
#pr_options_for_issue(issue, default_base_branch:) ⇒ Hash
Get PR creation options for an issue based on its hierarchy position.
-
#sub_issue?(issue_number) ⇒ Boolean
Determine if an issue is a sub-issue (has a parent).
Methods included from MessageDisplay
#display_message, included, #message_display_prompt, #quiet_mode?
Constructor Details
#initialize(repository_client:, state_store:) ⇒ HierarchicalPrStrategy
Returns a new instance of HierarchicalPrStrategy.
19 20 21 22 |
# File 'lib/aidp/watch/hierarchical_pr_strategy.rb', line 19 def initialize(repository_client:, state_store:) @repository_client = repository_client @state_store = state_store end |
Instance Attribute Details
#repository_client ⇒ Object (readonly)
Returns the value of attribute repository_client.
17 18 19 |
# File 'lib/aidp/watch/hierarchical_pr_strategy.rb', line 17 def repository_client @repository_client end |
#state_store ⇒ Object (readonly)
Returns the value of attribute state_store.
17 18 19 |
# File 'lib/aidp/watch/hierarchical_pr_strategy.rb', line 17 def state_store @state_store end |
Instance Method Details
#branch_name_for(issue) ⇒ String
Generate branch name for hierarchical issues
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/aidp/watch/hierarchical_pr_strategy.rb', line 62 def branch_name_for(issue) issue_number = issue[:number] slug = issue_slug(issue) if parent_issue?(issue_number) # Parent branch: aidp/parent-{number}-{slug} "aidp/parent-#{issue_number}-#{slug}" elsif sub_issue?(issue_number) parent_number = @state_store.parent_issue(issue_number) # Sub-issue branch: aidp/sub-{parent}-{number}-{slug} "aidp/sub-#{parent_number}-#{issue_number}-#{slug}" else # Regular branch: aidp/issue-{number}-{slug} "aidp/issue-#{issue_number}-#{slug}" end end |
#parent_branch_for_sub_issue(issue_number) ⇒ String?
Get the base branch for a sub-issue PR (the parent’s branch)
98 99 100 101 102 103 104 105 106 |
# File 'lib/aidp/watch/hierarchical_pr_strategy.rb', line 98 def parent_branch_for_sub_issue(issue_number) parent_number = @state_store.parent_issue(issue_number) return nil unless parent_number parent_build = @state_store.workstream_for_issue(parent_number) return nil unless parent_build parent_build[:branch] end |
#parent_issue?(issue_number) ⇒ Boolean
Determine if an issue is a parent issue (has sub-issues)
27 28 29 30 |
# File 'lib/aidp/watch/hierarchical_pr_strategy.rb', line 27 def parent_issue?(issue_number) sub_issues = @state_store.sub_issues(issue_number) sub_issues.any? end |
#pr_description_for(issue, plan_summary:) ⇒ String
Build PR description with hierarchy context
83 84 85 86 87 88 89 90 91 92 93 |
# File 'lib/aidp/watch/hierarchical_pr_strategy.rb', line 83 def pr_description_for(issue, plan_summary:) issue_number = issue[:number] if parent_issue?(issue_number) build_parent_pr_description(issue, plan_summary) elsif sub_issue?(issue_number) build_sub_issue_pr_description(issue, plan_summary) else build_regular_pr_description(issue, plan_summary) end end |
#pr_options_for_issue(issue, default_base_branch:) ⇒ Hash
Get PR creation options for an issue based on its hierarchy position
44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/aidp/watch/hierarchical_pr_strategy.rb', line 44 def (issue, default_base_branch:) issue_number = issue[:number] Aidp.log_debug("hierarchical_pr_strategy", "determining_pr_options", issue_number: issue_number, default_base: default_base_branch) if parent_issue?(issue_number) (issue, default_base_branch) elsif sub_issue?(issue_number) (issue, default_base_branch) else # Regular issue - use default behavior (issue, default_base_branch) end end |
#sub_issue?(issue_number) ⇒ Boolean
Determine if an issue is a sub-issue (has a parent)
35 36 37 38 |
# File 'lib/aidp/watch/hierarchical_pr_strategy.rb', line 35 def sub_issue?(issue_number) parent = @state_store.parent_issue(issue_number) !parent.nil? end |