Skip to content

Commit 88eef8a

Browse files
authored
Merge pull request #443 from TalonT-Org/main
Update stable 0.5.2
2 parents 2ae4bc8 + ee1d4f9 commit 88eef8a

408 files changed

Lines changed: 47228 additions & 10752 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.autoskillit/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
temp/

.autoskillit/config.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,8 @@ safety:
2020
# marker: "Dry-walkthrough verified = TRUE"
2121
# skill_names: ["/autoskillit:implement-worktree", "/autoskillit:implement-worktree-no-merge"]
2222

23+
branching:
24+
default_base_branch: "integration"
25+
2326
github:
2427
default_repo: "TalonT-Org/AutoSkillit"

.claude/skills/render-recipe/SKILL.md

Lines changed: 61 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,10 @@ Produce a compact, structured overview of an AutoSkillit recipe. Reads the recip
1818
- Modify any source code or recipe files
1919
- Invent steps, ingredients, or routing not in the YAML
2020
- Add decorative flair, emoji, or unnecessary commentary
21-
- Create files outside `temp/render-recipe/`
21+
- Create files outside `temp/render-recipe/` and `recipes/diagrams/`
22+
- Use Unicode characters, emoji, or non-ASCII symbols. ASCII only — use `*` for pass, `x` for fail, `?` for confirm, `|` for spine, `+` for joins. No box-drawing characters, no arrows like `` or ``, no check marks, no crosses. Write `->` and `(up)` instead.
23+
- Include HTML comments, hash markers, format version markers, or any metadata in the output. No `<!-- ... -->` lines.
24+
- Include "Agent-managed" lines listing internal context variables. The user doesn't need to see plumbing state.
2225

2326
**ALWAYS:**
2427
- Read the recipe YAML carefully and render exactly what exists
@@ -29,67 +32,77 @@ Produce a compact, structured overview of an AutoSkillit recipe. Reads the recip
2932

3033
## Rendering Specification
3134

32-
The output has exactly three sections. Follow this structure precisely.
35+
The output has exactly two sections. Follow this structure precisely.
36+
37+
**Note:** The inputs table is NOT part of the diagram output. It is generated at runtime from the recipe YAML by `_format_ingredients_table` (single source of truth). Do not include an inputs table in the diagram file.
3338

3439
### Section 1: Header
3540

3641
```
3742
## {name}
38-
{description}
3943
```
4044

45+
Just the name. No description — the user already chose the recipe from the picker.
46+
4147
### Section 2: Flow Diagram
4248

4349
Build an ASCII flow diagram showing the step graph. This is the core visual.
4450

4551
**Infrastructure steps to hide:**
46-
Steps whose sole purpose is capturing a value via `run_cmd` (e.g., `capture_base_sha`, `set_merge_target`, shell one-liners that just `printf` or `git rev-parse`) should be **omitted** from the diagram. They are plumbing — the user does not need to see them. If in doubt: if a step uses `run_cmd` and its `note:` describes it as capturing/setting a value, hide it.
52+
The diagram shows ONLY the *skill work*`run_skill` invocations and `test_check`. Everything else is plumbing. Hide:
53+
- **All `run_cmd` steps** — value capture, shell one-liners, branch computation. All plumbing.
54+
- **All `push_to_remote` steps** — mechanical transport.
55+
- **All `clone_repo` steps** — setup plumbing.
56+
- **All issue lifecycle steps**`get_issue_title`, `claim_issue`, `release_issue`. Plumbing.
57+
- **All branch creation steps**`create_unique_branch`, `create_branch`. Plumbing.
58+
- **All CI/CD steps**`wait_for_ci`, `wait_for_merge_queue`, `enable_auto_merge`, `route_queue_mode`, `reenter_merge_queue`, `queue_ejected_fix`, `diagnose_ci`. Plumbing.
59+
- **All `merge_worktree` steps** — worktree-back-to-branch merge. Plumbing.
60+
- **All cleanup steps**`delete_clone`, `cleanup_failure`, `confirm_cleanup`. Teardown.
61+
- **All post-PR steps**`review_pr`, `resolve_review`, `diagnose_ci`, `resolve_ci`. Post-delivery plumbing.
62+
- **All `action: route` steps** — pure routing nodes with no work.
63+
64+
If a hidden step is the *only* path between two visible steps, collapse the route — just connect the visible steps directly. The reader should see: "what skills run, in what order, and what happens on failure."
4765

4866
**Diagram layout:**
4967

50-
Use a vertical spine with `├──` branches. The structure reads top-to-bottom:
68+
Use a vertical spine with `|` and `+--` branches. ASCII only — no Unicode.
5169

