claude-dev-env 8.96.4 → 8.96.6
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.
|
@@ -24,7 +24,7 @@ User-level rule: applies to **every** git repo that uses GitHub with `gh`. Small
|
|
|
24
24
|
|
|
25
25
|
**Prove the change where it runs before opening a PR.** Read `~/.claude/docs/rule-guides/proof-before-pull-request.md` for the body and hook requirements. A `feat` PR also needs an "Eval" section and a session that invoked `/claude-api build-eval`; read `~/.claude/docs/rule-guides/features-start-with-an-eval.md` before you build the feature.
|
|
26
26
|
|
|
27
|
-
**Open PRs ready for review; use `--draft` when the owner requests it.** Before you commit copied files or open a PR,
|
|
27
|
+
**Open PRs ready for review; use `--draft` when the owner requests it.** Before you commit copied files or open a PR, list the open PRs that change a file whose path starts with yours, then read each hit, with `gh pr list --state open --limit 1000 --json number,files --jq '.[] | select(any(.files[]; .path | startswith("<path>"))) | .number'`, so you do not duplicate a peer's PR. Each pre-existing failure or remaining defect the PR body names links a tracked issue.
|
|
28
28
|
|
|
29
29
|
**A release bot's PR body is machine input. Leave it alone.** Release automation reads
|
|
30
30
|
back the body of its own merged pull request to decide it owns that merge. Rewriting the
|
|
@@ -123,7 +123,7 @@ An image a PR needs as visual evidence is not an exception to that row. Upload i
|
|
|
123
123
|
3. Fix systematically, marking each todo complete.
|
|
124
124
|
4. Reply to each comment inline.
|
|
125
125
|
|
|
126
|
-
Repair only the reported findings.
|
|
126
|
+
Repair only the reported findings. A finding that comes back on a second head escalates. Fix the source the reviewer reads, or change the gate that files the finding. Post no second reply with the same text, because a repeat finding shows the first reply changed nothing the reviewer sees.
|
|
127
127
|
|
|
128
128
|
Every `gh` post in this workflow uses `--body-file` per [gh-cli-conventions.md](#gh-cli-conventions) and keeps volatile scratch paths out per [durable-post-artifacts.md](#github-post-input-rules). Stage session edits per [re-stage-before-commit.md](#re-stage-session-edits-before-commit) before each commit.
|
|
129
129
|
|
|
@@ -458,7 +458,7 @@ slurped array and take the last element. For one page, cap the request with a
|
|
|
458
458
|
|
|
459
459
|
Stage the files you edited this session right before you commit them. A plain `git commit` records only the staged snapshot; a tracked file this session changed but left unstaged stays behind in the working tree.
|
|
460
460
|
|
|
461
|
-
No hook denies a commit that would drop tracked session edits. Run `git status` before you commit, then stage what you changed with `git add <paths>` or commit with `git commit -a`. Before you say nothing is left to commit, run `git status` in every worktree the session wrote to, as `git worktree list` lists them.
|
|
461
|
+
No hook denies a commit that would drop tracked session edits. Run `git status` before you commit, then stage what you changed with `git add <paths>` or commit with `git commit -a`. Before you say nothing is left to commit, run `git status` in every worktree the session wrote to, as `git worktree list` lists them. On PowerShell, write the commit message to a scratch file and run `git commit -F <file>`. A here-string piped into `git commit -F -` makes git read the message lines as pathspecs, and the commit fails.
|
|
462
462
|
|
|
463
463
|
Staging covers tracked files you edited. Do not commit untracked files unless the user explicitly instructs it. An untracked file in the working tree is outside the change until they say otherwise.
|
|
464
464
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: sync-dev-env
|
|
3
|
-
description: Install or update claude-dev-env in a running session, link the skills of every enabled plugin so a running session loads them, and schedule a daily re-sync at 6:00 AM local by default. Use when the user asks to sync claude-dev-env into a session, to load the skills of a plugin without a restart, to set up the daily sync, to check which session prompt a session uses, or to turn the claude-dev-env session prompt off for one session.
|
|
3
|
+
description: Install or update claude-dev-env in a running session, link the skills of every enabled plugin so a running session loads them, and schedule a daily re-sync at 6:00 AM local by default. Use when the user asks to sync claude-dev-env into a session, to load the skills of a plugin without a restart, when a /skill fails to resolve, to set up the daily sync, to check which session prompt a session uses, or to turn the claude-dev-env session prompt off for one session.
|
|
4
4
|
argument-hint: "[HH:MM] [IANA time zone]"
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -8,6 +8,10 @@ argument-hint: "[HH:MM] [IANA time zone]"
|
|
|
8
8
|
|
|
9
9
|
An always-on session starts once, so a SessionStart hook runs once and never again. Claude Code reads plugins only at session start, and a running session has no plugin reload. The skills directory is read live, so one symlink per skill makes each skill of a plugin load at once.
|
|
10
10
|
|
|
11
|
+
## A /skill fails to resolve
|
|
12
|
+
|
|
13
|
+
Run `/reload-skills` first. It reloads the skills directory in the running session, so the session keeps its context. When the skill still fails to resolve, run the linker in step 2.
|
|
14
|
+
|
|
11
15
|
## 1. Install or update the package
|
|
12
16
|
|
|
13
17
|
Run `npx --yes claude-dev-env@latest --update --target ~/.claude`.
|
|
@@ -31,4 +31,4 @@ The name has 25 characters or fewer and names the main change or outcome in conc
|
|
|
31
31
|
|
|
32
32
|
## Enforcement
|
|
33
33
|
|
|
34
|
-
`hooks/blocking/session_title_format_gate.py` denies a malformed title. `hooks/blocking/session_title_turn_gate.py` is a Stop hook. It holds the end of a turn until a title call in that turn comes back without an error. A turn that called no tool may end when an earlier turn already set the title. It applies when the transcript shows the title tool. A held turn whose title call failed may end, so a failing title tool cannot hold it forever.
|
|
34
|
+
`hooks/blocking/session_title_format_gate.py` denies a malformed title. `hooks/blocking/session_title_turn_gate.py` is a Stop hook. It holds the end of a turn until a title call in that turn comes back without an error. A turn that called no tool other than the title tool may end when an earlier turn already set the title. It applies when the transcript shows the title tool. A held turn whose title call failed may end, so a failing title tool cannot hold it forever.
|
|
@@ -7,11 +7,12 @@ a Stop hook block lands as an attachment, so a held turn stays the same turn.
|
|
|
7
7
|
A title call on a sidechain entry belongs to a subagent and does not count.
|
|
8
8
|
The turn may end once a tool whose name ends in __set_session_title ran in it
|
|
9
9
|
and its result came back without an error. A title the format gate denied
|
|
10
|
-
does not count. A turn that called no tool
|
|
11
|
-
main-chain turn set the title, since that title still
|
|
12
|
-
turn starts no new task. A held turn
|
|
13
|
-
failed may end, so a title tool
|
|
14
|
-
|
|
10
|
+
does not count. A turn that called no tool other than the title tool may also
|
|
11
|
+
end once an earlier main-chain turn set the title, since that title still
|
|
12
|
+
shows and a text-only turn starts no new task. A held turn
|
|
13
|
+
(``stop_hook_active`` true) whose title call failed may end, so a title tool
|
|
14
|
+
that keeps failing cannot hold it forever. A held turn with no title call
|
|
15
|
+
stays held, whichever Stop gate held it.
|
|
15
16
|
|
|
16
17
|
The session has the title tool when a transcript record names it::
|
|
17
18
|
|
|
@@ -266,7 +267,7 @@ def turn_block_reason(
|
|
|
266
267
|
|
|
267
268
|
no title tool in the transcript -> None
|
|
268
269
|
title set this turn -> None
|
|
269
|
-
|
|
270
|
+
only title calls this turn, earlier turn set the title -> None
|
|
270
271
|
held turn whose title call failed (stop_hook_active) -> None
|
|
271
272
|
no title call this turn -> reason
|
|
272
273
|
|
|
@@ -12,7 +12,7 @@ This family stops a chat reply, edited message, or tool call when its payload br
|
|
|
12
12
|
- `blocking/edit_marker_gate.py` rejects strikethrough and edit-note markers in replacement chat text or cards.
|
|
13
13
|
- `blocking/issue_close_handoff_gate.py` denies an issue comment or issue write that closes the issue and routes a found defect to another issue or epic.
|
|
14
14
|
- `blocking/session_title_format_gate.py` denies a session title that breaks the `<emoji> <name>` shape or has a name longer than 25 characters.
|
|
15
|
-
- `blocking/session_title_turn_gate.py` holds the end of a turn in a session that has a `__set_session_title` tool until a title call in that turn comes back without an error. A turn that called no tool may end when an earlier turn already set the title. A held turn whose title call failed may end.
|
|
15
|
+
- `blocking/session_title_turn_gate.py` holds the end of a turn in a session that has a `__set_session_title` tool until a title call in that turn comes back without an error. A turn that called no tool other than the title tool may end when an earlier turn already set the title. A held turn whose title call failed may end.
|
|
16
16
|
- `blocking/step_note_gate.py` requires a status line before a tool call while its opt-in flag is on.
|
|
17
17
|
- `blocking/verify_before_acting.py` blocks a completed mutating call when the agent's reasoning contains an unchecked claim.
|
|
18
18
|
- `blocking/pr_lifecycle_skill_gate.py` denies a commit, push, pull request action, or merge until the `pr-lifecycle` skill appears in the transcript since the last compaction.
|