Skip to content

feat(workbench): agent-portable scaffold and execute skills for Asana and Linear - #5

Merged
crodris merged 95 commits into
mainfrom
feat/workbench
Jul 30, 2026
Merged

feat(workbench): agent-portable scaffold and execute skills for Asana and Linear#5
crodris merged 95 commits into
mainfrom
feat/workbench

Conversation

@crodris

@crodris crodris commented Jul 30, 2026

Copy link
Copy Markdown
Owner

Replaces the previous plugin with workbench: two agent skills, scaffold and execute, that carry a tracker issue from requirements to an open pull request. Written clean-room rather than ported, so the abstractions are designed for the matrix rather than retrofitted onto one tracker.

What it does

scaffold turns requirements into a parent issue with sub-issues, grounded in the actual codebase rather than the prose alone. execute takes an issue and drives it to an open pull request: plan document, task-by-task commits, tests, push, PR.

Portability

Three axes, each behind a contract so the skill bodies never name a tool:

  • Trackers: Asana and Linear, behind an 8-operation contract with inProgress/inReview/done phases mapped to real tracker states during first-run setup.
  • Task memory: beads when present, a committed markdown checklist otherwise, behind a 6-operation contract. Resolution is per-issue-first, so a backend never switches mid-issue.
  • Agents: Claude Code and Kiro, via the Open Agent Skills format, with one thin per-agent notes file.

The core skill bodies contain zero tool names; a grep for mcp_, the task tools, Glob, Grep, and bd returns nothing in either. Capability language lives only in the adapter files.

Approval modes

ask is the default; auto skips preference gates and never skips safety stops. Ten stops fire in both modes, four of which this project's own testing proved necessary: an unverified MCP, an unfixable test failure, a base-branch conflict, and an abandoned pull request. Mode resolves invocation → profile → ask, and carries across a skill handoff.

Merge closure

Asana has no native merge-closure, so closure is tiered: native tracker integration where it exists, an optional hardened GitHub Action, a passive sweep as backstop, and on-demand say-so. Both workflow templates pass the branch through env rather than interpolating it into run:, since a branch name is attacker-controlled text and a tracker token is in scope.

Security boundary

The skills never search the filesystem, environment, config files, or token caches for tracker credentials; never call a tracker's HTTP API directly; and never modify MCP or agent configuration to enable a disabled server. During testing an agent tried all four of those in sequence, including calling Asana's API with a scavenged token. Prose prohibitions failed twice. What worked was a preflight gate that gives the agent a useful action — deliver setup instructions — instead of only forbidding the bypass. This is instructions to a model, not a sandbox, and the README says so.

Verification

Live end-to-end runs against both Asana and Linear, plus Kiro, in throwaway repositories, with every run and finding recorded in docs/superpowers/testing/. Findings that came out of execution rather than reasoning include an unscoped task claim that could close the wrong sub-issue, an unsatisfiable checklist close rule that made the no-beads path unable to open a pull request, and an Asana GID extraction that failed on the exact URL shape in use.

Mechanically: both YAML templates parse, both run: blocks pass bash -n, every bd flag checked against 0.49.0, GID extraction tested against all four Asana URL shapes, and both skills within their line ceilings.

Known gaps

Kiro is unverified since the rename; its quota resets Aug 1 and a smoke test is queued. The Linear merge-closer template has not been run end to end, which the file itself states.

Summary by CodeRabbit

  • New Features

    • Introduced the Workbench plugin for scaffolding and executing issue-driven workflows with Asana or Linear.
    • Added a SkillSpector CI pipeline that generates reports and can fail builds on non-suppressed findings.
  • Documentation

    • Updated marketplace and README to spotlight Workbench’s end-to-end flow and installation (including Workbench-only availability).
    • Removed legacy StackGen and prior issue-lifecycle command documentation; refreshed contributing guidance and added Security Scanning instructions.
    • Expanded Workbench specs for tracker integrations, approvals, and durable task memory.
  • Behavior Changes

    • Improved SkillSpector report rendering for inline code blocks to avoid malformed Markdown.

