claude-dev-env 8.54.6 → 8.54.7

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.
@@ -2986,6 +2986,10 @@ test('the help output states that the installer reads only flags', () => {
2986
2986
  assert.equal(helpRun.status, 0, helpRun.stderr);
2987
2987
  assert.match(helpRun.stdout, /reads only flags/i);
2988
2988
  assert.match(helpRun.stdout, /bare path argument carries no meaning/i);
2989
+ assert.match(
2990
+ helpRun.stdout,
2991
+ /--update\s+Full install: copy the package over the prior install, then prune files it no longer ships/,
2992
+ );
2989
2993
  });
2990
2994
 
2991
2995
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-dev-env",
3
- "version": "8.54.6",
3
+ "version": "8.54.7",
4
4
  "description": "Claude Code development standards — rules, hooks, agents, commands, and skills",
5
5
  "type": "module",
6
6
  "bin": {
@@ -30,6 +30,8 @@ test('the driver reads an envelope from every stage of a fresh install, and repo
30
30
  assert.match(greenRun.stdout, /\[PASS\] playtest install .* sha256=[0-9a-f]{64}/);
31
31
  assert.match(greenRun.stdout, /\[PASS\] playtest session_start_hook .* sha256=[0-9a-f]{64}/);
32
32
  assert.match(greenRun.stdout, /\[PASS\] playtest blocking_hook .* sha256=[0-9a-f]{64}/);
33
+ const blockingEnvelope = JSON.parse(readFileSync(join(evidenceDirectory, 'blocking_hook.json'), 'utf8'));
34
+ assert.equal(Object.hasOwn(blockingEnvelope, 'permissionDecision'), false);
33
35
  assert.ok(
34
36
  readFileSync(join(scratchHome, SANDBOX_GIT_CONFIG_NAME), 'utf8').startsWith(SANDBOX_GIT_CONFIG_BODY),
35
37
  );
@@ -16,9 +16,11 @@ import pytest
16
16
 
17
17
  from dev_env_scripts_constants import account_broker_constants as broker_constants
18
18
  from dev_env_scripts_constants.account_broker_constants import (
19
+ ALL_BATCH_FILE_EXTENSIONS,
19
20
  ALL_CLAUDE_FLOORS,
20
- ALL_PARENT_CLAUDE_SESSION_VARIABLES,
21
21
  ALL_CODEX_FLOORS,
22
+ ALL_PARENT_CLAUDE_SESSION_VARIABLES,
23
+ CMD_SHELL_METACHARACTERS,
22
24
  JobOutcome,
23
25
  )
24
26
  from dev_env_scripts_constants.claude_account_constants import (
@@ -53,6 +55,11 @@ def test_should_keep_codex_floors_tied_to_the_tier_limits() -> None:
53
55
  }
54
56
 
55
57
 
58
+ def test_batch_command_boundaries_include_shell_metacharacters() -> None:
59
+ assert ALL_BATCH_FILE_EXTENSIONS == frozenset({".bat", ".cmd"})
60
+ assert set(CMD_SHELL_METACHARACTERS) == set('&|<>^%!"\r\n')
61
+
62
+
56
63
  def test_should_freeze_job_outcome() -> None:
57
64
  outcome = JobOutcome(0, "", "", None, (), "served", None, None)
58
65
  with pytest.raises(dataclasses.FrozenInstanceError):