bigpowers 1.2.2 → 1.3.0

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.
Files changed (57) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/CLAUDE.md +5 -4
  3. package/CONVENTIONS.md +54 -12
  4. package/README.md +5 -5
  5. package/SKILL-INDEX.md +14 -11
  6. package/assess-impact/SKILL.md +2 -2
  7. package/build-epic/SKILL.md +42 -0
  8. package/change-request/SKILL.md +16 -16
  9. package/compose-workflow/SKILL.md +1 -1
  10. package/deepen-architecture/SKILL.md +6 -6
  11. package/define-success/SKILL.md +1 -1
  12. package/delegate-task/SKILL.md +4 -4
  13. package/develop-tdd/SKILL.md +5 -5
  14. package/dispatch-agents/SKILL.md +2 -2
  15. package/evolve-skill/SKILL.md +2 -2
  16. package/execute-plan/SKILL.md +22 -59
  17. package/fix-bug/SKILL.md +37 -0
  18. package/grill-with-docs/SKILL.md +1 -1
  19. package/inspect-quality/SKILL.md +5 -5
  20. package/investigate-bug/SKILL.md +2 -2
  21. package/kickoff-branch/SKILL.md +1 -1
  22. package/map-codebase/SKILL.md +4 -4
  23. package/migrate-spec/SKILL.md +18 -18
  24. package/model-domain/SKILL.md +7 -7
  25. package/orchestrate-project/SKILL.md +5 -8
  26. package/package.json +4 -2
  27. package/plan-release/SKILL.md +63 -39
  28. package/plan-work/SKILL.md +6 -6
  29. package/research-first/SKILL.md +3 -3
  30. package/run-planning/SKILL.md +24 -0
  31. package/scope-work/SKILL.md +6 -6
  32. package/scripts/bp-yaml-set.sh +9 -0
  33. package/scripts/bp-yaml-snapshot.sh +23 -0
  34. package/scripts/build-skill-index.sh +2 -2
  35. package/scripts/convert-legado.sh +153 -0
  36. package/scripts/enrich-epics-from-archive.sh +101 -0
  37. package/scripts/land-branch.sh +5 -1
  38. package/scripts/project-survey.sh +18 -9
  39. package/scripts/sync-bugs-registry.sh +53 -0
  40. package/scripts/sync-status-from-epics.sh +51 -0
  41. package/scripts/validate-specs-yaml.sh +41 -0
  42. package/scripts/yaml-tools.py +144 -0
  43. package/session-state/SKILL.md +59 -50
  44. package/setup-environment/SKILL.md +1 -1
  45. package/slice-tasks/SKILL.md +6 -6
  46. package/survey-context/SKILL.md +38 -27
  47. package/trace-requirement/SKILL.md +8 -8
  48. package/using-bigpowers/SKILL.md +10 -9
  49. package/validate-fix/SKILL.md +3 -3
  50. package/verify-work/SKILL.md +12 -17
  51. package/visual-dashboard/SKILL.md +25 -74
  52. package/visual-dashboard/scripts/cockpit.html +66 -0
  53. package/visual-dashboard/scripts/read-specs-status.cjs +123 -0
  54. package/visual-dashboard/scripts/server.cjs +40 -0
  55. package/write-document/SKILL.md +1 -1
  56. package/maintain-wiki/SKILL.md +0 -130
  57. package/profiles/obsidian-wiki.md +0 -120
