bigpowers 2.77.2 → 2.78.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/.pi/package.json +2 -2
- package/.pi/prompts/find-way.md +190 -0
- package/.pi/prompts/gate-trace.md +3 -1
- package/.pi/skills/find-way/SKILL.md +191 -0
- package/.pi/skills/gate-trace/SKILL.md +3 -1
- package/CHANGELOG.md +28 -0
- package/README.md +1 -1
- package/SKILL-INDEX.md +1 -1
- package/package.json +1 -1
- package/scripts/generate-epics-wiki.sh +6 -0
- package/scripts/golden-g11-gitignore-venv.sh +14 -0
- package/scripts/lib/__pycache__/link_utils.cpython-312.pyc +0 -0
- package/scripts/lib/blind-spots.py +3 -0
- package/scripts/lib/completeness-critic.sh +13 -3
- package/scripts/lib/plan-consistency-check.sh +22 -11
- package/scripts/sync-status-from-epics.sh +3 -2
- package/skills/find-way/REFERENCE.md +90 -0
- package/skills/find-way/SKILL.md +100 -0
- package/skills/gate-trace/SKILL.md +3 -1
- package/skills-lock.json +6 -1
package/.pi/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "bigpowers",
|
|
3
|
-
"version": "2.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "2.78.1",
|
|
4
|
+
"description": "80 skills — 73 agent skills synthesizing 17 years of software engineering discipline into a prescriptive methodology for solo developers",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"pi-package"
|
|
7
7
|
],
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: find-way
|
|
3
|
+
description: "Plan a large effort as a shared map of decision tickets on an issue tracker, resolving them one at a time until the way is clear. Use when an idea is too big for one session, needs structured exploration before implementation, or requires mapping decisions before building."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Find Way
|
|
7
|
+
|
|
8
|
+
## Concept
|
|
9
|
+
|
|
10
|
+
A large effort arrives — too big for one session, wrapped in fog. **Find-way** charts the way as a **shared map** on the repo's issue tracker, then works **decision tickets** — questions whose resolution is a decision, not build slices — one at a time until the route is clear.
|
|
11
|
+
|
|
12
|
+
**Plan, don't do.** Each ticket resolves a decision. The map is done when the way is clear — nothing left to decide before someone executes.
|
|
13
|
+
|
|
14
|
+
**Refer by name.** Every map and ticket is an issue with a title. Always use the name, never bare ids or numbers.
|
|
15
|
+
|
|
16
|
+
## The Map
|
|
17
|
+
|
|
18
|
+
A single issue labelled `wayfinder:map` — the canonical artifact. Child issues are its tickets.
|
|
19
|
+
|
|
20
|
+
```markdown
|
|
21
|
+
## Destination
|
|
22
|
+
<what reaching the end looks like — one or two lines>
|
|
23
|
+
|
|
24
|
+
## Notes
|
|
25
|
+
<domain, skills to consult, standing preferences>
|
|
26
|
+
|
|
27
|
+
## Decisions so far
|
|
28
|
+
- [closed ticket title](link) — one-line gist
|
|
29
|
+
|
|
30
|
+
## Not yet specified
|
|
31
|
+
<in-scope fog you can't ticket yet>
|
|
32
|
+
|
|
33
|
+
## Out of scope
|
|
34
|
+
<work ruled beyond the destination>
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Ticket Types
|
|
38
|
+
|
|
39
|
+
| Type | Label | Mode | Purpose |
|
|
40
|
+
|------|-------|------|---------|
|
|
41
|
+
| Research | `wayfinder:research` | AFK | Surface facts from docs/APIs |
|
|
42
|
+
| Prototype | `wayfinder:prototype` | HITL | Cheap artifact to react to |
|
|
43
|
+
| Grilling | `wayfinder:grilling` | HITL | One-question-at-a-time dialogue |
|
|
44
|
+
| Task | `wayfinder:task` | Either | Manual work unblocking a decision |
|
|
45
|
+
|
|
46
|
+
**HITL** = human in the loop. **AFK** = agent alone.
|
|
47
|
+
|
|
48
|
+
## Two Modes
|
|
49
|
+
|
|
50
|
+
### Chart the Map
|
|
51
|
+
|
|
52
|
+
User invokes with a loose idea.
|
|
53
|
+
|
|
54
|
+
1. **Name the destination** — grill to pin down what this map finds its way to
|
|
55
|
+
2. **Map the frontier** — breadth-first: surface open decisions and first steps. If no fog emerges, the effort fits one session — skip the map
|
|
56
|
+
3. **Create the map** issue (label `wayfinder:map`)
|
|
57
|
+
4. **Create tickets** as child issues, then wire blocking edges in a second pass
|
|
58
|
+
5. **Fire research subagents** for each `research` ticket in parallel
|
|
59
|
+
6. Stop — charting resolves nothing
|
|
60
|
+
|
|
61
|
+
### Work Through the Map
|
|
62
|
+
|
|
63
|
+
User invokes with a map (URL/number). Ticket optional — without one, pick the next frontier ticket.
|
|
64
|
+
|
|
65
|
+
1. Load the map (low-res view)
|
|
66
|
+
2. **Choose & claim** — assign ticket before any work
|
|
67
|
+
3. **Resolve** — zoom into related/closed tickets as needed
|
|
68
|
+
4. **Record** — post resolution comment, close issue, append to Decisions-so-far
|
|
69
|
+
5. **Graduate fog** — create new tickets from newly-specifiable fog, clear from Not-yet-specified
|
|
70
|
+
6. **Rule out of scope** if resolution reveals something past the destination
|
|
71
|
+
|
|
72
|
+
**Never resolve more than one ticket per session** (except research).
|
|
73
|
+
|
|
74
|
+
## Fog of War
|
|
75
|
+
|
|
76
|
+
Beyond live tickets lies the **fog** — decisions you can tell are coming but can't pin down yet. The **Not yet specified** section holds this dim view.
|
|
77
|
+
|
|
78
|
+
**Fog or ticket?** Test: can you state the question precisely now?
|
|
79
|
+
|
|
80
|
+
- **Ticket** when the question is sharp (even if blocked)
|
|
81
|
+
- **Not yet specified** when you can't phrase it sharply yet
|
|
82
|
+
|
|
83
|
+
## Out of Scope
|
|
84
|
+
|
|
85
|
+
Work beyond the destination. Ruling something out is a scoping act, not a route step. Never graduates — returns only if destination is redrawn.
|
|
86
|
+
|
|
87
|
+
If an existing ticket sits past the destination, close it and note in Out of scope.
|
|
88
|
+
|
|
89
|
+
## Blocking & Frontier
|
|
90
|
+
|
|
91
|
+
- **Blocking**: tracker's native dependency relationship
|
|
92
|
+
- **Unblocked**: every blocker is closed
|
|
93
|
+
- **Frontier**: open, unblocked, unclaimed children — the edge of the known
|
|
94
|
+
|
|
95
|
+
## Detailed Reference
|
|
96
|
+
|
|
97
|
+
See [REFERENCE.md](REFERENCE.md) for ticket anatomy, resolution protocol, and examples.
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
# Find-Way Reference
|
|
102
|
+
|
|
103
|
+
## Ticket Anatomy
|
|
104
|
+
|
|
105
|
+
Each ticket holds one question, sized to one 100K token agent session:
|
|
106
|
+
|
|
107
|
+
```markdown
|
|
108
|
+
## Question
|
|
109
|
+
|
|
110
|
+
<the decision or investigation this ticket resolves>
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
**Labels:** `wayfinder:research`, `wayfinder:prototype`, `wayfinder:grilling`, or `wayfinder:task`
|
|
114
|
+
|
|
115
|
+
**Claim:** Assign to yourself before any work — claim blocks concurrent sessions.
|
|
116
|
+
|
|
117
|
+
**Blocking:** Use tracker's native dependency relationship so the frontier renders visually.
|
|
118
|
+
|
|
119
|
+
**Resolution:** Post answer as a comment, close the issue, append to map's Decisions-so-far.
|
|
120
|
+
|
|
121
|
+
## Resolution Protocol
|
|
122
|
+
|
|
123
|
+
1. **Load the map** — read low-res view, not every ticket body
|
|
124
|
+
2. **Choose & claim** — assign ticket to yourself (or take first frontier ticket if not named)
|
|
125
|
+
3. **Resolve** — zoom into related/closed tickets as needed; invoke skills the Notes block names
|
|
126
|
+
4. **Record** — post resolution comment with the answer, close the issue
|
|
127
|
+
5. **Update map** — append to Decisions-so-far with one-line gist + link
|
|
128
|
+
6. **Graduate fog** — create new tickets from newly-specifiable fog; clear from Not-yet-specified
|
|
129
|
+
7. **Rule out of scope** if resolution reveals something past the destination
|
|
130
|
+
|
|
131
|
+
## Ticket Types in Detail
|
|
132
|
+
|
|
133
|
+
### Research (AFK)
|
|
134
|
+
Surfacing facts from docs, APIs, or knowledge bases that a decision waits on.
|
|
135
|
+
- Resolved by a `/research` subagent
|
|
136
|
+
- Use when knowledge outside the working directory is required
|
|
137
|
+
- **Label:** `wayfinder:research`
|
|
138
|
+
|
|
139
|
+
### Prototype (HITL)
|
|
140
|
+
Raise fidelity by building cheap, rough, concrete artifact to react to — outline, stub, UI/logic code.
|
|
141
|
+
- Use the `/prototype` skill
|
|
142
|
+
- Links the prototype as an asset
|
|
143
|
+
- Use when "how should it look" or "how should it behave" is key
|
|
144
|
+
- **Label:** `wayfinder:prototype`
|
|
145
|
+
|
|
146
|
+
### Grilling (HITL)
|
|
147
|
+
Conversation via `/grilling` and `/domain-modeling` skills, one question at a time.
|
|
148
|
+
- The default case for clarifying decisions
|
|
149
|
+
- **Label:** `wayfinder:grilling`
|
|
150
|
+
|
|
151
|
+
### Task (HITL or AFK)
|
|
152
|
+
Manual work unblocking a decision — signing up for service, provisioning access, moving data.
|
|
153
|
+
- This is the **only** type that does rather than decides
|
|
154
|
+
- Earns its place by unblocking a decision, not by delivering the destination
|
|
155
|
+
- Agent drives AFK tasks alone; HITL tasks get precise checklist
|
|
156
|
+
- **Label:** `wayfinder:task`
|
|
157
|
+
|
|
158
|
+
## Fog-to-Ticket Graduation
|
|
159
|
+
|
|
160
|
+
When resolving a ticket clears fog, graduate the newly-specifiable bits into fresh tickets:
|
|
161
|
+
|
|
162
|
+
1. **Identify the fog** in Not-yet-specified that the resolution illuminates
|
|
163
|
+
2. **Create new tickets** with crisp question statements
|
|
164
|
+
3. **Wire blocking edges** if the new tickets depend on each other or existing ones
|
|
165
|
+
4. **Clear from fog** — remove the graduated patch from Not-yet-specified so it lives only as its ticket
|
|
166
|
+
|
|
167
|
+
## Out-of-Scope Close Protocol
|
|
168
|
+
|
|
169
|
+
If a ticket turns out to sit past the destination:
|
|
170
|
+
|
|
171
|
+
1. **Close the ticket** — mark it resolved or won't-fix
|
|
172
|
+
2. **Add one line to Out of scope** — gist + why it's out of scope, linking the closed ticket
|
|
173
|
+
3. **Never append to Decisions so far** — scope boundaries aren't steps on the route
|
|
174
|
+
|
|
175
|
+
## Map State Transitions
|
|
176
|
+
|
|
177
|
+
| State | Meaning | Action |
|
|
178
|
+
|-------|---------|--------|
|
|
179
|
+
| **Open, unblocked, unclaimed** | Frontier — ready to take | Claim and resolve |
|
|
180
|
+
| **Open, blocked** | Waiting on something | Wait for blockers to close |
|
|
181
|
+
| **Open, claimed** | Concurrent session working | Skip for now |
|
|
182
|
+
| **Closed** | Decided — lives in Decisions so far | Reference, don't re-open |
|
|
183
|
+
|
|
184
|
+
## Concurrency
|
|
185
|
+
|
|
186
|
+
Users may run unblocked tickets in parallel, so expect the tracker to be edited concurrently. Always:
|
|
187
|
+
|
|
188
|
+
- Refresh the map before picking a ticket
|
|
189
|
+
- Claim immediately before starting work
|
|
190
|
+
- Never assume state hasn't changed since last read
|
|
@@ -69,7 +69,9 @@ gate_trace:
|
|
|
69
69
|
## Integration Points
|
|
70
70
|
|
|
71
71
|
- **release-branch SKILL.md** — pre-PR gate (FAIL blocks merge).
|
|
72
|
-
- **sync-skills.yml** —
|
|
72
|
+
- **sync-skills.yml** — runs `trace-stories.sh --strict` as its "Traceability gate" step (FAIL
|
|
73
|
+
blocks pipeline), which shares this skill's coverage data (`traceability-matrix.json`) but
|
|
74
|
+
does not invoke a gate-trace PASS/CONCERNS/FAIL/WAIVED verdict directly.
|
|
73
75
|
- **verify-work SKILL.md** — runs blind-spot checks; gate-trace consumes the result.
|
|
74
76
|
|
|
75
77
|
## References
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: find-way
|
|
3
|
+
model: sonnet
|
|
4
|
+
description: "Plan a large effort as a shared map of decision tickets on an issue tracker, resolving them one at a time until the way is clear. Use when an idea is too big for one session, needs structured exploration before implementation, or requires mapping decisions before building."
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Find Way
|
|
8
|
+
|
|
9
|
+
## Concept
|
|
10
|
+
|
|
11
|
+
A large effort arrives — too big for one session, wrapped in fog. **Find-way** charts the way as a **shared map** on the repo's issue tracker, then works **decision tickets** — questions whose resolution is a decision, not build slices — one at a time until the route is clear.
|
|
12
|
+
|
|
13
|
+
**Plan, don't do.** Each ticket resolves a decision. The map is done when the way is clear — nothing left to decide before someone executes.
|
|
14
|
+
|
|
15
|
+
**Refer by name.** Every map and ticket is an issue with a title. Always use the name, never bare ids or numbers.
|
|
16
|
+
|
|
17
|
+
## The Map
|
|
18
|
+
|
|
19
|
+
A single issue labelled `wayfinder:map` — the canonical artifact. Child issues are its tickets.
|
|
20
|
+
|
|
21
|
+
```markdown
|
|
22
|
+
## Destination
|
|
23
|
+
<what reaching the end looks like — one or two lines>
|
|
24
|
+
|
|
25
|
+
## Notes
|
|
26
|
+
<domain, skills to consult, standing preferences>
|
|
27
|
+
|
|
28
|
+
## Decisions so far
|
|
29
|
+
- [closed ticket title](link) — one-line gist
|
|
30
|
+
|
|
31
|
+
## Not yet specified
|
|
32
|
+
<in-scope fog you can't ticket yet>
|
|
33
|
+
|
|
34
|
+
## Out of scope
|
|
35
|
+
<work ruled beyond the destination>
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Ticket Types
|
|
39
|
+
|
|
40
|
+
| Type | Label | Mode | Purpose |
|
|
41
|
+
|------|-------|------|---------|
|
|
42
|
+
| Research | `wayfinder:research` | AFK | Surface facts from docs/APIs |
|
|
43
|
+
| Prototype | `wayfinder:prototype` | HITL | Cheap artifact to react to |
|
|
44
|
+
| Grilling | `wayfinder:grilling` | HITL | One-question-at-a-time dialogue |
|
|
45
|
+
| Task | `wayfinder:task` | Either | Manual work unblocking a decision |
|
|
46
|
+
|
|
47
|
+
**HITL** = human in the loop. **AFK** = agent alone.
|
|
48
|
+
|
|
49
|
+
## Two Modes
|
|
50
|
+
|
|
51
|
+
### Chart the Map
|
|
52
|
+
|
|
53
|
+
User invokes with a loose idea.
|
|
54
|
+
|
|
55
|
+
1. **Name the destination** — grill to pin down what this map finds its way to
|
|
56
|
+
2. **Map the frontier** — breadth-first: surface open decisions and first steps. If no fog emerges, the effort fits one session — skip the map
|
|
57
|
+
3. **Create the map** issue (label `wayfinder:map`)
|
|
58
|
+
4. **Create tickets** as child issues, then wire blocking edges in a second pass
|
|
59
|
+
5. **Fire research subagents** for each `research` ticket in parallel
|
|
60
|
+
6. Stop — charting resolves nothing
|
|
61
|
+
|
|
62
|
+
### Work Through the Map
|
|
63
|
+
|
|
64
|
+
User invokes with a map (URL/number). Ticket optional — without one, pick the next frontier ticket.
|
|
65
|
+
|
|
66
|
+
1. Load the map (low-res view)
|
|
67
|
+
2. **Choose & claim** — assign ticket before any work
|
|
68
|
+
3. **Resolve** — zoom into related/closed tickets as needed
|
|
69
|
+
4. **Record** — post resolution comment, close issue, append to Decisions-so-far
|
|
70
|
+
5. **Graduate fog** — create new tickets from newly-specifiable fog, clear from Not-yet-specified
|
|
71
|
+
6. **Rule out of scope** if resolution reveals something past the destination
|
|
72
|
+
|
|
73
|
+
**Never resolve more than one ticket per session** (except research).
|
|
74
|
+
|
|
75
|
+
## Fog of War
|
|
76
|
+
|
|
77
|
+
Beyond live tickets lies the **fog** — decisions you can tell are coming but can't pin down yet. The **Not yet specified** section holds this dim view.
|
|
78
|
+
|
|
79
|
+
**Fog or ticket?** Test: can you state the question precisely now?
|
|
80
|
+
|
|
81
|
+
- **Ticket** when the question is sharp (even if blocked)
|
|
82
|
+
- **Not yet specified** when you can't phrase it sharply yet
|
|
83
|
+
|
|
84
|
+
## Out of Scope
|
|
85
|
+
|
|
86
|
+
Work beyond the destination. Ruling something out is a scoping act, not a route step. Never graduates — returns only if destination is redrawn.
|
|
87
|
+
|
|
88
|
+
If an existing ticket sits past the destination, close it and note in Out of scope.
|
|
89
|
+
|
|
90
|
+
## Blocking & Frontier
|
|
91
|
+
|
|
92
|
+
- **Blocking**: tracker's native dependency relationship
|
|
93
|
+
- **Unblocked**: every blocker is closed
|
|
94
|
+
- **Frontier**: open, unblocked, unclaimed children — the edge of the known
|
|
95
|
+
|
|
96
|
+
## Detailed Reference
|
|
97
|
+
|
|
98
|
+
See [REFERENCE.md](../../../skills/find-way/REFERENCE.md) for ticket anatomy, resolution protocol, and examples.
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
# Find-Way Reference
|
|
103
|
+
|
|
104
|
+
## Ticket Anatomy
|
|
105
|
+
|
|
106
|
+
Each ticket holds one question, sized to one 100K token agent session:
|
|
107
|
+
|
|
108
|
+
```markdown
|
|
109
|
+
## Question
|
|
110
|
+
|
|
111
|
+
<the decision or investigation this ticket resolves>
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
**Labels:** `wayfinder:research`, `wayfinder:prototype`, `wayfinder:grilling`, or `wayfinder:task`
|
|
115
|
+
|
|
116
|
+
**Claim:** Assign to yourself before any work — claim blocks concurrent sessions.
|
|
117
|
+
|
|
118
|
+
**Blocking:** Use tracker's native dependency relationship so the frontier renders visually.
|
|
119
|
+
|
|
120
|
+
**Resolution:** Post answer as a comment, close the issue, append to map's Decisions-so-far.
|
|
121
|
+
|
|
122
|
+
## Resolution Protocol
|
|
123
|
+
|
|
124
|
+
1. **Load the map** — read low-res view, not every ticket body
|
|
125
|
+
2. **Choose & claim** — assign ticket to yourself (or take first frontier ticket if not named)
|
|
126
|
+
3. **Resolve** — zoom into related/closed tickets as needed; invoke skills the Notes block names
|
|
127
|
+
4. **Record** — post resolution comment with the answer, close the issue
|
|
128
|
+
5. **Update map** — append to Decisions-so-far with one-line gist + link
|
|
129
|
+
6. **Graduate fog** — create new tickets from newly-specifiable fog; clear from Not-yet-specified
|
|
130
|
+
7. **Rule out of scope** if resolution reveals something past the destination
|
|
131
|
+
|
|
132
|
+
## Ticket Types in Detail
|
|
133
|
+
|
|
134
|
+
### Research (AFK)
|
|
135
|
+
Surfacing facts from docs, APIs, or knowledge bases that a decision waits on.
|
|
136
|
+
- Resolved by a `/research` subagent
|
|
137
|
+
- Use when knowledge outside the working directory is required
|
|
138
|
+
- **Label:** `wayfinder:research`
|
|
139
|
+
|
|
140
|
+
### Prototype (HITL)
|
|
141
|
+
Raise fidelity by building cheap, rough, concrete artifact to react to — outline, stub, UI/logic code.
|
|
142
|
+
- Use the `/prototype` skill
|
|
143
|
+
- Links the prototype as an asset
|
|
144
|
+
- Use when "how should it look" or "how should it behave" is key
|
|
145
|
+
- **Label:** `wayfinder:prototype`
|
|
146
|
+
|
|
147
|
+
### Grilling (HITL)
|
|
148
|
+
Conversation via `/grilling` and `/domain-modeling` skills, one question at a time.
|
|
149
|
+
- The default case for clarifying decisions
|
|
150
|
+
- **Label:** `wayfinder:grilling`
|
|
151
|
+
|
|
152
|
+
### Task (HITL or AFK)
|
|
153
|
+
Manual work unblocking a decision — signing up for service, provisioning access, moving data.
|
|
154
|
+
- This is the **only** type that does rather than decides
|
|
155
|
+
- Earns its place by unblocking a decision, not by delivering the destination
|
|
156
|
+
- Agent drives AFK tasks alone; HITL tasks get precise checklist
|
|
157
|
+
- **Label:** `wayfinder:task`
|
|
158
|
+
|
|
159
|
+
## Fog-to-Ticket Graduation
|
|
160
|
+
|
|
161
|
+
When resolving a ticket clears fog, graduate the newly-specifiable bits into fresh tickets:
|
|
162
|
+
|
|
163
|
+
1. **Identify the fog** in Not-yet-specified that the resolution illuminates
|
|
164
|
+
2. **Create new tickets** with crisp question statements
|
|
165
|
+
3. **Wire blocking edges** if the new tickets depend on each other or existing ones
|
|
166
|
+
4. **Clear from fog** — remove the graduated patch from Not-yet-specified so it lives only as its ticket
|
|
167
|
+
|
|
168
|
+
## Out-of-Scope Close Protocol
|
|
169
|
+
|
|
170
|
+
If a ticket turns out to sit past the destination:
|
|
171
|
+
|
|
172
|
+
1. **Close the ticket** — mark it resolved or won't-fix
|
|
173
|
+
2. **Add one line to Out of scope** — gist + why it's out of scope, linking the closed ticket
|
|
174
|
+
3. **Never append to Decisions so far** — scope boundaries aren't steps on the route
|
|
175
|
+
|
|
176
|
+
## Map State Transitions
|
|
177
|
+
|
|
178
|
+
| State | Meaning | Action |
|
|
179
|
+
|-------|---------|--------|
|
|
180
|
+
| **Open, unblocked, unclaimed** | Frontier — ready to take | Claim and resolve |
|
|
181
|
+
| **Open, blocked** | Waiting on something | Wait for blockers to close |
|
|
182
|
+
| **Open, claimed** | Concurrent session working | Skip for now |
|
|
183
|
+
| **Closed** | Decided — lives in Decisions so far | Reference, don't re-open |
|
|
184
|
+
|
|
185
|
+
## Concurrency
|
|
186
|
+
|
|
187
|
+
Users may run unblocked tickets in parallel, so expect the tracker to be edited concurrently. Always:
|
|
188
|
+
|
|
189
|
+
- Refresh the map before picking a ticket
|
|
190
|
+
- Claim immediately before starting work
|
|
191
|
+
- Never assume state hasn't changed since last read
|
|
@@ -70,7 +70,9 @@ gate_trace:
|
|
|
70
70
|
## Integration Points
|
|
71
71
|
|
|
72
72
|
- **release-branch SKILL.md** — pre-PR gate (FAIL blocks merge).
|
|
73
|
-
- **sync-skills.yml** —
|
|
73
|
+
- **sync-skills.yml** — runs `trace-stories.sh --strict` as its "Traceability gate" step (FAIL
|
|
74
|
+
blocks pipeline), which shares this skill's coverage data (`traceability-matrix.json`) but
|
|
75
|
+
does not invoke a gate-trace PASS/CONCERNS/FAIL/WAIVED verdict directly.
|
|
74
76
|
- **verify-work SKILL.md** — runs blind-spot checks; gate-trace consumes the result.
|
|
75
77
|
|
|
76
78
|
## References
|
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,31 @@
|
|
|
1
|
+
## [2.78.1](https://github.com/danielvm-git/bigpowers/compare/v2.78.0...v2.78.1) (2026-07-23)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* **scripts:** skip epics-wiki generation for epics with zero stories ([78d3985](https://github.com/danielvm-git/bigpowers/commit/78d3985a780dcd9903989b6001ca5c72594d5ba8))
|
|
7
|
+
|
|
8
|
+
# [2.78.0](https://github.com/danielvm-git/bigpowers/compare/v2.77.2...v2.78.0) (2026-07-23)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Bug Fixes
|
|
12
|
+
|
|
13
|
+
* **ci:** make G-11 venv-ignore check independent of .venv's on-disk existence ([91f550d](https://github.com/danielvm-git/bigpowers/commit/91f550d79e408e5734820fb896e8c942fabbf41d))
|
|
14
|
+
* **scripts:** defer type-hint evaluation in blind-spots.py for Python 3.9 ([6356b87](https://github.com/danielvm-git/bigpowers/commit/6356b87167d59422ed75eea0e933229a13b78c12))
|
|
15
|
+
* **scripts:** repair completeness-critic's story-tag check ([5e336ea](https://github.com/danielvm-git/bigpowers/commit/5e336eadc260cb6752cc260f58946b1eddf2c1ee))
|
|
16
|
+
* **scripts:** stop sync-status-from-epics.sh corrupting status on multi-line epic entries ([e23a3be](https://github.com/danielvm-git/bigpowers/commit/e23a3be1a1338ebb2f4393801fb3c74fbdae49ca))
|
|
17
|
+
* **scripts:** unblock compliance gate and repair silently-passing capsule validator ([608d76a](https://github.com/danielvm-git/bigpowers/commit/608d76a428dc3d1d9015236577905a446d8155b8))
|
|
18
|
+
* **skills:** add missing model: frontmatter to find-way, resolving skill-count divergence ([ddb7655](https://github.com/danielvm-git/bigpowers/commit/ddb76556e56c269fca6380e0b94d7d53d90c1ccf))
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
### Features
|
|
22
|
+
|
|
23
|
+
* **e53:** kick off establish-migration-baseline epic ([e74aeca](https://github.com/danielvm-git/bigpowers/commit/e74aecad771284841a59f226fd6c2eb827922553))
|
|
24
|
+
* **planning:** elaborate e55-e59 migration epics into scoped planning-context ([25fb6ff](https://github.com/danielvm-git/bigpowers/commit/25fb6ff5e5cbb1d83acc0341be679666fd57adbd))
|
|
25
|
+
* **release-plan:** sequence e54-e59, the remaining bigspec migration epics ([b6af03d](https://github.com/danielvm-git/bigpowers/commit/b6af03dbc7d19f9ac56b0abf2fa9997c83bacddc))
|
|
26
|
+
* **skills:** add find-way skill for large effort planning ([6b7d27e](https://github.com/danielvm-git/bigpowers/commit/6b7d27e9d007b45b5dba4db688cfd3b135ca72d5))
|
|
27
|
+
* **skills:** add find-way skill with complete reference documentation ([7aa9e0d](https://github.com/danielvm-git/bigpowers/commit/7aa9e0d769aca621071e2a719a0dc12db5a9c28f))
|
|
28
|
+
|
|
1
29
|
## [2.77.2](https://github.com/danielvm-git/bigpowers/compare/v2.77.1...v2.77.2) (2026-07-19)
|
|
2
30
|
|
|
3
31
|
|
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|

|
|
4
4
|

|
|
5
|
-

|
|
6
6
|
|
|
7
7
|
**Agent skills synthesizing 17 years of software engineering discipline — from Clean Code to AI-native architecture — into a single, prescriptive methodology for solo developers.**
|
|
8
8
|
|
package/SKILL-INDEX.md
CHANGED
package/package.json
CHANGED
|
@@ -47,6 +47,12 @@ for epic_yaml in "$ROOT"/specs/epics/*/epic.yaml "$ROOT"/specs/epics/archive/*/e
|
|
|
47
47
|
|
|
48
48
|
# Build references array from story list
|
|
49
49
|
story_count=$(grep -c '^\s*- id:' "$epic_yaml" 2>/dev/null || true)
|
|
50
|
+
|
|
51
|
+
# A scoped-but-unsliced epic (elaborate-spec ran, plan-work hasn't) has zero
|
|
52
|
+
# stories, so references[] would always be empty — no valid OKF bundle can be
|
|
53
|
+
# emitted until it has at least one story. Skip rather than commit an invalid stub.
|
|
54
|
+
[[ "$story_count" -eq 0 ]] && continue
|
|
55
|
+
|
|
50
56
|
refs=$(grep '^\s*- id:' "$epic_yaml" 2>/dev/null | sed 's/.*- id: */ - /' || true)
|
|
51
57
|
|
|
52
58
|
bundle="$WIKI/${epic_id}.okf.md"
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
|
+
# story: e53s01
|
|
2
3
|
# golden-g11-gitignore-venv.sh — Python venv gitignore gate (G-11)
|
|
3
4
|
#
|
|
4
5
|
# Prevents recurrence of BUG-2026-07-03-venv-not-gitignored: a root .venv/
|
|
@@ -38,12 +39,25 @@ for pattern in "${required_patterns[@]}"; do
|
|
|
38
39
|
fi
|
|
39
40
|
done
|
|
40
41
|
|
|
42
|
+
# git check-ignore on a directory-only pattern (.venv/) only matches when the
|
|
43
|
+
# path is confirmed to be a directory — a nonexistent .venv (e.g. a fresh
|
|
44
|
+
# kickoff-branch worktree, before setup-environment runs) reports as "not
|
|
45
|
+
# ignored" even when the pattern is correct. Create it if absent so the check
|
|
46
|
+
# is independent of prior local setup; remove it again only if we created it.
|
|
47
|
+
CREATED_VENV=0
|
|
48
|
+
if [ ! -e .venv ]; then
|
|
49
|
+
mkdir .venv
|
|
50
|
+
CREATED_VENV=1
|
|
51
|
+
fi
|
|
52
|
+
|
|
41
53
|
if git check-ignore -q .venv 2>/dev/null; then
|
|
42
54
|
g11_pass "git check-ignore .venv"
|
|
43
55
|
else
|
|
44
56
|
g11_fail "git check-ignore .venv (path not ignored)"
|
|
45
57
|
fi
|
|
46
58
|
|
|
59
|
+
[ "$CREATED_VENV" -eq 1 ] && rmdir .venv 2>/dev/null || true
|
|
60
|
+
|
|
47
61
|
echo ""
|
|
48
62
|
echo "G-11 summary: $PASS passed, $FAIL failed"
|
|
49
63
|
if [[ "$FAIL" -gt 0 ]]; then
|
|
Binary file
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env python3
|
|
2
|
+
# story: e53s01
|
|
2
3
|
"""story: e38s04 — TEA-inspired heuristic blind-spot detector (Python engine).
|
|
3
4
|
|
|
4
5
|
Reads execution-status.yaml + traceability-matrix.json, runs 7 structural
|
|
@@ -9,6 +10,8 @@ Usage: called by scripts/check-blind-spots.sh with positional args:
|
|
|
9
10
|
<exec_status_yaml> <matrix_json> <verifications_dir> <epics_dir>
|
|
10
11
|
"""
|
|
11
12
|
|
|
13
|
+
from __future__ import annotations
|
|
14
|
+
|
|
12
15
|
import json, os, re, sys
|
|
13
16
|
from pathlib import Path
|
|
14
17
|
from datetime import datetime, timezone
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
|
-
# story: e45s05
|
|
2
|
+
# story: e45s05 e53s01
|
|
3
3
|
# Adversarial gap-finding completeness critic — post gate-trace.
|
|
4
4
|
# Classifications: BLOCKER | WARNING | FILLED
|
|
5
5
|
set -euo pipefail
|
|
@@ -28,8 +28,18 @@ classify() {
|
|
|
28
28
|
|| classify BLOCKER "Missing specs/blind-spots.json — run check-blind-spots.sh"
|
|
29
29
|
|
|
30
30
|
if [[ -f specs/traceability-matrix.json ]]; then
|
|
31
|
-
|
|
32
|
-
|
|
31
|
+
# verify-work runs per-story (build-epic builds one story at a time), so this
|
|
32
|
+
# check must scope to the story currently being verified — not its
|
|
33
|
+
# not-yet-built siblings (which have no code tags by definition until their
|
|
34
|
+
# own turn) and not unrelated epics (which may be plan-worked-to-build-ready
|
|
35
|
+
# but not yet kicked off).
|
|
36
|
+
ACTIVE_STORY="$(grep '^active_story:' specs/state.yaml 2>/dev/null | awk '{print $2}')"
|
|
37
|
+
if [[ -n "$ACTIVE_STORY" ]]; then
|
|
38
|
+
UNDONE="$(jq --arg s "$ACTIVE_STORY" \
|
|
39
|
+
'[.stories[]? | select(.id == $s and .status != "done" and ((.links // []) | map(select(.method == "explicit_tag")) | length) == 0)] | length' \
|
|
40
|
+
specs/traceability-matrix.json 2>/dev/null || echo 0)"
|
|
41
|
+
(( UNDONE > 0 )) && classify BLOCKER "active story $ACTIVE_STORY has zero explicit story-tag links"
|
|
42
|
+
fi
|
|
33
43
|
COVERAGE="$(jq -r '.summary.coverage_percent // .coverage_percent // empty' specs/traceability-matrix.json 2>/dev/null)"
|
|
34
44
|
if [[ -n "$COVERAGE" && "$COVERAGE" != "null" ]]; then
|
|
35
45
|
awk -v c="$COVERAGE" 'BEGIN{if(c+0 < 60) exit 1}' || classify WARNING "Trace coverage ${COVERAGE}% below 60% target"
|
|
@@ -25,13 +25,21 @@ report() {
|
|
|
25
25
|
esac
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
+
# bash-3.2-portable membership test (no associative arrays — macOS ships bash 3.2)
|
|
29
|
+
in_array() {
|
|
30
|
+
local needle="$1"; shift
|
|
31
|
+
local x
|
|
32
|
+
for x in "$@"; do [[ "$x" == "$needle" ]] && return 0; done
|
|
33
|
+
return 1
|
|
34
|
+
}
|
|
35
|
+
|
|
28
36
|
[[ -f "$EPIC_YAML" ]] || report CRITICAL "Missing epic.yaml in $CAPSULE"
|
|
29
37
|
|
|
30
38
|
# Story IDs declared in epic.yaml
|
|
31
|
-
|
|
39
|
+
EPIC_STORIES=()
|
|
32
40
|
if [[ -f "$EPIC_YAML" ]]; then
|
|
33
41
|
while IFS= read -r sid; do
|
|
34
|
-
[[ -n "$sid" ]] && EPIC_STORIES
|
|
42
|
+
[[ -n "$sid" ]] && EPIC_STORIES+=("$sid")
|
|
35
43
|
done < <(grep -E '^[[:space:]]*- id: e[0-9]+s[0-9]+' "$EPIC_YAML" | awk '{print $3}')
|
|
36
44
|
fi
|
|
37
45
|
|
|
@@ -43,32 +51,35 @@ shopt -u nullglob
|
|
|
43
51
|
(( ${#SPECS[@]} > 0 )) || report CRITICAL "No story spec .md files in capsule (run slice-tasks first)"
|
|
44
52
|
(( ${#TASKS[@]} > 0 )) || report CRITICAL "No *-tasks.yaml files in capsule (run plan-work first)"
|
|
45
53
|
|
|
46
|
-
|
|
47
|
-
for spec in "${SPECS[@]}"; do
|
|
54
|
+
SPEC_IDS=()
|
|
55
|
+
for spec in "${SPECS[@]+"${SPECS[@]}"}"; do
|
|
48
56
|
base="$(basename "$spec" .md)"
|
|
49
57
|
sid="$(echo "$base" | grep -oE 'e[0-9]+s[0-9]+' | head -1)"
|
|
50
58
|
[[ -n "$sid" ]] || continue
|
|
51
|
-
SPEC_IDS
|
|
52
|
-
|
|
53
|
-
|
|
59
|
+
SPEC_IDS+=("$sid")
|
|
60
|
+
in_array "$sid" "${EPIC_STORIES[@]+"${EPIC_STORIES[@]}"}" \
|
|
61
|
+
|| report HIGH "Story $sid in spec file but missing from epic.yaml manifest"
|
|
62
|
+
grep -qE '^#{2,3} (17\.|Acceptance|Verification Script)' "$spec" \
|
|
54
63
|
|| report HIGH "Story $sid spec missing §17 acceptance criteria or Verification Script"
|
|
55
64
|
grep -qiE 'ambiguous|TBD|TODO|FIXME' "$spec" \
|
|
56
65
|
&& report MED "Story $sid spec contains ambiguous/TBD markers"
|
|
57
66
|
done
|
|
58
67
|
|
|
59
|
-
for tasks in "${TASKS[@]}"; do
|
|
68
|
+
for tasks in "${TASKS[@]+"${TASKS[@]}"}"; do
|
|
60
69
|
base="$(basename "$tasks" -tasks.yaml)"
|
|
61
70
|
sid="$(echo "$base" | grep -oE 'e[0-9]+s[0-9]+' | head -1)"
|
|
62
71
|
[[ -n "$sid" ]] || continue
|
|
63
|
-
|
|
72
|
+
in_array "$sid" "${SPEC_IDS[@]+"${SPEC_IDS[@]}"}" \
|
|
73
|
+
|| report CRITICAL "tasks.yaml for $sid without matching story spec .md"
|
|
64
74
|
grep -qE '^[[:space:]]*verify:' "$tasks" \
|
|
65
75
|
|| report CRITICAL "Story $sid tasks.yaml missing runnable verify: commands"
|
|
66
76
|
grep -qE '^status:[[:space:]]*(failing|todo|passing)' "$tasks" \
|
|
67
77
|
|| report MED "Story $sid tasks.yaml should use status: failing|passing ledger (e45s06)"
|
|
68
78
|
done
|
|
69
79
|
|
|
70
|
-
for sid in "${
|
|
71
|
-
|
|
80
|
+
for sid in "${EPIC_STORIES[@]+"${EPIC_STORIES[@]}"}"; do
|
|
81
|
+
in_array "$sid" "${SPEC_IDS[@]+"${SPEC_IDS[@]}"}" \
|
|
82
|
+
|| report HIGH "epic.yaml lists $sid but no story spec .md exists"
|
|
72
83
|
done
|
|
73
84
|
|
|
74
85
|
echo "---"
|
|
@@ -46,8 +46,9 @@ keys: dict[str, str] = {}
|
|
|
46
46
|
existing_path = epics_dir.parent / "execution-status.yaml"
|
|
47
47
|
if existing_path.exists():
|
|
48
48
|
existing = existing_path.read_text(encoding="utf-8")
|
|
49
|
-
for m in re.finditer(r"^ ([a-z0-9._-]+)
|
|
50
|
-
|
|
49
|
+
for m in re.finditer(r"^ ([a-z0-9._-]+):[ \t]*(\S+)?[ \t]*$", existing, re.M):
|
|
50
|
+
if m.group(2):
|
|
51
|
+
keys[m.group(1)] = m.group(2)
|
|
51
52
|
|
|
52
53
|
# --- Parse release-plan.yaml for wsjf/tier per epic ---
|
|
53
54
|
rp_epics: dict[str, dict[str, object]] = {}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# Find-Way Reference
|
|
2
|
+
|
|
3
|
+
## Ticket Anatomy
|
|
4
|
+
|
|
5
|
+
Each ticket holds one question, sized to one 100K token agent session:
|
|
6
|
+
|
|
7
|
+
```markdown
|
|
8
|
+
## Question
|
|
9
|
+
|
|
10
|
+
<the decision or investigation this ticket resolves>
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
**Labels:** `wayfinder:research`, `wayfinder:prototype`, `wayfinder:grilling`, or `wayfinder:task`
|
|
14
|
+
|
|
15
|
+
**Claim:** Assign to yourself before any work — claim blocks concurrent sessions.
|
|
16
|
+
|
|
17
|
+
**Blocking:** Use tracker's native dependency relationship so the frontier renders visually.
|
|
18
|
+
|
|
19
|
+
**Resolution:** Post answer as a comment, close the issue, append to map's Decisions-so-far.
|
|
20
|
+
|
|
21
|
+
## Resolution Protocol
|
|
22
|
+
|
|
23
|
+
1. **Load the map** — read low-res view, not every ticket body
|
|
24
|
+
2. **Choose & claim** — assign ticket to yourself (or take first frontier ticket if not named)
|
|
25
|
+
3. **Resolve** — zoom into related/closed tickets as needed; invoke skills the Notes block names
|
|
26
|
+
4. **Record** — post resolution comment with the answer, close the issue
|
|
27
|
+
5. **Update map** — append to Decisions-so-far with one-line gist + link
|
|
28
|
+
6. **Graduate fog** — create new tickets from newly-specifiable fog; clear from Not-yet-specified
|
|
29
|
+
7. **Rule out of scope** if resolution reveals something past the destination
|
|
30
|
+
|
|
31
|
+
## Ticket Types in Detail
|
|
32
|
+
|
|
33
|
+
### Research (AFK)
|
|
34
|
+
Surfacing facts from docs, APIs, or knowledge bases that a decision waits on.
|
|
35
|
+
- Resolved by a `/research` subagent
|
|
36
|
+
- Use when knowledge outside the working directory is required
|
|
37
|
+
- **Label:** `wayfinder:research`
|
|
38
|
+
|
|
39
|
+
### Prototype (HITL)
|
|
40
|
+
Raise fidelity by building cheap, rough, concrete artifact to react to — outline, stub, UI/logic code.
|
|
41
|
+
- Use the `/prototype` skill
|
|
42
|
+
- Links the prototype as an asset
|
|
43
|
+
- Use when "how should it look" or "how should it behave" is key
|
|
44
|
+
- **Label:** `wayfinder:prototype`
|
|
45
|
+
|
|
46
|
+
### Grilling (HITL)
|
|
47
|
+
Conversation via `/grilling` and `/domain-modeling` skills, one question at a time.
|
|
48
|
+
- The default case for clarifying decisions
|
|
49
|
+
- **Label:** `wayfinder:grilling`
|
|
50
|
+
|
|
51
|
+
### Task (HITL or AFK)
|
|
52
|
+
Manual work unblocking a decision — signing up for service, provisioning access, moving data.
|
|
53
|
+
- This is the **only** type that does rather than decides
|
|
54
|
+
- Earns its place by unblocking a decision, not by delivering the destination
|
|
55
|
+
- Agent drives AFK tasks alone; HITL tasks get precise checklist
|
|
56
|
+
- **Label:** `wayfinder:task`
|
|
57
|
+
|
|
58
|
+
## Fog-to-Ticket Graduation
|
|
59
|
+
|
|
60
|
+
When resolving a ticket clears fog, graduate the newly-specifiable bits into fresh tickets:
|
|
61
|
+
|
|
62
|
+
1. **Identify the fog** in Not-yet-specified that the resolution illuminates
|
|
63
|
+
2. **Create new tickets** with crisp question statements
|
|
64
|
+
3. **Wire blocking edges** if the new tickets depend on each other or existing ones
|
|
65
|
+
4. **Clear from fog** — remove the graduated patch from Not-yet-specified so it lives only as its ticket
|
|
66
|
+
|
|
67
|
+
## Out-of-Scope Close Protocol
|
|
68
|
+
|
|
69
|
+
If a ticket turns out to sit past the destination:
|
|
70
|
+
|
|
71
|
+
1. **Close the ticket** — mark it resolved or won't-fix
|
|
72
|
+
2. **Add one line to Out of scope** — gist + why it's out of scope, linking the closed ticket
|
|
73
|
+
3. **Never append to Decisions so far** — scope boundaries aren't steps on the route
|
|
74
|
+
|
|
75
|
+
## Map State Transitions
|
|
76
|
+
|
|
77
|
+
| State | Meaning | Action |
|
|
78
|
+
|-------|---------|--------|
|
|
79
|
+
| **Open, unblocked, unclaimed** | Frontier — ready to take | Claim and resolve |
|
|
80
|
+
| **Open, blocked** | Waiting on something | Wait for blockers to close |
|
|
81
|
+
| **Open, claimed** | Concurrent session working | Skip for now |
|
|
82
|
+
| **Closed** | Decided — lives in Decisions so far | Reference, don't re-open |
|
|
83
|
+
|
|
84
|
+
## Concurrency
|
|
85
|
+
|
|
86
|
+
Users may run unblocked tickets in parallel, so expect the tracker to be edited concurrently. Always:
|
|
87
|
+
|
|
88
|
+
- Refresh the map before picking a ticket
|
|
89
|
+
- Claim immediately before starting work
|
|
90
|
+
- Never assume state hasn't changed since last read
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: find-way
|
|
3
|
+
phase: discover
|
|
4
|
+
effort: standard
|
|
5
|
+
model: sonnet
|
|
6
|
+
description: Plan a large effort as a shared map of decision tickets on an issue tracker, resolving them one at a time until the way is clear. Use when an idea is too big for one session, needs structured exploration before implementation, or requires mapping decisions before building.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Find Way
|
|
10
|
+
|
|
11
|
+
## Concept
|
|
12
|
+
|
|
13
|
+
A large effort arrives — too big for one session, wrapped in fog. **Find-way** charts the way as a **shared map** on the repo's issue tracker, then works **decision tickets** — questions whose resolution is a decision, not build slices — one at a time until the route is clear.
|
|
14
|
+
|
|
15
|
+
**Plan, don't do.** Each ticket resolves a decision. The map is done when the way is clear — nothing left to decide before someone executes.
|
|
16
|
+
|
|
17
|
+
**Refer by name.** Every map and ticket is an issue with a title. Always use the name, never bare ids or numbers.
|
|
18
|
+
|
|
19
|
+
## The Map
|
|
20
|
+
|
|
21
|
+
A single issue labelled `wayfinder:map` — the canonical artifact. Child issues are its tickets.
|
|
22
|
+
|
|
23
|
+
```markdown
|
|
24
|
+
## Destination
|
|
25
|
+
<what reaching the end looks like — one or two lines>
|
|
26
|
+
|
|
27
|
+
## Notes
|
|
28
|
+
<domain, skills to consult, standing preferences>
|
|
29
|
+
|
|
30
|
+
## Decisions so far
|
|
31
|
+
- [closed ticket title](link) — one-line gist
|
|
32
|
+
|
|
33
|
+
## Not yet specified
|
|
34
|
+
<in-scope fog you can't ticket yet>
|
|
35
|
+
|
|
36
|
+
## Out of scope
|
|
37
|
+
<work ruled beyond the destination>
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Ticket Types
|
|
41
|
+
|
|
42
|
+
| Type | Label | Mode | Purpose |
|
|
43
|
+
|------|-------|------|---------|
|
|
44
|
+
| Research | `wayfinder:research` | AFK | Surface facts from docs/APIs |
|
|
45
|
+
| Prototype | `wayfinder:prototype` | HITL | Cheap artifact to react to |
|
|
46
|
+
| Grilling | `wayfinder:grilling` | HITL | One-question-at-a-time dialogue |
|
|
47
|
+
| Task | `wayfinder:task` | Either | Manual work unblocking a decision |
|
|
48
|
+
|
|
49
|
+
**HITL** = human in the loop. **AFK** = agent alone.
|
|
50
|
+
|
|
51
|
+
## Two Modes
|
|
52
|
+
|
|
53
|
+
### Chart the Map
|
|
54
|
+
|
|
55
|
+
User invokes with a loose idea.
|
|
56
|
+
|
|
57
|
+
1. **Name the destination** — grill to pin down what this map finds its way to
|
|
58
|
+
2. **Map the frontier** — breadth-first: surface open decisions and first steps. If no fog emerges, the effort fits one session — skip the map
|
|
59
|
+
3. **Create the map** issue (label `wayfinder:map`)
|
|
60
|
+
4. **Create tickets** as child issues, then wire blocking edges in a second pass
|
|
61
|
+
5. **Fire research subagents** for each `research` ticket in parallel
|
|
62
|
+
6. Stop — charting resolves nothing
|
|
63
|
+
|
|
64
|
+
### Work Through the Map
|
|
65
|
+
|
|
66
|
+
User invokes with a map (URL/number). Ticket optional — without one, pick the next frontier ticket.
|
|
67
|
+
|
|
68
|
+
1. Load the map (low-res view)
|
|
69
|
+
2. **Choose & claim** — assign ticket before any work
|
|
70
|
+
3. **Resolve** — zoom into related/closed tickets as needed
|
|
71
|
+
4. **Record** — post resolution comment, close issue, append to Decisions-so-far
|
|
72
|
+
5. **Graduate fog** — create new tickets from newly-specifiable fog, clear from Not-yet-specified
|
|
73
|
+
6. **Rule out of scope** if resolution reveals something past the destination
|
|
74
|
+
|
|
75
|
+
**Never resolve more than one ticket per session** (except research).
|
|
76
|
+
|
|
77
|
+
## Fog of War
|
|
78
|
+
|
|
79
|
+
Beyond live tickets lies the **fog** — decisions you can tell are coming but can't pin down yet. The **Not yet specified** section holds this dim view.
|
|
80
|
+
|
|
81
|
+
**Fog or ticket?** Test: can you state the question precisely now?
|
|
82
|
+
|
|
83
|
+
- **Ticket** when the question is sharp (even if blocked)
|
|
84
|
+
- **Not yet specified** when you can't phrase it sharply yet
|
|
85
|
+
|
|
86
|
+
## Out of Scope
|
|
87
|
+
|
|
88
|
+
Work beyond the destination. Ruling something out is a scoping act, not a route step. Never graduates — returns only if destination is redrawn.
|
|
89
|
+
|
|
90
|
+
If an existing ticket sits past the destination, close it and note in Out of scope.
|
|
91
|
+
|
|
92
|
+
## Blocking & Frontier
|
|
93
|
+
|
|
94
|
+
- **Blocking**: tracker's native dependency relationship
|
|
95
|
+
- **Unblocked**: every blocker is closed
|
|
96
|
+
- **Frontier**: open, unblocked, unclaimed children — the edge of the known
|
|
97
|
+
|
|
98
|
+
## Detailed Reference
|
|
99
|
+
|
|
100
|
+
See [REFERENCE.md](REFERENCE.md) for ticket anatomy, resolution protocol, and examples.
|
|
@@ -74,7 +74,9 @@ gate_trace:
|
|
|
74
74
|
## Integration Points
|
|
75
75
|
|
|
76
76
|
- **release-branch SKILL.md** — pre-PR gate (FAIL blocks merge).
|
|
77
|
-
- **sync-skills.yml** —
|
|
77
|
+
- **sync-skills.yml** — runs `trace-stories.sh --strict` as its "Traceability gate" step (FAIL
|
|
78
|
+
blocks pipeline), which shares this skill's coverage data (`traceability-matrix.json`) but
|
|
79
|
+
does not invoke a gate-trace PASS/CONCERNS/FAIL/WAIVED verdict directly.
|
|
78
80
|
- **verify-work SKILL.md** — runs blind-spot checks; gate-trace consumes the result.
|
|
79
81
|
|
|
80
82
|
## References
|
package/skills-lock.json
CHANGED
|
@@ -131,6 +131,11 @@
|
|
|
131
131
|
"sha256": "bb2bf81b5f948e10",
|
|
132
132
|
"path": "skills/extract-designSKILL.md"
|
|
133
133
|
},
|
|
134
|
+
"find-way": {
|
|
135
|
+
"description": "Plan a large effort as a shared map of decision tickets on an issue tracker, resolving them one at a time until the way is clear. Use when an idea is too big for one session, needs structured exploration before implementation, or requires mapping decisions before building.",
|
|
136
|
+
"sha256": "dff27aa0dc45c04d",
|
|
137
|
+
"path": "skills/find-waySKILL.md"
|
|
138
|
+
},
|
|
134
139
|
"fix-bug": {
|
|
135
140
|
"description": "Bug fix orchestrator — active_flow fix_bug; reads specs/bugs/BUG-*.md; chains investigate-bug, develop-tdd, validate-fix. Use when user reports a defect.",
|
|
136
141
|
"sha256": "8e9e5922211b7e3b",
|
|
@@ -138,7 +143,7 @@
|
|
|
138
143
|
},
|
|
139
144
|
"gate-trace": {
|
|
140
145
|
"description": "\"Deterministic traceability quality gate — reads coverage matrix + blind-spot data, applies decision rules with oracle confidence downgrade, emits PASS/CONCERNS/FAIL/WAIVED verdict. Use before release-branch to gate merges on traceability.\"",
|
|
141
|
-
"sha256": "
|
|
146
|
+
"sha256": "dd52baa85ff939e8",
|
|
142
147
|
"path": "skills/gate-traceSKILL.md"
|
|
143
148
|
},
|
|
144
149
|
"generate-allure-report": {
|