@bvdm/delano 0.1.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 (109) hide show
  1. package/HANDBOOK.md +1511 -0
  2. package/README.md +122 -0
  3. package/assets/install-manifest.json +102 -0
  4. package/assets/payload/.agents/README.md +12 -0
  5. package/assets/payload/.agents/adapters/claude/README.md +5 -0
  6. package/assets/payload/.agents/adapters/codex/README.md +5 -0
  7. package/assets/payload/.agents/adapters/opencode/README.md +5 -0
  8. package/assets/payload/.agents/adapters/pi/README.md +5 -0
  9. package/assets/payload/.agents/common/README.md +3 -0
  10. package/assets/payload/.agents/hooks/README.md +11 -0
  11. package/assets/payload/.agents/hooks/bash-worktree-fix.sh +7 -0
  12. package/assets/payload/.agents/hooks/post-tool-logger.js +18 -0
  13. package/assets/payload/.agents/hooks/session-tracker.js +17 -0
  14. package/assets/payload/.agents/hooks/user-prompt-logger.js +18 -0
  15. package/assets/payload/.agents/logs/.gitkeep +0 -0
  16. package/assets/payload/.agents/logs/schema.md +42 -0
  17. package/assets/payload/.agents/rules/README.md +12 -0
  18. package/assets/payload/.agents/rules/agent-coordination.md +5 -0
  19. package/assets/payload/.agents/rules/datetime.md +5 -0
  20. package/assets/payload/.agents/rules/frontmatter-operations.md +6 -0
  21. package/assets/payload/.agents/rules/github-operations.md +5 -0
  22. package/assets/payload/.agents/rules/path-standards.md +5 -0
  23. package/assets/payload/.agents/rules/test-execution.md +5 -0
  24. package/assets/payload/.agents/rules/worktree-operations.md +5 -0
  25. package/assets/payload/.agents/scripts/README.md +31 -0
  26. package/assets/payload/.agents/scripts/check-path-standards.sh +26 -0
  27. package/assets/payload/.agents/scripts/fix-path-standards.sh +14 -0
  28. package/assets/payload/.agents/scripts/git-sparse-download.sh +162 -0
  29. package/assets/payload/.agents/scripts/log-event.js +33 -0
  30. package/assets/payload/.agents/scripts/log-event.sh +5 -0
  31. package/assets/payload/.agents/scripts/pm/blocked.sh +36 -0
  32. package/assets/payload/.agents/scripts/pm/epic-list.sh +34 -0
  33. package/assets/payload/.agents/scripts/pm/in-progress.sh +36 -0
  34. package/assets/payload/.agents/scripts/pm/init.sh +139 -0
  35. package/assets/payload/.agents/scripts/pm/next.sh +110 -0
  36. package/assets/payload/.agents/scripts/pm/prd-list.sh +34 -0
  37. package/assets/payload/.agents/scripts/pm/search.sh +13 -0
  38. package/assets/payload/.agents/scripts/pm/standup.sh +19 -0
  39. package/assets/payload/.agents/scripts/pm/status.sh +61 -0
  40. package/assets/payload/.agents/scripts/pm/validate.sh +309 -0
  41. package/assets/payload/.agents/scripts/query-log.sh +57 -0
  42. package/assets/payload/.agents/scripts/test-and-log.sh +28 -0
  43. package/assets/payload/.agents/skills/.gitkeep +0 -0
  44. package/assets/payload/.agents/skills/README.md +23 -0
  45. package/assets/payload/.agents/skills/breakdown-skill/SKILL.md +40 -0
  46. package/assets/payload/.agents/skills/breakdown-skill/references/runbook.md +16 -0
  47. package/assets/payload/.agents/skills/breakdown-skill/templates/ambiguity-report.md +11 -0
  48. package/assets/payload/.agents/skills/breakdown-skill/templates/task-batch-summary.md +11 -0
  49. package/assets/payload/.agents/skills/closeout-skill/SKILL.md +42 -0
  50. package/assets/payload/.agents/skills/closeout-skill/references/runbook.md +16 -0
  51. package/assets/payload/.agents/skills/closeout-skill/templates/closure-checklist.md +7 -0
  52. package/assets/payload/.agents/skills/closeout-skill/templates/outcome-review.md +11 -0
  53. package/assets/payload/.agents/skills/discovery-skill/SKILL.md +44 -0
  54. package/assets/payload/.agents/skills/discovery-skill/references/runbook.md +14 -0
  55. package/assets/payload/.agents/skills/discovery-skill/templates/clarification-questions.md +18 -0
  56. package/assets/payload/.agents/skills/discovery-skill/templates/discovery-summary.md +14 -0
  57. package/assets/payload/.agents/skills/execution-skill/SKILL.md +42 -0
  58. package/assets/payload/.agents/skills/execution-skill/references/runbook.md +16 -0
  59. package/assets/payload/.agents/skills/execution-skill/templates/blocker-update.md +13 -0
  60. package/assets/payload/.agents/skills/execution-skill/templates/stream-update.md +9 -0
  61. package/assets/payload/.agents/skills/learning-skill/SKILL.md +41 -0
  62. package/assets/payload/.agents/skills/learning-skill/references/runbook.md +13 -0
  63. package/assets/payload/.agents/skills/learning-skill/templates/improvement-backlog.md +10 -0
  64. package/assets/payload/.agents/skills/learning-skill/templates/retrospective.md +11 -0
  65. package/assets/payload/.agents/skills/planning-skill/SKILL.md +40 -0
  66. package/assets/payload/.agents/skills/planning-skill/references/runbook.md +15 -0
  67. package/assets/payload/.agents/skills/planning-skill/templates/architecture-decision.md +15 -0
  68. package/assets/payload/.agents/skills/planning-skill/templates/workstream-definition.md +13 -0
  69. package/assets/payload/.agents/skills/quality-skill/SKILL.md +40 -0
  70. package/assets/payload/.agents/skills/quality-skill/references/runbook.md +14 -0
  71. package/assets/payload/.agents/skills/quality-skill/templates/gate-decision.md +10 -0
  72. package/assets/payload/.agents/skills/quality-skill/templates/quality-evidence.md +16 -0
  73. package/assets/payload/.agents/skills/sync-skill/SKILL.md +41 -0
  74. package/assets/payload/.agents/skills/sync-skill/references/runbook.md +17 -0
  75. package/assets/payload/.agents/skills/sync-skill/templates/conflict-resolution-actions.md +10 -0
  76. package/assets/payload/.agents/skills/sync-skill/templates/drift-report.md +14 -0
  77. package/assets/payload/.delano/README.md +7 -0
  78. package/assets/payload/.gitattributes +14 -0
  79. package/assets/payload/.project/context/README.md +15 -0
  80. package/assets/payload/.project/context/gui-testing.md +20 -0
  81. package/assets/payload/.project/context/product-context.md +17 -0
  82. package/assets/payload/.project/context/progress.md +23 -0
  83. package/assets/payload/.project/context/project-brief.md +13 -0
  84. package/assets/payload/.project/context/project-overview.md +14 -0
  85. package/assets/payload/.project/context/project-structure.md +24 -0
  86. package/assets/payload/.project/context/project-style-guide.md +17 -0
  87. package/assets/payload/.project/context/system-patterns.md +22 -0
  88. package/assets/payload/.project/context/tech-context.md +19 -0
  89. package/assets/payload/.project/projects/.gitkeep +0 -0
  90. package/assets/payload/.project/registry/linear-map.json +6 -0
  91. package/assets/payload/.project/registry/migration-map.json +5 -0
  92. package/assets/payload/.project/templates/completion-summary.md +16 -0
  93. package/assets/payload/.project/templates/plan.md +30 -0
  94. package/assets/payload/.project/templates/progress-update.md +20 -0
  95. package/assets/payload/.project/templates/spec.md +42 -0
  96. package/assets/payload/.project/templates/task.md +33 -0
  97. package/assets/payload/.project/templates/workstream.md +19 -0
  98. package/assets/payload/HANDBOOK.md +1511 -0
  99. package/assets/payload/install-delano.sh +311 -0
  100. package/bin/delano.js +13 -0
  101. package/install-delano.sh +311 -0
  102. package/package.json +26 -0
  103. package/src/cli/commands/install.js +57 -0
  104. package/src/cli/commands/wrapper.js +26 -0
  105. package/src/cli/index.js +97 -0
  106. package/src/cli/lib/errors.js +11 -0
  107. package/src/cli/lib/install.js +261 -0
  108. package/src/cli/lib/pm.js +29 -0
  109. package/src/cli/lib/runtime.js +122 -0
