claude-dev-env 8.17.0 → 8.17.1

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.
@@ -0,0 +1,87 @@
1
+ import { test } from 'node:test';
2
+ import { strict as assert } from 'node:assert';
3
+ import {
4
+ emptyManagedPermissions,
5
+ managedPermissionsFromPackageSettings,
6
+ countManagedPermissions,
7
+ retiredManagedPermissions,
8
+ mergeManagedPermissionsIntoSettings,
9
+ pruneManagedPermissionsFromSettings,
10
+ } from './merge_managed_permissions.mjs';
11
+
12
+ test('emptyManagedPermissions returns separate empty records', () => {
13
+ const first = emptyManagedPermissions();
14
+ const second = emptyManagedPermissions();
15
+ assert.deepEqual(first, { allow: [], deny: [] });
16
+ first.allow.push('Read(./managed/**)');
17
+ assert.deepEqual(second, { allow: [], deny: [] });
18
+ });
19
+
20
+ test('managedPermissionsFromPackageSettings keeps nonblank string rules', () => {
21
+ const settings = {
22
+ permissions: {
23
+ allow: ['Read(./managed/**)', '', ' ', 4],
24
+ deny: ['Write(./managed/**)', null],
25
+ ask: ['Write(./user/**)'],
26
+ },
27
+ };
28
+ assert.deepEqual(managedPermissionsFromPackageSettings(settings), {
29
+ allow: ['Read(./managed/**)'],
30
+ deny: ['Write(./managed/**)'],
31
+ });
32
+ assert.deepEqual(managedPermissionsFromPackageSettings(null), {
33
+ allow: [],
34
+ deny: [],
35
+ });
36
+ });
37
+
38
+ test('countManagedPermissions counts both owned lists', () => {
39
+ assert.equal(countManagedPermissions({ allow: ['read-a', 'read-b'], deny: ['write-a'] }), 3);
40
+ });
41
+
42
+ test('retiredManagedPermissions keeps only rules absent from the same current list', () => {
43
+ const prior = {
44
+ allow: ['Read(./old/**)', 'Read(./keep/**)'],
45
+ deny: ['Write(./keep/**)', 'Write(./old/**)'],
46
+ };
47
+ const current = {
48
+ allow: ['Read(./keep/**)'],
49
+ deny: ['Write(./keep/**)'],
50
+ };
51
+ assert.deepEqual(retiredManagedPermissions(prior, current), {
52
+ allow: ['Read(./old/**)'],
53
+ deny: ['Write(./old/**)'],
54
+ });
55
+ assert.equal(prior.allow.length, 2);
56
+ assert.equal(prior.deny.length, 2);
57
+ });
58
+
59
+ test('mergeManagedPermissionsIntoSettings adds owned rules once and keeps user rules', () => {
60
+ const settings = { permissions: { allow: ['Read(./user/**)'], ask: ['Write(./user/**)'] } };
61
+ const managed = { allow: ['Read(./managed/**)'], deny: ['Write(./managed/**)'] };
62
+ const first = mergeManagedPermissionsIntoSettings(settings, managed);
63
+ const second = mergeManagedPermissionsIntoSettings(settings, managed);
64
+ assert.deepEqual([first.addedCount, first.alreadyPresentCount], [2, 0]);
65
+ assert.deepEqual([second.addedCount, second.alreadyPresentCount], [0, 2]);
66
+ assert.deepEqual(settings.permissions, {
67
+ allow: ['Read(./user/**)', 'Read(./managed/**)'],
68
+ ask: ['Write(./user/**)'],
69
+ deny: ['Write(./managed/**)'],
70
+ });
71
+ });
72
+
73
+ test('pruneManagedPermissionsFromSettings removes owned rules and keeps user rules', () => {
74
+ const settings = {
75
+ permissions: {
76
+ allow: ['Read(./user/**)', 'Read(./managed/**)'],
77
+ ask: ['Write(./user/**)'],
78
+ deny: ['Write(./managed/**)'],
79
+ },
80
+ };
81
+ const managed = { allow: ['Read(./managed/**)'], deny: ['Write(./managed/**)'] };
82
+ assert.deepEqual(pruneManagedPermissionsFromSettings(settings, managed), { removedCount: 2 });
83
+ assert.deepEqual(settings.permissions, {
84
+ allow: ['Read(./user/**)'],
85
+ ask: ['Write(./user/**)'],
86
+ });
87
+ });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-dev-env",
3
- "version": "8.17.0",
3
+ "version": "8.17.1",
4
4
  "description": "Claude Code development standards — rules, hooks, agents, commands, and skills",
5
5
  "type": "module",
6
6
  "bin": {