@joshuafolkken/kit 1.1453.0 → 1.1471.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/skills/dependency-update/SKILL.md +26 -55
- package/.claude/skills/epic-commands/SKILL.md +87 -148
- package/.claude/skills/epic-commands/epic-bundle.md +45 -77
- package/.claude/skills/epic-commands/execution-waves.md +44 -81
- package/.claude/skills/verify-ui/SKILL.md +25 -50
- package/.claude/skills/workflow-commands/background-commands.md +36 -47
- package/.claude/skills/workflow-commands/backlogrun-child.md +72 -85
- package/.claude/skills/workflow-commands/backlogrun-handoff-report.md +1 -1
- package/.claude/skills/workflow-commands/backlogrun-lanes.md +91 -121
- package/.claude/skills/workflow-commands/backlogrun-park.md +73 -117
- package/.claude/skills/workflow-commands/backlogrun-progress.md +7 -9
- package/.claude/skills/workflow-commands/backlogrun-recovery.md +11 -20
- package/.claude/skills/workflow-commands/backlogrun-steps.md +43 -52
- package/.claude/skills/workflow-commands/chain-rule.md +24 -34
- package/.claude/skills/workflow-commands/followup.md +57 -76
- package/.claude/skills/workflow-commands/halfrun.md +2 -1
- package/.claude/skills/workflow-commands/issue-comments.md +43 -60
- package/.claude/skills/workflow-commands/kickoff.md +65 -74
- package/.claude/skills/workflow-commands/observation-filing.md +62 -107
- package/.claude/skills/workflow-commands/observation-ledger.md +56 -111
- package/.claude/skills/workflow-commands/pre-gate-cut.md +89 -138
- package/.claude/skills/workflow-commands/prerequisite.md +10 -15
- package/.claude/skills/workflow-commands/progress-watcher.md +21 -26
- package/.claude/skills/workflow-commands/prrun.md +2 -1
- package/.claude/skills/workflow-commands/retrospective.md +31 -50
- package/.claude/skills/workflow-commands/split-assessment.md +34 -58
- package/.claude/skills/workflow-commands/working-tree-hold.md +54 -71
- package/CLAUDE.md +7 -6
- package/README.md +2 -9
- package/dist/CLAUDE.md +7 -6
- package/dist/hooks/batch-guard.js +6 -6
- package/dist/hooks/{chunk-Y3GKIKGW.js → chunk-43ZHT22P.js} +31 -15
- package/dist/hooks/{chunk-MBJYQPEK.js → chunk-AS74OU3D.js} +24 -8
- package/dist/hooks/{chunk-3C4XRYG6.js → chunk-E7OIKX5Z.js} +17 -12
- package/dist/hooks/{chunk-Z4XI7CZS.js → chunk-EUMACUK2.js} +18 -12
- package/dist/hooks/{chunk-NO4AALP5.js → chunk-H5HVWYXK.js} +4 -4
- package/dist/hooks/{chunk-5C7L6FRC.js → chunk-IIGFYXKC.js} +346 -241
- package/dist/hooks/{chunk-W5ZKGTSY.js → chunk-J47HU5H5.js} +14 -3
- package/dist/hooks/{chunk-OLMO72ON.js → chunk-K4EOONYM.js} +1 -1
- package/dist/hooks/{chunk-LBFYEOXJ.js → chunk-K4LMBQC2.js} +4 -4
- package/dist/hooks/{chunk-D3NJXN5M.js → chunk-KC5AK2GF.js} +8 -6
- package/dist/hooks/chunk-SHGPANFB.js +56 -0
- package/dist/hooks/{chunk-EF5GQ6WS.js → chunk-YHBZAJSV.js} +3 -3
- package/dist/hooks/{chunk-SHYUQOIS.js → chunk-YYPI7SJZ.js} +5 -5
- package/dist/hooks/codex-hook-adapter.js +13 -13
- package/dist/hooks/duplicate-read-guard.js +7 -7
- package/dist/hooks/format-edited.js +3 -3
- package/dist/hooks/inputs.json +251 -247
- package/dist/hooks/investigation-guard.js +7 -7
- package/dist/hooks/pretool-guard.js +12 -12
- package/dist/hooks/session-lang.js +6 -5
- package/dist/hooks/stop-guard.js +75 -18
- package/dist/josh.js +6 -7
- package/dist/managed-marker/index.js +1 -2
- package/dist/version/index.js +15 -12
- package/eslint/base.js +2 -1
- package/eslint/rules/unicorn.js +16 -0
- package/package.json +3 -3
- package/prompts/coding-standards.md +12 -22
- package/prompts/collaboration-workflow/file-edits.md +26 -44
- package/prompts/collaboration-workflow/gh-rest.md +20 -36
- package/prompts/collaboration-workflow/glossary.md +5 -7
- package/prompts/collaboration-workflow/issue-citation.md +7 -13
- package/prompts/collaboration-workflow/issue-template.md +29 -29
- package/prompts/collaboration-workflow/operating-rules.md +35 -44
- package/prompts/collaboration-workflow/output-bounds.md +15 -15
- package/prompts/collaboration-workflow/overview.md +14 -19
- package/prompts/collaboration-workflow/plan-comment.md +13 -13
- package/prompts/collaboration-workflow/principles.md +50 -53
- package/prompts/collaboration-workflow/proposal-request.md +1 -9
- package/prompts/collaboration-workflow/report-format.md +32 -49
- package/prompts/collaboration-workflow/residency.md +10 -10
- package/prompts/collaboration-workflow/rule-delivery.md +9 -9
- package/prompts/collaboration-workflow/shell-body.md +11 -21
- package/prompts/collaboration-workflow/turn-batching.md +8 -14
- package/prompts/collaboration-workflow/upstream-interrupt.md +26 -34
- package/prompts/collaboration-workflow/wip-cap.md +24 -30
- package/prompts/collaboration-workflow.md +24 -25
- package/prompts/refactoring.md +33 -43
- package/prompts/review-rubric.md +84 -129
- package/prompts/review.md +111 -141
- package/prompts/sonar-hotspot-handling.md +22 -50
- package/prompts/testing-guide.md +48 -99
- package/scripts/adopt/adopt-toolkits.ts +2 -4
- package/scripts/agent/agent-exit-record.ts +23 -1
- package/scripts/agent/codex-agent-argv.ts +7 -2
- package/scripts/backlog/backlog-budget-cli.ts +1 -2
- package/scripts/backlog/backlog-drive-carried.ts +26 -0
- package/scripts/backlog/backlog-drive-cli.ts +10 -5
- package/scripts/backlog/backlog-drive-named.ts +2 -4
- package/scripts/backlog/backlog-drive-restore.ts +19 -1
- package/scripts/backlog/backlog-drive-seats.ts +27 -0
- package/scripts/backlog/backlog-drive.ts +11 -6
- package/scripts/backlog/backlog-ready.ts +13 -6
- package/scripts/behavior/behavior-rules.ts +3 -2
- package/scripts/cost-runtime/codex-usage.ts +4 -2
- package/scripts/cost-runtime/cost-cli.ts +1 -2
- package/scripts/delegation/investigation-guard.ts +1 -1
- package/scripts/delegation/investigation-reads.ts +1 -1
- package/scripts/discovery/repo-discovery.ts +4 -2
- package/scripts/discovery/repo-origin.ts +2 -4
- package/scripts/doctor/doctor-logic.ts +6 -3
- package/scripts/document/document-byte-budget.ts +27 -27
- package/scripts/document/document-byte-check.ts +1 -2
- package/scripts/document/entry-read-budget.ts +2 -2
- package/scripts/epic/epic-audit-rationale.ts +8 -2
- package/scripts/epic/epic-bundle-cli.ts +1 -2
- package/scripts/epic/epic-chains.ts +6 -2
- package/scripts/epic/epic-close-comment.ts +1 -2
- package/scripts/gate/verification-gate.ts +7 -2
- package/scripts/gh/git-pr-ai-review.ts +12 -1
- package/scripts/gh/git-pr-confirmation.ts +11 -7
- package/scripts/gh/git-pr.ts +6 -2
- package/scripts/git/git-common-directory.ts +3 -3
- package/scripts/git/git-diff-reads.ts +16 -9
- package/scripts/git/git-execa-error.ts +1 -2
- package/scripts/hooks/format-edited-file.ts +10 -4
- package/scripts/hooks/pre-push-unit.ts +15 -4
- package/scripts/hooks/pretool-guard.ts +23 -29
- package/scripts/hooks/step-zero-notice.ts +3 -2
- package/scripts/init/hook-command-rewrite.ts +6 -2
- package/scripts/init/init-logic-deploy-vps.ts +4 -2
- package/scripts/issue/behavior-change-lint.ts +12 -6
- package/scripts/issue/issue-scout-cli.ts +3 -2
- package/scripts/josh/file-map-stamp.ts +1 -3
- package/scripts/josh/hook-decision.ts +17 -2
- package/scripts/josh/josh-commands-workflow.ts +1 -1
- package/scripts/lane/lane-await.ts +3 -2
- package/scripts/lane/lane-child-invocation.ts +14 -1
- package/scripts/lane/lane-guard-policy.ts +4 -4
- package/scripts/lane/lane-ledger.ts +9 -0
- package/scripts/lane/lane-load.ts +9 -2
- package/scripts/lane/lane-measure-cli.ts +2 -0
- package/scripts/lane/lane-parked.ts +18 -0
- package/scripts/lane/lane-process-load.ts +125 -0
- package/scripts/lane/lane-process-stats.ts +93 -0
- package/scripts/lane/lane-registry.ts +8 -3
- package/scripts/lane/lane-session-broker.ts +29 -5
- package/scripts/lane/lane-spent.ts +14 -3
- package/scripts/lane/lane-stats.ts +1 -0
- package/scripts/managed-marker/managed-marker-logic.ts +1 -2
- package/scripts/notify/confirmation-options.ts +59 -0
- package/scripts/notify/notify-opt-in.ts +33 -0
- package/scripts/notify/telegram-notify.ts +25 -8
- package/scripts/notify/telegram-test-logic.ts +33 -1
- package/scripts/notify/telegram-test.ts +4 -2
- package/scripts/overrides/lockfile-overrides.ts +1 -3
- package/scripts/propagate/propagate.ts +1 -2
- package/scripts/release/release-progress.ts +3 -2
- package/scripts/report/report-lint.ts +7 -4
- package/scripts/review/review-record-cli.ts +6 -2
- package/scripts/rules/destructive-command.ts +6 -9
- package/scripts/rules/direct-filing.ts +3 -7
- package/scripts/rules/early-heartbeat.ts +7 -18
- package/scripts/rules/file-body.ts +6 -13
- package/scripts/rules/filing-cap.ts +3 -6
- package/scripts/rules/git-force.ts +5 -9
- package/scripts/rules/implementation-cut.ts +37 -35
- package/scripts/rules/index-guard.ts +4 -7
- package/scripts/rules/issue-comments.ts +5 -15
- package/scripts/rules/josh-git-bare.ts +3 -6
- package/scripts/rules/lane-background.ts +10 -21
- package/scripts/rules/lane-carry-conflict.ts +7 -17
- package/scripts/rules/lane-interactive-ask.ts +6 -11
- package/scripts/rules/lane-park.ts +5 -13
- package/scripts/rules/lane-split-park.ts +2 -7
- package/scripts/rules/lane-switch-main.ts +9 -12
- package/scripts/rules/oracle-consulted.ts +4 -5
- package/scripts/rules/piped-verification.ts +81 -31
- package/scripts/rules/poll-loop.ts +7 -17
- package/scripts/rules/pre-gate-cut.ts +7 -21
- package/scripts/rules/prior-comment-read.ts +7 -5
- package/scripts/rules/protected-files.ts +5 -9
- package/scripts/rules/raw-field-body.ts +3 -7
- package/scripts/rules/rule-body-guard.ts +4 -11
- package/scripts/rules/run-tail-rule.ts +6 -22
- package/scripts/rules/shell-body-trigger.ts +7 -8
- package/scripts/rules/shell-segments.ts +7 -0
- package/scripts/rules/stop-rules.ts +17 -29
- package/scripts/rules/test-declared-commit.ts +4 -10
- package/scripts/rules/third-party-write.ts +5 -10
- package/scripts/rules/worktree-guard.ts +5 -12
- package/scripts/run/board/run-board-github.ts +11 -3
- package/scripts/run/board/run-board-idle.ts +31 -0
- package/scripts/run/board/run-board-read.ts +9 -12
- package/scripts/run/board/run-board-reason.ts +7 -3
- package/scripts/run/board/run-board-state.ts +4 -0
- package/scripts/run/board/run-board-status.ts +18 -3
- package/scripts/run/board/run-board-thanks.ts +7 -2
- package/scripts/run/board/run-board-tick.ts +32 -7
- package/scripts/run/carry/run-carry-args.ts +1 -3
- package/scripts/run/carry/run-carry-conversation.ts +7 -2
- package/scripts/run/cut/run-cut-cli.ts +15 -20
- package/scripts/run/cut/run-cut-decline.ts +72 -0
- package/scripts/run/cut/run-cut-ready.ts +74 -0
- package/scripts/run/cut/run-cut-report.ts +13 -0
- package/scripts/run/cut/run-cut.ts +10 -1
- package/scripts/run/entry/run-entry-stop.ts +6 -3
- package/scripts/run/hold/run-hold-cli.ts +14 -3
- package/scripts/run/hold/run-hold.ts +6 -3
- package/scripts/run/merge/run-merge-cli.ts +30 -7
- package/scripts/run/merge/run-merge-ship.ts +59 -1
- package/scripts/run/merge/run-merge.ts +3 -2
- package/scripts/run/run-ending.ts +31 -3
- package/scripts/run/run-parent-cut-hook.ts +5 -10
- package/scripts/run/run-preflight.ts +1 -2
- package/scripts/run/run-stop-notify.ts +3 -2
- package/scripts/run/run-watcher-guard.ts +6 -3
- package/scripts/run/ship/run-ship-review-steps.ts +13 -4
- package/scripts/run/ship/run-ship-review.ts +15 -2
- package/scripts/run/tidy/run-tidy-cli.ts +3 -3
- package/scripts/run/tidy/run-tidy-lanes.ts +3 -2
- package/scripts/safe-chain/project-config.ts +7 -2
- package/scripts/sync/sync-hook-safety.ts +8 -2
- package/scripts/test/unit-worker-share.ts +3 -2
- package/scripts/time-runtime/time-batch-guard.ts +3 -3
- package/scripts/time-runtime/time-hook-transcript.ts +3 -2
- package/scripts/time-runtime/time-shell.ts +10 -0
- package/scripts/version/effective-upstream.ts +3 -4
- package/scripts/version/kit-version-config.ts +8 -2
- package/scripts/version/latest-corepack.ts +1 -2
- package/scripts/version/release-hold.ts +11 -4
- package/scripts/version/version-commands.ts +12 -4
- package/dist/hooks/chunk-UT7YC3N2.js +0 -56
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
## ファイル編集はコマンド本文に本文を載せない
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
`CLAUDE.md` からは [`rule-delivery.md`](./rule-delivery.md) →「配送されている規則」を経て届く。
|
|
4
4
|
|
|
5
|
-
`pnpm josh rule:guard`(file-body
|
|
5
|
+
`pnpm josh rule:guard`(file-body の行)が、既存ファイルを書き戻すヒアドキュメント・書き込むインタプリタ heredoc / `node -e`・書き込むスクリプトを作るヒアドキュメント・`perl -0pi -e` を拒否する。ガードに見えない Edit / Write の全文書き直しと `sed -i` は以下に従う。
|
|
6
6
|
|
|
7
7
|
### 何を禁じているか
|
|
8
8
|
|
|
9
|
-
**編集後のテキストを丸ごとコマンド行に載せる形を禁じる。**
|
|
9
|
+
**編集後のテキストを丸ごとコマンド行に載せる形を禁じる。** 典型(`NEW_REGION` には置換後の本文が載る):
|
|
10
10
|
|
|
11
11
|
```bash
|
|
12
12
|
python3 - <<'PY' # ← 禁止
|
|
@@ -15,64 +15,46 @@ open('CLAUDE.md', 'w').write(text.replace(OLD_REGION, NEW_REGION))
|
|
|
15
15
|
PY
|
|
16
16
|
```
|
|
17
17
|
|
|
18
|
-
`
|
|
19
|
-
|
|
20
|
-
領域を指定して書き換える編集は **Edit ツール**(old / new の差分)で行う。`node -e`、`cat > file <<'EOF'`、`tee file <<'EOF'`、`perl -0pi -e` に長い置換文字列を渡す形も同じ理由で禁止される。
|
|
18
|
+
領域を書き換える編集は Edit ツール(old / new の差分)で行う。`node -e`、`cat > file <<'EOF'`、`tee file <<'EOF'`、`perl -0pi -e` に長い置換文字列を渡す形も禁止。
|
|
21
19
|
|
|
22
20
|
### 判断基準は「本文を丸ごと運ぶか」であり、ツール名ではない
|
|
23
21
|
|
|
24
|
-
禁止の対象は**ツールの種類ではない**。判断は 1 問で決まる。
|
|
25
|
-
|
|
26
22
|
> **そのコマンドは、置換後のテキストを丸ごとコマンド本文に載せているか。**
|
|
27
23
|
|
|
28
24
|
- yes → 禁止。Edit を使う
|
|
29
|
-
- no →
|
|
30
|
-
|
|
31
|
-
したがって短い置換に `sed -i` を使うのは**許される**。パターンと置換語しか運ばないので、Edit の `old_string` / `new_string` より本文が小さい。逆に「Edit を使ったから安全」も成り立たない — 300 行のファイルを全文 `new_string` に入れれば、禁じている形と同じコストになる。次節はその後半を条件として書き下したものである。
|
|
25
|
+
- no → 許可(短い置換の `sed -i` は下の 4 条件つきで可)
|
|
32
26
|
|
|
33
27
|
### 編集は指摘された箇所だけを対象にする(全文書き直しの条件)
|
|
34
28
|
|
|
35
|
-
**既定は部分編集である。**
|
|
36
|
-
|
|
37
|
-
**ファイルを全文書いてよいのは、ファイルそのものを置き換える意図があるときだけである。** 該当するのは次の 3 つで、それ以外は部分編集にする。
|
|
38
|
-
|
|
39
|
-
- **新規ファイルの作成** — 既存本文が無いので、運ぶ重複がそもそも発生しない
|
|
40
|
-
- **ファイル全体の作り直し** — 構成の組み替えや生成物の再生成で、変更後の本文が元の本文とほとんど共有しない場合
|
|
41
|
-
- **部分編集のほうが大きくなる場合** — 変更箇所がファイル全域に散っていて、`old_string` / `new_string` の合計が全文を超えるとき。このときも全文は **Write ツール**で書く — ヒアドキュメントやインタプリタで書き戻す形は、この例外でもガードに拒否される
|
|
29
|
+
**既定は部分編集である。** `old_string` / `new_string` は直す行の周辺までに狭める — Edit / Write の全文書き直しは禁じている形と同じコストを払う。全文を書いてよいのは次の 3 つだけ:
|
|
42
30
|
|
|
43
|
-
|
|
31
|
+
- 新規ファイルの作成
|
|
32
|
+
- ファイル全体の作り直し — 変更後の本文が元とほとんど共有しない場合
|
|
33
|
+
- 部分編集のほうが大きくなる場合 — `old_string` / `new_string` の合計が全文を超えるとき(このときも Write で書く)
|
|
44
34
|
|
|
45
|
-
|
|
35
|
+
実測は `docs/maintainers/file-edits-rationale.md` → "Measured cost of whole-file rewrites"(joshuafolkken/kit#1260)。
|
|
46
36
|
|
|
47
37
|
### `sed -i` を使う前に満たす 4 条件
|
|
48
38
|
|
|
49
|
-
`sed`
|
|
39
|
+
`sed` は一致した全行を書き換え、一致 0 件でも黙って成功する。使う前に次を満たす。
|
|
50
40
|
|
|
51
|
-
1. **出現回数を先に数える** — `grep -o '<pattern>' <file> | wc -l` が `1`
|
|
52
|
-
2. **メタ文字を持ち込まない — パターン側と置換語側の両方** —
|
|
53
|
-
3. **`-i` の引数はプラットフォームで違う** — BSD / macOS は `sed -i '' 's/…/…/' file`、GNU / Linux は `sed -i 's/…/…/' file
|
|
54
|
-
4. **編集後に自分で整形する** —
|
|
41
|
+
1. **出現回数を先に数える** — `grep -o '<pattern>' <file> | wc -l` が `1` であること。`grep -c` は行数を数えるので使わない
|
|
42
|
+
2. **メタ文字を持ち込まない — パターン側と置換語側の両方** — `/`、`&`、`\`、`.` `*` `[` `]` `^` `$` のいずれかが入るなら Edit を使う
|
|
43
|
+
3. **`-i` の引数はプラットフォームで違う** — BSD / macOS は `sed -i '' 's/…/…/' file`、GNU / Linux は `sed -i 's/…/…/' file`。配布ドキュメントに書くときはこの差を明示する
|
|
44
|
+
4. **編集後に自分で整形する** — Bash 経由の編集では `PostToolUse` の整形が走らない(joshuafolkken/kit#1337)ので `pnpm josh format` を走らせる(`format:edited` は手で呼べない)
|
|
55
45
|
|
|
56
|
-
**4 条件のどれかが面倒に見えたら、そこが Edit を使う場所である。**
|
|
46
|
+
**4 条件のどれかが面倒に見えたら、そこが Edit を使う場所である。**
|
|
57
47
|
|
|
58
|
-
| 形
|
|
59
|
-
|
|
|
60
|
-
| Edit(数行の old / new)
|
|
61
|
-
| `sed -i` の短い置換
|
|
62
|
-
| `python3 - <<'PY'`
|
|
63
|
-
| `cat > file <<'EOF'
|
|
64
|
-
| `cat > new-file <<'EOF'
|
|
65
|
-
| `cat > edit.py <<'EOF'
|
|
66
|
-
|
|
|
48
|
+
| 形 | 可否 |
|
|
49
|
+
| ------------------------------------------------ | ------------------- |
|
|
50
|
+
| Edit(数行の old / new) | 可 |
|
|
51
|
+
| `sed -i` の短い置換 | 上の 4 条件つきで可 |
|
|
52
|
+
| `python3 - <<'PY'` で書き戻す | 不可 |
|
|
53
|
+
| `cat > file <<'EOF'`(既存ファイル) | 不可 |
|
|
54
|
+
| `cat > new-file <<'EOF'`(新規、長文なら Write) | 可 |
|
|
55
|
+
| `cat > edit.py <<'EOF'`(書き込むスクリプト) | 不可 |
|
|
56
|
+
| 読み取り(`cat` / `sed -n` / `grep`) | 可 |
|
|
67
57
|
|
|
68
58
|
### なぜコストが二重になるか
|
|
69
59
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
### なぜ resident に置くか
|
|
73
|
-
|
|
74
|
-
根拠は `docs/maintainers/file-edits-rationale.md` → "Why it is resident"。
|
|
75
|
-
|
|
76
|
-
### マーカーテスト
|
|
77
|
-
|
|
78
|
-
固定している内容は `docs/maintainers/file-edits-rationale.md` → "Marker tests"。
|
|
60
|
+
書き戻す形は本文がコマンドとファイルの両方に載り、コマンドは以降の全リクエストで読み直される。内訳は `docs/maintainers/file-edits-rationale.md` → "Measured breakdown of command text"、常駐の根拠は `docs/maintainers/file-edits-rationale.md` → "Why it is resident"、固定内容は `docs/maintainers/file-edits-rationale.md` → "Marker tests"。
|
|
@@ -2,54 +2,38 @@
|
|
|
2
2
|
|
|
3
3
|
## 規則
|
|
4
4
|
|
|
5
|
-
**GitHub への操作は `gh api`(REST
|
|
6
|
-
|
|
7
|
-
egress が `403` で拒否されるため、GraphQL を経由するサブコマンドはそこで一切動かない。
|
|
5
|
+
**GitHub への操作は `gh api`(REST)で書く。** `gh issue …` / `gh pr …` / `gh repo …` のサブコマンド形は使わない —
|
|
6
|
+
クラウドセッションでは GraphQL への egress が `403` で拒否される。
|
|
8
7
|
|
|
9
|
-
例外は 2
|
|
8
|
+
例外は 2 つだけ:
|
|
10
9
|
|
|
11
|
-
-
|
|
12
|
-
|
|
13
|
-
- **GitHub Actions のワークフロー** — ランナー上では `gh` が通常どおり動き、`gh pr merge --auto` が使う
|
|
14
|
-
API は GraphQL にしか存在しない。
|
|
10
|
+
- `gh auth token` — ローカルの認証情報を返すだけで、どのエンドポイントにも接続しない
|
|
11
|
+
- GitHub Actions のワークフロー — ランナー上では `gh` が動き、`gh pr merge --auto` の API は GraphQL にしか無い
|
|
15
12
|
|
|
16
13
|
## 認証は環境によって別物である
|
|
17
14
|
|
|
18
|
-
**手元では `gh auth login` を一度実行すれば足り、`GH_TOKEN`
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
**CI とクラウドセッションにはそのキーチェーンが無いので、`GH_TOKEN` を設定する。** どちらか一方しか書かない
|
|
22
|
-
説明は、もう一方の環境で誤った案内になる —— 手元で `gh auth login` 済みの機械に `GH_TOKEN` を設定させたり、
|
|
23
|
-
クラウドで存在しないキーチェーンを探させたりする。
|
|
15
|
+
**手元では `gh auth login` を一度実行すれば足り、`GH_TOKEN` は要らない**(認証情報は OS のキーチェーン)。
|
|
16
|
+
**CI とクラウドセッションにはキーチェーンが無いので、`GH_TOKEN` を設定する。** 説明を書くときは両方を書く。
|
|
24
17
|
|
|
25
18
|
## 散文でも「指示の形」なら REST で書く
|
|
26
19
|
|
|
27
|
-
|
|
28
|
-
実行を指示する形であれば REST で書く。**
|
|
20
|
+
**文書の散文に書いたコマンドでも、読み手に実行を指示する形なら REST で書く。**
|
|
29
21
|
|
|
30
|
-
-
|
|
31
|
-
|
|
32
|
-
-
|
|
33
|
-
GraphQL を経由する」のような CLI の対応状況の記録。書き換えると、何を禁じているのかが読めなくなる。
|
|
22
|
+
- 指示の形(REST で書く)— 「数えるのはコマンド 1 つで済む: `…`」「各子 Issue に `…` でコメントを書く」のように、
|
|
23
|
+
読み手がそのまま打つ書き方
|
|
24
|
+
- 引用の形(そのままでよい)— 「`gh issue create` は使わない」のような禁止の引用や、CLI の対応状況の記録
|
|
34
25
|
|
|
35
|
-
|
|
36
|
-
|
|
26
|
+
文書ガードはフェンス付きコードブロックだけを走査するので、散文は書き手がこの区別で守る
|
|
27
|
+
(`docs/maintainers/gh-rest-rationale.md` → "Why the document guard scans fences only")。
|
|
37
28
|
|
|
38
|
-
|
|
39
|
-
`
|
|
29
|
+
書き換えるときは先に `pnpm josh` のコマンドで置き換えられないかを見る(例: `gh issue view` ではなく
|
|
30
|
+
`pnpm josh issue:state <N>`)。
|
|
40
31
|
|
|
41
32
|
## REST 化は `gh` を不要にしない
|
|
42
33
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
`check_gh_installed` は `gh CLI is not installed` と明示するが、git remote からリポジトリを読む側の
|
|
49
|
-
コマンド(`epic:next` / `epic:bundle` / `issue:scout` / `epic --add`)は「Could not read this
|
|
50
|
-
repository from `git remote`, so the children cannot be keyed by repository — check `gh auth status`
|
|
51
|
-
and that this is a checkout with an `origin` remote.」と出るため、原因が `gh` の不在であることが読み取り
|
|
52
|
-
にくい。**そのメッセージを見たら、まず `gh` の有無を確かめる。**
|
|
34
|
+
REST 呼び出しも `execa('gh', ['api', …])` なので、`gh` が無いコンテナでは `pnpm josh epic:next` /
|
|
35
|
+
`pnpm josh pr` / `pnpm josh followup` も完了しない。`epic:next` / `epic:bundle` / `issue:scout` / `epic --add` が
|
|
36
|
+
「Could not read this repository from `git remote`, so the children cannot be keyed by repository — check
|
|
37
|
+
`gh auth status` and that this is a checkout with an `origin` remote.」と出したら、**まず `gh` の有無を確かめる。**
|
|
53
38
|
|
|
54
|
-
|
|
55
|
-
[`docs/cloud-session.md`](https://github.com/joshuafolkken/kit/blob/main/docs/cloud-session.md) にある。
|
|
39
|
+
環境ごとの前提とホストは [`docs/cloud-session.md`](https://github.com/joshuafolkken/kit/blob/main/docs/cloud-session.md)。
|
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
# ワークフロー用語集
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
各語は 1〜2 行の定義と本文へのポインタだけを持つ。手順・条件・数値はここで言い換えない(joshuafolkken/kit#3080)。
|
|
4
4
|
|
|
5
|
-
`
|
|
6
|
-
|
|
7
|
-
- **lane** — `backlogrun` が子 Issue を並行実行するための、専用ブランチ・`.env`・ポートを持つ git worktree。実装・ゲート・レビューは並行し、マージは直列。→ `.claude/skills/workflow-commands/backlogrun-lanes.md` → "Lanes — running more than one child at a time"
|
|
8
|
-
- **cut** — 実行中のプロセスを意図して終わらせ、新しいプロセスが同じ作業を引き継ぐ境界。レーン子のゲート前の cut と、`backlogrun` のセッション cut がある。→ `.claude/skills/workflow-commands/pre-gate-cut.md` → "The pre-gate cut"、`.claude/skills/workflow-commands/backlogrun-progress.md` → "The hand-off"
|
|
5
|
+
- **lane** — `backlogrun` が子 Issue を並行実行する、専用ブランチ・`.env`・ポートを持つ git worktree。マージは直列。→ `.claude/skills/workflow-commands/backlogrun-lanes.md` → "Lanes — running more than one child at a time"
|
|
6
|
+
- **cut** — プロセスを意図して終わらせ、新しいプロセスが作業を引き継ぐ境界(ゲート前の cut、セッション cut)。→ `.claude/skills/workflow-commands/pre-gate-cut.md` → "The pre-gate cut"、`.claude/skills/workflow-commands/backlogrun-progress.md` → "The hand-off"
|
|
9
7
|
- **hold** — 1 つの作業ツリーを 1 つのランが占有しているという記録。`pnpm josh run:hold` が取り、`pnpm josh run:release` が外す。→ `.claude/skills/workflow-commands/working-tree-hold.md` → "The working-tree hold"
|
|
10
8
|
- **park** — `backlogrun` が自分で決められない子を `needs-decision` で止め、バッチ全体は止めずに次の子へ進むこと。→ `.claude/skills/workflow-commands/backlogrun-park.md` → "park and continue"
|
|
11
|
-
- **point of use** —
|
|
9
|
+
- **point of use** — 文書を入口ではなく、従うべき操作の直前に同じターンで読むこと。→ `.claude/skills/workflow-commands/SKILL.md` → "Four documents are read at the point of use, not at the entry"
|
|
12
10
|
- **entry read** — コマンド起動時に読む文書の集合。`pnpm josh read:set` がその集合と費用を答える。→ `.claude/skills/workflow-commands/SKILL.md` → "Which file to read"
|
|
13
11
|
- **oracle** — 機械的に読める入力だけから規則の答えを計算するコマンド。一覧は `pnpm josh oracle:list`。→ `prompts/collaboration-workflow/residency.md` → "第 0 問"
|
|
14
|
-
- **interrupt** — WIP 上限を超えても起票できる、3
|
|
12
|
+
- **interrupt** — WIP 上限を超えても起票できる、3 条件で決まる発見。上流起票の割り込み Issue とは別。→ `prompts/collaboration-workflow/wip-cap.md` → "割り込み起票"、`prompts/collaboration-workflow/upstream-interrupt.md` → "別パッケージ起因の問題は割り込み Issue で対応する"
|
|
15
13
|
- **Tier** — 判断点の 3 区分。A は可逆で自分で決める、B は拮抗していて人に聞く、C は不可逆・共有状態で明示指示が要る。→ `CLAUDE.md` → "Decision autonomy"、`prompts/collaboration-workflow/operating-rules.md` → "decision-autonomy"
|
|
16
14
|
- **carry** — `backlogrun` の 1 回の起動の予算と進捗を、セッション cut をまたいで引き継ぐ記録(`pnpm josh run:carry`)。→ `.claude/skills/workflow-commands/backlogrun-steps.md` → "The session cut is inside the invocation"
|
|
17
15
|
- **wave** — エピックの子をまとめて並行実行する組。仕組みではなく、依存宣言で表す形。→ `.claude/skills/epic-commands/execution-waves.md` → "Execution waves — parallel, then one alone, then the rest"
|
|
@@ -2,33 +2,27 @@
|
|
|
2
2
|
|
|
3
3
|
## セッション向け出力で Issue はリンク+セッション言語の短い要約で参照する(joshuafolkken/kit#1758)
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
理由は `docs/maintainers/issue-citation-rationale.md` → "Why the rule exists"、発火点の常駐理由は `docs/maintainers/issue-citation-rationale.md` → "Why the trigger is resident in CLAUDE.md"。
|
|
6
6
|
|
|
7
|
-
**規則**: セッション向け出力で Issue を指すときは、次の 2
|
|
7
|
+
**規則**: セッション向け出力で Issue を指すときは、次の 2 つを必ず添える(対応前の「これから走らせる」「待機中」「対象外」の言及も含む)。
|
|
8
8
|
|
|
9
9
|
1. 番号にチケットへの markdown リンク
|
|
10
|
-
2. セッション言語(`JOSH_SESSION_LANG`、既定 `ja
|
|
11
|
-
|
|
12
|
-
書き方の例:
|
|
10
|
+
2. セッション言語(`JOSH_SESSION_LANG`、既定 `ja`)の短い要約タイトル(全訳でなくてよい)
|
|
13
11
|
|
|
14
12
|
- `[#<N>](https://github.com/<owner>/<repo>/issues/<N>) — <その Issue が何をするものかの短い要約>`
|
|
15
13
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
**要約タイトルは全訳ではなく要約でよい。** 何をするものか分かれば足りる。長い訳を作ることが目的ではない。`issue:cite` が出すタイトルを、必要ならセッション言語に言い換えて使う。
|
|
19
|
-
|
|
20
|
-
**対応前の言及も対象である。** 「これから走らせる」「待機中」「対象外」を並べる場面も含む。
|
|
14
|
+
**この引用行は `pnpm josh issue:cite <N> [<N> ...]` が出す。** 複数 Issue は 1 呼び出しにまとめ、他リポジトリは `--repo <owner/repo>` か `owner/repo#N` 表記(`docs/maintainers/issue-citation-rationale.md` → "Why issue:cite prints the line"、詳細は [docs/josh-commands.md](https://github.com/joshuafolkken/kit/blob/main/docs/josh-commands.md) の `josh issue:cite`)。タイトルは必要ならセッション言語に言い換える。素の `#N` の行(コミットメッセージ・PR 本文・イベント行・Telegram 本文)を写すときは引用形に直す(`docs/maintainers/issue-citation-rationale.md` → "Why josh prints the citation form itself")。
|
|
21
15
|
|
|
22
16
|
### 適用範囲
|
|
23
17
|
|
|
24
18
|
**対象** — セッション向け出力。会話の説明、計画の提示、進捗報告、完了報告、`AskUserQuestion` の選択肢。
|
|
25
19
|
|
|
26
|
-
**対象外** —
|
|
20
|
+
**対象外** — Issue 本文、Issue / PR コメント。
|
|
27
21
|
|
|
28
22
|
### 英語固定の 3 つとは衝突しない
|
|
29
23
|
|
|
30
|
-
|
|
24
|
+
要約はタイトルではなくセッション内の散文なので、`overview.md` →「出力の言語(`JOSH_SESSION_LANG`)」の英語固定とは矛盾しない。
|
|
31
25
|
|
|
32
26
|
### 停止時の担保(joshuafolkken/kit#2247)
|
|
33
27
|
|
|
34
|
-
`Stop` フック `pnpm josh stop:guard`
|
|
28
|
+
`Stop` フック `pnpm josh stop:guard` は返信の地の文に裸の `#N` があると停止をブロックし、`pnpm josh issue:cite <N...>` の実行形を差し戻す。差し戻されたらその実行形で引用し直す(`docs/maintainers/issue-citation-rationale.md` → "How the Stop hook delivers it"、検出が外す範囲は [docs/josh-commands.md](https://github.com/joshuafolkken/kit/blob/main/docs/josh-commands.md) の `josh stop:guard`)。
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
## Step 1: Issue 作成テンプレ
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
タイトルは簡潔で明瞭な英語にする(「出力の言語(`JOSH_SESSION_LANG`)」の例外)。日本語や改善できるタイトルは実装開始前に `gh api -X PATCH repos/{owner}/{repo}/issues/<N> -f title="<title>"` で書き換える。本文は次のテンプレートの節をすべて含める:
|
|
4
4
|
|
|
5
5
|
````md
|
|
6
6
|
## 背景
|
|
@@ -50,45 +50,45 @@
|
|
|
50
50
|
|
|
51
51
|
### `## 背景` 直下の宣言と分類ラベル
|
|
52
52
|
|
|
53
|
-
起票は `pnpm josh issue:file "<title>" --body-file <本文ファイル> --depth <n>`
|
|
53
|
+
起票は `pnpm josh issue:file "<title>" --body-file <本文ファイル> --depth <n>` で行い、本文の検査(`pnpm josh issue:lint <path>` と同じ)と下表のラベル付与はコマンドが行う。**宣言は起票者が選ぶ。** `- 人の判断:` の行は必須で、`issue:file` が検査し `auto-ok` の判定に使う(`scripts/issue/issue-auto-ok.ts`、`docs/how-to/run-backlog.md`)。`不要` を宣言する起票には `--label run:lane`(kit 自身の検証の不具合なら `run:solo`)も付ける — 無ければ `issue:file` が拒否する。
|
|
54
54
|
|
|
55
|
-
| 宣言 | 付くラベル | 選ぶ基準
|
|
56
|
-
| ---------------------- | --------------------------------- |
|
|
57
|
-
| `- 種別: 不具合` | `bug` |
|
|
58
|
-
| `- 目的: 機能追加` | `enhancement` |
|
|
59
|
-
| `- 目的: 機能改善` | `enhancement` |
|
|
60
|
-
| `- 互換性: 破壊的変更` | `breaking-change` |
|
|
61
|
-
| `- 種別: 振る舞い変更` | なし | AI
|
|
62
|
-
| `- 人の判断: 不要` | `auto-ok
|
|
55
|
+
| 宣言 | 付くラベル | 選ぶ基準 |
|
|
56
|
+
| ---------------------- | --------------------------------- | ---------------------------------------------------------- |
|
|
57
|
+
| `- 種別: 不具合` | `bug` | 報告された症状を直す(無ければ `- 種別: 非不具合`) |
|
|
58
|
+
| `- 目的: 機能追加` | `enhancement` | 新しい機能。修正・文書・依存更新・保守には書かない |
|
|
59
|
+
| `- 目的: 機能改善` | `enhancement` | 既存機能の改善。目的が曖昧なら受け入れ条件を具体化してから |
|
|
60
|
+
| `- 互換性: 破壊的変更` | `breaking-change` | 契約を変える。移行措置があっても書き、廃止対象と影響を書く |
|
|
61
|
+
| `- 種別: 振る舞い変更` | なし | AI の振る舞いを変える。下の 3 見出しが必須 |
|
|
62
|
+
| `- 人の判断: 不要` | `auto-ok`(除外ラベルが無ければ) | 方針の判断・外部アカウント・目視確認のどれも要らない |
|
|
63
63
|
|
|
64
|
-
- **持ち主の意図と違う動きは、コード・コメント・テストに書かれた設計どおりでも `- 種別: 不具合` とする。**
|
|
65
|
-
-
|
|
66
|
-
-
|
|
67
|
-
-
|
|
68
|
-
-
|
|
69
|
-
-
|
|
64
|
+
- **持ち主の意図と違う動きは、コード・コメント・テストに書かれた設計どおりでも `- 種別: 不具合` とする。** 例: コメントとテストに固定されたまま意図より広く働く自動付与、文書だけでも意図と違う分類を生む基準
|
|
65
|
+
- `- 種別: 不具合` の回帰テストは、利用者が症状を見たのと同じ粒度で書く。修正前のツリーでも緑になるテストは `pnpm josh git -y` が拒否する(joshuafolkken/kit#2448)
|
|
66
|
+
- `bugfix`(PR のリリース分類)を Issue の `bug` の代わりにしない。`enhancement` と `breaking-change` の両方を持つ Issue の PR は `breaking-change` にする
|
|
67
|
+
- `## 発火点` の名前は `prompts/collaboration-workflow/rule-delivery.md` の配送表と突き合わされる
|
|
68
|
+
- `## ベースライン` の測定コマンドは、マージ後に `pnpm josh measure:rerun <N>` が再実行して before / after を印字する(作者が `OWNER` / `MEMBER` / `COLLABORATOR` の Issue に限る)
|
|
69
|
+
- 公開しないと利用側が使えない変更には `--release` を付ける(既存 Issue は `pnpm josh issue:release <N>`、`docs/josh-commands-backlog.md` → `josh issue:release`)
|
|
70
70
|
|
|
71
71
|
### 起票元へのバックリンク(`## Origin` / `## Upstream issues`)
|
|
72
72
|
|
|
73
|
-
**別リポジトリのセッションから起票した Issue には、起票元へのリンクを双方向で必ず書く。**
|
|
73
|
+
**別リポジトリのセッションから起票した Issue には、起票元へのリンクを双方向で必ず書く。**
|
|
74
74
|
|
|
75
|
-
| 方向
|
|
76
|
-
|
|
|
77
|
-
| 上流
|
|
78
|
-
| 起票元
|
|
79
|
-
| 起票元
|
|
75
|
+
| 方向 | 置き場所 | 固定見出し | 内容 |
|
|
76
|
+
| --------------- | ---------------------- | ----------------------- | -------------------------- |
|
|
77
|
+
| 上流 → 起票元 | 上流 Issue の本文 | `## Origin` | 起票元 Issue |
|
|
78
|
+
| 起票元 → 上流 | 起票元の本文かコメント | `## Upstream issues` | 起票した上流 Issue 全件 |
|
|
79
|
+
| 起票元 → 未起票 | 起票元の本文かコメント | `## Upstream candidate` | 第三者への報告候補と下書き |
|
|
80
80
|
|
|
81
|
-
-
|
|
82
|
-
- **リンクは必ずリポジトリ修飾する**(`owner/repo#N` または完全 URL
|
|
83
|
-
-
|
|
84
|
-
-
|
|
81
|
+
- 見出しは固定する。起票元の本文が確定済みなら、同じ見出しでコメントに書く
|
|
82
|
+
- **リンクは必ずリポジトリ修飾する**(`owner/repo#N` または完全 URL)
|
|
83
|
+
- チェックボックス行(`- [ ] owner/repo#N`)で書かず、散文か素の箇条書き(`- owner/repo#N`)にする(epic の自動クローズを止めるため)
|
|
84
|
+
- third-party への報告はユーザーの明示指示まで起票しない(→「第三者リポジトリへの書き込みは Tier C(明示指示が必要)」)
|
|
85
85
|
- 割り込みで起票する手順は `upstream-interrupt.md`
|
|
86
86
|
|
|
87
87
|
### 複数 Issue に分割するときの epic Issue
|
|
88
88
|
|
|
89
|
-
**1 つの要望を 2 件以上の Issue に分割したら、件数や順序の有無にかかわらず常に epic を作る。**
|
|
89
|
+
**1 つの要望を 2 件以上の Issue に分割したら、件数や順序の有無にかかわらず常に epic を作る。** 作成は `pnpm josh epic`、点検は `pnpm josh epic:check <E>`、子の追加は `pnpm josh epic --add` で行い、本文を手で編集しない。epic 自体を実装ランに渡さない(`backlogrun #<E> --only` が子を回す)。記法は `epic-commands` スキル →「Creating an epic」。
|
|
90
90
|
|
|
91
|
-
|
|
91
|
+
`josh` が使えない環境での手作業手順:
|
|
92
92
|
|
|
93
93
|
1. 子 Issue をすべて起票し、番号を控える。
|
|
94
94
|
2. ラベルを用意する: `gh api repos/{owner}/{repo}/labels -f name=epic -f color=5319e7 -f description="Tracks a batch of child issues from one split" --silent 2>/dev/null || true`
|
|
@@ -115,4 +115,4 @@
|
|
|
115
115
|
|
|
116
116
|
4. 順序があるときだけ、別ステップで依存を足す(Issue 番号ではなく database id を渡す): `gh api repos/{owner}/{repo}/issues/<N2>/dependencies/blocked_by -F issue_id="$(gh api repos/{owner}/{repo}/issues/<N1> --jq .id)"`
|
|
117
117
|
|
|
118
|
-
|
|
118
|
+
各手順の理由は kit の `docs/maintainers/epic-commands-rationale.md` →「Creating an epic by hand」。
|
|
@@ -1,72 +1,63 @@
|
|
|
1
1
|
## 運用ルール
|
|
2
2
|
|
|
3
3
|
- 通知は CI チェック成功後に投稿する
|
|
4
|
-
-
|
|
5
|
-
-
|
|
4
|
+
- 通知投稿に失敗しても、実装完了の事実をログで確認できるようにする
|
|
5
|
+
- 自動投稿する Issue コメントは `JOSH_SESSION_LANG` の言語(未設定なら `ja`)で書く。Issue タイトルだけは英語
|
|
6
6
|
|
|
7
7
|
### CI チェック失敗時の対応
|
|
8
8
|
|
|
9
|
-
`pnpm josh followup` は Required
|
|
9
|
+
`pnpm josh followup` は Required チェックだけを待つが、Workers Builds(Cloudflare デプロイ)など**非 Required チェックの失敗もユーザーに報告する**。
|
|
10
10
|
|
|
11
|
-
- `pnpm josh followup`
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
- ユーザーへの報告も失敗の事実を正直に伝える(「成功」として扱わない)
|
|
11
|
+
- `pnpm josh followup` が印字するチェック一覧から失敗をすべて列挙する。手で読み直すときは `gh api repos/{owner}/{repo}/commits/<head-sha>/check-runs --jq '.check_runs[] | {name, conclusion}'`(`gh pr checks` は GraphQL を通るためクラウドセッションで 403)
|
|
12
|
+
- 修正できたら修正内容を、できなかったら失敗チェック名・原因・未解決である旨を `--notify-message` に書く。**完了コメントに失敗を隠してはならない**
|
|
13
|
+
- ユーザーへの報告でも失敗を「成功」として扱わない
|
|
15
14
|
|
|
16
15
|
### ほかの単一ソースにある規則
|
|
17
16
|
|
|
18
|
-
auto-merge と `completion` 通知・明示的な起動・`confirmation` 通知・作業ツリーの保持・overrides
|
|
17
|
+
auto-merge と `completion` 通知・明示的な起動・`confirmation` 通知・作業ツリーの保持・overrides の保護の置き場は `docs/maintainers/operating-rules-rationale.md` → "Rules that moved to their single source"。
|
|
19
18
|
|
|
20
19
|
### 指示されていない行動は取らない
|
|
21
20
|
|
|
22
|
-
|
|
21
|
+
`CLAUDE.md` → "Git Rules" の細則。対象には共有ブランチへの push・外部通知の追加送信・リポジトリ設定の変更も含む。
|
|
23
22
|
|
|
24
23
|
- auto-merge の本文は [`followup.md`](../../.claude/skills/workflow-commands/followup.md)、`backlogrun` の子への継承は [`backlogrun-child.md`](../../.claude/skills/workflow-commands/backlogrun-child.md)
|
|
25
24
|
- `kickoff` / `pnpm josh followup` 単独実行は文書化されたスコープで終了する。PR が OPEN のまま完了したら状態を報告して停止する
|
|
26
|
-
- 「チェックが全部 green
|
|
27
|
-
- **deny と配送ガードは実装であって規則ではない。** `gh pr merge`・force push
|
|
28
|
-
-
|
|
29
|
-
- ただしこの「迷ったら確認」は Tier C に限る。**可逆な実装・設計判断(Tier A)は別ルール**(下記「意思決定の自律ポリシー」)に従う
|
|
25
|
+
- 「チェックが全部 green」は次へ進む承認ではない
|
|
26
|
+
- **deny と配送ガードは実装であって規則ではない。** `gh pr merge`・force push・ブランチ削除は `.claude/settings.json` の `permissions.deny` と `pnpm josh rule:guard` が拒否する(一覧は [`rule-delivery.md`](./rule-delivery.md) →「配送されている規則」)が、規則より狭い。ツールが通したことを許可と読まない。`fullrun` の auto-merge は `pnpm josh followup` の内部から gh を起動するため影響を受けない
|
|
27
|
+
- 共有状態に影響する操作(Tier C)は、迷ったら確認する。可逆な実装・設計判断(Tier A)は下記 "decision-autonomy" に従う
|
|
30
28
|
|
|
31
29
|
### no-self-staging — git index を勝手に変更しない(自律 staging の禁止)
|
|
32
30
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
- **調査目的の staging
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
- 上記以外で staging が必要だと考えたときは、**実行せずに先に確認する**
|
|
44
|
-
- **レーンの中で競合を解決したあとの「解決済み」の記録は、ケース 2 に含まれる(Tier A)。** レーンは run 専用の作業ツリーで、守るべき利用者の staging はない。利用者に `git add` の許可を求めず、`pnpm josh git -y` で記録する。手順は `.claude/skills/workflow-commands/chain-rule.md` →「origin/main is merged in before the gate」の 1 か所にだけ書く(joshuafolkken/kit#2445)
|
|
45
|
-
- 同じ理由で、`git reset` / `git checkout -- <path>` / `git restore <path>` など index や作業ツリーを破壊的に書き換える操作も、自分の判断で実行しない
|
|
46
|
-
- **`git stash` は例外的に、次の明文化されたフローの中でのみ自動実行してよい**:
|
|
47
|
-
1. `fullrun new` / `halfrun new` の手順 5(作業ツリーに変更がある状態で `josh latest` を回す前の退避)
|
|
31
|
+
`CLAUDE.md` → "Git Rules" の細則。index には履歴がなく、上書きされたステージ状態は復元できない(`docs/maintainers/operating-rules-rationale.md` → "Why the index is the user's")。
|
|
32
|
+
|
|
33
|
+
- **調査目的の staging はしない。** 読み取り専用コマンドを使う: `git status --short`、`git diff` / `git diff --stat` / `git diff HEAD`、`git diff --staged`、未追跡ファイルは `git diff --no-index /dev/null <new-file>` か直接読む
|
|
34
|
+
- staging してよいのは次の 2 ケースだけ。それ以外は実行せずに確認する:
|
|
35
|
+
1. ユーザーがそのターンで明示的にステージを指示した
|
|
36
|
+
2. 承認済みのコミットフロー(`pnpm josh git`、`fullrun` / `backlogrun` のコミット手順。`halfrun` は含まない)
|
|
37
|
+
- レーンの中で競合を解決したあとの記録はケース 2(Tier A)。許可を求めず `pnpm josh git -y` で記録する。手順は `.claude/skills/workflow-commands/chain-rule.md` →「origin/main is merged in before the gate」(joshuafolkken/kit#2445)
|
|
38
|
+
- `git reset` / `git checkout -- <path>` / `git restore <path>` など index や作業ツリーを破壊的に書き換える操作も、自分の判断で実行しない
|
|
39
|
+
- **`git stash` を自動実行してよいのは次のフローだけ**。ほかの場面では実行せずに確認する:
|
|
40
|
+
1. `fullrun new` / `halfrun new` の手順 5(`josh latest` 前の退避)
|
|
48
41
|
2. `backlogrun` のラン開始時の `josh latest`
|
|
49
42
|
3. 「別パッケージ起因の問題は割り込み Issue で対応する」
|
|
50
43
|
4. `backlogrun` が epic の子を始める前の preflight(`pnpm josh run:hold <N>` が `reclaim` と答えたときの回収 — joshuafolkken/kit#926, joshuafolkken/kit#1965)
|
|
51
44
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
- **会話で作った実装をランへ渡す「引き渡し用の stash」も `pnpm josh stash:pop "<メッセージ>"` で復元する。当てたあと stash は消える**(経緯は `docs/maintainers/operating-rules-rationale.md` → "Why a handed-over stash is popped")
|
|
55
|
-
- **計画には復元手順としてこの 1 行だけを書く。** `git stash apply` / `git stash pop` も「drop しない」という条件も書かない
|
|
56
|
-
- **計画がガードの拒否する復元形を指していたら、実行側は `stash:pop` に読み替えて続行し、Issue コメントに残す(Tier A)。** `needs-decision` では止まらない
|
|
57
|
-
- **stash を残すのは持ち主の判断だけである。** 持ち主が計画に理由を書き、ランはそこで止まって確認する
|
|
45
|
+
1〜3 は直後に `pnpm josh stash:pop "<メッセージ>"` で復元する。stash は全 work tree が共有する 1 本のスタックなので、位置指定や引数なしの `git stash pop` は使わない(joshuafolkken/kit#2050)。4 は復元しない — 代わりに stash を子の Issue にコメントで記録する(`prerequisite.md` の stash と同じく、記録だけが後で pop させる手がかり)
|
|
58
46
|
|
|
59
|
-
-
|
|
60
|
-
-
|
|
47
|
+
- **会話で作った実装をランへ渡す「引き渡し用の stash」も `pnpm josh stash:pop "<メッセージ>"` で復元する。当てたあと stash は消える**(`docs/maintainers/operating-rules-rationale.md` → "Why a handed-over stash is popped")
|
|
48
|
+
- 計画には復元手順としてこの 1 行だけを書く。`git stash apply` / `git stash pop` も「drop しない」という条件も書かない
|
|
49
|
+
- 計画がガードの拒否する復元形を指していたら、実行側は `stash:pop` に読み替えて続行し、Issue コメントに残す(Tier A)。`needs-decision` では止まらない
|
|
50
|
+
- stash を残すのは持ち主の判断だけ。持ち主が計画に理由を書き、ランはそこで止まって確認する
|
|
51
|
+
- staging・index の書き換え・`git commit` の直接実行は deny されており、deny には「そのターンでユーザーが明示指示した」という例外がない。ケース 1 はユーザー自身の端末で実行してもらう。コミットを指示されたら `pnpm josh git` を通す
|
|
52
|
+
- index を守る deny と `pnpm josh rule:guard`(`worktree-mutation`・`index-mutation`・`destructive-command`・`protected-file` 行)も実装である(→「deny と配送ガードは実装であって規則ではない」)
|
|
61
53
|
|
|
62
54
|
### decision-autonomy — 意思決定の自律ポリシー(確認停止を減らす)
|
|
63
55
|
|
|
64
|
-
|
|
56
|
+
`CLAUDE.md` → "Decision autonomy" の境界の細則。
|
|
65
57
|
|
|
66
|
-
- **A と B
|
|
67
|
-
-
|
|
68
|
-
-
|
|
69
|
-
-
|
|
70
|
-
- **Tier C
|
|
71
|
-
-
|
|
72
|
-
- **自動判断の記録の書き方**: Issue 駆動ワークフロー内では `pnpm josh issue:comment <N> --body-file <path>` で、採用案・不採用の代替案・なぜ採用案が明確に優位かを記載する
|
|
58
|
+
- **A と B の判定**: 確認するのは「差が僅差 かつ 後戻りしにくい/アーキテクチャに長く影響する」ときだけ。明確に優位な選択肢は自動で選び、僅差でも安価に巻き戻せる選択は決めて記録して進む
|
|
59
|
+
- 起票した Issue の所属先は、候補が複数の epic に散っていても Tier B ではない(joshuafolkken/kit#1339)。1 つを選び、採用・却下・理由・決定日を Issue と epic の両方に記録する。止まるのは 2 つが本当に甲乙つけがたいときだけ
|
|
60
|
+
- 自己修正(自分が公開した成果物の事実誤りの訂正、同じセッションで自分が特定した自分の作業の抜けの穴埋め)は Tier A。承認済みの作業の完了・修復に限り、目標の表明や問いで動いてよい意味ではない(→ `principles.md` → "consult-vs-execute")
|
|
61
|
+
- **Tier C との境界**: マージ・ブランチ削除・force push・スコープ外の変更は、自分が招いた問題でも Tier C。確認を外しても監査証跡は外さない
|
|
62
|
+
- **major のバージョン bump は Tier C**: `pnpm josh bump major` は自分の判断で実行も提案もしない。既定は minor / patch で、major はユーザーがそのターンで明示したときだけ(0.x の major は 1.0.0 になり戻せない)。`josh bump` が版を変えたら、変わった挙動の `docs/` をコミット前に更新する
|
|
63
|
+
- 自動判断の記録: Issue 駆動ワークフロー内では `pnpm josh issue:comment <N> --body-file <path>` で、採用案・不採用の代替案・採用案が優位な理由を書く
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# コマンド出力が文脈へ持ち込む量の上限(joshuafolkken/kit#1173)
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
配布される `.claude/settings.json` の `env` ブロックが `BASH_MAX_OUTPUT_LENGTH` を宣言し、Bash ツールの出力がこの文字数を超えると真ん中が省略される。
|
|
4
4
|
|
|
5
5
|
```json
|
|
6
6
|
"env": {
|
|
@@ -8,34 +8,34 @@
|
|
|
8
8
|
}
|
|
9
9
|
```
|
|
10
10
|
|
|
11
|
-
**8,000 文字**(harness の既定は 30,000
|
|
11
|
+
**8,000 文字**(harness の既定は 30,000、最大は 150,000。根拠は `docs/maintainers/output-bounds-rationale.md` → "Why 8,000")。効くのは Bash ツールだけで、`Read` と `Agent` の結果には効かない。
|
|
12
12
|
|
|
13
13
|
## 切り詰められたときにどうするか
|
|
14
14
|
|
|
15
|
-
**情報を落とすのではなく、必要な範囲に合わせて読み直す。**
|
|
15
|
+
**情報を落とすのではなく、必要な範囲に合わせて読み直す。** 再実行ではなく絞り込む:
|
|
16
16
|
|
|
17
|
-
-
|
|
18
|
-
-
|
|
19
|
-
-
|
|
17
|
+
- ファイルは範囲を指定する(`sed -n '120,180p' <file>`、または `Read` の `offset` / `limit`)
|
|
18
|
+
- 一覧は件数を絞る(`--limit`、`| head -30`)、JSON は必要な項目だけ取り出す(`gh api … --jq '…'`)
|
|
19
|
+
- 全量が要るときは、ファイルへ落として(`> <file>`)から範囲を読む
|
|
20
20
|
|
|
21
21
|
## 切り詰められた出力を、完全な出力として読まない
|
|
22
22
|
|
|
23
|
-
**検証ゲートと差分は、切り詰められた結果で判断しない。**
|
|
23
|
+
**検証ゲートと差分は、切り詰められた結果で判断しない。**
|
|
24
24
|
|
|
25
|
-
-
|
|
26
|
-
-
|
|
25
|
+
- `pnpm josh gate` は合否の 1 行を末尾に出す。失敗の内訳が切れたら、合否行の直前の `full output: <path>` のファイルを読む(joshuafolkken/kit#1227)
|
|
26
|
+
- 差分には判定行が無い。差分はファイルへ落としてから範囲で読む(`git diff main...HEAD > /tmp/diff.patch && wc -l /tmp/diff.patch`)
|
|
27
27
|
|
|
28
28
|
## 検証コマンドをパイプに繋がない(joshuafolkken/kit#1556)
|
|
29
29
|
|
|
30
|
-
**パイプラインの終了コードは最後のコマンドのものである。** `pnpm josh gate 2>&1 | tail -40`
|
|
30
|
+
**パイプラインの終了コードは最後のコマンドのものである。** `pnpm josh gate 2>&1 | tail -40` は赤いゲートを成功として返す。**これは `josh gate` の欠陥ではない。** 直すのは呼び出し方である。
|
|
31
31
|
|
|
32
|
-
- **既定はパイプなしで実行する。**
|
|
33
|
-
- 絞るなら、ファイルへ落として範囲で読む(`pnpm josh gate > /tmp/gate.log 2>&1; tail -40 /tmp/gate.log
|
|
32
|
+
- **既定はパイプなしで実行する。** 判定行は末尾に出るので、省略されても残る
|
|
33
|
+
- 絞るなら、ファイルへ落として範囲で読む(`pnpm josh gate > /tmp/gate.log 2>&1; tail -40 /tmp/gate.log`)
|
|
34
34
|
- パイプが避けられないなら `set -o pipefail` を前置する
|
|
35
|
-
-
|
|
35
|
+
- どの形でも、印字された判定行を読む。終了コードだけを答えにしない
|
|
36
36
|
|
|
37
|
-
|
|
37
|
+
対象は結果が合否を意味するコマンドだけ — `gate` / `check` / `lint*` / `cspell*` / `test*` / `eval`。**`git log | head` や `gh issue list | head` は対象外であり、意図的にそうしている。** `latest:scope` / `review:brief` も、判定ではなく答えを印字するので `$(...)` で受けてよい。`pnpm josh pretool:guard` は、後段が `tail` /全行読みの `grep` だけの検証パイプラインを `(set -o pipefail; …)` で包み、他のパイプは拒否する(`rule-delivery.md`、`docs/maintainers/output-bounds-rationale.md` → "Why the pipe rule is delivered by a trigger")。
|
|
38
38
|
|
|
39
39
|
## 検査
|
|
40
40
|
|
|
41
|
-
`scripts/lib/bash-output-cap.test.ts`
|
|
41
|
+
`scripts/lib/bash-output-cap.test.ts` が、配布設定の上限がこの文書の値と一致し、既定より小さく最大を超えないことを固定する(`docs/maintainers/output-bounds-rationale.md` → "What the tests pin")。
|