Files
Claude-Code-Monitor/server/data/pipelines/default.json
T
nntrivi2001 4905d63b97 fix(lanes): clear stale detection on real stage transitions, exclude scratch dirs from implement detect
setStage() left detected_stage/signal/at untouched across a real transition,
so a prior task's leftover inference (e.g. `tests` from earlier work) both
misrepresented a fresh task's progress and — because recordDetection is
forward-only — silently rejected every real detection behind it until the
old one aged past DETECTION_TTL_MS. A real stage change now clears the
detection columns; a same-stage heartbeat leaves a live detection alone.

Also excludes `.superpowers/` from the `implement` node's Write detect rule
- brainstorm-companion scratch files were being counted as implementation
work.

fix(client): disable Node's default --experimental-webstorage in tests

Node 25 enables --experimental-webstorage by default, which defines a
broken global `localStorage` (no backing file configured) ahead of jsdom's
own full polyfill. Every test touching real localStorage failed with
"localStorage.clear/getItem is not a function" — not flaky, not test-specific,
just this one Node default. NODE_OPTIONS=--no-experimental-webstorage on the
test scripts lets jsdom's polyfill take over as before.
2026-07-31 10:53:07 +07:00

140 lines
2.6 KiB
JSON

{
"id": "default",
"name": "Default feature pipeline",
"nodes": [
{
"id": "intake",
"label": "intake",
"icon": "📝",
"gate": false,
"aliases": [
"assigned",
"claimed",
"start"
]
},
{
"id": "plan",
"label": "plan",
"icon": "🧭",
"gate": false,
"aliases": [
"planning",
"brainstorm",
"design"
],
"detect": [
{
"tool": "Skill",
"match": "brainstorming|writing-plans"
},
{
"tool": "Write",
"match": "docs/.*plan.*\\.md"
}
]
},
{
"id": "implement",
"label": "implement",
"icon": "🛠",
"gate": false,
"aliases": [
"implementing",
"coding",
"build"
],
"detect": [
{
"tool": "Edit"
},
{
"tool": "Write",
"match": "^(?!.*(?:^|/)(?:docs|\\.superpowers)/)"
}
]
},
{
"id": "tests",
"label": "tests",
"icon": "🧪",
"gate": true,
"aliases": [
"testing",
"unit",
"gates",
"pre-push-gate"
],
"detect": [
{
"tool": "Bash",
"match": "\\b(npm (run )?test|pytest|vitest|jest|go test|cargo test|node\\s+--test)\\b"
}
]
},
{
"id": "review",
"label": "review",
"icon": "👀",
"gate": true,
"aliases": [
"reviewing",
"code-review",
"self-review"
],
"detect": [
{
"tool": "Skill",
"match": "code-review|requesting-code-review"
},
{
"tool": "Bash",
"match": "\\bgh\\b[^;&|]*\\bpr diff\\b"
}
]
},
{
"id": "gate",
"label": "gate",
"icon": "🚦",
"gate": true,
"aliases": [
"verify",
"verification",
"sr-gate",
"gate-blocked"
]
},
{
"id": "ship",
"label": "ship",
"icon": "🔀",
"gate": false,
"aliases": [
"pr",
"pr-open",
"publishing",
"commit",
"push"
],
"detect": [
{
"tool": "Bash",
"match": "\\bgit\\b(?:\\s+-c\\s+[\\w.-]+=(?:'[^']*'|\\\"[^\\\"]*\\\"|\\S+)|\\s+-{1,2}[\\w.-]+(?:=(?:'[^']*'|\\\"[^\\\"]*\\\"|\\S+))?)*\\s+push\\b|\\bgh\\b[^;&|]*\\bpr create\\b"
}
]
},
{
"id": "done",
"label": "done",
"icon": "✅",
"gate": false,
"aliases": [
"complete",
"completed",
"merged"
]
}
]
}