You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: .claude/skills/ci-prep/SKILL.md
+3-3Lines changed: 3 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -3,7 +3,7 @@ name: ci-prep
3
3
description: Prepares the current branch for CI by running the exact same steps locally and fixing issues. If CI is already failing, fetches the GH Actions logs first to diagnose. Use before pushing, when CI is red, or when the user says "fix ci".
4
4
argument-hint: "[--failing] [optional job name to focus on]"
5
5
---
6
-
<!-- agent-pmo:29b9dcf-->
6
+
<!-- agent-pmo:2efd847-->
7
7
8
8
# CI Prep
9
9
@@ -44,10 +44,10 @@ Read **every line** of `--log-failed` output. For each failure note the exact fi
44
44
45
45
1. Find the CI workflow file. Look in `.github/workflows/` for `ci.yml`, `build.yml`, `test.yml`, `checks.yml`, `main.yml`, `pull_request.yml`, or any workflow triggered on `pull_request` or `push`.
46
46
2. Read the workflow file completely. Parse every job and every step.
47
-
3. Extract the ordered list of commands the CI actually runs (e.g., `make lint`, `make fmt-check`, `make test`, `make coverage-check`, `make build`, or whatever the workflow specifies — it may use `npm`, `cargo`, `dotnet`, raw shell commands, or anything else).
47
+
3. Extract the ordered list of commands the CI actually runs. In a spec-compliant repo this is `make lint → make test → make build` (REPO-STANDARDS-SPEC [MAKE-TARGETS]), but the actual CI may use `npm`, `cargo`, `dotnet`, raw shell commands, or anything else. Extract what is *actually there*.
48
48
4. Note any environment variables, matrix strategies, or conditional steps that affect execution.
49
49
50
-
**Do NOT assume the steps are `make lint`, `make test`, `make coverage-check`, `make build`.** The actual CI may run different commands, in a different order, with different targets. Extract what the CI *actually does*.
50
+
**Do NOT assume the steps are `make lint`, `make test`, `make build`.** The actual CI may run different commands, in a different order. Extract what the CI *actually does*. If you find extra targets beyond the 7 in [MAKE-TARGETS] (e.g. `make fmt-check`, `make coverage-check`), flag them in your final report — they should be consolidated by the agent-pmo skill.
Copy file name to clipboardExpand all lines: .claude/skills/code-dedup/SKILL.md
+14-13Lines changed: 14 additions & 13 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,7 +2,7 @@
2
2
name: code-dedup
3
3
description: Searches for duplicate code, duplicate tests, and dead code, then safely merges or removes them. Use when the user says "deduplicate", "find duplicates", "remove dead code", "DRY up", or "code dedup". Requires test coverage — refuses to touch untested code.
4
4
---
5
-
<!-- agent-pmo:29b9dcf-->
5
+
<!-- agent-pmo:2efd847-->
6
6
7
7
# Code Dedup
8
8
@@ -13,10 +13,10 @@ Carefully search for duplicate code, duplicate tests, and dead code across the r
13
13
Before touching ANY code, verify these conditions. If any fail, stop and report why.
14
14
15
15
1. Run `make test` — all tests must pass. If tests fail, stop. Do not dedup a broken codebase.
16
-
2. Run `make coverage-check` — coverage must meet the repo's threshold. If it doesn't, stop.
16
+
2. Run `make test` — tests are fail-fast AND enforce the coverage threshold from `coverage-thresholds.json`. If anything fails, stop and fix it before deduping.
17
17
3. Verify the project uses **static typing**. Check for:
18
18
- C#: typed by default — proceed
19
-
- Python: must have type annotations AND a type checker configured (pyright, mypy, or Basilisk in pyproject.toml / Makefile) — proceed
19
+
- Python: must have **Basilisk** configured as the primary type checker in `pyproject.toml [tool.basilisk]` (per REPO-STANDARDS-SPEC [LINT-PYTHON-BASILISK]). pyright is acceptable as a secondary check but Basilisk is the primary requirement.
20
20
-**Untyped Python: STOP. Refuse to dedup.** Print: "This codebase has no static type checking. Deduplication without types is reckless — too high a risk of silent breakage. Add type checking first."
21
21
22
22
## Steps
@@ -37,7 +37,7 @@ Dedup Progress:
37
37
38
38
Before deciding what to touch, understand what is tested.
39
39
40
-
1. Run `make test`and `make coverage-check` to confirm green baseline
40
+
1. Run `make test`to confirm green baseline. `make test` is fail-fast AND enforces the coverage threshold from `coverage-thresholds.json` (REPO-STANDARDS-SPEC [TEST-RULES], [COVERAGE-THRESHOLDS-JSON]). It exits non-zero on any test failure OR coverage shortfall.
41
41
2. Note the current coverage percentage — this is the floor. It must not drop.
42
42
3. Identify which files/modules have coverage and which do not. Only files WITH coverage are candidates for dedup.
43
43
@@ -78,28 +78,29 @@ For each change, follow this cycle: **change → test → verify coverage → co
78
78
79
79
#### 5a. Remove dead code
80
80
- Delete dead code identified in Step 2
81
-
- After each deletion: run `make test`and `make coverage-check`
82
-
- If tests fail or coverage drops: **revert immediately** and investigate
81
+
- After each deletion: run `make test`(fail-fast + coverage + threshold all in one)
82
+
- If `make test` exits non-zero (test failure OR coverage drop): **revert immediately** and investigate
83
83
- Dead code removal should never break tests or drop coverage
84
84
85
85
#### 5b. Merge duplicate code
86
86
- For each duplicate pair: extract the shared logic into a single function/module
87
87
- Update all call sites to use the shared version
88
-
- After each merge: run `make test` and `make coverage-check`
88
+
- After each merge: run `make test`
89
89
- If tests fail: **revert immediately**. The duplicates may have subtle differences you missed.
90
90
- If coverage drops: the shared code must have equivalent test coverage. Add tests if needed before proceeding.
91
91
92
92
#### 5c. Remove duplicate tests
93
93
- Delete the redundant test (keep the more thorough one)
94
-
- After each deletion: run `make coverage-check`
95
-
- If coverage drops:**revert immediately**. The "duplicate" test was covering something the other wasn't.
94
+
- After each deletion: run `make test`
95
+
- If coverage drops below threshold, `make test` exits non-zero —**revert immediately**. The "duplicate" test was covering something the other wasn't.
96
96
97
97
### Step 6 — Final verification
98
98
99
-
1. Run `make test` — all tests must still pass
100
-
2. Run `make coverage-check` — coverage must be >= the baseline from Step 1
101
-
3. Run `make lint` and `make fmt-check` — code must be clean
102
-
4. Report: what was removed, what was merged, final coverage vs baseline
99
+
1. Run `make lint` — all linters and the format check must pass
100
+
2. Run `make test` — tests must pass AND coverage must remain ≥ the baseline from Step 1
101
+
3. Report: what was removed, what was merged, final coverage vs baseline
102
+
103
+
(Only the 7 standard targets exist — `make lint` and `make test` cover formatting and coverage checks respectively.)
description: Fix a bug using test-driven development. Use when the user reports a bug, describes unexpected behavior, wants to fix a defect, or says something is broken. Enforces a strict test-first workflow where a failing test must be written and verified before any fix is attempted.
4
+
argument-hint: "[bug description]"
5
+
---
6
+
<!-- agent-pmo:2efd847 -->
7
+
8
+
# Bug Fix Skill — Test-First Workflow
9
+
10
+
You MUST follow this exact workflow. Do NOT skip steps. Do NOT fix the bug before writing a failing test.
11
+
12
+
## Step 1: Understand the Bug
13
+
14
+
- Read the bug description: $ARGUMENTS
15
+
- Investigate the codebase to understand the relevant code
16
+
- Identify the root cause (or narrow down candidates)
17
+
- Summarize your understanding of the bug to the user before proceeding
18
+
19
+
## Step 2: Write a Failing Test
20
+
21
+
- Write a test that **directly exercises the buggy behavior**
22
+
- The test must assert the **correct/expected** behavior — so it FAILS against the current broken code
23
+
- The test name should clearly describe the bug (e.g., `test_orange_color_not_applied_to_head`)
24
+
- Use the project's existing test framework and conventions
25
+
26
+
## Step 3: Run the Test — Confirm It FAILS
27
+
28
+
- Run ONLY the new test (not the full suite)
29
+
-**Verify the test FAILS** and that it fails **because of the bug**, not for some other reason (typo, import error, wrong selector, etc.)
30
+
- If the test passes: your test does not capture the bug. Go back to Step 2
31
+
- If the test fails for the wrong reason: fix the test, not the code. Go back to Step 2
32
+
-**Repeat until the test fails specifically because of the bug**
33
+
34
+
## Step 4: Show Failure to User
35
+
36
+
- Show the user the test code and the failure output
37
+
- Explicitly ask: "This test fails because of the bug. Can you confirm this captures the issue before I fix it?"
38
+
-**STOP and WAIT for user acknowledgment before proceeding**
39
+
- Do NOT continue to Step 5 until the user confirms
40
+
41
+
## Step 5: Fix the Bug
42
+
43
+
- Make the **minimum change** needed to fix the bug
44
+
- Do not refactor, clean up, or "improve" surrounding code
45
+
- Do not change the test
46
+
47
+
## Step 6: Run the Test — Confirm It PASSES
48
+
49
+
- Run the new test again
50
+
-**Verify it PASSES**
51
+
- If it fails: go back to Step 5 and adjust the fix
52
+
-**Repeat until the test passes**
53
+
54
+
## Step 7: Run the Full Test Suite
55
+
56
+
- Run ALL tests to make sure nothing else broke
57
+
- If other tests fail: fix the regression without breaking the new test
58
+
- Report the final result to the user
59
+
60
+
## Rules
61
+
62
+
- NEVER fix the bug before the failing test is written and confirmed
63
+
- NEVER skip asking the user to acknowledge the test failure
64
+
- NEVER modify the test to make it pass — modify the source code
65
+
- If you cannot write a test for the bug, explain why and ask the user how to proceed
66
+
- Keep the fix minimal — one bug, one fix, one test
Copy file name to clipboardExpand all lines: .claude/skills/spec-check/SKILL.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -3,7 +3,7 @@ name: spec-check
3
3
description: Audit spec/plan documents against the codebase. Ensures every spec section has implementing code, tests, and matching logic. Use when the user says "check specs", "spec audit", or "verify specs".
4
4
argument-hint: "[optional spec ID or filename filter]"
Copy file name to clipboardExpand all lines: .claude/skills/submit-pr/SKILL.md
+3-1Lines changed: 3 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -3,14 +3,16 @@ name: submit-pr
3
3
description: Creates a pull request with a well-structured description after verifying CI passes. Use when the user asks to submit, create, or open a pull request.
4
4
disable-model-invocation: true
5
5
---
6
-
<!-- agent-pmo:29b9dcf-->
6
+
<!-- agent-pmo:2efd847-->
7
7
8
8
# Submit PR
9
9
10
10
Create a pull request for the current branch with a well-structured description.
11
11
12
12
## Steps
13
13
14
+
*NOTE: if you already ran make ci in this session and it passed, you can skip step 1.*
15
+
14
16
1. Run `make ci` — must pass completely before creating PR
15
17
2.**Generate the diff against main.** Run `git diff main...HEAD > /tmp/pr-diff.txt` to capture the full diff between the current branch and the head of main. This is the ONLY source of truth for what the PR contains. **Warning:** the diff can be very large. If the diff file exceeds context limits, process it in chunks (e.g., read sections with `head`/`tail` or split by file) rather than trying to load it all at once.
16
18
3.**Derive the PR title and description SOLELY from the diff.** Read the diff output and summarize what changed. Ignore commit messages, branch names, and any other metadata — only the actual code/content diff matters.
Copy file name to clipboardExpand all lines: .claude/skills/upgrade-packages/SKILL.md
+21-4Lines changed: 21 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -3,7 +3,7 @@ name: upgrade-packages
3
3
description: Upgrade all dependencies/packages to their latest versions for C#/.NET and Python. Use when the user says "upgrade packages", "update dependencies", "bump versions", "update packages", or "upgrade deps".
Copy file name to clipboardExpand all lines: .claude/skills/website-audit/SKILL.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,7 +2,7 @@
2
2
name: website-audit
3
3
description: Audits a website for SEO, AI search performance, structured data, mobile usability, broken links, and social media cards. Fixes issues found. Use when the user mentions "audit website", "SEO", "fix search ranking", "AI search", "structured data", "social media cards", or "website performance".
0 commit comments