Skip to content

Commit 5c9b5d4

Browse files
fixes
1 parent 5e4de81 commit 5c9b5d4

9 files changed

Lines changed: 45 additions & 57 deletions

File tree

.claude/settings.local.json

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,15 @@
99
"Bash(npx tsc:*)",
1010
"Bash(npm run lint:*)",
1111
"mcp__too-many-cooks__message",
12-
"mcp__too-many-cooks__register"
12+
"mcp__too-many-cooks__register",
13+
"Bash(git add:*)",
14+
"Bash(git commit:*)",
15+
"Bash(find /Users/christianfindlay/Documents/Code/tmc/too-many-cooks -name test*.sh -o -name *test.sh)",
16+
"mcp__too-many-cooks__plan",
17+
"Bash(npm ci:*)",
18+
"Bash(npm run:*)",
19+
"Bash(npx cspell:*)"
1320
]
1421
},
1522
"autoMemoryEnabled": false
16-
}
23+
}

.claude/skills/ci-prep/SKILL.md

Lines changed: 19 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,25 @@
11
---
22
name: ci-prep
3-
description: Prepare the codebase for CI. Runs formatting, linting, spell check, build, unit tests, e2e tests, and coverage checks iteratively until everything passes. Use before submitting a PR or when the user wants to ensure CI will pass.
3+
description: Prepare the codebase for CI. Reads the CI workflow, builds a checklist, then loops through format/lint/build/test/coverage until every single check passes. Use before submitting a PR or when the user wants to ensure CI will pass.
44
argument-hint: "[optional focus area]"
55
allowed-tools: Read, Grep, Glob, Edit, Write, Bash
66
---
77

88
# CI Prep — Get the Codebase PR-Ready
99

10-
You MUST NOT STOP until every check passes and coverage threshold is met. This is a loop, not a checklist you run once.
10+
You MUST NOT STOP until every check passes and coverage threshold is met.
1111

12-
## Step 0: Read the CI Pipeline
12+
## Step 1: Read the CI Pipeline and Build Your Checklist
1313

14-
Read the CI workflow file to understand exactly what CI will run:
14+
Read the CI workflow file:
1515

1616
```bash
1717
cat .github/workflows/ci.yml
1818
```
1919

20-
Parse every step. The CI pipeline is the source of truth for what must pass. Do NOT assume you know the steps — read them fresh every time.
20+
Parse EVERY step in the workflow. Extract the exact commands CI runs. Build yourself a numbered checklist of every check you need to pass. This is YOUR checklist — derived from the actual CI config, not from assumptions. The CI pipeline changes over time so you MUST read it fresh and build your list from what you find.
2121

22-
## Step 1: Coordinate with Other Agents
22+
## Step 2: Coordinate with Other Agents
2323

2424
You are likely working alongside other agents who are editing files concurrently. Before making changes:
2525

@@ -29,59 +29,34 @@ You are likely working alongside other agents who are editing files concurrently
2929
4. Communicate what you are doing via TMC broadcasts
3030
5. After each fix cycle, check TMC again — another agent may have broken something
3131

32-
## Step 2: Run the Full CI Check Sequence
32+
## Step 3: The Loop
3333

34-
Run each CI step in order. Fix failures before moving to the next step. The sequence is derived from Step 0 but typically includes:
34+
Run through your checklist from Step 1 in order. For each check:
3535

36-
### 2a. Format Check
36+
1. Run the exact command from CI
37+
2. If it passes, move to the next check
38+
3. If it fails, FIX IT. Do NOT suppress warnings, ignore errors, remove assertions, or lower thresholds. Fix the actual code.
39+
4. Re-run that check to confirm the fix works
40+
5. Move to the next check
3741

38-
Run the format checker. If it fails, run the formatter to fix, then re-check.
42+
When you reach the end of the checklist, GO BACK TO THE START AND RUN THE ENTIRE CHECKLIST AGAIN. Other agents are working concurrently and may have broken something you already fixed. A fix for one check may have broken an earlier check.
3943

40-
### 2b. Lint
44+
**Keep looping through the full checklist until you get a COMPLETE CLEAN RUN with ZERO failures from start to finish.** One clean pass is not enough if you fixed anything during that pass — you need a clean pass where NOTHING needed fixing.
4145