5270
1. **Main flow** runs down the left spine. Show meaningful steps in order.
53-
2. **Optional steps** are shown in brackets `[step-name]` with a right-side annotation: `← only if {condition}`.
54-
3. **Iteration loops** are wrapped in a `FOR EACH` block using box-drawing characters (`┌────┤` / `└────┘`). Only use this when `note:` fields indicate iteration over plan_parts or groups.
55-
4. **Failure branches** are shown inline where they diverge: `fix ───┘ (on failure)`.
71+
2. **Optional steps** always go on their own `+--` branch off the vertical spine: `+-- [step-name] (optional)`. They are never inlined on a horizontal chain. Never repeat the step name outside the brackets.
72+
3. **Iteration loops** are wrapped in a `FOR EACH` block using `+----+` / `+----+`. Only use this when `note:` fields indicate iteration over plan_parts or groups.
73+
4. **Self-loops** go on the same line with a bidirectional arrow: `step <-> [x fail -> handler]`.
5674
5. **Multi-way routing** (`on_result`) is shown with labeled paths on separate lines.
57-
6. **Retry blocks** are noted parenthetically on the step: `(retry ×N)`. Use `×∞` for `max_attempts: 0`.
58-
7. **Back-edges** use `` suffix: `→ verify↑`, `→ plan↑`.
59-
8. **Terminal steps** go at the bottom after a separator line.
60-
9. Do **not** show model annotations (e.g., `[sonnet]`) in the diagram.
75+
6. **Back-edges** use brackets: `-> plan [-> dry_walkthrough]`.
76+
7. **Terminal steps** are omitted. The last visible step is the end of the diagram.
77+
8. Do **not** show retry counts, model annotations, or other per-step metadata.
78+
9. **`test_check` steps** display as `test`.
79+
10. **Use the skill name, not the step key** for `run_skill` steps. But apply these short display names:
80+
- `implement-worktree-no-merge` -> `implement`
81+
- `audit-impl` -> `audit`
82+
- `resolve-failures` -> `fix`
83+
- `open-integration-pr` -> `open-pr`
84+
- Everything else: use the skill name as-is (e.g., `make-plan`, `dry-walkthrough`, `rectify`)
85+
11. **FOR EACH loop routing** (more parts? / all done?) is implicit — omit it. The loop block itself conveys iteration. The first step inside the loop connects directly to the `+----+` box — no extra `|` line needed between them.
86+
12. **Context limit recovery** (`retry_worktree`, `on_context_limit`) is automatic plumbing — omit it.
87+
13. **Consistent failure language.** Always use `x fail` for failure branches. Never use "NO GO", "FAIL", "failure", or other variants.
88+
14. **Back-edge targets must be the actual destination, not an intermediate optional step.** When a back-edge (e.g. audit fail) routes to a step that then passes through an optional step before reaching the real target, show the back-edge pointing to the real target directly. Example: if audit fail routes to `make_plan` and `make_plan.on_success` is `dry_walkthrough`, show `x fail [-> make-plan]` with the arrow going to `make-plan`, not to `review-approach`. The optional step is only reachable from its primary path, not from back-edges that happen to pass through the same chain.
89+
15. **Center step names on the vertical spine.** When a step name appears on the main spine (not on a branch), center the text relative to the `|` character column. All spine-level step names should align to the same visual center.
6190

6291
**Reference example for implementation:**
6392

6493
```
65-
clone
66-
67-
├── [create_branch] ← only if open_pr=true
68-
69-
├── [group] ← only if make_groups=true
70-
71-
┌────┤ FOR EACH GROUP:
72-
│ │
73-
│ plan ─── [review] ─── verify ─── implement (retry ×∞) ─── test ─── merge ─── push
74-
│ │ │ │
75-
│ │ retry_worktree (retry ×3) fix ───┘ (on failure → test↑)
76-
│ │
77-
│ └── next_or_done: more parts? → verify↑
78-
│ more groups? → plan↑
79-
│ all done? ↓
80-
└────┘
81-
82-
├── [audit_impl] ← only if audit=true
83-
│ GO → open_pr_step
84-
│ NO GO → remediate → plan↑
85-
86-
├── [open_pr_step] ← only if open_pr=true
87-
88-
cleanup_success ─── done
89-
90-
─────────────────────────────────
91-
done "Pipeline complete."
92-
escalate "Failed — human intervention needed."
94+
+-- [make-groups] (optional)
95+
|
96+
+----+ FOR EACH GROUP:
97+
| |
98+
| make-plan --- [review-approach] (optional) --- dry-walkthrough --- implement --- test <-> [x fail -> fix]
99+
|
100+
+----+
101+
|
102+
+-- [audit] (optional)
103+
| x fail [-> make-plan]
104+
|
105+
open-pr
93106
```
94107