crodris added 30 commits July 28, 2026 09:53
crodris added 4 commits July 30, 2026 01:25
Auto mode skips the draft approval, the handoff, precedence-settleable ties,
and unambiguous setup answers. It never skips the safety stops: an unverified
MCP, an unfixable test failure, a base-branch conflict, an abandoned PR, a
phase with no matching state, an ambiguous setup answer, or an unclear reply.
Add bin/scan-skills.sh, which scans every plugins/*/skills/* skill and
fails on any non-suppressed finding, gating on the JSON report because
the CLI always exits 0. A per-plugin baseline suppresses reviewed false
positives with documented reasons (workbench: RA2 and EA2, both matched
benign scaffold SKILL.md phrasing).

The workflow runs on main pushes and PRs touching skills, uploads JSON
and Markdown reports as artifacts, and enables the LLM semantic stage
when the ANTHROPIC_API_KEY secret is configured, falling back to static
analysis otherwise.
Drop stackgen from the marketplace, the README, and the plugins tree so
the repo ships only workbench. Existing installs keep working from git
history, but the marketplace no longer offers stackgen.

BREAKING CHANGE: stackgen is no longer installable from this marketplace.
@coderabbitai

coderabbitai Bot commented Jul 30, 2026

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

The PR replaces legacy marketplace content with Workbench, adding scaffold and execute skills, tracker and memory contracts, documentation, SkillSpector scanning, CI integration, and end-to-end validation records.

Changes

Workbench plugin migration

Layer / File(s) Summary
Catalog metadata and SkillSpector scanning
.claude-plugin/marketplace.json, .github/workflows/skillspector.yml, bin/scan-skills.sh, README.md, plugins/workbench/.claude-plugin/*, plugins/workbench/.skillspector-baseline.yaml
Marketplace and onboarding content reference Workbench; SkillSpector scanning, suppression baselines, adaptive report rendering, and CI execution are added.
Architecture and migration contracts
docs/superpowers/specs/*, docs/superpowers/plans/*
The design and implementation plan define Workbench skills, adapter contracts, memory backends, agent compatibility, validation, and migration steps.
Tracker adapter contracts
plugins/workbench/skills/shared/trackers*
Tracker selection, destination resolution, profile setup, Linear behavior, Asana behavior, and merge-closure workflows are specified.
Durable task-memory adapters
plugins/workbench/skills/shared/memory/*
A six-operation durable memory contract and beads/checklist adapter formats and state transitions are documented.
Scaffold and execute skills
plugins/workbench/skills/scaffold/SKILL.md, plugins/workbench/skills/execute/SKILL.md, plugins/workbench/skills/shared/{agents,approval,conventions}.md
Workbench defines MCP-only tracker access, approval modes, resumable task execution, issue scaffolding, commits, pull requests, and shared agent conventions.
Validation and E2E records
docs/superpowers/testing/*, plugins/workbench/README.md
End-to-end runs document tracker, memory, agent, merge-closure, failure-path, and approval-mode validation results.

Estimated code review effort: 4 (Complex) | ~60 minutes

Sequence Diagram(s)

sequenceDiagram
  participant User
  participant ScaffoldSkill
  participant TrackerMCP
  participant ExecuteSkill
  participant MemoryBackend
  participant GitHub
  User->>ScaffoldSkill: submit requirements
  ScaffoldSkill->>TrackerMCP: resolve destination and create issue structure
  ScaffoldSkill->>ExecuteSkill: hand off issue reference
  ExecuteSkill->>TrackerMCP: fetch issue and update state
  ExecuteSkill->>MemoryBackend: claim, execute, and close tasks
  ExecuteSkill->>GitHub: commit changes and open pull request
  GitHub->>TrackerMCP: expose merge outcome for closure handling
Loading
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main change: introducing agent-portable workbench scaffold and execute skills for Asana and Linear.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/workbench

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 9

🤖 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 31-43: Update the SkillSpector installation command in the
“Install SkillSpector” step to reference a reviewed immutable commit SHA instead
of the repository’s default Git ref. Keep the existing tool installation and
PATH setup unchanged.

In `@bin/scan-skills.sh`:
- Around line 46-50: Update the missing-directory handling in bin/scan-skills.sh
so an explicitly requested plugin whose skills_dir does not exist causes the
scan to fail instead of continuing. Preserve the warning context, but return a
nonzero status or otherwise propagate an error so the script cannot report
success when no requested skills were scanned.

In `@docs/superpowers/specs/2026-07-28-issue-lifecycle-v3-design.md`:
- Line 30: Update the fenced diagram block in the issue lifecycle design
specification to include an explicit language identifier, using text or another
appropriate non-code language, so it satisfies Markdown rule MD040.
- Around line 19-25: Update the design contract throughout the referenced
sections to use the approved Workbench terminology and implementation: replace
issue-lifecycle and issue-intake names and paths with scaffold and execute under
.workbench/, and update related skill names and workflow references. Correct the
Linear merge-closure description to require the adapter’s explicit integration
setup rather than implying it is automatic, while preserving the existing design
scope and tracker support.

In `@plugins/workbench/skills/execute/SKILL.md`:
- Line 94: Update the final closing-commit instructions in the claimNext
completion flow to stage only the allowlisted task-state files: the beads export
file and relevant records under .workbench/. Replace the broad “any changed or
new task-state files under .beads/” wording with explicit path-based staging
guidance, and ensure ignored beads database/runtime files are never included.

In `@plugins/workbench/skills/scaffold/SKILL.md`:
- Around line 40-53: Reorder the workflow so tracker resolution occurs before
Step 1 preflight whenever no profile exists and both Asana and Linear MCPs are
connected. Ask the user once to choose the tracker, then run preflight and the
done-on-merge sweep against that selected tracker; preserve existing behavior
for explicit tracker hints, configured profiles, and single connected MCPs.

In `@plugins/workbench/skills/shared/approval.md`:
- Line 45: Revise the exhaustive-list statement in the approval-mode guidance so
it only claims to cover approval-mode stops, not every possible execute-skill
stop. Preserve the instruction to classify newly added stops explicitly, or
expand the list to include missing shared files, unavailable beads for an
existing beads repository, and task/commit reconciliation failures.

In `@plugins/workbench/skills/shared/memory/checklist.md`:
- Line 43: Replace the self-referential hash workflow in close(taskId) within
plugins/workbench/skills/shared/memory/checklist.md at lines 43-43 with a
non-self-referential approach: use a separate bookkeeping store or commit, or
omit the hash from the task line. Update the corresponding repository-wide rule
in plugins/workbench/skills/shared/conventions.md at lines 63-67 to require the
same mechanism, and remove the amend-based self-hash requirement.

In `@plugins/workbench/skills/shared/trackers/asana.md`:
- Around line 78-85: The Asana sweep must durably persist each recorded “PR
closed unmerged” observation before a cleanup-only run returns: update the Asana
workflow in plugins/workbench/skills/shared/trackers/asana.md lines 78-85 to
commit and push the marker, or define an equivalent durable persistence path.
Apply the same requirement to the Linear abandonment-recording flow in
plugins/workbench/skills/shared/trackers/linear.md lines 42-43; ensure both
adapters do not report the same PR repeatedly after successful persistence.
🪄 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: e9014c41-e9ca-478d-9930-972ae58b4617

📥 Commits

Reviewing files that changed from the base of the PR and between b93d504 and 0926191.

📒 Files selected for processing (43)
  • .claude-plugin/marketplace.json
  • .github/workflows/skillspector.yml
  • README.md
  • bin/scan-skills.sh
  • docs/superpowers/plans/2026-07-28-issue-lifecycle-v3.md
  • docs/superpowers/specs/2026-07-28-issue-lifecycle-v3-design.md
  • docs/superpowers/testing/2026-07-28-issue-lifecycle-v3-e2e-log.md
  • plugins/issue-lifecycle/README.md
  • plugins/issue-lifecycle/commands/commit.md
  • plugins/issue-lifecycle/commands/issue-finish.md
  • plugins/issue-lifecycle/commands/issue-start.md
  • plugins/issue-lifecycle/commands/issue-task.md
  • plugins/stackgen/.claude-plugin/plugin.json
  • plugins/stackgen/README.md
  • plugins/stackgen/agents/architecture-analyzer.md
  • plugins/stackgen/agents/backend-analyzer.md
  • plugins/stackgen/agents/code-quality-analyzer.md
  • plugins/stackgen/agents/database-analyzer.md
  • plugins/stackgen/agents/devops-analyzer.md
  • plugins/stackgen/agents/frontend-analyzer.md
  • plugins/stackgen/agents/monitoring-analyzer.md
  • plugins/stackgen/agents/performance-analyzer.md
  • plugins/stackgen/agents/security-analyzer.md
  • plugins/stackgen/agents/stack-detector.md
  • plugins/stackgen/agents/testing-analyzer.md
  • plugins/stackgen/commands/analyze.md
  • plugins/stackgen/commands/check.md
  • plugins/stackgen/commands/quick.md
  • plugins/stackgen/commands/refresh.md
  • plugins/workbench/.claude-plugin/plugin.json
  • plugins/workbench/.skillspector-baseline.yaml
  • plugins/workbench/README.md
  • plugins/workbench/skills/execute/SKILL.md
  • plugins/workbench/skills/scaffold/SKILL.md
  • plugins/workbench/skills/shared/agents.md
  • plugins/workbench/skills/shared/approval.md
  • plugins/workbench/skills/shared/conventions.md
  • plugins/workbench/skills/shared/memory.md
  • plugins/workbench/skills/shared/memory/beads.md
  • plugins/workbench/skills/shared/memory/checklist.md
  • plugins/workbench/skills/shared/trackers.md
  • plugins/workbench/skills/shared/trackers/asana.md
  • plugins/workbench/skills/shared/trackers/linear.md
💤 Files with no reviewable changes (22)
  • plugins/stackgen/agents/performance-analyzer.md
  • plugins/issue-lifecycle/README.md
  • plugins/stackgen/agents/testing-analyzer.md
  • plugins/stackgen/agents/security-analyzer.md
  • plugins/issue-lifecycle/commands/issue-start.md
  • plugins/stackgen/README.md
  • plugins/stackgen/agents/frontend-analyzer.md
  • plugins/stackgen/agents/database-analyzer.md
  • plugins/stackgen/agents/architecture-analyzer.md
  • plugins/stackgen/.claude-plugin/plugin.json
  • plugins/stackgen/agents/monitoring-analyzer.md
  • plugins/stackgen/commands/check.md
  • plugins/stackgen/commands/refresh.md
  • plugins/stackgen/agents/devops-analyzer.md
  • plugins/stackgen/commands/analyze.md
  • plugins/stackgen/agents/backend-analyzer.md
  • plugins/stackgen/commands/quick.md
  • plugins/issue-lifecycle/commands/issue-finish.md
  • plugins/issue-lifecycle/commands/commit.md
  • plugins/issue-lifecycle/commands/issue-task.md
  • plugins/stackgen/agents/stack-detector.md
  • plugins/stackgen/agents/code-quality-analyzer.md

Comment thread .github/workflows/skillspector.yml
Comment thread bin/scan-skills.sh
Comment thread docs/superpowers/specs/2026-07-28-issue-lifecycle-v3-design.md
Comment thread docs/superpowers/specs/2026-07-28-issue-lifecycle-v3-design.md Outdated
Comment thread plugins/workbench/skills/execute/SKILL.md Outdated
Comment thread plugins/workbench/skills/scaffold/SKILL.md Outdated
Comment thread plugins/workbench/skills/shared/approval.md Outdated
Comment thread plugins/workbench/skills/shared/memory/checklist.md Outdated
Comment thread plugins/workbench/skills/shared/trackers/asana.md Outdated
- pin SkillSpector install to reviewed commit (v2.5.0)
- fail scan-skills.sh when an explicitly requested plugin is missing
- mark issue-lifecycle v3 design as implemented under the Workbench names
- add fenced-block language for MD040
- restrict the final closing commit to allowlisted task-state paths
- resolve an ambiguous tracker before preflight in scaffold
- scope the approval stop list to approval-mode stops only
- replace the impossible self-hash amend with a deferred hash append
- require commit+push of closed-unmerged PR markers in both adapters
@crodris

crodris commented Jul 30, 2026

Copy link
Copy Markdown
Owner Author

Fixes Applied Successfully

Fixed 10 file(s) based on 9 CodeRabbit feedback item(s).

Files modified:

  • .github/workflows/skillspector.yml — pinned SkillSpector install to commit 34f6030 (v2.5.0)
  • bin/scan-skills.sh — missing explicitly requested plugin now fails the scan instead of passing
  • docs/superpowers/specs/2026-07-28-issue-lifecycle-v3-design.md — implementation note mapping the design's names to the Workbench rename, Linear merge-closure correction, and MD040 fence language
  • plugins/workbench/skills/execute/SKILL.md — final closing commit stages only allowlisted task-state paths (beads JSONL export + metadata.json, this issue's .workbench/ files); never sweeps directories
  • plugins/workbench/skills/scaffold/SKILL.md — ambiguous tracker (no profile, both MCPs connected) is resolved before preflight and the sweep
  • plugins/workbench/skills/shared/approval.md — stop list now claims exhaustiveness only for approval-mode stops; unconditional stops named
  • plugins/workbench/skills/shared/memory/checklist.md + shared/conventions.md — removed the impossible self-hash amend; hash is appended after committing and rides the next commit touching the file
  • plugins/workbench/skills/shared/trackers/asana.md + linear.md — closed-unmerged PR markers must be committed and pushed before the sweep returns

Commit: c27b83f

The latest autofix changes are on the feat/workbench branch.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 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 `@bin/scan-skills.sh`:
- Around line 48-52: Update the plugin scanning flow in bin/scan-skills.sh to
track whether each requested plugin yields at least one child SKILL.md file, and
exit with an error when a plugin’s skills directory exists but no skills are
scanned. Preserve the existing missing-directory failure and successful scanning
behavior for plugins with at least one skill.
🪄 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: 9faa6f38-13a8-4ee0-b1af-d3c42e2ccdc2

📥 Commits

Reviewing files that changed from the base of the PR and between 0926191 and c27b83f.

📒 Files selected for processing (10)
  • .github/workflows/skillspector.yml
  • bin/scan-skills.sh
  • docs/superpowers/specs/2026-07-28-issue-lifecycle-v3-design.md
  • plugins/workbench/skills/execute/SKILL.md
  • plugins/workbench/skills/scaffold/SKILL.md
  • plugins/workbench/skills/shared/approval.md
  • plugins/workbench/skills/shared/conventions.md
  • plugins/workbench/skills/shared/memory/checklist.md
  • plugins/workbench/skills/shared/trackers/asana.md
  • plugins/workbench/skills/shared/trackers/linear.md
🚧 Files skipped from review as they are similar to previous changes (2)
  • plugins/workbench/skills/shared/trackers/linear.md
  • docs/superpowers/specs/2026-07-28-issue-lifecycle-v3-design.md

Comment thread bin/scan-skills.sh
An existing plugins/<name>/skills/ directory with no child SKILL.md files
scanned zero skills and still reached PASS, so deleting or renaming all
skill files could bypass the gate. Track the per-plugin scanned count and
error when it is zero. Also guards skillspector crashes so a non-zero exit
produces a counted failure instead of killing the run, and renders the
Markdown report from the same JSON that gated CI.
@crodris

crodris commented Jul 30, 2026

Copy link
Copy Markdown
Owner Author

Fixes Applied Successfully

Fixed 1 file based on 1 CodeRabbit feedback item.

Files modified:

  • bin/scan-skills.sh — a plugin whose skills/ directory exists but contains no */SKILL.md now fails the scan (per-plugin scanned counter, error on zero) instead of contributing to a false PASS

