Skip to content

Commit 14b16a1

Browse files
committed
fix: address PR review findings
- Remove dead parse_fields_md function from validate_components.py - Fix grammar: 'Features in New status is' → 'are' - Replace duplicated curl commands in feature-exploration.md with reference to fields.md component catalog and validate_components.py
1 parent 653fa6f commit 14b16a1

2 files changed

Lines changed: 6 additions & 45 deletions

File tree

skills/rhdh-jira/references/feature-exploration.md

Lines changed: 6 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ The meeting is called **Feature Exploration**. The Jira workflow status is **Ref
1111

1212
Do not confuse the two. When referring to the meeting or process, use "Feature Exploration."
1313

14-
**Features in New status is expected going into Feature Exploration.** The exploration meeting is where the team reviews candidates, identifies risks, and produces the information needed to advance features through the pipeline. Do not frame New→Refinement transition as a prerequisite for exploration — it is an *outcome*. Sizing and field population happen during and after exploration.
14+
**Features in New status are expected going into Feature Exploration.** The exploration meeting is where the team reviews candidates, identifies risks, and produces the information needed to advance features through the pipeline. Do not frame New→Refinement transition as a prerequisite for exploration — it is an *outcome*. Sizing and field population happen during and after exploration.
1515

1616
**Epic creation can happen before or during exploration.** Teams often create child Epics before the exploration meeting to help size the Feature — aggregate Epic sizes inform the Feature’s T-shirt size. Do not treat Epic creation as exclusively an output of exploration.
1717

@@ -91,30 +91,13 @@ After exploration is complete:
9191

9292
## Component Validation
9393

94-
Components are critical for freeze queries and team routing. Validate proposed components against the live Jira data.
94+
Components are critical for freeze queries and team routing. Use the component catalog and validation script from `references/fields.md`:
9595

96-
> Same validation pattern as `fields.md` Component Validation — duplicated here to avoid transitive loading.
97-
98-
```bash
99-
# List all components for a project
100-
curl -s -H "Authorization: Basic $(cat "$TOKEN_FILE")" \
101-
"https://redhat.atlassian.net/rest/api/3/project/RHIDP/components" | \
102-
python -c "import sys,json; [print(c['name']) for c in json.load(sys.stdin)]"
103-
104-
# For RHDHPLAN
105-
curl -s -H "Authorization: Basic $(cat "$TOKEN_FILE")" \
106-
"https://redhat.atlassian.net/rest/api/3/project/RHDHPLAN/components" | \
107-
python -c "import sys,json; [print(c['name']) for c in json.load(sys.stdin)]"
108-
```
109-
110-
When setting components during feature creation or refinement:
111-
112-
1. **Infer components** from the issue summary and description — match against known component names
113-
2. **Validate** the proposed components exist in the project
114-
3. **Flag mismatches** — if a component doesn't exist, suggest the closest match
96+
1. **Match** components from the Component Catalog table in `references/fields.md` — it includes descriptions and freeze exclusion flags
97+
2. **Infer** from parent — when creating Epics chained from a Feature, inherit the parent's components
98+
3. **Validate** against live Jira data: `python scripts/validate_components.py`
11599
4. **Check FF/CF status** — note if a component is excluded from freeze queries (this affects release planning)
116-
117-
The agent should suggest components based on issue details, but always confirm with the user before setting them.
100+
5. **Confirm** with the user before setting — never auto-set components
118101

119102
## Feature Demo and Test Day
120103

skills/rhdh-jira/scripts/validate_components.py

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -54,28 +54,6 @@ def fetch_components(token: str, project: str) -> list[str]:
5454
return sorted(c["name"] for c in data)
5555

5656

57-
def parse_fields_md(fields_path: Path) -> set[str]:
58-
"""Extract component names from the Component Catalog tables in fields.md."""
59-
text = fields_path.read_text(encoding="utf-8")
60-
components = set()
61-
# Match table rows: | ComponentName | Description | ... |
62-
# Skip header rows (contain "Component" or "---")
63-
for line in text.splitlines():
64-
if not line.startswith("|"):
65-
continue
66-
cells = [c.strip() for c in line.split("|")]
67-
# cells[0] is empty (before first |), cells[1] is the component name
68-
if len(cells) < 3:
69-
continue
70-
name = cells[1]
71-
if not name or name == "Component" or name.startswith("---"):
72-
continue
73-
# Skip non-component table rows (from other tables in fields.md)
74-
# Component tables come after "### Component Catalog"
75-
components.add(name)
76-
return components
77-
78-
7957
def parse_component_section(fields_path: Path) -> set[str]:
8058
"""Extract only components from the Component Catalog section."""
8159
text = fields_path.read_text(encoding="utf-8")

0 commit comments

Comments
 (0)