refactor!: flatten to a top-level skills/ layout under the crod951/skills name - #6
Conversation
…1/skills name The repo root is now the plugin, matching the mattpocock/skills shape: skills/ at the top level, plugin.json beside marketplace.json in .claude-plugin/, and marketplace source "./". The workbench guide moves to docs/workbench.md. scan-skills.sh and sync-versions.sh drop the plugins/* indirection, the baseline moves to the repo root, and the SkillSpector workflow watches the new paths. All crod951/claude-plugins references become crod951/skills following the repository rename; GitHub redirects keep old URLs working.
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (8)
🚧 Files skipped from review as they are similar to previous changes (4)
📝 WalkthroughWalkthroughThe repository is reorganized around root-level skills. It adds scaffold and execute workflows, shared approval, memory, convention, and tracker contracts, Asana and Linear adapter specifications, updated scanning automation, and refreshed installation and repository metadata. ChangesSkills workbench migration
Estimated code review effort: 4 (Complex) | ~60 minutes Sequence Diagram(s)sequenceDiagram
participant Operator
participant ScaffoldSkill
participant TrackerMCP
participant ExecuteSkill
participant MemoryBackend
Operator->>ScaffoldSkill: provide requirements and approval mode
ScaffoldSkill->>TrackerMCP: resolve destination and create issue hierarchy
ScaffoldSkill->>ExecuteSkill: hand off issue reference
ExecuteSkill->>MemoryBackend: claim and persist implementation tasks
ExecuteSkill->>TrackerMCP: update issue phases and comments
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
Actionable comments posted: 14
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.github/workflows/skillspector.yml:
- Around line 11-14: Update the pull_request.paths filter in the skillspector
workflow to include bin/scan-skills.sh and .github/workflows/skillspector.yml,
matching the corresponding push filter while preserving the existing skills and
baseline paths.
In `@bin/scan-skills.sh`:
- Around line 156-160: Update the failure tracking and final report in
bin/scan-skills.sh so scanner or provider/install crashes are distinguished from
non-suppressed findings. Track crash failures separately from findings, or use
neutral wording in the failures summary, ensuring crash failures are not
described as baseline issues while preserving the existing failure exit
behavior.
In `@README.md`:
- Line 87: Update the README scan command and baseline instructions to use the
repository-root skills layout: invoke bin/scan-skills.sh against the appropriate
root-level skill path or supported target, replace plugin-specific <plugin-name>
references, and point baseline guidance to the repository-root
.skillspector-baseline.yaml.
In `@skills/execute/SKILL.md`:
- Around line 50-61: Reapply the approval mode confirmed by first-run setup
before continuing with the procedure. In skills/execute/SKILL.md lines 50-61,
replace the provisional mode with the setup-confirmed mode before loading or
creating the tracker profile; apply the same update in skills/scaffold/SKILL.md
lines 40-57 before draft approval or automatic creation.
In `@skills/scaffold/SKILL.md`:
- Around line 85-90: Update step 10 in the handoff procedure to pass the
canonical full Asana task URL to execute, while retaining the short Asana ref
only for display. Keep Linear handoffs using the existing key/ref and preserve
the ask-versus-auto behavior.
In `@skills/workbench-shared/memory/beads.md`:
- Line 16: The status() instructions currently omit in_progress from the
open-task total. Update the open count calculation to sum open, blocked,
deferred, and in_progress, while preserving the separate current-task lookup and
done count behavior.
In `@skills/workbench-shared/memory/checklist.md`:
- Line 41: Update the createTask commit instruction in the checklist
documentation to cover adopted existing sub-issues: when no scaffold commit is
created, include the task line in the breakdown/adoption commit. Preserve the
existing requirement to commit newly created task lines with their scaffold
commit.
- Around line 42-45: Update claimNext() to prevent concurrent runners for the
same issue from claiming or resuming the same task: add an exclusive per-issue
lock or compare-and-swap around reading and rewriting the checklist, or
explicitly reject a second active runner. Preserve the existing behavior of
resuming an existing [>] task and claiming the first eligible [ ] task, while
ensuring only one runner can perform either transition.
In `@skills/workbench-shared/trackers.md`:
- Around line 16-18: Update the shared tracker destination contract in
skills/workbench-shared/trackers.md (anchor lines 16-18) so listDestinations,
resolveDestination, and createIssue use an adapter-owned destination value
containing teamId and optional projectId rather than a single native id. Update
the corresponding Linear destination flow in
skills/workbench-shared/trackers/linear.md (sibling lines 15-17) to resolve and
pass that teamId/projectId value through issue creation.
- Around line 74-75: Update the bulk `gh pr list --state all --json
headRefName,state,mergedAt` sweep to request all relevant pull requests by
setting an explicit sufficiently large `--limit` or by paginating results,
ensuring older recorded branches are not skipped as the backlog grows.
In `@skills/workbench-shared/trackers/asana.md`:
- Around line 113-119: Update the branch-to-tracker lookup in
skills/workbench-shared/trackers/asana.md at lines 113-119 so it does not select
an arbitrary matching record: detect multiple Asana candidates and fail, or
validate the selected task URL before updating. Apply the same ambiguity
handling to the corresponding lookup in
skills/workbench-shared/trackers/linear.md at lines 108-114 before updating the
Linear issue.
- Around line 66-80: Update the Asana merge-closer setup flow to explicitly
offer and persist one of three choices: native, installed, or declined/sweep. In
the profile-loading check around the merge-closer selection, recognize
merge-closer: native exactly like installed so it never prompts again, while
retaining the sweep backstop; ensure the native option is offered before the
GitHub Action and records merge-closer: native.
- Line 21: Update updateState(ref, phase) in
skills/workbench-shared/trackers/asana.md:21-21 to return without section,
custom-field, or comment fallback when the profile mapping for phase is
unmapped; retain completed=true for done only when a mapped transition is
processed. Update the corresponding state-mutation logic in
skills/workbench-shared/trackers/linear.md:19-19 to skip mutation when the
profile records the phase as unmapped.
In `@skills/workbench-shared/trackers/linear.md`:
- Around line 133-145: Replace the string-pattern response matching in the
Linear mutation handling with jq-based JSON parsing: inspect .errors for GraphQL
failures and .data.issueUpdate.success for successful updates. Preserve the
existing success message for true results and unexpected-response error handling
for invalid or unsuccessful responses, including the response payload in
diagnostics.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 2a11a373-6aca-40a8-aa91-d0f07e6ec5a8
📒 Files selected for processing (20)
.claude-plugin/marketplace.json.claude-plugin/plugin.json.github/workflows/skillspector.yml.skillspector-baseline.yamlREADME.mdbin/scan-skills.shbin/sync-versions.shdocs/workbench.mdskills/execute/SKILL.mdskills/scaffold/SKILL.mdskills/workbench-shared/SKILL.mdskills/workbench-shared/agents.mdskills/workbench-shared/approval.mdskills/workbench-shared/conventions.mdskills/workbench-shared/memory.mdskills/workbench-shared/memory/beads.mdskills/workbench-shared/memory/checklist.mdskills/workbench-shared/trackers.mdskills/workbench-shared/trackers/asana.mdskills/workbench-shared/trackers/linear.md
There was a problem hiding this comment.
Caution
Inline review comments failed to post. This is likely due to GitHub's internal server error or limits when posting large numbers of comments. If you are seeing this consistently it is likely a permissions issue. Please check "Moderation" -> "Code review limits" under your organization settings.
Actionable comments posted: 14
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.github/workflows/skillspector.yml:
- Around line 11-14: Update the pull_request.paths filter in the skillspector
workflow to include bin/scan-skills.sh and .github/workflows/skillspector.yml,
matching the corresponding push filter while preserving the existing skills and
baseline paths.
In `@bin/scan-skills.sh`:
- Around line 156-160: Update the failure tracking and final report in
bin/scan-skills.sh so scanner or provider/install crashes are distinguished from
non-suppressed findings. Track crash failures separately from findings, or use
neutral wording in the failures summary, ensuring crash failures are not
described as baseline issues while preserving the existing failure exit
behavior.
In `@README.md`:
- Line 87: Update the README scan command and baseline instructions to use the
repository-root skills layout: invoke bin/scan-skills.sh against the appropriate
root-level skill path or supported target, replace plugin-specific <plugin-name>
references, and point baseline guidance to the repository-root
.skillspector-baseline.yaml.
In `@skills/execute/SKILL.md`:
- Around line 50-61: Reapply the approval mode confirmed by first-run setup
before continuing with the procedure. In skills/execute/SKILL.md lines 50-61,
replace the provisional mode with the setup-confirmed mode before loading or
creating the tracker profile; apply the same update in skills/scaffold/SKILL.md
lines 40-57 before draft approval or automatic creation.
In `@skills/scaffold/SKILL.md`:
- Around line 85-90: Update step 10 in the handoff procedure to pass the
canonical full Asana task URL to execute, while retaining the short Asana ref
only for display. Keep Linear handoffs using the existing key/ref and preserve
the ask-versus-auto behavior.
In `@skills/workbench-shared/memory/beads.md`:
- Line 16: The status() instructions currently omit in_progress from the
open-task total. Update the open count calculation to sum open, blocked,
deferred, and in_progress, while preserving the separate current-task lookup and
done count behavior.
In `@skills/workbench-shared/memory/checklist.md`:
- Line 41: Update the createTask commit instruction in the checklist
documentation to cover adopted existing sub-issues: when no scaffold commit is
created, include the task line in the breakdown/adoption commit. Preserve the
existing requirement to commit newly created task lines with their scaffold
commit.
- Around line 42-45: Update claimNext() to prevent concurrent runners for the
same issue from claiming or resuming the same task: add an exclusive per-issue
lock or compare-and-swap around reading and rewriting the checklist, or
explicitly reject a second active runner. Preserve the existing behavior of
resuming an existing [>] task and claiming the first eligible [ ] task, while
ensuring only one runner can perform either transition.
In `@skills/workbench-shared/trackers.md`:
- Around line 16-18: Update the shared tracker destination contract in
skills/workbench-shared/trackers.md (anchor lines 16-18) so listDestinations,
resolveDestination, and createIssue use an adapter-owned destination value
containing teamId and optional projectId rather than a single native id. Update
the corresponding Linear destination flow in
skills/workbench-shared/trackers/linear.md (sibling lines 15-17) to resolve and
pass that teamId/projectId value through issue creation.
- Around line 74-75: Update the bulk `gh pr list --state all --json
headRefName,state,mergedAt` sweep to request all relevant pull requests by
setting an explicit sufficiently large `--limit` or by paginating results,
ensuring older recorded branches are not skipped as the backlog grows.
In `@skills/workbench-shared/trackers/asana.md`:
- Around line 113-119: Update the branch-to-tracker lookup in
skills/workbench-shared/trackers/asana.md at lines 113-119 so it does not select
an arbitrary matching record: detect multiple Asana candidates and fail, or
validate the selected task URL before updating. Apply the same ambiguity
handling to the corresponding lookup in
skills/workbench-shared/trackers/linear.md at lines 108-114 before updating the
Linear issue.
- Around line 66-80: Update the Asana merge-closer setup flow to explicitly
offer and persist one of three choices: native, installed, or declined/sweep. In
the profile-loading check around the merge-closer selection, recognize
merge-closer: native exactly like installed so it never prompts again, while
retaining the sweep backstop; ensure the native option is offered before the
GitHub Action and records merge-closer: native.
- Line 21: Update updateState(ref, phase) in
skills/workbench-shared/trackers/asana.md:21-21 to return without section,
custom-field, or comment fallback when the profile mapping for phase is
unmapped; retain completed=true for done only when a mapped transition is
processed. Update the corresponding state-mutation logic in
skills/workbench-shared/trackers/linear.md:19-19 to skip mutation when the
profile records the phase as unmapped.
In `@skills/workbench-shared/trackers/linear.md`:
- Around line 133-145: Replace the string-pattern response matching in the
Linear mutation handling with jq-based JSON parsing: inspect .errors for GraphQL
failures and .data.issueUpdate.success for successful updates. Preserve the
existing success message for true results and unexpected-response error handling
for invalid or unsuccessful responses, including the response payload in
diagnostics.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 2a11a373-6aca-40a8-aa91-d0f07e6ec5a8
📒 Files selected for processing (20)
.claude-plugin/marketplace.json.claude-plugin/plugin.json.github/workflows/skillspector.yml.skillspector-baseline.yamlREADME.mdbin/scan-skills.shbin/sync-versions.shdocs/workbench.mdskills/execute/SKILL.mdskills/scaffold/SKILL.mdskills/workbench-shared/SKILL.mdskills/workbench-shared/agents.mdskills/workbench-shared/approval.mdskills/workbench-shared/conventions.mdskills/workbench-shared/memory.mdskills/workbench-shared/memory/beads.mdskills/workbench-shared/memory/checklist.mdskills/workbench-shared/trackers.mdskills/workbench-shared/trackers/asana.mdskills/workbench-shared/trackers/linear.md
🛑 Comments failed to post (11)
skills/execute/SKILL.md (1)
50-61: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
Reapply the approval mode selected during first-run setup.
Both procedures resolve the mode before loading or creating the tracker profile, but
skills/workbench-shared/approval.mdrequires a mode established during first-run setup to govern the remainder of that run. Without reassigning the resolved mode, setup can silently leave the skill in the initial default mode, causing unexpected prompts or unapproved auto-execution.
skills/execute/SKILL.md#L50-L61: replace the provisional mode with the setup-confirmed mode before continuing.skills/scaffold/SKILL.md#L40-L57: apply the same update before draft approval or automatic creation.📍 Affects 2 files
skills/execute/SKILL.md#L50-L61(this comment)skills/scaffold/SKILL.md#L40-L57🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@skills/execute/SKILL.md` around lines 50 - 61, Reapply the approval mode confirmed by first-run setup before continuing with the procedure. In skills/execute/SKILL.md lines 50-61, replace the provisional mode with the setup-confirmed mode before loading or creating the tracker profile; apply the same update in skills/scaffold/SKILL.md lines 40-57 before draft approval or automatic creation.skills/scaffold/SKILL.md (1)
85-90: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win
Pass the canonical Asana URL during execute handoff.
The procedure states that an Asana short ref cannot be resolved alone, but step 10 only says to invoke execute on “that ref.” Explicitly pass the full task URL for Asana; retain the short ref for display only.
🧰 Tools
🪛 SkillSpector (2.4.4)
[warning] 90: [EA2] Autonomous Decision Making: Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.
Remediation: Add human-in-the-loop confirmation for destructive, irreversible, or high-impact operations. Never auto-execute commands that modify files, send data, or alter system state.
(Excessive Agency (EA2))
[warning] 3: [RA2] Session Persistence: Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
Remediation: Remove any persistence mechanisms (cron jobs, startup scripts, state files). Skills should not maintain state across sessions without explicit user consent.
(Rogue Agent (RA2))
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@skills/scaffold/SKILL.md` around lines 85 - 90, Update step 10 in the handoff procedure to pass the canonical full Asana task URL to execute, while retaining the short Asana ref only for display. Keep Linear handoffs using the existing key/ref and preserve the ask-versus-auto behavior.skills/workbench-shared/memory/beads.md (1)
16-16: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win
Include in-progress tasks in the beads open count.
Line 16 sums
open,blocked, anddeferredbut omitsin_progress.skills/workbench-shared/memory/checklist.mddefines open work as[ ]plus[>], so equivalent runs report inconsistent counts and a running task can incorrectly produce an open count of zero. Include thein_progressbucket while still reporting the current task separately.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@skills/workbench-shared/memory/beads.md` at line 16, The status() instructions currently omit in_progress from the open-task total. Update the open count calculation to sum open, blocked, deferred, and in_progress, while preserving the separate current-task lookup and done count behavior.skills/workbench-shared/memory/checklist.md (2)
41-41: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win
Define commit behavior for adopted sub-issues.
The execute workflow allows existing children to be adopted without calling
createSubIssue, so there is no scaffold commit for Line 41’s task record to accompany. Specify that this task line must be included in the breakdown/adoption commit; otherwise checklist state can remain uncommitted and be lost across machines.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@skills/workbench-shared/memory/checklist.md` at line 41, Update the createTask commit instruction in the checklist documentation to cover adopted existing sub-issues: when no scaffold commit is created, include the task line in the breakdown/adoption commit. Preserve the existing requirement to commit newly created task lines with their scaffold commit.
42-45: 🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy lift
Make checklist claiming atomic or explicitly prohibit concurrent runners.
claimNext()reads and rewrites a shared file, so two runners can observe the same[ ]task—or resume the same[>]task—and both implement it. The “at most one” invariant does not prevent this race. Add an exclusive per-issue lock/compare-and-swap check, or explicitly enforce one active runner per issue.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@skills/workbench-shared/memory/checklist.md` around lines 42 - 45, Update claimNext() to prevent concurrent runners for the same issue from claiming or resuming the same task: add an exclusive per-issue lock or compare-and-swap around reading and rewriting the checklist, or explicitly reject a second active runner. Preserve the existing behavior of resuming an existing [>] task and claiming the first eligible [ ] task, while ensuring only one runner can perform either transition.skills/workbench-shared/trackers.md (2)
16-18: 🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy lift
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash set -euo pipefail printf '\n== trackers.md ==\n' cat -n skills/workbench-shared/trackers.md | sed -n '1,220p' printf '\n== linear.md ==\n' cat -n skills/workbench-shared/trackers/linear.md | sed -n '1,220p' printf '\n== search for destination types/usages ==\n' rg -n "resolveDestination\\(|createIssue\\(|listDestinations\\(|destination" skills/workbench-shared -g '!**/node_modules/**'Repository: crod951/skills
Length of output: 39580
🏁 Script executed:
#!/bin/bash set -euo pipefail printf '\n== project/team destination searches ==\n' rg -n "projectId|teamId|destination\s*[:=].*project|destination\s*[:=].*team|native destination" skills/workbench-shared -g '!**/node_modules/**' printf '\n== adapter file list ==\n' git ls-files 'skills/workbench-shared/trackers/*' printf '\n== asana.md relevant section ==\n' cat -n skills/workbench-shared/trackers/asana.md | sed -n '1,120p'Repository: crod951/skills
Length of output: 11813
Carry Linear’s project selection through the shared destination contract.
skills/workbench-shared/trackers.md#L16-L18only allows a single native destination id, so the optional project resolved inskills/workbench-shared/trackers/linear.md#L15-L17has nowhere to flow and can be dropped before create. Thread an adapter-owned destination value withteamId+ optionalprojectIdthroughlistDestinations,resolveDestination, andcreateIssueinstead.📍 Affects 2 files
skills/workbench-shared/trackers.md#L16-L18(this comment)skills/workbench-shared/trackers/linear.md#L15-L17🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@skills/workbench-shared/trackers.md` around lines 16 - 18, Update the shared tracker destination contract in skills/workbench-shared/trackers.md (anchor lines 16-18) so listDestinations, resolveDestination, and createIssue use an adapter-owned destination value containing teamId and optional projectId rather than a single native id. Update the corresponding Linear destination flow in skills/workbench-shared/trackers/linear.md (sibling lines 15-17) to resolve and pass that teamId/projectId value through issue creation.
74-75: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash set -euo pipefail git ls-files skills/workbench-shared/trackers.md wc -l skills/workbench-shared/trackers.md sed -n '60,110p' skills/workbench-shared/trackers.md rg -n "gh pr list|number,title,url|mergedAt|headRefName|abandoned" skills/workbench-shared/trackers.mdRepository: crod951/skills
Length of output: 7647
🏁 Script executed:
#!/bin/bash set -euo pipefail rg -n "gh pr list --state all|headRefName,state,mergedAt|number,title,url|PR closed unmerged|abandoned attempt|mergedAt is null|gh pr view" .Repository: crod951/skills
Length of output: 1670
🏁 Script executed:
#!/bin/bash set -euo pipefail sed -n '70,110p' skills/workbench-shared/trackers.mdRepository: crod951/skills
Length of output: 5451
🏁 Script executed:
#!/bin/bash set -euo pipefail python3 - <<'PY' from pathlib import Path p = Path("skills/workbench-shared/trackers.md") for i, line in enumerate(p.read_text().splitlines(), 1): if 70 <= i <= 110: print(f"{i}:{line}") PYRepository: crod951/skills
Length of output: 5585
🏁 Script executed:
#!/bin/bash set -euo pipefail python3 - <<'PY' from pathlib import Path p = Path("skills/workbench-shared/trackers.md") for i, line in enumerate(p.read_text().splitlines(), 1): if 90 <= i <= 105: print(f"{i}:{line}") PYRepository: crod951/skills
Length of output: 2372
🌐 Web query:
gh cli manual gh pr list default limit 30 --json headRefName state mergedAt limit documentation💡 Result:
The GitHub CLI (gh) command gh pr list has a default limit of 30 items [1][2][3]. The --limit flag (or -L) is used to specify the maximum number of items to fetch [1][2]. When the --json flag is used, it outputs data in JSON format containing only the specified fields [1][4]. To list pull requests with specific fields like headRefName, state, and mergedAt while setting a limit, you can use the following command structure: gh pr list --limit --json headRefName,state,mergedAt For example, to list 50 pull requests with those fields, you would run: gh pr list --limit 50 --json headRefName,state,mergedAt The --json flag requires a comma-separated list of field names [4]. If you are unsure which fields are available, you can run the command with the --json flag but without specifying any fields to see a list of valid options, or consult the official GitHub CLI documentation [4].
Citations:
- 1: https://cli.github.com/manual/gh_pr_list
- 2: https://cli.github.com/manual/gh_help_reference
- 3: https://manpages.debian.org/trixie/gh/gh-pr-list.1.en.html
- 4: https://cli.github.com/manual/gh_help_formatting
🏁 Script executed:
#!/bin/bash set -euo pipefail rg -n "headRefName,state,mergedAt|number,title,url|gh pr list --state all|gh pr list --limit|PR closed unmerged" .Repository: crod951/skills
Length of output: 819
Paginate the bulk
gh pr listsweep. The default 30-item limit will skip older branches once the backlog grows; set an explicit--limitor paginate the results.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@skills/workbench-shared/trackers.md` around lines 74 - 75, Update the bulk `gh pr list --state all --json headRefName,state,mergedAt` sweep to request all relevant pull requests by setting an explicit sufficiently large `--limit` or by paginating results, ensuring older recorded branches are not skipped as the backlog grows.skills/workbench-shared/trackers/asana.md (3)
21-21: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
Make both adapters honor
unmappedphases.
skills/workbench-shared/trackers/asana.md#L21-L21: skip the section/custom-field/comment fallback when the profile recordsunmapped.skills/workbench-shared/trackers/linear.md#L19-L19: skip the state mutation when the profile recordsunmapped.📍 Affects 2 files
skills/workbench-shared/trackers/asana.md#L21-L21(this comment)skills/workbench-shared/trackers/linear.md#L19-L19🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@skills/workbench-shared/trackers/asana.md` at line 21, Update updateState(ref, phase) in skills/workbench-shared/trackers/asana.md:21-21 to return without section, custom-field, or comment fallback when the profile mapping for phase is unmapped; retain completed=true for done only when a mapped transition is processed. Update the corresponding state-mutation logic in skills/workbench-shared/trackers/linear.md:19-19 to skip mutation when the profile records the phase as unmapped.
66-80: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win
Offer
nativeas an explicit first-run merge-closer choice.This setup flow only asks whether to install the GitHub Action and records
installedordeclined, while Lines 66-69 recommend and supportnative. A repository already using Asana’s native integration cannot reach the documentednativeprofile state and may be prompted to install a redundant Action.Offer
native,installed, ordeclined/sweepexplicitly and persist the selected value.🧰 Tools
🪛 LanguageTool
[locale-violation] ~69-~69: In American English, ‘afterward’ is the preferred variant. ‘Afterwards’ is more commonly used in British English and other dialects.
Context: ...Treatnativeexactly likeinstalledafterwards: never ask again, and let the sweep sta...(AFTERWARDS_US)
[uncategorized] ~78-~78: The official name of this software platform is spelled with a capital “H”.
Context: ...pository. When the answer is yes, write.github/workflows/workbench-close.ymlfrom the...(GITHUB)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@skills/workbench-shared/trackers/asana.md` around lines 66 - 80, Update the Asana merge-closer setup flow to explicitly offer and persist one of three choices: native, installed, or declined/sweep. In the profile-loading check around the merge-closer selection, recognize merge-closer: native exactly like installed so it never prompts again, while retaining the sweep backstop; ensure the native option is offered before the GitHub Action and records merge-closer: native.
113-119: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win
Do not choose an arbitrary tracker record for a matching branch.
skills/workbench-shared/trackers/asana.md#L113-L119: fail when more than one Asana candidate matches, or validate the selected task URL before updating.skills/workbench-shared/trackers/linear.md#L108-L114: apply the same ambiguity handling before updating the Linear issue.📍 Affects 2 files
skills/workbench-shared/trackers/asana.md#L113-L119(this comment)skills/workbench-shared/trackers/linear.md#L108-L114🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@skills/workbench-shared/trackers/asana.md` around lines 113 - 119, Update the branch-to-tracker lookup in skills/workbench-shared/trackers/asana.md at lines 113-119 so it does not select an arbitrary matching record: detect multiple Asana candidates and fail, or validate the selected task URL before updating. Apply the same ambiguity handling to the corresponding lookup in skills/workbench-shared/trackers/linear.md at lines 108-114 before updating the Linear issue.skills/workbench-shared/trackers/linear.md (1)
133-145: 🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win
Parse the GraphQL response as JSON.
The success branch only matches the exact text
"success":true; valid JSON containing whitespace or a different field layout will be reported as a failure even when the mutation succeeded. Usejqto inspect.errorsand.data.issueUpdate.success.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@skills/workbench-shared/trackers/linear.md` around lines 133 - 145, Replace the string-pattern response matching in the Linear mutation handling with jq-based JSON parsing: inspect .errors for GraphQL failures and .data.issueUpdate.success for successful updates. Preserve the existing success message for true results and unexpected-response error handling for invalid or unsuccessful responses, including the response payload in diagnostics.
- count scanner crashes separately from findings in the scan summary - correct the README local-scan usage for the flat layout - make the tracker destination value adapter-owned and possibly composite, with Linear bundling team UUID plus optional project id - require an explicit --limit on the bulk sweep pr list - include in_progress in the beads open count, matching the checklist - commit adopted task lines with the breakdown commit - document the checklist single-runner assumption and second-runner stop - fail the merge-closer templates on an ambiguous branch-to-record match - parse the Linear mutation response with jq instead of string matching - treat an explicitly unmapped phase as a documented no-op in updateState - hand off from scaffold with the resolvable reference (full Asana URL)
Fixes Applied SuccessfullyFixed 8 file(s) based on 11 of 14 CodeRabbit feedback item(s); 3 dispositioned. Fixed:
Dispositioned without change:
Commit: |
Summary
Adopts the mattpocock/skills repository shape after the rename to
crod951/skills:skills/at the repo top level; the repo root is the plugin (marketplace.jsonsource: "./",plugin.jsonbeside it in.claude-plugin/)docs/workbench.mdbin/scan-skills.shandbin/sync-versions.shdrop theplugins/*indirection; SkillSpector baseline moves to the repo root; workflow paths updatedcrod951/claude-pluginsreference becomescrod951/skills(GitHub redirects cover stragglers)skills.sh now discovers the skills via its canonical
skills/<name>/SKILL.mdlocation instead of the recursive fallback.Test plan
bash -nclean on both scripts; marketplace.json and plugin.json parse;bin/sync-versions.shruns clean against the new layoutnpx skills add <repo> -a kiro-cli: found 3 skills, installedexecute,scaffold,workbench-shared;../workbench-shared/refs resolve post-install/plugin install workbench@crod951after mergeSummary by CodeRabbit
New Features
skills/directory.Bug Fixes
.workbench/matches.Documentation
crod951/skillssetup, including updated references throughout.Chores