@haus-tech/haus-workflow 1.7.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 +76 -0
- package/README.md +21 -5
- package/dist/cli.js +3398 -1440
- package/library/catalog/manifest.json +1328 -278
- package/library/catalog/validation-rules.json +5 -0
- package/library/global/skills/haus-workflow/SKILL.md +30 -21
- package/library/global/skills/haus-workflow/references/init.md +3 -3
- package/library/global/skills/haus-workflow/references/new.md +24 -0
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,81 @@
|
|
|
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
|
+
|
|
57
|
+
## [2.0.0](https://github.com/WeAreHausTech/haus-workflow/compare/v1.7.0...v2.0.0) (2026-08-17)
|
|
58
|
+
|
|
59
|
+
### Features
|
|
60
|
+
|
|
61
|
+
- **catalog:** durable per-project catalog ref pin ([a5317ee](https://github.com/WeAreHausTech/haus-workflow/commit/a5317eec9aa85f167ea869d47353e839fb8bab98))
|
|
62
|
+
- **catalog:** gate catalog installs on manifestFormat ([fa2625d](https://github.com/WeAreHausTech/haus-workflow/commit/fa2625d1e064fcf2bd3b83eae761853d4ba3ccb3))
|
|
63
|
+
- **catalog:** install a curated skill's declared dependencies, without running its scripts ([ae98119](https://github.com/WeAreHausTech/haus-workflow/commit/ae9811920951047401b12043f9196e3def899260))
|
|
64
|
+
- **catalog:** install rule and asset items by mirroring their upstream path ([5735329](https://github.com/WeAreHausTech/haus-workflow/commit/5735329179851fb239d8d53d26e30a2af8bbf702))
|
|
65
|
+
- **catalog:** pin the lifecycle of mirrored rule items, and stop them clobbering core output ([652f3e7](https://github.com/WeAreHausTech/haus-workflow/commit/652f3e7df6095b131df2501481fafe1fe310871b))
|
|
66
|
+
- **catalog:** ship the format-2 snapshot, and close the validator drift it exposed ([6a6cc2b](https://github.com/WeAreHausTech/haus-workflow/commit/6a6cc2beb89e55c0af10fe37e3e2e5f88c8236ca))
|
|
67
|
+
- **doctor:** report catalog renames, and stop a too-new catalog silencing the report ([b85bfed](https://github.com/WeAreHausTech/haus-workflow/commit/b85bfed556fbf34c552516d376df007e36e6f3b1))
|
|
68
|
+
|
|
69
|
+
### Bug Fixes
|
|
70
|
+
|
|
71
|
+
- **catalog:** drop dead backslash normalisation, render the config-dir label posix ([9004bbf](https://github.com/WeAreHausTech/haus-workflow/commit/9004bbf8a088702f751b53a15f39078cca3a4313))
|
|
72
|
+
- **catalog:** honour the format refusal in update, and bind the cache to its ref ([74f8c43](https://github.com/WeAreHausTech/haus-workflow/commit/74f8c431fbdbfcd4e3db5214bf8598feb5673d0c)), closes [#285](https://github.com/WeAreHausTech/haus-workflow/issues/285) [#239](https://github.com/WeAreHausTech/haus-workflow/issues/239)
|
|
73
|
+
- **catalog:** round-trip manifestFormat through the catalog cache ([82e82c5](https://github.com/WeAreHausTech/haus-workflow/commit/82e82c5022f09cb85762c139d8448bbfb92a8292))
|
|
74
|
+
- **doctor,install:** stop two paths that delete files haus said it would keep ([a1e500b](https://github.com/WeAreHausTech/haus-workflow/commit/a1e500b09a4e14cb33cb622cb51ff724785a04c5)), closes [#285](https://github.com/WeAreHausTech/haus-workflow/issues/285)
|
|
75
|
+
- **hooks:** stop the format hook skipping .js ([#287](https://github.com/WeAreHausTech/haus-workflow/issues/287)) ([0dbaefb](https://github.com/WeAreHausTech/haus-workflow/commit/0dbaefb2a5c3ce00103db6242a02693ece27798c))
|
|
76
|
+
- **install:** resolve the global install through CLAUDE_CONFIG_DIR ([#278](https://github.com/WeAreHausTech/haus-workflow/issues/278)) ([046828e](https://github.com/WeAreHausTech/haus-workflow/commit/046828e395e10bdf9edfa0644de4f41e56d38cc2))
|
|
77
|
+
- **scanner:** let doctor survive a too-new catalog on an unscanned project ([e4ccc00](https://github.com/WeAreHausTech/haus-workflow/commit/e4ccc00ed92514d334fe20f61a14b1bdb647f780))
|
|
78
|
+
|
|
3
79
|
## [1.7.0](https://github.com/WeAreHausTech/haus-workflow/compare/v1.6.0...v1.7.0) (2026-08-13)
|
|
4
80
|
|
|
5
81
|
### 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 #
|
|
61
|
-
haus
|
|
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)
|
|
@@ -83,18 +83,34 @@ haus uninstall # remove Haus-managed files from ~/.claude/
|
|
|
83
83
|
## Catalog
|
|
84
84
|
|
|
85
85
|
Content lives in [`haus-workflow-catalog`](https://github.com/WeAreHausTech/haus-workflow-catalog)
|
|
86
|
-
(version pinned in `library/catalog/manifest.json`). Fetched at runtime from the latest
|
|
86
|
+
(version pinned in `library/catalog/manifest.json`). Fetched at runtime from the latest
|
|
87
|
+
release tag. Ref precedence: `HAUS_CATALOG_REF` env → a project's
|
|
88
|
+
`.haus-workflow/haus.config.json#catalogRef` pin → latest release tag → bundled snapshot
|
|
89
|
+
→ `main`.
|
|
87
90
|
Validation rules sync from catalog → `library/catalog/validation-rules.json` (ADR-0001).
|
|
88
91
|
|
|
92
|
+
Items install by **flattening** (`skill`, `agent`, `template`, `command` — basename only)
|
|
93
|
+
or by **mirroring** their upstream path under `sources/<slug>/` (`rule`, `asset` — so
|
|
94
|
+
`.claude/rules/react/hooks.md` lands where the curated prose that references it expects).
|
|
95
|
+
See [ADR-0046](docs/decisions/0046-manifest-format-2-install-contract.md).
|
|
96
|
+
|
|
89
97
|
On `haus apply` / `haus update`, items **removed from the catalog** or marked
|
|
90
98
|
**deprecated** are pruned from the project when their on-disk copy still matches the
|
|
91
|
-
lock hash; user-edited copies are kept
|
|
92
|
-
|
|
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.
|
|
93
105
|
|
|
94
106
|
> **Upgrading from a pre-`0.30.0` CLI:** deprecated-skill pruning shipped in `0.30.0`.
|
|
95
107
|
> If an older CLI left deprecated skills on disk, upgrade first
|
|
96
108
|
> (`npm i -g @haus-tech/haus-workflow`) then run `haus update` to prune them.
|
|
97
109
|
|
|
110
|
+
> **Upgrading to `2.0.0`:** see [docs/upgrading-2.0.md](docs/upgrading-2.0.md). It carries
|
|
111
|
+
> the rollout order (CLI first, catalog second), the two renamed skill directories, what
|
|
112
|
+
> `.claude/rules/` now contains, and how to pin to a format-1 catalog to defer.
|
|
113
|
+
|
|
98
114
|
## Internal docs
|
|
99
115
|
|
|
100
116
|
[docs/SUMMARY.md](docs/SUMMARY.md) — full documentation index
|