@@ -0,0 +1,144 @@
1
+ #!/usr/bin/env python3
2
+ """Minimal YAML helpers for bigpowers specs (no external deps)."""
3
+ from __future__ import annotations
4
+
5
+ import re
6
+ import sys
7
+ from pathlib import Path
8
+ from typing import Any
9
+
10
+
11
+ def _parse_simple_yaml(text: str) -> dict[str, Any]:
12
+ """Parse flat and one-level-nested YAML (no lists of objects)."""
13
+ root: dict[str, Any] = {}
14
+ stack: list[tuple[int, dict[str, Any]]] = [(0, root)]
15
+ for raw in text.splitlines():
16
+ if not raw.strip() or raw.strip().startswith("#"):
17
+ continue
18
+ indent = len(raw) - len(raw.lstrip())
19
+ line = raw.strip()
20
+ if ":" not in line:
21
+ continue
22
+ key, _, val = line.partition(":")
23
+ key = key.strip()
24
+ val = val.strip()
25
+ while stack and indent < stack[-1][0]:
26
+ stack.pop()
27
+ cur = stack[-1][1]
28
+ if val == "":
29
+ nxt: dict[str, Any] = {}
30
+ cur[key] = nxt
31
+ stack.append((indent + 2, nxt))
32
+ else:
33
+ if val in ("true", "false"):
34
+ cur[key] = val == "true"
35
+ elif val.startswith('"') and val.endswith('"'):
36
+ cur[key] = val[1:-1]
37
+ elif val.startswith("'") and val.endswith("'"):
38
+ cur[key] = val[1:-1]
39
+ else:
40
+ try:
41
+ if "." in val:
42
+ cur[key] = float(val)
43
+ else:
44
+ cur[key] = int(val)
45
+ except ValueError:
46
+ cur[key] = val
47
+ return root
48
+
49
+
50
+ def _dump_value(val: Any, indent: int) -> str:
51
+ sp = " " * indent
52
+ if isinstance(val, dict):
53
+ lines = []
54
+ for k, v in val.items():
55
+ if isinstance(v, dict):
56
+ lines.append(f"{sp}{k}:")
57
+ lines.append(_dump_value(v, indent + 2).rstrip())
58
+ elif isinstance(v, bool):
59
+ lines.append(f"{sp}{k}: {'true' if v else 'false'}")
60
+ elif isinstance(v, (int, float)):
61
+ lines.append(f"{sp}{k}: {v}")
62
+ else:
63
+ s = str(v).replace('"', '\\"')
64
+ lines.append(f'{sp}{k}: "{s}"')
65
+ return "\n".join(lines) + "\n"
66
+ return f"{sp}{val}\n"
67
+
68
+
69
+ def dump_yaml(data: dict[str, Any]) -> str:
70
+ return _dump_value(data, 0)
71
+
72
+
73
+ def set_path(path: Path, dotted_key: str, value: str) -> None:
74
+ text = path.read_text(encoding="utf-8") if path.exists() else ""
75
+ data = _parse_simple_yaml(text) if text.strip() else {}
76
+ parts = dotted_key.split(".")
77
+ cur: Any = data
78
+ for part in parts[:-1]:
79
+ if part not in cur or not isinstance(cur[part], dict):
80
+ cur[part] = {}
81
+ cur = cur[part]
82
+ last = parts[-1]
83
+ if value.lower() in ("true", "false"):
84
+ cur[last] = value.lower() == "true"
85
+ else:
86
+ try:
87
+ cur[last] = int(value)
88
+ except ValueError:
89
+ try:
90
+ cur[last] = float(value)
91
+ except ValueError:
92
+ cur[last] = value.strip('"').strip("'")
93
+ path.parent.mkdir(parents=True, exist_ok=True)
94
+ path.write_text(dump_yaml(data), encoding="utf-8")
95
+
96
+
97
+ def validate_file(path: Path, required_keys: list[str]) -> list[str]:
98
+ errors: list[str] = []
99
+ if not path.exists():
100
+ return [f"missing: {path}"]
101
+ text = path.read_text(encoding="utf-8")
102
+ data = _parse_simple_yaml(text)
103
+ for key in required_keys:
104
+ parts = key.split(".")
105
+ cur: Any = data
106
+ for part in parts:
107
+ if not isinstance(cur, dict) or part not in cur:
108
+ errors.append(f"{path}: missing key '{key}'")
109
+ break
110
+ cur = cur[part]
111
+ return errors
112
+
113
+
114
+ def main() -> int:
115
+ if len(sys.argv) < 2:
116
+ print("usage: yaml-tools.py set <file> <dotted.key> <value>", file=sys.stderr)
117
+ return 2
118
+ cmd = sys.argv[1]
119
+ if cmd == "set":
120
+ _, _, file, key, val = sys.argv
121
+ set_path(Path(file), key, val)
122
+ return 0
123
+ if cmd == "validate":
124
+ root = Path(sys.argv[2]) if len(sys.argv) > 2 else Path("specs")
125
+ errors: list[str] = []
126
+ errors += validate_file(root / "state.yaml", ["active_flow"])
127
+ errors += validate_file(
128
+ root / "release-plan.yaml", ["release", "release.version", "epics"]
129
+ )
130
+ errors += validate_file(
131
+ root / "execution-status.yaml", ["development_status"]
132
+ )
133
+ if errors:
134
+ for e in errors:
135
+ print(e)
136
+ return 1
137
+ print("OK")
138
+ return 0
139
+ print(f"unknown command: {cmd}", file=sys.stderr)
140
+ return 2
141
+
142
+
143
+ if __name__ == "__main__":
144
+ sys.exit(main())
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: session-state
3
3
  model: haiku
