claude-dev-env 8.96.4 → 8.96.5

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, search open PRs for the same paths with `gh pr list --search "<path>"`, so you do not duplicate a peer's PR. Each pre-existing failure or remaining defect the PR body names links a tracked issue.
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
@@ -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 may also end once an earlier
11
- main-chain turn set the title, since that title still shows and a text-only
12
- turn starts no new task. A held turn (``stop_hook_active`` true) whose title call
13
- failed may end, so a title tool that keeps failing cannot hold it forever. A
14
- held turn with no title call stays held, whichever Stop gate held it.
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
- tool-free turn after an earlier turn set the title -> None
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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-dev-env",
3
- "version": "8.96.4",
3
+ "version": "8.96.5",
4
4
  "description": "Claude Code development standards — rules, hooks, agents, commands, and skills",
5
5
  "type": "module",
6
6
  "bin": {