Commit: 1d5abb0

The latest autofix changes are on the feat/workbench branch.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 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 `@bin/scan-skills.sh`:
- Around line 100-136: Update the embedded report renderer’s code-snippet output
in the Python heredoc, adding a code_fence helper that chooses a backtick fence
longer than the longest consecutive backtick run in the snippet. Use that
dynamically selected fence for both the opening and closing delimiters around
f["code_snippet"], preserving the existing output for snippets without embedded
fences.
🪄 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: a4f7bd4e-d464-4acb-82c5-c56fb358c13a

📥 Commits

Reviewing files that changed from the base of the PR and between c27b83f and 1d5abb0.

📒 Files selected for processing (1)
  • bin/scan-skills.sh

Comment thread bin/scan-skills.sh
A snippet containing a triple-backtick run terminated the fixed fence
early and corrupted everything after it in the rendered Markdown report,
plausibly hiding later findings. Pick a fence one backtick longer than
the longest run in the snippet.
@crodris

crodris commented Jul 30, 2026

Copy link
Copy Markdown
Owner Author

Fixes Applied Successfully

Fixed 1 file based on 1 CodeRabbit feedback item.

Files modified:

  • bin/scan-skills.sh — Markdown report snippets now use a dynamic fence length (one backtick longer than the longest run in the snippet), so a snippet containing ``` can no longer terminate the fence early and corrupt the rest of the report

Commit: b7d5341

The latest autofix changes are on the feat/workbench branch.

- move the tracker-agnostic done-on-merge sweep and closed-unmerged rules
  into shared/trackers.md; adapters keep only their own closure actions
- add a hash-based cross-check to commit reconciliation
- enumerate all five first-run setup steps in scaffold
- fix the broken trackers/asana.md relative link from memory/checklist.md
- rewrite the root README Contributing section for the skills architecture
- render the scan report from the gating JSON (one scan per skill) and
  guard skillspector crashes; document the baseline EA2 match scope
- correct the beads-vs-checklist dependency claim in the workbench README
- fix Kiro install wording, scaffold hand-off ref resolvability, checklist
  parent-close no-op, and stale intake references
- reflow multi-sentence markdown lines to one sentence per line

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
bin/scan-skills.sh (2)

69-77: 🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win

Distinguish scan errors from findings in the final verdict.

A SkillSpector crash increments failures, but the final message says those skills have non-suppressed findings and suggests adding a baseline. Track scan errors separately or make the final message generic so provider/tool failures are not misdiagnosed as suppressible findings.

Also applies to: 160-165

🤖 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 `@bin/scan-skills.sh` around lines 69 - 77, Update the scan error handling
around the skillspector invocation and the final verdict reporting to
distinguish tool/scan failures from detected findings. Track crashes separately
from findings, or make the final summary generic enough not to claim scan errors
are non-suppressed findings or recommend adding a baseline; preserve the
existing handling for actual findings.

100-106: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Prevent per-skill report filename collisions.

$plugin-$skill is not injective: foo-bar/baz and foo/bar-baz both overwrite foo-bar-baz.json and .md. Store reports under separate plugin directories or use a collision-proof encoding, otherwise artifacts can hide findings from one scanned skill.

Proposed fix
     if [ -n "${REPORT_DIR:-}" ]; then
-      cp "$json" "$REPORT_DIR/$plugin-$skill.json"
+      mkdir -p "$REPORT_DIR/$plugin"
+      cp "$json" "$REPORT_DIR/$plugin/$skill.json"
...
-      python3 - "$json" "$plugin/$skill" > "$REPORT_DIR/$plugin-$skill.md" <<'PY'
+      python3 - "$json" "$plugin/$skill" > "$REPORT_DIR/$plugin/$skill.md" <<'PY'
🤖 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 `@bin/scan-skills.sh` around lines 100 - 106, Update the report-writing logic
in the REPORT_DIR block to generate collision-proof paths for each plugin and
skill, such as storing each skill’s JSON and Markdown reports under a separate
plugin directory or encoding both components unambiguously. Ensure distinct
plugin/skill pairs like foo-bar/baz and foo/bar-baz cannot overwrite one
another.
🧹 Nitpick comments (1)
bin/scan-skills.sh (1)

23-25: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Pin the local SkillSpector install hint to the CI revision. The fallback install still points at the moving default branch; use the same @34f60308522f45447cd343da0aad77bcea308ad4 pin so local scans match CI behavior.

🤖 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 `@bin/scan-skills.sh` around lines 23 - 25, Update the fallback installation
command in bin/scan-skills.sh to pin the skillspector Git URL to revision
34f60308522f45447cd343da0aad77bcea308ad4, matching the CI revision while
preserving the existing missing-command message.
🤖 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.

Outside diff comments:
In `@bin/scan-skills.sh`:
- Around line 69-77: Update the scan error handling around the skillspector
invocation and the final verdict reporting to distinguish tool/scan failures
from detected findings. Track crashes separately from findings, or make the
final summary generic enough not to claim scan errors are non-suppressed
findings or recommend adding a baseline; preserve the existing handling for
actual findings.
- Around line 100-106: Update the report-writing logic in the REPORT_DIR block
to generate collision-proof paths for each plugin and skill, such as storing
each skill’s JSON and Markdown reports under a separate plugin directory or
encoding both components unambiguously. Ensure distinct plugin/skill pairs like
foo-bar/baz and foo/bar-baz cannot overwrite one another.

---

Nitpick comments:
In `@bin/scan-skills.sh`:
- Around line 23-25: Update the fallback installation command in
bin/scan-skills.sh to pin the skillspector Git URL to revision
34f60308522f45447cd343da0aad77bcea308ad4, matching the CI revision while
preserving the existing missing-command message.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: f4e7aed8-ead7-466c-a6ce-c95b33966d63

📥 Commits

Reviewing files that changed from the base of the PR and between 1d5abb0 and b7d5341.

📒 Files selected for processing (1)
  • bin/scan-skills.sh

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 5

🤖 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 33-36: Update the comment above the skillspector installation in
the workflow to say “Bump the commit SHA deliberately” instead of referring to a
tag, while preserving the existing reproducibility guidance and pinned revision.

In `@plugins/workbench/.skillspector-baseline.yaml`:
- Around line 24-28: Update the EA2 suppression entry in
.skillspector-baseline.yaml to target the specific skill file path rather than
the generic "SKILL.md" basename. Preserve the existing suppression message and
rationale while ensuring unrelated skills under the plugin remain subject to EA2
findings.

In `@plugins/workbench/skills/shared/trackers.md`:
- Around line 98-100: Update the closed-unmerged pull request handling described
in the tracker instructions to require durable persistence of the `PR closed
unmerged` marker in the issue’s `.workbench/` file before the cleanup run
returns. Do not require committing or pushing the change, but ensure an
uncommitted marker is not treated as persisted; preserve deduplication for the
same PR and reporting for later distinct PRs.
- Around line 53-56: The invocation’s tracker must be resolved before preflight
and merge-sweep operations so all layers use the same tracker. In
plugins/workbench/skills/shared/trackers.md lines 53-56, prioritize an explicit
invocation tracker before profile and connected-MCP inference; in
plugins/workbench/skills/scaffold/SKILL.md lines 40-43, preflight the
invocation-selected tracker when supplied; in
plugins/workbench/skills/execute/SKILL.md lines 50-57, determine the issue
reference and tracker before preflight or pass both explicitly into preflight.

In `@README.md`:
- Line 98: Add language identifiers to all three affected fenced blocks: use
text or none for the repository tree in README.md lines 98-98, and use text for
the conversational example in plugins/workbench/README.md lines 168-172 and
approval-mode example at lines 208-211.
🪄 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: 271d593e-f0ee-4729-a0bc-376b6cbd4951

📥 Commits

Reviewing files that changed from the base of the PR and between b7d5341 and 2af96d7.

📒 Files selected for processing (16)
  • .github/workflows/skillspector.yml
  • README.md
  • docs/superpowers/plans/2026-07-28-issue-lifecycle-v3.md
  • docs/superpowers/testing/2026-07-28-issue-lifecycle-v3-e2e-log.md
  • plugins/workbench/.skillspector-baseline.yaml
  • plugins/workbench/README.md
  • plugins/workbench/skills/execute/SKILL.md
  • plugins/workbench/skills/scaffold/SKILL.md
  • plugins/workbench/skills/shared/agents.md
  • plugins/workbench/skills/shared/approval.md
  • plugins/workbench/skills/shared/conventions.md
  • plugins/workbench/skills/shared/memory/beads.md
  • plugins/workbench/skills/shared/memory/checklist.md
  • plugins/workbench/skills/shared/trackers.md
  • plugins/workbench/skills/shared/trackers/asana.md
  • plugins/workbench/skills/shared/trackers/linear.md
🚧 Files skipped from review as they are similar to previous changes (2)
  • plugins/workbench/skills/shared/trackers/linear.md
  • plugins/workbench/skills/shared/memory/beads.md

Comment thread .github/workflows/skillspector.yml
Comment thread plugins/workbench/.skillspector-baseline.yaml
Comment thread plugins/workbench/skills/shared/trackers.md Outdated
Comment thread plugins/workbench/skills/workbench-shared/trackers.md
Comment thread README.md Outdated
- one shared tracker precedence for preflight: invocation-named tracker,
  then reference shape, then profile, then single connected MCP; scaffold
  and execute both point at it so preflight and the run agree
- require commit+push of the closed-unmerged marker before the sweep
  returns, restoring the durability rule lost in the sweep relocation
- add language identifiers to three untyped fences (MD040)
- refer to the pin as a commit SHA, not a tag
@crodris

crodris commented Jul 30, 2026

Copy link
Copy Markdown
Owner Author

Fixes Applied Successfully

Fixed 6 file(s) based on 4 of 5 CodeRabbit feedback item(s); 1 dispositioned in a thread reply.

Files modified:

  • plugins/workbench/skills/shared/trackers.md — preflight now uses one shared precedence (invocation-named tracker > reference shape > profile > single connected MCP); closed-unmerged markers must be committed and pushed before the sweep returns (durability rule restored after the sweep relocation)
  • plugins/workbench/skills/scaffold/SKILL.md, plugins/workbench/skills/execute/SKILL.md — both reference that shared precedence so preflight, the sweep, and the run always target the same tracker
  • README.md, plugins/workbench/README.md — language identifiers on three untyped fences (MD040)
  • .github/workflows/skillspector.yml — comment says commit SHA, not tag

Dispositioned without change:

  • baseline EA2 path scoping — refuted in the thread: scans run per skill dir so Finding.file is always bare SKILL.md; a tighter path silently kills the suppression. Documented caution in the rule covers the residual risk.

Commit: 18a553e

The latest autofix changes are on the feat/workbench branch.

crodris added 4 commits July 30, 2026 10:10
This is a personal skills repo, not one accepting contributions. Also
adds language identifiers to the two remaining untyped fences.
Rename skills/shared/ to skills/workbench-shared/ and give it a marker
SKILL.md so directory-copying installers (npx skills add) carry the
contract files alongside execute and scaffold; the skills CLI names the
installed directory after the skill, so the dir name must match the
../workbench-shared/ references. The marker's description tells agents
it is not invocable.

Scanning the new directory surfaces its documentation text, so the
baseline gains reviewed suppressions: prohibition and setup-question
phrasings (EA2/PE3), the optional merge-closer Action templates' curl
calls (E1), and the unpinned installer command (RP1).

Kiro install docs now lead with npx skills@latest add; manual copy and
symlink remain as the editable-install path.
Managed Claude Code plugin vs editable skills.sh install for any agent,
in collapsible per-agent blocks, followed by the once-per-repo first run.
Root README mirrors the same two-path shape in brief.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant