@pieerry/harness-kit 3.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/agents/product-manager.md +20 -0
- package/.claude/agents/staff-software-engineer.md +25 -0
- package/.claude/commands/product-manager/prd.md +31 -0
- package/.claude/commands/product-manager/prp.md +35 -0
- package/.claude/commands/product-manager/run.md +31 -0
- package/.claude/commands/sse/dev.md +47 -0
- package/.claude/commands/sse/plan.md +33 -0
- package/.claude/commands/sse/pr.md +43 -0
- package/.claude/commands/sse/run.md +39 -0
- package/.claude/commands/sse/test.md +38 -0
- package/.claude/hooks/status-line.sh +103 -0
- package/.claude/plugins/product-manager/README.md +120 -0
- package/.claude/plugins/product-manager/evals/prd-quality.md +88 -0
- package/.claude/plugins/product-manager/evals/prd-readiness.md +66 -0
- package/.claude/plugins/product-manager/evals/prp-context-readiness.md +51 -0
- package/.claude/plugins/product-manager/evals/prp-quality.md +88 -0
- package/.claude/plugins/product-manager/guides/examples/good-prd-example.md +121 -0
- package/.claude/plugins/product-manager/guides/examples/good-prp-example.md +128 -0
- package/.claude/plugins/product-manager/guides/pipeline.md +84 -0
- package/.claude/plugins/product-manager/guides/prd-guidelines.md +27 -0
- package/.claude/plugins/product-manager/guides/product-guidelines.md +75 -0
- package/.claude/plugins/product-manager/guides/prp-guidelines.md +64 -0
- package/.claude/plugins/product-manager/guides/templates/prd.md +89 -0
- package/.claude/plugins/product-manager/guides/templates/prp.md +98 -0
- package/.claude/plugins/product-manager/guides/writing-style.md +71 -0
- package/.claude/plugins/product-manager/hooks/post-eval-prd.sh +77 -0
- package/.claude/plugins/product-manager/hooks/post-eval-prp.sh +70 -0
- package/.claude/plugins/product-manager/hooks/post-write-prd.sh +56 -0
- package/.claude/plugins/product-manager/hooks/post-write-prp.sh +61 -0
- package/.claude/plugins/product-manager/hooks/pre-prp-check.sh +48 -0
- package/.claude/plugins/product-manager/outputs/.markers/.gitkeep +0 -0
- package/.claude/plugins/product-manager/scripts/confluence-publish.py +205 -0
- package/.claude/plugins/product-manager/scripts/link-validator.py +87 -0
- package/.claude/plugins/product-manager/scripts/sensor-runner.py +140 -0
- package/.claude/plugins/product-manager/scripts/token-phase.py +208 -0
- package/.claude/plugins/product-manager/sensors/prd-acceptance-criteria.md +39 -0
- package/.claude/plugins/product-manager/sensors/prd-structure.md +39 -0
- package/.claude/plugins/product-manager/sensors/prp-context-quality.md +42 -0
- package/.claude/plugins/product-manager/sensors/prp-links.md +24 -0
- package/.claude/plugins/product-manager/sensors/prp-structure.md +52 -0
- package/.claude/plugins/product-manager/skills/prd/SKILL.md +33 -0
- package/.claude/plugins/product-manager/skills/prp/SKILL.md +37 -0
- package/.claude/plugins/staff-software-engineer/README.md +90 -0
- package/.claude/plugins/staff-software-engineer/evals/plan-quality.md +48 -0
- package/.claude/plugins/staff-software-engineer/guides/coding-style.md +51 -0
- package/.claude/plugins/staff-software-engineer/guides/commit-style.md +44 -0
- package/.claude/plugins/staff-software-engineer/guides/conventions-override.md +79 -0
- package/.claude/plugins/staff-software-engineer/guides/pipeline.md +69 -0
- package/.claude/plugins/staff-software-engineer/hooks/post-eval-plan.sh +43 -0
- package/.claude/plugins/staff-software-engineer/hooks/post-write-plan.sh +49 -0
- package/.claude/plugins/staff-software-engineer/outputs/.markers/.gitkeep +0 -0
- package/.claude/plugins/staff-software-engineer/sensors/code-conventions.md +37 -0
- package/.claude/plugins/staff-software-engineer/sensors/plan-structure.md +37 -0
- package/.claude/plugins/staff-software-engineer/sensors/test-coverage.md +28 -0
- package/.claude/plugins/staff-software-engineer/skills/backend/SKILL.md +80 -0
- package/.claude/plugins/staff-software-engineer/skills/devops/SKILL.md +58 -0
- package/.claude/plugins/staff-software-engineer/skills/mobile/SKILL.md +52 -0
- package/.claude/plugins/staff-software-engineer/skills/web/SKILL.md +64 -0
- package/.claude/settings.local.json +61 -0
- package/CLAUDE.md +90 -0
- package/LICENSE +21 -0
- package/README.md +192 -0
- package/VERSION +1 -0
- package/bin/hk.js +141 -0
- package/context-library/README.md +38 -0
- package/context-library/business-info-template.md +39 -0
- package/context-library/decisions/README.md +3 -0
- package/context-library/example-prds/README.md +3 -0
- package/context-library/meetings/.gitkeep +0 -0
- package/context-library/metrics/.gitkeep +0 -0
- package/context-library/personal-context-template.md +31 -0
- package/context-library/research/.gitkeep +0 -0
- package/context-library/squads/README.md +32 -0
- package/context-library/strategy/README.md +3 -0
- package/package.json +43 -0
- package/setup/install.sh +154 -0
- package/setup/update.sh +17 -0
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# After Write to outputs/plan/, run sensors and write phase markers.
|
|
3
|
+
|
|
4
|
+
set -euo pipefail
|
|
5
|
+
|
|
6
|
+
FILE_PATH="${CLAUDE_TOOL_FILE_PATH:-}"
|
|
7
|
+
PLUGIN_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
|
8
|
+
|
|
9
|
+
case "$FILE_PATH" in
|
|
10
|
+
*.claude/plugins/staff-software-engineer/outputs/plan/*.md) ;;
|
|
11
|
+
*) exit 0 ;;
|
|
12
|
+
esac
|
|
13
|
+
|
|
14
|
+
if grep -q "<!-- approved:" "$FILE_PATH" 2>/dev/null; then
|
|
15
|
+
exit 0
|
|
16
|
+
fi
|
|
17
|
+
|
|
18
|
+
echo "[hook] Running plan sensors on $(basename "$FILE_PATH")" >&2
|
|
19
|
+
|
|
20
|
+
FAILURES=()
|
|
21
|
+
for sensor in "$PLUGIN_DIR"/sensors/plan-*.md; do
|
|
22
|
+
[ -f "$sensor" ] || continue
|
|
23
|
+
if ! python3 "$PLUGIN_DIR/scripts/sensor-runner.py" \
|
|
24
|
+
--sensor "$sensor" \
|
|
25
|
+
--artifact "$FILE_PATH" >&2; then
|
|
26
|
+
FAILURES+=("$(basename "$sensor")")
|
|
27
|
+
fi
|
|
28
|
+
done
|
|
29
|
+
|
|
30
|
+
if [ ${#FAILURES[@]} -gt 0 ]; then
|
|
31
|
+
echo "[hook] Plan sensor failures: ${FAILURES[*]}" >&2
|
|
32
|
+
exit 2
|
|
33
|
+
fi
|
|
34
|
+
|
|
35
|
+
echo "[hook] Plan sensors passed" >&2
|
|
36
|
+
|
|
37
|
+
FEATURE_ID="$(basename "$FILE_PATH" .md)"
|
|
38
|
+
MARKERS_DIR="$PLUGIN_DIR/outputs/.markers"
|
|
39
|
+
mkdir -p "$MARKERS_DIR"
|
|
40
|
+
NOW="$(date -u +%Y-%m-%dT%H:%M:%SZ)"
|
|
41
|
+
|
|
42
|
+
if [ ! -f "$MARKERS_DIR/${FEATURE_ID}.plan-validate.start" ]; then
|
|
43
|
+
if [ -f "$MARKERS_DIR/${FEATURE_ID}.plan-generate.start" ]; then
|
|
44
|
+
printf '{"timestamp":"%s"}\n' "$NOW" > "$MARKERS_DIR/${FEATURE_ID}.plan-generate.end"
|
|
45
|
+
printf '{"timestamp":"%s","session_id":"%s"}\n' "$NOW" "${CLAUDE_SESSION_ID:-}" > "$MARKERS_DIR/${FEATURE_ID}.plan-validate.start"
|
|
46
|
+
fi
|
|
47
|
+
fi
|
|
48
|
+
|
|
49
|
+
exit 0
|
|
File without changes
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Sensor: Code Conventions
|
|
2
|
+
|
|
3
|
+
Type: deterministic (via project-specific tooling)
|
|
4
|
+
Mode: hard gate
|
|
5
|
+
|
|
6
|
+
Run lint and format checks for the area being touched.
|
|
7
|
+
|
|
8
|
+
## Backend (Java/Kotlin)
|
|
9
|
+
|
|
10
|
+
Detect via build file:
|
|
11
|
+
- Maven: `mvn -q checkstyle:check` or `mvn -q spotless:check` if configured
|
|
12
|
+
- Gradle: `./gradlew detekt` or `./gradlew checkstyleMain`
|
|
13
|
+
|
|
14
|
+
If no linter is configured, skip and emit a warning.
|
|
15
|
+
|
|
16
|
+
## Web (Vue/JS)
|
|
17
|
+
|
|
18
|
+
- `npm run lint` if defined
|
|
19
|
+
- `npm run typecheck` or `tsc --noEmit` if TS
|
|
20
|
+
|
|
21
|
+
## Mobile
|
|
22
|
+
|
|
23
|
+
- iOS: `swiftlint`
|
|
24
|
+
- Android: `./gradlew ktlintCheck` or `./gradlew detekt`
|
|
25
|
+
|
|
26
|
+
## DevOps
|
|
27
|
+
|
|
28
|
+
- `terraform fmt -check -recursive`
|
|
29
|
+
- `yamllint` for workflows
|
|
30
|
+
|
|
31
|
+
## On failure
|
|
32
|
+
|
|
33
|
+
Block. Surface the linter output. Agent fixes and re-runs.
|
|
34
|
+
|
|
35
|
+
## On warning (no linter configured)
|
|
36
|
+
|
|
37
|
+
Note in the output, do not block. Suggest adding the linter to the repo.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Sensor: Plan Structure
|
|
2
|
+
|
|
3
|
+
Type: deterministic
|
|
4
|
+
Mode: hard gate
|
|
5
|
+
|
|
6
|
+
## Required sections
|
|
7
|
+
|
|
8
|
+
- Scope
|
|
9
|
+
- Repos and files touched
|
|
10
|
+
- Execution flow
|
|
11
|
+
- Risks
|
|
12
|
+
- Rollout
|
|
13
|
+
- Tests
|
|
14
|
+
|
|
15
|
+
## Forbidden tokens
|
|
16
|
+
|
|
17
|
+
- lorem
|
|
18
|
+
- TODO without ticket reference
|
|
19
|
+
- placeholder
|
|
20
|
+
|
|
21
|
+
## Markdown rules
|
|
22
|
+
|
|
23
|
+
- exactly 1 H1 heading
|
|
24
|
+
- no em-dash
|
|
25
|
+
- no ASCII box-drawing
|
|
26
|
+
|
|
27
|
+
## Required metadata
|
|
28
|
+
|
|
29
|
+
Header must declare:
|
|
30
|
+
- Source PRP
|
|
31
|
+
- Squad
|
|
32
|
+
- Tech lead
|
|
33
|
+
- Date
|
|
34
|
+
|
|
35
|
+
## On failure
|
|
36
|
+
|
|
37
|
+
Block publish. Return missing sections and rule violations. Agent regenerates failed parts only.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Sensor: Test Coverage
|
|
2
|
+
|
|
3
|
+
Type: heuristic
|
|
4
|
+
Mode: hard gate
|
|
5
|
+
|
|
6
|
+
Every feature or bugfix must include tests for the changed code.
|
|
7
|
+
|
|
8
|
+
## Check
|
|
9
|
+
|
|
10
|
+
For each changed source file in the dev commit set, look for:
|
|
11
|
+
- a corresponding test file (e.g., `Foo.java` -> `FooTest.java`, `bar.ts` -> `bar.test.ts`)
|
|
12
|
+
- OR a test file modified in the same commit that exercises the change
|
|
13
|
+
|
|
14
|
+
Patterns recognized:
|
|
15
|
+
- `**/test/**`, `**/tests/**`, `**/__tests__/**`, `**/spec/**`, `**/specs/**`
|
|
16
|
+
- File suffix: `Test`, `Tests`, `.test.`, `.spec.`, `_test.`, `_spec.`
|
|
17
|
+
|
|
18
|
+
## Exclusions
|
|
19
|
+
|
|
20
|
+
The following do not need a test in the same commit:
|
|
21
|
+
- README and docs
|
|
22
|
+
- migration files (V*.sql)
|
|
23
|
+
- pure config (yaml, json)
|
|
24
|
+
- generated code
|
|
25
|
+
|
|
26
|
+
## On failure
|
|
27
|
+
|
|
28
|
+
Block. List the source files without tests. Agent adds the missing tests.
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: backend
|
|
3
|
+
description: Backend engineering conventions for team. Java/Kotlin servers. Project conventions in .claude/conventions/backend.md override these defaults.
|
|
4
|
+
user_invocable: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Backend conventions, team default.
|
|
8
|
+
|
|
9
|
+
Project override: if `{repo}/.claude/conventions/backend.md` exists, it overrides any rule here. See guides/conventions-override.md.
|
|
10
|
+
|
|
11
|
+
## Defaults
|
|
12
|
+
|
|
13
|
+
These are illustrative defaults for a JVM-leaning backend. Override per repo via `.claude/conventions/backend.md`.
|
|
14
|
+
|
|
15
|
+
Stack:
|
|
16
|
+
- Java or Kotlin (check pom.xml or build.gradle.kts)
|
|
17
|
+
- Spring Boot (current major) or Ktor for Kotlin services
|
|
18
|
+
- Build: Maven (mvn) or Gradle (gradlew)
|
|
19
|
+
- Deploy: JAR with embedded server
|
|
20
|
+
- Package prefix: match repo convention
|
|
21
|
+
|
|
22
|
+
Persistence:
|
|
23
|
+
- Custom JDBC AbstractRepository + SQL templates. Avoid JPA except where the repo already uses it.
|
|
24
|
+
- Migrations via Flyway, naming `V{YYYYMMDD}__{description}.sql`.
|
|
25
|
+
|
|
26
|
+
Mapping:
|
|
27
|
+
- Orika 1.5.x. Avoid MapStruct unless repo already uses it.
|
|
28
|
+
|
|
29
|
+
Lombok:
|
|
30
|
+
- `@Data`, `@Builder`, `@RequiredArgsConstructor` OK.
|
|
31
|
+
- Avoid `@SneakyThrows`. Be explicit about checked exceptions.
|
|
32
|
+
|
|
33
|
+
Null handling:
|
|
34
|
+
- `Objects.equals()` for equality.
|
|
35
|
+
- `Boolean.TRUE.equals(...)` for nullable booleans.
|
|
36
|
+
- Guards and early returns. Avoid deep nesting.
|
|
37
|
+
|
|
38
|
+
Streams:
|
|
39
|
+
- Fluent: `.stream().filter(...).findAny().orElseThrow(...)`.
|
|
40
|
+
- Avoid stream-of-stream when a guard would do.
|
|
41
|
+
|
|
42
|
+
Transactions:
|
|
43
|
+
- `@Transactional` on service methods, not repositories.
|
|
44
|
+
|
|
45
|
+
Tests:
|
|
46
|
+
- JUnit 4 + Mockito legacy; JUnit 5 + Mockito for newer.
|
|
47
|
+
- `@RunWith(MockitoJUnitRunner.class)` (JUnit 4) or `@ExtendWith(MockitoExtension.class)` (JUnit 5).
|
|
48
|
+
- Naming: `givenX_WhenY_ShouldZ` or `shouldDoSomethingWhenCondition`.
|
|
49
|
+
- Cover positive, negative, and edge cases.
|
|
50
|
+
- `verify()` with `never()`, `times()`, arg matchers.
|
|
51
|
+
|
|
52
|
+
## Before writing code
|
|
53
|
+
|
|
54
|
+
Read at least 3 similar files in the target repo to confirm:
|
|
55
|
+
- framework version
|
|
56
|
+
- build tool
|
|
57
|
+
- package layout
|
|
58
|
+
- test framework
|
|
59
|
+
- helpers in use (Lombok, Orika, custom)
|
|
60
|
+
|
|
61
|
+
Never assume. Stack varies per repo.
|
|
62
|
+
|
|
63
|
+
## Forbidden in PR
|
|
64
|
+
|
|
65
|
+
- new JPA usage in repos that use AbstractRepository
|
|
66
|
+
- MapStruct in repos using Orika
|
|
67
|
+
- Composition API in Vue 2 repos (web side)
|
|
68
|
+
- code without tests
|
|
69
|
+
- `@SuppressWarnings` to silence real issues
|
|
70
|
+
- placeholder TODO comments without ticket reference
|
|
71
|
+
|
|
72
|
+
## Mark gaps
|
|
73
|
+
|
|
74
|
+
If you cannot find a pattern in the repo, do not invent it:
|
|
75
|
+
|
|
76
|
+
```java
|
|
77
|
+
// TBD - verify with tech lead: {what you searched, what is missing}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Read actual code first. A TODO with context beats fabricated code.
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: devops
|
|
3
|
+
description: DevOps engineering conventions for team. CI/CD, infra-as-code, observability. Project conventions in .claude/conventions/devops.md override these defaults.
|
|
4
|
+
user_invocable: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
DevOps conventions, team default.
|
|
8
|
+
|
|
9
|
+
Project override: if `{repo}/.claude/conventions/devops.md` exists, it overrides any rule here. See guides/conventions-override.md.
|
|
10
|
+
|
|
11
|
+
## Defaults
|
|
12
|
+
|
|
13
|
+
CI/CD:
|
|
14
|
+
- GitHub Actions for most repos. Workflows in `.github/workflows/`.
|
|
15
|
+
- Reusable workflows when steps repeat across repos.
|
|
16
|
+
- Secrets via GitHub Secrets, never inline.
|
|
17
|
+
- Pin actions to commit SHA, not branch.
|
|
18
|
+
|
|
19
|
+
Containers:
|
|
20
|
+
- Multi-stage Dockerfile. Slim base images (alpine, distroless).
|
|
21
|
+
- Non-root user in production stage.
|
|
22
|
+
- `.dockerignore` mirrors `.gitignore` essentials plus build artifacts.
|
|
23
|
+
|
|
24
|
+
Infra-as-code:
|
|
25
|
+
- Terraform for infra. State in remote backend (S3, etc).
|
|
26
|
+
- Modules in `terraform/modules/`. Stacks in `terraform/stacks/`.
|
|
27
|
+
- Variables via `terraform.tfvars`, never hardcoded.
|
|
28
|
+
|
|
29
|
+
Observability:
|
|
30
|
+
- Grafana dashboards JSON in repo when applicable.
|
|
31
|
+
- Alerts as code (Prometheus rules, Datadog monitors).
|
|
32
|
+
- Log structure: JSON, with `trace_id`, `service`, `level`, `msg`.
|
|
33
|
+
|
|
34
|
+
Secrets:
|
|
35
|
+
- Never commit secrets. Use a secret manager.
|
|
36
|
+
- Pre-commit hook to scan for accidental secrets.
|
|
37
|
+
|
|
38
|
+
## Before writing code
|
|
39
|
+
|
|
40
|
+
Read at least 3 similar workflows or terraform modules in the repo. Confirm:
|
|
41
|
+
- runner type (ubuntu-latest, self-hosted)
|
|
42
|
+
- secret naming convention
|
|
43
|
+
- environments (dev, staging, prod)
|
|
44
|
+
- approval gates for prod
|
|
45
|
+
|
|
46
|
+
## Forbidden in PR
|
|
47
|
+
|
|
48
|
+
- inline secrets
|
|
49
|
+
- actions pinned to `@main` or `@latest`
|
|
50
|
+
- terraform without state backend
|
|
51
|
+
- Dockerfile running as root in prod
|
|
52
|
+
- alerts without runbook links
|
|
53
|
+
|
|
54
|
+
## Mark gaps
|
|
55
|
+
|
|
56
|
+
```yaml
|
|
57
|
+
# TBD - verify with devops lead: {what is missing}
|
|
58
|
+
```
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: mobile
|
|
3
|
+
description: Mobile engineering conventions for team. iOS and Android. Project conventions in .claude/conventions/mobile.md override these defaults.
|
|
4
|
+
user_invocable: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Mobile conventions, team default.
|
|
8
|
+
|
|
9
|
+
Project override: if `{repo}/.claude/conventions/mobile.md` exists, it overrides any rule here. See guides/conventions-override.md.
|
|
10
|
+
|
|
11
|
+
## Defaults
|
|
12
|
+
|
|
13
|
+
team's mobile work is limited; repos vary widely. Always read the repo before writing.
|
|
14
|
+
|
|
15
|
+
iOS:
|
|
16
|
+
- Swift 5.x. Avoid Objective-C unless repo already uses it.
|
|
17
|
+
- Xcode project conventions per repo.
|
|
18
|
+
- Tests: XCTest. Naming `test_givenX_whenY_thenZ`.
|
|
19
|
+
|
|
20
|
+
Android:
|
|
21
|
+
- Kotlin. Avoid Java unless repo already uses it.
|
|
22
|
+
- Gradle build. Check `build.gradle.kts` vs `build.gradle`.
|
|
23
|
+
- Tests: JUnit 4 or JUnit 5. Espresso for UI.
|
|
24
|
+
|
|
25
|
+
Shared:
|
|
26
|
+
- Match existing architecture (MVVM, MVI, Clean, etc).
|
|
27
|
+
- Match existing DI (Hilt, Koin, Dagger).
|
|
28
|
+
|
|
29
|
+
## Before writing code
|
|
30
|
+
|
|
31
|
+
Read at least 3 similar files in the repo to confirm:
|
|
32
|
+
- language version (Swift/Kotlin)
|
|
33
|
+
- architecture pattern
|
|
34
|
+
- DI framework
|
|
35
|
+
- test framework
|
|
36
|
+
- networking (Retrofit, Alamofire, URLSession)
|
|
37
|
+
|
|
38
|
+
Mobile stacks vary more than backend or web. Verify everything.
|
|
39
|
+
|
|
40
|
+
## Forbidden in PR
|
|
41
|
+
|
|
42
|
+
- mixing architecture patterns (e.g., MVP + MVVM in same module)
|
|
43
|
+
- hardcoded strings (use string resources)
|
|
44
|
+
- direct file system access without permission checks
|
|
45
|
+
- code without tests
|
|
46
|
+
- TODOs without ticket references
|
|
47
|
+
|
|
48
|
+
## Mark gaps
|
|
49
|
+
|
|
50
|
+
```kotlin
|
|
51
|
+
// TBD - verify with mobile tech lead: {what is missing}
|
|
52
|
+
```
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: web
|
|
3
|
+
description: Web frontend engineering conventions for team. Vue.js stack. Project conventions in .claude/conventions/web.md override these defaults.
|
|
4
|
+
user_invocable: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Web frontend conventions, team default.
|
|
8
|
+
|
|
9
|
+
Project override: if `{repo}/.claude/conventions/web.md` exists, it overrides any rule here. See guides/conventions-override.md.
|
|
10
|
+
|
|
11
|
+
## Defaults (team frontend stack)
|
|
12
|
+
|
|
13
|
+
Stack:
|
|
14
|
+
- Vue 2.6 Options API. Avoid Composition API unless repo already uses Vue 3.
|
|
15
|
+
- Vuex with namespaced modules: `createNamespacedHelpers`.
|
|
16
|
+
- TMS Design System: `IpPageBase`, `IpTabs`, `IpFormField`, `IpSelect`, `IpDialog`, `IpSnackbar`.
|
|
17
|
+
- PrimeVue 2.10 alongside TMS in some repos.
|
|
18
|
+
- `@team-js` packages: `secure-components`, `secure-providers`, `secure-ui`.
|
|
19
|
+
- Feature folders: `/features/private`, `/features/public`.
|
|
20
|
+
|
|
21
|
+
Component order:
|
|
22
|
+
- data, computed, watch, created/mounted, methods, components.
|
|
23
|
+
|
|
24
|
+
Styling:
|
|
25
|
+
- Scoped SCSS.
|
|
26
|
+
- BEM-like naming.
|
|
27
|
+
- CSS variables for theming.
|
|
28
|
+
|
|
29
|
+
UX feedback:
|
|
30
|
+
- Snackbar via `this.$ipSnackbar.add()`.
|
|
31
|
+
- Async: `.catch()` before `.finally()`. Toast on failure.
|
|
32
|
+
|
|
33
|
+
State:
|
|
34
|
+
- Vuex actions for side effects, mutations for state changes.
|
|
35
|
+
- Getters for derived state.
|
|
36
|
+
|
|
37
|
+
Tests:
|
|
38
|
+
- Vitest or Jest depending on repo.
|
|
39
|
+
- Vue Test Utils for component tests.
|
|
40
|
+
- Cover happy path, error path, edge case.
|
|
41
|
+
|
|
42
|
+
## Before writing code
|
|
43
|
+
|
|
44
|
+
Read at least 3 similar components in the repo to confirm:
|
|
45
|
+
- Vue version (2 vs 3)
|
|
46
|
+
- API style (Options vs Composition)
|
|
47
|
+
- Design system in use (TMS, PrimeVue, custom)
|
|
48
|
+
- State management (Vuex, Pinia, none)
|
|
49
|
+
|
|
50
|
+
Never assume.
|
|
51
|
+
|
|
52
|
+
## Forbidden in PR
|
|
53
|
+
|
|
54
|
+
- Composition API in Vue 2 repos
|
|
55
|
+
- Inline styles when SCSS exists
|
|
56
|
+
- Direct mutation of Vuex state outside mutations
|
|
57
|
+
- Components without tests
|
|
58
|
+
- console.log in production code
|
|
59
|
+
|
|
60
|
+
## Mark gaps
|
|
61
|
+
|
|
62
|
+
```vue
|
|
63
|
+
<!-- TBD - verify with tech lead: {what you searched, what is missing} -->
|
|
64
|
+
```
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
{
|
|
2
|
+
"permissions": {
|
|
3
|
+
"allow": [
|
|
4
|
+
"WebSearch",
|
|
5
|
+
"Bash(xargs:*)",
|
|
6
|
+
"Bash(tree:*)",
|
|
7
|
+
"Bash(git init:*)",
|
|
8
|
+
"Bash(git add:*)",
|
|
9
|
+
"Bash(git commit:*)",
|
|
10
|
+
"Bash(git push:*)",
|
|
11
|
+
"WebFetch(domain:raw.githubusercontent.com)",
|
|
12
|
+
"WebFetch(domain:github.com)",
|
|
13
|
+
"Bash(git mv:*)",
|
|
14
|
+
"Bash(chmod:*)",
|
|
15
|
+
"Bash(git rm:*)",
|
|
16
|
+
"Bash(node bin/cli.js:*)",
|
|
17
|
+
"Bash(npm view:*)",
|
|
18
|
+
"WebFetch(domain:openspec.dev)",
|
|
19
|
+
"Bash(gh release:*)",
|
|
20
|
+
"Bash(gh api:*)",
|
|
21
|
+
"Bash(gh run:*)",
|
|
22
|
+
"Bash(git pull:*)",
|
|
23
|
+
"Bash(git checkout:*)",
|
|
24
|
+
"Bash(npm version:*)",
|
|
25
|
+
"Bash(head:*)",
|
|
26
|
+
"Bash(ls profiles/*.md)",
|
|
27
|
+
"Bash(ls profiles/knowledge/*.md)",
|
|
28
|
+
"Read(//Users/pierryborges/Development/**)",
|
|
29
|
+
"Bash(rm -f context-vs-onboarding.png FLOW-DETAILS.md CONTRIBUTING.md install.sh README.md CLAUDE.md .cursorrules .DS_Store)",
|
|
30
|
+
"Bash(rm -rf resources/ .AGENT/)",
|
|
31
|
+
"Bash(mv .claude-plugins/basic/skills/* .claude/skills/)",
|
|
32
|
+
"Bash(rm -rf .claude-plugins .claude-plugins-tmp)",
|
|
33
|
+
"Bash(git -C /Users/pierryborges/Development/eng-delivery-playbook log --oneline -20)",
|
|
34
|
+
"Bash(git -C /Users/pierryborges/Development/intelipost/pm-os-intelipost-team log --oneline -20)",
|
|
35
|
+
"Bash(git -C /Users/pierryborges/Development/eng-delivery-playbook status --short)",
|
|
36
|
+
"Bash(git -C /Users/pierryborges/Development/eng-delivery-playbook ls-tree HEAD --name-only)",
|
|
37
|
+
"Bash(git -C /Users/pierryborges/Development/eng-delivery-playbook ls-tree HEAD -d --name-only)",
|
|
38
|
+
"Bash(rm -rf .github bin package.json profiles logo.png .gitignore advanced context-library setup sub-agents templates)",
|
|
39
|
+
"Bash(rm -rf .claude/hooks .claude/skills)",
|
|
40
|
+
"Bash(git -C /Users/pierryborges/Development/eng-delivery-playbook add -A)",
|
|
41
|
+
"Bash(find *)",
|
|
42
|
+
"Bash(bash *)",
|
|
43
|
+
"Bash(git -C /Users/pierryborges/Development/eng-delivery-playbook diff --stat --cached)",
|
|
44
|
+
"Bash(git -C /Users/pierryborges/Development/eng-delivery-playbook show d8e0e3e:bin/cli.js)",
|
|
45
|
+
"Bash(node bin/edp.js help)",
|
|
46
|
+
"Bash(node bin/edp.js version)",
|
|
47
|
+
"Bash(node bin/edp.js status .)",
|
|
48
|
+
"Bash(grep -rn \"R\\\\$\" .claude/)",
|
|
49
|
+
"Bash(grep -rn \"R\\\\\\\\\\\\$\" .claude/)",
|
|
50
|
+
"Bash(python3 *)",
|
|
51
|
+
"Bash(git -C /Users/pierryborges/Development/eng-delivery-playbook remote -v)",
|
|
52
|
+
"Bash(git -C /Users/pierryborges/Development/eng-delivery-playbook branch -vv)",
|
|
53
|
+
"Bash(git -C /Users/pierryborges/Development/eng-delivery-playbook commit -m ' *)",
|
|
54
|
+
"Bash(git -C /Users/pierryborges/Development/eng-delivery-playbook log --oneline -3)",
|
|
55
|
+
"Bash(git -C /Users/pierryborges/Development/eng-delivery-playbook status -sb)",
|
|
56
|
+
"Bash(git -C /Users/pierryborges/Development/eng-delivery-playbook push origin main)",
|
|
57
|
+
"Bash(git remote *)",
|
|
58
|
+
"Bash(git fetch *)"
|
|
59
|
+
]
|
|
60
|
+
}
|
|
61
|
+
}
|
package/CLAUDE.md
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# CLAUDE - Master Context File
|
|
2
|
+
|
|
3
|
+
Read by Claude Code on every session. Defines how to work in this harness-kit workspace.
|
|
4
|
+
|
|
5
|
+
## Response Style
|
|
6
|
+
|
|
7
|
+
- **Language:** match the user. Default English. Domain terms stay native.
|
|
8
|
+
- **Code, commits, PRs:** Conventional Commits, repo language.
|
|
9
|
+
- **Error quotes, file paths, URLs:** verbatim.
|
|
10
|
+
- **Destructive/irreversible ops:** full clarity warning.
|
|
11
|
+
- No emojis in output unless user explicitly asks.
|
|
12
|
+
|
|
13
|
+
## Role
|
|
14
|
+
|
|
15
|
+
AI copilot for product + engineering delivery. Thinking partner and execution assistant. Help PMs, EMs, devs to:
|
|
16
|
+
|
|
17
|
+
- make better strategic decisions
|
|
18
|
+
- write crisp, alignment-focused docs
|
|
19
|
+
- ship features through one consistent pipeline
|
|
20
|
+
- avoid drift in conventions and quality gates
|
|
21
|
+
|
|
22
|
+
## Squads / Teams
|
|
23
|
+
|
|
24
|
+
Configurable per consumer. Fill `context-library/business-info.md` and `context-library/squads/{slug}/` with your own structure. Ask which squad the work belongs to when not clear.
|
|
25
|
+
|
|
26
|
+
## Plugins
|
|
27
|
+
|
|
28
|
+
This workspace ships two Claude Code plugins under `.claude/plugins/`. Both have their own README with full detail.
|
|
29
|
+
|
|
30
|
+
### product-manager
|
|
31
|
+
|
|
32
|
+
PRD and PRP generation. Slash commands:
|
|
33
|
+
- `/product-manager:prd` draft a PRD (business-facing)
|
|
34
|
+
- `/product-manager:prp` draft a PRP (engineering-ready spec)
|
|
35
|
+
- `/product-manager:run` full PM pipeline
|
|
36
|
+
|
|
37
|
+
Sub-agent `product-manager` is also Task-tool-invokable for delegation.
|
|
38
|
+
|
|
39
|
+
### staff-software-engineer
|
|
40
|
+
|
|
41
|
+
Engineering pipeline. Slash commands:
|
|
42
|
+
- `/sse:plan` technical plan from an approved PRP
|
|
43
|
+
- `/sse:dev` implement the plan, run convention gates
|
|
44
|
+
- `/sse:test` run repo tests
|
|
45
|
+
- `/sse:pr` open the draft PR
|
|
46
|
+
- `/sse:run` full SSE pipeline
|
|
47
|
+
|
|
48
|
+
Sub-agent `staff-software-engineer` is also Task-tool-invokable.
|
|
49
|
+
|
|
50
|
+
Full pipeline order: `prd → prp → plan → dev → test → pr`. Each stage gets an approval marker. The status bar tracks the current one.
|
|
51
|
+
|
|
52
|
+
## Project conventions override
|
|
53
|
+
|
|
54
|
+
Each target repo can override SSE plugin defaults with files in `.claude/conventions/`:
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
{repo}/.claude/conventions/
|
|
58
|
+
├── backend.md
|
|
59
|
+
├── web.md
|
|
60
|
+
├── mobile.md
|
|
61
|
+
└── devops.md
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
When a file exists, plugin reads it on top of defaults. Project wins. Reference: `.claude/plugins/staff-software-engineer/guides/conventions-override.md`.
|
|
65
|
+
|
|
66
|
+
## Token accounting and status bar
|
|
67
|
+
|
|
68
|
+
After approval, hooks compute tokens used per phase from the Claude transcript and append to `outputs/tokens/{feature_id}.json` (per plugin). One JSON collects phases across the full lifecycle.
|
|
69
|
+
|
|
70
|
+
The status bar follows the active feature through the 6-stage pipeline. See `.claude/hooks/status-line.sh`.
|
|
71
|
+
|
|
72
|
+
## Core Principles
|
|
73
|
+
|
|
74
|
+
### Context engineering
|
|
75
|
+
|
|
76
|
+
Reference the workspace before generating:
|
|
77
|
+
- `context-library/business-info.md` for company context
|
|
78
|
+
- `context-library/squads/{squad}/` for squad-specific context
|
|
79
|
+
- `context-library/strategy/` for frameworks, OKRs, roadmaps
|
|
80
|
+
- `context-library/example-prds/` for reference artifacts
|
|
81
|
+
- `context-library/decisions/`, `meetings/`, `metrics/`, `research/` for prior work
|
|
82
|
+
|
|
83
|
+
### Output philosophy
|
|
84
|
+
|
|
85
|
+
Short, specific, actionable.
|
|
86
|
+
|
|
87
|
+
- shorter beats longer
|
|
88
|
+
- specific over generic (real names, numbers, quotes)
|
|
89
|
+
- mark gaps with `NOT FOUND - NEEDS REVIEW: {detail}` rather than inventing
|
|
90
|
+
- mermaid not ASCII diagrams
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Space Metrics AI
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|