@joshuafolkken/kit 1.1455.0 → 1.1514.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/settings.json +6 -6
- package/.claude/skills/dependency-update/SKILL.md +26 -55
- package/.claude/skills/epic-commands/SKILL.md +83 -156
- package/.claude/skills/epic-commands/epic-bundle.md +51 -79
- package/.claude/skills/epic-commands/execution-waves.md +43 -81
- package/.claude/skills/verify-ui/SKILL.md +24 -50
- package/.claude/skills/workflow-commands/SKILL.md +7 -9
- package/.claude/skills/workflow-commands/background-commands.md +31 -46
- package/.claude/skills/workflow-commands/backlogrun-child.md +65 -85
- package/.claude/skills/workflow-commands/backlogrun-lanes.md +86 -125
- package/.claude/skills/workflow-commands/backlogrun-park.md +68 -118
- package/.claude/skills/workflow-commands/backlogrun-progress.md +17 -28
- package/.claude/skills/workflow-commands/backlogrun-recovery.md +17 -26
- package/.claude/skills/workflow-commands/backlogrun-steps.md +35 -52
- package/.claude/skills/workflow-commands/backlogrun.md +31 -50
- package/.claude/skills/workflow-commands/chain-rule.md +31 -40
- package/.claude/skills/workflow-commands/delegation.md +12 -8
- package/.claude/skills/workflow-commands/entry-sequence.md +1 -3
- package/.claude/skills/workflow-commands/followup.md +55 -77
- package/.claude/skills/workflow-commands/fullrun-steps.md +3 -5
- package/.claude/skills/workflow-commands/fullrun.md +4 -6
- package/.claude/skills/workflow-commands/halfrun.md +3 -7
- package/.claude/skills/workflow-commands/into-target.md +1 -2
- package/.claude/skills/workflow-commands/issue-comments.md +43 -60
- package/.claude/skills/workflow-commands/issue-scout.md +3 -2
- package/.claude/skills/workflow-commands/kickoff.md +65 -74
- package/.claude/skills/workflow-commands/latest-gate.md +2 -6
- package/.claude/skills/workflow-commands/needs-human-review.md +2 -5
- package/.claude/skills/workflow-commands/observation-filing.md +59 -118
- package/.claude/skills/workflow-commands/observation-ledger.md +52 -112
- package/.claude/skills/workflow-commands/pre-gate-cut.md +88 -142
- package/.claude/skills/workflow-commands/prerequisite.md +11 -17
- package/.claude/skills/workflow-commands/progress-watcher.md +23 -33
- package/.claude/skills/workflow-commands/prrun.md +3 -5
- package/.claude/skills/workflow-commands/retrospective.md +35 -54
- package/.claude/skills/workflow-commands/split-assessment.md +32 -58
- package/.claude/skills/workflow-commands/target-repository.md +1 -2
- package/.claude/skills/workflow-commands/working-tree-hold.md +54 -73
- package/.codex/hooks.json +6 -6
- package/.github/actions/setup-node/action.yml +1 -1
- package/.github/workflows/ci.yml +1 -1
- package/.github/workflows/publish.yml +2 -2
- package/CLAUDE.md +7 -6
- package/cspell/index.yaml +7 -0
- package/dist/CLAUDE.md +7 -6
- package/dist/commands/document-section-cli.js +67 -34
- package/dist/hooks/batch-guard.js +6 -6
- package/dist/hooks/chunk-4KKD2UTK.js +66 -0
- package/dist/hooks/{chunk-GPLGZ6IC.js → chunk-6TS2JD6D.js} +14 -3
- package/dist/hooks/chunk-7DSBJVFH.js +50 -0
- package/dist/hooks/{chunk-5H4SSDSD.js → chunk-A65Y4YOR.js} +3 -3
- package/dist/hooks/{chunk-3C4XRYG6.js → chunk-APUO6U4J.js} +102 -19
- package/dist/hooks/{chunk-IX6TTTI6.js → chunk-EFXE6C37.js} +8 -22
- package/dist/hooks/chunk-GP4IEC4O.js +20 -0
- package/dist/hooks/chunk-JP45SOCJ.js +56 -0
- package/dist/hooks/{chunk-OLMO72ON.js → chunk-LAOV7NLM.js} +1 -1
- package/dist/hooks/chunk-M4HGZV7U.js +83 -0
- package/dist/hooks/{chunk-TBJFTSUY.js → chunk-O6GDRNJB.js} +9 -7
- package/dist/hooks/{chunk-HFGWYGUV.js → chunk-PF2NZL2A.js} +5 -5
- package/dist/hooks/{chunk-WNLVGT7E.js → chunk-PTICX4OL.js} +4 -5
- package/dist/hooks/{chunk-HHI6FO3R.js → chunk-RT27QRJW.js} +763 -1515
- package/dist/hooks/{chunk-7WQBPLUN.js → chunk-SYOTDYCI.js} +1149 -1095
- package/dist/hooks/{chunk-LIAFCXL7.js → chunk-TNUMY6NL.js} +1519 -1332
- package/dist/hooks/chunk-UPUZF3AN.js +279 -0
- package/dist/hooks/{chunk-Z4XI7CZS.js → chunk-WK6SMBIC.js} +1932 -784
- package/dist/hooks/codex-hook-adapter.js +17 -14
- package/dist/hooks/duplicate-read-guard.js +7 -7
- package/dist/hooks/format-edited.js +5 -4
- package/dist/hooks/inputs.json +302 -247
- package/dist/hooks/investigation-guard.js +8 -11
- package/dist/hooks/pretool-guard.js +16 -13
- package/dist/hooks/session-lang.js +372 -26
- package/dist/hooks/stop-guard.js +2593 -189
- package/dist/josh.js +2128 -282
- 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/lefthook/base.yml +5 -3
- package/package.json +14 -12
- package/prompts/coding-standards.md +12 -22
- package/prompts/collaboration-workflow/file-edits.md +25 -45
- package/prompts/collaboration-workflow/gh-rest.md +19 -36
- package/prompts/collaboration-workflow/glossary.md +5 -7
- package/prompts/collaboration-workflow/issue-citation.md +6 -14
- package/prompts/collaboration-workflow/issue-template.md +40 -32
- package/prompts/collaboration-workflow/lane-instructions.md +35 -0
- package/prompts/collaboration-workflow/operating-rules.md +33 -46
- 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 +57 -54
- package/prompts/collaboration-workflow/proposal-request.md +1 -9
- package/prompts/collaboration-workflow/report-format.md +41 -49
- package/prompts/collaboration-workflow/residency.md +15 -11
- package/prompts/collaboration-workflow/rule-delivery.md +7 -15
- package/prompts/collaboration-workflow/shell-body.md +10 -20
- 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 +26 -32
- package/prompts/collaboration-workflow.md +25 -25
- package/prompts/refactoring.md +33 -43
- package/prompts/review-rubric.md +84 -129
- package/prompts/review.md +110 -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-argv.ts +20 -4
- package/scripts/agent/agent-exit-record.ts +23 -1
- package/scripts/agent/agent-role-profile.ts +101 -45
- package/scripts/agent/agent-safe-text.ts +60 -0
- package/scripts/agent/claude-agent-argv.ts +14 -0
- package/scripts/agent/codex-agent-argv.ts +9 -2
- package/scripts/agent/lane-instructions.ts +144 -0
- package/scripts/backlog/backlog-budget-cli.ts +1 -2
- package/scripts/backlog/backlog-budget.ts +4 -4
- 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 +3 -5
- package/scripts/backlog/backlog-drive-restore.ts +28 -2
- package/scripts/backlog/backlog-drive-seats.ts +27 -0
- package/scripts/backlog/backlog-drive.ts +11 -6
- package/scripts/backlog/backlog-occupied.ts +56 -0
- package/scripts/backlog/backlog-ready.ts +59 -15
- 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/duplicate-read-guard.ts +2 -2
- package/scripts/delegation/investigation-guard.ts +15 -65
- package/scripts/delegation/investigation-reads.ts +1 -2
- 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 +28 -27
- package/scripts/document/document-byte-check.ts +1 -2
- package/scripts/document/document-section-cli.ts +17 -5
- package/scripts/document/entry-read-budget.ts +3 -3
- package/scripts/document/read-set-cli.ts +4 -1
- package/scripts/epic/epic-audit-orphans.ts +5 -8
- package/scripts/epic/epic-audit-rationale.ts +8 -2
- package/scripts/epic/epic-audit.ts +52 -1
- package/scripts/epic/epic-bundle-cli.ts +1 -2
- package/scripts/epic/epic-bundle-evidence.ts +49 -26
- package/scripts/epic/epic-bundle-referenced.ts +14 -3
- package/scripts/epic/epic-bundle.ts +17 -9
- package/scripts/epic/epic-chains.ts +6 -2
- package/scripts/epic/epic-close-comment.ts +1 -2
- package/scripts/followup/git-followup-workflow.ts +19 -1
- package/scripts/gate/check-inputs.ts +129 -0
- package/scripts/gate/check-reuse.ts +162 -0
- package/scripts/gate/core-budget.ts +93 -44
- package/scripts/gate/core-wait.ts +130 -0
- package/scripts/gate/free-cores.ts +49 -0
- package/scripts/gate/gate-ledger.ts +17 -3
- package/scripts/gate/gate-plan.ts +23 -1
- package/scripts/gate/gate-report.ts +15 -2
- package/scripts/gate/gate-run-steps.ts +150 -0
- package/scripts/gate/held-mark.ts +55 -0
- package/scripts/gate/machine-capacity.ts +70 -11
- package/scripts/gate/pre-commit-type-check.ts +14 -1
- package/scripts/gate/verification-gate.ts +65 -127
- package/scripts/gh/git-gh-issue-rest.ts +1 -0
- package/scripts/gh/git-gh-issue-write.ts +24 -2
- package/scripts/gh/git-pr.ts +19 -3
- 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/git/main-merge-regenerate.ts +78 -0
- package/scripts/git/main-merge.ts +14 -5
- package/scripts/hooks/batch-guard.ts +5 -8
- package/scripts/hooks/format-edited-file.ts +10 -4
- package/scripts/hooks/pre-commit-lint.ts +91 -0
- package/scripts/hooks/pre-push-unit.ts +15 -4
- package/scripts/hooks/pretool-guard.ts +48 -79
- package/scripts/hooks/reserved-run.ts +1 -0
- package/scripts/hooks/run-hook.sh +10 -12
- package/scripts/hooks/step-zero-notice.ts +3 -2
- package/scripts/hooks/stop-actions.ts +204 -0
- package/scripts/hooks/stop-guard.ts +62 -21
- package/scripts/init/hook-command-rewrite.ts +6 -2
- package/scripts/init/hook-launch.ts +12 -7
- package/scripts/init/init-logic-deploy-vps.ts +4 -2
- package/scripts/issue/behavior-change-lint.ts +12 -6
- package/scripts/issue/expected-effect-lint.ts +59 -0
- package/scripts/issue/issue-cite-cli.ts +35 -15
- package/scripts/issue/issue-classification.ts +1 -1
- package/scripts/issue/issue-lint-cli.ts +5 -3
- package/scripts/issue/issue-scout-cli.ts +22 -16
- package/scripts/issue/markdown-section.ts +19 -5
- package/scripts/josh/command-usage.ts +110 -0
- package/scripts/josh/file-map-stamp.ts +1 -3
- package/scripts/josh/hook-decision.ts +17 -2
- package/scripts/josh/josh-command-map.ts +2 -0
- package/scripts/josh/josh-command-types.ts +55 -9
- package/scripts/josh/josh-commands-ai.ts +13 -0
- package/scripts/josh/josh-commands-development.ts +1 -1
- package/scripts/josh/josh-commands-hooks.ts +6 -0
- package/scripts/josh/josh-commands-lane.ts +10 -1
- package/scripts/josh/josh-commands-workflow.ts +5 -0
- package/scripts/josh/josh-logic.ts +6 -15
- package/scripts/josh/josh-usage-automation.ts +121 -0
- package/scripts/josh/josh-usage-backlog.ts +180 -0
- package/scripts/josh/josh-usage-developer.ts +230 -0
- package/scripts/josh/josh-usage-hooks.ts +38 -0
- package/scripts/josh/josh-usage-issue.ts +205 -0
- package/scripts/josh/josh-usage-review.ts +101 -0
- package/scripts/josh/josh-usage-run.ts +252 -0
- package/scripts/josh/josh-usage-session.ts +238 -0
- package/scripts/josh/josh-usage-workflow.ts +212 -0
- package/scripts/josh/josh.ts +14 -5
- package/scripts/josh/package-directory.ts +20 -0
- package/scripts/lane/lane-await.ts +3 -2
- package/scripts/lane/lane-capacity.ts +8 -2
- package/scripts/lane/lane-check-stats.ts +56 -0
- package/scripts/lane/lane-child-invocation.ts +49 -5
- package/scripts/lane/lane-dispatch.ts +3 -3
- package/scripts/lane/lane-guard-policy.ts +5 -5
- package/scripts/lane/lane-handoff.ts +8 -1
- package/scripts/lane/lane-install.ts +12 -4
- package/scripts/lane/lane-ledger.ts +52 -1
- package/scripts/lane/lane-limit-cli.ts +8 -9
- package/scripts/lane/lane-load.ts +9 -2
- package/scripts/lane/lane-measure-cli.ts +4 -0
- package/scripts/lane/lane-parked.ts +18 -0
- package/scripts/lane/lane-preserve.ts +29 -1
- package/scripts/lane/lane-process-load.ts +125 -0
- package/scripts/lane/lane-process-stats.ts +93 -0
- package/scripts/lane/lane-registry.ts +17 -10
- package/scripts/lane/lane-restart.ts +5 -26
- package/scripts/lane/lane-session-action.ts +146 -0
- package/scripts/lane/lane-session-broker.ts +68 -125
- package/scripts/lane/lane-spent.ts +14 -3
- package/scripts/lane/lane-stats.ts +1 -0
- package/scripts/lane/lane-withdraw-cli.ts +71 -0
- package/scripts/lane/lane-withdraw.ts +182 -0
- package/scripts/lint/format.ts +4 -4
- package/scripts/lint/lint-parallel.ts +10 -3
- package/scripts/lint/lint-related-scope.ts +4 -1
- package/scripts/managed-marker/managed-marker-logic.ts +1 -2
- package/scripts/notify/telegram-test.ts +10 -5
- 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-format-reference.ts +2 -0
- package/scripts/report/report-lint.ts +7 -4
- package/scripts/review/acceptance-map-check.ts +61 -0
- package/scripts/review/acceptance-map.ts +205 -0
- package/scripts/review/review-brief-cli.ts +1 -1
- package/scripts/review/review-record-cli.ts +6 -2
- package/scripts/rules/agent-model.ts +59 -0
- package/scripts/rules/delivered-rules.ts +11 -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 +4 -6
- package/scripts/rules/firing-point.ts +6 -5
- package/scripts/rules/git-force.ts +5 -9
- package/scripts/rules/guard-remedy.ts +117 -0
- package/scripts/rules/implementation-cut.ts +37 -35
- package/scripts/rules/index-guard.ts +4 -7
- package/scripts/rules/issue-comments.ts +67 -16
- 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/last-prompt.ts +50 -5
- package/scripts/rules/oracle-consulted.ts +4 -5
- package/scripts/rules/oracle-list-cli.ts +7 -0
- package/scripts/rules/piped-verification.ts +84 -32
- 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/rule-list.ts +4 -1
- package/scripts/rules/rule-registry-rows.ts +10 -0
- package/scripts/rules/rule-registry.ts +7 -4
- package/scripts/rules/rule-rewrite.ts +114 -0
- package/scripts/rules/rule-value.ts +7 -1
- package/scripts/rules/run-tail-rule.ts +6 -22
- package/scripts/rules/shell-body-trigger.ts +4 -6
- package/scripts/rules/shell-segments.ts +22 -0
- package/scripts/rules/stop-decision.ts +77 -0
- package/scripts/rules/stop-rules.ts +164 -77
- package/scripts/rules/tail-commands.ts +15 -1
- 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-cli.ts +2 -0
- package/scripts/run/board/run-board-closed.ts +8 -2
- package/scripts/run/board/run-board-github.ts +19 -3
- package/scripts/run/board/run-board-header.ts +4 -1
- package/scripts/run/board/run-board-idle.ts +31 -0
- package/scripts/run/board/run-board-labels.ts +2 -0
- package/scripts/run/board/run-board-layout.ts +1 -1
- package/scripts/run/board/run-board-read.ts +25 -12
- package/scripts/run/board/run-board-reason.ts +17 -4
- package/scripts/run/board/run-board-render-legend.ts +1 -0
- package/scripts/run/board/run-board-render-slot.ts +1 -1
- package/scripts/run/board/run-board-render-waits.ts +41 -0
- package/scripts/run/board/run-board-render.ts +6 -1
- package/scripts/run/board/run-board-row-yield.ts +1 -0
- package/scripts/run/board/run-board-state.ts +9 -0
- package/scripts/run/board/run-board-status.ts +89 -23
- package/scripts/run/board/run-board-thanks.ts +7 -2
- package/scripts/run/board/run-board-tick.ts +37 -8
- 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 +18 -22
- 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 +29 -0
- package/scripts/run/cut/run-cut.ts +10 -1
- package/scripts/run/detached-launch.ts +23 -4
- package/scripts/run/entry/run-entry-cli.ts +8 -1
- package/scripts/run/event/run-event-render.ts +1 -0
- package/scripts/run/event/run-event-scope.ts +19 -1
- package/scripts/run/event/run-event-stream-emit.ts +13 -6
- package/scripts/run/event/run-event-stream.ts +4 -0
- package/scripts/run/hold/run-hold-cli.ts +14 -3
- package/scripts/run/hold/run-hold-session.ts +46 -0
- package/scripts/run/hold/run-hold.ts +13 -4
- package/scripts/run/launch-priority.ts +32 -0
- package/scripts/run/merge/run-merge-cli.ts +16 -42
- package/scripts/run/merge/run-merge-ship.ts +59 -1
- package/scripts/run/merge/run-merge-signals.ts +99 -0
- package/scripts/run/merge/run-merge-steps.ts +11 -1
- package/scripts/run/merge/run-merge.ts +22 -9
- package/scripts/run/run-ending.ts +31 -3
- package/scripts/run/run-liveness.ts +1 -1
- package/scripts/run/run-parent-cut-hook.ts +5 -10
- package/scripts/run/run-poll-hook.ts +157 -0
- package/scripts/run/run-preflight.ts +1 -2
- package/scripts/run/run-step-cli.ts +22 -15
- package/scripts/run/run-step-section.ts +85 -0
- package/scripts/run/run-stop-notify.ts +1 -2
- package/scripts/run/run-watcher-guard.ts +6 -3
- package/scripts/run/ship/run-ship-cli.ts +5 -12
- package/scripts/run/ship/run-ship-detach.ts +9 -0
- package/scripts/run/ship/run-ship-next.ts +10 -2
- package/scripts/run/ship/run-ship-overlap.ts +195 -0
- package/scripts/run/ship/run-ship-pre-detach.ts +33 -15
- package/scripts/run/ship/run-ship-preflight.ts +28 -2
- package/scripts/run/ship/run-ship-return.ts +31 -7
- package/scripts/run/ship/run-ship-review-steps.ts +25 -14
- package/scripts/run/ship/run-ship-review.ts +15 -2
- package/scripts/run/ship/run-ship-steps.ts +1 -1
- package/scripts/run/ship/run-ship-stop-context.ts +206 -0
- package/scripts/run/ship/run-ship-sync.ts +14 -6
- 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/test-e2e-guard.ts +30 -5
- package/scripts/test/test-unit-guard.ts +16 -1
- package/scripts/test/unit-worker-share.ts +26 -3
- 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 +39 -4
- package/scripts/time-runtime/time-spans.ts +1 -0
- package/scripts/time-runtime/time-tool-call.ts +7 -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/templates/gitignore +6 -2
- package/dist/hooks/chunk-D5QBTOCZ.js +0 -68
- package/dist/hooks/chunk-UT7YC3N2.js +0 -56
|
@@ -1,38 +1,44 @@
|
|
|
1
1
|
# 原則
|
|
2
2
|
|
|
3
|
-
**このファイルは、`CLAUDE.md` の Communication 節が指す原則の単一ソースである。** 各節は `CLAUDE.md` から `prompts/collaboration-workflow/principles.md` → "見出し" の形で引かれ、`pnpm josh doc:section` で解決する。経緯と適用例は各節が指す [`docs/maintainers/principles-rationale.md`](../../docs/maintainers/principles-rationale.md) の節にあり、実行中には読まない。
|
|
4
|
-
|
|
5
3
|
## no-clones — クローン禁止・単一ソース化
|
|
6
4
|
|
|
7
|
-
|
|
5
|
+
既存の非自明なロジック(別ファイル・別モジュール・上流依存を含む別パッケージにあるもの)を、ソースを変えずに済ませるために**コピー・移植・再実装しない**。複製したくなったら、全消費者が import する共有モジュール/export/パッケージへ単一ソース化する。
|
|
8
6
|
|
|
9
|
-
-
|
|
10
|
-
-
|
|
11
|
-
-
|
|
12
|
-
-
|
|
7
|
+
- 既存の重複は再重複の理由にならない(例: josh-game が kit をコピー)。3 つ目のコピーを足さず、重複を surface する
|
|
8
|
+
- 「上流を参照する」は再利用することで、コードを貼り付けることではない
|
|
9
|
+
- 「X を触るな」という制約でクローンを黙って正当化しない。「クリーンな修正は kit の変更が必要、代替はクローン、どちらにする?」と先に提示する
|
|
10
|
+
- 複製は、単一ソース化の代替案とコストを提示し、ユーザーの明示承認を得た後にのみ行う
|
|
13
11
|
|
|
14
|
-
|
|
12
|
+
計測は `pnpm josh clone:scan`(`pnpm josh oracle:list` の決定オラクル)。リポジトリ内と `JOSH_REPO_PATHS` の他リポジトリを跨いだ複製の件数と各 `file:line`(`[same-file|cross-file|cross-repo]`、なしは `clean`)を印字する。
|
|
15
13
|
|
|
16
14
|
## elegant-design — 設計はエレガント・シンプルを第一目標にする
|
|
17
15
|
|
|
18
|
-
|
|
16
|
+
フック・ガード・ルール・抽象化を足す前に、**原因側を直せばその仕組みが要らなくならないか**を問う。要らなくなるなら足さず、原因を直す。検出・通知・叱責を強化する前に、その入力を生んでいる側を断つ。
|
|
17
|
+
|
|
18
|
+
書かれたコードの可読性は `prompts/coding-standards.md` の担当で、ここはどの仕組みをどこへ足すかの規則である。互いの本文を写さず、指すだけにする。
|
|
19
|
+
|
|
20
|
+
## automate-first — 判断の要らない手順は AI に渡さず自動化する
|
|
19
21
|
|
|
20
|
-
|
|
21
|
-
- **足す前に断つ**: 検出・通知・叱責を強化する前に、その入力を生んでいる側を探す。入力が消えれば、それを捌く仕組みそのものが消える。適用例は `docs/maintainers/principles-rationale.md` → "An application of simplicity-first"。
|
|
22
|
+
AI の判断が要らない手順は、AI に読ませて実行させない。規則を足すときは、次の順で最初に成り立つ形を選ぶ。
|
|
22
23
|
|
|
23
|
-
|
|
24
|
+
1. コマンド — 手順そのものを `pnpm josh <command>` にする
|
|
25
|
+
2. フックの自動実行 — フックがその場で実行する、または呼び出しを `updatedInput` で書き換える
|
|
26
|
+
3. 差し戻しガード — 正しい形が呼び出しから決まらないときだけ拒否する
|
|
27
|
+
4. 文書 — 上の 3 つのどれも成り立たないときだけ書く
|
|
28
|
+
|
|
29
|
+
下の段を選ぶときは、上の段が成り立たない理由を示す。配置の問いは `residency.md` →「自動化の問い」、ガードの理由は `scripts/rules/guard-remedy.ts` の `why` に書く。
|
|
24
30
|
|
|
25
31
|
## quality-priority — 品質目標が衝突したときの優先順位
|
|
26
32
|
|
|
27
|
-
|
|
33
|
+
上の段は、下の段のために犠牲にしない。
|
|
28
34
|
|
|
29
|
-
1. **正しさ** —
|
|
35
|
+
1. **正しさ** — 仕様どおりに動き、検証ゲートが緑であること
|
|
30
36
|
2. **同列で、どれも悪化させない** — 次の 4 つに上下はない
|
|
31
|
-
- **複雑さ**(読みやすさを含む)—
|
|
32
|
-
- **冗長さ**(重複を含む)— 同じ知識を 1 か所に置く(no-clones
|
|
37
|
+
- **複雑さ**(読みやすさを含む)— 初見の読み手が前提知識なしに意図を追えること。部品や間接層は読む量が減るときだけ足す
|
|
38
|
+
- **冗長さ**(重複を含む)— 同じ知識を 1 か所に置く(no-clones)
|
|
33
39
|
- **パフォーマンス** — gate・CI・josh 起動・テストの所要時間
|
|
34
40
|
- **AI コスト** — エージェントが読み込み・出力するトークン量
|
|
35
|
-
3. **コメント最小** —
|
|
41
|
+
3. **コメント最小** — まず命名・分割・型で表現する。残すのは「なぜ」だけ
|
|
36
42
|
|
|
37
43
|
2 段目の目標同士が衝突したら、次の順で決める。
|
|
38
44
|
|
|
@@ -40,63 +46,60 @@
|
|
|
40
46
|
2. **1 つを悪くするなら、同じ変更の中で別の場所を削って埋め合わせる** — 合計を悪化させない
|
|
41
47
|
3. **それでも両立しないときは、数字を示して利用者に聞く**(Tier B)— 何をどれだけ悪くして、何を得るか
|
|
42
48
|
|
|
43
|
-
##
|
|
49
|
+
## concise-prose — 文章は条件と動作だけを書く
|
|
44
50
|
|
|
45
|
-
|
|
51
|
+
docs・prompts・skills・拒否文・Issue・PR の文章に適用する。
|
|
46
52
|
|
|
47
|
-
-
|
|
48
|
-
-
|
|
49
|
-
-
|
|
53
|
+
- 本文には、いつ何をするか(条件と動作)だけを書く
|
|
54
|
+
- 理由と経緯は rationale 文書に置き、本文からは指さない — 根拠文書(`docs/maintainers/`)の側から手順を指す
|
|
55
|
+
- 太字は 1 節に 1 つまで。箇条書き先頭の見出し語は数えない。`→ "…"` で引かれている太字は消さない
|
|
56
|
+
- 同じ内容を言い換えて繰り返さない
|
|
57
|
+
- ファイルや節が自分自身を説明する文(「このファイルは〜である」)を書かない
|
|
50
58
|
|
|
51
|
-
##
|
|
59
|
+
## consult-vs-execute — 相談と実行を区別する
|
|
52
60
|
|
|
53
|
-
|
|
61
|
+
ユーザーが進め方・理由を尋ねたり目標を述べたりした(「どうすべき?」「how should we…」「なぜ」「〜したい」「〜の方が良い?」)ときは、**分析と推奨のみ**を返し、ファイル編集・Issue 作成などのアクションは取らない。目標の表明は計画の依頼であって、実行の承認ではない。
|
|
54
62
|
|
|
55
|
-
|
|
63
|
+
- アクションを取るのは、明示的な命令(「do it」「書き換えて」「作成して」「implement」)かワークフローキーワード(`kickoff` / `halfrun` / `prrun` / `fullrun` / `backlogrun`)があるときだけ
|
|
64
|
+
- 判別できないときは相談として扱う。実行が指示された後の判断点は `CLAUDE.md` → "Decision autonomy" の Tier で決まる
|
|
56
65
|
|
|
57
|
-
|
|
58
|
-
2. **破壊は fix-forward**: バンプで lint クラッシュ・新規ルール・型エラー等が出たら、前向きに解消する:
|
|
59
|
-
- 新ルール/エラーが正当なら **消費者コードを直す**
|
|
60
|
-
- ルール上書きが要るなら **正しいレイヤー**(kit / app-kit の共有設定)でスコープする。消費者リポジトリでの場当たり的な一回限りの disable にしない
|
|
61
|
-
- 破壊が first-party パッケージ(kit / app-kit)起因なら、**そこに Issue を立てて適切な altitude で直す**。消費者側の回避だけで済ませない(→ `upstream-interrupt.md`)
|
|
62
|
-
3. **pin-back は最終手段**: fix-forward が本当に不可能/ブロックされている(例: 未リリースの上流修正待ち)ときだけ、古いバージョンへ固定する。固定するときは **理由を記録し、最新へ戻すためのトラッキング Issue を立てる**。pin-back を既定の推奨として提示してはならない
|
|
63
|
-
4. **既存の保護を尊重する**: fix-forward は保護された pin を黙って書き換える許可ではない。overrides と `devEngines` の承認ゲートの単一ソースは `CLAUDE.md` → "Decision autonomy" と `dependency-update` skill である
|
|
64
|
-
5. **タイムリーに**: バンプ起因の破壊は、可能な限り同じ作業セッション内で速やかに対処し、pin の裏に先送りしない
|
|
66
|
+
## latest-first — 最新優先・fix-forward(pin-back は最終手段)
|
|
65
67
|
|
|
66
|
-
|
|
68
|
+
依存・ツールチェーンは**既定で最新版を採用する**。`dependency-update` skill → "4. When the bump breaks something — fix forward" はこの節を指す。
|
|
67
69
|
|
|
68
|
-
|
|
70
|
+
1. 適応の手間を避けるために古いバージョンに留まったり戻したりしない
|
|
71
|
+
2. バンプで lint クラッシュ・新規ルール・型エラー等が出たら fix-forward で解消する:
|
|
72
|
+
- 新ルール/エラーが正当なら消費者コードを直す
|
|
73
|
+
- ルール上書きが要るなら kit / app-kit の共有設定でスコープする。消費者リポジトリで一回限りの disable にしない
|
|
74
|
+
- first-party パッケージ(kit / app-kit)起因なら、そこに Issue を立てて直す(→ `upstream-interrupt.md`)
|
|
75
|
+
3. **pin-back は最終手段**: fix-forward が不可能/ブロックされている(例: 未リリースの上流修正待ち)ときだけ固定し、理由を記録して最新へ戻すトラッキング Issue を立てる。pin-back を既定の推奨にしない
|
|
76
|
+
4. fix-forward は保護された pin を黙って書き換える許可ではない。overrides と `devEngines` の承認ゲートは `CLAUDE.md` → "Decision autonomy" と `dependency-update` skill に従う
|
|
77
|
+
5. バンプ起因の破壊は同じセッション内で対処し、pin の裏に先送りしない
|
|
69
78
|
|
|
70
|
-
-
|
|
71
|
-
- **MEMORY は 1 台のマシン × 1 つのリポジトリ**にスコープされたローカルストアで、コミットされない。保存は最小限に留め、用途は本質的にローカルな文脈(マシン固有のパス、個人の環境の癖など)だけ。どこでも適用されるべきルールの唯一の置き場所にしてはならない
|
|
79
|
+
## durable-rules — 恒久ルールは MEMORY ではなくプロンプト/ドキュメントに書く
|
|
72
80
|
|
|
73
|
-
|
|
81
|
+
共有価値のある恒久ルールに気付いたら、**kit が配布するプロンプト/ドキュメント**(`CLAUDE.md` / `prompts/*`)の変更として書き、自動 MEMORY(`~/.claude/projects/<repo-slug>/memory/`)で済ませない。MEMORY はマシン固有のパスなど本質的にローカルな文脈だけに使う。
|
|
74
82
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
4. 既に MEMORY にあるルールが実は共有すべきものだと分かったときは、プロンプト/ドキュメントへ移し、MEMORY 側の重複エントリは削除する
|
|
83
|
+
- ターンがドキュメント変更を承認していない(相談中など)なら、MEMORY に黙って保存せず変更を提案する
|
|
84
|
+
- 消費者リポジトリで気付いたら、kit 側へ Issue/PR として上流化する
|
|
85
|
+
- MEMORY にあるルールが共有すべきものなら、プロンプト/ドキュメントへ移し、MEMORY 側を削除する
|
|
79
86
|
|
|
80
87
|
## upstream-to-kit — 配布ドキュメント・設定の変更は kit に上流化する
|
|
81
88
|
|
|
82
|
-
`CLAUDE.md`
|
|
83
|
-
|
|
84
|
-
- **消費者リポジトリ(app-kit / game-kit)ではこれらをローカル編集しない**: `josh sync` が編集を上書きするうえ、変更は本来上流(kit)に属する。ドキュメント/設定を編集する前に、それが配布物かどうかを確認し、配布物なら kit 側に変更を提案(Issue/PR)する
|
|
85
|
-
- **kit リポジトリ自身ではあなたが配布元**なので、ここでは編集してよい。編集先は `CLAUDE.md` 1 本である(次節)
|
|
89
|
+
- 消費者リポジトリ(app-kit / game-kit)では、kit が配布する `CLAUDE.md` や他のドキュメント/設定をローカル編集しない(`josh sync` が上書きする)。編集前に配布物か確認し、配布物なら kit 側に Issue/PR で提案する
|
|
90
|
+
- kit リポジトリ自身では編集してよい。編集先は `CLAUDE.md` 1 本である(次節)
|
|
86
91
|
|
|
87
92
|
## エージェント規則の単一ソースは `CLAUDE.md`(`AGENTS.md` / `GEMINI.md` / `.cursorrules` は導線)
|
|
88
93
|
|
|
89
|
-
**規則の本体は `CLAUDE.md` にしか無い。** `AGENTS.md`・`GEMINI.md`・`.cursorrules` は「規則は `CLAUDE.md`
|
|
94
|
+
**規則の本体は `CLAUDE.md` にしか無い。** `AGENTS.md`・`GEMINI.md`・`.cursorrules` は「規則は `CLAUDE.md` にある。作業前に全文を読むこと」と「規則を書き戻さない」だけを書いた導線である(`.cursorrules` は Svelte MCP の案内だけを足す)。
|
|
90
95
|
|
|
91
|
-
-
|
|
92
|
-
- **導線文書に規則を書き戻さない。** そこに書かれた規則は、次の改訂で更新し忘れる 4 つ目の置き場になる
|
|
93
|
-
- 経緯と機械的な検査は `docs/maintainers/principles-rationale.md` → "Why AGENTS and GEMINI are pointers"、`@CLAUDE.md` 行と他ツールでの未検証は `docs/maintainers/principles-rationale.md` → "The include line, and what has not been verified"
|
|
96
|
+
- 規則の追加・変更・節の追加は `CLAUDE.md` に 1 回だけ書き、導線文書には書き戻さない
|
|
94
97
|
|
|
95
98
|
### Claude Code 以外のエージェントでの読み替え
|
|
96
99
|
|
|
97
|
-
`CLAUDE.md`
|
|
100
|
+
Codex・Gemini CLI など別のエージェントは `CLAUDE.md` を次のように読み替える(joshuafolkken/kit#3079)。
|
|
98
101
|
|
|
99
|
-
- **フック**:
|
|
100
|
-
- **Skill・`/verify-ui`・`/code-review`**:
|
|
101
|
-
- **`.claude/settings.json` の deny list**
|
|
102
|
+
- **フック**: フックが走らない・出力が見えないツールでは、[`rule-delivery.md`](./rule-delivery.md) →「配送されている規則」の各項目を自分で守る。加えて、最初の実行時コード編集の前に Step 0 の作業サマリを提示し、編集後に `pnpm josh lint:related` と `pnpm josh cspell:dot` を走らせ、`JOSH_SESSION_LANG` を `.env` から解決する。フックの全体は `.claude/settings.json` の `hooks`
|
|
103
|
+
- **Skill・`/verify-ui`・`/code-review`**: その skill の `SKILL.md` を読んで自分のセッションで従う
|
|
104
|
+
- **`.claude/settings.json` の deny list** は効かないが、`CLAUDE.md` → "Git Rules" はそのまま拘束する
|
|
102
105
|
- **`AskUserQuestion`** は、ユーザーに平文で尋ねることを指す
|
|
@@ -1,37 +1,32 @@
|
|
|
1
1
|
## 報告フォーマット(平易な概要 + 技術詳細)
|
|
2
2
|
|
|
3
|
-
作業前サマリ(Step 7)と完了報告(Step 5
|
|
3
|
+
作業前サマリ(Step 7)と完了報告(Step 5)は、**平易な概要を先頭に置き、技術詳細をその下に置く 2 層構造**で書く。
|
|
4
4
|
|
|
5
5
|
### 機械的な半分は `josh report:lint` が検査する
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
ラベルの有無、概要行の字数上限、コードフェンス囲み、概要へのファイルパス・CLI フラグの混入、ケース段と「壊れるとしたら」段の形は、サマリを標準入力で `pnpm josh report:lint` に渡して検査する(`ok` か違反行を印字する — joshuafolkken/kit#2123)。
|
|
8
8
|
|
|
9
9
|
### 出力はコードフェンスで囲まない(必須)
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
以下のテンプレートは**フェンスの中身だけ**をセッションに書く(空白での桁揃えと単独行の `---` も使わない)。
|
|
12
12
|
|
|
13
13
|
### ラベルはセッション言語に訳し、注釈は付けない(必須)
|
|
14
14
|
|
|
15
|
-
**(1) ラベルはセッション言語に訳す。**
|
|
15
|
+
**(1) ラベルはセッション言語に訳す。** 日本語セッションでの対応:
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
| `Cause` / `Fix` / `Result`(完了報告) | `原因` / `対応` / `結果` |
|
|
24
|
-
| `■ Hand-off`(区切り) | `■ 区切り` |
|
|
25
|
-
| `Done` / `Remaining` / `Why it stopped` / `Next command` | `終わったこと` / `残っていること` / `止めた理由` / `次に打つコマンド` |
|
|
17
|
+
- `■ Overview` → `■ 概要`
|
|
18
|
+
- `Now` / `Change` / `Check` → `今こうなっている` / `こう直す` / `確かめ方`
|
|
19
|
+
- `Details` → `技術詳細`、`Changes and tests` → `変更とテスト`
|
|
20
|
+
- `Cause` / `Fix` / `Result`(完了報告)→ `原因` / `対応` / `結果`
|
|
21
|
+
- `■ Hand-off`(区切り)→ `■ 区切り`
|
|
22
|
+
- `Done` / `Remaining` / `Why it stopped` / `Next command` → `終わったこと` / `残っていること` / `止めた理由` / `次に打つコマンド`
|
|
26
23
|
|
|
27
|
-
成果物の散文(Issue 本文、Issue/PR コメント、Telegram
|
|
24
|
+
成果物の散文(Issue 本文、Issue/PR コメント、Telegram 本文)のラベルもこの表で訳す。英語のまま残るのは「出力の言語(`JOSH_SESSION_LANG`)」が挙げた 3 つだけ。
|
|
28
25
|
|
|
29
|
-
**(2) ラベルに注釈を付けない。** `■ 概要(平易な説明)`
|
|
26
|
+
**(2) ラベルに注釈を付けない。** `■ 概要(平易な説明)` は誤り。注意書きはラベルの下の説明文に置く。
|
|
30
27
|
|
|
31
28
|
### 作業前サマリはいつ・どう出すか
|
|
32
29
|
|
|
33
|
-
`CLAUDE.md` → "Code Change Rules" の Step 0 が指す細目の単一ソース。
|
|
34
|
-
|
|
35
30
|
- **いつ**: 実装コードを書く前に、Issue ごとに 1 回出す。`fullrun` / `halfrun` / `prrun` / `backlogrun` で必須、`kickoff` は対象外。確認のための停止ではない — 出したらそのまま実装に進む
|
|
36
31
|
- **概要**: `Now` / `Change` / `Check` を各 1 文、セッション言語で、プログラマでない人にも追える文で書く。各行に具体的な主語を書き、主語のない文は不可(下記「具体的な主語を必ず書く」)。ファイルパス・関数名や型名・CLI のオプションフラグは書かない — 禁じるのは内部識別子だけである
|
|
37
32
|
- **技術詳細**: すべての変更をそのテストとともに `<変更内容> — Test: <Unit|E2E> — <file path> — <検証する挙動>` の形で並べる
|
|
@@ -64,20 +59,20 @@
|
|
|
64
59
|
2. ...
|
|
65
60
|
```
|
|
66
61
|
|
|
67
|
-
|
|
62
|
+
テスト宣言はケース単位の 2 段で書く(joshuafolkken/kit#2246)。
|
|
68
63
|
|
|
69
|
-
-
|
|
70
|
-
-
|
|
71
|
-
-
|
|
72
|
-
-
|
|
64
|
+
- 第 1 段(ケース)は固定語彙を並べ、**該当しないものは `該当なし` に続けて理由を書いて消す**
|
|
65
|
+
- 第 2 段(壊れるとしたら)は、この変更に固有の壊れうる条件を**最低 3 件**書く。書けないときは `どう呼ばれても壊れない` と明示する
|
|
66
|
+
- 複数ケースは `it.each` 1 本に畳んでよい
|
|
67
|
+
- 差分が HTTP・プロセス起動・ファイル IO・時間の境界を跨ぐときは、`pnpm josh cases <path...>` が印字する異常系を第 2 段に載せる
|
|
73
68
|
|
|
74
69
|
### 行数予算は編集前に読む
|
|
75
70
|
|
|
76
|
-
**「対象」に書くファイルは、書き始める前に `pnpm josh lines <path> [<path>...]`
|
|
71
|
+
**「対象」に書くファイルは、書き始める前に `pnpm josh lines <path> [<path>...]` に渡し、上限に近いと言われたファイルには分割方針を「対象」に書く**(joshuafolkken/kit#1425)。行数は `wc -l` で数えない。関数単位の上限は `pnpm josh lint` が報告する。
|
|
77
72
|
|
|
78
73
|
### 変更対象はまとめて読んでから編集する(joshuafolkken/kit#2202)
|
|
79
74
|
|
|
80
|
-
|
|
75
|
+
**「変更とテスト」が変更対象ファイルを列挙したら、1 回の `pnpm josh read:files <path> [<path> ...]` で読み、続く独立した編集は 1 回の `pnpm josh edit:files -` で送る**(個別の `Edit` は依存する編集・1 件だけの編集・`Write` のとき)。詳細は [`turn-batching.md`](turn-batching.md) →「実装中の独立編集に効く合成コマンド」。
|
|
81
76
|
|
|
82
77
|
### 完了報告(セッション向け)
|
|
83
78
|
|
|
@@ -97,42 +92,41 @@
|
|
|
97
92
|
- 残課題: <なければ「なし」>
|
|
98
93
|
```
|
|
99
94
|
|
|
100
|
-
**実行証跡は「動くこと」の証拠であり、gate
|
|
95
|
+
**実行証跡は「動くこと」の証拠であり、gate の緑ではない**(joshuafolkken/kit#2246)。同じ証跡を PR 本文の `## 実機証跡` 節(コマンド+実出力のフェンス)にも置く。無い実行時の変更は `pnpm josh followup` がマージを拒否する(#2446)。
|
|
96
|
+
|
|
97
|
+
### PR 本文の受け入れ条件の対応表
|
|
98
|
+
|
|
99
|
+
`## 受け入れ条件の対応` 節の行の形(`pnpm josh pr` が識別子つきの `未記入` 行を付け、`pnpm josh followup` が照合する — `scripts/review/acceptance-map.ts`):
|
|
100
|
+
|
|
101
|
+
```md
|
|
102
|
+
- `ac-1a2b3c4d` <条件> — 満たした: <テスト名・`file:line`・実行出力のいずれか>
|
|
103
|
+
- `ac-5e6f7a8b` <条件> — 見送り: #<切り出した Issue> <理由>
|
|
104
|
+
```
|
|
101
105
|
|
|
102
|
-
**`run:carry` の実行証跡は `JOSH_TEMP_ROOT` を新しい一時ディレクトリに向けて取る(必須)。**
|
|
106
|
+
**`run:carry` の実行証跡は `JOSH_TEMP_ROOT` を新しい一時ディレクトリに向けて取る(必須)。** 状態レコードは本物の run と共有なので、`JOSH_TEMP_ROOT="$(mktemp -d)" pnpm josh run:carry --begin …` のように各コマンドの頭に付ける(`docs/environment-variables.md` → "Runs")。`run:merge` は main の同期・lane の close・GitHub への書き込みを行うため、これでは切り離せない。
|
|
103
107
|
|
|
104
108
|
### 区切りの報告(完了報告と区別する・必須)
|
|
105
109
|
|
|
106
|
-
`backlogrun`
|
|
110
|
+
`backlogrun` の区切り(hand-off)は完了報告ではない — **`原因` / `対応` / `結果` を使わない**。書式は [`.claude/skills/workflow-commands/backlogrun-handoff-report.md`](../../.claude/skills/workflow-commands/backlogrun-handoff-report.md)。
|
|
107
111
|
|
|
108
112
|
### 概要 3 行の書き方(ここが本体)
|
|
109
113
|
|
|
110
|
-
字数と内部識別子の混入は `report:lint`
|
|
114
|
+
字数と内部識別子の混入は `report:lint` が検査する。平易にするために語彙と抽象度を制約する:
|
|
111
115
|
|
|
112
116
|
- 専門用語は使わないか、`〜(=…のこと)` の形でその場で言い換える
|
|
113
|
-
-
|
|
114
|
-
-
|
|
117
|
+
- 変更点の羅列ではなく、原因 → 対応 → 効果の因果で書く
|
|
118
|
+
- 主語は利用者・システムの振る舞い。「利用者から見て何が違うか」が書けない行は技術詳細に置く
|
|
115
119
|
|
|
116
|
-
**送信前セルフチェック**: コードを見ていない読み手が、概要 3
|
|
120
|
+
**送信前セルフチェック**: コードを見ていない読み手が、概要 3 行だけでどれの話か特定できるか。できないなら具体的な名詞を 1 つ足す。
|
|
117
121
|
|
|
118
122
|
### 具体的な主語を必ず書く(禁止と対になる要求)
|
|
119
123
|
|
|
120
|
-
|
|
124
|
+
- **何かが「古い」「壊れている」「変わらない」と書くときは、その対象を名指しする** — 対象パッケージ名・画面名・出力の種類のいずれかを含める
|
|
125
|
+
- 主語のない「状況」「案内」「問題」「その処理」だけで済ませない
|
|
126
|
+
- 書いてよい具体名: 利用者が画面で目にするもの — パッケージ名、表示されるコマンドの目的、画面名、メッセージの種類
|
|
127
|
+
- 書いてはいけない具体名: 内部識別子 — ファイルパス、関数名・型名、CLI のオプションフラグ
|
|
121
128
|
|
|
122
|
-
|
|
123
|
-
- **主語のない「状況」「案内」「問題」「その処理」だけで済ませない。**
|
|
124
|
-
- **書いてよい具体名**: 利用者が画面で目にするもの — パッケージ名、表示されるコマンドの目的、画面名、メッセージの種類
|
|
125
|
-
- **書いてはいけない具体名**: 内部識別子のみ — ファイルパス、関数名・型名、CLI のオプションフラグ
|
|
126
|
-
|
|
127
|
-
**悪い例**(何の話か特定できない):
|
|
128
|
-
|
|
129
|
-
```md
|
|
130
|
-
- **今こうなっている**: 古いままだと警告が出るのに、案内されたコマンドを実行しても状況が変わらないことがある。
|
|
131
|
-
- **こう直す**: 効き目のない案内は理由の説明に置き換え、同じ案内が何度も並ぶのもやめる。
|
|
132
|
-
- **確かめ方**: 自動テストで、無駄な案内が消え・重複が消え・従来の表示は変わらないことを確かめる。
|
|
133
|
-
```
|
|
134
|
-
|
|
135
|
-
**良い例**(同じ内容で、対象を名指ししている):
|
|
129
|
+
悪い例は「古いままだと警告が出るのに、案内されたコマンドを実行しても状況が変わらない」(何の話か特定できない)。良い例:
|
|
136
130
|
|
|
137
131
|
```md
|
|
138
132
|
- **今こうなっている**: バージョン確認が「全体で使う app-kit が古い」と警告するのに、一緒に出る更新コマンドは既に入っている版を指していて、実行しても何も変わらず同じ警告がまた出る。
|
|
@@ -140,8 +134,6 @@
|
|
|
140
134
|
- **確かめ方**: 自動テストで、効かないコマンドが説明に置き換わり、重複が 1 行になり、通常の表示は変わらないことを確かめる。
|
|
141
135
|
```
|
|
142
136
|
|
|
143
|
-
違いは長さではなく、**名指ししているかどうか**にある。良い例には内部識別子は 1 つも出てこない。
|
|
144
|
-
|
|
145
137
|
### 成果物(Issue / PR / Telegram)側
|
|
146
138
|
|
|
147
|
-
言語は「出力の言語(`JOSH_SESSION_LANG
|
|
139
|
+
言語は「出力の言語(`JOSH_SESSION_LANG`)」に従い、構造もセッション向けと同じ 2 層にする。`--notify-message` は `Added ... / Changed ...` の羅列ではなく、`Cause / Fix / Result` の 3 行を先頭に置き、変更点を `Details:` 以下にまとめる(実例は [`followup.md`](../../.claude/skills/workflow-commands/followup.md))。
|
|
@@ -1,37 +1,41 @@
|
|
|
1
1
|
## 常駐ドキュメントと skill の分担(何を常駐に残すか)
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
規則を置く・移す・引退させるターンに読む(joshuafolkken/kit#2891)。規則のトリガは `CLAUDE.md` に 1 度だけ、手順と数値は導線の先に 1 度だけ書く。`CLAUDE.md` の上限は `scripts/document/resident-budget.ts` の `RESIDENT_CEILING_BYTES`(残りは `pnpm josh bytes CLAUDE.md`)。**置き場所は重要度ではなく、下の問いを順に当てて決める。**
|
|
4
4
|
|
|
5
5
|
### 第 0 問(先に問う)
|
|
6
6
|
|
|
7
7
|
> **その規則の答えは、機械的に読める入力だけから計算できるか。**
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
できるなら、コマンドが答え、文書には導線 1 行だけを置く。既存のオラクルは `pnpm josh oracle:list`、単一ソースは `scripts/rules/decision-oracle.ts`。
|
|
10
10
|
|
|
11
11
|
### 順序の問い(第 0 問の次に問う)
|
|
12
12
|
|
|
13
13
|
> **その規則は「何を」ではなく「いつ・どの順で・どの引数で」を決めているか。**
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
そうであれば、規則はドライバの状態遷移に書き、文書は導線 1 行だけにする。`pnpm josh run:step <N>` が次の 1 手を計算する(`scripts/run/run-step.ts`、joshuafolkken/kit#2248)。
|
|
16
|
+
|
|
17
|
+
### 自動化の問い(順序の問いの次に問う)
|
|
18
|
+
|
|
19
|
+
> **その手順は、AI の判断なしに実行できるか。**
|
|
20
|
+
|
|
21
|
+
できるなら、コマンドかフックの自動実行にし、文書にも差し戻しガードにもしない(`principles.md` →「automate-first」)。文書やガードとして置くのは、自動化できない理由を示せるときだけである。ガードの理由は `scripts/rules/guard-remedy.ts` の `why` が必須項目として持ち、`pnpm josh rule:list` が `not automated` として印字する。理由のないガードは `guard-remedy.test.ts` が落とす。
|
|
16
22
|
|
|
17
23
|
### 第 1 問 — 引き金を名指しできるか
|
|
18
24
|
|
|
19
25
|
> **その規則が効き始める瞬間を、1 件のツール呼び出しとして名指しできるか。**
|
|
20
26
|
|
|
21
|
-
|
|
27
|
+
できるなら、規則本文を常駐から出し、配送ガードの行に `scripts/rules/rule-registry.ts` の項目を添え、[`rule-delivery.md`](./rule-delivery.md) が指す `pnpm josh rule:list` の一覧に載せる(joshuafolkken/kit#1524)。**規則ごとのトリガ行は常駐に残さない** — `CLAUDE.md` には一覧への導線 1 行だけを置く。フックが走らないセッションは一覧を自己点検に使う(`principles.md` →「Claude Code 以外のエージェントでの読み替え」)。
|
|
22
28
|
|
|
23
29
|
### 第 2 問 — skill なしのターンでも効く必要があるか
|
|
24
30
|
|
|
25
31
|
> **その規則は、skill がロードされていないターンでも効く必要があるか。**
|
|
26
32
|
|
|
27
|
-
**`CLAUDE.md` に残るのは、skill がロードされていないターンでも効く必要がある規則だけである。** 入力は「最初に効くのはコマンド開始の前か後か」の 1
|
|
33
|
+
**`CLAUDE.md` に残るのは、skill がロードされていないターンでも効く必要がある規則だけである。** 入力は「最初に効くのはコマンド開始の前か後か」の 1 点。後なら `CLAUDE.md` から導線を張り、再掲しない。
|
|
28
34
|
|
|
29
35
|
### 残すときの書き方と予算
|
|
30
36
|
|
|
31
37
|
- **常駐規則は、トリガと導線の 2 つで書く。** **判定は、導線を一度も開かないターンでも常駐の記述だけで正しく振る舞えるかである。**
|
|
32
|
-
- **削ることは移すことであり、削除は理由を示して初めて許される例外である。**
|
|
33
|
-
-
|
|
34
|
-
- 引用は本文があるファイルを直接指す
|
|
35
|
-
-
|
|
36
|
-
|
|
37
|
-
常駐に残る規則と引き金つき配送へ移した規則の一覧は `docs/maintainers/residency-rationale.md` → "The resident-rule list"。そのほかの経緯は `docs/maintainers/residency-rationale.md` → "The reduction freeze and its retraction"、`docs/maintainers/residency-rationale.md` → "Measurement decides what leaves"、`docs/maintainers/residency-rationale.md` → "The `rule:value` readings"、`docs/maintainers/residency-rationale.md` → "Why the delivered list carries no count"、`docs/maintainers/residency-rationale.md` → "Why the workflow index is split by topic"、`docs/maintainers/residency-rationale.md` → "One list, not two"、`docs/maintainers/residency-rationale.md` → "The resident budget"。
|
|
38
|
+
- **削ることは移すことであり、削除は理由を示して初めて許される例外である。** 先に導線の先へ移し、マーカーテストも付け替える。移さず引退させてよいのは 3 条件がすべて揃うときだけ — 同じ文書に単一ソースが宣言された文の写しである・単一ソースと突き合わせてほかにない文を含まない・マーカーテストが固定していない。揃わなければ候補と証拠を記録して規則は残す
|
|
39
|
+
- 経緯(Issue 番号・なぜ・計測・却下案)は `docs/maintainers/<topic>-rationale.md` に置き、その冒頭で説明する手順文書を名指しする。**参照の向きは根拠 → 手順だけ** — AI が読む文書から根拠文書は指さない(`scripts/document/rationale-documents.test.ts` が検出する)。Issue 番号引用の件数は `scripts/document/issue-citation-budget.ts` のラチェットに従う — 減らしたら記録も下げる
|
|
40
|
+
- 引用は本文があるファイルを直接指す
|
|
41
|
+
- 予算が詰まったら回収で解く。**引き上げは Tier C として扱う** — `RESIDENT_CEILING_BYTES`・`RESIDENT_HEADROOM_BYTES`・`RE_INLINE_GUARD_HEADROOM_BYTES` の緩和は、3 条件(回収の余地が尽きたことを計測で示す・需要が 1 規則ではなく常駐すべき規則数の増加から来る・増やす量は需要と回収可能量の差だけで丸めない)を示し、ユーザーの明示指示を得てから行う。条件が揃うこと自体は指示ではない
|
|
@@ -1,31 +1,23 @@
|
|
|
1
1
|
# 引き金つき配送 — 規則を「効く瞬間」に届ける(joshuafolkken/kit#1524)
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
## なぜ配送が要るのか
|
|
6
|
-
|
|
7
|
-
常駐の経路は実効上限で詰まっており、配送は該当する瞬間だけのコストで届き、拒否は読み飛ばせず、発火を単体テストで固定できる。経緯: `docs/maintainers/rule-delivery-rationale.md` → "Why delivery is needed"。
|
|
3
|
+
規則の届け方は**常駐**(`CLAUDE.md` に書き毎ターン読み込ませる)と**引き金つき配送**(効く瞬間にフックが本文を突きつける)の 2 つ。
|
|
8
4
|
|
|
9
5
|
## 判定基準 — 引き金を特定できるか
|
|
10
6
|
|
|
11
|
-
|
|
7
|
+
どの規則を配送へ移すかは [`residency.md`](./residency.md) →「第 1 問」に従う。
|
|
12
8
|
|
|
13
9
|
## 機構 — 1 本だけ、新規に作らない
|
|
14
10
|
|
|
15
|
-
|
|
11
|
+
入口は `PreToolUse` の `pnpm josh pretool:guard`(バッチング / 調査 / 規則の 3 ガード)と Stop フックの `pnpm josh stop:guard` の 2 つ。**2 本目の配送経路を作るのは `CLAUDE.md` →「No clones」が禁じるクローン**である。配送は呼び出しの書き換え(`updatedInput`)でもよい — 規則の結果そのものを機械的に作れる形に限る。書き換えは `pnpm josh rule:value` が `rewritten` として数える。どのガードが書き換えるかは `scripts/rules/guard-remedy.ts` の分類表が単一ソース。
|
|
16
12
|
|
|
17
13
|
## 配送されている規則
|
|
18
14
|
|
|
19
|
-
一覧は `pnpm josh rule:list` が `scripts/rules/delivered-rules.ts`
|
|
15
|
+
一覧は `pnpm josh rule:list` が `scripts/rules/delivered-rules.ts` から生成する(joshuafolkken/kit#3399)。各項目は規則の単一ソース・発火点・発火しないときを持ち、フックが走らないエージェントはその出力を自己適用のチェックリストにする(`principles.md`)。
|
|
20
16
|
|
|
21
|
-
**引き金はシェルのコマンド文字列しか見えない**(node 内の REST や `gh api --input <file>`
|
|
17
|
+
**引き金はシェルのコマンド文字列しか見えない**(node 内の REST や `gh api --input <file>` は掛からない)ので、常駐側にトリガ 1 行を残す。
|
|
22
18
|
|
|
23
|
-
|
|
19
|
+
引き金が発火しないターンでは何も起きないのが仕様で、各項目の発火しない状態は「規則が守られている状態」と一致させる。一致が取れない規則は常駐に残す。
|
|
24
20
|
|
|
25
21
|
## 配送は 1 ラン 1 回
|
|
26
22
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
## マーカーテスト
|
|
30
|
-
|
|
31
|
-
各項目を固定するスイートの一覧: `docs/maintainers/rule-delivery-rationale.md` → "Marker tests"。
|
|
23
|
+
配送文はラン 1 回につき 1 度しか出ないので、**「同じ呼び出しをもう一度出せ」と明記する**。例外: 繰り返す行為を止める項目は毎回発火し(joshuafolkken/kit#1570)、前提の行為を求める項目は前提が末尾に現れるまで毎回拒否する(joshuafolkken/kit#2807)— その配送文にはそれぞれ「これは毎回発火する」「前提が末尾に現れるまで拒否する」と明記する。バッチングと調査の 2 ガードは違反が間隔分続けば再び発火する(joshuafolkken/kit#2164)。前提の証拠を読めないときは拒否する。
|
|
@@ -1,25 +1,22 @@
|
|
|
1
1
|
## 本文をシェルの二重引用符に載せない(joshuafolkken/kit#1198)
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
`CLAUDE.md` からは [`rule-delivery.md`](./rule-delivery.md) →「配送されている規則」を経て届く。[`file-edits.md`](./file-edits.md) が防ぐのはコストの二重払い、こちらが防ぐのは**テキストが実行されること**である。
|
|
4
4
|
|
|
5
5
|
### 何が起きるのか
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
二重引用符の中のバッククォートと `$` は実行前に評価される。次の呼び出しは `pnpm josh ms` を実行し、その出力を本文に埋め込む。
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
10
|
gh api repos/{owner}/{repo}/issues/1535/comments -f body="… `pnpm josh ms` は …"
|
|
11
11
|
```
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
`pnpm josh followup --notify-message "…"` も同じく壊れる。
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
- **`gh` 経路**: 置換された結果が捨てられるのではなく、**コマンドとして実行される**
|
|
17
|
-
|
|
18
|
-
**発火するのは `` ` `` と `$` であって `!` ではない**(実測表は `docs/maintainers/shell-body-rationale.md` → "Why `!` is not a trigger")。
|
|
15
|
+
発火するのは `` ` `` と `$` で、`!` ではない。
|
|
19
16
|
|
|
20
17
|
### 安全な書き方
|
|
21
18
|
|
|
22
|
-
**本文をファイルに書いて、パスで渡す。**
|
|
19
|
+
**本文をファイルに書いて、パスで渡す。**
|
|
23
20
|
|
|
24
21
|
```bash
|
|
25
22
|
pnpm josh issue:comment <N> --body-file <path>
|
|
@@ -28,23 +25,16 @@ pnpm josh followup "<title> #<N>" --notify-message-file <path>
|
|
|
28
25
|
pnpm josh notify --task-type confirmation --issue-url "<url>" --body-file <path> --recommended "<choice>"
|
|
29
26
|
```
|
|
30
27
|
|
|
31
|
-
|
|
28
|
+
PR コメントも `pnpm josh issue:comment <N> --body-file <path>` で投稿する(REST では PR コメントは issue コメント)。`gh issue comment` / `gh pr comment` は使わない。
|
|
32
29
|
|
|
33
30
|
### コメント投稿は `pnpm josh issue:comment` の 1 綴りだけ(joshuafolkken/kit#2304)
|
|
34
31
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
- `gh api ... -F body=@<path>` / `--field body=@<path>` — `@` で始まる値を**ファイルとして読む**。正しい
|
|
38
|
-
- `gh api ... -f body=@<path>` / `--raw-field body=@<path>` — 値を**そのまま送る**。`@<path>` というリテラル文字列がコメントとして投稿される
|
|
39
|
-
|
|
40
|
-
`-f` と `-F` は 1 文字違いで、どちらでも `gh` は終了コード 0 でコメント URL を返す。**壊れたことが分かるのは後で人が Issue を見たときだけ**である(`docs/maintainers/shell-body-rationale.md` → "The comments lost to `-f body=@`")。
|
|
41
|
-
|
|
42
|
-
だから **Issue/PR コメントの投稿は `pnpm josh issue:comment <N> --body-file <path>` ただ 1 綴りに寄せる** — 間違ったフラグを選ぶ余地が無く、本文は `cli-body.ts` を通ってパスで渡るためシェルも評価しない。`-f body=@…` の綴りは実行前に `pnpm josh rule:guard` が拒否する(列挙表の `raw-field-body` 行、`scripts/rules/raw-field-body.ts`)。上の Issue body 書き換え(`-X PATCH ... --field body=@<path>`)は `-F` 側で安全なので綴りを変えない。
|
|
32
|
+
`gh api` の `-f body=@<path>` / `--raw-field body=@<path>` は `@<path>` というリテラルを黙って投稿する。**Issue/PR コメントの投稿は `pnpm josh issue:comment <N> --body-file <path>` ただ 1 綴りに寄せる。** `-f body=@…` は `pnpm josh rule:guard` が実行前に拒否する(`raw-field-body` 行、`scripts/rules/raw-field-body.ts`)。Issue body 書き換えの `-X PATCH ... --field body=@<path>` は `-F` 側で安全なのでそのまま使う。
|
|
43
33
|
|
|
44
|
-
`--body-file` / `--notify-message-file`
|
|
34
|
+
`--body-file` / `--notify-message-file` は `-` で標準入力を読む(実装は `scripts/josh/cli-body.ts`)。`--body` と `--body-file` の同時指定は拒否される。
|
|
45
35
|
|
|
46
|
-
**`$'…'` も安全である。** ANSI-C
|
|
36
|
+
**`$'…'` も安全である。** ANSI-C クォートの中では置換も展開も起きないので、`CLAUDE.md` の `--body=$'…'` はそのまま使う。長い本文はファイルにする。
|
|
47
37
|
|
|
48
38
|
### 引き金つき配送
|
|
49
39
|
|
|
50
|
-
`pnpm josh rule:guard`
|
|
40
|
+
`pnpm josh rule:guard` は、二重引用符の本文値にバッククォートか `$` を含む `Bash` 呼び出しを拒否する。拒否されたら本文をファイルに移して出し直す。**引き金が見えない綴り(`-b`・`-f title=` など)でも、フックが走らないエージェントでも規則は同じく拘束する。**
|