Project Implement
Run a TDD development session on an existing Colloquium project — implement tests one by one until all 200 pass.
# Colloquium Project — Implement
Run a TDD development session on an existing Colloquium project — implement tests one by one until all 200 pass.
Invoke as:
`/colloquium:project-implement` → lists available projects to continue
`/colloquium:project-implement <slug>` → continue the named project directly
**Version:** v1 — Develop-only skill (split from colloquium:project v3)
> **To bootstrap a new project from scratch,** use `/colloquium:project-initiate` instead.
---
## ENFORCEMENT RULES (read before executing any step)
1. **State after every step.** Write `project-state.json` after EVERY step — not after phases, not in batches.
2. **Banners are mandatory.** Every phase and step displays its start and completion banner.
3. **Hard gates block.** Browser verification is a HARD GATE — `"passes": true` is NEVER written before the browser test passes.
4. **`feature_list.json` is append-only.** Only the `"passes"` field may change. Descriptions, steps, and order are permanently frozen.
5. **AI never touches git beyond this skill's commits.** No branch creation, no push, no PR. Only the per-test implementation commits described below.
6. **Never skip the inner cycle.** All steps (3a through 3f) are mandatory per test. No step may be skipped even if it feels redundant.
---
## Entrypoint: Project Selection
If invoked without a slug, run:
```bash
ls .claude/projects/ 2>/dev/null
Collect all subdirectories containing project-state.json. For each, read passingTests, totalTests, and lastUpdated.
Display:
════════════════════════════════════════════════════════════════
▶ COLLOQUIUM PROJECT — IMPLEMENT
════════════════════════════════════════════════════════════════
Known projects:
1. claude-ai-clone — 34/200 tests passing (last: 2026-02-20)
2. my-dashboard — 12/200 tests passing (last: 2026-02-19)
Choose a project number to continue:
════════════════════════════════════════════════════════════════
If no projects exist, display an error:
════════════════════════════════════════════════════════════════
❌ No projects found
════════════════════════════════════════════════════════════════
No project-state.json found in .claude/projects/
Run /colloquium:project-initiate to bootstrap a new project first.
════════════════════════════════════════════════════════════════
If a <slug> was passed directly: skip the question and proceed immediately.
Session Start
Step 1 — Read state and migration check
Read .claude/projects/<slug>/project-state.json.
Note: If
claude-progress.txtcontainsRun /colloquium:project(without-implement), treat it asRun /colloquium:project-implement <slug>. This is the pre-split command — functionally identical, just renamed.
If frontendPackage, apiPackage, or frontendPort are missing from project-state.json, run this one-time migration before continuing:
- Run:
cat apps/<slug>/package.json→ read the"name"field → this isfrontendPackage; also read the"dev"script → extract--port NNNN→ this isfrontendPort(default5173if no explicit flag) - If
apps/<slug>-api/exists: runcat apps/<slug>-api/package.json→ read the"name"field → this isapiPackage. If no-apiapp exists: setapiPackagetonull. - Merge all derived values into the existing
project-state.json— update only the missing keys, do NOT overwrite other existing keys (passingTests,currentTestIndex,sessionCount, etc.).
This migration runs once per existing project, never again once the fields exist.
Step 2 — Count passing tests and display session banner
grep -c '"passes": true' .claude/projects/<slug>/feature_list.json
Display:
════════════════════════════════════════════════════════════════
▶ DEVELOP SESSION — [name]
════════════════════════════════════════════════════════════════
Progress: [passingTests] / [totalTests] tests passing
Next test: #[currentTestIndex] — [description]
Session: #[sessionCount + 1]
════════════════════════════════════════════════════════════════
Step 3 — Start dev servers
pnpm turbo dev --filter=<frontendPackage> [--filter=<apiPackage> if apiPackage is not null]
Wait for all started apps to report "ready" in log output before proceeding.
Step 4 — Regression gate
4a — Vitest suite:
pnpm turbo test --filter=<apiPackage> # skip if apiPackage is null (frontend-only project)
- All green → proceed to 4b
- Any red → STOP. Fix the failing test, commit the fix (
fix(<slug>): restore [description]), re-run. Repeat until all green, then proceed to 4b. If unable to fix within 3 attempts: display a banner identifying the failing tests and ask the human whether to continue with the known regression or abort the session.
4b — Browser smoke check:
Use Playwright MCP to navigate to http://localhost:<frontendPort>. Take one screenshot.
- Page loads with any content visible → proceed to Per-Test Inner Cycle
- Blank page or unhandled error boundary → treat as a regression, fix before new work
Per-Test Inner Cycle
Pick the test at currentTestIndex from feature_list.json (the first one with "passes": false).
Display task banner:
════════════════════════════════════════════════════════════════
▶ TEST [currentTestIndex + 1] of [totalTests]
════════════════════════════════════════════════════════════════
Description: [test description]
Category: [functional | style]
Steps: [count] steps
════════════════════════════════════════════════════════════════
Step 3a — context7: pull library docs
Use mcp__plugin_context7_context7__resolve-library-id + mcp__plugin_context7_context7__query-docs for the specific library method this test will exercise.
Do not skip even if the library was fetched in a prior session.
Step 3b — TDD: Red → Loop → Green
Use Skill tool: superpowers:test-driven-development
En ```
Maintain Project Implement?
Let people know it's listed here — add the badge (live metrics, light/dark aware) or a plain link to your README or docs.
[Project Implement on getagentictools](https://getagentictools.com/loops/sertaccebeci-colloquium-project-implement?ref=badge)