@erclx/aitk 0.8.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/LICENSE +21 -0
- package/README.md +99 -0
- package/claude/.claude-plugin/plugin.json +19 -0
- package/claude/skills/bash-script/SKILL.md +96 -0
- package/claude/skills/bash-script/references/patterns.md +349 -0
- package/claude/skills/ci-workflow/SKILL.md +52 -0
- package/claude/skills/ci-workflow/references/workflows.md +74 -0
- package/claude/skills/claude-address-review/SKILL.md +107 -0
- package/claude/skills/claude-autoship/SKILL.md +137 -0
- package/claude/skills/claude-design-extract/SKILL.md +69 -0
- package/claude/skills/claude-design-propose/SKILL.md +75 -0
- package/claude/skills/claude-diagram/SKILL.md +126 -0
- package/claude/skills/claude-docs/SKILL.md +204 -0
- package/claude/skills/claude-feature/REQUIREMENT.md +35 -0
- package/claude/skills/claude-feature/SKILL.md +148 -0
- package/claude/skills/claude-groundwork/SKILL.md +148 -0
- package/claude/skills/claude-groundwork/references/folder-format.md +107 -0
- package/claude/skills/claude-memory-capture/SKILL.md +80 -0
- package/claude/skills/claude-memory-review/REQUIREMENT.md +37 -0
- package/claude/skills/claude-memory-review/SKILL.md +206 -0
- package/claude/skills/claude-orchestrate/SKILL.md +125 -0
- package/claude/skills/claude-pr-review/SKILL.md +150 -0
- package/claude/skills/claude-review/SKILL.md +136 -0
- package/claude/skills/claude-roadmap/SKILL.md +61 -0
- package/claude/skills/claude-roadmap/references/roadmap.md +52 -0
- package/claude/skills/claude-screencast/SKILL.md +160 -0
- package/claude/skills/claude-seed-sync/SKILL.md +141 -0
- package/claude/skills/claude-slides-draft/SKILL.md +62 -0
- package/claude/skills/claude-standards-audit/REQUIREMENT.md +33 -0
- package/claude/skills/claude-standards-audit/SKILL.md +79 -0
- package/claude/skills/claude-standards-audit/references/branch.md +49 -0
- package/claude/skills/claude-standards-audit/references/pr.md +124 -0
- package/claude/skills/claude-tasks/SKILL.md +123 -0
- package/claude/skills/claude-ui-test/SKILL.md +75 -0
- package/claude/skills/claude-ux-audit/SKILL.md +78 -0
- package/claude/skills/claude-worktree/SKILL.md +79 -0
- package/claude/skills/cli-script/SKILL.md +47 -0
- package/claude/skills/cli-script/references/template.md +43 -0
- package/claude/skills/create-rule/SKILL.md +68 -0
- package/claude/skills/create-skill/REQUIREMENT.md +30 -0
- package/claude/skills/create-skill/SKILL.md +24 -0
- package/claude/skills/create-snippet/SKILL.md +28 -0
- package/claude/skills/create-snippet/references/snippets.md +57 -0
- package/claude/skills/create-standard/SKILL.md +31 -0
- package/claude/skills/create-standard/references/standard.md +52 -0
- package/claude/skills/docs-sync/SKILL.md +87 -0
- package/claude/skills/git-branch/REQUIREMENT.md +38 -0
- package/claude/skills/git-branch/SKILL.md +60 -0
- package/claude/skills/git-branch/references/branch.md +49 -0
- package/claude/skills/git-commit/REQUIREMENT.md +33 -0
- package/claude/skills/git-commit/SKILL.md +51 -0
- package/claude/skills/git-commit/references/commit.md +63 -0
- package/claude/skills/git-followup/REQUIREMENT.md +38 -0
- package/claude/skills/git-followup/SKILL.md +35 -0
- package/claude/skills/git-issue/REQUIREMENT.md +38 -0
- package/claude/skills/git-issue/SKILL.md +69 -0
- package/claude/skills/git-issue/references/issue.md +84 -0
- package/claude/skills/git-pr/REQUIREMENT.md +37 -0
- package/claude/skills/git-pr/SKILL.md +119 -0
- package/claude/skills/git-pr/references/branch.md +49 -0
- package/claude/skills/git-pr/references/pr.md +124 -0
- package/claude/skills/git-ship/REQUIREMENT.md +34 -0
- package/claude/skills/git-ship/SKILL.md +39 -0
- package/claude/skills/git-split/REQUIREMENT.md +38 -0
- package/claude/skills/git-split/SKILL.md +160 -0
- package/claude/skills/git-split/references/branch.md +49 -0
- package/claude/skills/git-split/references/pr.md +124 -0
- package/claude/skills/git-stage/REQUIREMENT.md +36 -0
- package/claude/skills/git-stage/SKILL.md +74 -0
- package/claude/skills/git-stage/references/commit.md +63 -0
- package/claude/skills/git-worktree/REQUIREMENT.md +37 -0
- package/claude/skills/git-worktree/SKILL.md +120 -0
- package/claude/skills/migration-claude-md/SKILL.md +74 -0
- package/claude/skills/migration-context/SKILL.md +93 -0
- package/claude/skills/migration-standards/SKILL.md +75 -0
- package/claude/skills/project-commands/SKILL.md +73 -0
- package/claude/skills/session-resume/SKILL.md +36 -0
- package/claude/skills/setup-gov/SKILL.md +71 -0
- package/claude/skills/setup-indexes/SKILL.md +148 -0
- package/claude/skills/setup-init/SKILL.md +114 -0
- package/claude/skills/setup-plugins/SKILL.md +81 -0
- package/claude/skills/setup-plugins/references/plugin-catalog.md +53 -0
- package/claude/skills/setup-verify/SKILL.md +51 -0
- package/claude/skills/systematic-debugging/SKILL.md +70 -0
- package/claude/skills/toolkit-cli/SKILL.md +38 -0
- package/claude/skills/toolkit-feedback/SKILL.md +80 -0
- package/claude/skills/toolkit-operator/SKILL.md +45 -0
- package/claude/skills/toolkit-triage/SKILL.md +63 -0
- package/claude/skills/youtube-transcripts/SKILL.md +34 -0
- package/docs/agents.md +371 -0
- package/docs/ai-workflow.md +157 -0
- package/docs/index.md +20 -0
- package/docs/operating-model.md +106 -0
- package/docs/target-projects.md +183 -0
- package/docs/visual-design-workflow.md +136 -0
- package/docs/zshrc-aliases.md +65 -0
- package/governance/rules/claude/500-prose.md +12 -0
- package/governance/rules/claude/510-context.md +16 -0
- package/governance/rules/claude/520-wireframes.md +12 -0
- package/governance/rules/claude/530-requirements.md +11 -0
- package/governance/rules/claude/540-architecture.md +11 -0
- package/governance/rules/claude/550-design.md +11 -0
- package/governance/rules/claude/555-tasks.md +12 -0
- package/governance/rules/claude/560-diagrams.md +11 -0
- package/governance/rules/claude/570-skill.md +18 -0
- package/governance/rules/claude/580-readme.md +11 -0
- package/governance/rules/claude/590-rule-authoring.md +12 -0
- package/governance/rules/core/000-constitution.md +30 -0
- package/governance/rules/core/010-testing.md +35 -0
- package/governance/rules/core/020-concurrency.md +22 -0
- package/governance/rules/core/030-error-handling.md +31 -0
- package/governance/rules/core/040-performance.md +20 -0
- package/governance/rules/core/050-logging.md +20 -0
- package/governance/rules/core/060-naming.md +19 -0
- package/governance/rules/core/070-planning.md +13 -0
- package/governance/rules/core/080-config-comments.md +22 -0
- package/governance/rules/framework/200-react.md +51 -0
- package/governance/rules/framework/210-astro.md +41 -0
- package/governance/rules/framework/220-fastapi.md +43 -0
- package/governance/rules/framework/230-nextjs.md +48 -0
- package/governance/rules/framework/250-tailwind.md +32 -0
- package/governance/rules/framework/260-shadcn.md +34 -0
- package/governance/rules/lang/100-typescript.md +40 -0
- package/governance/rules/lang/110-python.md +42 -0
- package/governance/rules/lib/300-testing-ts.md +38 -0
- package/governance/rules/lib/310-zod.md +25 -0
- package/governance/rules/lib/320-tanstack-query.md +32 -0
- package/governance/rules/lib/330-testing-py.md +44 -0
- package/governance/rules/lib/340-pydantic.md +38 -0
- package/governance/rules/lib/350-security-web.md +31 -0
- package/governance/rules/ui/400-ui.md +34 -0
- package/governance/rules/ui/410-a11y.md +44 -0
- package/governance/rules/ui/420-forms.md +34 -0
- package/governance/rules/ui/430-ux-completeness.md +62 -0
- package/governance/stacks/astro.toml +2 -0
- package/governance/stacks/base.toml +2 -0
- package/governance/stacks/node.toml +2 -0
- package/governance/stacks/python-fastapi.toml +2 -0
- package/governance/stacks/python.toml +2 -0
- package/governance/stacks/react.toml +2 -0
- package/package.json +67 -0
- package/scripts/config.sh +11 -0
- package/scripts/core/bootstrap.sh +81 -0
- package/scripts/core/check-plugin-boundary.sh +45 -0
- package/scripts/core/check-skill-paths.sh +25 -0
- package/scripts/core/clean.sh +36 -0
- package/scripts/core/install-check.sh +93 -0
- package/scripts/core/regen-claude-copies.sh +26 -0
- package/scripts/core/regen-indexes.sh +10 -0
- package/scripts/core/regen-skill-references.sh +27 -0
- package/scripts/core/snapshot.sh +132 -0
- package/scripts/core/update.sh +35 -0
- package/scripts/core/verify.sh +201 -0
- package/scripts/docs/list.sh +129 -0
- package/scripts/gov/list.sh +234 -0
- package/scripts/lib/frontmatter.sh +30 -0
- package/scripts/lib/gov.sh +14 -0
- package/scripts/lib/sandbox-fixtures.sh +109 -0
- package/scripts/lib/sandbox-git.sh +73 -0
- package/scripts/lib/tooling.sh +24 -0
- package/scripts/lib/ui.sh +173 -0
- package/scripts/lib/worktree.sh +20 -0
- package/scripts/manage-sandbox.sh +453 -0
- package/scripts/snippets/create.sh +156 -0
- package/scripts/standards/list.sh +91 -0
- package/scripts/tooling/create.sh +109 -0
- package/scripts/tooling/ref.sh +141 -0
- package/scripts/tooling/verify.sh +179 -0
- package/snippets/claude/decision-memo.md +39 -0
- package/snippets/claude/feature-recap.md +19 -0
- package/snippets/claude/figma-steps.md +18 -0
- package/snippets/claude/orchestrator-resume.md +23 -0
- package/snippets/claude/orchestrator-sweep.md +10 -0
- package/snippets/compact-summary.md +5 -0
- package/snippets/create-snippet.md +7 -0
- package/snippets/decision-help.md +6 -0
- package/snippets/meta-prompt.md +14 -0
- package/snippets/research-prompt.md +7 -0
- package/snippets/session-notes.md +11 -0
- package/snippets/snippets.toml +6 -0
- package/snippets/step-by-step.md +10 -0
- package/snippets/web-research.md +21 -0
- package/src/claude/gitignore.ts +51 -0
- package/src/claude/seeds-list.ts +47 -0
- package/src/claude/seeds.ts +124 -0
- package/src/claude/settings.ts +151 -0
- package/src/cli-run.ts +43 -0
- package/src/cli.ts +111 -0
- package/src/commands/claude.ts +349 -0
- package/src/commands/design.ts +39 -0
- package/src/commands/docs.ts +59 -0
- package/src/commands/feedback-format.ts +23 -0
- package/src/commands/feedback.ts +103 -0
- package/src/commands/gov.ts +268 -0
- package/src/commands/indexes.ts +182 -0
- package/src/commands/init.ts +117 -0
- package/src/commands/pass-through.ts +39 -0
- package/src/commands/sandbox.ts +315 -0
- package/src/commands/slides.ts +106 -0
- package/src/commands/snippets.ts +236 -0
- package/src/commands/standards.ts +89 -0
- package/src/commands/sync.ts +211 -0
- package/src/commands/tasks.ts +185 -0
- package/src/commands/tooling.ts +432 -0
- package/src/commands/transcripts.ts +48 -0
- package/src/commands/wiki.ts +101 -0
- package/src/copy.ts +30 -0
- package/src/design/parse.ts +79 -0
- package/src/design/render.ts +170 -0
- package/src/docs/read.ts +59 -0
- package/src/exec.ts +17 -0
- package/src/frontmatter.ts +13 -0
- package/src/github-format.ts +13 -0
- package/src/github.ts +20 -0
- package/src/gov/adapter.ts +73 -0
- package/src/gov/install.ts +103 -0
- package/src/gov/payload.ts +39 -0
- package/src/gov/stacks.ts +124 -0
- package/src/indexes/frontmatter.ts +46 -0
- package/src/indexes/regen.ts +84 -0
- package/src/indexes/render.ts +181 -0
- package/src/indexes/walk.ts +111 -0
- package/src/init/flags.ts +66 -0
- package/src/init/plan.ts +128 -0
- package/src/init/run.ts +46 -0
- package/src/init/steps.ts +91 -0
- package/src/sandbox/coverage.ts +115 -0
- package/src/sandbox/expect.ts +412 -0
- package/src/slides/layouts.ts +391 -0
- package/src/slides/open.ts +18 -0
- package/src/slides/parse.ts +84 -0
- package/src/slides/render.ts +88 -0
- package/src/slides/styles.ts +44 -0
- package/src/snippets/adapter.ts +34 -0
- package/src/snippets/categories.ts +59 -0
- package/src/snippets/install.ts +125 -0
- package/src/snippets/list.ts +32 -0
- package/src/snippets/presets.ts +50 -0
- package/src/standards/adapter.ts +51 -0
- package/src/standards/index-refresh.ts +44 -0
- package/src/standards/install.ts +52 -0
- package/src/sync/check.ts +269 -0
- package/src/sync/engine.ts +416 -0
- package/src/sync/git.ts +204 -0
- package/src/sync/stamp.ts +202 -0
- package/src/sync/target.ts +79 -0
- package/src/sync/workflow.ts +201 -0
- package/src/target.ts +43 -0
- package/src/tasks/archive.ts +304 -0
- package/src/tooling/gitignore.ts +122 -0
- package/src/tooling/inject.ts +214 -0
- package/src/tooling/list.ts +39 -0
- package/src/tooling/manifest.ts +178 -0
- package/src/tooling/package.ts +166 -0
- package/src/tooling/scan.ts +186 -0
- package/src/transcripts/fetch.ts +156 -0
- package/src/transcripts/metadata.ts +54 -0
- package/src/transcripts/vtt.ts +114 -0
- package/src/ui.ts +187 -0
- package/src/wiki/init.ts +85 -0
- package/standards/architecture.md +41 -0
- package/standards/bundled/branch.md +49 -0
- package/standards/bundled/commit.md +63 -0
- package/standards/bundled/issue.md +84 -0
- package/standards/bundled/pr.md +124 -0
- package/standards/bundled/roadmap.md +52 -0
- package/standards/bundled/snippets.md +57 -0
- package/standards/bundled/standard.md +52 -0
- package/standards/context.md +132 -0
- package/standards/design.md +31 -0
- package/standards/diagrams.md +55 -0
- package/standards/index.md +21 -0
- package/standards/prose.md +122 -0
- package/standards/readme.md +163 -0
- package/standards/requirements.md +61 -0
- package/standards/rule.md +79 -0
- package/standards/skill.md +257 -0
- package/standards/tasks.md +140 -0
- package/standards/versioning.md +47 -0
- package/standards/wireframes.md +67 -0
- package/tooling/astro/configs/astro.config.mjs +17 -0
- package/tooling/astro/configs/eslint.config.js +79 -0
- package/tooling/astro/configs/playwright.config.ts +25 -0
- package/tooling/astro/configs/tsconfig.json +12 -0
- package/tooling/astro/configs/vitest.config.ts +22 -0
- package/tooling/astro/manifest.toml +32 -0
- package/tooling/astro/reference.md +60 -0
- package/tooling/base/configs/.editorconfig +5 -0
- package/tooling/base/configs/.github/pull_request_template.md +18 -0
- package/tooling/base/configs/.github/workflows/verify.yml +35 -0
- package/tooling/base/configs/.husky/commit-msg +1 -0
- package/tooling/base/configs/.husky/post-merge +61 -0
- package/tooling/base/configs/.husky/post-rewrite +21 -0
- package/tooling/base/configs/.husky/pre-commit +1 -0
- package/tooling/base/configs/.husky/pre-push +1 -0
- package/tooling/base/configs/.prettierrc +12 -0
- package/tooling/base/configs/.shellcheckrc +1 -0
- package/tooling/base/configs/.vscode/extensions.json +9 -0
- package/tooling/base/configs/.vscode/settings.json +3 -0
- package/tooling/base/configs/commitlint.config.js +11 -0
- package/tooling/base/configs/scripts/clean.sh +45 -0
- package/tooling/base/configs/scripts/update.sh +49 -0
- package/tooling/base/configs/scripts/verify.sh +64 -0
- package/tooling/base/manifest.toml +32 -0
- package/tooling/base/reference.md +114 -0
- package/tooling/base/seeds/.claude/context/ci.md +27 -0
- package/tooling/base/seeds/.claude/context/development.md +32 -0
- package/tooling/base/seeds/.cspell/project-terms.txt +0 -0
- package/tooling/base/seeds/.cspell/tech-stack.txt +19 -0
- package/tooling/base/seeds/.lintstagedrc +8 -0
- package/tooling/base/seeds/.prettierignore +0 -0
- package/tooling/base/seeds/cspell.json +20 -0
- package/tooling/claude/manifest.toml +11 -0
- package/tooling/claude/reference.md +62 -0
- package/tooling/claude/seeds/.claude/ARCHITECTURE.md +13 -0
- package/tooling/claude/seeds/.claude/DESIGN.md +62 -0
- package/tooling/claude/seeds/.claude/REQUIREMENTS.md +18 -0
- package/tooling/claude/seeds/.claude/context/index.md +8 -0
- package/tooling/claude/seeds/.claude/hooks/index-reminder.sh +43 -0
- package/tooling/claude/seeds/.claude/hooks/scratch-guard.sh +45 -0
- package/tooling/claude/seeds/.claude/hooks/standards-audit.sh +61 -0
- package/tooling/claude/seeds/.claude/hooks/tasks-index.sh +60 -0
- package/tooling/claude/seeds/.claude/settings.json +39 -0
- package/tooling/claude/seeds/.claude/tasks/index.md +8 -0
- package/tooling/claude/seeds/.claude/wireframes/index.md +8 -0
- package/tooling/claude/seeds/CLAUDE.md +87 -0
- package/tooling/claude/user/settings.template.json +10 -0
- package/tooling/claude/user/statusline-command.sh +53 -0
- package/tooling/python/configs/.coveragerc +14 -0
- package/tooling/python/configs/.python-version +1 -0
- package/tooling/python/configs/mypy.ini +6 -0
- package/tooling/python/configs/pytest.ini +4 -0
- package/tooling/python/configs/ruff.toml +15 -0
- package/tooling/python/configs/scripts/verify.sh +77 -0
- package/tooling/python/manifest.toml +16 -0
- package/tooling/python/reference.md +66 -0
- package/tooling/python/seeds/.cspell/tech-stack.txt +19 -0
- package/tooling/python/seeds/tests/test_smoke.py +2 -0
- package/tooling/vite-react/configs/playwright.config.ts +25 -0
- package/tooling/vite-react/configs/tsconfig.json +35 -0
- package/tooling/vite-react/configs/vite.config.ts +14 -0
- package/tooling/vite-react/configs/vitest.config.ts +26 -0
- package/tooling/vite-react/manifest.toml +21 -0
- package/tooling/vite-react/reference.md +55 -0
- package/tooling/vite-react/seeds/.cspell/project-terms.txt +1 -0
- package/tooling/vite-react/seeds/.cspell/tech-stack.txt +1 -0
- package/tooling/web/configs/.github/workflows/verify.yml +134 -0
- package/tooling/web/configs/.vscode/extensions.json +13 -0
- package/tooling/web/configs/.vscode/settings.json +10 -0
- package/tooling/web/configs/e2e/home.spec.ts +6 -0
- package/tooling/web/configs/e2e/screenshot.ts +41 -0
- package/tooling/web/configs/eslint.config.js +82 -0
- package/tooling/web/configs/scripts/screenshot.sh +28 -0
- package/tooling/web/configs/scripts/verify.sh +80 -0
- package/tooling/web/configs/src/test/setup.ts +8 -0
- package/tooling/web/manifest.toml +57 -0
- package/tooling/web/reference.md +95 -0
- package/tooling/web/seeds/.cspell/tech-stack.txt +18 -0
- package/tsconfig.json +14 -0
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Commit reference
|
|
3
|
+
description: Commit message format and type conventions
|
|
4
|
+
consumers: git-commit, git-stage
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Commit message reference
|
|
8
|
+
|
|
9
|
+
## Format
|
|
10
|
+
|
|
11
|
+
- Structure: `<type>(<scope>): <subject>`
|
|
12
|
+
- Casing: lowercase for `<type>`, `<scope>`, and first word of `<subject>`
|
|
13
|
+
- Subject: 72 characters maximum, no trailing period
|
|
14
|
+
|
|
15
|
+
## Types
|
|
16
|
+
|
|
17
|
+
- `feat`: new feature or capability
|
|
18
|
+
- `fix`: bug fix
|
|
19
|
+
- `refactor`: structural changes (not a fix or feature)
|
|
20
|
+
- `docs`: documentation only (README)
|
|
21
|
+
- `chore`: maintenance tasks (deps, tooling, configs)
|
|
22
|
+
- `perf`: performance improvements
|
|
23
|
+
- `test`: add or modify tests
|
|
24
|
+
- `style`: code formatting (whitespace, semicolons)
|
|
25
|
+
- `build`: build system changes (webpack, npm scripts)
|
|
26
|
+
- `ci`: CI/CD pipeline changes (GitHub Actions)
|
|
27
|
+
- `revert`: revert a previous commit
|
|
28
|
+
|
|
29
|
+
## Scope
|
|
30
|
+
|
|
31
|
+
- Single lowercase word representing a system component
|
|
32
|
+
- Prefer single word
|
|
33
|
+
- Use kebab-case only when two words are genuinely needed for specificity
|
|
34
|
+
- Do not use specific filenames as scopes
|
|
35
|
+
- Do not use a scope that duplicates the type
|
|
36
|
+
- Write scopes for release readability. They surface in `changelogithub` release notes.
|
|
37
|
+
|
|
38
|
+
## Subject
|
|
39
|
+
|
|
40
|
+
- Use imperative mood (`add` not `added`)
|
|
41
|
+
- Describe the actual technical change, not that something changed
|
|
42
|
+
- Do not use vague verbs (`improve`, `refine`, `enhance`)
|
|
43
|
+
- Do not repeat the scope in the subject line
|
|
44
|
+
- Use single quotes if quoting
|
|
45
|
+
- No backslash escaping or internal double quotes
|
|
46
|
+
- No conversational filler or introductory phrases
|
|
47
|
+
|
|
48
|
+
## Examples
|
|
49
|
+
|
|
50
|
+
### Correct
|
|
51
|
+
|
|
52
|
+
```plaintext
|
|
53
|
+
feat(api): add retry logic for failed webhooks # specific verb + clear change
|
|
54
|
+
fix(auth): update 'UserSession' validation logic # scoped + imperative + single quotes
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### Incorrect
|
|
58
|
+
|
|
59
|
+
```plaintext
|
|
60
|
+
fix(user-auth): Fixed the redirect loop. # wrong casing + period + multi-word scope
|
|
61
|
+
docs(docs): update the readme. # duplicate scope + period
|
|
62
|
+
docs(api): improve documentation # vague verb + lacks specificity
|
|
63
|
+
```
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: git-followup
|
|
3
|
+
description: What the follow-up push is for, the gaps it closes, and how it splits from opening a pull request
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Git followup requirement
|
|
7
|
+
|
|
8
|
+
## Gap
|
|
9
|
+
|
|
10
|
+
Without this skill, an edit made after a pull request is already open ships as a bare push. The body still describes the scope from before the edit, so a reviewer returning to the page reads a description the diff no longer matches. A reviewer who left comments gets no reply, and when a caller has already posted its own reply, a second one lands underneath it.
|
|
11
|
+
|
|
12
|
+
## Must
|
|
13
|
+
|
|
14
|
+
- Refuse unless the branch has an upstream and an open pull request, since every later step addresses one of the two
|
|
15
|
+
- Delegate the message to `git-commit` rather than composing one, so a follow-up commit reads like every other commit
|
|
16
|
+
- Sync the body when the new commit moves the scope, and the title when the shift makes it inaccurate
|
|
17
|
+
- Reply on the pull request when it carries review comments, and scan that reply for the banned characters before posting. The hook watches files and never sees a comment body on its way to the remote.
|
|
18
|
+
- Suppress the reply when the caller owns it, and still run the push and the body sync
|
|
19
|
+
|
|
20
|
+
## Must not
|
|
21
|
+
|
|
22
|
+
- Run on `main`
|
|
23
|
+
- Open a pull request. A missing one is the stop condition, not a step to add.
|
|
24
|
+
- Post a second reply when the caller has already replied
|
|
25
|
+
- Emit anything after the result line
|
|
26
|
+
|
|
27
|
+
## Guards
|
|
28
|
+
|
|
29
|
+
- On `main`: stop and say to switch to a pull request branch
|
|
30
|
+
- Nothing changed: stop
|
|
31
|
+
- No upstream: stop and name both recoveries
|
|
32
|
+
- No open pull request: stop and route to the skill that opens one
|
|
33
|
+
|
|
34
|
+
## Out of scope
|
|
35
|
+
|
|
36
|
+
- Opening the pull request, which `git-pr` owns and `git-ship` chains
|
|
37
|
+
- Deciding what to fix from a review, which `claude-address-review` owns. This skill is that flow's push leg and takes the fixes as already made.
|
|
38
|
+
- Grouping a multi-concern diff, which `git-stage` owns. A follow-up is one concern by definition, which is why this skill stages everything into a single commit.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: git-followup
|
|
3
|
+
description: Ships a small self-review edit on the current PR branch by staging, committing, pushing, and syncing the open PR, replying on the PR when it carries review comments. Use when asked to "ship a followup", "push the PR fix", "followup", or "commit and push this small change". Do NOT use when there is no open PR for the branch (use git-ship instead).
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Git followup
|
|
7
|
+
|
|
8
|
+
Ship a small self-review edit on the current PR branch in one pass.
|
|
9
|
+
|
|
10
|
+
When invoked with `reply-owned`, a caller such as `claude-address-review` posts
|
|
11
|
+
its own reply, so skip the comment in step 6. The push and body sync still run.
|
|
12
|
+
|
|
13
|
+
## Guards
|
|
14
|
+
|
|
15
|
+
- If `git branch --show-current` returns `main`, stop: `❌ On main. Switch to a PR branch first.`
|
|
16
|
+
- If `git status --porcelain` is empty, stop: `❌ No changes to ship.`
|
|
17
|
+
- If `git rev-parse --abbrev-ref --symbolic-full-name @{u} 2>/dev/null` is empty, stop: `❌ No upstream. Push the branch first or use git-ship.`
|
|
18
|
+
- If `gh pr view --json state -q '.state' 2>/dev/null` is not `OPEN`, stop: `❌ No open PR for this branch. Use git-ship to open one.`
|
|
19
|
+
|
|
20
|
+
## Sequence
|
|
21
|
+
|
|
22
|
+
1. Run `git status` to confirm the changes are intentional
|
|
23
|
+
2. Run `git add -A` to stage every change
|
|
24
|
+
3. Invoke `aitk:git-commit` to generate one conventional commit from the staged diff
|
|
25
|
+
4. Run `git push` to the tracking branch
|
|
26
|
+
5. Check for existing review comments: `gh api 'repos/{owner}/{repo}/pulls/<number>/comments' --jq 'length'`, resolving `<number>` from `gh pr view --json number`.
|
|
27
|
+
6. When invoked with `reply-owned`, skip this step's comment: the caller posts the reply. Otherwise, if the count is above zero, the followup addresses review feedback: post a one-line summary of the fix with `gh pr comment --body`, first scanning it for em dashes and semicolons and rewriting each since the hook does not see an inline comment body. If it is zero, run `gh pr view --json url,title,body` and update the body with `gh pr edit --body` when the new commit changes scope, and the title with `gh pr edit --title` when the scope shifted enough to make it inaccurate.
|
|
28
|
+
|
|
29
|
+
## After completion
|
|
30
|
+
|
|
31
|
+
Output one line:
|
|
32
|
+
|
|
33
|
+
```plaintext
|
|
34
|
+
✅ Followup shipped: <pr-url>
|
|
35
|
+
```
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: git-issue
|
|
3
|
+
description: What issue filing is for, the gaps it closes, and which reporting paths belong elsewhere
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Git issue requirement
|
|
7
|
+
|
|
8
|
+
## Gap
|
|
9
|
+
|
|
10
|
+
Without this skill, an issue takes the shape of whatever the session was saying. It arrives with no label, so triage cannot filter it, and without the sections a triage pass reads, so the reader has to reconstruct the problem from narrative. Prose bans hold on files the hook watches and not on text leaving through `gh`, so a banned character survives into a published artifact that then has to be edited on the remote.
|
|
11
|
+
|
|
12
|
+
## Must
|
|
13
|
+
|
|
14
|
+
- Read the issue reference and the prose standard before formatting
|
|
15
|
+
- Confirm a remote and an authenticated `gh` before composing, so the failure lands before a body is written rather than after
|
|
16
|
+
- Scan the title and body for banned characters as an explicit step. Reading the standard does not catch them, because the text is generated after the read.
|
|
17
|
+
- Map the type to exactly one label, so filing and filtering agree
|
|
18
|
+
- Ask once when the type is ambiguous between a bug and a task, since the label follows from it and a wrong label buries the issue
|
|
19
|
+
- Pass the body through a file and remove it afterward, so shell quoting cannot mangle it
|
|
20
|
+
|
|
21
|
+
## Must not
|
|
22
|
+
|
|
23
|
+
- Invent an issue from a thin session. Nothing concrete in context is a stop rather than a prompt to elaborate.
|
|
24
|
+
- File anywhere other than the current origin
|
|
25
|
+
- Open a pull request
|
|
26
|
+
- Emit anything after the result line
|
|
27
|
+
|
|
28
|
+
## Guards
|
|
29
|
+
|
|
30
|
+
- No concrete bug or task in session context: stop and say what to provide
|
|
31
|
+
- No remote: stop and name what `gh issue create` needs
|
|
32
|
+
- `gh` not authenticated: stop and name the command that authenticates
|
|
33
|
+
|
|
34
|
+
## Out of scope
|
|
35
|
+
|
|
36
|
+
- Reporting a toolkit defect from a target project, which `toolkit-feedback` owns. That path writes into the toolkit rather than the current repository.
|
|
37
|
+
- Triaging issues already filed, which `toolkit-triage` owns
|
|
38
|
+
- Opening a pull request, which `git-pr` owns
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: git-issue
|
|
3
|
+
description: Format a bug or task from the current session into a GitHub issue and file it on the current repo via `gh issue create`. Use when asked to "file an issue", "open an issue", "log this bug", "raise an issue", or "track this as an issue". Do NOT use to report a toolkit defect from a target project (that is `toolkit-feedback`), or to open a pull request (that is `git-pr`).
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Git issue
|
|
7
|
+
|
|
8
|
+
Format an issue from session context following the issue standard, then file it on the current repository with `gh issue create`.
|
|
9
|
+
|
|
10
|
+
## Context
|
|
11
|
+
|
|
12
|
+
Read these in parallel:
|
|
13
|
+
|
|
14
|
+
- `${CLAUDE_SKILL_DIR}/references/issue.md`: issue title, labels, body sections, and banned phrases
|
|
15
|
+
- `.claude/standards/prose.md` from the project root: prose conventions for all generated text
|
|
16
|
+
|
|
17
|
+
Read a standard from `${CLAUDE_SKILL_DIR}/../../standards/` instead when the project does not have it.
|
|
18
|
+
|
|
19
|
+
Then gather repo context in parallel:
|
|
20
|
+
|
|
21
|
+
- `git remote get-url origin 2>/dev/null || echo "NO_REMOTE"`
|
|
22
|
+
- `gh auth status >/dev/null 2>&1 && echo "AUTHED" || echo "NO_AUTH"`
|
|
23
|
+
|
|
24
|
+
## Guards
|
|
25
|
+
|
|
26
|
+
- If nothing in session context describes a concrete bug or task, stop: `❌ No issue in session context. Describe the bug or task, then re-invoke.`
|
|
27
|
+
- If `git remote get-url origin` returns `NO_REMOTE`, stop: `❌ No GitHub remote. gh issue create needs an origin.`
|
|
28
|
+
- If `gh auth status` returns `NO_AUTH`, stop: `❌ gh is not authenticated. Run gh auth login.`
|
|
29
|
+
- If the type is ambiguous between a bug and a task, ask one line before formatting.
|
|
30
|
+
|
|
31
|
+
## Response format
|
|
32
|
+
|
|
33
|
+
### Preview
|
|
34
|
+
|
|
35
|
+
- **Title:** `<type>: <subject>`
|
|
36
|
+
- **Label:** <bug or enhancement>
|
|
37
|
+
- **Analysis:** <one line on what the issue captures>
|
|
38
|
+
|
|
39
|
+
After outputting the preview, execute the final command immediately. Claude Code's tool permission dialog is the confirmation gate. Do not wait for user input.
|
|
40
|
+
|
|
41
|
+
### Pre-publish scan
|
|
42
|
+
|
|
43
|
+
Before running the final command, scan the title and body for banned characters and rewrite each occurrence:
|
|
44
|
+
|
|
45
|
+
- `—` (em dash): split into two sentences or use a comma
|
|
46
|
+
- `;` (semicolon): split into two sentences
|
|
47
|
+
|
|
48
|
+
These bans come from `.claude/standards/prose.md`. Reading it is not enough. The scan is an explicit step.
|
|
49
|
+
|
|
50
|
+
### Final command
|
|
51
|
+
|
|
52
|
+
Map a bug to `--label bug` and a task to `--label enhancement`.
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
mkdir -p .claude/.tmp/issue
|
|
56
|
+
cat <<'BODY' > .claude/.tmp/issue/body.md
|
|
57
|
+
<body following the issue.md sections>
|
|
58
|
+
BODY
|
|
59
|
+
gh issue create --title "<type>: <subject>" --label <bug or enhancement> --body-file .claude/.tmp/issue/body.md
|
|
60
|
+
rm -rf .claude/.tmp/issue
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## After execution
|
|
64
|
+
|
|
65
|
+
Respond with exactly one line:
|
|
66
|
+
|
|
67
|
+
`✅ Issue: <url>`
|
|
68
|
+
|
|
69
|
+
Do not add any other text.
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Issue reference
|
|
3
|
+
description: GitHub issue title, labels, and body conventions
|
|
4
|
+
consumers: git-issue
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Issue reference
|
|
8
|
+
|
|
9
|
+
## Title
|
|
10
|
+
|
|
11
|
+
- Format: `<type>: <subject>`
|
|
12
|
+
- Type is `bug` or `task`. Lowercase the type and the first word of the subject.
|
|
13
|
+
- Length: 72 characters maximum, no trailing period.
|
|
14
|
+
|
|
15
|
+
## Labels
|
|
16
|
+
|
|
17
|
+
- Apply `bug` for a defect and `enhancement` for a task or improvement.
|
|
18
|
+
- Both are GitHub default labels. A label that does not exist makes `gh` reject the issue. Create it once with `gh label create`.
|
|
19
|
+
- One label per issue unless a second genuinely applies.
|
|
20
|
+
|
|
21
|
+
## Content
|
|
22
|
+
|
|
23
|
+
- Use imperative mood and describe the actual defect or work, not that something is wrong.
|
|
24
|
+
- Do not open with "This issue," "I want," or "We should."
|
|
25
|
+
- Do not use buzzwords or speculative future scope.
|
|
26
|
+
- State observable behavior for a bug, not a guessed cause.
|
|
27
|
+
|
|
28
|
+
## Sections
|
|
29
|
+
|
|
30
|
+
- `## Summary`: one line naming what and why.
|
|
31
|
+
- `## Details`: for a bug, what happens versus what is expected. For a task, what to build.
|
|
32
|
+
- `## Context`: for a bug, repro steps or commands. For a task, the driving reason, or `none`.
|
|
33
|
+
- `## Proposed` (optional): one line naming a fix or approach. Omit when open.
|
|
34
|
+
|
|
35
|
+
## Formatting
|
|
36
|
+
|
|
37
|
+
- End every bullet with a period.
|
|
38
|
+
- Keep each section to one or two lines.
|
|
39
|
+
|
|
40
|
+
## Examples
|
|
41
|
+
|
|
42
|
+
### Correct (bug)
|
|
43
|
+
|
|
44
|
+
```markdown
|
|
45
|
+
## Summary
|
|
46
|
+
|
|
47
|
+
Fix the feedback CLI so it applies the `feedback` label.
|
|
48
|
+
|
|
49
|
+
## Details
|
|
50
|
+
|
|
51
|
+
`aitk feedback --github` opens an issue with no label, so `toolkit-triage` never lists it.
|
|
52
|
+
|
|
53
|
+
## Context
|
|
54
|
+
|
|
55
|
+
Run a piped `aitk feedback --github`, then check the issue carries no `feedback` label.
|
|
56
|
+
|
|
57
|
+
## Proposed
|
|
58
|
+
|
|
59
|
+
Pass `--label feedback` through the shared issue helper.
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### Correct (task)
|
|
63
|
+
|
|
64
|
+
```markdown
|
|
65
|
+
## Summary
|
|
66
|
+
|
|
67
|
+
Add a git-issue skill so a session can file an issue on the current repo.
|
|
68
|
+
|
|
69
|
+
## Details
|
|
70
|
+
|
|
71
|
+
Format an issue from session context and file it with `gh issue create`, next to git-pr in the git family.
|
|
72
|
+
|
|
73
|
+
## Context
|
|
74
|
+
|
|
75
|
+
The toolkit-issue skill only files on the toolkit repo. A general path is needed for target projects.
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Incorrect
|
|
79
|
+
|
|
80
|
+
```markdown
|
|
81
|
+
## Summary
|
|
82
|
+
|
|
83
|
+
This issue is about the feedback system being kind of broken, and we should probably make it more robust.
|
|
84
|
+
```
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: git-pr
|
|
3
|
+
description: What pull request generation is for, the gaps it closes, and what it requires upstream of itself
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Git PR requirement
|
|
7
|
+
|
|
8
|
+
## Gap
|
|
9
|
+
|
|
10
|
+
Without this skill, a pull request body is written from memory of the branch rather than from its diff, so it describes the intent and omits what the work turned into. Testing boxes get ticked from intent, which records what was meant to run instead of what ran, and a reviewer trusts the list. A second push either errors on create or opens a duplicate pull request, and banned characters survive into a body the hook never sees.
|
|
11
|
+
|
|
12
|
+
## Must
|
|
13
|
+
|
|
14
|
+
- Refuse a branch name that does not conform, since the name lands on the pull request permanently and renaming it afterward breaks the link
|
|
15
|
+
- Derive the title and body from the commits and the diff against main, with lockfiles excluded
|
|
16
|
+
- Run each check before writing its line, then state the result the run reported
|
|
17
|
+
- Leave a box unchecked only for a human-only case, naming which human and why on the same line
|
|
18
|
+
- Scan the title and body for banned characters as an explicit step, on top of reading the prose standard
|
|
19
|
+
- Detect an open pull request and edit it in place, so a follow-up push keeps the body in sync instead of failing
|
|
20
|
+
|
|
21
|
+
## Must not
|
|
22
|
+
|
|
23
|
+
- Tick a testing box from intent or from a past session. The box records a run.
|
|
24
|
+
- Put a request for the reviewer in the Testing list, since a request is not a result
|
|
25
|
+
- Create a second pull request when one is open
|
|
26
|
+
- Emit anything after the result line
|
|
27
|
+
|
|
28
|
+
## Guards
|
|
29
|
+
|
|
30
|
+
- Branch name does not conform: stop and route to the skill that renames
|
|
31
|
+
- No commits ahead of main: stop
|
|
32
|
+
|
|
33
|
+
## Out of scope
|
|
34
|
+
|
|
35
|
+
- Naming the branch, which `git-branch` owns. This skill requires a conforming name and refuses without one rather than fixing it.
|
|
36
|
+
- Grouping the diff into commits, which `git-stage` owns
|
|
37
|
+
- Pushing a later edit onto an already-open pull request, which `git-followup` owns. The overlap is real and the split is by state: this skill brings a pull request into existence and keeps it accurate, that one carries a fix onto one already under review.
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: git-pr
|
|
3
|
+
description: Generates pull request titles and descriptions from git diffs. Use for any PR creation or update.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Git PR
|
|
7
|
+
|
|
8
|
+
## Context
|
|
9
|
+
|
|
10
|
+
Read these files in parallel:
|
|
11
|
+
|
|
12
|
+
- `${CLAUDE_SKILL_DIR}/references/branch.md`: branch format, valid types, and constraints
|
|
13
|
+
- `${CLAUDE_SKILL_DIR}/references/pr.md`: structure, rules, and banned phrases
|
|
14
|
+
- `.claude/standards/prose.md` from the project root: prose conventions for all generated text
|
|
15
|
+
- `.claude/standards/versioning.md` from the project root: phase label vs semver discipline
|
|
16
|
+
|
|
17
|
+
Read a standard from `${CLAUDE_SKILL_DIR}/../../standards/` instead when the project does not have it.
|
|
18
|
+
|
|
19
|
+
Resolve the base ref first, because the log range and the diff below both consume it:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
git merge-base HEAD origin/main 2>/dev/null || git merge-base HEAD main 2>/dev/null
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Then run these commands in parallel to gather git context:
|
|
26
|
+
|
|
27
|
+
- `git remote get-url origin 2>/dev/null || echo "NO_REMOTE"`
|
|
28
|
+
- `git branch --show-current 2>/dev/null || echo "unknown"`
|
|
29
|
+
- `git log <base>..HEAD --oneline 2>/dev/null || echo "NO_COMMITS"`
|
|
30
|
+
- `git diff <base> HEAD -- . ':(exclude)*.lock' ':(exclude)*-lock.json' 2>/dev/null || echo "NO_DIFF"`
|
|
31
|
+
|
|
32
|
+
## Diff baseline
|
|
33
|
+
|
|
34
|
+
Prefer `origin/main` over local `main`. Both reads resolve against `<base>`, so the commits listed and the changes described come from one scope.
|
|
35
|
+
|
|
36
|
+
`git diff main..HEAD` is the form the diff replaces. A two-dot range compares tips and resolves no merge base, so once local `main` advances past the branch point it reports main's newer commits as reversed changes and the description describes work the branch never did. On `main` itself the local ref resolves to HEAD and every committed change drops out instead.
|
|
37
|
+
|
|
38
|
+
`git log main..HEAD` is the matching defect on the commit side. It excludes what local `main` reaches, so a local `main` trailing `origin/main` leaves commits in the range that are already on the remote and are not this branch's work. The diff resolved from `<base>` excludes those same commits, and the description then lists commits whose changes appear nowhere in it. Reading both against `<base>` is what keeps the two halves describing one branch.
|
|
39
|
+
|
|
40
|
+
The baseline is unusable in two cases:
|
|
41
|
+
|
|
42
|
+
- No merge base resolves against either ref.
|
|
43
|
+
- The base equals HEAD, whichever ref resolved it. Nothing is committed ahead of the base to compare against.
|
|
44
|
+
|
|
45
|
+
Either case leaves both reads empty, which the no-commits guard below catches. Stop there rather than composing a description from an empty diff.
|
|
46
|
+
|
|
47
|
+
## Guards
|
|
48
|
+
|
|
49
|
+
- If branch name does not match `<type>/<description>` format (valid types are defined in `${CLAUDE_SKILL_DIR}/references/branch.md`), stop and output:
|
|
50
|
+
`❌ Branch name does not follow conventions. Run /git-branch to rename first.`
|
|
51
|
+
- If no commits ahead of main, stop and output:
|
|
52
|
+
`❌ No commits ahead of main. Nothing to PR.`
|
|
53
|
+
|
|
54
|
+
## Response format
|
|
55
|
+
|
|
56
|
+
### Preview
|
|
57
|
+
|
|
58
|
+
- **Title:** <title>
|
|
59
|
+
- **Files changed:** <count>
|
|
60
|
+
- **Analysis:** <brief summary of impact>
|
|
61
|
+
|
|
62
|
+
After outputting the preview, execute the final command immediately. Claude Code's tool permission dialog is the confirmation gate. Do not wait for user input.
|
|
63
|
+
|
|
64
|
+
### Testing checkboxes
|
|
65
|
+
|
|
66
|
+
Follow Testing discipline in `${CLAUDE_SKILL_DIR}/references/pr.md`. Run each check before writing its line, then tick the box and state the result the run reported. Never pre-check based on intent or past sessions.
|
|
67
|
+
|
|
68
|
+
Leave a box unchecked only for the human-only cases the reference defines, and name which human and why on the same line. A request for the reviewer is not a test result, so it belongs under `## For the reviewer` rather than in the Testing list.
|
|
69
|
+
|
|
70
|
+
### Pre-publish scan
|
|
71
|
+
|
|
72
|
+
Before running the final command, scan the PR title and body for banned characters and rewrite each occurrence:
|
|
73
|
+
|
|
74
|
+
- `—` (em dash): split into two sentences or use a comma
|
|
75
|
+
- `;` (semicolon): split into two sentences
|
|
76
|
+
|
|
77
|
+
These bans come from `.claude/standards/prose.md` and apply to PR text on top of `${CLAUDE_SKILL_DIR}/references/pr.md`. Reading `prose.md` is not enough. The scan is an explicit step.
|
|
78
|
+
|
|
79
|
+
### Final command
|
|
80
|
+
|
|
81
|
+
Detect an existing PR and branch: edit it in place when one is open, create it otherwise. This keeps the body in sync on a follow-up push instead of erroring on `gh pr create`.
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
mkdir -p .claude/.tmp/pr
|
|
85
|
+
cat <<'BODY' > .claude/.tmp/pr/body.md
|
|
86
|
+
<body content following pr.md template exactly>
|
|
87
|
+
BODY
|
|
88
|
+
git push -u origin HEAD || exit 1
|
|
89
|
+
if gh pr view --json number >/dev/null 2>&1; then
|
|
90
|
+
gh pr edit --title "<title>" --body-file .claude/.tmp/pr/body.md
|
|
91
|
+
else
|
|
92
|
+
gh pr create --title "<title>" --body-file .claude/.tmp/pr/body.md
|
|
93
|
+
fi
|
|
94
|
+
rm -rf .claude/.tmp/pr
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### Record the number on the task
|
|
98
|
+
|
|
99
|
+
Resolve the number the run created or edited, then write it onto the task the branch is closing:
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
gh pr view --json number --jq .number
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
Find the task by reading `.claude/tasks/` at the main worktree root, resolved with `git worktree list --porcelain | grep -m 1 '^worktree ' | cut -d' ' -f2-`. The board is shared scratch, so a linked worktree writing to its own `pwd` creates a second board nothing reads.
|
|
106
|
+
|
|
107
|
+
Confirm the match against the task's `Plan:` line, which names the plan this branch implemented. A branch name does not derive a plan slug and a plan slug does not derive a branch, so neither one alone identifies the task. Add `Pull request: #NNN` under the existing `Plan:`, `Groundwork:`, or `Issue:` lines when the task carries no such line, and correct the number in place when it does.
|
|
108
|
+
|
|
109
|
+
Skip this silently in three cases: no `.claude/tasks/` folder, no task whose `Plan:` line matches, or more than one match. One task, one pull request, so a second match is a misfile that a guessed write would compound. A wrong match archives the wrong task unattended once the branch merges.
|
|
110
|
+
|
|
111
|
+
The number is what lets the merge close the task. Every merge on `main` is a squash carrying it in the subject, so the number survives where a branch name does not, and `post-merge` reads it back to call `aitk tasks archive`. Writing it here rather than at worktree time is what makes it a pull request number rather than a branch the squash discards.
|
|
112
|
+
|
|
113
|
+
## After execution
|
|
114
|
+
|
|
115
|
+
Respond with exactly one line:
|
|
116
|
+
|
|
117
|
+
`✅ PR: <url>`
|
|
118
|
+
|
|
119
|
+
Do not add any other text.
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Branch reference
|
|
3
|
+
description: Branch naming format and type conventions
|
|
4
|
+
consumers: git-branch, git-split, git-pr, claude-standards-audit
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Branch reference
|
|
8
|
+
|
|
9
|
+
## Format
|
|
10
|
+
|
|
11
|
+
- Structure: `<type>/<description>` or `<type>/<ticket>-<description>`
|
|
12
|
+
- Length: 50 characters maximum
|
|
13
|
+
- Casing: kebab-case only, no underscores or camelCase
|
|
14
|
+
- Description: 2 words maximum, 3 only when genuinely needed for specificity
|
|
15
|
+
- Capture the core change, not the commit message verbatim
|
|
16
|
+
- For branches with multiple commits, use the unifying concern as the description.
|
|
17
|
+
- Do not duplicate type in description (e.g., `feat/feature-login`)
|
|
18
|
+
|
|
19
|
+
## Types
|
|
20
|
+
|
|
21
|
+
- `feat`: new feature or capability
|
|
22
|
+
- `fix`: bug fix
|
|
23
|
+
- `refactor`: structural changes (not a fix or feature)
|
|
24
|
+
- `docs`: documentation only (README)
|
|
25
|
+
- `chore`: maintenance tasks (deps, tooling, configs)
|
|
26
|
+
- `perf`: performance improvements
|
|
27
|
+
- `test`: add or modify tests
|
|
28
|
+
- `style`: code formatting (whitespace, semicolons)
|
|
29
|
+
- `build`: build system changes (webpack, npm scripts)
|
|
30
|
+
- `ci`: CI/CD pipeline changes (GitHub Actions)
|
|
31
|
+
- `revert`: revert a previous commit
|
|
32
|
+
|
|
33
|
+
## Examples
|
|
34
|
+
|
|
35
|
+
### Correct
|
|
36
|
+
|
|
37
|
+
```plaintext
|
|
38
|
+
feat/jwt-expiration # clear feature scope
|
|
39
|
+
fix/AUTH-123-connection-pool # includes ticket ID
|
|
40
|
+
refactor/remove-deprecated-endpoints # clear refactor intent
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### Incorrect
|
|
44
|
+
|
|
45
|
+
```plaintext
|
|
46
|
+
feature/auth_stuff # wrong type + underscore
|
|
47
|
+
feat/feature-add-login # duplicates type in description
|
|
48
|
+
fix/DB-456-fix-the-database-connection-pool-memory-leak # exceeds 50 chars + verbatim message
|
|
49
|
+
```
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Pull request reference
|
|
3
|
+
description: Pull request title and body conventions
|
|
4
|
+
consumers: git-split, git-pr, claude-standards-audit
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Pull request reference
|
|
8
|
+
|
|
9
|
+
## Title
|
|
10
|
+
|
|
11
|
+
- Format: `<type>(<scope>): <subject>`
|
|
12
|
+
- Casing: lowercase for `<type>`, `<scope>`, and first word of `<subject>`
|
|
13
|
+
- Length: 72 characters maximum
|
|
14
|
+
|
|
15
|
+
## Content
|
|
16
|
+
|
|
17
|
+
- Use imperative mood for all content (`add`, `fix`, `refactor`)
|
|
18
|
+
- Do not start with "This PR," "This commit," "Included are," or "I have"
|
|
19
|
+
- Do not use buzzwords (`seamless`, `robust`, `game-changer`, `enhanced`)
|
|
20
|
+
- Do not describe historical behavior or unchanged code. Describe new behavior only.
|
|
21
|
+
- Do not include future promises or speculative documentation
|
|
22
|
+
- Do not explain obvious changes (formatting, renaming variables)
|
|
23
|
+
- Do not duplicate commit messages verbatim
|
|
24
|
+
|
|
25
|
+
## Sections
|
|
26
|
+
|
|
27
|
+
- `## Summary`: 1-2 sentences following `<Action Verb> <Direct Object> to <Result>`, expand for clarity if needed
|
|
28
|
+
- `## Key Changes`: name actual files, functions, or modules (e.g., `AuthService.verify()` not "auth handler"). Always use bullet points, never prose.
|
|
29
|
+
- `## Technical Context` (optional): 1-2 lines of architectural reasoning explaining why, not what
|
|
30
|
+
- Omit Technical Context for docs, config, or trivial changes
|
|
31
|
+
- Use bullet points for multiple reasons, one sentence for a single reason
|
|
32
|
+
- `## Testing` (optional): specify exact commands or test cases run
|
|
33
|
+
- Omit Testing for docs, config, or trivial sync changes
|
|
34
|
+
- Use checkboxes, never prose. See Testing discipline for which box gets ticked.
|
|
35
|
+
- `## For the reviewer` (optional): what the reviewer should confirm, one bullet per request
|
|
36
|
+
- Visuals: include only when they clarify architecture, UI, or complex logic flows
|
|
37
|
+
|
|
38
|
+
## Testing discipline
|
|
39
|
+
|
|
40
|
+
- Run the check before writing its line. A `- [ ]` reports a check that has not run rather than one that is planned.
|
|
41
|
+
- Tick the box and state the observed result. `- [x] npm test passes, 42 tests` beats `- [ ] run npm test`.
|
|
42
|
+
- Quote the count or output the run reported, never a figure carried from elsewhere.
|
|
43
|
+
- Leave a box unchecked only when a human is required, and name which human and why on the same line.
|
|
44
|
+
- Human-only covers visual or aesthetic judgment, anything needing credentials or a live third-party service, anything needing a second machine or a fresh OS, and judgment about whether a boundary or an abstraction reads correctly. The agent runs everything else.
|
|
45
|
+
- Put a request for the reviewer under `## For the reviewer`. It is a request rather than unfinished testing, so it never appears as an unchecked Testing box.
|
|
46
|
+
|
|
47
|
+
## Formatting
|
|
48
|
+
|
|
49
|
+
- End every bullet point with a period
|
|
50
|
+
|
|
51
|
+
## Examples
|
|
52
|
+
|
|
53
|
+
### Template
|
|
54
|
+
|
|
55
|
+
```markdown
|
|
56
|
+
## Summary
|
|
57
|
+
|
|
58
|
+
<Action Verb> <Direct Object> to <Result>.
|
|
59
|
+
|
|
60
|
+
## Key Changes
|
|
61
|
+
|
|
62
|
+
- <Verb> <specific component/file/function> (<reason if non-obvious>)
|
|
63
|
+
- <Verb> <specific component/file/function>
|
|
64
|
+
|
|
65
|
+
## Technical Context
|
|
66
|
+
|
|
67
|
+
- <Architectural reasoning explaining why, not what>
|
|
68
|
+
|
|
69
|
+
## Testing
|
|
70
|
+
|
|
71
|
+
- [x] <Command run> <observed result>
|
|
72
|
+
- [x] <Edge case verified> <what was observed>
|
|
73
|
+
- [ ] <Human-only check> (<which human, why>)
|
|
74
|
+
|
|
75
|
+
## For the reviewer
|
|
76
|
+
|
|
77
|
+
- <What the reviewer should confirm>
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### Correct
|
|
81
|
+
|
|
82
|
+
```markdown
|
|
83
|
+
## Summary
|
|
84
|
+
|
|
85
|
+
Update auth middleware to enforce jwt expiration checks. # imperative + direct object + result
|
|
86
|
+
|
|
87
|
+
## Key Changes
|
|
88
|
+
|
|
89
|
+
- Add `verifyExpiration()` to `src/auth/validators.ts`. # specific function + file path
|
|
90
|
+
- Refactor `AuthService.authenticate()` to handle 401 codes. # named component + clear change
|
|
91
|
+
|
|
92
|
+
## Technical Context
|
|
93
|
+
|
|
94
|
+
- Migration to stateless session management for horizontal scalability. # why, not what
|
|
95
|
+
|
|
96
|
+
## Testing
|
|
97
|
+
|
|
98
|
+
- [x] `npm run test:auth` passes, 42 tests. # command run + observed result
|
|
99
|
+
- [x] Expired token rejected with a 401 against a local server. # edge case + what happened
|
|
100
|
+
- [ ] Staging smoke test (release owner, needs staging credentials). # unchecked + which human + why
|
|
101
|
+
|
|
102
|
+
## For the reviewer
|
|
103
|
+
|
|
104
|
+
- Confirm the 401 and 403 split reads correctly for the public API. # a request, not a test result
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### Incorrect
|
|
108
|
+
|
|
109
|
+
```markdown
|
|
110
|
+
## Summary
|
|
111
|
+
|
|
112
|
+
This PR updates the authentication system to be more robust. # "This PR" opener + buzzword
|
|
113
|
+
|
|
114
|
+
## Key Changes
|
|
115
|
+
|
|
116
|
+
- Updated auth middleware files # vague, no specific component, no period
|
|
117
|
+
- The old system used to check tokens differently # describes historical behavior
|
|
118
|
+
|
|
119
|
+
## Testing
|
|
120
|
+
|
|
121
|
+
- Tested manually # no specific command or case
|
|
122
|
+
- [ ] `npm run test:auth` # unchecked box for a check the agent can run
|
|
123
|
+
- [ ] Reviewer confirms the error split reads correctly # a reviewer request, belongs under `## For the reviewer`
|
|
124
|
+
```
|