42-
Run the linter. If it fails, fix every lint error. Do NOT suppress or ignore warnings. Re-run until clean.
43-
44-
### 2c. Spell Check
45-
46-
Run the spell checker if CI includes one. Fix any misspellings in source files.
47-
48-
### 2d. Build / Compile
49-
50-
Run the build step. Fix any compilation errors. Re-run until clean.
51-
52-
### 2e. Unit Tests
53-
54-
Run unit tests. If any fail, investigate and fix the root cause. Do NOT delete or weaken assertions. Re-run until all pass.
55-
56-
### 2f. E2E Tests with Coverage
57-
58-
Run e2e tests with coverage collection. If tests fail, fix them. If coverage is below the threshold, identify uncovered code and add tests or fix existing ones.
59-
60-
Note: E2E tests require no other VS Code instance running. If they cannot run in your environment, flag this to the user but still ensure everything else passes.
61-
62-
### 2g. Coverage Threshold
63-
64-
Run the coverage check. If it fails, you need more test coverage. Add assertions to existing tests or write new tests for uncovered paths.
65-
66-
## Step 3: Full Re-run
67-
68-
After fixing everything, run the ENTIRE sequence again from 2a to 2g. Other agents may have made changes while you were fixing things. You MUST verify the final state is clean.
69-
70-
If ANY step fails on re-run, go back to Step 2 and fix it. Repeat until a full clean run completes.
46+
Do NOT stop after one loop. Do NOT stop after two loops. Keep going until a full pass completes with every single check green on the first try.
7147

7248
## Step 4: Final Coordination
7349

74-
1. Broadcast on TMC that CI prep is complete
50+
1. Broadcast on TMC that CI prep is complete and all checks pass
7551
2. Release any locks you hold
76-
3. Report the final status to the user
52+
3. Report the final status to the user with the output of each passing check
7753

7854
## Rules
7955

8056
- NEVER stop with failing checks. Loop until everything is green.
8157
- NEVER suppress lint warnings, skip tests, or lower coverage thresholds.
8258
- NEVER remove assertions to make tests pass.
83-
- NEVER ignore spell check failures.
8459
- Fix the CODE, not the checks.
85-
- If you are stuck on a failure after 3 attempts, ask the user for help. Do NOT silently give up.
60+
- If you are stuck on a failure after 3 attempts on the same issue, ask the user for help. Do NOT silently give up.
8661
- Always coordinate with other agents via TMC. Check for messages regularly.
8762
- Leave the codebase in a state that will pass CI on the first try.

package-lock.json

Lines changed: 5 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -403,7 +403,7 @@
403403
"glob": "^13.0.6",
404404
"mocha": "^11.7.5",
405405
"prettier": "^3.8.1",
406-
"typescript": "^6.0.2",
406+
"typescript": "~5.8.3",
407407
"typescript-eslint": "^8.57.2"
408408
},
409409
"overrides": {

src/discovery/powershell.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,4 +69,3 @@ export async function discoverPowerShellScripts(
6969

7070
return commands;
7171
}
72-

src/test/e2e/treeview.e2e.test.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,6 @@ suite("TreeView E2E Tests", () => {
139139
assert.ok(!seenTask, "Folder node must not appear after a file node — folders come first");
140140
}
141141
}
142-
143142
});
144143
});
145144

src/test/unit/discovery.unit.test.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,11 @@ import {
55
parseBatchDescription,
66
} from "../../discovery/parsers/powershellParser";
77

8-
interface ParsedParam { name: string; description?: string; default?: string }
8+
interface ParsedParam {
9+
name: string;
10+
description?: string;
11+
default?: string;
12+
}
913

1014
function paramAt(params: readonly ParsedParam[], index: number): ParsedParam {
1115
const p = params[index];
@@ -30,7 +34,7 @@ suite("PowerShell Parser Unit Tests", () => {
3034
});
3135

3236
test("extracts default values from @param comments", () => {
33-
const content = '# @param env The environment (default: dev)\nparam($env)';
37+
const content = "# @param env The environment (default: dev)\nparam($env)";
3438
const params = parsePowerShellParams(content);
3539
assert.strictEqual(params.length, 1);
3640
assert.strictEqual(paramAt(params, 0).name, "env");

test-results/.last-run.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"status": "failed",
3+
"failedTests": []
4+
}

website/src/_data/site.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"title": "CommandTree",
3-
"description": "One sidebar. Every command. AI-powered.",
3+
"description": "One sidebar for every command in your VS Code workspace. AI-powered.",
44
"url": "https://commandtree.dev",
55
"stylesheet": "/assets/css/styles.css",
66
"author": "Christian Findlay",

0 commit comments

Comments
 (0)