@@ -0,0 +1,309 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ root="$(git rev-parse --show-toplevel 2>/dev/null || pwd)"
5
+ cd "$root"
6
+
7
+ errors=0
8
+ warnings=0
9
+
10
+ check_required_path() {
11
+ local path="$1"
12
+ if [[ -e "$path" ]]; then
13
+ echo "✅ $path"
14
+ else
15
+ echo "❌ Missing: $path"
16
+ errors=$((errors + 1))
17
+ fi
18
+ }
19
+
20
+ fm_get() {
21
+ local file="$1"
22
+ local key="$2"
23
+ awk -v key="$key" '
24
+ BEGIN {in_fm=0}
25
+ /^---[[:space:]]*$/ {if (in_fm==0) {in_fm=1; next} else {exit}}
26
+ in_fm==1 && $0 ~ "^" key ":[[:space:]]*" {
27
+ sub("^" key ":[[:space:]]*", "")
28
+ print
29
+ exit
30
+ }
31
+ ' "$file"
32
+ }
33
+
34
+ has_frontmatter() {
35
+ local file="$1"
36
+ [[ "$(awk 'NR==1 && /^---[[:space:]]*$/ {print "yes"}' "$file")" == "yes" ]]
37
+ }
38
+
39
+ is_iso_utc() {
40
+ local ts="$1"
41
+ [[ "$ts" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$ ]]
42
+ }
43
+
44
+ python_cmd=()
45
+
46
+ resolve_python_cmd() {
47
+ if command -v python3 >/dev/null 2>&1 && python3 -c "import sys" >/dev/null 2>&1; then
48
+ python_cmd=(python3)
49
+ return 0
50
+ fi
51
+
52
+ if command -v py >/dev/null 2>&1 && py -3 -c "import sys" >/dev/null 2>&1; then
53
+ python_cmd=(py -3)
54
+ return 0
55
+ fi
56
+
57
+ if command -v python >/dev/null 2>&1 && python -c "import sys" >/dev/null 2>&1; then
58
+ python_cmd=(python)
59
+ return 0
60
+ fi
61
+
62
+ return 1
63
+ }
64
+
65
+ echo "Delano validation"
66
+ echo "================="
67
+
68
+ check_required_path ".project/projects"
69
+ check_required_path ".project/context"
70
+ check_required_path ".project/registry/linear-map.json"
71
+ check_required_path ".agents/scripts/pm"
72
+ check_required_path ".agents/rules"
73
+ check_required_path ".agents/hooks"
74
+ check_required_path ".agents/logs"
75
+ check_required_path ".agents/skills"
76
+
77
+ if [[ -e ".claude" || -L ".claude" ]]; then
78
+ echo "✅ Compatibility runtime present: .claude"
79
+ else
80
+ echo "⚠️ Compatibility runtime missing: .claude (canonical .agents is sufficient)"
81
+ warnings=$((warnings + 1))
82
+ fi
83
+
84
+ if resolve_python_cmd; then
85
+ echo "✅ Python runtime: ${python_cmd[*]}"
86
+ else
87
+ echo "❌ Python runtime not found (tried: python3, py -3, python)"
88
+ errors=$((errors + 1))
89
+ fi
90
+
91
+ # Required skill contracts
92
+ required_skills=(
93
+ discovery-skill
94
+ planning-skill
95
+ breakdown-skill
96
+ sync-skill
97
+ execution-skill
98
+ quality-skill
99
+ closeout-skill
100
+ learning-skill
101
+ )
102
+
103
+ echo ""
104
+ echo "Required skills"
105
+ echo "---------------"
106
+ for skill in "${required_skills[@]}"; do
107
+ skill_dir=".agents/skills/$skill"
108
+ skill_file="$skill_dir/SKILL.md"
109
+
110
+ if [[ -f "$skill_file" ]]; then
111
+ echo "✅ $skill_file"
112
+ else
113
+ echo "❌ Missing skill contract: $skill_file"
114
+ errors=$((errors + 1))
115
+ continue
116
+ fi
117
+
118
+ runbook="$skill_dir/references/runbook.md"
119
+ if [[ -f "$runbook" ]]; then
120
+ echo "✅ $runbook"
121
+ else
122
+ echo "❌ Missing skill runbook: $runbook"
123
+ errors=$((errors + 1))
124
+ fi
125
+
126
+ template_count=0
127
+ if [[ -d "$skill_dir/templates" ]]; then
128
+ template_count=$(find "$skill_dir/templates" -maxdepth 1 -type f -name '*.md' | wc -l | tr -d ' ')
129
+ fi
130
+
131
+ if [[ "$template_count" -ge 2 ]]; then
132
+ echo "✅ $skill_dir/templates ($template_count files)"
133
+ else
134
+ echo "❌ Skill needs at least 2 templates: $skill_dir/templates"
135
+ errors=$((errors + 1))
136
+ fi
137
+
138
+ if grep -q '^## Execution assets' "$skill_file"; then
139
+ echo "✅ $skill_file includes execution assets section"
140
+ else
141
+ echo "❌ $skill_file missing execution assets section"
142
+ errors=$((errors + 1))
143
+ fi
144
+ done
145
+
146
+ # Project contract validation
147
+ for project_dir in .project/projects/*; do
148
+ [[ -d "$project_dir" ]] || continue
149
+ [[ "$(basename "$project_dir")" == ".gitkeep" ]] && continue
150
+
151
+ echo ""
152
+ echo "Project: $(basename "$project_dir")"
153
+
154
+ for path in spec.md plan.md decisions.md tasks workstreams updates; do
155
+ if [[ ! -e "$project_dir/$path" ]]; then
156
+ echo " ❌ Missing $path"
157
+ errors=$((errors + 1))
158
+ fi
159
+ done
160
+
161
+ spec="$project_dir/spec.md"
162
+ if [[ -f "$spec" ]]; then
163
+ if ! has_frontmatter "$spec"; then
164
+ echo " ❌ spec.md missing frontmatter"
165
+ errors=$((errors + 1))
166
+ fi
167
+ for key in name slug owner status created updated outcome uncertainty probe_required probe_status; do
168
+ val="$(fm_get "$spec" "$key")"
169
+ if [[ -z "$val" ]]; then
170
+ echo " ❌ spec.md missing key: $key"
171
+ errors=$((errors + 1))
172
+ fi
173
+ done
174
+ for key in created updated; do
175
+ val="$(fm_get "$spec" "$key")"
176
+ if [[ -n "$val" ]] && ! is_iso_utc "$val"; then
177
+ echo " ❌ spec.md $key must be ISO8601 UTC"
178
+ errors=$((errors + 1))
179
+ fi
180
+ done
181
+ fi
182
+
183
+ plan="$project_dir/plan.md"
184
+ if [[ -f "$plan" ]]; then
185
+ if ! has_frontmatter "$plan"; then
186
+ echo " ❌ plan.md missing frontmatter"
187
+ errors=$((errors + 1))
188
+ fi
189
+ for key in name status lead created updated linear_project_id risk_level spec_status_at_plan_time; do
190
+ val="$(fm_get "$plan" "$key")"
191
+ if [[ -z "$val" && "$key" != "linear_project_id" ]]; then
192
+ echo " ❌ plan.md missing key: $key"
193
+ errors=$((errors + 1))
194
+ fi
195
+ done
196
+ for key in created updated; do
197
+ val="$(fm_get "$plan" "$key")"
198
+ if [[ -n "$val" ]] && ! is_iso_utc "$val"; then
199
+ echo " ❌ plan.md $key must be ISO8601 UTC"
200
+ errors=$((errors + 1))
201
+ fi
202
+ done
203
+ fi
204
+
205
+ for task in "$project_dir"/tasks/*.md; do
206
+ [[ -f "$task" ]] || continue
207
+ if ! has_frontmatter "$task"; then
208
+ echo " ❌ $(basename "$task") missing frontmatter"
209
+ errors=$((errors + 1))
210
+ continue
211
+ fi
212
+ for key in id name status created updated linear_issue_id github_issue github_pr depends_on conflicts_with parallel priority estimate; do
213
+ val="$(fm_get "$task" "$key")"
214
+ if [[ -z "$val" && ! "$key" =~ ^(linear_issue_id|github_issue|github_pr|depends_on|conflicts_with)$ ]]; then
215
+ echo " ❌ $(basename "$task") missing key: $key"
216
+ errors=$((errors + 1))
217
+ fi
218
+ done
219
+ done
220
+
221
+ # dependency cycle check for this project
222
+ if [[ ${#python_cmd[@]} -gt 0 ]]; then
223
+ "${python_cmd[@]}" - "$project_dir" <<'PY' || errors=$((errors + 1))
224
+ import sys, re
225
+ from pathlib import Path
226
+
227
+ project = Path(sys.argv[1])
228
+ tasks = {}
229
+
230
+ def parse_frontmatter(path: Path):
231
+ text = path.read_text(encoding='utf-8')
232
+ m = re.match(r'^---\n(.*?)\n---\n', text, re.S)
233
+ if not m:
234
+ return {}
235
+ data = {}
236
+ for line in m.group(1).splitlines():
237
+ if ':' not in line:
238
+ continue
239
+ k, v = line.split(':', 1)
240
+ data[k.strip()] = v.strip()
241
+ return data
242
+
243
+ for f in sorted((project / 'tasks').glob('*.md')):
244
+ meta = parse_frontmatter(f)
245
+ tid = meta.get('id') or f.stem
246
+ raw = meta.get('depends_on', '[]').strip()
247
+ deps = []
248
+ if raw.startswith('[') and raw.endswith(']'):
249
+ inner = raw[1:-1].strip()
250
+ if inner:
251
+ deps = [x.strip().strip('"\'') for x in inner.split(',') if x.strip()]
252
+ tasks[tid] = deps
253
+
254
+ visited = {}
255
+
256
+ def dfs(node, stack):
257
+ state = visited.get(node, 0)
258
+ if state == 1:
259
+ cycle = ' -> '.join(stack + [node])
260
+ raise RuntimeError(f'dependency cycle: {cycle}')
261
+ if state == 2:
262
+ return
263
+ visited[node] = 1
264
+ for dep in tasks.get(node, []):
265
+ if dep in tasks:
266
+ dfs(dep, stack + [node])
267
+ visited[node] = 2
268
+
269
+ for t in tasks:
270
+ dfs(t, [])
271
+ print(' [ok] dependency graph acyclic')
272
+ PY
273
+ fi
274
+
275
+ done
276
+
277
+ # Absolute path leakage check (documentation and contract files only)
278
+ path_tmp="$(mktemp)"
279
+ trap 'rm -f "$path_tmp"' EXIT
280
+
281
+ compat_paths=()
282
+ if [[ -e .claude || -L .claude ]]; then
283
+ compat_paths+=(.claude)
284
+ fi
285
+
286
+ if find .project .agents "${compat_paths[@]}" \
287
+ -type f \
288
+ \( -name '*.md' -o -name '*.json' -o -name '*.yaml' -o -name '*.yml' \) \
289
+ -not -path '.agents/logs/*' \
290
+ -not -path '.claude/logs/*' \
291
+ -print0 | xargs -0 grep -nE '(/home/|/Users/|[A-Za-z]:\\)' >"$path_tmp" 2>/dev/null; then
292
+ echo ""
293
+ echo "❌ Absolute path leakage found"
294
+ head -n 20 "$path_tmp"
295
+ errors=$((errors + 1))
296
+ else
297
+ echo ""
298
+ echo "✅ No absolute path leakage in tracked docs and contracts"
299
+ fi
300
+
301
+ echo ""
302
+ echo "Summary"
303
+ echo "-------"
304
+ echo "Errors: $errors"
305
+ echo "Warnings: $warnings"
306
+
307
+ if [[ $errors -gt 0 ]]; then
308
+ exit 1
309
+ fi
@@ -0,0 +1,57 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ root="$(git rev-parse --show-toplevel 2>/dev/null || pwd)"
5
+ cd "$root"
6
+
7
+ type_filter=""
8
+ actor_filter=""
9
+ since_filter=""
10
+ last_n=""
11
+ pretty=false
12
+
13
+ while [[ $# -gt 0 ]]; do
14
+ case "$1" in
15
+ --type) type_filter="$2"; shift 2 ;;
16
+ --actor) actor_filter="$2"; shift 2 ;;
17
+ --since) since_filter="$2"; shift 2 ;;
18
+ --last) last_n="$2"; shift 2 ;;
19
+ --pretty) pretty=true; shift ;;
20
+ *) echo "Unknown arg: $1"; exit 1 ;;
21
+ esac
22
+ done
23
+
24
+ LOG_FILE=".agents/logs/changes.jsonl"
25
+ [[ -f "$LOG_FILE" ]] || { echo "No log file: $LOG_FILE"; exit 0; }
26
+
27
+ node - "$LOG_FILE" "$type_filter" "$actor_filter" "$since_filter" "$last_n" "$pretty" <<'NODE'
28
+ const fs = require('fs');
29
+
30
+ const [logFile, typeFilter, actorFilter, sinceFilter, lastNRaw, prettyRaw] = process.argv.slice(2);
31
+ const pretty = prettyRaw === 'true';
32
+ const lines = fs.readFileSync(logFile, 'utf8').split('\n').filter(Boolean);
33
+ const parsed = [];
34
+ for (const line of lines) {
35
+ try { parsed.push(JSON.parse(line)); } catch {}
36
+ }
37
+
38
+ let out = parsed.filter(e => {
39
+ if (typeFilter && e.type !== typeFilter) return false;
40
+ if (actorFilter && e.actor !== actorFilter) return false;
41
+ if (sinceFilter && (e.timestamp || '') < sinceFilter) return false;
42
+ return true;
43
+ });
44
+
45
+ const lastN = Number(lastNRaw || 0);
46
+ if (Number.isFinite(lastN) && lastN > 0) {
47
+ out = out.slice(-lastN);
48
+ }
49
+
50
+ for (const row of out) {
51
+ if (pretty) {
52
+ console.log(JSON.stringify(row, null, 2));
53
+ } else {
54
+ console.log(JSON.stringify(row));
55
+ }
56
+ }
57
+ NODE
@@ -0,0 +1,28 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ if [[ $# -eq 0 ]]; then
5
+ echo "Usage: $0 <test-command...>"
6
+ exit 1
7
+ fi
8
+
9
+ root="$(git rev-parse --show-toplevel 2>/dev/null || pwd)"
10
+ cd "$root"
11
+
12
+ mkdir -p .agents/logs/tests
13
+ run_id="$(date -u +"%Y%m%dT%H%M%SZ")"
14
+ log_file=".agents/logs/tests/$run_id.log"
15
+
16
+ set +e
17
+ "$@" 2>&1 | tee "$log_file"
18
+ exit_code=${PIPESTATUS[0]}
19
+ set -e
20
+
21
+ timestamp="$(date -u +"%Y-%m-%dT%H:%M:%SZ")"
22
+ printf '{"timestamp":"%s","command":"%s","exit_code":%s,"log_file":"%s"}\n' \
23
+ "$timestamp" "$*" "$exit_code" "$log_file" >> .agents/logs/test-runs.jsonl
24
+
25
+ .agents/scripts/log-event.sh test_run system --command "$*" --exit "$exit_code" --log "$log_file" >/dev/null || true
26
+
27
+ echo "Saved test log: $log_file"
28
+ exit $exit_code
File without changes
@@ -0,0 +1,23 @@
1
+ # Delano Skills
2
+
3
+ Handbook-aligned skill contracts.
4
+
5
+ Core workflow skills:
6
+
7
+ - `discovery-skill`
8
+ - `planning-skill`
9
+ - `breakdown-skill`
10
+ - `sync-skill`
11
+ - `execution-skill`
12
+ - `quality-skill`
13
+ - `closeout-skill`
14
+ - `learning-skill`
15
+
16
+ Each skill defines:
17
+ - intent and trigger context
18
+ - required inputs
19
+ - output schema
20
+ - quality checks
21
+ - failure behavior
22
+ - allowed side effects
23
+ - script hooks
@@ -0,0 +1,40 @@
1
+ ---
2
+ name: breakdown-skill
3
+ description: Decompose an approved plan into atomic tasks with dependencies and acceptance criteria. Use when planning is complete and execution must be prepared.
4
+ ---
5
+
6
+ # breakdown-skill
7
+
8
+ ## Trigger context
9
+ - plan is complete and ready for decomposition
10
+
11
+ ## Required inputs
12
+ - spec_path
13
+ - plan_path
14
+ - workstream_files
15
+
16
+ ## Output schema
17
+ - task_files
18
+ - dependency_graph
19
+
20
+ ## Quality checks
21
+ - acceptance criteria are binary
22
+ - estimate present per task
23
+ - dependency graph acyclic
24
+
25
+ ## Failure behavior
26
+ - stop on circular dependency
27
+ - return ambiguity report
28
+
29
+ ## Allowed side effects
30
+ - create/update `.project/projects/<slug>/tasks/*.md`
31
+
32
+ ## Script hooks
33
+ - `bash .agents/scripts/pm/validate.sh`
34
+ - `bash .agents/scripts/pm/next.sh`
35
+ - `bash .agents/scripts/pm/blocked.sh`
36
+
37
+ ## Execution assets
38
+ - `references/runbook.md`
39
+ - `templates/task-batch-summary.md`
40
+ - `templates/ambiguity-report.md`
@@ -0,0 +1,16 @@
1
+ # Breakdown Runbook
2
+
3
+ 1. Read `plan.md` and `workstreams/*.md`.
4
+ 2. Generate atomic tasks from `.project/templates/task.md`.
5
+ 3. Add binary acceptance criteria per task.
6
+ 4. Add dependencies and estimate/priority fields.
7
+ 5. Run sequencing checks:
8
+ - `bash .agents/scripts/pm/next.sh --all`
9
+ - `bash .agents/scripts/pm/blocked.sh`
10
+ 6. Validate:
11
+ - `bash .agents/scripts/pm/validate.sh`
12
+
13
+ Exit gate:
14
+ - Tasks are atomic
15
+ - Dependencies are acyclic
16
+ - Ready tasks are execution-safe
@@ -0,0 +1,11 @@
1
+ # Breakdown Ambiguity Report
2
+
3
+ ## Ambiguous Requirement
4
+
5
+ ## Why It Blocks Decomposition
6
+
7
+ ## Clarification Needed
8
+
9
+ ## Impacted Workstreams
10
+
11
+ ## Suggested Resolution
@@ -0,0 +1,11 @@
1
+ # Task Batch Summary
2
+
3
+ ## Generated Tasks
4
+ - T-001:
5
+ - T-002:
6
+
7
+ ## Dependency Notes
8
+
9
+ ## Ambiguities Found
10
+
11
+ ## Recommended Start Order
@@ -0,0 +1,42 @@
1
+ ---
2
+ name: closeout-skill
3
+ description: Close the delivery loop and capture completion evidence, status updates, and handoff artifacts. Use after quality gates pass.
4
+ ---
5
+
6
+ # closeout-skill
7
+
8
+ ## Trigger context
9
+ - quality gates passed for closure scope
10
+
11
+ ## Required inputs
12
+ - project_slug
13
+ - completed_task_ids
14
+ - outcome_review
15
+
16
+ ## Output schema
17
+ - closure update
18
+ - completion summary
19
+ - updated status in contracts/registry
20
+
21
+ ## Quality checks
22
+ - required tasks resolved
23
+ - evidence package complete
24
+ - outcome review captured
25
+
26
+ ## Failure behavior
27
+ - block closure when evidence is incomplete
28
+ - return missing-evidence list
29
+
30
+ ## Allowed side effects
31
+ - update project/task statuses
32
+ - append completion summary and release evidence
33
+
34
+ ## Script hooks
35
+ - `bash .agents/scripts/pm/status.sh`
36
+ - `bash .agents/scripts/query-log.sh --last 50`
37
+ - `bash .agents/scripts/pm/validate.sh`
38
+
39
+ ## Execution assets
40
+ - `references/runbook.md`
41
+ - `templates/outcome-review.md`
42
+ - `templates/closure-checklist.md`
@@ -0,0 +1,16 @@
1
+ # Closeout Runbook
2
+
3
+ 1. Confirm all required tasks are in terminal state.
4
+ 2. Ensure quality evidence package is complete.
5
+ 3. Write completion summary from template.
6
+ 4. Update project status and mapping registry.
7
+ 5. Review event log:
8
+ - `bash .agents/scripts/query-log.sh --last 100`
9
+ 6. Validate:
10
+ - `bash .agents/scripts/pm/status.sh`
11
+ - `bash .agents/scripts/pm/validate.sh`
12
+
13
+ Exit gate:
14
+ - Outcome review captured
15
+ - Evidence complete
16
+ - Delivery state closed cleanly
@@ -0,0 +1,7 @@
1
+ # Closure Checklist
2
+
3
+ - [ ] Required tasks resolved
4
+ - [ ] Quality gates passed
5
+ - [ ] Evidence package complete
6
+ - [ ] Registry/state updated
7
+ - [ ] Retrospective scheduled
@@ -0,0 +1,11 @@
1
+ # Outcome Review
2
+
3
+ ## Target Outcome
4
+
5
+ ## Actual Outcome
6
+
7
+ ## Delta
8
+
9
+ ## Root Causes
10
+
11
+ ## Follow-up Actions
@@ -0,0 +1,44 @@
1
+ ---
2
+ name: discovery-skill
3
+ description: Define and approve a measurable outcome and Spec. Use when a new delivery request has unclear scope, missing outcome, or missing owner.
4
+ ---
5
+
6
+ # discovery-skill
7
+
8
+ ## Trigger context
9
+ - New delivery request with undefined scope
10
+ - Existing scope lacks clear outcome or owner
11
+
12
+ ## Required inputs
13
+ - project_slug
14
+ - project_name
15
+ - owner
16
+ - outcome_hypothesis
17
+ - constraints
18
+
19
+ ## Output schema
20
+ - `.project/projects/<slug>/spec.md`
21
+ - clarified outcome statement
22
+ - open questions list
23
+
24
+ ## Quality checks
25
+ - measurable success criteria present
26
+ - explicit non-goals present
27
+ - dependency assumptions documented
28
+
29
+ ## Failure behavior
30
+ - stop if objective is ambiguous
31
+ - return a clarification question set
32
+
33
+ ## Allowed side effects
34
+ - create project scaffold through init script
35
+ - update `spec.md`
36
+
37
+ ## Script hooks
38
+ - `bash .agents/scripts/pm/init.sh <slug> "<Project Name>" <owner> <lead>`
39
+ - `bash .agents/scripts/pm/validate.sh`
40
+
41
+ ## Execution assets
42
+ - `references/runbook.md`
43
+ - `templates/clarification-questions.md`
44
+ - `templates/discovery-summary.md`
@@ -0,0 +1,14 @@
1
+ # Discovery Runbook
2
+
3
+ 1. Confirm project slug, owner, and measurable outcome.
4
+ 2. If project scaffold is missing, run:
5
+ - `bash .agents/scripts/pm/init.sh <slug> "<Project Name>" <owner> <lead>`
6
+ 3. Fill `spec.md` using `.project/templates/spec.md`.
7
+ 4. Ensure non-goals and dependencies are explicit.
8
+ 5. Validate:
9
+ - `bash .agents/scripts/pm/validate.sh`
10
+
11
+ Exit gate:
12
+ - Spec outcome is measurable
13
+ - Non-goals are explicit
14
+ - Assumptions are documented
@@ -0,0 +1,18 @@
1
+ # Discovery Clarification Questions
2
+
3
+ ## Problem
4
+ - What exact pain are we solving?
5
+ - Who is blocked today and how often?
6
+
7
+ ## Outcome
8
+ - What measurable result defines success?
9
+ - What is the target date?
10
+
11
+ ## Scope
12
+ - What is explicitly out of scope?
13
+ - What is the smallest viable first delivery?
14
+
15
+ ## Constraints
16
+ - Technical constraints?
17
+ - Compliance/security constraints?
18
+ - Team/resource constraints?
@@ -0,0 +1,14 @@
1
+ # Discovery Summary
2
+
3
+ ## Outcome Hypothesis
4
+
5
+ ## Owner
6
+
7
+ ## Scope (In / Out)
8
+
9
+ ## Assumptions
10
+
11
+ ## Open Questions
12
+
13
+ ## Next Action
14
+ - Move to planning once spec is approved.