@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,35 @@
|
|
|
1
|
+
# Issue tracker: GitHub
|
|
2
|
+
|
|
3
|
+
Issues and PRDs for this repo live as GitHub issues. Use the `gh` CLI for all operations.
|
|
4
|
+
|
|
5
|
+
## Conventions
|
|
6
|
+
|
|
7
|
+
- **Create an issue**: `gh issue create --title "..." --body-file <file>` — body always via `--body-file` (inline `--body` with backticks/parens crashes bash). Use a heredoc to build the file for multi-line bodies.
|
|
8
|
+
<!-- setup-workflow: when board-sync.md ends at mode=github-projects-v2, insert the managed-board routing line here — "Board writes (item-add, status/wave/cluster field edits, sub-issue links) go through scripts/board-sync.py, not bare `gh issue create`/`gh project item-*`." Omit for GitLab / local / other / mode=none. -->
|
|
9
|
+
- **Sync to the board** (managed-board projects only): route board writes through the board-sync helper, not bare `gh issue create`/`gh project item-*` — see `docs/agents/board-sync.md` once `/setup-workflow` has filled it.
|
|
10
|
+
- **Read an issue**: `gh issue view <number> --comments`, filtering comments by `jq` and also fetching labels.
|
|
11
|
+
- **List issues**: `gh issue list --state open --json number,title,body,labels,comments --jq '[.[] | {number, title, body, labels: [.labels[].name], comments: [.comments[].body]}]'` with appropriate `--label` and `--state` filters.
|
|
12
|
+
- **Comment on an issue**: `gh issue comment <number> --body "..."`
|
|
13
|
+
- **Apply / remove labels**: `gh issue edit <number> --add-label "..."` / `--remove-label "..."`
|
|
14
|
+
- **Close**: `gh issue close <number> --comment "..."`
|
|
15
|
+
|
|
16
|
+
Infer the repo from `git remote -v` — `gh` does this automatically when run inside a clone.
|
|
17
|
+
|
|
18
|
+
## When a skill says "publish to the issue tracker"
|
|
19
|
+
|
|
20
|
+
Create a GitHub issue.
|
|
21
|
+
|
|
22
|
+
## When a skill says "fetch the relevant ticket"
|
|
23
|
+
|
|
24
|
+
Run `gh issue view <number> --comments`.
|
|
25
|
+
|
|
26
|
+
## Wayfinding operations
|
|
27
|
+
|
|
28
|
+
Used by `/wayfinder`. The **map** is a single issue with **child** issues as tickets.
|
|
29
|
+
|
|
30
|
+
- **Map**: a single issue labelled `wayfinder:map`, holding the Notes / Decisions-so-far / Fog body. `gh issue create --label wayfinder:map`.
|
|
31
|
+
- **Child ticket**: an issue linked to the map as a GitHub sub-issue (`gh api` on the sub-issues endpoint). Where sub-issues aren't enabled, add the child to a task list in the map body and put `Part of #<map>` at the top of the child body. Labels: `wayfinder:<type>` (`research`/`prototype`/`grilling`/`task`). Once claimed, the ticket is assigned to the driving dev.
|
|
32
|
+
- **Blocking**: GitHub's **native issue dependencies** — the canonical, UI-visible representation and the blocking SSOT. Set an edge via the board helper, which encapsulates the database-id resolution AND maintains the `## Blocked by` body mirror: `python3 scripts/board-sync.py dep-add --issue <child#> --blocked-by <blocker#>` (remove: `dep-remove`; read: `deps <#>`). Never a bare `gh api` on the dependencies endpoints — the helper is the only writer, same rule as sub-issues. *(Raw shape, for repos without the helper: `POST repos/<owner>/<repo>/issues/<child>/dependencies/blocked_by -F issue_id=<blocker-db-id>` with the blocker's numeric **database id** — `gh api repos/<owner>/<repo>/issues/<n> --jq .id`, not the `#number`/`node_id`.)* GitHub reports `issue_dependencies_summary.blocked_by` (open blockers only — the live gate). Where dependencies aren't available, fall back to a `Blocked by: #<n>, #<n>` line at the top of the child body. A ticket is unblocked when every blocker is closed.
|
|
33
|
+
- **Frontier query**: `python3 scripts/board-sync.py frontier <map#>` — classifies each native child `FREI` / `BLOCKED by #…` / `done` from the native edges; the first `FREI` unassigned child in map order wins. Without the helper: list the map's open children (`gh issue list --state open`, scoped to the map's sub-issues / task list), drop any with an open blocker (`issue_dependencies_summary.blocked_by > 0`, or an open issue in the `Blocked by` line) or an assignee.
|
|
34
|
+
- **Claim**: `gh issue edit <n> --add-assignee @me` — the session's first write.
|
|
35
|
+
- **Resolve**: `gh issue comment <n> --body "<answer>"`, then `gh issue close <n>`, then append a context pointer (gist + link) to the map's Decisions-so-far.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Issue tracker: GitLab
|
|
2
|
+
|
|
3
|
+
Issues and PRDs for this repo live as GitLab issues. Use the [`glab`](https://gitlab.com/gitlab-org/cli) CLI for all operations.
|
|
4
|
+
|
|
5
|
+
## Conventions
|
|
6
|
+
|
|
7
|
+
- **Create an issue**: `glab issue create --title "..." --description "..."`. Use a heredoc for multi-line descriptions. Pass `--description -` to open an editor.
|
|
8
|
+
- **Read an issue**: `glab issue view <number> --comments`. Use `-F json` for machine-readable output.
|
|
9
|
+
- **List issues**: `glab issue list -F json` with appropriate `--label` filters.
|
|
10
|
+
- **Comment on an issue**: `glab issue note <number> --message "..."`. GitLab calls comments "notes".
|
|
11
|
+
- **Apply / remove labels**: `glab issue update <number> --label "..."` / `--unlabel "..."`. Multiple labels can be comma-separated or by repeating the flag.
|
|
12
|
+
- **Close**: `glab issue close <number>`. `glab issue close` does not accept a closing comment, so post the explanation first with `glab issue note <number> --message "..."`, then close.
|
|
13
|
+
- **Merge requests**: GitLab calls PRs "merge requests". Use `glab mr create`, `glab mr view`, `glab mr note`, etc. — the same shape as `gh pr ...` with `mr` in place of `pr` and `note`/`--message` in place of `comment`/`--body`.
|
|
14
|
+
|
|
15
|
+
Infer the repo from `git remote -v` — `glab` does this automatically when run inside a clone.
|
|
16
|
+
|
|
17
|
+
## When a skill says "publish to the issue tracker"
|
|
18
|
+
|
|
19
|
+
Create a GitLab issue.
|
|
20
|
+
|
|
21
|
+
## When a skill says "fetch the relevant ticket"
|
|
22
|
+
|
|
23
|
+
Run `glab issue view <number> --comments`.
|
|
24
|
+
|
|
25
|
+
## Wayfinding operations
|
|
26
|
+
|
|
27
|
+
Used by `/wayfinder`. The **map** is a single issue with **child** issues as tickets.
|
|
28
|
+
|
|
29
|
+
- **Map**: a single issue labelled `wayfinder:map`, holding the Notes / Decisions-so-far / Fog body. `glab issue create --label wayfinder:map`. (On GitLab tiers with native epics, an epic may hold the map instead; a labelled issue works everywhere.)
|
|
30
|
+
- **Child ticket**: an issue carrying `Part of #<map>` at the top of its description and labels `wayfinder:<type>` (`research`/`prototype`/`grilling`/`task`). Once claimed, the ticket is assigned to the driving dev.
|
|
31
|
+
- **Blocking**: GitLab's **native blocking link** — the canonical, UI-visible representation. Add it with the `/blocked_by #<n>` quick action, posted as a note (`glab issue note <child> --message "/blocked_by #<blocker>"`). Native blocking links are a Premium/Ultimate feature; on the free tier (or where unavailable) fall back to a `Blocked by: #<n>, #<n>` line at the top of the description. A ticket is unblocked when every blocker is closed.
|
|
32
|
+
- **Frontier query**: `glab issue list -F json` scoped to the map's children, drop any with an open blocker — a native `blocked_by` link to an open issue (`glab api projects/:id/issues/:iid/links`), or an open issue in the `Blocked by` line — or an assignee; first in map order wins.
|
|
33
|
+
- **Claim**: `glab issue update <n> --assignee @me` — the session's first write.
|
|
34
|
+
- **Resolve**: `glab issue note <n> --message "<answer>"`, then `glab issue close <n>`, then append a context pointer (gist + link) to the map's Decisions-so-far.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Issue tracker: Local Markdown
|
|
2
|
+
|
|
3
|
+
Issues and PRDs for this repo live as markdown files in `.scratch/`.
|
|
4
|
+
|
|
5
|
+
## Conventions
|
|
6
|
+
|
|
7
|
+
- One feature per directory: `.scratch/<feature-slug>/`
|
|
8
|
+
- The PRD is `.scratch/<feature-slug>/PRD.md`
|
|
9
|
+
- Implementation issues are `.scratch/<feature-slug>/issues/<NN>-<slug>.md`, numbered from `01`
|
|
10
|
+
- Triage state is recorded as a `Status:` line near the top of each issue file (see `triage-labels.md` for the role strings)
|
|
11
|
+
- Comments and conversation history append to the bottom of the file under a `## Comments` heading
|
|
12
|
+
|
|
13
|
+
## When a skill says "publish to the issue tracker"
|
|
14
|
+
|
|
15
|
+
Create a new file under `.scratch/<feature-slug>/` (creating the directory if needed).
|
|
16
|
+
|
|
17
|
+
## When a skill says "fetch the relevant ticket"
|
|
18
|
+
|
|
19
|
+
Read the file at the referenced path. The user will normally pass the path or the issue number directly.
|
|
20
|
+
|
|
21
|
+
## Wayfinding operations
|
|
22
|
+
|
|
23
|
+
Used by `/wayfinder`. The **map** is a file with one **child** file per ticket.
|
|
24
|
+
|
|
25
|
+
- **Map**: `.scratch/<effort>/map.md` — the Notes / Decisions-so-far / Fog body.
|
|
26
|
+
- **Child ticket**: `.scratch/<effort>/issues/NN-<slug>.md`, numbered from `01`, with the question in the body. A `Type:` line records the ticket type (`research`/`prototype`/`grilling`/`task`); a `Status:` line records `claimed`/`resolved`.
|
|
27
|
+
- **Blocking**: a `Blocked by: NN, NN` line near the top. A ticket is unblocked when every file it lists is `resolved`.
|
|
28
|
+
- **Frontier**: scan `.scratch/<effort>/issues/` for files that are open, unblocked, and unclaimed; first by number wins.
|
|
29
|
+
- **Claim**: set `Status: claimed` and save before any work.
|
|
30
|
+
- **Resolve**: append the answer under an `## Answer` heading, set `Status: resolved`, then append a context pointer (gist + link) to the map's Decisions-so-far in `map.md`.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Project layer — orchestrate-wave
|
|
2
|
+
|
|
3
|
+
The generic `orchestrate-wave` skill ships the full wave-landing **mechanics**
|
|
4
|
+
(disjointness recon → parallel implementers → serial integration → central verify
|
|
5
|
+
→ land) with no project tooling in the body. This file is the **project layer**:
|
|
6
|
+
it carries your project's exact commands, setup, verify recipe, login and deploy
|
|
7
|
+
detail. The skill probes it at runtime (Phase 0); with the sections below
|
|
8
|
+
**filled** it runs your project recipe instead of the generic fallback.
|
|
9
|
+
|
|
10
|
+
> **Section contract.** The skeleton refers to these exact headings by name.
|
|
11
|
+
> Keep them; fill each with your project's real detail. While a section is empty
|
|
12
|
+
> the skill treats the whole layer as absent (Phase-0 sentinel-stub rule) and
|
|
13
|
+
> falls back to generic instructions — so fill them before relying on the recipe.
|
|
14
|
+
|
|
15
|
+
## §Setup
|
|
16
|
+
<!-- Project setup steps Phase 0 runs before verify: DB/tunnel/services the
|
|
17
|
+
live-verify depends on, dependency install, your worktree-setup command. -->
|
|
18
|
+
|
|
19
|
+
## §Builder Commands
|
|
20
|
+
<!-- Exact test / typecheck / fast-gate commands per package for the builder
|
|
21
|
+
contract and integration. State the exact invocation; note any false-red
|
|
22
|
+
traps (a test-runner arg that silently filters, a composite-typecheck flag). -->
|
|
23
|
+
|
|
24
|
+
## §Builder Hard Rules
|
|
25
|
+
<!-- UI-text language/Umlaut rules, design tokens, formatters, size gates —
|
|
26
|
+
whatever a delegated implementer must obey in this repo. -->
|
|
27
|
+
|
|
28
|
+
## §Integration Suites
|
|
29
|
+
<!-- Every test framework the wave's files can belong to: the main suite plus any
|
|
30
|
+
separate unit-test or script-test runner the main suite does NOT cover. -->
|
|
31
|
+
|
|
32
|
+
## §Verify Recipe
|
|
33
|
+
<!-- The central verify gate you re-run yourself: full CI command (+ any
|
|
34
|
+
coordinator-branch skip/override), combined integration suite for schema/reader
|
|
35
|
+
waves, the one-dev-server rule, design/brand checks, DB-compare coercion traps,
|
|
36
|
+
console-clean command. -->
|
|
37
|
+
|
|
38
|
+
## §Headless Login
|
|
39
|
+
<!-- The AFK login recipe for the session-MCP browser profile: which profile,
|
|
40
|
+
where it resolves, the login script, port lore — no password in the transcript. -->
|
|
41
|
+
|
|
42
|
+
## §Landing
|
|
43
|
+
<!-- Deploy trigger (auto-deploy-on-merge?), prod-migration command + lockstep
|
|
44
|
+
window, the deploy-done signal, anchor-sync mechanics pointer. -->
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Convention — Spec completeness before implementation
|
|
2
|
+
|
|
3
|
+
Specs should reach structural completeness before implementation, so that avoidable bugs are caught at spec time rather than during live-verify. This is the project's seed convention; grow it over time (via `/retro`) by adding more `## Self-Critique-Check` blocks below.
|
|
4
|
+
|
|
5
|
+
`spec-self-critique` point 8 iterates every `docs/conventions/*.md` file and runs the `## Self-Critique-Check` block it finds (format: **Trigger / Check / Korrektur**). A convention file without such a block is skipped with a warning — so this seed ships one valid block.
|
|
6
|
+
|
|
7
|
+
## Self-Critique-Check
|
|
8
|
+
|
|
9
|
+
**Trigger:** the spec states any concrete count, quantity, or "N of M" claim (number of callers, tests, rows, files, occurrences).
|
|
10
|
+
|
|
11
|
+
**Check:** is each such number empirically verified against the source (a `grep -c`, a query, a file listing) rather than estimated or recalled?
|
|
12
|
+
|
|
13
|
+
**Korrektur:** re-derive every concrete number from the source before finalizing the spec; replace estimates with the verified count, or mark the claim as an explicit assumption to confirm during implementation.
|
|
14
|
+
|
|
15
|
+
## Vertikal-Slice-Vollständigkeit (decompose-readiness)
|
|
16
|
+
|
|
17
|
+
The convention section `to-issues` reads at runtime (it references `spec-completeness.md` §Vertikal-Slice-Vollständigkeit). Seeded project-neutral; grow it with your project's incidents over time.
|
|
18
|
+
|
|
19
|
+
**Trigger:** an artefact is about to be decomposed by `to-issues` — regardless of entry point (a `to-prd` PRD, an external PRD, a raw issue, a mechanical file bundle).
|
|
20
|
+
|
|
21
|
+
**Provenance-independent:** the contract checks the artefact's **form**, never which tool produced it. Grill depth (none / light / adversarial) is the entering person's choice — `to-issues` re-derives readiness from the artefact, it does not require a specific upstream step to have run.
|
|
22
|
+
|
|
23
|
+
**Decompose-readiness — always (every artefact class):**
|
|
24
|
+
- Each user-facing slice is a tracer-bullet outcome sentence ("<user action> → <visible result>"), not a layer name ("Config UI", "Backend resolver").
|
|
25
|
+
- ≥1 acceptance criterion per slice.
|
|
26
|
+
- Blast radius estimated per slice (~N files from recon/grep, not a guess).
|
|
27
|
+
- Seam-ownership flagged: does a slice replace/unify/retire a central mechanism? → its own grill-needed (HITL) slice, never hidden in a behavior-preserving tweak.
|
|
28
|
+
- Each byte-neutral/prep slice names the half it defers + the later slice that closes it.
|
|
29
|
+
|
|
30
|
+
**Mechanical-bundle minimum** (a file-list / refactor with no domain scope — e.g. shrinking files under a size/lint gate):
|
|
31
|
+
- Anchor/leaf header = one sentence *why* (e.g. "bring files over the size gate under it, behavior-neutral").
|
|
32
|
+
- Per file-slice: outcome title + short what + AC (usually "behavior unchanged + gate satisfied + tests green") + blast radius.
|
|
33
|
+
- Seam-check explicit ("no central mechanism replaced", or name it → then grill that slice).
|
|
34
|
+
- The domain grill is **skippable only** when the blast radius is estimable **and** small **and** no seam is touched; otherwise the slice is HITL with the open structural questions. No open-questions section is needed when nothing is open.
|
|
35
|
+
|
|
36
|
+
**Anti-pattern:** `to-issues` rubber-stamping a pre-cut table — the table is only "done" when every user-facing row passes the trace against the code.
|
|
37
|
+
|
|
38
|
+
## Self-Critique-Check
|
|
39
|
+
|
|
40
|
+
**Trigger:** the spec/PRD contains a slice/phase table or decomposes into multiple PRs/issues.
|
|
41
|
+
|
|
42
|
+
**Check:** is every user-facing slice a tracer-bullet outcome (not a layer name)? Does every byte-neutral slice name its deferred half + closing slice? Is blast radius estimated and seam-ownership flagged per slice?
|
|
43
|
+
|
|
44
|
+
**Korrektur:** reformulate layer-only slices as outcomes or split them; carve a new slice for any uncovered half; mark a seam-replacing slice as its own HITL slice.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Project layer — spec-self-critique
|
|
2
|
+
|
|
3
|
+
The generic `spec-self-critique` skill ships the 12-point checklist (the check *intents* + the structure). This file is the **project layer**: it enriches each point with project-specific incidents, grep patterns, conventions, and extra sub-checks. The skill reads it at runtime; with this file present it runs the full pass instead of warning that the layer is absent.
|
|
4
|
+
|
|
5
|
+
> **Authoritative `/retro` sink.** This is the **only** home for project-specific `spec-self-critique` checks. `/retro` appends new rules/incidents **here**, below the relevant point — never into the generic skill skeleton. The skeleton stays portable.
|
|
6
|
+
|
|
7
|
+
The headings below are stable append anchors (points 1–12, matching the generic checklist). They start empty; they fill in over time via `/retro`.
|
|
8
|
+
|
|
9
|
+
## Point 1
|
|
10
|
+
<!-- /retro appends project-specific checks for this point here -->
|
|
11
|
+
|
|
12
|
+
## Point 2
|
|
13
|
+
<!-- /retro appends project-specific checks for this point here -->
|
|
14
|
+
|
|
15
|
+
## Point 3
|
|
16
|
+
<!-- /retro appends project-specific checks for this point here -->
|
|
17
|
+
|
|
18
|
+
## Point 4
|
|
19
|
+
<!-- /retro appends project-specific checks for this point here -->
|
|
20
|
+
|
|
21
|
+
## Point 5
|
|
22
|
+
<!-- /retro appends project-specific checks for this point here -->
|
|
23
|
+
|
|
24
|
+
## Point 6
|
|
25
|
+
<!-- /retro appends project-specific checks for this point here -->
|
|
26
|
+
|
|
27
|
+
## Point 7
|
|
28
|
+
<!-- /retro appends project-specific checks for this point here -->
|
|
29
|
+
|
|
30
|
+
## Point 8
|
|
31
|
+
<!-- /retro appends project-specific checks for this point here -->
|
|
32
|
+
|
|
33
|
+
## Point 9
|
|
34
|
+
<!-- /retro appends project-specific checks for this point here -->
|
|
35
|
+
|
|
36
|
+
## Point 10
|
|
37
|
+
<!-- /retro appends project-specific checks for this point here -->
|
|
38
|
+
|
|
39
|
+
## Point 11
|
|
40
|
+
<!-- /retro appends project-specific checks for this point here -->
|
|
41
|
+
|
|
42
|
+
## Point 12
|
|
43
|
+
<!-- /retro appends project-specific checks for this point here -->
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Triage Labels
|
|
2
|
+
|
|
3
|
+
The skills speak in terms of five canonical triage roles, but only two are ever applied as issue labels. This file maps those two roles to the actual label strings used in this repo's issue tracker.
|
|
4
|
+
|
|
5
|
+
| Label in mattpocock/skills | Label in our tracker | Meaning |
|
|
6
|
+
| --------------------------- | --------------------- | ----------------------------------------- |
|
|
7
|
+
| `needs-info` | `needs-info` | Waiting on reporter for more information |
|
|
8
|
+
| `ready-for-agent` | `ready-for-agent` | Fully specified, ready for an AFK agent |
|
|
9
|
+
|
|
10
|
+
**Board status is authoritative** for the remaining three canonical roles — they are never applied as labels:
|
|
11
|
+
|
|
12
|
+
- `needs-triage` — the tracker's initial/backlog status covers this.
|
|
13
|
+
- `ready-for-human` — most AFK-agent workflows don't split human-work out as a label; if yours does, add it back as a third row.
|
|
14
|
+
- `wontfix` — close the issue instead of labelling it.
|
|
15
|
+
|
|
16
|
+
When a skill mentions a role (e.g. "apply the AFK-ready triage label"), use the corresponding label string from the table above if it's one of the two active roles; for any other role, use the tracker's status field or close the issue instead of adding a label.
|
|
17
|
+
|
|
18
|
+
Edit the right-hand column, or re-add a row, to match whatever vocabulary you actually use.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Workflow
|
|
2
|
+
|
|
3
|
+
Use this section as the entry-point map for agent-assisted work. The individual skills carry the detailed mechanics; this overview helps choose the right starting point.
|
|
4
|
+
|
|
5
|
+
## Entry Points
|
|
6
|
+
|
|
7
|
+
- **Unsure which skill fits?** Ask `ask-matt` — a router over every skill in this list, with a recommended starting point and why.
|
|
8
|
+
- **A new build whose size is unclear** (a new app, a big cross-cutting feature, an unclear where-to-start): run `scale-check` — a short plain-language dialog that routes it to a program, a feature, a single slice, or a bug, and hands back a paste-ready start prompt.
|
|
9
|
+
- **New capability or unclear change:** start with `grill-with-docs` when the domain language or decisions need sharpening, then publish the agreed shape with `to-prd`.
|
|
10
|
+
- **A slice hinges on an unresolved fact or trade-off before it can be built:** clear it first — a binary yes/no question against real code/runtime/platform with `verify-spike`, a bounded "which option" choice with `decision-gate`.
|
|
11
|
+
- **Existing plan, PRD, or ready issue:** use `to-issues` to split it into independently buildable tracer-bullet slices.
|
|
12
|
+
- **A Program-PRD with a wave plan:** use `to-waves` to unfold it into named wave stubs + slice leaves on the board, after a chat preview gate that shows the whole plan before any write.
|
|
13
|
+
- **A backlog of open issues needs clustering into themed waves:** use `board-to-waves`.
|
|
14
|
+
- **A whole wave anchor (file-disjoint slices, specs already locked) to build, verify and land end-to-end — often AFK:** use `orchestrate-wave` — it dispatches implementers per slice, integrates serially, verifies centrally, and lands. (A single slice just goes to `tdd`.)
|
|
15
|
+
- **Bugs or requests piling up that you didn't create:** use `triage` to move them into agent-ready issues.
|
|
16
|
+
- **Bug or regression:** use `diagnose` to reproduce, minimize, hypothesize, instrument, fix, and regression-test.
|
|
17
|
+
- **A design question needs a runnable answer (state, business logic, a UI you have to see):** spike it with `prototype`, then fold what you learned back in.
|
|
18
|
+
- **Multi-session build from a PRD or issue:** use `implement` to drive `tdd` end-to-end, one red-green slice at a time.
|
|
19
|
+
- **Implementation slice:** use `tdd` for one behavior at a time: RED, GREEN, then refactor.
|
|
20
|
+
- **Finished slice:** use `wrapup` to prepare the branch, PR, and cleanup steps your repo expects.
|
|
21
|
+
- **Kit release:** use `kit-release` to derive the shipped delta, confirm Semver, regenerate the manifest, run all gates, and then hand landing to `wrapup`.
|
|
22
|
+
- **A huge, foggy effort, too big for one session:** use `wayfinder` — it charts it as a shared map of investigation tickets, resolving one per session.
|
|
23
|
+
|
|
24
|
+
## Routing Rule
|
|
25
|
+
|
|
26
|
+
Prefer the smallest workflow that produces a clear next action. A tiny fix can go straight to `tdd`; a cross-cutting feature should become a PRD and then slices before implementation. When a skill reports missing project context, run `setup-workflow` again and fill only the missing stub.
|
|
27
|
+
|
|
28
|
+
## Depth Ladder
|
|
29
|
+
|
|
30
|
+
- **Light:** direct `tdd` for a small, well-understood change.
|
|
31
|
+
- **Medium:** `to-issues` for a ready artefact that needs slicing.
|
|
32
|
+
- **Deep:** `grill-with-docs` followed by `to-prd` and `to-issues` when terminology, contracts, rollout order, or ownership are still uncertain.
|
|
33
|
+
- **Gate:** insert `verify-spike` or `decision-gate` before any depth level when a slice hinges on an unresolved fact or trade-off.
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: spec-self-critique
|
|
3
|
+
"description": "Use AFTER writing or editing a spec (a `SPEC.md`/`PLAN.md` or any spec/design doc), BEFORE asking the user to review — runs a 12-point structural Self-Critique checklist, fixes issues inline, and emits a visible summary. Enriches each check from a project layer if one is present. Triggers right after a spec has been written. NOT for reviewing finished code/diffs (code-review) — this pass runs on the spec text itself."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Spec Self-Critique
|
|
7
|
+
|
|
8
|
+
A portable, structural self-review pass over a freshly written spec/plan. The **generic 12-point skeleton** below ships as-is; a **project layer** (if present) enriches each point with project-specific incidents, grep patterns, conventions, and extra sub-checks.
|
|
9
|
+
|
|
10
|
+
## When to invoke
|
|
11
|
+
|
|
12
|
+
- After a spec was written/edited (a `SPEC.md` / `PLAN.md`, or a spec/design doc), BEFORE the user-review gate.
|
|
13
|
+
|
|
14
|
+
## Step 0 — Project-layer probe
|
|
15
|
+
|
|
16
|
+
First, check whether a project layer exists: from the project root, look for `docs/agents/skills/spec-self-critique.md`.
|
|
17
|
+
|
|
18
|
+
- **Present** → **full pass**: run the 12 generic checks AND apply the per-point enrichment that file defines (incidents, grep patterns, extra sub-checks).
|
|
19
|
+
- **Absent** → **base pass**: run the 12 generic checks only, then add this one-line warning to the summary:
|
|
20
|
+
> ⚠ No project layer found (`docs/agents/skills/spec-self-critique.md`) — only the generic base checks ran. `/setup-workflow` creates the layer; it fills in project-specific content via `/retro`.
|
|
21
|
+
|
|
22
|
+
> **Routing — keep this skeleton clean.** Project-specific checks, incidents, and grep patterns belong in the project layer (`docs/agents/skills/spec-self-critique.md`), **NOT here**. `/retro` appends new project-specific lore to the project layer, never into this generic skeleton.
|
|
23
|
+
|
|
24
|
+
## Altitude — a portable kit concept
|
|
25
|
+
|
|
26
|
+
The generic skeleton recognizes two spec altitudes: a **Feature-PRD** (the
|
|
27
|
+
default — every point above and below assumes this) and a **Program-PRD**
|
|
28
|
+
(marked `<!-- prd: program -->`, produced by the kit's `scale-check` →
|
|
29
|
+
`grill-with-docs` → `to-prd` program route — a native anchor over a
|
|
30
|
+
multi-wave `## Wellenplan`). This is a **portable kit concept**, not a
|
|
31
|
+
project-specific rule, so it stays **in this generic skeleton** — the
|
|
32
|
+
"project-specific → project layer" routing rule above is about *this
|
|
33
|
+
project's* incidents/grep patterns, not about a kit-wide spec shape the
|
|
34
|
+
skill itself already knows.
|
|
35
|
+
|
|
36
|
+
Two points read differently at Program-Altitude — both get a dedicated
|
|
37
|
+
fixture in `scenarios.md`:
|
|
38
|
+
|
|
39
|
+
- **Point 3 (Scope)** at `prd: program`: scope is not "small enough for one
|
|
40
|
+
plan" — it is "each wave holds 2–7 slices; the program splits via its wave
|
|
41
|
+
plan, the PRD itself is never split."
|
|
42
|
+
- **Point 12 (Vertical-slice completeness)** at `prd: program`: reads against
|
|
43
|
+
**Wellenplan rows**, not a slice/PR table — each wave is an outcome
|
|
44
|
+
cut/tracer, never a layer cut ("a backend wave" is the anti-pattern); an
|
|
45
|
+
enabler wave names the half it cuts off and the outcome wave that closes it.
|
|
46
|
+
|
|
47
|
+
Every other point runs unchanged at either altitude.
|
|
48
|
+
|
|
49
|
+
## How to invoke
|
|
50
|
+
|
|
51
|
+
Read the most recently written/edited spec in full. Walk the 12-point checklist (points 1–12; **8b/8c are sub-checks of point 8**, not main points). Per point:
|
|
52
|
+
|
|
53
|
+
1. Decide: does the spec trigger this rule?
|
|
54
|
+
2. If yes: run the check.
|
|
55
|
+
3. If violated: fix the spec inline (Edit tool, not "TODO later").
|
|
56
|
+
4. Note the correction for the summary.
|
|
57
|
+
|
|
58
|
+
End with a visible summary in the chat:
|
|
59
|
+
|
|
60
|
+
```
|
|
61
|
+
Self-Critique complete — <N> corrections:
|
|
62
|
+
- Point <X>: <short description>
|
|
63
|
+
- ...
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
or, if none were needed: `Self-Critique complete — no corrections needed.` (append the Step-0 layer-absent warning if it applied). THEN ask the user-review question.
|
|
67
|
+
|
|
68
|
+
## The 12-point checklist
|
|
69
|
+
|
|
70
|
+
**1. Placeholder scan + empirical re-check**
|
|
71
|
+
Scan for `TBD` / `TODO` / "später" / "fill in details" / vague requirements → fix inline. Plus, when applicable:
|
|
72
|
+
- **Cited counts** ("24 call-sites: 6 start, 8 succeed, …") → re-verify each empirically (`grep`); recon from the brainstorming phase can be stale, and wrong numbers mislead the effort estimate.
|
|
73
|
+
- **Folder move / rename** → broaden the caller-audit grep (search the path-segment without a `from …`-anchor, to catch mocks, dynamic imports, type-only imports) AND require a typecheck-backstop step right after the move (path-depth breaks inside the moved files aren't found by a caller grep).
|
|
74
|
+
- **Cited prior diagnosis** (issue body, investigation, memory snapshot, earlier plan) → verify each core claim empirically before finalizing. Such artifacts are hypotheses, not validated facts; drift compounds if left unchecked.
|
|
75
|
+
- **Risk mitigation** → it must name a concretely checkable **output string**, not just an action ("rowCount is 2307" is checkable; "rowCount > 1000" is a claim about a claim).
|
|
76
|
+
Skip only if none of these apply.
|
|
77
|
+
|
|
78
|
+
**2. Internal consistency**
|
|
79
|
+
Do sections contradict each other? Does the architecture match the feature description? Do numbers/orders agree between tables and prose?
|
|
80
|
+
|
|
81
|
+
**3. Scope check**
|
|
82
|
+
Small enough for **one** implementation plan, or must it split into sub-specs?
|
|
83
|
+
**At Program-Altitude** (`prd: program`) this reads differently — see
|
|
84
|
+
"Altitude" above: each wave holds 2–7 slices, the program splits via its wave
|
|
85
|
+
plan, and the PRD itself is never split.
|
|
86
|
+
|
|
87
|
+
**4. Ambiguity check**
|
|
88
|
+
Could a requirement be read two ways? If so, pick one interpretation and make it explicit.
|
|
89
|
+
|
|
90
|
+
**5. State transitions**
|
|
91
|
+
*Trigger:* the spec mentions "Live", "SSE", "WebSocket", "Polling", "EventSource", "Realtime", "Stream", or incoming updates.
|
|
92
|
+
*Check:* are all transitions played through — `idle → running → awaiting_decision → succeeded | failed` — plus `mid-flight reload`, `multi-tab parallel`, `connection-loss + reconnect`, `aborted`?
|
|
93
|
+
|
|
94
|
+
**6. Convention scope**
|
|
95
|
+
*Trigger:* the spec introduces a new pattern, convention, single-entry broker, wrapper, or consistency layer.
|
|
96
|
+
*Check:* is it explicitly scoped — applied app-wide vs only touched surfaces? Does the spec require a follow-up item for the untouched surfaces (in the spec body, not retroactively)?
|
|
97
|
+
|
|
98
|
+
**7. User walk-through**
|
|
99
|
+
*Trigger:* the spec has UI stages, wizards, or multi-step user interactions.
|
|
100
|
+
*Check:* are the sub-steps per UI stage walked through — what does the user see at each stage — not just the data model?
|
|
101
|
+
|
|
102
|
+
**8. Project-convention check**
|
|
103
|
+
*Trigger:* always.
|
|
104
|
+
*How:* iterate your project's documented conventions. Default location: from the project root, `docs/conventions/*.md`. For each convention file that carries a `## Self-Critique-Check` block (format: **Trigger / Check / Korrektur**):
|
|
105
|
+
1. Evaluate its Trigger against the current spec.
|
|
106
|
+
2. On match: run its Check. On violation: fix the spec inline + note it.
|
|
107
|
+
3. A convention with no such block → skip it non-blocking + collect a warning ("convention `<file>` is missing a `## Self-Critique-Check` block").
|
|
108
|
+
No conventions directory / no blocks (e.g. a fresh project) → **soft skip** (non-blocking). Emit collected warnings at the end of the pass.
|
|
109
|
+
|
|
110
|
+
**8b. Marker-wording check**
|
|
111
|
+
*Trigger:* a convention mandates a header marker comment.
|
|
112
|
+
*Check:* the spec's marker must be copied **verbatim** from the convention, not paraphrased. Open the convention, compare the marker block 1:1, fix inline on any drift (drift makes the convention worthless as the single source of truth).
|
|
113
|
+
|
|
114
|
+
**8c. Structurally-trivial post-invariant**
|
|
115
|
+
*Trigger:* the spec has aggregation functions with post-invariants.
|
|
116
|
+
*Check:* for each post-invariant, can it ever fire under the current code path? Play the path through (all branches, all math ranges). If it is structurally impossible to violate under the current code, drop it or replace it with a property test (a property fires on every regression; a structurally-true post never does).
|
|
117
|
+
|
|
118
|
+
**9. Primitive recon (DRY)**
|
|
119
|
+
*Trigger:* the spec introduces a new UI primitive, hook, component, helper, repo function, or service — OR substantially touches (≥30 LOC) an existing file.
|
|
120
|
+
*Check:* did you `grep`/`ls` for an existing primitive/helper with overlapping responsibility (including in callers/pages, not just component dirs)? If one exists → switch the spec to reuse it. If a pattern is replicated 3+× → require a helper-extraction acceptance-criterion.
|
|
121
|
+
|
|
122
|
+
**10. User-action feedback**
|
|
123
|
+
*Trigger:* the spec describes a user action (click, submit, import, bulk op, setup run) that triggers a ≥2-step process.
|
|
124
|
+
*Check:* does the spec document, per sub-step, what the user sees on screen — progress, retry/throttle visibility (esp. external APIs or long waits), mode-switch visibility (e.g. bulk → per-item fallback), and a "why is this counter stalled" hint for per-resource paths?
|
|
125
|
+
|
|
126
|
+
**11. Live-verify bug-plausibility**
|
|
127
|
+
*Trigger:* the spec has a live-verify block with a bug-variant + an expected property failure.
|
|
128
|
+
*Check:* play the bug-variant through — does it actually change the target property (e.g. does it break the asserted ordering/monotonicity)? Is only one direction sharp? If the variant does NOT violate the property, pick a variant that does and fix the spec inline (a wrong variant yields a passing live-verify that catches no real regression).
|
|
129
|
+
|
|
130
|
+
**12. Vertical-slice completeness**
|
|
131
|
+
*Trigger:* the spec/PRD has a slice/phase table or splits into multiple PRs.
|
|
132
|
+
*Check:*
|
|
133
|
+
- (a) each *user-facing* slice = a tracer bullet "`<user action> → <visible result>`", **not** a layer name ("config UI", "backend resolver");
|
|
134
|
+
- (b) each byte-neutral/infra slice names its **omitted half** + the **closing follow-up slice** (otherwise the connecting path falls between two slices);
|
|
135
|
+
- (c) the first outcome slice after ≥1 prep slice is traced against the code with a concrete value (`grep`/Read), not trusted as "config-driven".
|
|
136
|
+
*Correction:* reword/split a layer-only slice; pull in a new slice for an uncovered half.
|
|
137
|
+
**At Program-Altitude** (`prd: program`), apply (a)–(c) analogously to
|
|
138
|
+
**Wellenplan rows** instead of a slice table — see "Altitude" above: each wave
|
|
139
|
+
is an outcome cut/tracer, never a layer cut, and an enabler wave names both
|
|
140
|
+
the half it omits and the outcome wave that closes it.
|
|
141
|
+
|
|
142
|
+
**Gate home.** This skill runs **automatically as the mandatory last step of `to-prd`** (on the Draft-PRD) — the visible two-line summary is required **before** the user-review question. The **slice-completeness gate (point 12)** additionally sits in `to-issues`. The skill stays **standalone-callable** for manual spec/PLAN reviews.
|
|
143
|
+
|
|
144
|
+
## Anti-patterns of this skill
|
|
145
|
+
|
|
146
|
+
- **"Skipped self-critique because the spec is small"** — it runs on mini-specs too. Cost: 2–3 min; payoff: structural bugs caught in the spec phase.
|
|
147
|
+
- **"Made corrections silently inline, no summary"** — the visible summary is part of acceptance. A silent pass is indistinguishable from a skipped one.
|
|
148
|
+
- **"Improvised what a convention would say"** — if a convention file has no `## Self-Critique-Check` block, skip it non-blocking + collect a warning. Do not invent the rule.
|
|
149
|
+
|
|
150
|
+
## Verification fixtures
|
|
151
|
+
|
|
152
|
+
See `scenarios.md` in this skill dir for project-neutral fixtures (one per check) — walk them when refactoring the checklist. If a project layer is present, it may carry richer, project-specific scenarios.
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# Verification fixtures — spec-self-critique (generic)
|
|
2
|
+
|
|
3
|
+
**Fixtures only — no new rules here.** Each fragment is a synthetic, project-neutral spec snippet that violates **exactly one** check. When the skill works, it should trigger the named point and name it in the summary. Walk these when refactoring the checklist. New *project-specific* checks/scenarios go in the project layer (`docs/agents/skills/spec-self-critique.md`), never here.
|
|
4
|
+
|
|
5
|
+
## Point 1 — placeholder / unverified count
|
|
6
|
+
> "Rename `oldUtil` → `newUtil` across the 9 call-sites and update imports."
|
|
7
|
+
|
|
8
|
+
Violates 1 (cited count not re-verified; rename = caller-audit + typecheck-backstop). Expected: *"Punkt 1: '9 call-sites' nicht empirisch belegt — grep + breiter Caller-Audit + Typecheck-Backstop nach dem Move ergänzt."*
|
|
9
|
+
|
|
10
|
+
## Point 2 — internal consistency
|
|
11
|
+
> "Section A: the cache TTL is 60s. Section B's diagram labels the same cache 600s."
|
|
12
|
+
|
|
13
|
+
Violates 2. Expected: *"Punkt 2: widersprüchliche TTL (60s vs 600s) — vereinheitlicht."*
|
|
14
|
+
|
|
15
|
+
## Point 3 — scope
|
|
16
|
+
> "This spec covers: new auth provider, a billing rewrite, a dashboard redesign, and a data migration."
|
|
17
|
+
|
|
18
|
+
Violates 3. Expected: *"Punkt 3: zu groß für einen Plan — in Sub-Specs zerlegen."*
|
|
19
|
+
|
|
20
|
+
## Point 3 (Program-Altitude) — a wave outgrows the band
|
|
21
|
+
> "`<!-- prd: program -->` Program-PRD. Wellenplan: Welle 1 covers 9 slices
|
|
22
|
+
> across two subsystems; Welle 2 covers 3 slices."
|
|
23
|
+
|
|
24
|
+
Violates 3 at Program-Altitude (a wave over the 2–7 slice band needs
|
|
25
|
+
splitting into two waves; the PRD itself stays unsplit). Expected: *"Punkt 3
|
|
26
|
+
(Programm-Altitude): Welle 1 mit 9 Slices sprengt den 2–7-Rahmen — in zwei
|
|
27
|
+
Wellen aufgeteilt; das PRD selbst bleibt ungesplittet."*
|
|
28
|
+
|
|
29
|
+
## Point 4 — ambiguity
|
|
30
|
+
> "When the request fails, retry it a few times before giving up."
|
|
31
|
+
|
|
32
|
+
Violates 4. Expected: *"Punkt 4: 'a few times' mehrdeutig — auf konkrete Zahl + Backoff festgelegt."*
|
|
33
|
+
|
|
34
|
+
## Point 5 — state transitions
|
|
35
|
+
> "New live progress indicator: on start a spinner appears, on finish a green check."
|
|
36
|
+
|
|
37
|
+
Violates 5 (only `running → succeeded`). Expected: *"Punkt 5: Live-Feature, nur Erfolgs-Pfad — failed / reload / multi-tab / connection-loss / aborted ergänzt."*
|
|
38
|
+
|
|
39
|
+
## Point 6 — convention scope
|
|
40
|
+
> "Introduce a `withRetry()` wrapper. Apply it in `serviceA.fetch()` and `serviceB.fetch()`."
|
|
41
|
+
|
|
42
|
+
Violates 6 (no app-wide-vs-touched scope, no follow-up). Expected: *"Punkt 6: Pattern-Scope nicht erklärt — explizit nur diese 2 + Followup für den Rest."*
|
|
43
|
+
|
|
44
|
+
## Point 7 — user walk-through
|
|
45
|
+
> "New multi-step onboarding wizard at `/onboarding`. Data model: a 3-field form posted to `/api/onboard`."
|
|
46
|
+
|
|
47
|
+
Violates 7 (only data model). Expected: *"Punkt 7: kein User-Walk-Through der Wizard-Stufen — pro Stufe ergänzt, was der User sieht."*
|
|
48
|
+
|
|
49
|
+
## Point 8 — project convention (+ 8b marker, 8c trivial post)
|
|
50
|
+
> "Refactor an aggregation module. Pre-invariant: `typeof rows[0]?.id === 'string'` (already guaranteed by the typed signature). Post-invariant: `out.length === rows.length` where the body is `for (const r of rows) out.push(...)`."
|
|
51
|
+
|
|
52
|
+
Violates 8c (post structurally guaranteed by the loop) + 8b-style trivial pre. Expected: *"Punkt 8c: Post strukturell durch den Loop garantiert — gestrichen / Property-Test; triviale Pre entfernt."* (With a project layer present, point 8 also iterates that project's `## Self-Critique-Check` convention blocks.)
|
|
53
|
+
|
|
54
|
+
## Point 9 — primitive recon (DRY)
|
|
55
|
+
> "Build a new `FilterableList` component with sort + filter."
|
|
56
|
+
|
|
57
|
+
Violates 9 (no recon for an existing list/table primitive). Expected: *"Punkt 9: neues Primitiv ohne DRY-Recon — auf Wiederverwendung des Bestehenden geprüft/umgestellt."*
|
|
58
|
+
|
|
59
|
+
## Point 10 — user-action feedback
|
|
60
|
+
> "A 'Rebuild caches' button kicks off a 4-stage backend job (~2 min). On error: a toast."
|
|
61
|
+
|
|
62
|
+
Violates 10 (no per-step feedback). Expected: *"Punkt 10: ≥2-Schritt-Prozess ohne Sub-Step-Feedback — Schritt-Labels / Progress / Retry- bzw. Modus-Sichtbarkeit ergänzt."*
|
|
63
|
+
|
|
64
|
+
## Point 11 — live-verify bug-plausibility
|
|
65
|
+
> "Live-verify for percentile indices. Bug-variant: change `p80 = 0.8*n` to `0.6*n`. Expect the ordering check `p10 < p50 < p80 < p90` to fire."
|
|
66
|
+
|
|
67
|
+
Violates 11 (`0.5 < 0.6 < 0.9` stays monotone → property does NOT fire). Expected: *"Punkt 11: Variante erhält die Monotonie — Property feuert nicht; korrekte Variante (z.B. 0.8→0.95, bricht p80>p90) gewählt."*
|
|
68
|
+
|
|
69
|
+
## Point 12 — vertical-slice completeness
|
|
70
|
+
> "Slices: 1) Config UI · 2) Backend resolver · 3) Wire-up."
|
|
71
|
+
|
|
72
|
+
Violates 12 (layer names, no tracer-bullet, no traced outcome slice). Expected: *"Punkt 12: Layer-Namen statt Tracer-Bullets — als '<Aktion> → <sichtbares Ergebnis>' umformuliert; erste Outcome-Slice gegen Code getrace't."*
|
|
73
|
+
|
|
74
|
+
## Point 12 (Program-Altitude) — layer-cut waves
|
|
75
|
+
> "`<!-- prd: program -->` Program-PRD. Wellenplan: Welle 3 — 'Backend-Migration'. Welle 4 — 'Frontend-Rollout'."
|
|
76
|
+
|
|
77
|
+
Violates 12 at Program-Altitude (layer-cut waves, not outcome tracers; no
|
|
78
|
+
enabler/closing pairing named). Expected: *"Punkt 12 (Programm-Altitude):
|
|
79
|
+
'Backend-Migration'/'Frontend-Rollout' sind Layer-Schnitte, keine
|
|
80
|
+
Outcome-Tracer — Welle 3 als Enabler benannt (abgeschnittene Hälfte:
|
|
81
|
+
sichtbares Frontend-Verhalten) mit Welle 4 als schließender Outcome-Welle,
|
|
82
|
+
oder zu echten Outcome-Wellen umgeschnitten."*
|