-
Notifications
You must be signed in to change notification settings - Fork 0
feat(workflows): add issue lifecycle with update mechanism #98
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
489a70c
7601350
b498d0c
d7a7ced
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||||
|---|---|---|---|---|---|---|---|---|
|
|
@@ -77,6 +77,41 @@ Examples: `scatter-basic`, `scatter-color-mapped`, `bar-grouped-horizontal`, `he | |||||||
| - **`tests/unit/`**: Unit tests mirroring source structure | ||||||||
| - **`docs/`**: Architecture and workflow documentation | ||||||||
|
|
||||||||
| ## GitHub Issue Labels | ||||||||
|
|
||||||||
| ### Workflow Status Labels | ||||||||
|
|
||||||||
| - **`plot-request`** - Main plot request issue | ||||||||
| - **`plot-request:impl`** - Library implementation sub-issue (child of main) | ||||||||
| - **`generating`** - Code is being generated | ||||||||
| - **`testing`** - Tests are running | ||||||||
| - **`reviewing`** - Quality review in progress | ||||||||
| - **`merged`** - Successfully merged to main | ||||||||
| - **`not-feasible`** - 3x failed, not implementable in this library | ||||||||
| - **`completed`** - All library implementations complete | ||||||||
| - **`update`** - Update request for existing spec | ||||||||
| - **`test`** - Test issue, not a real plot request | ||||||||
|
|
||||||||
| ### Updating Existing Plots | ||||||||
|
|
||||||||
| To update an existing plot: | ||||||||
| 1. Create issue with title: `[update] {spec-id}` (all libraries) or `[update:library] {spec-id}` (single library) | ||||||||
| 2. Add label: `plot-request` | ||||||||
| 3. Issue body can contain spec changes (Claude updates spec first) | ||||||||
| 4. Maintainer adds `approved` label | ||||||||
| 5. Workflow regenerates specified implementations | ||||||||
|
|
||||||||
| **Issue Lifecycle:** | ||||||||
| ``` | ||||||||
| [open] plot-request → approved → in-progress → completed [closed] | ||||||||
| ``` | ||||||||
|
|
||||||||
| **Sub-Issue Lifecycle:** | ||||||||
| ``` | ||||||||
| [open] generating → testing → reviewing → merged [closed] | ||||||||
| → not-feasible [closed] | ||||||||
|
||||||||
| → not-feasible [closed] | |
| → ai-rejected (retry) → ... | |
| → not-feasible [closed] (after 3 attempts) |
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
|
|
@@ -21,6 +21,8 @@ jobs: | |||||
| outputs: | ||||||
| should_run: ${{ steps.check.outputs.should_run }} | ||||||
| spec_id: ${{ steps.extract_spec.outputs.spec_id }} | ||||||
| is_update: ${{ steps.extract_spec.outputs.is_update }} | ||||||
| target_library: ${{ steps.extract_spec.outputs.target_library }} | ||||||
|
|
||||||
| steps: | ||||||
| - name: Check conditions | ||||||
|
|
@@ -63,6 +65,29 @@ jobs: | |||||
| ISSUE_BODY: ${{ github.event.issue.body }} | ||||||
| ISSUE_TITLE: ${{ github.event.issue.title }} | ||||||
| run: | | ||||||
| # Check for [update] or [update:library] prefix in title | ||||||
| IS_UPDATE="false" | ||||||
| TARGET_LIBRARY="" | ||||||
|
|
||||||
| if echo "$ISSUE_TITLE" | grep -qiP '^\[update(:[a-z]+)?\]'; then | ||||||
|
||||||
| if echo "$ISSUE_TITLE" | grep -qiP '^\[update(:[a-z]+)?\]'; then | |
| if echo "$ISSUE_TITLE" | grep -qiP '^\[update(:[a-zA-Z]+)?\]'; then |
Copilot
AI
Dec 1, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The regex pattern allows only lowercase letters [a-z]+ but library names in the codebase use lowercase only. However, the issue template dropdown includes library names like "matplotlib", "seaborn", etc., which users could manually type with different cases. While there's a tr '[:upper:]' '[:lower:]' to handle this, the regex should be more permissive to match the input before normalization.
Consider changing the pattern to: '^\[update:\K[a-zA-Z]+(?=\])' to accept any case, since you're already normalizing with tr '[:upper:]' '[:lower:]'.
| TARGET_LIBRARY=$(echo "$ISSUE_TITLE" | grep -oiP '^\[update:\K[a-z]+(?=\])' | tr '[:upper:]' '[:lower:]' || echo "") | |
| TARGET_LIBRARY=$(echo "$ISSUE_TITLE" | grep -oiP '^\[update:\K[a-zA-Z]+(?=\])' | tr '[:upper:]' '[:lower:]' || echo "") |
| Original file line number | Diff line number | Diff line change | ||||||
|---|---|---|---|---|---|---|---|---|
|
|
@@ -339,13 +339,15 @@ bash .github/scripts/setup-labels.sh | |||||||
|
|
||||||||
| ### Workflow Status Labels | ||||||||
|
|
||||||||
| - **`sub-issue`** - Library-specific sub-issue (child of main plot-request) | ||||||||
| - **`plot-request:impl`** - Library implementation sub-issue (child of main plot-request) | ||||||||
| - **`generating`** - Code is being generated | ||||||||
| - **`testing`** - Tests are running | ||||||||
| - **`reviewing`** - Quality review in progress | ||||||||
| - **`merged`** - Successfully merged to main | ||||||||
| - **`not-feasible`** - 3x failed, not implementable in this library | ||||||||
| - **`completed`** - All library implementations complete | ||||||||
| - **`update`** - Update request for existing spec (use with plot-request) | ||||||||
| - **`test`** - Test issue, not a real plot request | ||||||||
|
|
||||||||
| ### Approval Labels (Human vs AI distinction) | ||||||||
|
|
||||||||
|
|
@@ -399,6 +401,31 @@ bash .github/scripts/setup-labels.sh | |||||||
| - Partial success (5/8 can merge while 3/8 retry) | ||||||||
| - Per-library dependency isolation | ||||||||
|
|
||||||||
| ### Updating Existing Plots | ||||||||
|
|
||||||||
| To update an existing plot implementation: | ||||||||
|
|
||||||||
| 1. Create issue with title: `[update] {spec-id}` (all libraries) or `[update:{library}] {spec-id}` (single library) | ||||||||
| - Example: `[update] scatter-basic` - regenerate all 8 libraries | ||||||||
| - Example: `[update:seaborn] scatter-basic` - regenerate only seaborn | ||||||||
| 2. Add label: `plot-request` | ||||||||
| 3. Issue body can contain spec changes (Claude will update `specs/{spec-id}.md` first) | ||||||||
| 4. Maintainer adds `approved` label | ||||||||
| 5. Workflow regenerates specified implementations | ||||||||
|
|
||||||||
| **Issue Lifecycle:** | ||||||||
| ``` | ||||||||
| [open] plot-request → approved → in-progress → completed [closed] | ||||||||
| ``` | ||||||||
|
|
||||||||
| **Sub-Issue Lifecycle:** | ||||||||
| ``` | ||||||||
| [open] generating → testing → reviewing → merged [closed] | ||||||||
| → not-feasible [closed] | ||||||||
|
||||||||
| → not-feasible [closed] | |
| → ai-rejected (retry) → ... | |
| → not-feasible [closed] (after 3 attempts) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The description states "will be appended to title" but GitHub issue templates don't automatically append form field values to the title. Users must manually type the spec ID into the title after the
[update]prefix.Suggestion: Update the description to be clearer: