From zucca-skills
Use when a feature-spec-keeper (or similar reverse-engineering agent) opens a batch of spec PRs with `## Open questions for the rewrite` sections that need human answers before merge. The skill groups questions, applies the team's status-quo-for-features-fix-bad-architecture policy as default recommendations, walks PRs one at a time, captures answers, patches the spec doc, and pushes. Triggers on "walk the open questions on this PR", "answer the spec questions in batch", "let's resolve feature-spec PRs one by one", or any "I have N spec PRs with open questions, help me work through them" request.
How this skill is triggered — by the user, by Claude, or both
Slash command
/zucca-skills:spec-walkthroughThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
When the `feature-spec-keeper` (or similar reverse-engineering agent) opens a batch of spec PRs, each typically ends with:
When the feature-spec-keeper (or similar reverse-engineering agent) opens a batch of spec PRs, each typically ends with:
## Open questions for the rewrite
1. Should X be configurable?
2. Should we add Y?
...
The human review work is answering those questions and patching them into the spec as "Questions resolved for the rewrite". This skill makes that work fast and consistent across PRs.
Announce at start: "I'm using the spec-walkthrough skill to process N spec PR(s)."
Default lens for every question (this is the team's standing decision, articulated 2026-05-12):
Status-quo for features; fix bad architecture only.
The rewrite ships current behavior unless something is genuinely poor architecture worth correcting. No feature creep. Architectural fixes that don't add new product behavior — just centralize, secure, or correct existing patterns — are in scope.
Apply this when proposing default answers. Each question gets one of:
Get the explicit PR list (user-given or via label):
gh pr list --repo <owner>/<repo> --state open --label feature-spec-keeper \
--json number,title,body,headRefName,reviewDecision --limit 50
For each PR, count open questions:
gh pr view <pr> --repo <owner>/<repo> --json body | \
jq -r '.body' | awk '/^## Open questions/,0' | grep -cE "^[0-9]+\."
Print the queue with counts:
Queue (in walk order):
#1157 8 questions Product Workflow & Stages
#1159 10 questions AI Orchestrator
#1160 10 questions Auth & Permissions
...
Confirm with the user before starting.
Fetch the PR's spec file and extract the open-questions section:
git fetch origin <pr-branch>
git show origin/<pr-branch>:docs/features/<slug>.md | awk '/^## Open questions/,0'
Then for each question, present:
Example format (this is the format that worked well in practice):
**Q1. User-configurable workflow phases?** → **No.** Currently hard-coded. Keep as-is.
**Q2. Global AI error handling / fallback strategy?** → **YES — adopt in the rewrite.** Per-callsite handling is bad architecture; one circuit breaker / fallback abstraction at the orchestrator boundary is the right shape and doesn't add features.
...
End the block with a summary:
Net change: N architectural fixes, M status-quo, K codebase greps I'll resolve inline.
Reply "yes" / "go" to apply, or call out specific overrides (e.g., "Q3 flip to yes, rest yes").
If a question is factual ("Where does X live?", "Are draft milestones in a separate table?"), do the grep and inline the answer instead of asking the user. Examples worth grepping:
organizationId / orgId joins in the queries dir.protect( in the actions dir.const.*VERSION.*=.Mark these (codebase resolution, no user input needed) in the question list so the user knows you're not asking them.
Once the user confirms:
git checkout -B <pr-branch> origin/<pr-branch>
Edit the spec doc:
## Open questions for the rewrite heading with ## Questions resolved for the rewrite.> Resolved YYYY-MM-DD by @<user>. Policy: **status-quo for features; fix bad architecture.**
> Net change in scope: <N> architectural fixes (<Q list>); <M> status-quo.
docs/features/_INDEX.md.Commit with a clear message:
git add docs/features/<slug>.md
git commit --no-verify -m "$(cat <<'EOF'
docs(spec): resolve open questions on <Feature Name>
All <N> questions answered. Policy: status-quo for features; fix bad
architecture only. Net change in scope:
- Q<X>: <decision> (<one-line why>)
- ...
Other Q's status-quo or codebase-resolved.
Co-Authored-By: <you>
EOF
)"
git push --no-verify
Don't try to merge — that's merge-batch's job. Just push answer commits one PR at a time, then let the user say "merge all".
When the queue is exhausted, summarize:
🎉 All <N> spec PRs answered and pushed.
✓ #1157, ✓ #1159, ✓ #1160, ...
Net architectural fixes baked in:
- <feature>: <fix>
- ...
Ready to hand off to /merge-batch.
/merge-batch._INDEX.md, commit.## Questions resolved for the rewrite heading; preserve the per-question structure; don't reshape the doc./merge-batch after.Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub gozucca/zucca-skills --plugin zucca-skills