95108
**Adapting to simpler recipes:**
@@ -98,33 +111,6 @@ Use a vertical spine with `├──` branches. The structure reads top-to-botto
98111
- Very simple recipes (under 8 meaningful steps) can use a single horizontal chain.
99112
- Always adapt the shape to the recipe — do not force a complex layout on a simple recipe.
100113

101-
### Section 3: Inputs Table
102-
103-
Render all ingredients as a single Markdown table.
104-
105-
```
106-
### Inputs
107-
108-
| Name | Description | Default |
109-
|------|-------------|---------|
110-
| task | What to implement | — |
111-
| source_dir | Repository path | auto-detect |
112-
| base_branch | Merge target | main |
113-
| run_name | Run name prefix | impl |
114-
| make_groups | Decompose into groups | off |
115-
| review_approach | Research first | off |
116-
| audit | Post-merge audit | on |
117-
| open_pr | PR instead of direct merge | off |
118-
```
119-
120-
**Rules:**
121-
- Keep descriptions short — one phrase, not a sentence.
122-
- Show `` for no default (required inputs).
123-
- Show `off`/`on` for boolean-like flags with `"false"`/`"true"` defaults.
124-
- Show `auto-detect` for empty-string defaults that auto-resolve.
125-
- If an ingredient is conditionally required (e.g., `task` required when `make_groups=false`), note it parenthetically: "What to implement (when no groups)".
126-
- Omit agent-managed state (ingredients with no default that are populated by step captures). If any exist, add a brief line below the table: `Agent-managed: work_dir, worktree_path, plan_path, ...`
127-
128114
---
129115

130116
## Workflow
@@ -134,12 +120,11 @@ Render all ingredients as a single Markdown table.
134120
Read the recipe YAML from the prompt context or from disk if a path is given. Identify:
135121
- All ingredients and their properties
136122
- All steps in declaration order
137-
- Infrastructure steps to hide (run_cmd steps that just capture values)
123+
- Infrastructure steps to hide (see expanded list in Section 2)
138124
- The happy path (follow on_success chain from first step)
139125
- Branch points (on_failure to non-terminal, on_result routing)
140126
- Back-edges (on_success/on_failure targets that appear earlier in declaration order)
141127
- Optional steps (optional: true)
142-
- Retry blocks
143128
- Terminal steps (action: stop)
144129

145130
### Step 2: Build the Flow Diagram
@@ -157,19 +142,19 @@ Before writing, check the diagram for alignment errors. Scan every line and veri
157142

158143
If any check fails, fix the diagram before proceeding. This is a mechanical check — count character positions, do not eyeball it.
159144

160-
### Step 4: Build the Inputs Table
161-
162-
Construct the table following the rules in Section 3.
145+
### Step 4: Assemble and Write
163146

164-
### Step 5: Assemble and Write
147+
Combine both sections and write to two locations:
148+
1. `temp/render-recipe/{recipe-name}_{YYYY-MM-DD_HHMMSS}.md` — timestamped history copy
149+
2. The recipe's diagram file — for bundled recipes: `src/autoskillit/recipes/diagrams/{recipe-name}.md`; for project recipes: `.autoskillit/recipes/diagrams/{recipe-name}.md`. This is the file that `load_recipe` serves to Claude.
165150

166-
Combine all three sections. Write to `temp/render-recipe/{recipe-name}_{YYYY-MM-DD_HHMMSS}.md` (timestamp ensures no overwrites). Print the full content to terminal.
151+
Print the full content to terminal.
167152

168153
---
169154

170155
## Output Rules
171156

172157
| Content | Destination |
173158
|---------|-------------|
174-
| Rendered recipe overview | `temp/render-recipe/{recipe-name}_{YYYY-MM-DD_HHMMSS}.md` AND terminal |
175-
| Validation warnings (if any) | Terminal only, as a brief note after the render |
159+
| Rendered recipe overview | `temp/render-recipe/` (history) + `recipes/diagrams/` (live) + terminal |
160+
| Validation warnings (if any) | Terminal only |

.github/workflows/codeql.yml

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
name: CodeQL
2+
3+
on:
4+
pull_request:
5+
branches: [stable]
6+
7+
jobs:
8+
analyze:
9+
name: Analyze
10+
runs-on: ubuntu-latest
11+
permissions:
12+
security-events: write
13+
contents: read
14+
actions: read
15+
strategy:
16+
matrix:
17+
language: [python, actions]
18+
steps:
19+
- uses: actions/checkout@v4
20+
- uses: github/codeql-action/init@v3
21+
with:
22+
languages: ${{ matrix.language }}
23+
- uses: github/codeql-action/analyze@v3

.github/workflows/release.yml

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
name: Release — Minor Version Bump and Tag
2+
3+
on:
4+
pull_request:
5+
types: [closed]
6+
branches: [stable]
7+
8+
jobs:
9+
release:
10+
permissions:
11+
contents: write
12+
if: github.event.pull_request.merged == true
13+
runs-on: ubuntu-latest
14+
15+
steps:
16+
- uses: actions/checkout@v4
17+
with:
18+
ref: stable
19+
fetch-depth: 0
20+
21+
- name: Install uv
22+
uses: astral-sh/setup-uv@v7
23+
with:
24+
uv-version: "0.9.21"
25+
26+
- name: Compute new minor version
27+
id: version
28+
run: |
29+
set -euo pipefail
30+
CURRENT=$(python3 -c "
31+
import tomllib, pathlib
32+
print(tomllib.loads(pathlib.Path('pyproject.toml').read_text())['project']['version'])
33+
")
34+
IFS='.' read -r MAJOR MINOR PATCH <<< "$CURRENT"
35+
NEW="$MAJOR.$((MINOR + 1)).0"
36+
echo "old=$CURRENT" >> "$GITHUB_OUTPUT"
37+
echo "new=$NEW" >> "$GITHUB_OUTPUT"
38+
echo "tag=v$NEW" >> "$GITHUB_OUTPUT"
39+
40+
- name: Update pyproject.toml
41+
run: |
42+
python3 - <<'EOF'
43+
import pathlib, os
44+
p = pathlib.Path("pyproject.toml")
45+
old_ver = f'version = "{os.environ["OLD_VERSION"]}"'
46+
new_ver = f'version = "{os.environ["NEW_VERSION"]}"'
47+
p.write_text(p.read_text().replace(old_ver, new_ver, 1))
48+
EOF
49+
env:
50+
OLD_VERSION: ${{ steps.version.outputs.old }}
51+
NEW_VERSION: ${{ steps.version.outputs.new }}
52+
53+
- name: Update plugin.json
54+
run: |
55+
python3 - <<'EOF'
56+
import json, pathlib, os
57+
p = pathlib.Path("src/autoskillit/.claude-plugin/plugin.json")
58+
data = json.loads(p.read_text())
59+
data["version"] = os.environ["NEW_VERSION"]
60+
p.write_text(json.dumps(data, indent=2) + "\n")
61+
EOF
62+
env:
63+
NEW_VERSION: ${{ steps.version.outputs.new }}
64+
65+
- name: Regenerate uv.lock
66+
run: uv lock
67+
68+
- name: Commit and push version bump to stable
69+
run: |
70+
set -euo pipefail
71+
git config user.name "github-actions[bot]"
72+
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
73+
git add pyproject.toml src/autoskillit/.claude-plugin/plugin.json uv.lock
74+
if git diff --cached --quiet; then
75+
echo "Nothing to commit"
76+
else
77+
git commit -m "chore: bump version to ${{ steps.version.outputs.new }}"
78+
git push origin stable
79+
fi
80+
81+
- name: Create annotated git tag
82+
run: |
83+
set -euo pipefail
84+
git tag -a "${{ steps.version.outputs.tag }}" \
85+
-m "Release ${{ steps.version.outputs.tag }}"
86+
git push origin "${{ steps.version.outputs.tag }}"
87+
88+
- name: Create GitHub Release
89+
run: |
90+
set -euo pipefail
91+
gh release create "${{ steps.version.outputs.tag }}" \
92+
--title "Release ${{ steps.version.outputs.tag }}" \
93+
--generate-notes \
94+
--target stable
95+
env:
96+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

.github/workflows/tests.yml

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,13 @@ name: Tests
22

33
on:
44
push:
5-
branches: [main, integration]
5+
branches: [main, stable]
66
pull_request:
7+
branches: [main, integration, stable]
8+
merge_group:
9+
10+
permissions:
11+
contents: read
712

813
jobs:
914
preflight:
@@ -15,11 +20,11 @@ jobs:
1520
- name: Compute OS matrix
1621
id: set-matrix
1722
run: |
18-
if [[ "${{ github.event_name }}" == "pull_request" && "${{ github.base_ref }}" == "integration" ]] || \
19-
[[ "${{ github.event_name }}" == "push" && "${{ github.ref }}" == "refs/heads/integration" ]]; then
20-
echo 'matrix=["ubuntu-latest"]' >> $GITHUB_OUTPUT
21-
else
23+
if [[ "${{ github.event_name }}" == "pull_request" && "${{ github.base_ref }}" == "stable" ]] || \
24+
[[ "${{ github.event_name }}" == "push" && "${{ github.ref }}" == "refs/heads/stable" ]]; then
2225
echo 'matrix=["ubuntu-latest","macos-15"]' >> $GITHUB_OUTPUT
26+
else
27+
echo 'matrix=["ubuntu-latest"]' >> $GITHUB_OUTPUT
2328
fi
2429
2530
- uses: actions/checkout@v4

0 commit comments

Comments
 (0)