@dirtydishes/skills 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +165 -0
- package/bin/skills.js +408 -0
- package/catalog/skills.json +32 -0
- package/package.json +26 -0
- package/skills/dirtyloops/SKILL.md +67 -0
- package/skills/dirtyloops/examples/README.md +8 -0
- package/skills/dirtyloops/examples/orchestrator-callback/README.md +18 -0
- package/skills/dirtyloops/examples/orchestrator-callback/docs/implementation/example-stream/00-roadmap.md +26 -0
- package/skills/dirtyloops/examples/orchestrator-callback/docs/implementation/example-stream/01-foundation.md +51 -0
- package/skills/dirtyloops/examples/orchestrator-callback/docs/implementation/example-stream/02-integration.md +45 -0
- package/skills/dirtyloops/examples/orchestrator-callback/docs/implementation/example-stream/IMPLEMENT.md +68 -0
- package/skills/dirtyloops/examples/orchestrator-callback/docs/implementation/example-stream/loop-state.md +36 -0
- package/skills/dirtyloops/examples/orchestrator-callback/docs/implementation/example-stream/prompts/implementation-thread.md +30 -0
- package/skills/dirtyloops/examples/orchestrator-callback/docs/implementation/example-stream/prompts/review-thread.md +35 -0
- package/skills/dirtyloops/examples/orchestrator-callback/docs/implementation/example-stream/prompts/run-loop.md +33 -0
- package/skills/dirtyloops/examples/orchestrator-callback/docs/implementation/example-stream/turn-docs/01-foundation.md +79 -0
- package/skills/dirtyloops/examples/single-thread-subagent/README.md +14 -0
- package/skills/dirtyloops/examples/single-thread-subagent/docs/implementation/example-stream/00-roadmap.md +16 -0
- package/skills/dirtyloops/examples/single-thread-subagent/docs/implementation/example-stream/01-foundation.md +36 -0
- package/skills/dirtyloops/examples/single-thread-subagent/docs/implementation/example-stream/02-integration.md +23 -0
- package/skills/dirtyloops/examples/single-thread-subagent/docs/implementation/example-stream/IMPLEMENT.md +50 -0
- package/skills/dirtyloops/examples/single-thread-subagent/docs/implementation/example-stream/loop-state.md +28 -0
- package/skills/dirtyloops/examples/single-thread-subagent/docs/implementation/example-stream/prompts/run-loop.md +22 -0
- package/skills/dirtyloops/examples/single-thread-subagent/docs/implementation/example-stream/turn-docs/01-foundation.md +32 -0
- package/skills/dirtyloops/plan.html +587 -0
- package/skills/dirtyloops/references/beads.md +114 -0
- package/skills/dirtyloops/references/common.md +66 -0
- package/skills/dirtyloops/references/create-loop.md +85 -0
- package/skills/dirtyloops/references/help.md +170 -0
- package/skills/dirtyloops/references/inspect-loop.md +11 -0
- package/skills/dirtyloops/references/review-ci.md +37 -0
- package/skills/dirtyloops/references/run-loop.md +41 -0
- package/skills/dirtyloops/references/storyboard.md +64 -0
- package/skills/dirtyloops/references/swarms.md +59 -0
- package/skills/dirtyloops/references/turn-docs.md +29 -0
- package/skills/dirtyloops/references/workflows/orchestrator-callback.md +120 -0
- package/skills/dirtyloops/references/workflows/single-thread-subagent.md +45 -0
- package/skills/dirtyloops/schemas/implementation-callback.schema.json +38 -0
- package/skills/dirtyloops/schemas/review-callback.schema.json +35 -0
- package/skills/dirtyloops/schemas/swarm-report.schema.json +43 -0
- package/skills/dirtyloops/templates/common/00-roadmap.md.template +33 -0
- package/skills/dirtyloops/templates/common/IMPLEMENT.md.template +79 -0
- package/skills/dirtyloops/templates/common/loop-state.md.template +39 -0
- package/skills/dirtyloops/templates/common/phase.md.template +56 -0
- package/skills/dirtyloops/templates/common/run-loop.md.template +46 -0
- package/skills/dirtyloops/templates/common/storyboard-post-run.html.template +77 -0
- package/skills/dirtyloops/templates/common/turn-doc.md.template +61 -0
- package/skills/dirtyloops/templates/workflows/orchestrator-callback/implementation-thread-prompt.md.template +40 -0
- package/skills/dirtyloops/templates/workflows/orchestrator-callback/review-thread-prompt.md.template +38 -0
- package/skills/dirtyloops/templates/workflows/orchestrator-callback/run-loop-addendum.md.template +17 -0
- package/skills/dirtyloops/templates/workflows/single-thread-subagent/run-loop-addendum.md.template +12 -0
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
# Workflow: Orchestrator Callback
|
|
2
|
+
|
|
3
|
+
Use this workflow for the original loop style: a main orchestrator thread creates implementation threads and review threads that call back to a concrete orchestrator thread id.
|
|
4
|
+
|
|
5
|
+
## Topology
|
|
6
|
+
|
|
7
|
+
```text
|
|
8
|
+
orchestrator thread
|
|
9
|
+
-> selector subagent chooses next ready Beads phase
|
|
10
|
+
-> orchestrator creates implementation thread
|
|
11
|
+
-> implementation thread may use subagents
|
|
12
|
+
-> implementation thread opens PR and calls back
|
|
13
|
+
-> orchestrator creates review thread
|
|
14
|
+
-> review thread may use subagents
|
|
15
|
+
-> review thread owns CI and repairs
|
|
16
|
+
-> review thread calls back after review + CI are resolved
|
|
17
|
+
-> orchestrator updates Beads and loop state
|
|
18
|
+
-> orchestrator launches next selector when continuing
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Authority
|
|
22
|
+
|
|
23
|
+
The orchestrator owns:
|
|
24
|
+
|
|
25
|
+
- Beads canonical state
|
|
26
|
+
- phase selection
|
|
27
|
+
- implementation thread creation
|
|
28
|
+
- review thread creation
|
|
29
|
+
- concrete callback target, callback preflight, and heartbeat
|
|
30
|
+
- phase closeout
|
|
31
|
+
- launching the next selector
|
|
32
|
+
- stream closeout and storyboard generation
|
|
33
|
+
|
|
34
|
+
The implementation thread owns:
|
|
35
|
+
|
|
36
|
+
- exactly one selected Beads issue
|
|
37
|
+
- branch/worktree setup assigned by the orchestrator
|
|
38
|
+
- implementation
|
|
39
|
+
- local gates before PR when feasible
|
|
40
|
+
- PR creation
|
|
41
|
+
- updating the existing Markdown turn doc
|
|
42
|
+
- callback when PR-ready or blocked
|
|
43
|
+
|
|
44
|
+
The review thread owns:
|
|
45
|
+
|
|
46
|
+
- thermo-nuclear review
|
|
47
|
+
- reviewer subagent swarms
|
|
48
|
+
- CI inspection, diagnosis, repair, rerun, and evidence
|
|
49
|
+
- updating the existing Markdown turn doc
|
|
50
|
+
- callback when approved, repaired, or blocked with concrete CI state
|
|
51
|
+
|
|
52
|
+
## Non-Negotiable Thread Rules
|
|
53
|
+
|
|
54
|
+
- Only the orchestrator creates implementation and review threads.
|
|
55
|
+
- Implementation threads do not create review threads.
|
|
56
|
+
- Review threads do not create follow-up implementation threads.
|
|
57
|
+
- Selector subagents never implement.
|
|
58
|
+
- Reviewer subagents never close Beads issues.
|
|
59
|
+
- The orchestrator is the only actor that advances to the next phase.
|
|
60
|
+
- Implementation and review threads default to standard speed/reasoning unless Beads metadata explicitly overrides it.
|
|
61
|
+
- Before launch, the orchestrator must verify the actual worker/reviewer prompt text includes the exact orchestrator thread id as callback target. Do not launch if the prompt relies on generic wording such as `current orchestrator thread`, `this thread`, or a hidden wrapper.
|
|
62
|
+
|
|
63
|
+
## Implementation Callback
|
|
64
|
+
|
|
65
|
+
Implementation threads call back exactly once when:
|
|
66
|
+
|
|
67
|
+
- PR is open and ready for review
|
|
68
|
+
- the task is complete but PR cannot be created, with exact blocker
|
|
69
|
+
- the thread is genuinely blocked
|
|
70
|
+
|
|
71
|
+
Payload:
|
|
72
|
+
|
|
73
|
+
```json
|
|
74
|
+
{
|
|
75
|
+
"type": "implementation-callback",
|
|
76
|
+
"orchestrator_thread_id": "...",
|
|
77
|
+
"source_thread_id": "...",
|
|
78
|
+
"phase_issue_id": "...",
|
|
79
|
+
"status": "pr-ready|blocked",
|
|
80
|
+
"branch": "...",
|
|
81
|
+
"pr": "...",
|
|
82
|
+
"commits": ["..."],
|
|
83
|
+
"turn_doc": "...",
|
|
84
|
+
"local_gates": ["..."],
|
|
85
|
+
"changed_files": ["..."],
|
|
86
|
+
"blockers": [],
|
|
87
|
+
"context_to_keep": []
|
|
88
|
+
}
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## Review Callback
|
|
92
|
+
|
|
93
|
+
Review threads call back exactly once when review and CI are resolved.
|
|
94
|
+
|
|
95
|
+
Payload:
|
|
96
|
+
|
|
97
|
+
```json
|
|
98
|
+
{
|
|
99
|
+
"type": "review-callback",
|
|
100
|
+
"orchestrator_thread_id": "...",
|
|
101
|
+
"source_thread_id": "...",
|
|
102
|
+
"phase_issue_id": "...",
|
|
103
|
+
"status": "approved|repaired|blocked",
|
|
104
|
+
"pr": "...",
|
|
105
|
+
"ci_state": "ci-green|ci-repaired-and-green|ci-unavailable-with-evidence|ci-blocked-with-cause",
|
|
106
|
+
"review_skill": "thermo-nuclear-code-quality-review",
|
|
107
|
+
"repairs": ["..."],
|
|
108
|
+
"findings_remaining": [],
|
|
109
|
+
"turn_doc": "...",
|
|
110
|
+
"context_to_keep": []
|
|
111
|
+
}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
## Heartbeat
|
|
115
|
+
|
|
116
|
+
Prefer callback-driven coordination over polling. Use a lightweight fallback heartbeat around 30 minutes for long-running worker/reviewer threads.
|
|
117
|
+
|
|
118
|
+
## Completion Criterion
|
|
119
|
+
|
|
120
|
+
The orchestrator has received and validated the required callback, updated Beads and the existing turn doc, and either launched the next selector or reported an allowed stop state.
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Workflow: Single-Thread Subagent
|
|
2
|
+
|
|
3
|
+
Use this workflow when the user wants one visible Codex coordinator thread with mass subagent swarms. Single-thread means one visible coordinator, not solo implementation.
|
|
4
|
+
|
|
5
|
+
## Topology
|
|
6
|
+
|
|
7
|
+
```text
|
|
8
|
+
main coordinator thread
|
|
9
|
+
-> selector subagents
|
|
10
|
+
-> scout swarm
|
|
11
|
+
-> slice planning swarm
|
|
12
|
+
-> implementation helper swarm
|
|
13
|
+
-> coordinator synthesizes and integrates
|
|
14
|
+
-> reviewer subagents
|
|
15
|
+
-> CI verification subagents
|
|
16
|
+
-> coordinator closeout
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Rules
|
|
20
|
+
|
|
21
|
+
- Do not create separate Codex worker or reviewer threads.
|
|
22
|
+
- The main thread owns branch state, integration, PR state, Beads updates, and closeout.
|
|
23
|
+
- Subagents inspect, compare, critique, slice the phase, prepare implementation guidance or patches, verify, and report.
|
|
24
|
+
- Subagents do not advance loop state.
|
|
25
|
+
- Use 8+ agents by default for broad scout, slice, implementation-helper, and review work; 8-20 agents is normal when the phase has meaningful surface area.
|
|
26
|
+
- Before broad implementation, launch a slice planning swarm and record the synthesized slice plan in the turn doc.
|
|
27
|
+
- For non-trivial phases, create or record intra-phase implementation slices. Use ephemeral Beads child issues when supported and useful; otherwise record the slices in the turn doc.
|
|
28
|
+
- The coordinator may implement glue, integration, conflict resolution, and final repairs. If it performs most broad discovery or implementation itself, the loop has violated this workflow.
|
|
29
|
+
- If fewer than 8 subagents are used for a broad phase, record the reason in the turn doc.
|
|
30
|
+
|
|
31
|
+
## Slice Contract
|
|
32
|
+
|
|
33
|
+
Each implementation slice has:
|
|
34
|
+
|
|
35
|
+
- slice id
|
|
36
|
+
- files or modules
|
|
37
|
+
- expected behavior change
|
|
38
|
+
- tests or gates
|
|
39
|
+
- out-of-scope boundary
|
|
40
|
+
- assigned helper mission
|
|
41
|
+
- compact report using `schemas/swarm-report.schema.json`
|
|
42
|
+
|
|
43
|
+
## Completion Criterion
|
|
44
|
+
|
|
45
|
+
The main coordinator has selected one phase, received and synthesized scout/slice/implementation-helper reports, integrated one phase, received reviewer/CI subagent reports, updated the existing turn doc, updated Beads, and either continued to the next ready phase or stopped with an allowed stop reason.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"title": "ImplementationCallback",
|
|
4
|
+
"type": "object",
|
|
5
|
+
"additionalProperties": false,
|
|
6
|
+
"required": ["type", "orchestrator_thread_id", "source_thread_id", "phase_issue_id", "status", "branch", "pr", "commits", "turn_doc", "local_gates", "changed_files", "blockers", "context_to_keep"],
|
|
7
|
+
"properties": {
|
|
8
|
+
"type": { "const": "implementation-callback" },
|
|
9
|
+
"orchestrator_thread_id": { "type": "string", "minLength": 1 },
|
|
10
|
+
"source_thread_id": { "type": "string", "minLength": 1 },
|
|
11
|
+
"phase_issue_id": { "type": "string" },
|
|
12
|
+
"status": { "enum": ["pr-ready", "blocked"] },
|
|
13
|
+
"branch": { "type": ["string", "null"] },
|
|
14
|
+
"pr": { "type": ["string", "null"] },
|
|
15
|
+
"commits": {
|
|
16
|
+
"type": "array",
|
|
17
|
+
"items": { "type": "string" }
|
|
18
|
+
},
|
|
19
|
+
"turn_doc": { "type": "string" },
|
|
20
|
+
"local_gates": {
|
|
21
|
+
"type": "array",
|
|
22
|
+
"items": { "type": "string" }
|
|
23
|
+
},
|
|
24
|
+
"changed_files": {
|
|
25
|
+
"type": "array",
|
|
26
|
+
"items": { "type": "string" }
|
|
27
|
+
},
|
|
28
|
+
"blockers": {
|
|
29
|
+
"type": "array",
|
|
30
|
+
"items": { "type": "string" }
|
|
31
|
+
},
|
|
32
|
+
"context_to_keep": {
|
|
33
|
+
"type": "array",
|
|
34
|
+
"maxItems": 5,
|
|
35
|
+
"items": { "type": "string" }
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"title": "ReviewCallback",
|
|
4
|
+
"type": "object",
|
|
5
|
+
"additionalProperties": false,
|
|
6
|
+
"required": ["type", "orchestrator_thread_id", "source_thread_id", "phase_issue_id", "status", "pr", "ci_state", "review_skill", "repairs", "findings_remaining", "turn_doc", "context_to_keep"],
|
|
7
|
+
"properties": {
|
|
8
|
+
"type": { "const": "review-callback" },
|
|
9
|
+
"orchestrator_thread_id": { "type": "string", "minLength": 1 },
|
|
10
|
+
"source_thread_id": { "type": "string", "minLength": 1 },
|
|
11
|
+
"phase_issue_id": { "type": "string" },
|
|
12
|
+
"status": { "enum": ["approved", "repaired", "blocked"] },
|
|
13
|
+
"pr": { "type": ["string", "null"] },
|
|
14
|
+
"ci_state": {
|
|
15
|
+
"enum": ["ci-green", "ci-repaired-and-green", "ci-unavailable-with-evidence", "ci-blocked-with-cause"]
|
|
16
|
+
},
|
|
17
|
+
"review_skill": {
|
|
18
|
+
"const": "thermo-nuclear-code-quality-review"
|
|
19
|
+
},
|
|
20
|
+
"repairs": {
|
|
21
|
+
"type": "array",
|
|
22
|
+
"items": { "type": "string" }
|
|
23
|
+
},
|
|
24
|
+
"findings_remaining": {
|
|
25
|
+
"type": "array",
|
|
26
|
+
"items": { "type": "string" }
|
|
27
|
+
},
|
|
28
|
+
"turn_doc": { "type": "string" },
|
|
29
|
+
"context_to_keep": {
|
|
30
|
+
"type": "array",
|
|
31
|
+
"maxItems": 5,
|
|
32
|
+
"items": { "type": "string" }
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"title": "SwarmReport",
|
|
4
|
+
"type": "object",
|
|
5
|
+
"additionalProperties": false,
|
|
6
|
+
"required": ["mission", "slice_id", "status", "scope_checked", "findings", "recommendations", "artifacts", "context_to_keep"],
|
|
7
|
+
"properties": {
|
|
8
|
+
"mission": { "enum": ["selector", "scout", "slice-plan", "implementation-helper", "review", "ci", "storyboard"] },
|
|
9
|
+
"slice_id": { "type": ["string", "null"] },
|
|
10
|
+
"status": { "enum": ["ready", "blocked", "risk-found", "done"] },
|
|
11
|
+
"scope_checked": {
|
|
12
|
+
"type": "array",
|
|
13
|
+
"items": { "type": "string" }
|
|
14
|
+
},
|
|
15
|
+
"findings": {
|
|
16
|
+
"type": "array",
|
|
17
|
+
"items": {
|
|
18
|
+
"type": "object",
|
|
19
|
+
"additionalProperties": false,
|
|
20
|
+
"required": ["severity", "evidence", "summary", "recommendation"],
|
|
21
|
+
"properties": {
|
|
22
|
+
"severity": { "enum": ["high", "medium", "low", "info"] },
|
|
23
|
+
"evidence": { "type": "string" },
|
|
24
|
+
"summary": { "type": "string" },
|
|
25
|
+
"recommendation": { "type": "string" }
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
"recommendations": {
|
|
30
|
+
"type": "array",
|
|
31
|
+
"items": { "type": "string" }
|
|
32
|
+
},
|
|
33
|
+
"artifacts": {
|
|
34
|
+
"type": "array",
|
|
35
|
+
"items": { "type": "string" }
|
|
36
|
+
},
|
|
37
|
+
"context_to_keep": {
|
|
38
|
+
"type": "array",
|
|
39
|
+
"maxItems": 5,
|
|
40
|
+
"items": { "type": "string" }
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# {{STREAM_NAME}} Roadmap
|
|
2
|
+
|
|
3
|
+
Canonical tracker: Beads epic `{{EPIC_ID}}`
|
|
4
|
+
|
|
5
|
+
## Plan Source
|
|
6
|
+
|
|
7
|
+
{{PLAN_SOURCE}}
|
|
8
|
+
|
|
9
|
+
## Outcome
|
|
10
|
+
|
|
11
|
+
{{STREAM_GOAL}}
|
|
12
|
+
|
|
13
|
+
## Phase Sequence
|
|
14
|
+
|
|
15
|
+
{{PHASE_SEQUENCE}}
|
|
16
|
+
|
|
17
|
+
## Dependencies
|
|
18
|
+
|
|
19
|
+
{{DEPENDENCY_NOTES}}
|
|
20
|
+
|
|
21
|
+
## Risks
|
|
22
|
+
|
|
23
|
+
{{KNOWN_RISKS}}
|
|
24
|
+
|
|
25
|
+
## Quality Gates
|
|
26
|
+
|
|
27
|
+
{{QUALITY_GATES}}
|
|
28
|
+
|
|
29
|
+
## Closeout
|
|
30
|
+
|
|
31
|
+
The final closeout artifact is:
|
|
32
|
+
|
|
33
|
+
`docs/implementation/{{STREAM_SLUG}}/storyboard-post-run-{{MM_DD_YYYY}}.html`
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# {{STREAM_NAME}} Implementation Loop
|
|
2
|
+
|
|
3
|
+
Workflow: `{{WORKFLOW}}`
|
|
4
|
+
|
|
5
|
+
Canonical tracker: Beads epic `{{EPIC_ID}}`
|
|
6
|
+
|
|
7
|
+
This stream is driven by Beads. These docs are execution context and resume aids. If Beads and these docs disagree, Beads wins.
|
|
8
|
+
|
|
9
|
+
## Goal
|
|
10
|
+
|
|
11
|
+
{{STREAM_GOAL}}
|
|
12
|
+
|
|
13
|
+
## Sources Of Truth
|
|
14
|
+
|
|
15
|
+
- Beads epic: `{{EPIC_ID}}`
|
|
16
|
+
- Beads loop metadata: workflow, run policy, branch/PR policy, quality gates, callback/thread defaults, and swarm policy
|
|
17
|
+
- Roadmap: `docs/implementation/{{STREAM_SLUG}}/00-roadmap.md`
|
|
18
|
+
- Loop state mirror: `docs/implementation/{{STREAM_SLUG}}/loop-state.md`
|
|
19
|
+
- Phase docs linked from Beads child issues
|
|
20
|
+
- Turn docs: `docs/implementation/{{STREAM_SLUG}}/turn-docs/`
|
|
21
|
+
|
|
22
|
+
## Loop Rules
|
|
23
|
+
|
|
24
|
+
- Select exactly one next ready Beads child issue.
|
|
25
|
+
- Read the linked phase doc before editing.
|
|
26
|
+
- Continue phase-by-phase by default until the epic is complete, blocked, interrupted, or review/CI is unresolved.
|
|
27
|
+
- Use `run once` / `--once` only when intentionally running one phase and stopping after closeout.
|
|
28
|
+
- Keep one active implementation PR at a time unless Beads and the phase doc explicitly allow parallel work.
|
|
29
|
+
- File Beads follow-ups instead of widening the selected phase.
|
|
30
|
+
- Update Beads first, then update `loop-state.md`.
|
|
31
|
+
- Use the workflow's required subagent swarms.
|
|
32
|
+
- Worker and reviewer threads default to standard speed/reasoning unless Beads loop metadata explicitly overrides it.
|
|
33
|
+
|
|
34
|
+
## Review And CI
|
|
35
|
+
|
|
36
|
+
Reviewer agents must use:
|
|
37
|
+
|
|
38
|
+
`thermo-nuclear-code-quality-review`
|
|
39
|
+
|
|
40
|
+
Reviewer and CI verification agents own CI.
|
|
41
|
+
|
|
42
|
+
Allowed CI closeout states:
|
|
43
|
+
|
|
44
|
+
- `ci-green`
|
|
45
|
+
- `ci-repaired-and-green`
|
|
46
|
+
- `ci-unavailable-with-evidence`
|
|
47
|
+
- `ci-blocked-with-cause`
|
|
48
|
+
|
|
49
|
+
## Turn Docs
|
|
50
|
+
|
|
51
|
+
Each phase has exactly one Markdown turn doc:
|
|
52
|
+
|
|
53
|
+
`docs/implementation/{{STREAM_SLUG}}/turn-docs/{{PHASE_ID}}.md`
|
|
54
|
+
|
|
55
|
+
Implementation, review, CI, repairs, PR state, Beads updates, follow-ups, and closeout all go into the same doc.
|
|
56
|
+
|
|
57
|
+
## Storyboard
|
|
58
|
+
|
|
59
|
+
When the epic is complete, generate:
|
|
60
|
+
|
|
61
|
+
`docs/implementation/{{STREAM_SLUG}}/storyboard-post-run-{{MM_DD_YYYY}}.html`
|
|
62
|
+
|
|
63
|
+
Use `impeccable` when present. If missing, continue without it and note that it was skipped.
|
|
64
|
+
|
|
65
|
+
Install `@pierre/diffs` in the target repo if missing. Every diff must use `@pierre/diffs/ssr`.
|
|
66
|
+
|
|
67
|
+
## Phase Ledger
|
|
68
|
+
|
|
69
|
+
| Beads Issue | Phase | Phase Doc | Depends On | Status |
|
|
70
|
+
|---|---|---|---|---|
|
|
71
|
+
{{PHASE_LEDGER_ROWS}}
|
|
72
|
+
|
|
73
|
+
## Quality Gates
|
|
74
|
+
|
|
75
|
+
{{QUALITY_GATES}}
|
|
76
|
+
|
|
77
|
+
## Branch And PR Policy
|
|
78
|
+
|
|
79
|
+
{{BRANCH_PR_POLICY}}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Loop State
|
|
2
|
+
|
|
3
|
+
Canonical tracker: Beads epic `{{EPIC_ID}}`
|
|
4
|
+
|
|
5
|
+
This file is a compact resume aid only. If this file disagrees with Beads, Beads wins.
|
|
6
|
+
|
|
7
|
+
Status: active
|
|
8
|
+
|
|
9
|
+
Stream: `{{STREAM_SLUG}}`
|
|
10
|
+
|
|
11
|
+
Workflow: `{{WORKFLOW}}`
|
|
12
|
+
|
|
13
|
+
Current phase: none
|
|
14
|
+
|
|
15
|
+
Current Beads issue: none
|
|
16
|
+
|
|
17
|
+
Current PR: none
|
|
18
|
+
|
|
19
|
+
Last completed phase: none
|
|
20
|
+
|
|
21
|
+
Blocked: no
|
|
22
|
+
|
|
23
|
+
## Decisions
|
|
24
|
+
|
|
25
|
+
{{INITIAL_DECISIONS}}
|
|
26
|
+
|
|
27
|
+
## Context To Keep
|
|
28
|
+
|
|
29
|
+
{{INITIAL_CONTEXT_TO_KEEP}}
|
|
30
|
+
|
|
31
|
+
## Phase Ledger
|
|
32
|
+
|
|
33
|
+
| Phase | Beads Issue | Status | PR | Turn Doc |
|
|
34
|
+
|---|---|---|---|---|
|
|
35
|
+
{{PHASE_STATE_ROWS}}
|
|
36
|
+
|
|
37
|
+
## Last Coordinator Update
|
|
38
|
+
|
|
39
|
+
Not started.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Phase {{PHASE_NUMBER}}: {{PHASE_TITLE}}
|
|
2
|
+
|
|
3
|
+
Canonical Beads issue: `{{PHASE_ISSUE_ID}}`
|
|
4
|
+
|
|
5
|
+
Epic: `{{EPIC_ID}}`
|
|
6
|
+
|
|
7
|
+
Status is tracked in Beads. This doc is implementation context.
|
|
8
|
+
|
|
9
|
+
## Outcome
|
|
10
|
+
|
|
11
|
+
{{PHASE_OUTCOME}}
|
|
12
|
+
|
|
13
|
+
## Scope
|
|
14
|
+
|
|
15
|
+
Allowed:
|
|
16
|
+
|
|
17
|
+
{{PHASE_ALLOWED_SCOPE}}
|
|
18
|
+
|
|
19
|
+
Out of scope:
|
|
20
|
+
|
|
21
|
+
{{PHASE_OUT_OF_SCOPE}}
|
|
22
|
+
|
|
23
|
+
## Inputs
|
|
24
|
+
|
|
25
|
+
{{PHASE_INPUTS}}
|
|
26
|
+
|
|
27
|
+
## Implementation Notes
|
|
28
|
+
|
|
29
|
+
{{PHASE_IMPLEMENTATION_NOTES}}
|
|
30
|
+
|
|
31
|
+
## Beads
|
|
32
|
+
|
|
33
|
+
- Epic: `{{EPIC_ID}}`
|
|
34
|
+
- Issue: `{{PHASE_ISSUE_ID}}`
|
|
35
|
+
- Depends on: `{{PHASE_DEPENDENCY_IDS}}`
|
|
36
|
+
- Parallel-safe: `{{PHASE_PARALLEL_SAFE}}`
|
|
37
|
+
|
|
38
|
+
## Expected Files Or Areas
|
|
39
|
+
|
|
40
|
+
{{EXPECTED_FILES_OR_AREAS}}
|
|
41
|
+
|
|
42
|
+
## Suggested Swarms
|
|
43
|
+
|
|
44
|
+
{{PHASE_SWARM_GUIDANCE}}
|
|
45
|
+
|
|
46
|
+
## Quality Gates
|
|
47
|
+
|
|
48
|
+
{{PHASE_QUALITY_GATES}}
|
|
49
|
+
|
|
50
|
+
## Completion Criteria
|
|
51
|
+
|
|
52
|
+
{{PHASE_COMPLETION_CRITERIA}}
|
|
53
|
+
|
|
54
|
+
## Follow-Up Policy
|
|
55
|
+
|
|
56
|
+
Do not widen this phase. File Beads follow-ups for adjacent discoveries.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Run Loop: {{STREAM_NAME}}
|
|
2
|
+
|
|
3
|
+
Workflow: `{{WORKFLOW}}`
|
|
4
|
+
|
|
5
|
+
Canonical tracker: Beads epic `{{EPIC_ID}}`
|
|
6
|
+
|
|
7
|
+
Start from:
|
|
8
|
+
|
|
9
|
+
- Beads epic: `{{EPIC_ID}}`
|
|
10
|
+
- Beads loop metadata on the epic
|
|
11
|
+
- Implementation index: `docs/implementation/{{STREAM_SLUG}}/IMPLEMENT.md`
|
|
12
|
+
- Resume aid: `docs/implementation/{{STREAM_SLUG}}/loop-state.md`
|
|
13
|
+
|
|
14
|
+
## Rules
|
|
15
|
+
|
|
16
|
+
- Beads is canonical.
|
|
17
|
+
- Select exactly one next ready Beads child issue.
|
|
18
|
+
- Continue phase-by-phase by default until the epic is complete, blocked, interrupted, or review/CI is unresolved.
|
|
19
|
+
- Stop after one phase only when this run explicitly says `run once` or `--once`.
|
|
20
|
+
- Read the linked phase doc before editing.
|
|
21
|
+
- Keep one active implementation PR at a time unless Beads and the phase doc explicitly allow parallel work.
|
|
22
|
+
- Use the workflow's required large bounded subagent swarms.
|
|
23
|
+
- Reviewer agents must use `thermo-nuclear-code-quality-review`.
|
|
24
|
+
- Reviewer and CI verification agents own CI.
|
|
25
|
+
- Worker and reviewer threads default to standard speed/reasoning unless Beads loop metadata explicitly overrides it.
|
|
26
|
+
- Update the existing Markdown turn doc.
|
|
27
|
+
- Update Beads first, then update `loop-state.md`.
|
|
28
|
+
- Do not widen the selected phase.
|
|
29
|
+
|
|
30
|
+
## Workflow Addendum
|
|
31
|
+
|
|
32
|
+
{{WORKFLOW_ADDENDUM}}
|
|
33
|
+
|
|
34
|
+
## Stream Completion
|
|
35
|
+
|
|
36
|
+
When the Beads epic is complete:
|
|
37
|
+
|
|
38
|
+
1. Verify every phase has a Markdown turn doc.
|
|
39
|
+
2. Generate `docs/implementation/{{STREAM_SLUG}}/storyboard-post-run-{{MM_DD_YYYY}}.html`.
|
|
40
|
+
3. Use `impeccable` when present. If missing, continue and note that it was skipped.
|
|
41
|
+
4. Install `@pierre/diffs` in the target repo if missing, then render every diff with `@pierre/diffs/ssr`.
|
|
42
|
+
5. Verify the storyboard.
|
|
43
|
+
|
|
44
|
+
## Start Prompt
|
|
45
|
+
|
|
46
|
+
{{CUSTOM_RUN_PROMPT}}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
6
|
+
<title>{{STREAM_NAME}} Post-Run Storyboard</title>
|
|
7
|
+
<meta name="description" content="Implementation storyboard for {{STREAM_NAME}}">
|
|
8
|
+
<style>
|
|
9
|
+
/*
|
|
10
|
+
Starter only. The final document should be generated with the impeccable
|
|
11
|
+
skill when present and adapted to the target repo. If impeccable is
|
|
12
|
+
missing, note that it was skipped. Every diff must be rendered
|
|
13
|
+
server-side with @pierre/diffs/ssr.
|
|
14
|
+
*/
|
|
15
|
+
:root {
|
|
16
|
+
color-scheme: dark;
|
|
17
|
+
--bg: oklch(0.14 0.03 265);
|
|
18
|
+
--ink: oklch(0.95 0.01 260);
|
|
19
|
+
--muted: oklch(0.76 0.03 260);
|
|
20
|
+
--accent: oklch(0.76 0.16 170);
|
|
21
|
+
--surface: oklch(0.2 0.04 265);
|
|
22
|
+
--line: oklch(0.33 0.04 265);
|
|
23
|
+
}
|
|
24
|
+
* { box-sizing: border-box; }
|
|
25
|
+
body {
|
|
26
|
+
margin: 0;
|
|
27
|
+
font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
|
28
|
+
background: var(--bg);
|
|
29
|
+
color: var(--ink);
|
|
30
|
+
line-height: 1.5;
|
|
31
|
+
}
|
|
32
|
+
main {
|
|
33
|
+
width: min(1120px, calc(100% - 32px));
|
|
34
|
+
margin: 0 auto;
|
|
35
|
+
padding: 64px 0;
|
|
36
|
+
}
|
|
37
|
+
h1, h2, h3 {
|
|
38
|
+
text-wrap: balance;
|
|
39
|
+
letter-spacing: -0.02em;
|
|
40
|
+
}
|
|
41
|
+
p {
|
|
42
|
+
max-width: 72ch;
|
|
43
|
+
text-wrap: pretty;
|
|
44
|
+
color: var(--muted);
|
|
45
|
+
}
|
|
46
|
+
.storyboard-shell { display: grid; gap: 48px; }
|
|
47
|
+
.phase {
|
|
48
|
+
border: 1px solid var(--line);
|
|
49
|
+
border-radius: 16px;
|
|
50
|
+
padding: 24px;
|
|
51
|
+
background: var(--surface);
|
|
52
|
+
}
|
|
53
|
+
.diff-scene {
|
|
54
|
+
overflow: auto;
|
|
55
|
+
border-radius: 12px;
|
|
56
|
+
border: 1px solid var(--line);
|
|
57
|
+
}
|
|
58
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
59
|
+
.phase { animation: rise 700ms cubic-bezier(.16, 1, .3, 1) both; }
|
|
60
|
+
@keyframes rise {
|
|
61
|
+
from { opacity: .001; transform: translateY(16px); }
|
|
62
|
+
to { opacity: 1; transform: translateY(0); }
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
</style>
|
|
66
|
+
</head>
|
|
67
|
+
<body>
|
|
68
|
+
<main class="storyboard-shell">
|
|
69
|
+
<header>
|
|
70
|
+
<p>{{STORYBOARD_DATE}}</p>
|
|
71
|
+
<h1>{{STREAM_NAME}}</h1>
|
|
72
|
+
<p>{{STORYBOARD_DECK}}</p>
|
|
73
|
+
</header>
|
|
74
|
+
{{PHASE_STORY_SECTIONS}}
|
|
75
|
+
</main>
|
|
76
|
+
</body>
|
|
77
|
+
</html>
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Phase {{PHASE_NUMBER}} Turn Doc: {{PHASE_TITLE}}
|
|
2
|
+
|
|
3
|
+
Beads issue: `{{PHASE_ISSUE_ID}}`
|
|
4
|
+
|
|
5
|
+
Phase doc: `docs/implementation/{{STREAM_SLUG}}/{{PHASE_DOC_FILENAME}}`
|
|
6
|
+
|
|
7
|
+
This is the single Markdown turn doc for the phase.
|
|
8
|
+
|
|
9
|
+
## Phase Selection
|
|
10
|
+
|
|
11
|
+
{{PHASE_SELECTION}}
|
|
12
|
+
|
|
13
|
+
## Scope
|
|
14
|
+
|
|
15
|
+
{{PHASE_SCOPE_SUMMARY}}
|
|
16
|
+
|
|
17
|
+
## Implementation Log
|
|
18
|
+
|
|
19
|
+
{{IMPLEMENTATION_LOG}}
|
|
20
|
+
|
|
21
|
+
## Subagent Swarms
|
|
22
|
+
|
|
23
|
+
{{SUBAGENT_SWARM_SUMMARY}}
|
|
24
|
+
|
|
25
|
+
## Review
|
|
26
|
+
|
|
27
|
+
Reviewer skill:
|
|
28
|
+
|
|
29
|
+
`thermo-nuclear-code-quality-review`
|
|
30
|
+
|
|
31
|
+
{{REVIEW_NOTES}}
|
|
32
|
+
|
|
33
|
+
## CI And Gates
|
|
34
|
+
|
|
35
|
+
CI owner: reviewer/verification agents
|
|
36
|
+
|
|
37
|
+
Current CI state: `{{CI_STATE}}`
|
|
38
|
+
|
|
39
|
+
Evidence:
|
|
40
|
+
|
|
41
|
+
{{CI_EVIDENCE}}
|
|
42
|
+
|
|
43
|
+
## PR And Commits
|
|
44
|
+
|
|
45
|
+
{{PR_AND_COMMITS}}
|
|
46
|
+
|
|
47
|
+
## Beads Updates
|
|
48
|
+
|
|
49
|
+
{{BEADS_UPDATES}}
|
|
50
|
+
|
|
51
|
+
## Follow-Ups Filed
|
|
52
|
+
|
|
53
|
+
{{FOLLOW_UPS_FILED}}
|
|
54
|
+
|
|
55
|
+
## Context To Keep
|
|
56
|
+
|
|
57
|
+
{{CONTEXT_TO_KEEP}}
|
|
58
|
+
|
|
59
|
+
## Closeout
|
|
60
|
+
|
|
61
|
+
{{PHASE_CLOSEOUT}}
|