@pieerry/harness-kit 3.3.1 → 4.0.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.
- package/.claude/{plugins → agents}/product-manager/README.md +32 -30
- package/.claude/{plugins → agents}/product-manager/guides/examples/good-prp-example.md +2 -2
- package/.claude/{plugins → agents}/product-manager/guides/pipeline.md +7 -7
- package/.claude/{plugins → agents}/product-manager/sensors/prp-links.md +1 -1
- package/.claude/{plugins → agents}/product-manager/skills/prd/SKILL.md +2 -2
- package/.claude/{plugins → agents}/product-manager/skills/prp/SKILL.md +4 -4
- package/.claude/agents/product-manager.md +2 -2
- package/.claude/agents/staff-software-engineer/README.md +87 -0
- package/.claude/{plugins → agents}/staff-software-engineer/guides/conventions-override.md +3 -3
- package/.claude/{plugins → agents}/staff-software-engineer/guides/pipeline.md +4 -4
- package/.claude/{plugins → agents}/staff-software-engineer/sensors/dev-structure.md +2 -2
- package/.claude/{plugins → agents}/staff-software-engineer/sensors/pr-structure.md +3 -3
- package/.claude/{plugins → agents}/staff-software-engineer/sensors/test-structure.md +2 -2
- package/.claude/agents/staff-software-engineer.md +4 -4
- package/.claude/commands/pipeline/reset.md +1 -1
- package/.claude/commands/product-manager/prd.md +11 -11
- package/.claude/commands/product-manager/prp.md +12 -12
- package/.claude/commands/product-manager/run.md +4 -4
- package/.claude/commands/sse/dev.md +11 -11
- package/.claude/commands/sse/plan.md +11 -12
- package/.claude/commands/sse/pr.md +6 -7
- package/.claude/commands/sse/run.md +4 -4
- package/.claude/commands/sse/test.md +5 -5
- package/.claude/conventions/README.md +1 -1
- package/.claude/hooks/activity-pre-read.sh +4 -4
- package/.claude/hooks/status-line.sh +11 -11
- package/.claude/{plugins/product-manager/hooks → runtime/hooks/product-manager}/post-eval-prd.sh +11 -9
- package/.claude/{plugins/product-manager/hooks → runtime/hooks/product-manager}/post-eval-prp.sh +11 -9
- package/.claude/{plugins/product-manager/hooks → runtime/hooks/product-manager}/post-write-prd.sh +7 -5
- package/.claude/{plugins/product-manager/hooks → runtime/hooks/product-manager}/post-write-prp.sh +8 -6
- package/.claude/{plugins/product-manager/hooks → runtime/hooks/product-manager}/pre-prp-check.sh +5 -3
- package/.claude/{plugins/staff-software-engineer/hooks → runtime/hooks/staff-software-engineer}/post-eval-sse.sh +13 -11
- package/.claude/{plugins/staff-software-engineer/hooks → runtime/hooks/staff-software-engineer}/post-write-sse.sh +11 -9
- package/.claude/runtime/scripts/product-manager/__pycache__/confluence-publish.cpython-314.pyc +0 -0
- package/.claude/runtime/scripts/product-manager/__pycache__/link-validator.cpython-314.pyc +0 -0
- package/.claude/runtime/scripts/product-manager/__pycache__/sensor-runner.cpython-314.pyc +0 -0
- package/.claude/runtime/scripts/product-manager/__pycache__/token-phase.cpython-314.pyc +0 -0
- package/.claude/runtime/scripts/product-manager/confluence-publish.py +206 -0
- package/.claude/{plugins/product-manager/scripts → runtime/scripts/product-manager}/link-validator.py +1 -1
- package/.claude/{plugins/product-manager/scripts → runtime/scripts/product-manager}/token-phase.py +2 -2
- package/.claude/scripts/__pycache__/activity.cpython-314.pyc +0 -0
- package/.claude/scripts/__pycache__/pipeline.cpython-314.pyc +0 -0
- package/.claude/scripts/__pycache__/pr-monitor.cpython-314.pyc +0 -0
- package/.claude/scripts/pipeline.py +6 -6
- package/.claude/settings.json +7 -7
- package/.claude/settings.local.json +11 -3
- package/AGENTS.md +141 -0
- package/CLAUDE.md +9 -7
- package/README.md +88 -290
- package/VERSION +1 -1
- package/bin/hk.js +16 -8
- package/package.json +5 -3
- package/setup/install.sh +59 -40
- package/setup/update.sh +5 -0
- package/.claude/plugins/product-manager/scripts/confluence-publish.py +0 -205
- package/.claude/plugins/staff-software-engineer/README.md +0 -90
- /package/.claude/{plugins → agents}/product-manager/evals/prd-quality.md +0 -0
- /package/.claude/{plugins → agents}/product-manager/evals/prd-readiness.md +0 -0
- /package/.claude/{plugins → agents}/product-manager/evals/prp-context-readiness.md +0 -0
- /package/.claude/{plugins → agents}/product-manager/evals/prp-quality.md +0 -0
- /package/.claude/{plugins → agents}/product-manager/guides/examples/good-prd-example.md +0 -0
- /package/.claude/{plugins → agents}/product-manager/guides/prd-guidelines.md +0 -0
- /package/.claude/{plugins → agents}/product-manager/guides/product-guidelines.md +0 -0
- /package/.claude/{plugins → agents}/product-manager/guides/prp-guidelines.md +0 -0
- /package/.claude/{plugins → agents}/product-manager/guides/templates/prd.md +0 -0
- /package/.claude/{plugins → agents}/product-manager/guides/templates/prp.md +0 -0
- /package/.claude/{plugins → agents}/product-manager/guides/writing-style.md +0 -0
- /package/.claude/{plugins → agents}/product-manager/sensors/prd-acceptance-criteria.md +0 -0
- /package/.claude/{plugins → agents}/product-manager/sensors/prd-structure.md +0 -0
- /package/.claude/{plugins → agents}/product-manager/sensors/prp-context-quality.md +0 -0
- /package/.claude/{plugins → agents}/product-manager/sensors/prp-structure.md +0 -0
- /package/.claude/{plugins → agents}/staff-software-engineer/evals/dev-quality.md +0 -0
- /package/.claude/{plugins → agents}/staff-software-engineer/evals/plan-quality.md +0 -0
- /package/.claude/{plugins → agents}/staff-software-engineer/evals/pr-quality.md +0 -0
- /package/.claude/{plugins → agents}/staff-software-engineer/evals/test-quality.md +0 -0
- /package/.claude/{plugins → agents}/staff-software-engineer/guides/coding-style.md +0 -0
- /package/.claude/{plugins → agents}/staff-software-engineer/guides/commit-style.md +0 -0
- /package/.claude/{plugins → agents}/staff-software-engineer/sensors/code-conventions.md +0 -0
- /package/.claude/{plugins → agents}/staff-software-engineer/sensors/plan-structure.md +0 -0
- /package/.claude/{plugins → agents}/staff-software-engineer/sensors/test-coverage.md +0 -0
- /package/.claude/{plugins → agents}/staff-software-engineer/skills/backend/SKILL.md +0 -0
- /package/.claude/{plugins → agents}/staff-software-engineer/skills/devops/SKILL.md +0 -0
- /package/.claude/{plugins → agents}/staff-software-engineer/skills/mobile/SKILL.md +0 -0
- /package/.claude/{plugins → agents}/staff-software-engineer/skills/web/SKILL.md +0 -0
- /package/.claude/{plugins/product-manager/outputs → runtime/outputs/pm}/.markers/.gitkeep +0 -0
- /package/.claude/{plugins/staff-software-engineer/outputs → runtime/outputs/sse}/.markers/.gitkeep +0 -0
- /package/.claude/{plugins/product-manager/scripts → runtime/scripts/product-manager}/sensor-runner.py +0 -0
|
@@ -2,23 +2,23 @@
|
|
|
2
2
|
description: Implement the approved plan in code. Writes commits, runs gates, returns diff summary.
|
|
3
3
|
---
|
|
4
4
|
|
|
5
|
-
Implement plan. Follow .claude/
|
|
5
|
+
Implement plan. Follow .claude/agents/staff-software-engineer/guides/pipeline.md.
|
|
6
6
|
|
|
7
7
|
Print header card before coding and footer card after gates run. Format: .claude/scripts/stage-card.md.
|
|
8
8
|
|
|
9
|
-
Source plan: latest in .claude/
|
|
9
|
+
Source plan: latest in .claude/runtime/outputs/sse/plan/ with approved marker. None, abort. Ask user to run /sse:plan first.
|
|
10
10
|
|
|
11
11
|
Before coding, write phase start marker:
|
|
12
12
|
|
|
13
13
|
```
|
|
14
|
-
.claude/
|
|
14
|
+
.claude/runtime/outputs/sse/.markers/{feature_id}.dev-generate.start
|
|
15
15
|
```
|
|
16
16
|
|
|
17
17
|
Read:
|
|
18
18
|
- source plan
|
|
19
|
-
- area skill: .claude/
|
|
20
|
-
- .claude/
|
|
21
|
-
- .claude/
|
|
19
|
+
- area skill: .claude/agents/staff-software-engineer/skills/{area}/SKILL.md
|
|
20
|
+
- .claude/agents/staff-software-engineer/guides/coding-style.md
|
|
21
|
+
- .claude/agents/staff-software-engineer/guides/commit-style.md
|
|
22
22
|
- project conventions: {repo}/.claude/conventions/{area}.md if present
|
|
23
23
|
|
|
24
24
|
Read 3+ similar files in target repo before writing. Match conventions:
|
|
@@ -29,20 +29,20 @@ Read 3+ similar files in target repo before writing. Match conventions:
|
|
|
29
29
|
Write code in small commits (1-4 files, < 100 lines ideal). Conventional Commits format.
|
|
30
30
|
|
|
31
31
|
Code gates (run after each implementation step):
|
|
32
|
-
- .claude/
|
|
33
|
-
- .claude/
|
|
32
|
+
- .claude/agents/staff-software-engineer/sensors/code-conventions.md (lint, formatting, banned patterns)
|
|
33
|
+
- .claude/agents/staff-software-engineer/sensors/test-coverage.md (every feature/bugfix has tests)
|
|
34
34
|
|
|
35
35
|
Any gate fails, fix and retry. Max 3 attempts. Hard stop after 3.
|
|
36
36
|
|
|
37
|
-
After done, write `.claude/
|
|
37
|
+
After done, write `.claude/runtime/outputs/sse/dev/{feature_id}.md` with summary:
|
|
38
38
|
- files changed
|
|
39
39
|
- commits
|
|
40
40
|
- gate results
|
|
41
41
|
- blockers if any
|
|
42
42
|
|
|
43
43
|
Document gates (run on saved summary):
|
|
44
|
-
- Sensor: .claude/
|
|
45
|
-
- Eval: .claude/
|
|
44
|
+
- Sensor: .claude/agents/staff-software-engineer/sensors/dev-structure.md (auto-run by post-write hook)
|
|
45
|
+
- Eval: .claude/agents/staff-software-engineer/evals/dev-quality.md (you score it; threshold 8.0)
|
|
46
46
|
|
|
47
47
|
Append approval marker only when code gates pass and dev-quality eval is >= 8.0:
|
|
48
48
|
|
|
@@ -2,35 +2,34 @@
|
|
|
2
2
|
description: Generate an implementation plan from an approved PRP. Sensors and evals gate.
|
|
3
3
|
---
|
|
4
4
|
|
|
5
|
-
Generate technical plan. Follow .claude/
|
|
5
|
+
Generate technical plan. Follow .claude/agents/staff-software-engineer/guides/pipeline.md for retry, approval, publish.
|
|
6
6
|
|
|
7
7
|
Print header card before drafting and footer card after gates run. Format: .claude/scripts/stage-card.md.
|
|
8
8
|
|
|
9
|
-
Source PRP: user passes path, use it. Else pick most recent in .claude/
|
|
9
|
+
Source PRP: user passes path, use it. Else pick most recent in .claude/runtime/outputs/pm/prp/. None found, abort. Tell user to run /product-manager:prp first.
|
|
10
10
|
|
|
11
|
-
Compute feature_id from source PRP filename (basename without .md). Save plan to .claude/
|
|
11
|
+
Compute feature_id from source PRP filename (basename without .md). Save plan to .claude/runtime/outputs/sse/plan/{feature_id}.md so it matches.
|
|
12
12
|
|
|
13
13
|
Before generating, write phase start marker:
|
|
14
14
|
|
|
15
15
|
```
|
|
16
|
-
.claude/
|
|
16
|
+
.claude/runtime/outputs/sse/.markers/{feature_id}.plan-generate.start
|
|
17
17
|
```
|
|
18
18
|
|
|
19
19
|
Content: `{"timestamp": "<ISO-8601 UTC now>", "session_id": ""}`
|
|
20
20
|
|
|
21
21
|
Read:
|
|
22
22
|
- source PRP
|
|
23
|
-
- .claude/
|
|
24
|
-
- .claude/
|
|
25
|
-
- .claude/
|
|
26
|
-
-
|
|
27
|
-
- project conventions if present: {repo}/.claude/conventions/{area}.md (see .claude/plugins/staff-software-engineer/guides/conventions-override.md)
|
|
23
|
+
- .claude/agents/staff-software-engineer/guides/pipeline.md
|
|
24
|
+
- .claude/agents/staff-software-engineer/guides/coding-style.md
|
|
25
|
+
- area-specific skill: .claude/agents/staff-software-engineer/skills/{area}/SKILL.md (area = backend, web, mobile, devops)
|
|
26
|
+
- project conventions if present: {repo}/.claude/conventions/{area}.md (see .claude/agents/staff-software-engineer/guides/conventions-override.md)
|
|
28
27
|
|
|
29
|
-
Save to .claude/
|
|
28
|
+
Save to .claude/runtime/outputs/sse/plan/{feature_id}.md.
|
|
30
29
|
|
|
31
|
-
Sensors: .claude/
|
|
30
|
+
Sensors: .claude/agents/staff-software-engineer/sensors/plan-structure.md.
|
|
32
31
|
|
|
33
|
-
Evals: .claude/
|
|
32
|
+
Evals: .claude/agents/staff-software-engineer/evals/plan-quality.md.
|
|
34
33
|
|
|
35
34
|
After save, reply with this exact shape (name actual sensors/evals/guides that ran):
|
|
36
35
|
|
|
@@ -13,12 +13,11 @@ Prerequisites:
|
|
|
13
13
|
Before opening, write phase start marker:
|
|
14
14
|
|
|
15
15
|
```
|
|
16
|
-
.claude/
|
|
16
|
+
.claude/runtime/outputs/sse/.markers/{feature_id}.pr-generate.start
|
|
17
17
|
```
|
|
18
18
|
|
|
19
19
|
Read:
|
|
20
|
-
- .claude/
|
|
21
|
-
- .claude/plugins/staff-software-engineer/guides/commit-style.md
|
|
20
|
+
- .claude/agents/staff-software-engineer/guides/commit-style.md
|
|
22
21
|
- latest plan and dev outputs (for body content)
|
|
23
22
|
|
|
24
23
|
Detect ticket id from branch name (e.g., `feat/PROJ-123-foo` -> `PROJ-123`). Branch has none, ask user once. Never call Jira API.
|
|
@@ -30,7 +29,7 @@ Compose:
|
|
|
30
29
|
|
|
31
30
|
Open via `gh pr create --draft --title "..." --body "..."`.
|
|
32
31
|
|
|
33
|
-
Save .claude/
|
|
32
|
+
Save .claude/runtime/outputs/sse/pr/{feature_id}.md with:
|
|
34
33
|
- pr url
|
|
35
34
|
- title
|
|
36
35
|
- draft status
|
|
@@ -39,8 +38,8 @@ Save .claude/plugins/staff-software-engineer/outputs/pr/{feature_id}.md with:
|
|
|
39
38
|
- refs (plan + dev paths)
|
|
40
39
|
|
|
41
40
|
Document gates (run on saved record):
|
|
42
|
-
- Sensor: .claude/
|
|
43
|
-
- Eval: .claude/
|
|
41
|
+
- Sensor: .claude/agents/staff-software-engineer/sensors/pr-structure.md (auto-run by post-write hook)
|
|
42
|
+
- Eval: .claude/agents/staff-software-engineer/evals/pr-quality.md (you score it; threshold 8.0)
|
|
44
43
|
|
|
45
44
|
Append approval marker only when sensor passes and pr-quality eval is >= 8.0:
|
|
46
45
|
|
|
@@ -56,7 +55,7 @@ PR opened: {url}
|
|
|
56
55
|
draft: {yes|no}
|
|
57
56
|
sensors: pr-structure ok
|
|
58
57
|
eval: pr-quality {N}/10
|
|
59
|
-
guides:
|
|
58
|
+
guides: commit-style.md
|
|
60
59
|
refs: plan/{feature_id}.md, dev/{feature_id}.md
|
|
61
60
|
next: request review (if draft, mark ready when checks pass)
|
|
62
61
|
```
|
|
@@ -11,14 +11,14 @@ Run end to end.
|
|
|
11
11
|
5. Invoke /sse:pr-monitor. Arms backoff polling, auto-clears pipeline state on merge. Skip if user passed `--no-monitor` or `gh pr view` already returns MERGED.
|
|
12
12
|
6. Return summary.
|
|
13
13
|
|
|
14
|
-
Follow .claude/
|
|
14
|
+
Follow .claude/agents/staff-software-engineer/guides/pipeline.md for retry, approval markers, token accounting, publish behavior.
|
|
15
15
|
|
|
16
16
|
Return format. Name every sensor, eval, guide that ran. Generic summaries not acceptable — list specifics so user sees what was checked and loaded.
|
|
17
17
|
|
|
18
18
|
```
|
|
19
19
|
Engineering pipeline complete.
|
|
20
20
|
|
|
21
|
-
Plan: .claude/
|
|
21
|
+
Plan: .claude/runtime/outputs/sse/plan/{path}
|
|
22
22
|
sensors: {sensor-name} ok ({sub-check, sub-check, ...}), {sensor-name} ok
|
|
23
23
|
eval: {eval-name} {score}/10 (attempts: N)
|
|
24
24
|
guides: {guide-1.md}, {guide-2.md}, skills/{area}/SKILL.md
|
|
@@ -31,7 +31,7 @@ Dev: branch {branch}
|
|
|
31
31
|
guides: coding-style.md, commit-style.md, skills/{area}/SKILL.md
|
|
32
32
|
refs: plan/{feature_id}.md, conventions/{area}.md
|
|
33
33
|
|
|
34
|
-
Test: .claude/
|
|
34
|
+
Test: .claude/runtime/outputs/sse/test/{path}
|
|
35
35
|
command: {detected-test-command}
|
|
36
36
|
passed: N, failed: M
|
|
37
37
|
duration: {seconds}s
|
|
@@ -39,7 +39,7 @@ Test: .claude/plugins/staff-software-engineer/outputs/test/{path}
|
|
|
39
39
|
PR: {url}
|
|
40
40
|
title: {title}
|
|
41
41
|
draft: yes|no
|
|
42
|
-
guides:
|
|
42
|
+
guides: commit-style.md
|
|
43
43
|
refs: plan/{feature_id}.md, dev/{feature_id}.md
|
|
44
44
|
|
|
45
45
|
Monitor: {armed, first check in 3min, escalates to 30min cap | skipped, reason}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Run the project test suite. Reports results to .claude/
|
|
2
|
+
description: Run the project test suite. Reports results to .claude/runtime/outputs/sse/test/.
|
|
3
3
|
---
|
|
4
4
|
|
|
5
5
|
Run test suite for current repo.
|
|
@@ -17,12 +17,12 @@ Detect project test command (in order):
|
|
|
17
17
|
Before running, write phase start marker:
|
|
18
18
|
|
|
19
19
|
```
|
|
20
|
-
.claude/
|
|
20
|
+
.claude/runtime/outputs/sse/.markers/{feature_id}.test-generate.start
|
|
21
21
|
```
|
|
22
22
|
|
|
23
23
|
Run test command. Capture stdout and stderr.
|
|
24
24
|
|
|
25
|
-
Save .claude/
|
|
25
|
+
Save .claude/runtime/outputs/sse/test/{feature_id}.md with:
|
|
26
26
|
- command run
|
|
27
27
|
- exit code
|
|
28
28
|
- passed, failed counts
|
|
@@ -30,8 +30,8 @@ Save .claude/plugins/staff-software-engineer/outputs/test/{feature_id}.md with:
|
|
|
30
30
|
- duration
|
|
31
31
|
|
|
32
32
|
Document gates (run on saved report):
|
|
33
|
-
- Sensor: .claude/
|
|
34
|
-
- Eval: .claude/
|
|
33
|
+
- Sensor: .claude/agents/staff-software-engineer/sensors/test-structure.md (auto-run by post-write hook)
|
|
34
|
+
- Eval: .claude/agents/staff-software-engineer/evals/test-quality.md (you score it; threshold 8.0)
|
|
35
35
|
|
|
36
36
|
Append approval marker only when exit code is 0 and test-quality eval is >= 8.0:
|
|
37
37
|
|
|
@@ -9,4 +9,4 @@ Override staff-software-engineer plugin defaults for this repo. Create files as
|
|
|
9
9
|
|
|
10
10
|
When a file exists here, plugin reads it on top of defaults. Rules in this folder win.
|
|
11
11
|
|
|
12
|
-
See `.claude/
|
|
12
|
+
See `.claude/agents/staff-software-engineer/guides/conventions-override.md` for the full reference.
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
#!/bin/sh
|
|
2
2
|
# PreToolUse hook on Read. If the file being read is a sensor/eval/guide
|
|
3
|
-
# under any
|
|
3
|
+
# under any agent, mark current activity so status-line.sh can surface it.
|
|
4
4
|
|
|
5
5
|
FILE_PATH="${CLAUDE_TOOL_FILE_PATH:-}"
|
|
6
6
|
[ -z "$FILE_PATH" ] && exit 0
|
|
7
7
|
|
|
8
8
|
KIND=""
|
|
9
9
|
case "$FILE_PATH" in
|
|
10
|
-
*/
|
|
11
|
-
*/
|
|
12
|
-
*/
|
|
10
|
+
*/agents/*/sensors/*.md) KIND=sensor ;;
|
|
11
|
+
*/agents/*/evals/*.md) KIND=eval ;;
|
|
12
|
+
*/agents/*/guides/*.md) KIND=guide ;;
|
|
13
13
|
*) exit 0 ;;
|
|
14
14
|
esac
|
|
15
15
|
|
|
@@ -30,14 +30,14 @@ fi
|
|
|
30
30
|
|
|
31
31
|
# --- Fallback: original file-scan logic ---
|
|
32
32
|
|
|
33
|
-
PM_DIR=".claude/
|
|
34
|
-
SSE_DIR=".claude/
|
|
33
|
+
PM_DIR=".claude/runtime/outputs/pm"
|
|
34
|
+
SSE_DIR=".claude/runtime/outputs/sse"
|
|
35
35
|
|
|
36
36
|
render() {
|
|
37
37
|
LATEST=""
|
|
38
|
-
for f in "$PM_DIR/
|
|
39
|
-
"$SSE_DIR/
|
|
40
|
-
"$SSE_DIR/
|
|
38
|
+
for f in "$PM_DIR/prd/"*.md "$PM_DIR/prp/"*.md \
|
|
39
|
+
"$SSE_DIR/plan/"*.md "$SSE_DIR/dev/"*.md \
|
|
40
|
+
"$SSE_DIR/test/"*.md "$SSE_DIR/pr/"*.md; do
|
|
41
41
|
[ -f "$f" ] || continue
|
|
42
42
|
if [ -z "$LATEST" ] || [ "$f" -nt "$LATEST" ]; then
|
|
43
43
|
LATEST="$f"
|
|
@@ -74,12 +74,12 @@ render() {
|
|
|
74
74
|
current_state=""
|
|
75
75
|
for stage in prd prp plan dev test pr; do
|
|
76
76
|
case $stage in
|
|
77
|
-
prd) f="$PM_DIR/
|
|
78
|
-
prp) f="$PM_DIR/
|
|
79
|
-
plan) f="$SSE_DIR/
|
|
80
|
-
dev) f="$SSE_DIR/
|
|
81
|
-
test) f="$SSE_DIR/
|
|
82
|
-
pr) f="$SSE_DIR/
|
|
77
|
+
prd) f="$PM_DIR/prd/${FID}.md" ;;
|
|
78
|
+
prp) f="$PM_DIR/prp/${FID}.md" ;;
|
|
79
|
+
plan) f="$SSE_DIR/plan/${FID}.md" ;;
|
|
80
|
+
dev) f="$SSE_DIR/dev/${FID}.md" ;;
|
|
81
|
+
test) f="$SSE_DIR/test/${FID}.md" ;;
|
|
82
|
+
pr) f="$SSE_DIR/pr/${FID}.md" ;;
|
|
83
83
|
esac
|
|
84
84
|
s=$(check_state "$f")
|
|
85
85
|
if [ "$s" = "approved" ]; then
|
package/.claude/{plugins/product-manager/hooks → runtime/hooks/product-manager}/post-eval-prd.sh
RENAMED
|
@@ -7,10 +7,12 @@
|
|
|
7
7
|
set -euo pipefail
|
|
8
8
|
|
|
9
9
|
FILE_PATH="${CLAUDE_TOOL_FILE_PATH:-}"
|
|
10
|
-
|
|
10
|
+
AGENT_DIR=".claude/agents/product-manager"
|
|
11
|
+
OUTPUTS_DIR=".claude/runtime/outputs/pm"
|
|
12
|
+
SCRIPTS_DIR=".claude/runtime/scripts/product-manager"
|
|
11
13
|
|
|
12
14
|
case "$FILE_PATH" in
|
|
13
|
-
*.claude/
|
|
15
|
+
*.claude/runtime/outputs/pm/prd/*.md) ;;
|
|
14
16
|
*) exit 0 ;;
|
|
15
17
|
esac
|
|
16
18
|
|
|
@@ -25,7 +27,7 @@ fi
|
|
|
25
27
|
echo "[hook] PRD approved, publishing $(basename "$FILE_PATH")" >&2
|
|
26
28
|
|
|
27
29
|
FEATURE_ID="$(basename "$FILE_PATH" .md)"
|
|
28
|
-
MARKERS_DIR="$
|
|
30
|
+
MARKERS_DIR="$OUTPUTS_DIR/.markers"
|
|
29
31
|
mkdir -p "$MARKERS_DIR"
|
|
30
32
|
NOW="$(date -u +%Y-%m-%dT%H:%M:%SZ)"
|
|
31
33
|
|
|
@@ -35,21 +37,21 @@ if [ -f "$MARKERS_DIR/${FEATURE_ID}.prd-validate.start" ]; then
|
|
|
35
37
|
fi
|
|
36
38
|
|
|
37
39
|
# Token accounting for both phases
|
|
38
|
-
python3 "$
|
|
40
|
+
python3 "$SCRIPTS_DIR/token-phase.py" \
|
|
39
41
|
--feature-id "$FEATURE_ID" \
|
|
40
42
|
--phase "prd-generate" \
|
|
41
|
-
--plugin-dir "$
|
|
43
|
+
--plugin-dir "$OUTPUTS_DIR" \
|
|
42
44
|
--prd-path "$FILE_PATH" >&2 || true
|
|
43
45
|
|
|
44
|
-
python3 "$
|
|
46
|
+
python3 "$SCRIPTS_DIR/token-phase.py" \
|
|
45
47
|
--feature-id "$FEATURE_ID" \
|
|
46
48
|
--phase "prd-validate" \
|
|
47
|
-
--plugin-dir "$
|
|
49
|
+
--plugin-dir "$OUTPUTS_DIR" \
|
|
48
50
|
--prd-path "$FILE_PATH" >&2 || true
|
|
49
51
|
|
|
50
52
|
# Confluence (optional)
|
|
51
53
|
if [ -n "${JIRA_USERNAME:-}" ] && [ -n "${JIRA_API_TOKEN:-}" ]; then
|
|
52
|
-
python3 "$
|
|
54
|
+
python3 "$SCRIPTS_DIR/confluence-publish.py" \
|
|
53
55
|
--artifact "$FILE_PATH" \
|
|
54
56
|
--kind prd >&2 || {
|
|
55
57
|
echo "[hook] Confluence publish failed but local copy is saved" >&2
|
|
@@ -59,7 +61,7 @@ else
|
|
|
59
61
|
fi
|
|
60
62
|
|
|
61
63
|
# Append published marker + inline tokens reference
|
|
62
|
-
TOKENS_FILE="$
|
|
64
|
+
TOKENS_FILE="$OUTPUTS_DIR/tokens/${FEATURE_ID}.json"
|
|
63
65
|
if [ -f "$TOKENS_FILE" ]; then
|
|
64
66
|
TOKENS_LINE=$(python3 -c "
|
|
65
67
|
import json,sys
|
package/.claude/{plugins/product-manager/hooks → runtime/hooks/product-manager}/post-eval-prp.sh
RENAMED
|
@@ -7,10 +7,12 @@
|
|
|
7
7
|
set -euo pipefail
|
|
8
8
|
|
|
9
9
|
FILE_PATH="${CLAUDE_TOOL_FILE_PATH:-}"
|
|
10
|
-
|
|
10
|
+
AGENT_DIR=".claude/agents/product-manager"
|
|
11
|
+
OUTPUTS_DIR=".claude/runtime/outputs/pm"
|
|
12
|
+
SCRIPTS_DIR=".claude/runtime/scripts/product-manager"
|
|
11
13
|
|
|
12
14
|
case "$FILE_PATH" in
|
|
13
|
-
*.claude/
|
|
15
|
+
*.claude/runtime/outputs/pm/prp/*.md) ;;
|
|
14
16
|
*) exit 0 ;;
|
|
15
17
|
esac
|
|
16
18
|
|
|
@@ -25,7 +27,7 @@ fi
|
|
|
25
27
|
echo "[hook] PRP approved, finalizing handoff for $(basename "$FILE_PATH")" >&2
|
|
26
28
|
|
|
27
29
|
FEATURE_ID="$(basename "$FILE_PATH" .md)"
|
|
28
|
-
MARKERS_DIR="$
|
|
30
|
+
MARKERS_DIR="$OUTPUTS_DIR/.markers"
|
|
29
31
|
mkdir -p "$MARKERS_DIR"
|
|
30
32
|
NOW="$(date -u +%Y-%m-%dT%H:%M:%SZ)"
|
|
31
33
|
|
|
@@ -33,26 +35,26 @@ if [ -f "$MARKERS_DIR/${FEATURE_ID}.prp-validate.start" ]; then
|
|
|
33
35
|
printf '{"timestamp":"%s"}\n' "$NOW" > "$MARKERS_DIR/${FEATURE_ID}.prp-validate.end"
|
|
34
36
|
fi
|
|
35
37
|
|
|
36
|
-
python3 "$
|
|
38
|
+
python3 "$SCRIPTS_DIR/token-phase.py" \
|
|
37
39
|
--feature-id "$FEATURE_ID" \
|
|
38
40
|
--phase "prp-generate" \
|
|
39
|
-
--plugin-dir "$
|
|
41
|
+
--plugin-dir "$OUTPUTS_DIR" \
|
|
40
42
|
--prp-path "$FILE_PATH" >&2 || true
|
|
41
43
|
|
|
42
|
-
python3 "$
|
|
44
|
+
python3 "$SCRIPTS_DIR/token-phase.py" \
|
|
43
45
|
--feature-id "$FEATURE_ID" \
|
|
44
46
|
--phase "prp-validate" \
|
|
45
|
-
--plugin-dir "$
|
|
47
|
+
--plugin-dir "$OUTPUTS_DIR" \
|
|
46
48
|
--prp-path "$FILE_PATH" >&2 || true
|
|
47
49
|
|
|
48
50
|
if [ -n "${JIRA_USERNAME:-}" ] && [ -n "${JIRA_API_TOKEN:-}" ]; then
|
|
49
|
-
python3 "$
|
|
51
|
+
python3 "$SCRIPTS_DIR/confluence-publish.py" \
|
|
50
52
|
--artifact "$FILE_PATH" \
|
|
51
53
|
--kind prp >&2 || true
|
|
52
54
|
fi
|
|
53
55
|
|
|
54
56
|
# Inline tokens summary
|
|
55
|
-
TOKENS_FILE="$
|
|
57
|
+
TOKENS_FILE="$OUTPUTS_DIR/tokens/${FEATURE_ID}.json"
|
|
56
58
|
if [ -f "$TOKENS_FILE" ]; then
|
|
57
59
|
TOKENS_LINE=$(python3 -c "
|
|
58
60
|
import json,sys
|
package/.claude/{plugins/product-manager/hooks → runtime/hooks/product-manager}/post-write-prd.sh
RENAMED
|
@@ -7,10 +7,12 @@
|
|
|
7
7
|
set -euo pipefail
|
|
8
8
|
|
|
9
9
|
FILE_PATH="${CLAUDE_TOOL_FILE_PATH:-}"
|
|
10
|
-
|
|
10
|
+
AGENT_DIR=".claude/agents/product-manager"
|
|
11
|
+
OUTPUTS_DIR=".claude/runtime/outputs/pm"
|
|
12
|
+
SCRIPTS_DIR=".claude/runtime/scripts/product-manager"
|
|
11
13
|
|
|
12
14
|
case "$FILE_PATH" in
|
|
13
|
-
*.claude/
|
|
15
|
+
*.claude/runtime/outputs/pm/prd/*.md) ;;
|
|
14
16
|
*) exit 0 ;;
|
|
15
17
|
esac
|
|
16
18
|
|
|
@@ -22,9 +24,9 @@ fi
|
|
|
22
24
|
echo "[hook] Running PRD sensors on $(basename "$FILE_PATH")" >&2
|
|
23
25
|
|
|
24
26
|
FAILURES=()
|
|
25
|
-
for sensor in "$
|
|
27
|
+
for sensor in "$AGENT_DIR"/sensors/prd-*.md; do
|
|
26
28
|
[ -f "$sensor" ] || continue
|
|
27
|
-
if ! python3 "$
|
|
29
|
+
if ! python3 "$SCRIPTS_DIR/sensor-runner.py" \
|
|
28
30
|
--sensor "$sensor" \
|
|
29
31
|
--artifact "$FILE_PATH" >&2; then
|
|
30
32
|
FAILURES+=("$(basename "$sensor")")
|
|
@@ -42,7 +44,7 @@ echo "[hook] PRD sensors passed" >&2
|
|
|
42
44
|
|
|
43
45
|
# Token phase markers: only on first save (no validate.start yet)
|
|
44
46
|
FEATURE_ID="$(basename "$FILE_PATH" .md)"
|
|
45
|
-
MARKERS_DIR="$
|
|
47
|
+
MARKERS_DIR="$OUTPUTS_DIR/.markers"
|
|
46
48
|
mkdir -p "$MARKERS_DIR"
|
|
47
49
|
NOW="$(date -u +%Y-%m-%dT%H:%M:%SZ)"
|
|
48
50
|
|
package/.claude/{plugins/product-manager/hooks → runtime/hooks/product-manager}/post-write-prp.sh
RENAMED
|
@@ -7,10 +7,12 @@
|
|
|
7
7
|
set -euo pipefail
|
|
8
8
|
|
|
9
9
|
FILE_PATH="${CLAUDE_TOOL_FILE_PATH:-}"
|
|
10
|
-
|
|
10
|
+
AGENT_DIR=".claude/agents/product-manager"
|
|
11
|
+
OUTPUTS_DIR=".claude/runtime/outputs/pm"
|
|
12
|
+
SCRIPTS_DIR=".claude/runtime/scripts/product-manager"
|
|
11
13
|
|
|
12
14
|
case "$FILE_PATH" in
|
|
13
|
-
*.claude/
|
|
15
|
+
*.claude/runtime/outputs/pm/prp/*.md) ;;
|
|
14
16
|
*) exit 0 ;;
|
|
15
17
|
esac
|
|
16
18
|
|
|
@@ -21,16 +23,16 @@ fi
|
|
|
21
23
|
echo "[hook] Running PRP sensors on $(basename "$FILE_PATH")" >&2
|
|
22
24
|
|
|
23
25
|
FAILURES=()
|
|
24
|
-
for sensor in "$
|
|
26
|
+
for sensor in "$AGENT_DIR"/sensors/prp-*.md; do
|
|
25
27
|
[ -f "$sensor" ] || continue
|
|
26
|
-
if ! python3 "$
|
|
28
|
+
if ! python3 "$SCRIPTS_DIR/sensor-runner.py" \
|
|
27
29
|
--sensor "$sensor" \
|
|
28
30
|
--artifact "$FILE_PATH" >&2; then
|
|
29
31
|
FAILURES+=("$(basename "$sensor")")
|
|
30
32
|
fi
|
|
31
33
|
done
|
|
32
34
|
|
|
33
|
-
if ! python3 "$
|
|
35
|
+
if ! python3 "$SCRIPTS_DIR/link-validator.py" \
|
|
34
36
|
--artifact "$FILE_PATH" \
|
|
35
37
|
--repo-root "$(git rev-parse --show-toplevel 2>/dev/null || pwd)" >&2; then
|
|
36
38
|
FAILURES+=("link-validator")
|
|
@@ -47,7 +49,7 @@ echo "[hook] PRP sensors passed" >&2
|
|
|
47
49
|
|
|
48
50
|
# Token phase markers
|
|
49
51
|
FEATURE_ID="$(basename "$FILE_PATH" .md)"
|
|
50
|
-
MARKERS_DIR="$
|
|
52
|
+
MARKERS_DIR="$OUTPUTS_DIR/.markers"
|
|
51
53
|
mkdir -p "$MARKERS_DIR"
|
|
52
54
|
NOW="$(date -u +%Y-%m-%dT%H:%M:%SZ)"
|
|
53
55
|
|
package/.claude/{plugins/product-manager/hooks → runtime/hooks/product-manager}/pre-prp-check.sh
RENAMED
|
@@ -7,10 +7,12 @@
|
|
|
7
7
|
set -euo pipefail
|
|
8
8
|
|
|
9
9
|
FILE_PATH="${CLAUDE_TOOL_FILE_PATH:-}"
|
|
10
|
-
|
|
10
|
+
AGENT_DIR=".claude/agents/product-manager"
|
|
11
|
+
OUTPUTS_DIR=".claude/runtime/outputs/pm"
|
|
12
|
+
SCRIPTS_DIR=".claude/runtime/scripts/product-manager"
|
|
11
13
|
|
|
12
14
|
case "$FILE_PATH" in
|
|
13
|
-
*.claude/
|
|
15
|
+
*.claude/runtime/outputs/pm/prp/*.md) ;;
|
|
14
16
|
*) exit 0 ;;
|
|
15
17
|
esac
|
|
16
18
|
|
|
@@ -30,7 +32,7 @@ fi
|
|
|
30
32
|
|
|
31
33
|
# Look for any approved PRD matching the slug
|
|
32
34
|
MATCHED=""
|
|
33
|
-
for prd in "$
|
|
35
|
+
for prd in "$OUTPUTS_DIR"/prd/*"-${SLUG}.md"; do
|
|
34
36
|
[ -f "$prd" ] || continue
|
|
35
37
|
if grep -q "<!-- approved:" "$prd"; then
|
|
36
38
|
MATCHED="$prd"
|
|
@@ -10,14 +10,16 @@
|
|
|
10
10
|
set -euo pipefail
|
|
11
11
|
|
|
12
12
|
FILE_PATH="${CLAUDE_TOOL_FILE_PATH:-}"
|
|
13
|
-
|
|
13
|
+
AGENT_DIR=".claude/agents/staff-software-engineer"
|
|
14
|
+
OUTPUTS_DIR=".claude/runtime/outputs/sse"
|
|
15
|
+
SCRIPTS_DIR=".claude/runtime/scripts/staff-software-engineer"
|
|
14
16
|
|
|
15
17
|
PHASE=""
|
|
16
18
|
case "$FILE_PATH" in
|
|
17
|
-
*.claude/
|
|
18
|
-
*.claude/
|
|
19
|
-
*.claude/
|
|
20
|
-
*.claude/
|
|
19
|
+
*.claude/runtime/outputs/sse/plan/*.md) PHASE=plan ;;
|
|
20
|
+
*.claude/runtime/outputs/sse/dev/*.md) PHASE=dev ;;
|
|
21
|
+
*.claude/runtime/outputs/sse/test/*.md) PHASE=test ;;
|
|
22
|
+
*.claude/runtime/outputs/sse/pr/*.md) PHASE=pr ;;
|
|
21
23
|
*) exit 0 ;;
|
|
22
24
|
esac
|
|
23
25
|
|
|
@@ -30,7 +32,7 @@ if grep -q "<!-- published:" "$FILE_PATH"; then
|
|
|
30
32
|
fi
|
|
31
33
|
|
|
32
34
|
FEATURE_ID="$(basename "$FILE_PATH" .md)"
|
|
33
|
-
MARKERS_DIR="$
|
|
35
|
+
MARKERS_DIR="$OUTPUTS_DIR/.markers"
|
|
34
36
|
mkdir -p "$MARKERS_DIR"
|
|
35
37
|
NOW="$(date -u +%Y-%m-%dT%H:%M:%SZ)"
|
|
36
38
|
|
|
@@ -38,17 +40,17 @@ if [ -f "$MARKERS_DIR/${FEATURE_ID}.${PHASE}-validate.start" ]; then
|
|
|
38
40
|
printf '{"timestamp":"%s"}\n' "$NOW" > "$MARKERS_DIR/${FEATURE_ID}.${PHASE}-validate.end"
|
|
39
41
|
fi
|
|
40
42
|
|
|
41
|
-
python3 "$
|
|
43
|
+
python3 "$SCRIPTS_DIR/token-phase.py" \
|
|
42
44
|
--feature-id "$FEATURE_ID" \
|
|
43
45
|
--phase "${PHASE}-generate" \
|
|
44
|
-
--plugin-dir "$
|
|
46
|
+
--plugin-dir "$OUTPUTS_DIR" >&2 || true
|
|
45
47
|
|
|
46
|
-
python3 "$
|
|
48
|
+
python3 "$SCRIPTS_DIR/token-phase.py" \
|
|
47
49
|
--feature-id "$FEATURE_ID" \
|
|
48
50
|
--phase "${PHASE}-validate" \
|
|
49
|
-
--plugin-dir "$
|
|
51
|
+
--plugin-dir "$OUTPUTS_DIR" >&2 || true
|
|
50
52
|
|
|
51
|
-
TOKENS_FILE="$
|
|
53
|
+
TOKENS_FILE="$OUTPUTS_DIR/tokens/${FEATURE_ID}.json"
|
|
52
54
|
if [ -f "$TOKENS_FILE" ]; then
|
|
53
55
|
TOKENS_LINE=$(python3 -c "
|
|
54
56
|
import json
|
|
@@ -8,14 +8,16 @@
|
|
|
8
8
|
set -euo pipefail
|
|
9
9
|
|
|
10
10
|
FILE_PATH="${CLAUDE_TOOL_FILE_PATH:-}"
|
|
11
|
-
|
|
11
|
+
AGENT_DIR=".claude/agents/staff-software-engineer"
|
|
12
|
+
OUTPUTS_DIR=".claude/runtime/outputs/sse"
|
|
13
|
+
SCRIPTS_DIR=".claude/runtime/scripts/staff-software-engineer"
|
|
12
14
|
|
|
13
15
|
PHASE=""
|
|
14
16
|
case "$FILE_PATH" in
|
|
15
|
-
*.claude/
|
|
16
|
-
*.claude/
|
|
17
|
-
*.claude/
|
|
18
|
-
*.claude/
|
|
17
|
+
*.claude/runtime/outputs/sse/plan/*.md) PHASE=plan ;;
|
|
18
|
+
*.claude/runtime/outputs/sse/dev/*.md) PHASE=dev ;;
|
|
19
|
+
*.claude/runtime/outputs/sse/test/*.md) PHASE=test ;;
|
|
20
|
+
*.claude/runtime/outputs/sse/pr/*.md) PHASE=pr ;;
|
|
19
21
|
*) exit 0 ;;
|
|
20
22
|
esac
|
|
21
23
|
|
|
@@ -23,16 +25,16 @@ if grep -q "<!-- approved:" "$FILE_PATH" 2>/dev/null; then
|
|
|
23
25
|
exit 0
|
|
24
26
|
fi
|
|
25
27
|
|
|
26
|
-
ACTIVITY="
|
|
28
|
+
ACTIVITY=".claude/scripts/activity.py"
|
|
27
29
|
set_activity() { [ -x "$ACTIVITY" ] && python3 "$ACTIVITY" set "$1" "$2" 2>/dev/null || true; }
|
|
28
30
|
clear_activity() { [ -x "$ACTIVITY" ] && python3 "$ACTIVITY" clear 2>/dev/null || true; }
|
|
29
31
|
|
|
30
32
|
FAILURES=()
|
|
31
|
-
for sensor in "$
|
|
33
|
+
for sensor in "$AGENT_DIR"/sensors/${PHASE}-*.md; do
|
|
32
34
|
[ -f "$sensor" ] || continue
|
|
33
35
|
sname="$(basename "$sensor" .md)"
|
|
34
36
|
set_activity sensor "$sname"
|
|
35
|
-
if ! python3 "$
|
|
37
|
+
if ! python3 "$SCRIPTS_DIR/sensor-runner.py" \
|
|
36
38
|
--sensor "$sensor" \
|
|
37
39
|
--artifact "$FILE_PATH" >&2; then
|
|
38
40
|
FAILURES+=("$sname")
|
|
@@ -46,7 +48,7 @@ if [ ${#FAILURES[@]} -gt 0 ]; then
|
|
|
46
48
|
fi
|
|
47
49
|
|
|
48
50
|
FEATURE_ID="$(basename "$FILE_PATH" .md)"
|
|
49
|
-
MARKERS_DIR="$
|
|
51
|
+
MARKERS_DIR="$OUTPUTS_DIR/.markers"
|
|
50
52
|
mkdir -p "$MARKERS_DIR"
|
|
51
53
|
NOW="$(date -u +%Y-%m-%dT%H:%M:%SZ)"
|
|
52
54
|
|
package/.claude/runtime/scripts/product-manager/__pycache__/confluence-publish.cpython-314.pyc
ADDED
|
Binary file
|
|
Binary file
|
|
Binary file
|