Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
134 commits
Select commit Hold shift + click to select a range
b43555a
Rewrite skill descriptions as triggers, not workflow summaries
Ovid Apr 26, 2026
f3f6912
docs: design for /paad:agentic-review scope constraint
Ovid Apr 26, 2026
f20bf2b
docs: implementation plan for /paad:agentic-review scope constraint
Ovid Apr 26, 2026
23751b0
agentic-review: add Definitions and Mechanism sections
Ovid Apr 26, 2026
572f022
agentic-review: add touched-lines map to Phase 1
Ovid Apr 26, 2026
ab0c780
agentic-review: require specialists to attribute findings to their model
Ovid Apr 26, 2026
dae33d4
agentic-review: extend Phase 3 verifier with classification and backl…
Ovid Apr 26, 2026
47a290d
agentic-review: align Mechanism directive shape with Phase 3
Ovid Apr 26, 2026
9943478
agentic-review: add Out of Scope section and empty/failure handling t…
Ovid Apr 26, 2026
363f70b
agentic-review: nest OOSC1 finding heading under tier sub-heading
Ovid Apr 26, 2026
2958829
agentic-review: document backlog file format and lifecycle
Ovid Apr 26, 2026
0c86801
agentic-review: expand Post-Review with security and backlog-size war…
Ovid Apr 26, 2026
43bc98c
agentic-review: add scope-related entries to Common Mistakes
Ovid Apr 26, 2026
eb1e5e9
agentic-review: add classification digraph for in-scope/out-of-scope …
Ovid Apr 26, 2026
798225c
help: update agentic-review section to reflect scope classification
Ovid Apr 26, 2026
e144c00
release: bump paad to 1.12.0 (agentic-review scope classification)
Ovid Apr 26, 2026
ea6d6e0
agentic-review: align soft-warning threshold and Suggestions empty-se…
Ovid Apr 26, 2026
698b67f
feat: skills announce themselves with version on invocation
Ovid Apr 26, 2026
fe916d6
agentic-review: announce out-of-scope summary explicitly in Post-Review
Ovid Apr 26, 2026
778ddd1
agentic-review: replace Plan Alignment with Spec Compliance specialist
Ovid May 1, 2026
3db604c
docs: fix CLAUDE.md project-structure tree (I1, I2)
Ovid May 1, 2026
a49a6e1
docs: help/SKILL.md says agentic-review dispatches 6 specialists, not…
Ovid May 1, 2026
b4b4716
agentic-review: drop obsolete `Plan` from backlog Bug class enum (I4)
Ovid May 1, 2026
f28b506
agentic-review: clarify .gitignore advice in security warning (I6)
Ovid May 1, 2026
8807990
docs: update plan/design docs for Plan Alignment -> Spec Compliance s…
Ovid May 1, 2026
6bd6475
agentic-review: tighten wording in mechanism / pre-flight / Phase 3 /…
Ovid May 1, 2026
e2e98b5
agentic-review: arguments and pre-flight clarifications (S3, S4, S9)
Ovid May 1, 2026
83aa677
agentic-review: plug Phase 2/3 contract gaps (S5, S6, S10)
Ovid May 1, 2026
c00addf
Merge branch 'ovid/force-skills-to-load'
Ovid May 1, 2026
0e0888f
Update TODO notes.
Ovid May 1, 2026
9af07e6
Eating our own dogfood: PAAD is now reviewing PAAD
Ovid May 1, 2026
b14d243
Add Phase 1 design and roadmap for skill references conversion
Ovid May 1, 2026
cc4182d
notes: record PR1 fixture commits for Spec Compliance extraction
Ovid May 1, 2026
cb2848b
docs: add PR1 implementation plan for Spec Compliance extraction
Ovid May 1, 2026
73b1779
notes: record marketplace-cache vs working-tree version mismatch hazard
Ovid May 1, 2026
35c7345
notes: working-tree version drift requires synthesizing older fixtures
Ovid May 1, 2026
0f281b7
notes: capture two more PR1 baseline-capture findings
Ovid May 1, 2026
7c9c1fa
notes: capture PR1 Spec Compliance baselines and behavioral checklist
Ovid May 1, 2026
88305c9
notes: tighten PR1 baselines per spec-compliance review
Ovid May 1, 2026
172c2ca
build: add extracted-refs structural guardrail (manifest + check + ma…
Ovid May 1, 2026
22b96b5
agentic-review: extract Spec Compliance specialist to references/
Ovid May 1, 2026
3630c6e
agentic-review: lock PR1 conventions and bump to 1.15.0
Ovid May 1, 2026
068177c
Add local roadmap skill (but not in paad yet)
Ovid May 1, 2026
656b64e
agentic-review: flatten references/ to one directory level
Ovid May 1, 2026
124adea
agentic-review: extract five specialist lenses to references/
Ovid May 1, 2026
afef89d
agentic-review: extract Verifier to references/
Ovid May 1, 2026
e2ae1f3
agentic-review: extract Phase 4 report template to references/
Ovid May 1, 2026
d68a368
agentic-review: lock Phase 1 conventions and bump to 1.16.0
Ovid May 1, 2026
f72f464
docs: tighten Phase 1 retrospective in roadmap and design doc
Ovid May 1, 2026
59fde78
agentic-review: thicken error-handling and contract-integration refs
Ovid May 1, 2026
8ac1484
agentic-review: deterministic bug-class derivation and Spec Complianc…
Ovid May 1, 2026
4bd3f1a
agentic-review: stable status tokens for OOSA routing and bail-outs
Ovid May 1, 2026
45bfba3
agentic-review: propagate untrusted-data preamble to verifier and orc…
Ovid May 1, 2026
49b6bda
build: harden check_extracted_refs.sh against silent no-ops
Ovid May 1, 2026
c3ca3ca
agentic-review: ref-loaded echo-back tokens for subagent dispatch
Ovid May 1, 2026
c8700e6
agentic-review: field-encoding rules for backlog entries
Ovid May 1, 2026
9159261
agentic-review: codify confidence mapping; reconcile plan retrospective
Ovid May 1, 2026
243ac1c
agentic-review: bump version to 1.17.0
Ovid May 1, 2026
29f213c
agentic-review: tighten contracts in references package
Ovid May 1, 2026
536115e
agentic-review: pushback corrections to references-package hardening
Ovid May 1, 2026
273f243
PAAD reviews
Ovid May 2, 2026
95e5b27
Merge branch 'ovid/skill-breakdown'
Ovid May 2, 2026
40b9ad2
Bump version to v1.18.0
Ovid May 2, 2026
93c96de
roadmap skill: refuse to run on main
Ovid May 2, 2026
d5ab0ce
Do not run /roadmap on primary branch (usually main)
Ovid May 2, 2026
64e32e3
Design: roadmap resume checklists + docs/roadmap/ restructure
Ovid May 2, 2026
7aae397
Apply pushback resolutions to roadmap-resume-checklists design
Ovid May 2, 2026
b021bb5
Document /implement idea
Ovid May 2, 2026
46fac7f
Plan: roadmap resume checklists implementation
Ovid May 2, 2026
7ef083c
"CLAUDE.md was read" defence.
Ovid May 2, 2026
4dd6b04
RED: capture baseline failures of /roadmap under interruption
Ovid May 2, 2026
95efa68
Need a Changelog
Ovid May 2, 2026
00447b4
RED: tag rationalization confidence + note A/C shared failure mode
Ovid May 2, 2026
ec35869
Restructure: move docs/roadmap.md and docs/plans/ under docs/roadmap/
Ovid May 2, 2026
e1c7edd
/roadmap: point at docs/roadmap/ layout
Ovid May 2, 2026
57885cd
/roadmap: add checklist file schema and update obligations
Ovid May 2, 2026
d7ba88e
/roadmap: add Step 0 (resume detection + auto-migration)
Ovid May 2, 2026
74c269a
/roadmap: create the run checklist file at step 2a
Ovid May 2, 2026
6729335
/roadmap: wire checklist updates into linear steps
Ovid May 2, 2026
11b67fd
/roadmap: sub-checkbox semantics for pushback/alignment + literal tra…
Ovid May 2, 2026
9b0493f
/roadmap: archive-on-all-planned lifecycle
Ovid May 2, 2026
acc4963
GREEN: verify /roadmap recovery under the same baseline scenarios
Ovid May 2, 2026
d5bab34
/roadmap: extend rationalization table from REFACTOR-cycle findings
Ovid May 2, 2026
30861b2
/roadmap: end-to-end coherence pass — fix Filename hyphen-wrap typo
Ovid May 2, 2026
99eebc3
/roadmap: declare missing 'current step 1' node in §0 digraph
Ovid May 2, 2026
477b441
/roadmap: §0 digraph completeness + stale-checklist archive semantics
Ovid May 2, 2026
04ca558
/roadmap: step 5 idempotency + verification before ticking
Ovid May 2, 2026
4b4f993
/roadmap: collapse severity-count reconciliation to one-line sanity c…
Ovid May 2, 2026
1418f34
/roadmap: tick step 11 before announcing (resolve contradiction with …
Ovid May 2, 2026
53f08b7
/roadmap: layout migration safety pass (C6, I3, I4, I5)
Ovid May 2, 2026
447a974
/roadmap: reconcile slug-rule divergence across artifacts
Ovid May 2, 2026
ca18a3c
/roadmap: §2a dirty-tree check runs on every branch path (I11)
Ovid May 2, 2026
361ca55
/roadmap: archive collision check before git mv (I6)
Ovid May 2, 2026
545f778
/roadmap: §2a accept-grammar rejects accept-token-with-extras (I7)
Ovid May 2, 2026
23d1ea8
/roadmap: strengthen non-empty verification beyond bare test -s (I8)
Ovid May 2, 2026
5dc2f6f
/roadmap: clarify steps 1/2 tick semantics on a fresh vs resume run (I9)
Ovid May 2, 2026
bdbfc6b
/roadmap: §0 re-validates recorded artifact paths on resume (I10)
Ovid May 2, 2026
da0cc0c
/roadmap: phase frontmatter uses single-quoted YAML scalar (I12)
Ovid May 2, 2026
9193dc8
/roadmap: prescribe safe SHA-1 method for .archive-declined hash (I13)
Ovid May 2, 2026
9f3b9e4
/roadmap: git mv invocations include the -- separator (I14)
Ovid May 2, 2026
99e9063
/roadmap: clarity nits — schema annotation, last_updated reminders, p…
Ovid May 2, 2026
4beaabf
/roadmap: Vocabularies section is single source of truth (S3, S4)
Ovid May 2, 2026
fe673e5
CLAUDE.md: document project-local .claude/skills/ lifecycle (S2)
Ovid May 2, 2026
cda3599
/roadmap: post-Na findings additions are user-authored (S9)
Ovid May 2, 2026
d2e8196
PAAD reviews
Ovid May 2, 2026
c340834
Merge branch 'skill-roadmap-refuse-main'
Ovid May 2, 2026
3b1d7cb
/roadmap: brainstorm + plan Phase 2 (agentic-architecture references …
Ovid May 2, 2026
80f96fd
/roadmap: gate phase advancement on previous-phase Done status
Ovid May 2, 2026
c8862e3
/roadmap: In-Progress previous phase routes to executing-plans resume
Ovid May 2, 2026
bafbb27
agentic-architecture: extract Integration & Data specialist to refere…
Ovid May 3, 2026
23db697
agentic-architecture: extract 4 remaining specialists to references/
Ovid May 3, 2026
2dbb429
agentic-architecture: extract verifier to references/
Ovid May 3, 2026
1cb9766
agentic-architecture: extract report template + bump v1.19.0
Ovid May 3, 2026
3e771a8
agentic-architecture: smoke-test report from Phase 2 D.5
Ovid May 3, 2026
b0edc0d
roadmap: mark Phase 2 (agentic-architecture references conversion) Done
Ovid May 3, 2026
51eeba7
F-3: enforce ref-loaded token consistency via manifest column 4
Ovid May 3, 2026
a4e5966
F-1: sync marketplace metadata.version with plugin version
Ovid May 3, 2026
b9c6b28
F-5+F-6: rewrite bump-version in Python with self-verification
Ovid May 3, 2026
46337e3
F-4+F-7: convert_skills handles references/ + a11y rename + drift check
Ovid May 3, 2026
ed593c2
F-2: confidence-floor consistency check across all sites
Ovid May 3, 2026
94d9afc
make: add `all` and `loc` targets
Ovid May 3, 2026
1e4aad2
make: add `release` target with main-branch + clean-tree gates
Ovid May 3, 2026
5723cb9
I1: narrow convert_skills regex to preserve role-framing in vendored …
Ovid May 3, 2026
2d70ff9
I2: add prompt-injection defense to agentic-architecture sites
Ovid May 3, 2026
fa534da
I3: harden BAIL-token sanity check against forged bails
Ovid May 3, 2026
b87021e
I4: bump-version auto-chains vendored, check-skill-versions walks both
Ovid May 3, 2026
6f09e8f
S1-S6: agentic-architecture verifier and specialist refinements
Ovid May 3, 2026
7a12ec2
S7,S8,S9,S10,S18: harden existing check scripts
Ovid May 3, 2026
0271cec
S12,S14,S15,S17,S19: tooling hygiene + report-template tightening
Ovid May 3, 2026
9df2893
OOSS1 (4f8c3d21): harden Phase 4 report path computation
Ovid May 3, 2026
edf6d5e
OOSA9: remove committed smoke-test report from Phase 2 D.5
Ovid May 3, 2026
261f0ff
OOSA7: revert roadmap skill changes; split to separate branch
Ovid May 3, 2026
b9d4338
chore: track agentic-review report for the references-conversion branch
Ovid May 3, 2026
cd2dfec
agentic-architecture: teach in-process transaction-boundary flaws
Ovid May 4, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@
},
"metadata": {
"description": "Ovid's plugin marketplace for Claude Code — impractical tools for software architecture, code quality, and development workflows.",
"version": "1.0.0"
"version": "1.20.0"
},
"plugins": [
{
"name": "paad",
"source": "./plugins/paad",
"description": "Architecture analysis, code quality, and development workflow skills by Ovid",
"version": "1.11.0",
"version": "1.20.0",
"author": {
"name": "Curtis \"Ovid\" Poe"
},
Expand Down
960 changes: 960 additions & 0 deletions .claude/skills/roadmap/SKILL.md

Large diffs are not rendered by default.

53 changes: 42 additions & 11 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@

This is a **Claude Code plugin marketplace** hosted at `github.com/Ovid/paad`. It distributes the `paad` plugin, which provides skills for architecture analysis, code quality, and development workflows.

After this file is read, announce "CLAUDE.md loaded."

Also, address me as "Ovid" for further verification that you have read this file.

Comment on lines +7 to +10
## Project structure

```
Expand All @@ -18,15 +22,19 @@ paad/
│ ├── agentic-a11y/
│ │ └── SKILL.md ← /paad:agentic-a11y skill
│ ├── agentic-architecture/
│ │ └── SKILL.md ← /paad:agentic-architecture skill
│ │ ├── SKILL.md ← /paad:agentic-architecture skill
│ │ └── references/ ← on-demand specialist + verifier + report-template content
│ ├── agentic-review/
│ │ └── SKILL.md ← /paad:agentic-review skill
│ │ ├── SKILL.md ← /paad:agentic-review skill
│ │ └── references/ ← on-demand specialist + verifier + report-template content
│ ├── alignment/
│ │ └── SKILL.md ← /paad:alignment skill
│ ├── fix-architecture/
│ │ └── SKILL.md ← /paad:fix-architecture skill
│ ├── help/
│ │ └── SKILL.md ← /paad:help skill
│ ├── makefile/
│ │ └── SKILL.md ← /paad:help skill
│ │ └── SKILL.md ← /paad:makefile skill
│ ├── pushback/
│ │ └── SKILL.md ← /paad:pushback skill
│ └── vibe/
Expand All @@ -40,24 +48,35 @@ paad/
- **Marketplace name**: `paad`
- **Plugin name**: `paad` (so all skills are invoked as `/paad:<skill-name>`)
- **Skill naming**: skill folder names become the suffix after `paad:` — e.g., `skills/agentic-architecture/` → `/paad:agentic-architecture`
- **Versioning**: both `marketplace.json` and `plugin.json` use semver. Bump the plugin version in `plugin.json` (it takes precedence). Keep `marketplace.json` version in sync.
- **Versioning**: both `marketplace.json` and `plugin.json` use semver, plus every `SKILL.md` carries the plugin version inside its on-invocation announce line. Run `make bump-version VERSION=X.Y.Z` to update plugin.json, marketplace.json (metadata + plugin entry), every source SKILL.md announce line, and the vendored kiro/agent output in one shot; `make check-skill-versions` (run as part of `make test`) catches drift in source and vendored copies alike.
- **Validation**: run `claude plugin validate .` (marketplace) and `claude plugin validate ./plugins/paad` (plugin) before committing
- **Announce on invocation**: every `SKILL.md` must begin its body with the line `**On invocation:** announce "Running paad:<skill-name> v<version>" before anything else.` so users see which skill ran and which version produced the behavior. The literal version string must match `plugin.json`.

## Adding a new skill

1. Create `plugins/paad/skills/<skill-name>/SKILL.md` with frontmatter (`name`, `description`) and instructions
2. Consider `$ARGUMENTS` support — if the skill could benefit from user-provided scope (a file path, directory, branch name, etc.), add an Arguments section documenting usage. Users shouldn't need to remember flags; keep arguments positional and intuitive (e.g., `/paad:skillname path/to/scope`).
3. Add a graphviz digraph (```dot block) covering the skill's decision points and flow. The only exception is `paad:help`, which is a simple display skill. See "Digraph requirements" below.
4. Validate with `claude plugin validate ./plugins/paad`
5. Test locally with `claude --plugin-dir ./plugins/paad`
6. Bump the version in both `plugins/paad/.claude-plugin/plugin.json` and `.claude-plugin/marketplace.json`
7. Update `README.md` to document the new skill under "Available Skills", including argument syntax in the heading
8. Add the new skill to `paad:help` — both the overview table and a detailed help section
2. Add the on-invocation announce line as the very first line of the body (after the closing `---` of frontmatter): `**On invocation:** announce "Running paad:<skill-name> v<version>" before anything else.` — the version literal must match `plugin.json`
3. Consider `$ARGUMENTS` support — if the skill could benefit from user-provided scope (a file path, directory, branch name, etc.), add an Arguments section documenting usage. Users shouldn't need to remember flags; keep arguments positional and intuitive (e.g., `/paad:skillname path/to/scope`).
4. Add a graphviz digraph (```dot block) covering the skill's decision points and flow. The only exception is `paad:help`, which is a simple display skill. See "Digraph requirements" below.
5. Validate with `claude plugin validate ./plugins/paad`
6. Test locally with `claude --plugin-dir ./plugins/paad`
7. Bump the version with `make bump-version VERSION=X.Y.Z` (updates `plugin.json`, `marketplace.json`, every source SKILL.md announce line, and regenerates the vendored kiro/agent output in one shot)
8. Update `README.md` to document the new skill under "Available Skills", including argument syntax in the heading
9. Add the new skill to `paad:help` — both the overview table and a detailed help section
10. Run `make test` to verify all checks pass (validate, version sync, skill-version announce, digraphs, help, README, frontmatter)

## Modifying an existing skill

When changing a skill's behavior, arguments, or output, review `plugins/paad/skills/help/SKILL.md` and update the corresponding help text to match.

## Releasing

Releases run from `main` with a clean working tree:

make release VERSION=X.Y.Z

This composes `bump-version` + `vendored` + `make test` and prints the git commands for the release commit, tag, and push. The Makefile blocks runs from non-`main` branches and from dirty trees. After `make release` completes, review the diff, then commit, tag (`vX.Y.Z`), and push as instructed.

## Digraph requirements

Every skill (except `paad:help`) must include at least one graphviz digraph (`\`\`\`dot` block) that visualizes the skill's decision points and flow. Digraphs must be:
Expand All @@ -74,3 +93,15 @@ When modifying a skill's flow, check that the digraph still matches. When review
- Skill files must be named `SKILL.md` (uppercase) inside a folder whose name becomes the skill name
- Plugin sources in `marketplace.json` use paths relative to the marketplace root (start with `./`)
- Keep marketplace.json plugin descriptions in sync with plugin.json descriptions

## Project-local skills under `.claude/skills/`

The repo also hosts **project-local** skills at `.claude/skills/<name>/SKILL.md` (e.g. `.claude/skills/roadmap/SKILL.md`). These are **not** part of the `paad` plugin and follow a different lifecycle:

- **Not distributed** — they live in this repo only and are picked up automatically by Claude Code when it runs in this working directory. There is no marketplace, no `claude plugin validate` step, no `plugin.json`, no version field.
- **No `make bump-version` impact** — `make bump-version` rewrites `plugin.json`, `marketplace.json`, and every `plugins/paad/skills/*/SKILL.md` announce line. Project-local SKILL.md files are skipped on purpose. They have no announce-line version, no `paad:<name>` namespace.
- **No `make test` checks** — the Makefile's check-frontmatter / check-digraphs / check-help / check-readme / check-skill-versions targets all walk `plugins/paad/skills/`. They do not enforce anything against `.claude/skills/`.
- **Edit-and-commit only** — change the SKILL.md, commit, you're done. No version bump, no help table edit, no README entry, no `paad:help` cross-reference.
- **Naming** — invoke as `/<name>` (no `paad:` prefix), because they're not in a plugin. `/roadmap`, not `/paad:roadmap`.

When reviewing or modifying a `.claude/skills/<name>/SKILL.md`, do not chase the paad-plugin conventions (announce lines, version literals, help / README cross-references). They don't apply here.
147 changes: 137 additions & 10 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,13 +1,22 @@
# lint, format, and cover targets are intentionally absent: this project is
# 95% Markdown specs with a small Python/Bash tooling surface, no test
# framework supports coverage for the bash-fixture-driven checks, and no
# linter/formatter is configured. `make test` is the integration surface.

SKILLS_DIR := plugins/paad/skills
SKILL_DIRS := $(wildcard $(SKILLS_DIR)/*)
SKILL_NAMES := $(notdir $(SKILL_DIRS))
VENDORED_KIRO_SKILLS_DIR := kiro_and_antigravity/skills/.kiro/skills
MAIN_BRANCH ?= main

.PHONY: help test validate check-versions check-digraphs check-help check-readme check-frontmatter
.PHONY: help all test validate check-versions check-skill-versions check-digraphs check-help check-readme check-frontmatter check-extracted-refs test-check-extracted-refs test-bump-version test-convert-skills check-prompt-injection-defense test-check-prompt-injection-defense bump-version vendored check-vendored check-confidence-floor test-check-confidence-floor loc release

help: ## Show this help
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf " %-15s %s\n", $$1, $$2}'
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf " %-22s %s\n", $$1, $$2}'

all: test ## Full CI pass (currently equivalent to `test`; see header comment)

test: validate check-versions check-digraphs check-help check-readme check-frontmatter ## Run all checks
test: validate check-versions check-skill-versions check-digraphs check-help check-readme check-frontmatter test-check-extracted-refs check-extracted-refs test-bump-version test-convert-skills test-check-prompt-injection-defense check-prompt-injection-defense check-vendored test-check-confidence-floor check-confidence-floor ## Run all checks
@echo "All checks passed."

validate: ## Validate marketplace and all plugins
Expand All @@ -17,14 +26,42 @@ validate: ## Validate marketplace and all plugins
claude plugin validate "$$dir" || exit 1; \
done

check-versions: ## Check marketplace.json and plugin.json versions match
@marketplace_ver=$$(python3 -c "import json; print(json.load(open('.claude-plugin/marketplace.json'))['plugins'][0]['version'])"); \
plugin_ver=$$(python3 -c "import json; print(json.load(open('plugins/paad/.claude-plugin/plugin.json'))['version'])"); \
if [ "$$marketplace_ver" != "$$plugin_ver" ]; then \
echo "FAIL: Version mismatch — marketplace.json ($$marketplace_ver) != plugin.json ($$plugin_ver)"; \
exit 1; \
check-versions: ## Check marketplace.json (metadata + every plugin entry) and plugin.json versions all match
@python3 scripts/check_versions.py

check-skill-versions: ## Check every SKILL.md (source + vendored kiro) announces the correct version
@plugin_ver=$$(python3 -c "import json; print(json.load(open('plugins/paad/.claude-plugin/plugin.json'))['version'])"); \
fail=0; \
for dir in $(SKILL_DIRS); do \
name=$$(basename "$$dir"); \
file="$$dir/SKILL.md"; \
if ! grep -qF "Running paad:$$name v$$plugin_ver\"" "$$file" 2>/dev/null; then \
echo "FAIL: $$name is missing or has wrong version announcement (expected v$$plugin_ver) at $$file"; \
fail=1; \
fi; \
done; \
if [ -d "$(VENDORED_KIRO_SKILLS_DIR)" ]; then \
for dir in $(VENDORED_KIRO_SKILLS_DIR)/*; do \
[ -d "$$dir" ] || continue; \
name=$$(basename "$$dir"); \
file="$$dir/SKILL.md"; \
[ -f "$$file" ] || continue; \
if ! grep -qF "Running paad:$$name v$$plugin_ver\"" "$$file" 2>/dev/null; then \
echo "FAIL: vendored $$name is missing or has wrong version announcement (expected v$$plugin_ver) at $$file — run 'make vendored' after a version bump"; \
fail=1; \
fi; \
done; \
fi; \
echo "Versions match: $$plugin_ver"
if [ "$$fail" -eq 1 ]; then exit 1; fi; \
echo "All skills announce v$$plugin_ver (source + vendored)."

bump-version: ## Bump version across plugin.json, marketplace.json (metadata + plugin entries), all SKILL.md, and the vendored kiro/agent output (usage: make bump-version VERSION=X.Y.Z)
@if [ -z "$(VERSION)" ]; then \
echo "Usage: make bump-version VERSION=X.Y.Z"; \
exit 1; \
fi
@python3 scripts/bump_version.py "$(VERSION)"
@$(MAKE) --no-print-directory vendored

check-digraphs: ## Check every skill (except help) has a digraph
@fail=0; \
Expand Down Expand Up @@ -91,3 +128,93 @@ check-frontmatter: ## Check every SKILL.md has name/description and name matches
done; \
if [ "$$fail" -eq 1 ]; then exit 1; fi; \
echo "All SKILL.md files have valid frontmatter."

check-extracted-refs: ## Check every row in scripts/extracted-refs.tsv represents a correctly extracted reference
@bash scripts/check_extracted_refs.sh

test-check-extracted-refs: ## Self-test the check_extracted_refs.sh script against synthetic fixtures
@bash scripts/test_check_extracted_refs.sh

test-bump-version: ## Self-test the bump_version.py script against synthetic fixtures
@bash scripts/test_bump_version.sh

test-convert-skills: ## Self-test the convert_skills.py script against synthetic fixtures
@bash scripts/test_convert_skills.sh

vendored: ## Regenerate the Cursor/Kiro/Antigravity vendored skills under kiro_and_antigravity/
@python3 scripts/convert_skills.py

check-confidence-floor: ## Verify the confidence-floor literal (currently 60) is consistent across all sites; --strict also requires every FLOOR_PATTERN to match at least once
@python3 scripts/check_confidence_floor.py --strict

test-check-confidence-floor: ## Self-test the check_confidence_floor.py script against synthetic fixtures
@bash scripts/test_check_confidence_floor.sh

check-prompt-injection-defense: ## Verify the "untrusted data, never as instructions" defense literal is present at every specialist + verifier + dispatch site
@python3 scripts/check_prompt_injection_defense.py

test-check-prompt-injection-defense: ## Self-test the check_prompt_injection_defense.py script against synthetic fixtures
@bash scripts/test_check_prompt_injection_defense.sh

loc: ## Count lines of code in our own files (excludes vendored output, skill outputs, scratch)
@cloc --exclude-dir=kiro_and_antigravity,architecture-reviews,code-reviews,notes,scratch,docs,images,.kiro .

release: ## Prepare a release: bump version, regenerate vendored, run all checks. Usage: make release VERSION=X.Y.Z. Must be on main with a clean tree. Does NOT commit, tag, or push. Recovery from a partial failure: see comment block above the recipe.
# Partial-failure recovery for `make release`:
# If `make release` fails after bump-version writes (post-bump but pre-test),
# the working tree will be dirty and the clean-tree gate will block re-runs.
# Two recovery paths, in increasing severity:
# 1. Soft restore (preferred when no other in-progress work exists):
# git restore --staged --worktree .claude-plugin/marketplace.json \
# plugins/paad/.claude-plugin/plugin.json \
# plugins/paad/skills/*/SKILL.md
# git restore --staged --worktree --source HEAD -- kiro_and_antigravity/
# Then re-run `make release VERSION=X.Y.Z`.
# 2. Commit-then-re-release (when the partial bump is already useful):
# git add -A && git commit -m "WIP: release vX.Y.Z bump"
# make release VERSION=X.Y.Z # idempotent on the new version
# Then squash the WIP commit into the eventual release commit.
# Do NOT use `git reset --hard` — it loses any other unrelated in-flight work.
@if [ -z "$(VERSION)" ]; then \
echo "Usage: make release VERSION=X.Y.Z"; \
exit 1; \
fi
@current_branch=$$(git rev-parse --abbrev-ref HEAD); \
if [ "$$current_branch" != "$(MAIN_BRANCH)" ]; then \
echo "FAIL: release must run from '$(MAIN_BRANCH)' (currently on '$$current_branch')."; \
echo "Switch with: git checkout $(MAIN_BRANCH)"; \
echo "Override the expected branch with: make release VERSION=$(VERSION) MAIN_BRANCH=<name>"; \
exit 1; \
fi
@if [ -n "$$(git status --porcelain)" ]; then \
echo "FAIL: working tree is not clean — release must start from a clean state."; \
echo "Run 'git status' to see what's pending; commit or stash before releasing."; \
exit 1; \
fi
@$(MAKE) bump-version VERSION=$(VERSION)
@$(MAKE) test
@echo ""
@echo "Release v$(VERSION) prepared. Review the diff, then:"
@echo " git add -A && git commit -m 'Release v$(VERSION)'"
@echo " git tag v$(VERSION)"
@echo " git push origin $(MAIN_BRANCH) --tags"

check-vendored: ## Verify kiro_and_antigravity/ is in sync with the converter's current output
@tmp=$$(mktemp -d); \
trap 'rm -rf "$$tmp"' EXIT; \
if ! TARGET_DIR="$$tmp" python3 scripts/convert_skills.py >/dev/null; then \
echo "FAIL: scripts/convert_skills.py exited non-zero — converter is broken (this is not a sync drift)."; \
echo "Re-run 'python3 scripts/convert_skills.py' to see the actual error."; \
exit 1; \
fi; \
if ! diff -r "$$tmp/.kiro" kiro_and_antigravity/skills/.kiro >/dev/null 2>&1 \
|| ! diff -r "$$tmp/.agent" kiro_and_antigravity/skills/.agent >/dev/null 2>&1; then \
echo "FAIL: kiro_and_antigravity/ is out of sync with scripts/convert_skills.py output."; \
echo "Run 'make vendored' to regenerate, then commit."; \
echo "--- diff (.kiro) ---"; \
diff -r "$$tmp/.kiro" kiro_and_antigravity/skills/.kiro || true; \
echo "--- diff (.agent) ---"; \
diff -r "$$tmp/.agent" kiro_and_antigravity/skills/.agent || true; \
exit 1; \
fi; \
echo "Vendored output is in sync with scripts/convert_skills.py."
5 changes: 3 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -256,9 +256,10 @@ Discipline means reviewing before merging, every time. `agentic-review` uses mul
Where typical AI review features tend to provide shallow, opportunistic feedback, `agentic-review` is designed as a deliberate pre-merge quality gate: parallel analysis, finding verification, deduplication, and severity ranking.

* **Arguments:** `/paad:agentic-review` (diff against `main`) or `/paad:agentic-review develop` (diff against `develop`) or `/paad:agentic-review main src/auth/` (scoped to a directory)
* **Parallel review** — five specialists examine your branch simultaneously, then findings are verified against actual code and deduplicated
* **Parallel review** — six specialists examine your branch simultaneously (Logic & Correctness, Error Handling & Edge Cases, Contract & Integration, Concurrency & State, Security, Spec Compliance), then findings are verified against actual code and deduplicated
* **Severity ranking** — Critical / Important / Suggestion
* **Plan alignment** (conditional) — if design docs are found, checks implementation against the plan
* **Spec Compliance** — pulls intent from PR description, plan/design docs, recent commits, or branch name; flags missing features, deviations, and out-of-scope additions (replaces the older Plan Alignment agent)
* **Out-of-scope handling** — pre-existing bugs persist to `paad/code-reviews/backlog.md`; out-of-scope additions are flagged for per-PR decision (keep / split / revert) without backlog persistence
* **Report** — written to `paad/code-reviews/`

Requires a feature branch (not `main` or `master`) with committed changes.
Expand Down
Loading