@ikon85/agent-workflow-kit 0.10.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/.agents/skills/ask-matt/SKILL.md +139 -0
- package/.agents/skills/ask-matt/THIRD-PARTY-NOTICES.md +29 -0
- package/.agents/skills/audit-skills/SKILL.md +145 -0
- package/.agents/skills/board-to-waves/SKILL.md +135 -0
- package/.agents/skills/code-review/SKILL.md +64 -0
- package/.agents/skills/codebase-design/DEEPENING.md +37 -0
- package/.agents/skills/codebase-design/DESIGN-IT-TWICE.md +44 -0
- package/.agents/skills/codebase-design/SKILL.md +114 -0
- package/.agents/skills/codebase-design/THIRD-PARTY-NOTICES.md +29 -0
- package/.agents/skills/codex-adapter-sync/SKILL.md +151 -0
- package/.agents/skills/decision-gate/SKILL.md +67 -0
- package/.agents/skills/diagnose/SKILL.md +136 -0
- package/.agents/skills/diagnose/THIRD-PARTY-NOTICES.md +29 -0
- package/.agents/skills/diagnose/scripts/hitl-loop.template.sh +41 -0
- package/.agents/skills/domain-modeling/ADR-FORMAT.md +47 -0
- package/.agents/skills/domain-modeling/CONTEXT-FORMAT.md +60 -0
- package/.agents/skills/domain-modeling/SKILL.md +76 -0
- package/.agents/skills/domain-modeling/THIRD-PARTY-NOTICES.md +29 -0
- package/.agents/skills/git-worktree-recover/SKILL.md +176 -0
- package/.agents/skills/grill-me/SKILL.md +54 -0
- package/.agents/skills/grill-me/THIRD-PARTY-NOTICES.md +29 -0
- package/.agents/skills/grill-with-docs/ADR-FORMAT.md +47 -0
- package/.agents/skills/grill-with-docs/CONTEXT-FORMAT.md +60 -0
- package/.agents/skills/grill-with-docs/SKILL.md +137 -0
- package/.agents/skills/grill-with-docs/THIRD-PARTY-NOTICES.md +29 -0
- package/.agents/skills/implement/SKILL.md +15 -0
- package/.agents/skills/implement/THIRD-PARTY-NOTICES.md +29 -0
- package/.agents/skills/improve-codebase-architecture/ADR-FORMAT.md +47 -0
- package/.agents/skills/improve-codebase-architecture/CONTEXT-FORMAT.md +60 -0
- package/.agents/skills/improve-codebase-architecture/DEEPENING.md +37 -0
- package/.agents/skills/improve-codebase-architecture/HTML-REPORT.md +123 -0
- package/.agents/skills/improve-codebase-architecture/INTERFACE-DESIGN.md +46 -0
- package/.agents/skills/improve-codebase-architecture/LANGUAGE.md +53 -0
- package/.agents/skills/improve-codebase-architecture/SKILL.md +88 -0
- package/.agents/skills/improve-codebase-architecture/THIRD-PARTY-NOTICES.md +29 -0
- package/.agents/skills/kit-release/SKILL.md +56 -0
- package/.agents/skills/local-ci/SKILL.md +94 -0
- package/.agents/skills/orchestrate-wave/SKILL.md +261 -0
- package/.agents/skills/orchestrate-wave/references/builder-contract.md +67 -0
- package/.agents/skills/prototype/LOGIC.md +79 -0
- package/.agents/skills/prototype/SKILL.md +30 -0
- package/.agents/skills/prototype/THIRD-PARTY-NOTICES.md +29 -0
- package/.agents/skills/prototype/UI.md +112 -0
- package/.agents/skills/research/SKILL.md +12 -0
- package/.agents/skills/research/THIRD-PARTY-NOTICES.md +29 -0
- package/.agents/skills/resolving-merge-conflicts/SKILL.md +14 -0
- package/.agents/skills/resolving-merge-conflicts/THIRD-PARTY-NOTICES.md +29 -0
- package/.agents/skills/retro/SKILL.md +209 -0
- package/.agents/skills/scale-check/SKILL.md +141 -0
- package/.agents/skills/security-audit/SKILL.md +67 -0
- package/.agents/skills/setup-workflow/SKILL.md +187 -0
- package/.agents/skills/setup-workflow/THIRD-PARTY-NOTICES.md +29 -0
- package/.agents/skills/setup-workflow/board-sync.md +111 -0
- package/.agents/skills/setup-workflow/code-review.md +26 -0
- package/.agents/skills/setup-workflow/domain.md +51 -0
- package/.agents/skills/setup-workflow/issue-tracker-github.md +35 -0
- package/.agents/skills/setup-workflow/issue-tracker-gitlab.md +34 -0
- package/.agents/skills/setup-workflow/issue-tracker-local.md +30 -0
- package/.agents/skills/setup-workflow/orchestrate-wave-seed.md +44 -0
- package/.agents/skills/setup-workflow/spec-completeness-seed.md +44 -0
- package/.agents/skills/setup-workflow/spec-self-critique-seed.md +43 -0
- package/.agents/skills/setup-workflow/triage-labels.md +18 -0
- package/.agents/skills/setup-workflow/workflow-overview.md +33 -0
- package/.agents/skills/spec-self-critique/SKILL.md +152 -0
- package/.agents/skills/spec-self-critique/scenarios.md +82 -0
- package/.agents/skills/tdd/SKILL.md +120 -0
- package/.agents/skills/tdd/THIRD-PARTY-NOTICES.md +29 -0
- package/.agents/skills/tdd/deep-modules.md +33 -0
- package/.agents/skills/tdd/interface-design.md +31 -0
- package/.agents/skills/tdd/mocking.md +59 -0
- package/.agents/skills/tdd/refactoring.md +10 -0
- package/.agents/skills/tdd/tests.md +61 -0
- package/.agents/skills/to-issues/SKILL.md +325 -0
- package/.agents/skills/to-issues/THIRD-PARTY-NOTICES.md +29 -0
- package/.agents/skills/to-prd/PROGRAM-PRD-FORMAT.md +162 -0
- package/.agents/skills/to-prd/SKILL.md +180 -0
- package/.agents/skills/to-prd/THIRD-PARTY-NOTICES.md +29 -0
- package/.agents/skills/to-waves/SKILL.md +260 -0
- package/.agents/skills/to-waves/SLICE-METADATA-FORMAT.md +74 -0
- package/.agents/skills/triage/AGENT-BRIEF.md +168 -0
- package/.agents/skills/triage/OUT-OF-SCOPE.md +101 -0
- package/.agents/skills/triage/SKILL.md +122 -0
- package/.agents/skills/triage/THIRD-PARTY-NOTICES.md +29 -0
- package/.agents/skills/verify-spike/SKILL.md +39 -0
- package/.agents/skills/wayfinder/SKILL.md +127 -0
- package/.agents/skills/wayfinder/THIRD-PARTY-NOTICES.md +29 -0
- package/.agents/skills/wrapup/SKILL.md +71 -0
- package/.agents/skills/wrapup/SOURCES.txt +6 -0
- package/.agents/skills/zoom-out/SKILL.md +7 -0
- package/.agents/skills/zoom-out/THIRD-PARTY-NOTICES.md +29 -0
- package/.claude/hooks/_hook_utils.py +184 -0
- package/.claude/hooks/drift-guard.py +176 -0
- package/.claude/hooks/skill-drift-hint.py +122 -0
- package/.claude/hooks/sync-board-status.py +191 -0
- package/.claude/skills/ask-matt/SKILL.md +139 -0
- package/.claude/skills/ask-matt/THIRD-PARTY-NOTICES.md +29 -0
- package/.claude/skills/audit-skills/SKILL.md +145 -0
- package/.claude/skills/board-to-waves/SKILL.md +148 -0
- package/.claude/skills/code-review/SKILL.md +64 -0
- package/.claude/skills/codebase-design/DEEPENING.md +37 -0
- package/.claude/skills/codebase-design/DESIGN-IT-TWICE.md +44 -0
- package/.claude/skills/codebase-design/SKILL.md +114 -0
- package/.claude/skills/codebase-design/THIRD-PARTY-NOTICES.md +29 -0
- package/.claude/skills/codex-build/SKILL.md +126 -0
- package/.claude/skills/codex-build/THIRD-PARTY-NOTICES.md +35 -0
- package/.claude/skills/codex-review/SKILL.md +145 -0
- package/.claude/skills/codex-review/THIRD-PARTY-NOTICES.md +31 -0
- package/.claude/skills/decision-gate/SKILL.md +67 -0
- package/.claude/skills/diagnose/SKILL.md +136 -0
- package/.claude/skills/diagnose/THIRD-PARTY-NOTICES.md +29 -0
- package/.claude/skills/diagnose/scripts/hitl-loop.template.sh +41 -0
- package/.claude/skills/domain-modeling/ADR-FORMAT.md +47 -0
- package/.claude/skills/domain-modeling/CONTEXT-FORMAT.md +60 -0
- package/.claude/skills/domain-modeling/SKILL.md +76 -0
- package/.claude/skills/domain-modeling/THIRD-PARTY-NOTICES.md +29 -0
- package/.claude/skills/git-guardrails-claude-code/SKILL.md +96 -0
- package/.claude/skills/git-guardrails-claude-code/THIRD-PARTY-NOTICES.md +29 -0
- package/.claude/skills/git-guardrails-claude-code/scripts/block-dangerous-git.sh +28 -0
- package/.claude/skills/git-worktree-recover/SKILL.md +182 -0
- package/.claude/skills/grill-me/SKILL.md +54 -0
- package/.claude/skills/grill-me/THIRD-PARTY-NOTICES.md +29 -0
- package/.claude/skills/grill-me-codex/SKILL.md +158 -0
- package/.claude/skills/grill-me-codex/THIRD-PARTY-NOTICES.md +32 -0
- package/.claude/skills/grill-with-docs/ADR-FORMAT.md +47 -0
- package/.claude/skills/grill-with-docs/CONTEXT-FORMAT.md +60 -0
- package/.claude/skills/grill-with-docs/SKILL.md +137 -0
- package/.claude/skills/grill-with-docs/THIRD-PARTY-NOTICES.md +29 -0
- package/.claude/skills/grill-with-docs-codex/ADR-FORMAT.md +47 -0
- package/.claude/skills/grill-with-docs-codex/CONTEXT-FORMAT.md +60 -0
- package/.claude/skills/grill-with-docs-codex/SKILL.md +233 -0
- package/.claude/skills/grill-with-docs-codex/THIRD-PARTY-NOTICES.md +33 -0
- package/.claude/skills/implement/SKILL.md +15 -0
- package/.claude/skills/implement/THIRD-PARTY-NOTICES.md +29 -0
- package/.claude/skills/improve-codebase-architecture/ADR-FORMAT.md +47 -0
- package/.claude/skills/improve-codebase-architecture/CONTEXT-FORMAT.md +60 -0
- package/.claude/skills/improve-codebase-architecture/DEEPENING.md +37 -0
- package/.claude/skills/improve-codebase-architecture/HTML-REPORT.md +123 -0
- package/.claude/skills/improve-codebase-architecture/INTERFACE-DESIGN.md +46 -0
- package/.claude/skills/improve-codebase-architecture/LANGUAGE.md +53 -0
- package/.claude/skills/improve-codebase-architecture/SKILL.md +88 -0
- package/.claude/skills/improve-codebase-architecture/THIRD-PARTY-NOTICES.md +29 -0
- package/.claude/skills/kit-release/SKILL.md +56 -0
- package/.claude/skills/local-ci/SKILL.md +94 -0
- package/.claude/skills/orchestrate-wave/SKILL.md +269 -0
- package/.claude/skills/orchestrate-wave/references/builder-contract.md +67 -0
- package/.claude/skills/prototype/LOGIC.md +79 -0
- package/.claude/skills/prototype/SKILL.md +30 -0
- package/.claude/skills/prototype/THIRD-PARTY-NOTICES.md +29 -0
- package/.claude/skills/prototype/UI.md +112 -0
- package/.claude/skills/research/SKILL.md +12 -0
- package/.claude/skills/research/THIRD-PARTY-NOTICES.md +29 -0
- package/.claude/skills/resolving-merge-conflicts/SKILL.md +14 -0
- package/.claude/skills/resolving-merge-conflicts/THIRD-PARTY-NOTICES.md +29 -0
- package/.claude/skills/retro/SKILL.md +209 -0
- package/.claude/skills/scale-check/SKILL.md +141 -0
- package/.claude/skills/security-audit/SKILL.md +67 -0
- package/.claude/skills/setup-pre-commit/SKILL.md +104 -0
- package/.claude/skills/setup-pre-commit/scripts/pre-commit.template.sh +35 -0
- package/.claude/skills/setup-workflow/SKILL.md +187 -0
- package/.claude/skills/setup-workflow/THIRD-PARTY-NOTICES.md +29 -0
- package/.claude/skills/setup-workflow/board-sync.md +111 -0
- package/.claude/skills/setup-workflow/code-review.md +26 -0
- package/.claude/skills/setup-workflow/domain.md +51 -0
- package/.claude/skills/setup-workflow/issue-tracker-github.md +35 -0
- package/.claude/skills/setup-workflow/issue-tracker-gitlab.md +34 -0
- package/.claude/skills/setup-workflow/issue-tracker-local.md +30 -0
- package/.claude/skills/setup-workflow/orchestrate-wave-seed.md +44 -0
- package/.claude/skills/setup-workflow/spec-completeness-seed.md +44 -0
- package/.claude/skills/setup-workflow/spec-self-critique-seed.md +43 -0
- package/.claude/skills/setup-workflow/triage-labels.md +18 -0
- package/.claude/skills/setup-workflow/workflow-overview.md +33 -0
- package/.claude/skills/skill-manifest.json +389 -0
- package/.claude/skills/spec-self-critique/SKILL.md +152 -0
- package/.claude/skills/spec-self-critique/scenarios.md +82 -0
- package/.claude/skills/tdd/SKILL.md +120 -0
- package/.claude/skills/tdd/THIRD-PARTY-NOTICES.md +29 -0
- package/.claude/skills/tdd/deep-modules.md +33 -0
- package/.claude/skills/tdd/interface-design.md +31 -0
- package/.claude/skills/tdd/mocking.md +59 -0
- package/.claude/skills/tdd/refactoring.md +10 -0
- package/.claude/skills/tdd/tests.md +61 -0
- package/.claude/skills/to-issues/SKILL.md +325 -0
- package/.claude/skills/to-issues/THIRD-PARTY-NOTICES.md +29 -0
- package/.claude/skills/to-prd/PROGRAM-PRD-FORMAT.md +162 -0
- package/.claude/skills/to-prd/SKILL.md +180 -0
- package/.claude/skills/to-prd/THIRD-PARTY-NOTICES.md +29 -0
- package/.claude/skills/to-waves/SKILL.md +260 -0
- package/.claude/skills/to-waves/SLICE-METADATA-FORMAT.md +74 -0
- package/.claude/skills/triage/AGENT-BRIEF.md +168 -0
- package/.claude/skills/triage/OUT-OF-SCOPE.md +101 -0
- package/.claude/skills/triage/SKILL.md +122 -0
- package/.claude/skills/triage/THIRD-PARTY-NOTICES.md +29 -0
- package/.claude/skills/verify-spike/SKILL.md +39 -0
- package/.claude/skills/wayfinder/SKILL.md +127 -0
- package/.claude/skills/wayfinder/THIRD-PARTY-NOTICES.md +29 -0
- package/.claude/skills/wrapup/SKILL.md +81 -0
- package/.claude/skills/wrapup/SOURCES.txt +6 -0
- package/.claude/skills/write-a-skill/GLOSSARY.md +201 -0
- package/.claude/skills/write-a-skill/SKILL.md +88 -0
- package/.claude/skills/write-a-skill/THIRD-PARTY-NOTICES.md +29 -0
- package/.claude/skills/zoom-out/SKILL.md +7 -0
- package/.claude/skills/zoom-out/THIRD-PARTY-NOTICES.md +29 -0
- package/LICENSE +28 -0
- package/PROVENANCE.md +39 -0
- package/README.md +619 -0
- package/agent-workflow-kit.package.json +1939 -0
- package/docs/agents/board-sync.md +71 -0
- package/docs/agents/code-review.md +14 -0
- package/docs/agents/domain.md +7 -0
- package/docs/agents/issue-tracker.md +12 -0
- package/docs/agents/security-audit-runbook-template.md +205 -0
- package/docs/agents/skills/orchestrate-wave.md +13 -0
- package/docs/agents/skills/spec-self-critique.md +18 -0
- package/docs/agents/triage-labels.md +10 -0
- package/docs/agents/wave-anchor-template.md +88 -0
- package/docs/conventions/spec-completeness.md +23 -0
- package/docs/index.html +56 -0
- package/docs/methodology.html +488 -0
- package/docs/methodology.svg +93 -0
- package/docs/workflow.png +0 -0
- package/package.json +40 -0
- package/scripts/anchor_table.py +343 -0
- package/scripts/board-sync.py +1232 -0
- package/scripts/board_config.py +147 -0
- package/scripts/board_fields.py +192 -0
- package/scripts/build-kit.mjs +116 -0
- package/scripts/build-kit.test.mjs +59 -0
- package/scripts/check-kit-staleness.mjs +45 -0
- package/scripts/check-kit-staleness.test.mjs +19 -0
- package/scripts/execute-ready-check.py +516 -0
- package/scripts/issue_deps.py +79 -0
- package/scripts/kit-release.mjs +100 -0
- package/scripts/kit-release.test.mjs +67 -0
- package/scripts/lib/audit-refs.mjs +146 -0
- package/scripts/lib/scrub.mjs +113 -0
- package/scripts/lib/scrub.test.mjs +187 -0
- package/scripts/loc_offender_core.py +196 -0
- package/scripts/loc_offender_gate.py +182 -0
- package/scripts/node_kind.py +68 -0
- package/scripts/portability_profile_scan.py +53 -0
- package/scripts/pr-body-check.py +263 -0
- package/scripts/program_graph.py +125 -0
- package/scripts/program_graph_parse.py +275 -0
- package/scripts/program_graph_validate.py +256 -0
- package/scripts/program_sync.py +160 -0
- package/scripts/release-delta-guard.mjs +96 -0
- package/scripts/release-delta-guard.test.mjs +53 -0
- package/scripts/test_board_sync_create_idempotency.py +104 -0
- package/scripts/test_dist_kit_smoke.py +199 -0
- package/scripts/test_kit_docs_language_census.py +178 -0
- package/scripts/test_skill_code_review_seed.py +89 -0
- package/scripts/test_skill_frontmatter_lint.py +226 -0
- package/scripts/test_skill_gh_lint.py +124 -0
- package/scripts/test_skill_language_census.py +254 -0
- package/scripts/test_skill_portability_lint.py +773 -0
- package/scripts/test_skill_publish_audit.py +300 -0
- package/scripts/test_skill_selfcontainment_lint.py +255 -0
- package/scripts/test_skill_setup_workflow_seeds.py +200 -0
- package/scripts/test_skill_stale_name_lint.py +126 -0
- package/scripts/test_skill_surface_refs.py +300 -0
- package/scripts/test_skill_trailing_artifact_lint.py +71 -0
- package/scripts/wrapup-land.py +573 -0
- package/src/cli.mjs +70 -0
- package/src/commands/diff.mjs +6 -0
- package/src/commands/init.mjs +59 -0
- package/src/commands/uninstall.mjs +43 -0
- package/src/commands/update.mjs +95 -0
- package/src/lib/atomicWrite.mjs +49 -0
- package/src/lib/bundle.mjs +133 -0
- package/src/lib/hash.mjs +13 -0
- package/src/lib/manifest.mjs +58 -0
- package/src/lib/sentinel.mjs +20 -0
- package/src/lib/settings.mjs +23 -0
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: scale-check
|
|
3
|
+
disable-model-invocation: true
|
|
4
|
+
description: "Route an undertaking to the right altitude before any planning starts — a short plain-language dialog (3–6 questions) deciding between a Program, a Feature, a single Direct-Slice, or a Bug, then hand back a paste-ready start prompt for the chosen route. Use at the very start of a new build when the size is unclear (a new app, a big cross-cutting feature, or a where-do-I-start question). Owns the altitude criteria catalog; when in doubt it routes to Feature. NOT for slicing a chosen plan (to-issues) and NOT for clustering an existing backlog (board-to-waves)."
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# scale-check — Route an undertaking to its altitude
|
|
8
|
+
|
|
9
|
+
Answers one question in plain language: **"how big is this, and where do I start?"**
|
|
10
|
+
The output is a **verdict** (Program / Feature / Direct-Slice / Bug), the **route**
|
|
11
|
+
that fits it, and a **paste-ready start prompt** for that route. No requirements
|
|
12
|
+
interview, no code, no board writes — this is a routing dialog, not a planning
|
|
13
|
+
skill.
|
|
14
|
+
|
|
15
|
+
This skill is the **single owner of the altitude criteria catalog** below. Other
|
|
16
|
+
skills only *reference* it — a backlog-grooming pass escalates a candidate that
|
|
17
|
+
trips the program criteria, and the skill router names it as the first step for a
|
|
18
|
+
new build without a clear size. Keep the catalog here and cite it from there;
|
|
19
|
+
never fork a second copy.
|
|
20
|
+
|
|
21
|
+
## When to reach for it
|
|
22
|
+
|
|
23
|
+
- A new undertaking whose size is genuinely unclear — greenfield app, "a bunch of
|
|
24
|
+
related work", a feature that might be bigger than one feature.
|
|
25
|
+
- Someone asks "where do I start?" / "is this a program?" / "do I need a PRD?".
|
|
26
|
+
- **Not** when the size is already obvious: a one-line fix goes straight to a
|
|
27
|
+
Direct-Slice, a known bug straight to a diagnosis — you can skip the dialog and
|
|
28
|
+
hand back that route directly.
|
|
29
|
+
|
|
30
|
+
## The dialog — 3 to 6 plain-language questions
|
|
31
|
+
|
|
32
|
+
Ask **one question at a time**, in plain language (no PM jargon), and recommend an
|
|
33
|
+
answer where the person hesitates. Stop early once the verdict is unambiguous (two
|
|
34
|
+
program criteria already tripped, or an obvious single-slice/bug). Each answer maps
|
|
35
|
+
to the criteria catalog below.
|
|
36
|
+
|
|
37
|
+
1. **Is this fixing something that used to work, or building something new?**
|
|
38
|
+
→ "fixing" ends the dialog: **Bug** route.
|
|
39
|
+
2. **In one sentence, what should exist at the end that doesn't today?**
|
|
40
|
+
(Frames the whole thing in outcome language — everything below hangs off this.)
|
|
41
|
+
3. **Does it arrive in one go, or in several stages you'd ship and learn from
|
|
42
|
+
separately** (a first usable version, then expansions)?
|
|
43
|
+
4. **Is it one clear area of the app, or several parts that each stand on their
|
|
44
|
+
own** (a whole new app counts as "several")?
|
|
45
|
+
5. **Realistically, is this a handful of focused changes, or many separate work
|
|
46
|
+
sessions stretching over a longer horizon — and does its shape need big
|
|
47
|
+
structural calls locked before day one** (data model, phasing, cross-area
|
|
48
|
+
sequencing) **that would be expensive to revisit mid-build?**
|
|
49
|
+
6. **Are there distinct acceptance stages** — e.g. a pilot that has to pass before
|
|
50
|
+
a wider rollout — **that gate what comes after them, and would progress only
|
|
51
|
+
make sense as a rollup across many waves rather than one issue's status?**
|
|
52
|
+
|
|
53
|
+
Questions 3–6 are the four program-signal probes, each reaching two of the six
|
|
54
|
+
altitude criteria (3→C1, 4→C2, 5→C3+C5, 6→C4+C6); question 1 catches bugs,
|
|
55
|
+
question 2 anchors the outcome. You rarely need all six.
|
|
56
|
+
|
|
57
|
+
## Altitude criteria (the single source of truth)
|
|
58
|
+
|
|
59
|
+
Count how many of these the undertaking trips. **Two or more → Program route.**
|
|
60
|
+
Fewer than two → it is a Feature (or smaller). **When it is borderline or you are
|
|
61
|
+
unsure, route to Feature, never Program** — an emergent wave can always be promoted
|
|
62
|
+
later, but program scaffolding you never needed is pure waste, and the Feature
|
|
63
|
+
route can grow into a program the moment a second criterion clearly trips.
|
|
64
|
+
|
|
65
|
+
- **C1 — Staged delivery.** It ships in several successive stages (a first usable
|
|
66
|
+
version, then expansions), not a single release.
|
|
67
|
+
- **C2 — Multiple subsystems.** It spans several parts that each stand on their own,
|
|
68
|
+
or is a whole new app (greenfield), not one feature area.
|
|
69
|
+
- **C3 — Long horizon.** It realistically needs many separate build sessions/waves,
|
|
70
|
+
not a handful of slices.
|
|
71
|
+
- **C4 — Acceptance gates.** It has distinct acceptance stages (pilot → rollout,
|
|
72
|
+
phase gates) that gate later work.
|
|
73
|
+
- **C5 — Upfront structure decisions.** Its shape needs structure-bearing decisions
|
|
74
|
+
locked before the first build day (data model, phasing, cross-area sequencing) —
|
|
75
|
+
decisions that would be expensive to revisit mid-build.
|
|
76
|
+
- **C6 — Program-level overview.** Progress only makes sense as a rollup across many
|
|
77
|
+
waves, not as one issue's status.
|
|
78
|
+
|
|
79
|
+
A single criterion is a strong Feature that may grow; **two or more is the program
|
|
80
|
+
threshold**. The threshold is deliberately low and the tie always breaks to Feature.
|
|
81
|
+
|
|
82
|
+
## Verdicts, routes, and start prompts
|
|
83
|
+
|
|
84
|
+
Report the verdict, which criteria tripped (for a Program) or why it stayed below
|
|
85
|
+
threshold, and the matching paste-ready start prompt. All four routes are existing
|
|
86
|
+
skills — this skill only picks the entry point.
|
|
87
|
+
|
|
88
|
+
### Program (≥2 criteria)
|
|
89
|
+
|
|
90
|
+
A multi-wave undertaking: grill it once into a Program-PRD with a wave plan, then
|
|
91
|
+
unfold that plan onto the board after a chat preview gate.
|
|
92
|
+
|
|
93
|
+
```
|
|
94
|
+
New program: <one-sentence outcome from Q2>.
|
|
95
|
+
Tripped altitude criteria: <e.g. C1 staged delivery, C2 multiple subsystems, C4 gates>.
|
|
96
|
+
1. Run a program grill with `grill-with-docs` — lock scope → phases → waves and any
|
|
97
|
+
structure-bearing decisions (escalate a single bounded choice to `decision-gate`).
|
|
98
|
+
2. `to-prd` — it auto-detects the program mode from the Wellenplan chapter and writes
|
|
99
|
+
a Program-PRD (native anchor over the waves).
|
|
100
|
+
3. `to-waves` — unfold the wave plan into named wave stubs + slice leaves after the
|
|
101
|
+
chat preview gate (nothing is written to the board until you approve it).
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### Feature (0–1 criteria, or any doubt)
|
|
105
|
+
|
|
106
|
+
One coherent feature — the standard single-wave line, unchanged.
|
|
107
|
+
|
|
108
|
+
```
|
|
109
|
+
New feature: <one-sentence outcome from Q2>.
|
|
110
|
+
`grill-with-docs` (sharpen the terms + decisions) → `to-prd` (publish the Draft-PRD)
|
|
111
|
+
→ `to-issues` (slice it into independently buildable tracer-bullet slices).
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### Direct-Slice (a single, well-understood change)
|
|
115
|
+
|
|
116
|
+
One behavior, already clear enough to build — no PRD, no slicing.
|
|
117
|
+
|
|
118
|
+
```
|
|
119
|
+
Small change: <one-sentence behavior>.
|
|
120
|
+
`tdd` — one behavior at a time, red → green → refactor. No PRD, no decomposition.
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### Bug (something that used to work)
|
|
124
|
+
|
|
125
|
+
```
|
|
126
|
+
Bug: <what's broken — expected vs. actual>.
|
|
127
|
+
`diagnose` — reproduce, minimize, hypothesize, instrument, fix, regression-test.
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
## Output shape
|
|
131
|
+
|
|
132
|
+
```
|
|
133
|
+
scale-check: verdict=<Program | Feature | Direct-Slice | Bug>
|
|
134
|
+
criteria tripped=<C1,C2,… | none | n/a (bug/direct)>
|
|
135
|
+
route=<program grill → to-prd → to-waves | grill-with-docs → to-prd → to-issues | tdd | diagnose>
|
|
136
|
+
start-prompt: <the paste-ready block above, filled in>
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
Make the doubt-default visible: if it landed on Feature only because it was
|
|
140
|
+
borderline, say so — "one criterion tripped (C2); routed to Feature by the
|
|
141
|
+
tie-breaks-to-Feature rule — promote a wave later if a second one clearly appears."
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: security-audit
|
|
3
|
+
description: "Run the whole application's security audit as an independent two-model pass — two AI models audit the same code separately — then harden the remediation plan before any fix lands. Use when the user wants a security audit / security review of the entire app ('audit the app for vulnerabilities', 'is the app secure', 'security check before release'), before a release, or after the attack surface changes (new endpoint, new input source, auth change, dependency bump). NOT for reviewing a single diff/PR (that is a code review) and NOT for infrastructure hardening (firewall/ports/TLS/SSH/backups — audited separately from the application layer)."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# security-audit — application-layer security audit (two-model run)
|
|
7
|
+
|
|
8
|
+
Application-layer security audit of the whole repo. This skill is the **run
|
|
9
|
+
procedure**; the checklist itself lives in a **runbook you own per project**. The
|
|
10
|
+
generic runbook structure ships as a template you copy and fill:
|
|
11
|
+
**`docs/agents/security-audit-runbook-template.md`** — copy it into your project
|
|
12
|
+
(for example `docs/security/audit-runbook.md`), replace each `<placeholder>` with
|
|
13
|
+
your actual stack, and keep it as the checklist single source of truth. Read your
|
|
14
|
+
filled runbook first.
|
|
15
|
+
|
|
16
|
+
**Scope guard:** code + config only. Infrastructure (firewall, exposed ports,
|
|
17
|
+
TLS, SSH, backups) is audited **separately** — an exposed database port beats any
|
|
18
|
+
code fix. Keep the two audits apart.
|
|
19
|
+
|
|
20
|
+
## Workflow — two-model run
|
|
21
|
+
|
|
22
|
+
Run in a **fresh session** (token hygiene). Anchor the campaign to a single
|
|
23
|
+
tracking issue (an umbrella / cluster issue); open a new one per fresh audit.
|
|
24
|
+
|
|
25
|
+
1. **Model-A pass (read-only).** Work the runbook's audit prompt → a findings
|
|
26
|
+
table with exact `file:line`, a severity, and a confirmed/suspected tag on
|
|
27
|
+
every finding. Cite real evidence — never claim a vulnerability you did not
|
|
28
|
+
locate in the code; prefer a flagged false positive over a silent omission.
|
|
29
|
+
Write it to a scratch file.
|
|
30
|
+
2. **Model-B pass (read-only, independent).** Hand a *second* model the **same**
|
|
31
|
+
prompt in its own read-only sandbox. A second model refutes the first model's
|
|
32
|
+
false positives and catches what it missed — that independence is the whole
|
|
33
|
+
point. Generic operational gotchas when the second model is Codex:
|
|
34
|
+
- **Fresh session — never resume an existing one** during a parallel run:
|
|
35
|
+
context bleeds across sessions and you get hallucinated, off-topic verdicts.
|
|
36
|
+
- **Do not pipe the `--json` event stream through `grep`** (it can hang) —
|
|
37
|
+
write the raw json to a file and parse the thread id separately.
|
|
38
|
+
- The sandbox sees only tracked files; if you run it inside a git worktree,
|
|
39
|
+
copy any hook config into the worktree, or it fails closed to deny-all.
|
|
40
|
+
3. **Consolidate.** Merge both passes into one report (the runbook's findings
|
|
41
|
+
template). Where the two models **disagree**, the finding goes onto a "needs
|
|
42
|
+
human verification" list — it is **never silently dropped**. Each finding keeps
|
|
43
|
+
its confirmed/suspected tag together with its evidence.
|
|
44
|
+
4. **Harden the remediation plan.** Draft a remediation plan (which gaps, what
|
|
45
|
+
fix, what order, what blast radius), then grill **the plan** with a plan-review
|
|
46
|
+
pass: a relentless interview on scope and priority plus an adversarial
|
|
47
|
+
second-model review of the plan until it is approved. The audit produced the
|
|
48
|
+
*what*; the grill hardens the *how*. A human signs off before any code is
|
|
49
|
+
touched. (Your project layer names the concrete plan-review skill.)
|
|
50
|
+
5. **Fix by slices.** Each confirmed gap → its own issue → a worktree → a
|
|
51
|
+
test-first fix → live-verify → a PR linked under the tracking anchor. Tick the
|
|
52
|
+
anchor's checklist on merge. Gaps discovered mid-fix → filed as their own
|
|
53
|
+
issue, linked under the same anchor.
|
|
54
|
+
|
|
55
|
+
## Why two models + a grill
|
|
56
|
+
|
|
57
|
+
Security findings are the textbook "plausible-but-wrong" case — one model's miss
|
|
58
|
+
or false positive is expensive to catch later. An independent second model is
|
|
59
|
+
cheap adversarial verification; grilling the plan stops over- or under-fixing
|
|
60
|
+
before any code is touched.
|
|
61
|
+
|
|
62
|
+
## Project layer
|
|
63
|
+
|
|
64
|
+
Your project's runbook (copied from the template above) carries the stack-coupled
|
|
65
|
+
checklist — the concrete framework, ORM, auth library, and deploy platform, and
|
|
66
|
+
the exact commands to run. The standing tracking anchor and any category / board
|
|
67
|
+
wiring live there too, not in this generic skeleton.
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: setup-workflow
|
|
3
|
+
description: "Scaffolds the project layer the portable workflow skills assume — issue tracker, triage labels, domain-doc layout, GitHub-Projects board field-IDs, spec-self-critique + spec-completeness seeds, workflow overview, and the deploy target. Writes `docs/agents/*`, `docs/conventions/spec-completeness.md`, and the `## Workflow` / `## Agent skills` / `## Prod` blocks in CLAUDE.md/AGENTS.md. Idempotent: a re-run reconciles per file/section and never overwrites filled content. Run once after installing the skills (or `npx <pkg> init`), or when a skill reports missing project-layer context. Adapted from Matt Pocock's `setup-matt-pocock-skills` (MIT)."
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Setup Workflow
|
|
8
|
+
|
|
9
|
+
Scaffold the **project layer** the portable workflow skills (`to-prd`, `to-issues`, `triage`, `spec-self-critique`, `retro`, `wrapup`, …) read at runtime. The generic skills ship the *how*; this skill writes the project-specific *what* into the consumer repo, where `retro`/`wrapup` then grow it over time.
|
|
10
|
+
|
|
11
|
+
This is a prompt-driven skill, not a deterministic script. Explore, present what you found, confirm with the user, then write — **one section at a time**, never dump everything at once. Assume the user does not know what these terms mean; each section opens with a short plain explainer.
|
|
12
|
+
|
|
13
|
+
## Targets
|
|
14
|
+
|
|
15
|
+
| File / block | What |
|
|
16
|
+
|---|---|
|
|
17
|
+
| `docs/agents/issue-tracker.md` | where issues live + how to read/write them (Section A) |
|
|
18
|
+
| `docs/agents/triage-labels.md` | the triage label vocabulary (Section B) |
|
|
19
|
+
| `docs/agents/domain.md` | `CONTEXT.md`/ADR layout the domain skills read (Section C) |
|
|
20
|
+
| `docs/agents/board-sync.md` | GitHub-Projects field-IDs + board profile — **only meaningful for a GitHub tracker** (Section D) |
|
|
21
|
+
| `docs/agents/skills/spec-self-critique.md` | per-point enrichment skeleton; `/retro` appends here (Section E) |
|
|
22
|
+
| `docs/agents/skills/orchestrate-wave.md` | `orchestrate-wave` project layer (setup / commands / verify / login / landing) the wave-landing skill probes at runtime (Section E) |
|
|
23
|
+
| `docs/conventions/spec-completeness.md` | a valid `## Self-Critique-Check` convention seed (Section E) |
|
|
24
|
+
| `docs/agents/code-review.md` | Standards-source pointers + adjacent-review-tooling notes the `code-review` skill's Standards axis reads (Section I) |
|
|
25
|
+
| `## Workflow` in CLAUDE.md **and** AGENTS.md | generic entry-point map seeded from [workflow-overview.md](./workflow-overview.md) (Section F + Write) |
|
|
26
|
+
| `## Agent skills` + `## Prod` in CLAUDE.md **and** AGENTS.md | one-line pointers + deploy target (Sections C/G + Write) |
|
|
27
|
+
|
|
28
|
+
## Idempotency contract — read before writing anything
|
|
29
|
+
|
|
30
|
+
Every project-layer file this skill (or `npx init`) creates begins with **one sentinel line as its very first line**:
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
<!-- setup-workflow: state=<stub|filled|not-applicable>[; mode=<github-projects-v2|none>] -->
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
- `state=stub` — placeholder, awaiting fill (retryable). `state=filled` — populated, done. `state=not-applicable` — complete *by design* (e.g. board-sync for a non-GitHub tracker); never re-prompt. `mode=` appears **only** in `board-sync.md`.
|
|
37
|
+
- **Per-file decision** when this skill runs:
|
|
38
|
+
- File missing → create it (write body + sentinel).
|
|
39
|
+
- First line is `state=stub` → fill it, flip the sentinel to `filled` (or `not-applicable`).
|
|
40
|
+
- First line is `state=filled` / `state=not-applicable` → **skip** (only the *first line* counts — a later mention of "setup-workflow" in the body does not).
|
|
41
|
+
- File exists, **non-empty, no sentinel** (legacy / pre-existing) → treat as **legacy-filled**, **skip**, report it.
|
|
42
|
+
- File exists but empty/whitespace, no sentinel → treat as fillable.
|
|
43
|
+
- **CLAUDE.md / AGENTS.md carry no sentinel** (they are not ours) → reconcile **per section** via the block headers `## Workflow` / `## Agent skills` / `## Prod`: add a missing block, never overwrite an existing one or surrounding user content.
|
|
44
|
+
- **Never overwrite filled content.** A re-run only fills what is missing/stub. End with a report: `<file>: created · filled · skipped (already filled / legacy / not-applicable)`.
|
|
45
|
+
|
|
46
|
+
## Process
|
|
47
|
+
|
|
48
|
+
### 1. Explore
|
|
49
|
+
|
|
50
|
+
Read the current state; don't assume. For every target file, read its first line to classify it per the idempotency contract (missing / stub / filled / not-applicable / legacy).
|
|
51
|
+
|
|
52
|
+
- `git remote -v` and `.git/config` — GitHub? GitLab? Which owner/repo?
|
|
53
|
+
- `CLAUDE.md` and `AGENTS.md` at the repo root — which exist? Do they already have a `## Workflow` / `## Agent skills` / `## Prod` block?
|
|
54
|
+
- `CONTEXT.md`, `CONTEXT-MAP.md`, `docs/adr/` — domain-doc layout.
|
|
55
|
+
- `docs/agents/`, `docs/agents/skills/`, `docs/conventions/` — prior output of this skill.
|
|
56
|
+
- `gh auth status` (if GitHub) — is `gh` authenticated, and with which scopes?
|
|
57
|
+
|
|
58
|
+
### 2. Section A — Issue tracker
|
|
59
|
+
|
|
60
|
+
> The "issue tracker" is where issues live for this repo. Skills like `to-issues`, `triage`, and `to-prd` read from and write to it — they need to know whether to call `gh`, `glab`, write markdown under `.scratch/`, or follow a workflow you describe.
|
|
61
|
+
|
|
62
|
+
Default posture: these skills were designed for GitHub. If a `git remote` points at GitHub, propose GitHub; at GitLab, propose GitLab. Otherwise offer:
|
|
63
|
+
|
|
64
|
+
- **GitHub** — GitHub Issues (`gh` CLI)
|
|
65
|
+
- **GitLab** — GitLab Issues (`glab` CLI)
|
|
66
|
+
- **Local markdown** — files under `.scratch/<feature>/` (solo projects / no remote)
|
|
67
|
+
- **Other** (Jira, Linear, …) — ask the user to describe the workflow in one paragraph; record it as freeform prose.
|
|
68
|
+
|
|
69
|
+
Seed `docs/agents/issue-tracker.md` from the matching template in this folder: [issue-tracker-github.md](./issue-tracker-github.md), [issue-tracker-gitlab.md](./issue-tracker-gitlab.md), [issue-tracker-local.md](./issue-tracker-local.md). For "other", write it from the user's description.
|
|
70
|
+
|
|
71
|
+
**Conditional board-write note (only when the GitHub tracker uses a managed board):** if Section D ends with `board-sync.md` at `mode: github-projects-v2`, add one line to `issue-tracker.md`: *"Board writes (item-add, status/wave/cluster field edits, sub-issue links) go through the board-sync helper, not bare `gh issue create`/`gh project item-*`."* Do **not** add this for GitLab, local, other, or `mode: none`.
|
|
72
|
+
|
|
73
|
+
### 3. Section B — Triage labels
|
|
74
|
+
|
|
75
|
+
> When `triage` processes an incoming issue it applies labels (or your tracker's equivalent). It needs strings you've actually configured, or it creates duplicates.
|
|
76
|
+
|
|
77
|
+
Present the canonical roles from [triage-labels.md](./triage-labels.md); each role's string defaults to its name. Ask whether to override any. Seed `docs/agents/triage-labels.md` from the template.
|
|
78
|
+
|
|
79
|
+
### 4. Section C — Domain docs
|
|
80
|
+
|
|
81
|
+
> Some skills read `CONTEXT.md` for domain language and `docs/adr/` for past decisions. They need to know whether the repo has one global context or several.
|
|
82
|
+
|
|
83
|
+
- **Single-context** — one `CONTEXT.md` + `docs/adr/` at the root (most repos).
|
|
84
|
+
- **Multi-context** — `CONTEXT-MAP.md` at the root pointing to per-context `CONTEXT.md` files (typically a monorepo).
|
|
85
|
+
|
|
86
|
+
Seed `docs/agents/domain.md` from [domain.md](./domain.md).
|
|
87
|
+
|
|
88
|
+
### 5. Section D — Board field-IDs (GitHub tracker only)
|
|
89
|
+
|
|
90
|
+
> A GitHub-Projects board stores its fields (Status, and any workflow fields like a wave/cluster/spec-path) under opaque GraphQL IDs. The board-managed skills need those IDs. They differ per board and can't be typed by hand, so this skill discovers them.
|
|
91
|
+
|
|
92
|
+
**Skip entirely if Section A is not GitHub** → write `board-sync.md` with `state=not-applicable`, `mode=none`, a one-line "this project does not use a GitHub-Projects board" note. Terminal; never re-prompts.
|
|
93
|
+
|
|
94
|
+
**Preflight:** `gh auth status`. If `project`/`read:project` scope is missing, surface the exact remedy: `gh auth refresh -s project,read:project`, then fall through to the stub path below.
|
|
95
|
+
|
|
96
|
+
**Discover (the success path):** `gh project list --owner <remote-owner> --format json`. If **exactly one** project clearly belongs to this repo's owner, read its fields: `gh project field-list <number> --owner <owner> --format json`. Record each field's `id`, `name`, `dataType` (single-select / number / text), and for single-selects the option `id`s. Write `board-sync.md` with `state=filled`, `mode=github-projects-v2`, the project node id + repo + the discovered field/option IDs, seeded from [board-sync.md](./board-sync.md). Fill the `<!-- board-sync:profile -->` **JSON block** (the machine SSOT `scripts/board_config.py` parses) — replace each `<…>` placeholder under `repo`/`project`/`fields` with the discovered value; leave the convention values (`labels`/`branchPrefixes`/`prMarkers`/`headings`) at their seeded defaults unless this project's conventions differ.
|
|
97
|
+
|
|
98
|
+
**Map the status roles (`fields.status.roles`):** the seeded map carries the recommended English stage names (`Idea/Triaged/Spec/In Progress/Review/Done`). Reconcile it against the **discovered** Status option names: an exact (case-sensitive) match keeps its seeded entry; for every role whose seeded name is NOT among the discovered options, ask the user which of their actual option names plays that role (a stage they don't have may be omitted from the map — say so). Never guess a mapping from similarity. Finish with a validation pass: every role value in the map MUST appear in `fields.status.options`, else fix before writing `state=filled`.
|
|
99
|
+
|
|
100
|
+
**Fallback (the single catch-all — no board / >1 / ambiguous / scope error / read failure):** do **not** auto-create a board (`gh project create` alone cannot provision the Status options + workflow fields a board needs). Write `board-sync.md` with `state=stub`, `mode=github-projects-v2`, and inline **instructions**: which fields the workflow profile needs (a Status single-select with your stage options; optionally a Wave number, a Cluster text, a Spec-Path / Plan-Path text), how to create the board in the GitHub UI / `gh`, and "then run `/setup-workflow` again — it will discover and fill the IDs." Retryable.
|
|
101
|
+
|
|
102
|
+
**Optional — Phase field + saved Views (Program route only):** never auto-discovered or auto-created, unlike the fields above — a Phase field's option set is plan-specific. If this project plans to use the Program route (`scale-check` → `to-waves` → `validate-graph`), point the user at the seeded [board-sync.md](./board-sync.md)'s "Optional: the Program route" section for the `gh project field-create` command, the optional `fields.phase` / `labels.programType` profile keys, and the two saved Views to create by hand.
|
|
103
|
+
|
|
104
|
+
### 6. Section E — Spec-layer seeds (non-interactive)
|
|
105
|
+
|
|
106
|
+
These are **structured-but-empty** crusts that `/retro` grows; do not ask the user to fill them now.
|
|
107
|
+
|
|
108
|
+
- `docs/agents/skills/spec-self-critique.md` — seed the 12 per-point headings from [spec-self-critique-seed.md](./spec-self-critique-seed.md) so `/retro` has stable append anchors and `spec-self-critique` finds its project layer (suppressing the "layer absent" warning) without inventing project content.
|
|
109
|
+
- `docs/agents/skills/orchestrate-wave.md` — seed the named `§`-section headings from [orchestrate-wave-seed.md](./orchestrate-wave-seed.md) so the `orchestrate-wave` skill's Phase-0 probe finds its project layer. The sections ship **empty** (the exact commands / tunnel / login can't be guessed) → the skill treats an unfilled seed as "layer absent" and runs its generic fallback until the project fills them. A filled section is a manual project-maintenance edit, not something this run invents.
|
|
110
|
+
- `docs/conventions/spec-completeness.md` — seed **one valid** `## Self-Critique-Check` block (Trigger/Check/Korrektur) from [spec-completeness-seed.md](./spec-completeness-seed.md). A convention file *without* a valid block makes `spec-self-critique` point 8 warn — an empty file is worse than none.
|
|
111
|
+
|
|
112
|
+
> **Handoff drift-guard (`.claude/hooks/drift-guard.py`).** The repo ships a PreToolUse hook that blocks a `.handoff/*.md` Write when the linked issue's rooted graph is not execute-ready (it delegates all coherence to `scripts/execute-ready-check.py --mode handoff`). It self-filters to `.handoff/*.md` and fires **only once handoff docs exist** — a freshly scaffolded project carries the guard but has nothing to guard yet (silently inoperative until the first `.handoff/` write). This scaffold only **documents** the interplay; it does **not** build new mechanics. Once the project starts emitting handoffs, writes land in `.handoff/` and the guard activates automatically.
|
|
113
|
+
|
|
114
|
+
### 7. Section F — Workflow overview
|
|
115
|
+
|
|
116
|
+
> The workflow overview is a short entry-point map: which skill to start with for a feature, ready plan, bug, implementation slice, or finished branch. It should stay generic; the detailed mechanics live in the individual skills and the project-layer docs.
|
|
117
|
+
|
|
118
|
+
Seed `## Workflow` from [workflow-overview.md](./workflow-overview.md) when the target CLAUDE.md/AGENTS.md file has no `## Workflow` block. If a `## Workflow` block already exists, leave it untouched and report `skipped (already present)`; it is likely repo-specific.
|
|
119
|
+
|
|
120
|
+
### 8. Section G — Deploy target
|
|
121
|
+
|
|
122
|
+
> `wrapup` and live-verify reference where this project deploys (host, command, URL). It lives in the `## Prod` block of CLAUDE.md/AGENTS.md, not a separate file.
|
|
123
|
+
|
|
124
|
+
Ask for the deploy target in plain terms (where does this ship, how is it deployed, what's the live URL?). Record it for the `## Prod` block (Write step). If the user has no deploy target, skip — do not invent one.
|
|
125
|
+
|
|
126
|
+
### 8b. Section H — Size-Profil (optional LoC-offender gate, non-interactive)
|
|
127
|
+
|
|
128
|
+
> **Optional, opt-in.** The kit ships a LoC-offender drive gate (`scripts/loc_offender_gate.py`) — a stdlib-only helper that flags files over a line threshold (e.g. wire it into a pre-push hook). It reads a **single threshold SSOT**: `maxLines` in `max-lines-allowlist.json` at the repo root. Seeding that file is harmless even if you never wire the gate; without it the gate has no profile to read. (The SSOT repo additionally enforces the same threshold as a project-specific test-runner fitness check — that check is **not** shipped; the portable gate is the Python helper above.)
|
|
129
|
+
|
|
130
|
+
Seed `max-lines-allowlist.json` **only if absent** (never overwrite — its `offenders` array is curated debt):
|
|
131
|
+
```json
|
|
132
|
+
{
|
|
133
|
+
"maxLines": 300,
|
|
134
|
+
"vendored": [],
|
|
135
|
+
"offenders": []
|
|
136
|
+
}
|
|
137
|
+
```
|
|
138
|
+
Adjust `maxLines` only if the consumer asks for a different line limit. `vendored` = permanently-exempt third-party primitives; `offenders` = the shrinking known-debt set (files already over the limit at adoption). Report `created · skipped (already present)`.
|
|
139
|
+
|
|
140
|
+
### 8c. Section I — Code-review project layer (non-interactive)
|
|
141
|
+
|
|
142
|
+
> The `code-review` skill's Standards axis reads a project layer for exactly which docs count as this repo's conventions, and how the method relates to any other review tooling already running here. Seed it so the skill resolves that directly instead of guessing at the repo root.
|
|
143
|
+
|
|
144
|
+
Seed `docs/agents/code-review.md` from [code-review.md](./code-review.md) — the same structured-but-empty philosophy as Section E: the two headings ("Standards sources in this repo" / "Adjacent review tooling") ship complete, but filling in this repo's real values is a manual edit (or a later pass), not something this run invents. Write at `state=filled` — the scaffold itself is the finished deliverable; nothing is pending from `/setup-workflow`'s side.
|
|
145
|
+
|
|
146
|
+
### 8. Write
|
|
147
|
+
|
|
148
|
+
For each `docs/...` file: obey the idempotency contract (the "Idempotency contract" section). Prepend the sentinel with the resolved `state` (and `mode` for board-sync).
|
|
149
|
+
|
|
150
|
+
For the **`## Workflow`**, **`## Agent skills`**, and **`## Prod`** blocks, reconcile per section in **both** CLAUDE.md and AGENTS.md that exist:
|
|
151
|
+
|
|
152
|
+
- If **both** files exist → write/update the block in **both** (keep them coherent — Codex is a first-class surface).
|
|
153
|
+
- If **one** exists → that one.
|
|
154
|
+
- If **neither** exists → ask the user which surface(s) to create (**default `CLAUDE.md`**), then write there.
|
|
155
|
+
- If a `## Workflow` block already exists → skip it; this block is often repo-specific.
|
|
156
|
+
- If an `## Agent skills` / `## Prod` block already exists → update its contents in-place; never duplicate or clobber surrounding user content.
|
|
157
|
+
|
|
158
|
+
`## Workflow` block:
|
|
159
|
+
|
|
160
|
+
Use [workflow-overview.md](./workflow-overview.md) verbatim as the generic seed.
|
|
161
|
+
|
|
162
|
+
`## Agent skills` block:
|
|
163
|
+
|
|
164
|
+
```markdown
|
|
165
|
+
## Agent skills
|
|
166
|
+
|
|
167
|
+
### Issue tracker
|
|
168
|
+
[one-line summary]. See `docs/agents/issue-tracker.md`.
|
|
169
|
+
|
|
170
|
+
### Triage labels
|
|
171
|
+
[one-line summary]. See `docs/agents/triage-labels.md`.
|
|
172
|
+
|
|
173
|
+
### Domain docs
|
|
174
|
+
[one-line summary — single- or multi-context]. See `docs/agents/domain.md`.
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
`## Prod` block (only if Section F produced a deploy target):
|
|
178
|
+
|
|
179
|
+
```markdown
|
|
180
|
+
## Prod
|
|
181
|
+
|
|
182
|
+
[host / platform], deployed via [command/trigger]. Live: [URL].
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
### 9. Done
|
|
186
|
+
|
|
187
|
+
Report the per-file outcome (`created · filled · skipped`), which surface(s) you wrote the blocks to, and which skills now read the layer. Note the user can edit `docs/agents/*.md` directly later, and that `/retro` grows the spec-layer seeds over time. Re-running this skill only fills what is missing or `state=stub`.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Third-Party Notices
|
|
2
|
+
|
|
3
|
+
This skill is adapted from **Matt Pocock's skills**
|
|
4
|
+
(https://github.com/mattpocock/skills), `skills/engineering/setup-matt-pocock-skills` @ d574778, Copyright (c) 2026 Matt Pocock,
|
|
5
|
+
used under the MIT License. Locally adapted (fork-and-own); see PROVENANCE.md.
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
MIT License
|
|
9
|
+
|
|
10
|
+
Copyright (c) 2026 Matt Pocock
|
|
11
|
+
|
|
12
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
13
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
14
|
+
in the Software without restriction, including without limitation the rights
|
|
15
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
16
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
17
|
+
furnished to do so, subject to the following conditions:
|
|
18
|
+
|
|
19
|
+
The above copyright notice and this permission notice shall be included in all
|
|
20
|
+
copies or substantial portions of the Software.
|
|
21
|
+
|
|
22
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
23
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
24
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
25
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
26
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
27
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
28
|
+
SOFTWARE.
|
|
29
|
+
```
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# Board sync — GitHub Projects field-IDs
|
|
2
|
+
|
|
3
|
+
How the board-managed workflow skills (`to-prd`, `to-issues`, `board-to-waves`, …) address this project's GitHub-Projects board. A board stores its fields under opaque GraphQL IDs that differ per board, so they are recorded here rather than hardcoded in any skill.
|
|
4
|
+
|
|
5
|
+
`/setup-workflow` writes this file in one of three states (see the sentinel on the first line):
|
|
6
|
+
- **`state=filled`** — the IDs below were discovered from your board.
|
|
7
|
+
- **`state=stub`** — no single board was found; fill the IDs by creating the board (below) and re-running `/setup-workflow`.
|
|
8
|
+
- **`state=not-applicable`** (`mode=none`) — this project does not use a GitHub-Projects board.
|
|
9
|
+
|
|
10
|
+
## Board profile — fields the workflow skills use
|
|
11
|
+
|
|
12
|
+
| Field | Type | Required | Used for |
|
|
13
|
+
|---|---|---|---|
|
|
14
|
+
| Status | single-select | yes | workflow stage (the skills move items through your stage options) |
|
|
15
|
+
| Wave | number | optional | grouping anchors into waves/campaigns |
|
|
16
|
+
| Cluster | text | optional | thematic cluster tag |
|
|
17
|
+
| Spec-Path | text | optional | link from an issue to its spec doc |
|
|
18
|
+
| Plan-Path | text | optional | link from an issue to its plan doc |
|
|
19
|
+
| Phase | single-select | optional | groups waves into phases for the Program route (`to-waves`/`validate-graph`) — only needed if this project uses it |
|
|
20
|
+
|
|
21
|
+
## Machine profile (SSOT) — `scripts/board_config.py` reads this
|
|
22
|
+
|
|
23
|
+
`/setup-workflow` fills the board-identity values (node id, field IDs, status options) from `gh project field-list`. The convention values (labels, branch prefixes, PR markers, headings) ship pre-filled to match the bundled skills — edit them only if you adapt those conventions. The IDs live **only** in this block (the table above is documentation), so the two cannot drift.
|
|
24
|
+
|
|
25
|
+
The optional `wrapup` block is a wrapup-only switch, not a board field: `wrapup.remoteBranchSweep` (default `false`) gates `wrapup` Step 5d's remote-branch sweep — `false`/missing (the shipped default) means Step 5d only reports the count of stale merged-PR remotes it found; `true` lets it actually `git push origin --delete` them. Flip it to `true` once you trust the sweep in your repo.
|
|
26
|
+
|
|
27
|
+
<!-- board-sync:profile -->
|
|
28
|
+
```json
|
|
29
|
+
{
|
|
30
|
+
"repo": "<owner>/<repo>",
|
|
31
|
+
"project": {
|
|
32
|
+
"number": 0,
|
|
33
|
+
"owner": "<owner>",
|
|
34
|
+
"nodeId": "<fill via /setup-workflow>"
|
|
35
|
+
},
|
|
36
|
+
"fields": {
|
|
37
|
+
"status": {
|
|
38
|
+
"id": "<fill>",
|
|
39
|
+
"options": { "<stage>": "<option-id>" },
|
|
40
|
+
"roles": {
|
|
41
|
+
"idea": "Idea",
|
|
42
|
+
"triaged": "Triaged",
|
|
43
|
+
"spec": "Spec",
|
|
44
|
+
"inProgress": "In Progress",
|
|
45
|
+
"review": "Review",
|
|
46
|
+
"done": "Done"
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
"wave": "<fill / omit>",
|
|
50
|
+
"cluster": "<fill / omit>",
|
|
51
|
+
"specPath": "<fill / omit>",
|
|
52
|
+
"planPath": "<fill / omit>",
|
|
53
|
+
"phase": {
|
|
54
|
+
"id": "<fill / omit whole block>",
|
|
55
|
+
"options": { "<phase-name>": "<option-id>" }
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
"labels": {
|
|
59
|
+
"readyForAgent": "ready-for-agent",
|
|
60
|
+
"typePrefix": "type:",
|
|
61
|
+
"clusterType": "type:cluster",
|
|
62
|
+
"waveStub": "wave-stub",
|
|
63
|
+
"programType": "type:program"
|
|
64
|
+
},
|
|
65
|
+
"branchPrefixes": ["feat", "fix", "chore", "docs"],
|
|
66
|
+
"prMarkers": {
|
|
67
|
+
"partOf": "Part of",
|
|
68
|
+
"retroMarker": "**Retro:**",
|
|
69
|
+
"retroValues": ["ran", "skipped"]
|
|
70
|
+
},
|
|
71
|
+
"headings": {
|
|
72
|
+
"vorBau": "Clarify Before Build"
|
|
73
|
+
},
|
|
74
|
+
"wrapup": {
|
|
75
|
+
"remoteBranchSweep": false
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### Status roles (`fields.status.roles`)
|
|
81
|
+
|
|
82
|
+
The scripts and skills never hardcode status option NAMES — they address stages
|
|
83
|
+
by semantic **role** (`idea` / `triaged` / `spec` / `inProgress` / `review` /
|
|
84
|
+
`done`) and resolve the name via this map (e.g. `board-sync.py add
|
|
85
|
+
--status-role spec`, the SessionStart auto-transition, the wave/anchor status
|
|
86
|
+
icons). The seeded values above are the **recommended English defaults**: name
|
|
87
|
+
your board's Status options exactly like that and nothing needs editing. A
|
|
88
|
+
board in another language (or with different stage names) maps each role to
|
|
89
|
+
its own option name once — e.g. `"inProgress": "En cours"` — and everything
|
|
90
|
+
follows; renaming an option later is one edit here. A role you don't have
|
|
91
|
+
(e.g. no `idea` stage) may simply be omitted. A profile **without** the whole
|
|
92
|
+
`roles` map keeps loading: the auto-transition hook and status icons degrade
|
|
93
|
+
with a visible hint, and `--status-role` commands fail with the exact snippet
|
|
94
|
+
to add.
|
|
95
|
+
|
|
96
|
+
## If the IDs are not yet filled (stub)
|
|
97
|
+
|
|
98
|
+
1. Create a GitHub-Projects (v2) board for this owner and add the fields above (at minimum a `Status` single-select with your stage options — the recommended stage names are `Idea, Triaged, Spec, In Progress, Review, Done`, matching the seeded `roles` defaults).
|
|
99
|
+
2. Ensure `gh` has the scopes: `gh auth refresh -s project,read:project`.
|
|
100
|
+
3. Re-run `/setup-workflow` — it discovers the board (`gh project field-list`) and fills the IDs here automatically.
|
|
101
|
+
|
|
102
|
+
## Optional: the Program route (Phase field + saved Views)
|
|
103
|
+
|
|
104
|
+
Skip this section entirely unless this project actually plans to use the Program route (`scale-check` → `to-waves` → `validate-graph`) — `fields.phase` / `labels.programType` are never auto-discovered or auto-created (a Phase field's option set is plan-specific, not something `/setup-workflow` can guess), and a profile without them keeps loading unchanged.
|
|
105
|
+
|
|
106
|
+
1. **Create the Phase field:** `gh project field-create <number> --owner <owner> --name Phase --data-type SINGLE_SELECT --single-select-options "P1,P2,P3"` (name the options after this project's actual phases).
|
|
107
|
+
2. **Fill `fields.phase`** in the `<!-- board-sync:profile -->` block above with the same `{id, options}` shape as `fields.status` — read both back via `gh project field-list <number> --owner <owner> --format json`.
|
|
108
|
+
3. **Fill `labels.programType`** only if this project's Program-PRD type label should differ from the shipped literal default `type:program`.
|
|
109
|
+
4. **Create two saved Views** in the GitHub Projects UI by hand (not API-creatable):
|
|
110
|
+
- **"Program"** — Group by: `Phase` · Sort by: `Wave` · Filter: `type:cluster OR wave-stub OR type:program`.
|
|
111
|
+
- **"Active Wave"** — Filter: `Wave=<n>` (the current wave number) · Group by: `Status`.
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Code-review project layer
|
|
2
|
+
|
|
3
|
+
The generic `code-review` skill ships the Two-Axis method (Standards × Spec),
|
|
4
|
+
the Fowler-smell baseline, and the merge-base preflight — the *how*. This file
|
|
5
|
+
is the **project layer**: it records exactly which docs count as this repo's
|
|
6
|
+
Standards-axis sources, and how the method relates to any other review
|
|
7
|
+
tooling already running in this environment. The skill reads it at runtime;
|
|
8
|
+
with this file present it resolves the Standards sources directly instead of
|
|
9
|
+
scanning the repo root itself.
|
|
10
|
+
|
|
11
|
+
This is a structured-but-empty crust — `/setup-workflow` seeds the headings,
|
|
12
|
+
it does not invent your project's answers. Fill the two sections below
|
|
13
|
+
directly (or grow them over time) whenever you know the real values.
|
|
14
|
+
|
|
15
|
+
## Standards sources in this repo
|
|
16
|
+
<!-- List the docs the Standards axis should read: a root convention file
|
|
17
|
+
(CLAUDE.md/AGENTS.md/CONTRIBUTING.md), any per-package convention files
|
|
18
|
+
in a monorepo, a docs/conventions/ folder, a style guide. One per line. -->
|
|
19
|
+
- _none recorded yet — add the paths this repo's standards actually live at_
|
|
20
|
+
|
|
21
|
+
## Adjacent review tooling
|
|
22
|
+
<!-- Name any other review-shaped tool/skill/command already running in this
|
|
23
|
+
environment (a plan-review loop, a security-specific audit, a
|
|
24
|
+
reuse/simplification pass, a reviewer subagent) and how code-review
|
|
25
|
+
relates to it (complements it / does not replace it). One per line. -->
|
|
26
|
+
- _none recorded yet_
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Domain Docs
|
|
2
|
+
|
|
3
|
+
How the engineering skills should consume this repo's domain documentation when exploring the codebase.
|
|
4
|
+
|
|
5
|
+
## Before exploring, read these
|
|
6
|
+
|
|
7
|
+
- **`CONTEXT.md`** at the repo root, or
|
|
8
|
+
- **`CONTEXT-MAP.md`** at the repo root if it exists — it points at one `CONTEXT.md` per context. Read each one relevant to the topic.
|
|
9
|
+
- **`docs/adr/`** — read ADRs that touch the area you're about to work in. In multi-context repos, also check `src/<context>/docs/adr/` for context-scoped decisions.
|
|
10
|
+
|
|
11
|
+
If any of these files don't exist, **proceed silently**. Don't flag their absence; don't suggest creating them upfront. The producer skill (`/grill-with-docs`) creates them lazily when terms or decisions actually get resolved.
|
|
12
|
+
|
|
13
|
+
## File structure
|
|
14
|
+
|
|
15
|
+
Single-context repo (most repos):
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
/
|
|
19
|
+
├── CONTEXT.md
|
|
20
|
+
├── docs/adr/
|
|
21
|
+
│ ├── 0001-event-sourced-orders.md
|
|
22
|
+
│ └── 0002-postgres-for-write-model.md
|
|
23
|
+
└── src/
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Multi-context repo (presence of `CONTEXT-MAP.md` at the root):
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
/
|
|
30
|
+
├── CONTEXT-MAP.md
|
|
31
|
+
├── docs/adr/ ← system-wide decisions
|
|
32
|
+
└── src/
|
|
33
|
+
├── ordering/
|
|
34
|
+
│ ├── CONTEXT.md
|
|
35
|
+
│ └── docs/adr/ ← context-specific decisions
|
|
36
|
+
└── billing/
|
|
37
|
+
├── CONTEXT.md
|
|
38
|
+
└── docs/adr/
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Use the glossary's vocabulary
|
|
42
|
+
|
|
43
|
+
When your output names a domain concept (in an issue title, a refactor proposal, a hypothesis, a test name), use the term as defined in `CONTEXT.md`. Don't drift to synonyms the glossary explicitly avoids.
|
|
44
|
+
|
|
45
|
+
If the concept you need isn't in the glossary yet, that's a signal — either you're inventing language the project doesn't use (reconsider) or there's a real gap (note it for `/grill-with-docs`).
|
|
46
|
+
|
|
47
|
+
## Flag ADR conflicts
|
|
48
|
+
|
|
49
|
+
If your output contradicts an existing ADR, surface it explicitly rather than silently overriding:
|
|
50
|
+
|
|
51
|
+
> _Contradicts ADR-0007 (event-sourced orders) — but worth reopening because…_
|