devflow-kit 3.0.0 → 3.0.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.
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,14 @@ All notable changes to Devflow will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [3.0.1] - 2026-10-02
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- **The three whole-disk docker mount rules now match, and Claude Code no longer warns about them at startup**. 3.0.0 shipped `Bash(docker run*-v /:*)`, `Bash(docker run*--volume /:*)` and `Bash(docker run*--volume=/:*)`. A trailing `:*` is Claude Code's legacy prefix syntax, which turns the rest of the rule into a literal prefix: the `*` after `docker run` was never expanded, so none of the three blocked anything, and each produced a "mixes * with the trailing :* prefix syntax" warning on every start. They are now `Bash(docker run*-v /:/*)`, `Bash(docker run*--volume /:/*)` and `Bash(docker run*--volume=/:/*)`, which deny any mount of the host root (`-v /:/host`, `-v /:/host:ro`) wherever the flag sits, while ordinary mounts such as `-v /home/me/proj:/app` or `-v $(pwd):/app` stay allowed. The list stays at 170 entries. Re-run `devflow init` to apply: it replaces the old entries, and `devflow security --disable` and `devflow uninstall` still recognise both forms as devflow's.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
8
16
|
## [3.0.0] - 2026-09-30
|
|
9
17
|
|
|
10
18
|
### Added
|
|
@@ -1462,6 +1470,7 @@ devflow init
|
|
|
1462
1470
|
---
|
|
1463
1471
|
|
|
1464
1472
|
[Unreleased]: https://github.com/dean0x/devflow/compare/v2.0.0...HEAD
|
|
1473
|
+
[3.0.1]: https://github.com/dean0x/devflow/compare/v3.0.0...v3.0.1
|
|
1465
1474
|
[3.0.0]: https://github.com/dean0x/devflow/compare/v2.5.0...v3.0.0
|
|
1466
1475
|
[2.5.0]: https://github.com/dean0x/devflow/compare/v2.4.0...v2.5.0
|
|
1467
1476
|
[2.4.0]: https://github.com/dean0x/devflow/compare/v2.3.0...v2.4.0
|
|
@@ -292,6 +292,13 @@ export function mergeDenyList(existingJson, newDenyEntries, retired = new Set())
|
|
|
292
292
|
// subcommand alone, so a rule holding ` | ` can never match anything. The exact
|
|
293
293
|
// shell-on-stdin denies in the v2 batch (`Bash(bash)`, `Bash(sh -s *)`, ...) match the
|
|
294
294
|
// shell subcommand of such a pipeline instead.
|
|
295
|
+
// D-SECURITY-03: the three 3.0.0 root-mount rules (`Bash(docker run*-v /:*)` and the
|
|
296
|
+
// two `--volume` spellings) are RETIRED too. A trailing `:*` is Claude Code's legacy
|
|
297
|
+
// prefix syntax, which makes the rest of the rule a literal prefix — the `*` after
|
|
298
|
+
// `docker run` is never expanded — so they matched nothing and drew a startup warning.
|
|
299
|
+
// Their replacements end `/:/*` instead: a container path is always absolute, so `/:/`
|
|
300
|
+
// follows every mount of the host root, while an ordinary `-v /home/me/proj:/app` never
|
|
301
|
+
// holds it. (Claude Code's own suggestion, `-v /*`, would deny every absolute mount.)
|
|
295
302
|
// Only entries a release actually shipped belong here: removal and install convergence
|
|
296
303
|
// strip every entry this set names that the template does not, so a rule Devflow never
|
|
297
304
|
// shipped would be taken from a user who wrote it (ADR-024, prove-you-wrote-it).
|
|
@@ -451,9 +458,10 @@ export const DEVFLOW_HISTORICAL_DENY = Object.freeze(new Set([
|
|
|
451
458
|
'Read(/etc/shadow)',
|
|
452
459
|
'Read(/etc/sudoers)',
|
|
453
460
|
'Read(/etc/passwd)',
|
|
454
|
-
// v2 batch (#399) — 25
|
|
455
|
-
// `zsh -c` beside the v1 `sh -c`/`bash -c`, OrbStack VM control, docker
|
|
456
|
-
// pull/delete/prune and whole-disk or privileged runs.
|
|
461
|
+
// v2 batch (#399) — 25 entries shipped in 3.0.0: a shell reading its script from
|
|
462
|
+
// stdin, `zsh -c` beside the v1 `sh -c`/`bash -c`, OrbStack VM control, docker
|
|
463
|
+
// pull/delete/prune and whole-disk or privileged runs. Its three `:*` root-mount
|
|
464
|
+
// rules are retired (D-SECURITY-03); the other 22 are still template entries.
|
|
457
465
|
'Bash(bash)',
|
|
458
466
|
'Bash(sh)',
|
|
459
467
|
'Bash(zsh)',
|
|
@@ -479,6 +487,11 @@ export const DEVFLOW_HISTORICAL_DENY = Object.freeze(new Set([
|
|
|
479
487
|
'Bash(orb *)',
|
|
480
488
|
'Bash(orbctl *)',
|
|
481
489
|
'Bash(open *OrbStack*)',
|
|
490
|
+
// Root-mount rules in wildcard form — 3 template entries replacing the v2 batch's
|
|
491
|
+
// three `:*` root-mount rules 1:1 (D-SECURITY-03), so the template stays at 170.
|
|
492
|
+
'Bash(docker run*-v /:/*)',
|
|
493
|
+
'Bash(docker run*--volume /:/*)',
|
|
494
|
+
'Bash(docker run*--volume=/:/*)',
|
|
482
495
|
]));
|
|
483
496
|
/**
|
|
484
497
|
* The Devflow deny entries an older install may carry that the current template no
|
|
@@ -491,7 +504,8 @@ export const DEVFLOW_HISTORICAL_DENY = Object.freeze(new Set([
|
|
|
491
504
|
* retired entry themselves is indistinguishable from Devflow's copy and loses it on the
|
|
492
505
|
* next install, exactly as `security --disable` and uninstall already strip every
|
|
493
506
|
* historical entry. Retire an entry only when losing a user's identical copy is
|
|
494
|
-
* harmless; the #399 piped rules
|
|
507
|
+
* harmless; the #399 piped rules and the 3.0.0 `:*` root-mount rules qualify because
|
|
508
|
+
* none could ever match (D-SECURITY-02, D-SECURITY-03).
|
|
495
509
|
*/
|
|
496
510
|
export function retiredDenyEntries(templateEntries) {
|
|
497
511
|
if (templateEntries.length === 0)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "devflow-kit",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.1",
|
|
4
4
|
"description": "A meta-harness for Claude Code — turns a single coding agent into an engineering team: orchestration, parallel review, persistent memory, self-learning, and graph workflows",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -92,9 +92,9 @@
|
|
|
92
92
|
"Bash(docker run --pid=host*)",
|
|
93
93
|
"Bash(docker run --net=host*)",
|
|
94
94
|
"Bash(docker run*--privileged*)",
|
|
95
|
-
"Bash(docker run*-v
|
|
96
|
-
"Bash(docker run*--volume
|
|
97
|
-
"Bash(docker run*--volume
|
|
95
|
+
"Bash(docker run*-v /:/*)",
|
|
96
|
+
"Bash(docker run*--volume /:/*)",
|
|
97
|
+
"Bash(docker run*--volume=/:/*)",
|
|
98
98
|
"Bash(docker pull *)",
|
|
99
99
|
"Bash(docker image pull *)",
|
|
100
100
|
"Bash(docker rm *)",
|