@haus-tech/haus-workflow 2.0.0 → 3.0.0

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
@@ -1,5 +1,59 @@
1
1
  # Changelog
2
2
 
3
+ ## [3.0.0](https://github.com/WeAreHausTech/haus-workflow/compare/v2.0.0...v3.0.0) (2026-08-18)
4
+
5
+ ### ⚠ BREAKING CHANGES
6
+
7
+ - **cli:** merge setup-project into init
8
+ - **cli:** rename haus refresh to haus rescan
9
+ - **cli:** rename haus scaffold to haus configs
10
+
11
+ ### Features
12
+
13
+ - **cli:** add haus new command with dry-run, --list, and TTY-safe prompts ([e7463ba](https://github.com/WeAreHausTech/haus-workflow/commit/e7463ba836a30637cca9e3680ed27a33ef878913))
14
+ - **cli:** merge setup-project into init ([6f26632](https://github.com/WeAreHausTech/haus-workflow/commit/6f266320f90a6e5436c4007c614a173e8b81b6d3))
15
+ - **cli:** rename haus refresh to haus rescan ([4126921](https://github.com/WeAreHausTech/haus-workflow/commit/4126921e32a12dbc8c5f1e501be07fc7460a338c))
16
+ - **cli:** rename haus scaffold to haus configs ([8c39b22](https://github.com/WeAreHausTech/haus-workflow/commit/8c39b22788c83e5cc268f57e8eb4f4ab7443ff4a))
17
+ - haus remove <ids...> and a documented mutation model ([#300](https://github.com/WeAreHausTech/haus-workflow/issues/300)) ([4b0f854](https://github.com/WeAreHausTech/haus-workflow/commit/4b0f854a1d83cc00d84bdd6edbda995c9b6217b6)), closes [238/#249](https://github.com/238/haus-workflow/issues/249) [#243](https://github.com/WeAreHausTech/haus-workflow/issues/243) [#243](https://github.com/WeAreHausTech/haus-workflow/issues/243) [238/#249](https://github.com/238/haus-workflow/issues/249) [#238](https://github.com/WeAreHausTech/haus-workflow/issues/238)
18
+ - **new:** add CLI-owned stack registry for haus new ([8160960](https://github.com/WeAreHausTech/haus-workflow/commit/8160960dddad4f066b12d5be1a7525c78c5e59cd))
19
+ - **new:** add create-project orchestrator with fail-closed preflight ([30ef275](https://github.com/WeAreHausTech/haus-workflow/commit/30ef27579d84760e8e162db9176f1bdf7d0dc9f6))
20
+ - **new:** add gh CLI wrapper with org preflight and injectable exec ([5c7cc55](https://github.com/WeAreHausTech/haus-workflow/commit/5c7cc557e9d87826edb04a3db91d608c3292de9d))
21
+ - **skill:** add project:new task to haus-workflow skill ([069121d](https://github.com/WeAreHausTech/haus-workflow/commit/069121d4cfc62a46d6d752a354db3172da34cf2b))
22
+
23
+ ### Bug Fixes
24
+
25
+ - check git exit codes, restore [#303](https://github.com/WeAreHausTech/haus-workflow/issues/303) docs, give canary a git identity ([ef8a36d](https://github.com/WeAreHausTech/haus-workflow/commit/ef8a36db2a0b65f9414fd8ed85aa11fee4fa9bfd))
26
+ - **cli:** finish haus scaffold -> haus configs wording sweep ([edc40c2](https://github.com/WeAreHausTech/haus-workflow/commit/edc40c295919197bdbdc4658fe0ea8f999494a30))
27
+ - **cli:** fix round 1 — EOF latch, scoped backups --json gate, ADR/docs ([f16e1af](https://github.com/WeAreHausTech/haus-workflow/commit/f16e1afce8c256d24ad2b1ce2ea4f8d1bd05c86d))
28
+ - close stdout-purity gaps in haus new + seed npm lockfile ([bfdb9d1](https://github.com/WeAreHausTech/haus-workflow/commit/bfdb9d137150f70666412fa986f158182bcfddf2))
29
+ - every deleter backs up, and a refused deletion keeps its lock row ([#303](https://github.com/WeAreHausTech/haus-workflow/issues/303)) ([246ddca](https://github.com/WeAreHausTech/haus-workflow/commit/246ddca1c04910d3f4215510f4f1f7d5f97f0af3)), closes [#290](https://github.com/WeAreHausTech/haus-workflow/issues/290) [#291](https://github.com/WeAreHausTech/haus-workflow/issues/291) [#292](https://github.com/WeAreHausTech/haus-workflow/issues/292) [#300](https://github.com/WeAreHausTech/haus-workflow/issues/300) [#291](https://github.com/WeAreHausTech/haus-workflow/issues/291) [#290](https://github.com/WeAreHausTech/haus-workflow/issues/290) [#290](https://github.com/WeAreHausTech/haus-workflow/issues/290) [#292](https://github.com/WeAreHausTech/haus-workflow/issues/292) [#292](https://github.com/WeAreHausTech/haus-workflow/issues/292) [#290](https://github.com/WeAreHausTech/haus-workflow/issues/290) [#291](https://github.com/WeAreHausTech/haus-workflow/issues/291) [#293](https://github.com/WeAreHausTech/haus-workflow/issues/293) [#292](https://github.com/WeAreHausTech/haus-workflow/issues/292) [#292](https://github.com/WeAreHausTech/haus-workflow/issues/292)
30
+ - **new:** apply catalog policy gates in overlay, contain scan/git-followup throws honestly, bound scaffold spawn with a timeout ([73a8b9a](https://github.com/WeAreHausTech/haus-workflow/commit/73a8b9adc8a7280a9522316d40141bf7632361fb))
31
+ - **new:** contain gh exec throws, fix partial-failure resumeHint, union CreateRepoResult ([b267508](https://github.com/WeAreHausTech/haus-workflow/commit/b26750898418cd015f1712f82b41fbad1544888c))
32
+ - **test:** isolate [#298](https://github.com/WeAreHausTech/haus-workflow/issues/298) rescan/plugin tests from real ~/.claude ([e261905](https://github.com/WeAreHausTech/haus-workflow/commit/e261905361d3216bd79cdcfacc797c9c1229cee5)), closes [#298a](https://github.com/WeAreHausTech/haus-workflow/issues/298a) [#298b](https://github.com/WeAreHausTech/haus-workflow/issues/298b)
33
+ - **test:** isolate init idempotency test from real network/~/.claude ([aa7f595](https://github.com/WeAreHausTech/haus-workflow/commit/aa7f595dc9ad4f88c686de310a2115f61bf624e2)), closes [#297](https://github.com/WeAreHausTech/haus-workflow/issues/297)
34
+
35
+ ## Unreleased
36
+
37
+ ### Features
38
+
39
+ - **remove:** `haus remove <ids...>` — deliberate single-item removal, hash-gated, backed up to `.haus-workflow/backups/remove-<timestamp>/` first, and refused (files _and_ lock entry kept) on a locally modified item ([#238](https://github.com/WeAreHausTech/haus-workflow/issues/238))
40
+ - **refresh:** `haus refresh --dry-run` — refresh was the one mutating command with no preview flag ([#249](https://github.com/WeAreHausTech/haus-workflow/issues/249))
41
+
42
+ ### Bug Fixes
43
+
44
+ - **backups:** recognise `haus remove`'s `remove-<timestamp>/` snapshots. `classify()` knew only the lock/`undo-`/`prune-` prefixes, so `listBackups` dropped them — a `remove-` backup was invisible to `backups list`, unrestorable (`No backup found with id …`), and never reclaimed by `backups prune`, while `haus remove` told the user to restore from it ([#238](https://github.com/WeAreHausTech/haus-workflow/issues/238))
45
+ - **apply:** back up before the `formerIds` rename cleanup deletes. `cleanupMigratedCatalogItems` ran its own hash check and its own `fs.remove` loop with no snapshot at all, on every apply that hit a rename — those deletions were unrecoverable. It now routes through the shared `hashGateEntry` and writes to `.haus-workflow/backups/migrate-<timestamp>/`, a prefix `classify()` recognises so the snapshots list, restore and prune ([#290](https://github.com/WeAreHausTech/haus-workflow/issues/290))
46
+ - **apply:** back up every stale-cleanup reason, not only the plugin-superseded one. `cleanupStaleCatalogItems`' backup call was guarded on `superseded`, so manifest-removed and `deprecated` items were deleted with no snapshot; all three reasons now snapshot to `prune-<timestamp>/` first ([#291](https://github.com/WeAreHausTech/haus-workflow/issues/291))
47
+ - **apply:** keep the lock row when a deletion is refused. The apply-side lock rebuild dropped a stale or orphaned item's row even when the hash gate had just refused to delete its files, leaving the kept file untracked and unreachable by any later run. Both apply-side deleters now return the ids they refused and the rebuild carries those rows forward verbatim — original recorded `hash` included, never re-hashed — so `haus update --check` still reports the drift ([#292](https://github.com/WeAreHausTech/haus-workflow/issues/292))
48
+
49
+ ### Documentation
50
+
51
+ - **cli:** publish a per-command "Does this command write to disk?" table, with the `workspace setup` three-state contract, `setup-project`'s `--json`-as-preview gap, and `refresh --dry-run`'s remaining `claude` CLI probe all stated rather than flattened ([#249](https://github.com/WeAreHausTech/haus-workflow/issues/249))
52
+
53
+ ### Code Refactoring
54
+
55
+ - **cli:** centralise `--dry-run`/`--write` resolution in `src/utils/write-mode.ts` under three named contracts; no command's default changed, and `workspace setup` deliberately keeps its own parsing (see ADR-0047) ([#249](https://github.com/WeAreHausTech/haus-workflow/issues/249))
56
+
3
57
  ## [2.0.0](https://github.com/WeAreHausTech/haus-workflow/compare/v1.7.0...v2.0.0) (2026-08-17)
4
58
 
5
59
  ### Features
package/README.md CHANGED
@@ -57,8 +57,8 @@ Without an argument, the skill presents a menu so you can pick the task. With an
57
57
  ## Commands
58
58
 
59
59
  ```bash
60
- haus init # first-run setup (scan → recommend → apply)
61
- haus setup-project # re-run setup on existing project
60
+ haus init # full setup: scan → recommend → apply (safe to re-run)
61
+ haus init --dry-run # preview the .claude/ write only; scan artifacts are still written
62
62
  haus clone <url> [dir] # clone a single git repo by URL (the primitive project:clone / project:cloneandsetup loop over)
63
63
  haus scan # scan repo and write context-map
64
64
  haus recommend # recommend catalog items (binary eligibility)
@@ -96,8 +96,12 @@ See [ADR-0046](docs/decisions/0046-manifest-format-2-install-contract.md).
96
96
 
97
97
  On `haus apply` / `haus update`, items **removed from the catalog** or marked
98
98
  **deprecated** are pruned from the project when their on-disk copy still matches the
99
- lock hash; user-edited copies are kept. Approved items deselected via `--select` are
100
- not pruned.
99
+ lock hash; user-edited copies are kept, lock entry and all. Every lock-tracked catalog item
100
+ haus deletes is snapshotted under `.haus-workflow/backups/` first and can be put back with
101
+ `haus backups restore` (`haus undo` also removes other project files such as
102
+ `.claude/settings.json` and the root `CLAUDE.md`, which are not lock-tracked and not
103
+ snapshotted — see [docs/cli.md](docs/cli.md) → `haus backups`). Approved items deselected via
104
+ `--select` are not pruned.
101
105
 
102
106
  > **Upgrading from a pre-`0.30.0` CLI:** deprecated-skill pruning shipped in `0.30.0`.
103
107
  > If an older CLI left deprecated skills on disk, upgrade first