4
- description: Track implementation decisions and progress in specs/STATE.md to prevent context rot. Use at the start of a session to load context, and whenever a significant decision is made or a milestone is reached.
4
+ description: Track implementation decisions and progress in specs/state.yaml to prevent context rot. Use at the start of a session to load context, and whenever a significant decision is made or a milestone is reached.
5
5
  ---
6
6
 
7
7
  # Session State
@@ -10,82 +10,91 @@ Track the current state of implementation, including decisions made, pending tas
10
10
 
11
11
  ## Goal
12
12
 
13
- Maintain a single source of truth for the *current* state of the work in `specs/STATE.md`. This file acts as the project's short-term memory, complementing the long-term memory of `specs/CONTEXT.md` and the task-specific instructions in `specs/RELEASE-PLAN.md`.
13
+ Maintain a single source of truth for the *current* session in `specs/state.yaml`. This complements long-term docs in `specs/plans/` and delivery detail in `specs/epics/` + `specs/release-plan.yaml`.
14
14
 
15
- ## Handoff block (cold start)
15
+ Legacy `specs/state.yaml` is deprecated — use `state.yaml` only.
16
16
 
17
- When ending a session or before a context-heavy spawn, write a **Handoff** section at the top of STATE.md:
17
+ ## Handoff block (cold start)
18
18
 
