Files
clawmates/skills/foundation/int-xx-marker-protocol.md
T
Omar SobhandClaude Opus 4.7 7b23f61632
ci / gates (push) Successful in 4s
ci / frontend (push) Successful in 25s
ci / rust (push) Failing after 3m41s
ci / e2e (push) Skipped
ci / publish (push) Skipped
slice 3.5c: seed 15 built-in skills across the 6 stacks
Hand-authored skill catalog anchored to real 2026-07 versions:
  - Rust 1.97.1 (stable), edition 2024
  - React 19.2.7, Server Components + Actions
  - TailwindCSS 4.3.3 (CSS-first config, Oxide engine)
  - three.js r185 (WebGPURenderer stable, BatchedMesh matured)
  - React Native 0.86 / Expo SDK 54+ (New Architecture default)
  - cargo-nextest 0.9.140, gitleaks 8.20+, cargo-audit 0.21+
  - Postgres 17 (18 in beta, don't rely on)
  - CUDA Blackwell, Metal Apple7+, ROCm CDNA3

Ships 15 skills across the categories:
  foundation/  workspace-repo-commit-protocol
               small-focused-commits
               tdd-red-green-refactor
               code-review-checklist
               int-xx-marker-protocol
               decompose-int-items
  rust/        write-rust-current-edition
               rust-error-handling
               cargo-test-driven-development
               rust-async-tokio-idioms
  backend/     postgres-migrations-forward-only
               postgres-index-selection
               api-pagination-day-1
  frontend/    react-19-server-components
               tailwind-v4-idioms
               component-4-state-model
  mobile/      expo-managed-vs-bare
               rn-flashlist-perf
  gpu/         gpu-coalescing-and-occupancy
               roofline-model
  threejs/     threejs-perf-and-teardown
  security/    cargo-audit-workflow
               secret-scanning-gitleaks

skills_loader.rs walks skills/**/*.md, parses YAML frontmatter
(name, description, when_to_use, tags), upserts via
skills_catalog::upsert_builtin. Idempotent per boot — bumps version
+ appends skill_versions row ONLY when body changes. Deterministic
sha256-derived ids so builtins are stable across boots.

Dockerfile copies skills/ to /etc/clawmates/skills. Server boot
task spawns loader alongside team_template_loader.

Follow-ups (Slice 3.5c continuation, future PRs):
  - 20-30 more skills (duckdb, shadcn composition, a11y, WebGPU
    migration, metal frame capture, rocprof, deep gitea forge
    integration, semgrep rulepacks)
  - Bind skills to team template roles (add [role.skills] refs to
    templates/teams/*.toml + wire template_role_skills population
    in team_template_loader)

Co-Authored-By: Claude Opus 4.7 <[email protected]>
2026-07-19 13:55:44 -07:00

45 lines
2.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
name: int-xx-marker-protocol
description: The literal line-based markers the mission loop parses to advance state — TASK, WORK, HANDOFF, TEST_PASS, REVIEW_APPROVE, COMPLETED.
when_to_use: Pin on every coding role. Missing or malformed markers cause the mission to stall.
tags: [foundation, protocol]
---
# INT-XX marker protocol
Missions parse your turn output line-by-line for these markers. **They must appear literally**, with the colon, on their own line, no bold, no code fence.
## The full ladder
```
TASK: INT-NN — <title> # planner opens a new item
PLAN_COMPLETE: INT-NN # planner is done specifying
WORK: INT-NN # coder starts implementing
HANDOFF: INT-NN # coder passes to tester/reviewer
TEST_PASS: INT-NN # tester confirms green
TEST_FAIL: INT-NN — <reason> # tester failed the build; coder loops
REVIEW_APPROVE: INT-NN # reviewer OKs the diff
REVIEW_BLOCK: INT-NN — <reason> # reviewer requests changes
COMPLETED: INT-NN # committer pushed; loop advances
```
## Rules
1. **Exactly one INT id per marker line.** `COMPLETED: INT-05, INT-06` won't parse.
2. **Emit at the end of your substantive turn**, not the beginning. Otherwise the parser advances state before the work is real.
3. **Never emit a marker you can't back up.** Emitting `COMPLETED: INT-NN` without a corresponding `git push` desynchronizes the mission from the repo.
4. **`REORDER: <one-sentence rationale>`** if you're taking an INT out of order — the loop's review timeline logs these.
## What the loop does with each
- `TASK` + `WORK` + `HANDOFF` are observability only — they show up in the mission's task-card feed (Slice 5).
- `TEST_FAIL` / `REVIEW_BLOCK` re-schedules the item back to the coder.
- `COMPLETED` bumps `mission_tasks.status = 'complete'` and advances the loop's `consumed_int_ids`. Next iteration picks the next unconsumed INT.
- `REORDER` writes a `loop_reorder_event` row — a reviewer can inspect why the order shifted.
## Common failures
- **Marker in a code fence**: `\`\`\`COMPLETED: INT-05\`\`\`` won't parse. Put it OUTSIDE the fence.
- **Marker with markdown emphasis**: `**COMPLETED: INT-05**` won't parse.
- **Wrong dash**: `INT-NN — title` uses en-dash; `INT-NN - title` also works. `INT-NN title` (em-dash) also works. Any dash-like char is fine; the parser trims whitespace around it.