19
- ```markdown
20
- ## Handoff
21
- - **Last step completed:** ...
22
- - **Open decisions:** ...
23
- - **Required reading:** CONVENTIONS.md, RELEASE-PLAN.md story X.Y, ...
24
- - **Next skill:** verify-work | develop-tdd | ...
19
+ When ending a session or before a context-heavy spawn, update `handoff` in `state.yaml`:
20
+
21
+ ```yaml
22
+ handoff:
23
+ last_step_completed: "e02s01 verify-work passed"
24
+ open_decisions:
25
+ - "Use folder mode for e07 (>5 stories)"
26
+ required_reading:
27
+ - CONVENTIONS.md
28
+ - specs/epics/e02-verification/epic.yaml
29
+ next_skill: develop-tdd
25
30
  ```
26
31
 
27
32
  ## Strategic compaction
28
33
 
29
34
  | Trigger | Action |
30
35
  |---------|--------|
31
- | Phase transition (Plan → Build → Verify) | Compact Handoff; archive verbose decisions to ADR |
36
+ | Phase transition (Plan → Build → Verify) | Compact handoff; archive verbose decisions to ADR |
32
37
  | Context > 70% estimated | Run terse-mode for status only; move detail to specs/ |
33
- | Before `dispatch-agents` wave | STATE.md only channel between spawns |
38
+ | Before `dispatch-agents` wave | `state.yaml` only channel between spawns |
34
39
 
35
40
  ## Workflow
36
41
 
37
42
  ### 1. Initialize (Session Start)
38
43
 
39
- If `specs/STATE.md` does not exist, or if starting a new major phase:
44
+ If `specs/state.yaml` does not exist, or if starting a new major phase:
40
45
 
41
- - [ ] Read `specs/RELEASE-PLAN.md` and `specs/SCOPE.md`.
42
- - [ ] Get git metadata: `git branch --show-current` and `git rev-parse HEAD`.
43
- - [ ] Create `specs/STATE.md` with the current milestone, git metadata, pending tasks, and any active decisions.
46
+ - [ ] Read `specs/release-plan.yaml` and `specs/requirements/SCOPE_LATEST.yaml`.
47
+ - [ ] Get git metadata: `git branch --show-current` and `git rev-parse --short HEAD`.
48
+ - [ ] Create `specs/state.yaml` with active flow, git, handoff, and epic cycle if in build.
44
49
 
45
50
  ### 2. Load (Context Refresh)
46
51
 
47
52
  When starting a new session or after a significant context flush:
48
53
 
49
- - [ ] Read `specs/STATE.md` to understand where the previous agent left off.
50
- - [ ] Verify the current state matches the actual codebase (run `git branch` and `git diff`).
51
- - [ ] Surface any discrepancies between recorded git hash and current hash.
54
+ - [ ] Read `specs/state.yaml` to understand where the previous agent left off.
55
+ - [ ] Read `specs/execution-status.yaml` for story progress (do not infer from release-plan).
56
+ - [ ] Verify git matches `state.yaml` `git.branch` / `git.hash`.
52
57
 
53
58
  ### 3. Update (Decision Point/Milestone)
54
59
 
55
60
  Whenever a significant decision is made or a milestone is reached:
56
61
 
57
- - [ ] Update git metadata if the branch or hash has changed.
58
- - [ ] Update the `Active Decisions` section with the rationale for the choice.
59
- - [ ] Mark completed tasks as done.
60
- - [ ] Add new pending tasks discovered during implementation.
61
- - [ ] Record any "Open Questions" that need user clarification.
62
-
63
- ## File Format: specs/STATE.md
64
-
65
- ```markdown
66
- # Session State: [Feature Name]
67
-
68
- ## Current Milestone
69
- [What is being worked on right now]
70
-
71
- ## Git Metadata
72
- - **Branch**: [branch-name]
73
- - **Hash**: [commit-hash]
74
-
75
- ## Pending Tasks
76
- ...
77
- ```
78
- - [ ] Task 2
79
-
80
- ## Active Decisions
81
- - **Decision Name**: [Rationale and impact]
82
-
83
- ## Open Questions
84
- - [Question for the user]
62
+ - [ ] Patch via `bash scripts/bp-yaml-set.sh specs/state.yaml git.hash <hash>` (or edit directly).
63
+ - [ ] Update `handoff.open_decisions` with rationale.
64
+ - [ ] Update `epic_cycle` when advancing `ship-epic` steps.
65
+ - [ ] Record open questions under `handoff.open_decisions` or an ADR.
66
+
67
+ → verify: `bash scripts/validate-specs-yaml.sh`
68
+
69
+ ## File Format: specs/state.yaml
70
+
71
+ ```yaml
72
+ active_flow: build_epic # planning | build_epic | fix_bug
73
+ active_epic_id: e02
74
+ active_story_id: e02s01 # required when epic mode: folder
75
+ active_bug_id: null # BUG-2026-06-01T143022 when fix_bug
76
+ release:
77
+ target_version: "3.0.0"
78
+ last_tag: null
79
+ last_publish: null
80
+ epic_cycle:
81
+ current_step: develop-tdd
82
+ next_skill: develop-tdd
83
+ completed_steps: [kickoff-branch]
84
+ bug_cycle:
85
+ current_step: null
86
+ completed_steps: []
87
+ git:
88
+ branch: feat/e02-verify
89
+ hash: abc1234
90
+ handoff:
91
+ last_step_completed: null
92
+ open_decisions: []
93
+ next_skill: survey-context
85
94
  ```
86
95
 
87
96
  ## Anti-Patterns
88
97
 
89
- - **Duplicate Plan**: Don't just copy `specs/RELEASE-PLAN.md`. The plan is the *intended* path; the state is the *actual* progress and the deviations from that path.
90
- - **Stale State**: Forgetting to update `specs/STATE.md` after a major refactor or decision.
91
- - **Verbose History**: Keep it focused on the *current* state. Use git history for the past.
98
+ - **Duplicate Plan**: Don't copy `release-plan.yaml` or epic shards into `state.yaml`.
99
+ - **Stale State**: Forgetting to update `state.yaml` after a major refactor or decision.
100
+ - **Status in release-plan**: Story/epic status lives only in `execution-status.yaml`.
@@ -15,7 +15,7 @@ Idempotent prep so BUILD phase commands succeed on first run.
15
15
  3. Install dependencies (`npm ci`, `bundle install`, etc.) — prefer lockfile installs.
16
16
  4. Copy `.env.example` → `.env` if documented; never commit secrets.
17
17
  5. Run smoke: lint + one fast test or `--version` on key tools.
18
- 6. Record versions in `specs/STATE.md` under Environment.
18
+ 6. Record versions in `specs/state.yaml` under Environment.
19
19
 
20
20
  ## Verify
21
21
 
@@ -1,22 +1,22 @@
1
1
  ---
2
2
  name: slice-tasks
3
- description: Break a plan or PRD into independently-grabbable vertical-slice tasks in specs/TASKS.md. Use after scope-work or plan-release, before plan-work, when user wants implementation tickets or tracer-bullet slices.
3
+ description: Break a plan or PRD into vertical-slice stories in specs/epics/ (replaces legacy TASKS.md). Use after scope-work or plan-release, before plan-work.
4
4
  model: sonnet
5
5
  ---
6
6
 
7
7
  # Slice Tasks
8
8
 
9
- Produce `specs/TASKS.md` — vertical slices, each independently deliverable and testable.
9
+ Produce **epic shard stories** in `specs/epics/eNN-*.yaml` — vertical slices, each independently deliverable and testable. Legacy `specs/epics/ (see slice-tasks)` is deprecated; use epics + `execution-status.yaml`.
10
10
 
11
11
  ## Process
12
12
 
13
- 1. Read `specs/SCOPE.md` and/or `specs/RELEASE-PLAN.md`.
13
+ 1. Read `specs/requirements/SCOPE_LATEST.yaml` and/or `specs/release-plan.yaml`.
14
14
  2. Cut **tracer-bullet slices** (thin end-to-end paths first, then depth).
15
- 3. Each task entry: `id`, `title`, `depends-on:` (optional), `verify:` command, `story:` link.
16
- 4. Order by WSJF within the file.
15
+ 3. Each story: `id` (e.g. `e03s01`), `title`, optional `depends-on` in task desc, `tasks[]` with `desc` + `verify`.
16
+ 4. Order by WSJF in `release-plan.yaml` epic list.
17
17
 
18
18
  > **HARD GATE** — No horizontal-only slices ("add all models") without a vertical path that proves integration.
19
19
 
20
20
  ## Verify
21
21
 
22
- → verify: `test -f specs/TASKS.md && grep -c "verify:" specs/TASKS.md | awk '{if($1>0) print "OK"; else print "MISSING"}'`
22
+ → verify: `grep -c 'id: e' specs/epics/*.yaml | awk '{if($1>0) print "OK"; else print "MISSING"}'`
@@ -14,23 +14,30 @@ Read the project's current state and give a phase map + next-skill recommendatio
14
14
 
15
15
  If `CONVENTIONS.md` exists at the project root, read it first. It contains the rules all agents must follow in this project.
16
16
 
17
- ### 2. Read specs/
17
+ ### 2. Read specs/ (YAML-first)
18
18
 
19
19
  Scan the `specs/` directory if it exists:
20
20
 
21
21
  ```
22
22
  specs/
23
- ├── CONTEXT.md domain model status
24
- ├── UBIQUITOUS_LANGUAGE.md glossary status
25
- ├── SCOPE.md scope definition status
26
- ├── TASKS.md task breakdown status
27
- ├── RELEASE-PLAN.md → implementation plan status
28
- ├── REFACTOR.md → refactor plan status
29
- ├── bugs/ → bug investigations (BUG-*.md) + BUG-LOG.md
30
- └── SPIKE-*.md → spike learning notes
23
+ ├── state.yaml session: active_flow, epic, git, handoff
24
+ ├── release-plan.yaml target version, WSJF epic index
25
+ ├── execution-status.yaml flat story/epic status
26
+ ├── planning-status.yaml discover-phase checklist (optional)
27
+ ├── requirements/
28
+ ├── VISION_LATEST.yaml
29
+ ├── SCOPE_LATEST.yaml
30
+ └── GLOSSARY_LATEST.yaml
31
+ ├── plans/ → TECH_STACK, TEST_PLAN, etc.
32
+ ├── epics/ → eNN shards (flat yaml or eNN/stories/)
33
+ └── bugs/ → BUG-*.md + registry.yaml
31
34
  ```
32
35
 
33
- For each file found, note: does it exist? Is it complete? Does it have open items?
36
+ For each YAML file found, note: exists? keys populated? `handoff.next_skill`?
37
+
38
+ Legacy markdown (`specs/archive/STATE.md`, `RELEASE-PLAN.md`) is **not** SoT if YAML exists.
39
+
40
+ → verify: `bash scripts/validate-specs-yaml.sh 2>/dev/null || echo "YAML layout incomplete"`
34
41
 
35
42
  ### 3. Read CLAUDE.md
36
43
 
@@ -44,7 +51,7 @@ git log --oneline -5
44
51
  git branch --show-current
45
52
  ```
46
53
 
47
- Note: is there a feature branch active? Are there uncommitted changes? Are there unpushed commits?
54
+ Note: is there a feature branch active? Are there uncommitted changes? Do they match `specs/state.yaml` `git` block?
48
55
 
49
56
  ### 5. Map the lifecycle phase
50
57
 
@@ -52,33 +59,36 @@ Based on what you've found, identify which PMBOK phase this project is currently
52
59
 
53
60
  | Phase | Signals |
54
61
  |-------|---------|
55
- | **Discover** | No specs/ yet, or only rough notes |
56
- | **Design** | specs/SCOPE.md exists but no RELEASE-PLAN.md |
57
- | **Plan** | specs/TASKS.md or RELEASE-PLAN.md exists; on `main`/`master` branch |
62
+ | **Discover** | No `requirements/SCOPE_LATEST.yaml` yet, or only rough notes |
63
+ | **Design** | SCOPE exists but no `release-plan.yaml` |
64
+ | **Plan** | `release-plan.yaml` exists; on `main`/`master` branch |
58
65
  | **Initiate** | On a feature branch; no code changes yet |
59
- | **Execute** | RELEASE-PLAN.md exists; on feature branch; steps in progress |
60
- | **Verify** | Implementation done; run `verify-work` or `run-evals`; awaiting UAT |
61
- | **Bug** | `specs/bugs/BUG-*.md` exists; on `main`/`master` |
66
+ | **Execute** | `state.yaml` `active_flow: build_epic`; epic shard in progress |
67
+ | **Verify** | Implementation done; run `verify-work` or `run-evals` |
68
+ | **Bug** | `state.yaml` `active_flow: fix_bug` or open `specs/bugs/BUG-*.md` |
62
69
  | **Review** | All code written; no PR yet |
63
70
  | **Integrate** | PR open; tests passing |
64
71
  | **Sustain** | Ongoing; no active task |
65
72
 
73
+ Prefer `specs/state.yaml` `active_flow` and `handoff.next_skill` when present.
74
+
66
75
  ### 6. Suggest next skill
67
76
 
68
77
  Based on the phase and state, recommend the most useful next step:
69
78
 
70
79
  - **If in Plan/Bug phase and on `main`**: Suggest `kickoff-branch` next.
71
- - **If in Initiate phase**: Suggest `develop-tdd` or `execute-plan`.
72
- - **If in Execute phase**: Suggest `develop-tdd` (continue step X) or `execute-plan`.
73
- - **If in Verify phase**: Suggest `verify-work` (UAT) or `run-evals` (capability evals).
80
+ - **If in Initiate phase**: Suggest `develop-tdd` or `execute-plan` or `ship-epic`.
81
+ - **If in Execute phase**: Suggest `ship-epic` (resume) or `develop-tdd` for `active_story_id`.
82
+ - **If in Verify phase**: Suggest `verify-work` (UAT) or `run-evals`.
74
83
 
75
84
  Example:
76
85
  ```
77
- Phase: Plan
78
- Active branch: main
79
- RELEASE-PLAN.md: exists
86
+ Phase: Execute
87
+ Active branch: feat/e02-verify (state.yaml matches)
88
+ release-plan.yaml: v3.0.0, 10 epics
89
+ active_epic_id: e02
80
90
 
81
- Suggested next: kickoff-branch (to create feature/auth branch)
91
+ Suggested next: ship-epic (resume e02s01 at develop-tdd)
82
92
  ```
83
93
 
84
94
  Be specific — name the exact skill and why. If multiple options exist, list them in priority order.
@@ -87,8 +97,9 @@ Be specific — name the exact skill and why. If multiple options exist, list th
87
97
 
88
98
  If something looks wrong:
89
99
  - Broken tests in the baseline
90
- - `specs/bugs/BUG-*.md` open with no active fix branch
91
- - RELEASE-PLAN.md with missing verify commands or Verification Script sections
92
- - CONVENTIONS.md violations in recent commits
100
+ - Open `specs/bugs/BUG-*.md` with no active fix branch
101
+ - Epic shards missing `verify:` on tasks
102
+ - `validate-specs-yaml.sh` fails
103
+ - Git hash in `state.yaml` stale vs `git rev-parse`
93
104
 
94
105
  Report blockers first, before recommendations.
@@ -1,28 +1,28 @@
1
1
  ---
2
2
  name: trace-requirement
3
3
  model: haiku
4
- description: Link story IDs from specs/RELEASE-PLAN.md to the implementing code and tests. Produces specs/TRACEABILITY.md. Use when you want to verify coverage of a release plan, audit which stories are implemented, or find "dark" stories with no code.
4
+ description: Link story IDs from specs/release-plan.yaml + epic shards to the implementing code and tests. Produces specs/TRACEABILITY.md. Use when you want to verify coverage of a release plan, audit which stories are implemented, or find "dark" stories with no code.
5
5
  ---
6
6
 
7
7
  # Trace Requirement
8
8
 
9
- Build a traceability matrix from `specs/RELEASE-PLAN.md` to implementing code and tests. Surfaces gaps in both directions: stories with no code, and code with no story.
9
+ Build a traceability matrix from `specs/release-plan.yaml + epic shards` to implementing code and tests. Surfaces gaps in both directions: stories with no code, and code with no story.
10
10
 
11
11
  ## Pre-flight
12
12
 
13
- > **HARD GATE** — `specs/RELEASE-PLAN.md` must exist. If it doesn't, run `plan-release` first.
13
+ > **HARD GATE** — `specs/release-plan.yaml + epic shards` must exist. If it doesn't, run `plan-release` first.
14
14
 
15
- → verify: `[ -f specs/RELEASE-PLAN.md ] && echo "ready" || echo "BLOCKED: run plan-release first"`
15
+ → verify: `[ -f specs/release-plan.yaml + epic shards ] && echo "ready" || echo "BLOCKED: run plan-release first"`
16
16
 
17
- Read `specs/RELEASE-PLAN.md` fully before proceeding.
17
+ Read `specs/release-plan.yaml + epic shards` fully before proceeding.
18
18
 
19
19
  ## Process
20
20
 
21
21
  ### 1. Extract story IDs
22
22
 
23
- From RELEASE-PLAN.md, collect all story IDs (e.g. `1.1`, `1.2`, `2.1`).
23
+ From release-plan.yaml, collect all story IDs (e.g. `1.1`, `1.2`, `2.1`).
24
24
 
25
- → verify: `grep -o "Story [0-9]\+\.[0-9]\+" specs/RELEASE-PLAN.md | sort -u`
25
+ → verify: `grep -o "Story [0-9]\+\.[0-9]\+" specs/release-plan.yaml + epic shards | sort -u`
26
26
 
27
27
  ### 2. Search for story tags in code
28
28
 
@@ -41,7 +41,7 @@ For each story ID:
41
41
  - **Tested**: list test files that contain `// story: X.Y`
42
42
  - **Dark**: story has no tag in any file — flag as unimplemented
43
43
 
44
- For each tagged file with no matching story ID in RELEASE-PLAN.md:
44
+ For each tagged file with no matching story ID in release-plan.yaml:
45
45
  - **Orphan**: code exists but story was removed or never planned — flag for cleanup
46
46
 
47
47
  ### 4. Write specs/TRACEABILITY.md
@@ -6,7 +6,7 @@ description: One-time bootstrap that introduces the bigpowers skills system, the
6
6
 
7
7
  # Using bigpowers
8
8
 
9
- Welcome to **bigpowers** — a lifecycle of **59** agent skills for production-ready, TDD-driven software by solo developers.
9
+ Welcome to **bigpowers** — a lifecycle of **61** agent skills for production-ready, TDD-driven software by solo developers.
10
10
 
11
11
  ## Install
12
12
 
@@ -78,23 +78,24 @@ If you work alone and do not want PR ceremony every task:
78
78
 
79
79
  You still use worktrees, protected `main`, and verification gates — only the integrate step changes.
80
80
 
81
- ## Obsidian wiki cockpit (optional)
81
+ ## YAML cockpit and dashboard
82
82
 
83
- For accumulated project understanding and a read-only PM view:
83
+ Operational source of truth:
84
84
 
85
- 1. Read [profiles/obsidian-wiki.md](../profiles/obsidian-wiki.md).
86
- 2. Open `specs/` as an Obsidian vault; landing page `COCKPIT.md`.
87
- 3. Run `maintain-wiki` **sync** before merge (merge gate).
85
+ - `specs/state.yaml` session, active epic/story, handoff
86
+ - `specs/release-plan.yaml` release index and epic list
87
+ - `specs/epics/eNN-*.yaml` stories and tasks with `verify`
88
+ - `specs/execution-status.yaml` — done/pending per story
88
89
 
89
- Operational specs (STATE, RELEASE-PLAN) stay source of truth; `specs/wiki/` is LLM-synthesized navigation.
90
+ Start the HTTP dashboard with `visual-dashboard` `GET /api/status?projectDir=<abs>` and `GET /cockpit.html` for a read-only PM view.
90
91
 
91
92
  ## Key conventions
92
93
 
93
94
  - **specs/ is your memory.** All domain docs, plans, and investigation outputs go in `specs/` at your project root.
94
95
  - **Integrate:** team default is `gh pr` (team-pr); solo profile uses `land-branch.sh`. Never create GitHub issues from skills — use local Markdown files instead.
95
96
  - **One skill, one thing.** If you're unsure which skill to call, call `survey-context` — it reads your current state and recommends the next step.
96
- - **verify: every step.** Every task in `specs/RELEASE-PLAN.md` must have a `verify: <runnable command>`. Evidence over claims.
97
- - **59 skills.** See `SKILL-INDEX.md`; find skills with `search-skills`.
97
+ - **verify: every step.** Every epic task must have `verify: <runnable command>`. Evidence over claims.
98
+ - **61 skills.** See `SKILL-INDEX.md`; find skills with `search-skills`.
98
99
 
99
100
  ## After this
100
101
 
@@ -59,7 +59,7 @@ For every bug fixed, add at least one prevention layer:
59
59
  - [ ] At least one hardening mechanism added
60
60
  - [ ] Hardening mechanism is tested
61
61
 
62
- ### 6. Update the bug file and BUG-LOG.md
62
+ ### 6. Update the bug file and registry.yaml
63
63
 
64
64
  Find the most recent `specs/bugs/BUG-*.md` file and append the resolution:
65
65
 
@@ -74,10 +74,10 @@ Find the most recent `specs/bugs/BUG-*.md` file and append the resolution:
74
74
  **Commit:** `fix(<scope>): <description>`
75
75
  ```
76
76
 
77
- Also update the corresponding row in `specs/bugs/BUG-LOG.md`: set `status` to `fixed`, fill in `files_changed`, `approach`, `risk_level`, `commit_message`, and any other resolution fields.
77
+ Also update the corresponding row in `specs/bugs/registry.yaml`: set `status` to `fixed`, fill in `files_changed`, `approach`, `risk_level`, `commit_message`, and any other resolution fields.
78
78
 
79
79
  - [ ] specs/bugs/BUG-*.md updated with resolution
80
- - [ ] specs/bugs/BUG-LOG.md row updated with resolution fields
80
+ - [ ] specs/bugs/registry.yaml row updated with resolution fields
81
81
 
82
82
  ### 7. Behavioral Proof (HARD GATE)
83
83
 
@@ -1,39 +1,34 @@
1
1
  ---
2
2
  name: verify-work
3
- description: Multi-phase UAT gate — cold-start smoke, build, typecheck, lint, tests, step-by-step manual verification, gaps-closure loop. Use after execute-plan or develop-tdd, before audit-code, when a story needs proof it works.
3
+ description: Multi-phase UAT gate — cold-start smoke, build, typecheck, lint, tests, step-by-step manual verification, gaps-closure loop. Use after execute-plan or develop-tdd, before audit-code.
4
4
  model: haiku
5
5
  ---
6
6
 
7
7
  # Verify Work
8
8
 
9
- > **HARD GATE** — No story is "done" until its `## Verification Script` from RELEASE-PLAN.md is confirmed by the user or agent with evidence.
10
-
11
- > **HARD GATE** — Do NOT run verify-work on `main` or `master`. Run from the feature branch or worktree created by `kickoff-branch`.
9
+ > **HARD GATE** — No story is "done" until manual UAT for the active story is confirmed with evidence.
10
+ >
11
+ > **HARD GATE** — Do NOT run on `main` or `master`. Use the feature branch from `kickoff-branch`.
12
12
 
13
13
  Review answers "is the code good?"; Verify answers "does the built thing do what was promised?"
14
14
 
15
15
  ## Process
16
16
 
17
- 0. **Branch check** (before any gates):
18
-
19
- ```bash
20
- BRANCH=$(git rev-parse --abbrev-ref HEAD)
21
- # Must not be main or master — run kickoff-branch first
22
- ```
17
+ 0. **Branch check** must not be `main`/`master`.
23
18
 
24
- 1. Read the story's `## Verification Script` from `specs/RELEASE-PLAN.md`.
19
+ 1. Read active story tasks and any **Verification Script** notes in `specs/epics/{active}.yaml` or story `.md` under `specs/epics/eNN/stories/`.
25
20
  2. **Cold-start smoke** (if app): stop server, clear caches, boot from scratch.
26
- 3. Run mechanical gates: build → typecheck → lint → full test suite (commands from CLAUDE.md).
27
- 4. **Step-by-step UAT**: one user-observable action at a time; record pass/fail.
28
- 5. **Gaps loop**: failed steps → log as Gaps feed back to `plan-work` → re-verify until pass.
21
+ 3. Mechanical gates: build → typecheck → lint → tests (from `CLAUDE.md`).
22
+ 4. **Step-by-step UAT** one user-observable action at a time.
23
+ 5. **Gaps loop** failures → log → `plan-work` → re-verify.
29
24
 
30
25
  ## UAT dialogue
31
26
 
32
- - Pass: user confirms `yes` / `next` / `ok` per step.
33
- - Fail: capture expected vs actual; do not mark story done.
27
+ - Pass: user confirms per step.
28
+ - Fail: capture expected vs actual; do not mark done in `execution-status.yaml`.
34
29
 
35
30
  ## Verify
36
31
 
37
- → verify: `grep -c "Verification Script" specs/RELEASE-PLAN.md | awk '{if($1>0) print "OK"; else print "MISSING"}'`
32
+ → verify: `grep -c 'verify:' specs/epics/*.yaml | awk '{if($1>0) print "OK"; else print "MISSING"}'`
38
33
 
39
34
  See [REFERENCE.md](REFERENCE.md) for cold-start and gaps template.