hstack 0.16.0 → 0.18.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 +53 -0
- package/README.md +76 -163
- package/VERSION +1 -1
- package/dist/commands/doctor.js +18 -8
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/init.js +7 -3
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/update.js +9 -2
- package/dist/commands/update.js.map +1 -1
- package/dist/lib/descriptions.js +10 -17
- package/dist/lib/descriptions.js.map +1 -1
- package/dist/lib/wire.js +166 -138
- package/dist/lib/wire.js.map +1 -1
- package/dist/manifest.js +41 -29
- package/dist/manifest.js.map +1 -1
- package/package.json +3 -4
- package/template/.claude/agents/adversarial-reviewer.md +44 -50
- package/template/.claude/agents/app-architect.md +44 -96
- package/template/.claude/agents/data-architect.md +46 -89
- package/template/.claude/agents/test-strategist.md +39 -68
- package/template/.claude/skills/hstack-adr-new/SKILL.md +23 -73
- package/template/.claude/skills/hstack-adversarial-review/SKILL.md +46 -152
- package/template/.claude/skills/hstack-adversarial-review/references/finding-categories.md +89 -103
- package/template/.claude/skills/hstack-app-architecture/SKILL.md +43 -68
- package/template/.claude/skills/hstack-commit/SKILL.md +27 -68
- package/template/.claude/skills/hstack-data-architecture/SKILL.md +34 -56
- package/template/.claude/skills/hstack-promote/SKILL.md +55 -0
- package/template/.claude/skills/hstack-story/SKILL.md +58 -0
- package/template/.claude/skills/hstack-test-audit/SKILL.md +64 -0
- package/template/.claude/skills/hstack-wrap/SKILL.md +50 -0
- package/template/.claude/skills/hstack-wrap/references/pr-description.md +45 -0
- package/template/KERNEL.md +75 -318
- package/template/templates/adr.md +2 -18
- package/template/templates/app-architecture.md +38 -50
- package/template/templates/code-standards.md +107 -0
- package/template/templates/data-architecture.md +38 -89
- package/template/templates/eslint-clean-code.mjs +322 -0
- package/template/templates/infrastructure.md +54 -148
- package/template/templates/roadmap.md +6 -12
- package/template/templates/story.md +7 -13
- package/template/templates/tech-debt.md +2 -37
- package/template/templates/tech-stack.md +2 -12
- package/template/.claude/agents/data-specialist.md +0 -81
- package/template/.claude/agents/implementer.md +0 -97
- package/template/.claude/agents/kernel-fit-analyst.md +0 -129
- package/template/.claude/agents/planner.md +0 -75
- package/template/.claude/agents/product-discovery.md +0 -129
- package/template/.claude/agents/product-manager.md +0 -76
- package/template/.claude/agents/researcher.md +0 -87
- package/template/.claude/agents/security-reviewer.md +0 -88
- package/template/.claude/agents/spec-author.md +0 -89
- package/template/.claude/agents/stack-architect.md +0 -108
- package/template/.claude/agents/ui-ux-briefer.md +0 -75
- package/template/.claude/agents/verifier.md +0 -81
- package/template/.claude/skills/hstack-branch/SKILL.md +0 -76
- package/template/.claude/skills/hstack-brownfield-init/SKILL.md +0 -131
- package/template/.claude/skills/hstack-change-new/SKILL.md +0 -84
- package/template/.claude/skills/hstack-change-plan/SKILL.md +0 -108
- package/template/.claude/skills/hstack-configure/SKILL.md +0 -99
- package/template/.claude/skills/hstack-coord/SKILL.md +0 -95
- package/template/.claude/skills/hstack-data-review/SKILL.md +0 -93
- package/template/.claude/skills/hstack-finalize/SKILL.md +0 -140
- package/template/.claude/skills/hstack-flag/SKILL.md +0 -99
- package/template/.claude/skills/hstack-greenfield-init/SKILL.md +0 -148
- package/template/.claude/skills/hstack-help/SKILL.md +0 -153
- package/template/.claude/skills/hstack-implement/SKILL.md +0 -155
- package/template/.claude/skills/hstack-kernel-fit-promote/SKILL.md +0 -125
- package/template/.claude/skills/hstack-kernel-fit-scan/SKILL.md +0 -142
- package/template/.claude/skills/hstack-kernel-fit-scan/references/slack-setup.md +0 -42
- package/template/.claude/skills/hstack-kernel-fit-triage/SKILL.md +0 -121
- package/template/.claude/skills/hstack-module-spec/SKILL.md +0 -78
- package/template/.claude/skills/hstack-product-discovery/SKILL.md +0 -75
- package/template/.claude/skills/hstack-research/SKILL.md +0 -115
- package/template/.claude/skills/hstack-scaffold/SKILL.md +0 -113
- package/template/.claude/skills/hstack-security-review/SKILL.md +0 -95
- package/template/.claude/skills/hstack-ship/SKILL.md +0 -119
- package/template/.claude/skills/hstack-stack-decide/SKILL.md +0 -81
- package/template/.claude/skills/hstack-story-draft/SKILL.md +0 -92
- package/template/.claude/skills/hstack-tech-debt-new/SKILL.md +0 -95
- package/template/.claude/skills/hstack-tech-debt-resolve/SKILL.md +0 -123
- package/template/.claude/skills/hstack-tech-debt-stale/SKILL.md +0 -86
- package/template/.claude/skills/hstack-tech-debt-wontfix/SKILL.md +0 -77
- package/template/.claude/skills/hstack-telemetry/SKILL.md +0 -73
- package/template/.claude/skills/hstack-test-plan/SKILL.md +0 -159
- package/template/.claude/skills/hstack-ui-brief/SKILL.md +0 -81
- package/template/.claude/skills/hstack-verify/SKILL.md +0 -128
- package/template/scripts/compute-merge-readiness.mjs +0 -780
- package/template/scripts/coord/coord_scan.py +0 -681
- package/template/scripts/run-gates.sh +0 -388
- package/template/scripts/telemetry/__init__.py +0 -6
- package/template/scripts/telemetry/insights/__init__.py +0 -0
- package/template/scripts/telemetry/insights/contract_drift.py +0 -137
- package/template/scripts/telemetry/insights/kernel_fit.py +0 -438
- package/template/scripts/telemetry/insights/overengineering.py +0 -115
- package/template/scripts/telemetry/insights/quality_outcomes.py +0 -131
- package/template/scripts/telemetry/insights/token_economics.py +0 -302
- package/template/scripts/telemetry/insights/workflow_shape.py +0 -198
- package/template/scripts/telemetry/parsers/__init__.py +0 -0
- package/template/scripts/telemetry/parsers/bodies.py +0 -87
- package/template/scripts/telemetry/parsers/commits.py +0 -219
- package/template/scripts/telemetry/parsers/frontmatter.py +0 -322
- package/template/scripts/telemetry/parsers/sidecars.py +0 -61
- package/template/scripts/telemetry/parsers/transcripts.py +0 -294
- package/template/scripts/telemetry/render.py +0 -460
- package/template/scripts/telemetry/report.py +0 -150
- package/template/scripts/telemetry/run_kernel_fit.py +0 -95
- package/template/scripts/telemetry/session_id.py +0 -139
- package/template/scripts/validate-spec.mjs +0 -3303
- package/template/templates/adversarial-review.md +0 -54
- package/template/templates/bootstrap.md +0 -105
- package/template/templates/change-spec.md +0 -82
- package/template/templates/ci-cd.md +0 -41
- package/template/templates/coord-message.md +0 -56
- package/template/templates/data-review.md +0 -54
- package/template/templates/discovery/brainstorm.md +0 -69
- package/template/templates/discovery/forcing-questions.md +0 -76
- package/template/templates/discovery/project-brief.md +0 -53
- package/template/templates/figma-handoff.md +0 -38
- package/template/templates/glossary.md +0 -20
- package/template/templates/hardening-checklist.md +0 -73
- package/template/templates/incident-runbook.md +0 -57
- package/template/templates/kernel-fit-finding.md +0 -63
- package/template/templates/kernel-fit-flag.md +0 -52
- package/template/templates/module-spec.md +0 -49
- package/template/templates/persona.md +0 -38
- package/template/templates/plan.md +0 -53
- package/template/templates/product-brief.md +0 -56
- package/template/templates/security-review.md +0 -63
- package/template/templates/telemetry-sidecar.md +0 -227
- package/template/templates/test-plan.md +0 -119
- package/template/templates/threat-model.md +0 -54
- package/template/templates/ui-brief.md +0 -49
- package/template/templates/verification.md +0 -63
- package/template/templates/vision.md +0 -34
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,59 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to hstack are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); versioning follows [SemVer](https://semver.org/).
|
|
4
4
|
|
|
5
|
+
## [0.18.0] - 2026-09-18
|
|
6
|
+
|
|
7
|
+
Code quality gets a mechanical half and a judgment half, with a hard line between them (ADR-0016). The first consumer's audit found the prose rules ignored at scale and the one lint rule at `error` respected everywhere; this release draws the conclusion.
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- **`templates/eslint-clean-code.mjs`** — a flat-config the consumer imports from `hstack/templates/`, so `hstack update` can move it. Every rule at `error`: function and file size, complexity, nesting depth, parameter count, `no-explicit-any`, `no-non-null-assertion`, `no-floating-promises`, `only-throw-error`, `no-empty` catch, console outside the named logger, `process.env` outside the named config module, `@supabase/supabase-js` outside the named client module, `import/no-cycle`. Thresholds and module paths are options. The ratchet is ESLint's own suppressions file: freeze the existing violations once with `--suppress-all`; from then on only new ones fail.
|
|
12
|
+
- **`hstack/supabase-unread-error`**, a custom rule inside that file. Supabase returns `{ data, error }` and never throws; the rule fails an awaited query whose result is discarded, destructured without `error`, or read through `.data` alone. `.throwOnError()` satisfies it. The audit counted 64 unchecked server-side writes in one repo, one of them answered with `{ ok: true }`.
|
|
13
|
+
- **`templates/code-standards.md`** — the living doc for the rules that need judgment: search before writing, one function one responsibility, a component does not talk to the network, a file's name says what it holds, names describe behaviour, a returned error is a handled error, replace rather than add beside, delete what nothing imports, constants in one place. Each rule carries a `Seen here` line the consumer fills from its own code. Installed at `hstack/context/code-standards.md`, read on the trigger *application code → code-standards*.
|
|
14
|
+
- **`/hstack-wrap` step 2** reads the diff against `code-standards.md`, rule by rule, and fixes what it finds before `/review` runs. Step 9 now says the fast lane — typecheck, lint, critical tests — runs locally and is green before the commit; CI is the paid backstop, not the first run, and a lint finding is fixed, never suppressed.
|
|
15
|
+
|
|
16
|
+
### Changed
|
|
17
|
+
|
|
18
|
+
- **The kernel** names `code-standards.md` among the living docs with its read trigger, states that lint is at `error` with a ratchet and that a `warn` is not a rule, and that the fast lane runs locally before the push. Five sentences, ~80 words.
|
|
19
|
+
- **The adversarial reviewer's code-quality lens is `code-standards.md`.** A finding names the rule it breaks. The rubric's filler clause — which until now listed *"anything a formatter or a linter would have said"* — is rewritten: what the linter already fails on is filler only when the linter is wired, and an unread error on a write path escalates to `data-integrity`.
|
|
20
|
+
|
|
21
|
+
## [0.17.0] - 2026-08-22
|
|
22
|
+
|
|
23
|
+
The pivot is subtractive (ADR-0015). Four months of hstack v1 produced a workflow whose per-change ceremony made every change roughly ten times slower, and no MVP. The diagnosis is not that the rules were wrong — it is that pre-PMF, the dominant risk is never shipping, not shipping bugs, and a rule that costs something on every single change has to earn it against that. So the question asked of every piece was the same: **does it change what an agent does on an ordinary change, without charging ceremony per change?** What survived was kept *in place*, with its v0.16 wording where the rule survived. What did not was removed, not replaced — this release designs almost nothing new.
|
|
24
|
+
|
|
25
|
+
The complete version is not deleted. The `v0.16.0` tag holds it, intact, for the day a team, a paying user or a compliance requirement asks for it. We froze a version, not the repository.
|
|
26
|
+
|
|
27
|
+
### Removed
|
|
28
|
+
|
|
29
|
+
- **Thirty Skills and twelve subagents.** The per-change phase chain (story → scaffold → spec → UI brief → plan → security review → data review → implement → verify → adversarial review → ship), the two init orchestrators and the discovery atoms around them, the tech-debt status machinery, the kernel-fit loop, research, coord, telemetry, help, flag, configure. The mechanical test for each: *what artifact or status does it write, and does that thing still exist?*
|
|
30
|
+
- **The enforcement scripts** — `validate-spec.mjs` (artifact contracts), `compute-merge-readiness.mjs` (the twelve merge gates) and `run-gates.sh` — with the artifacts and statuses they validated. Twenty-two files under `template/scripts/`, plus the coord and telemetry trees.
|
|
31
|
+
- **Twenty-six templates**, including every change-spec and module-spec type, the discovery technique scripts, and the telemetry sidecar schema.
|
|
32
|
+
- **Frontmatter machinery, everywhere it survived.** Statuses, owners, `schema-version`, reciprocal fields, `related-change-specs`, promotion links. `templates/tech-debt.md` keeps exactly four fields — `id`, `severity`, `related-modules`, `created` — and `templates/adr.md` keeps none. A tech-debt file existing means the item is open; deleting it in the PR that fixes it means resolved, and git is the audit trail.
|
|
33
|
+
- **`hstack/config.yaml`** as a concept, and the `.claude/settings.json` hook wiring that served the coord notifications. `hstack update` takes all of it back from a consumer installed on an earlier version, rather than leaving orphaned files behind.
|
|
34
|
+
- **The installer's `.gitignore` writes.** `**/.telemetry/`, `hstack/kernel-fit/flags/` and `hstack/.session-state/` all hid directories the framework no longer creates. Lines already in a consumer's `.gitignore` stay: hstack never edits an engineer's file to unsay something it once said. `USER_CONTENT_PATHS` narrows to what the boundary actually protects — `context/`, `adr/`, `tech-debt/`.
|
|
35
|
+
|
|
36
|
+
### Added
|
|
37
|
+
|
|
38
|
+
- **`/hstack-wrap`** — the end of a change, loaded fresh at the moment it runs, which is the point: end-of-change rules no longer have to survive two hundred turns of conversation. It re-checks the categories in `review-miss.md`, runs `/review` and `/security-review` on the branch diff, audits test immutability against the merge-base, updates the living docs the diff invalidated, names the conscious shortcuts as tech-debt files, and writes the PR description. It never merges.
|
|
39
|
+
- **`/hstack-promote`** — the one deploy step hstack carries. The sequence lives in the Skill; the concrete commands live in the consumer's `infrastructure.md` § Deploy Pipeline, and a missing section halts the promotion rather than guessing a production command. Two questions are asked of the human, the exposure map is checked before promotion, production is watched for five minutes after it, and rollback is re-promoting the previous deployment — safe because migrations are additive by default.
|
|
40
|
+
- **`/hstack-test-audit <module>`** — on demand, never a phase. Business rules mapped against existing tests, the gaps named, the ones the engineer picks closed, and every rule the audit surfaced recorded in `invariants.md` *including the gaps left open*.
|
|
41
|
+
- **The exposure map**, a column of the Module Map in `app-architecture.md`. Its atom is an entry point — page route, API route, server action, job, webhook — at `live`, `routable` (the URL responds, nothing links to it, it is fully exposed) or `off`. It exists because agents were repeatedly wrong about what a user can actually reach. It grades product severity, never security severity.
|
|
42
|
+
|
|
43
|
+
### Changed
|
|
44
|
+
|
|
45
|
+
- **The kernel is `template/KERNEL.md` at ~1,700 words**, down from ~9,500. Twenty-five sections became one kept, fifteen condensed, nine removed. What is verbatim from v0.16 is verbatim on purpose: test immutability and its canonical authorization phrases, where the wording *is* the mechanism.
|
|
46
|
+
- **Review runs on every PR, not on a sensitive tenth.** `/hstack-wrap` runs the built-in `/review` and `/security-review` before the push and puts the findings in the PR description; sensitive surfaces additionally get the deep pass in a fresh session. There is no senior human reviewer on this team, and that is the reason.
|
|
47
|
+
- **The PR description is the artifact.** It carries the intention, the perimeter, the decisions, the shortcuts, and what the reviews found — replacing change-specs as the record. Living docs are the coordination channel between parallel sessions, updated in the same PR that invalidates them.
|
|
48
|
+
- **`hstack-adversarial-review` posts a PR comment** instead of writing an artifact, and the author resolves the findings. `hstack-story-draft` became `hstack-story`, writes into the Notion feature via MCP, and is explicitly a product tool rather than a gate on a change.
|
|
49
|
+
- **Subagents stop repeating what the templates own.** The section lists and the drift-challenge wording live in the templates; the subagents carry the judgment. `tools:` is declared only where the restriction is the point — `adversarial-reviewer` has neither Write nor Edit.
|
|
50
|
+
- **Skills are named by their real invocation** — `/hstack-wrap`, `/hstack-promote`, `/hstack-test-audit` — in the kernel and throughout. The `/hstack:<name>` form used across v0.16 was never how a symlinked project Skill is invoked.
|
|
51
|
+
- **The repo runs its own fast lane.** A `ci` workflow runs `npm ci && npm test` — which is `tsc` plus the description-budget fixtures — on every pull request. Four PRs shipped this release with nothing but a human running the build locally.
|
|
52
|
+
|
|
53
|
+
### Known limitations
|
|
54
|
+
|
|
55
|
+
- **Retroactive traceability is permanently thinner.** A change's reasoning lives in its PR description and nowhere else; there is no queryable artifact chain behind it. That was the trade, and it is not reversible for the changes that ship under it.
|
|
56
|
+
- **Nothing here has run on a real change yet.** The upgrade of the first consumer, moso-app, from 0.7.1 to 0.17, is the test — and the first place the pieces added on evidence, the exposure map above all, either earn their keep or come out.
|
|
57
|
+
|
|
5
58
|
## [0.16.0] - 2026-08-21
|
|
6
59
|
|
|
7
60
|
The micro-prescriptions come out (ADR-0014). hstack's prose carried a layer of instruction written for a model that needed to be told how to think — a findings quota, character thresholds standing in for substance, keyword blocklists standing in for intent, and interview scripts that had to be read out even when they did not fit the product. Fifteen prescriptions across five families are each replaced by one of three things: **a stated goal**, **a rubric loaded on demand**, or **an executable rule in the validator**. The ledger records which form each took and why.
|
package/README.md
CHANGED
|
@@ -1,30 +1,27 @@
|
|
|
1
1
|
# hstack
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
> **The tag `v0.16.0` is the complete version, frozen** — the full workflow, with its phases, artifacts and gates, kept intact for the day a team, a paying user or a compliance requirement asks for it. **`main` is light (v0.17)**, the subtractive pivot recorded in [ADR-0015](./adr/ADR-0015-the-light-pivot.md). We froze a version, not the repository.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
An engineering workflow for humans and AI agents, shipping as Claude Code Skills and subagents. Rules the agent reads once, CI, an agent review on every PR, and living docs holding what it needs to remember between sessions.
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
A thin, opinionated layer on top of Claude Code that governs how engineers and AI agents collaborate on a codebase. ~34 Skills, ~16 subagents, ~32 canonical templates, and one kernel (`KERNEL.md`) that wins every conflict. AI writes; humans confirm. Artifacts on disk are the state machine — no parallel tracker, no separate dashboard.
|
|
7
|
+
hstack sits between an engineer's intent and a merged commit — without charging ceremony on every change.
|
|
10
8
|
|
|
11
|
-
|
|
9
|
+
## What hstack is
|
|
12
10
|
|
|
13
|
-
|
|
14
|
-
- **`/hstack:brownfield-init`** — for existing repositories. The same discovery atoms run in extract+confirm mode against existing source, populating the context layer without rewriting it.
|
|
11
|
+
A thin, opinionated layer on top of Claude Code that governs how engineers and AI agents collaborate on a codebase. One kernel (`KERNEL.md`, ~1,700 words) that wins every conflict, nine Skills, four subagents, and the templates behind them. Two written artifacts remain: a PR description on every change, and a rare ADR for a one-way door.
|
|
15
12
|
|
|
16
13
|
## What hstack is not
|
|
17
14
|
|
|
18
15
|
- Not a methodology framework like BMAD or Spec Kit. Patterns were borrowed; the framework was not adopted.
|
|
19
|
-
- Not a project tracker.
|
|
20
|
-
- Not a deployment system
|
|
21
|
-
- Not a SOC 2 / GDPR compliance substrate by itself.
|
|
16
|
+
- Not a project tracker. Notion holds product work, the repo holds engineering memory, GitHub holds PRs and CI.
|
|
17
|
+
- Not a deployment system, beyond the one step it does carry: `/hstack-promote`.
|
|
18
|
+
- Not a SOC 2 / GDPR compliance substrate by itself. v0.16.0 was good engineering hygiene; the light version keeps the hygiene that costs nothing per change, and ADR-0015 names what it gave up.
|
|
22
19
|
|
|
23
20
|
## Prerequisites
|
|
24
21
|
|
|
25
|
-
- **Claude Code** installed and authenticated.
|
|
26
|
-
- **Optional MCPs
|
|
27
|
-
- Nothing else is strictly required. hstack runs against any codebase; the consuming repo's stack details land in `hstack/context/tech-stack.md
|
|
22
|
+
- **Claude Code** installed and authenticated.
|
|
23
|
+
- **Optional MCPs**, recognized when present and degraded cleanly when absent: Notion (features and stories), Supabase (live schema introspection when the data layer is being written down).
|
|
24
|
+
- Nothing else is strictly required. hstack runs against any codebase; the consuming repo's stack details land in `hstack/context/tech-stack.md`.
|
|
28
25
|
|
|
29
26
|
## Installation
|
|
30
27
|
|
|
@@ -35,19 +32,19 @@ hstack installs into the consuming repo at the path `hstack/` relative to the re
|
|
|
35
32
|
npx hstack@latest init
|
|
36
33
|
```
|
|
37
34
|
|
|
38
|
-
`hstack init` copies the framework files under `template/` into `<consumer>/hstack/`, wires `.claude/agents` (dir-level symlink) and `.claude/skills/hstack-*` (per-skill symlinks), appends the kernel-import line to `<consumer>/CLAUDE.md`,
|
|
35
|
+
`hstack init` copies the framework files under `template/` into `<consumer>/hstack/`, wires `.claude/agents` (dir-level symlink) and `.claude/skills/hstack-*` (per-skill symlinks), appends the kernel-import line to `<consumer>/CLAUDE.md`, and stamps `hstack/VERSION`. Nothing else in the consumer is touched — v0.17 removed the `.claude/settings.json` hook wiring and the `.gitignore` lines along with the machinery that produced the directories they hid. Use `--dry-run` to preview the plan, `--yes` to skip the confirmation prompt, `--force` to override the dirty-working-tree check.
|
|
39
36
|
|
|
40
37
|
The CLI ships three commands:
|
|
41
38
|
|
|
42
39
|
| Command | What it does |
|
|
43
40
|
| --- | --- |
|
|
44
41
|
| `npx hstack init` | First-time install. Halts if `<consumer>/hstack/` already exists. |
|
|
45
|
-
| `npx hstack update` | Sync framework files to the package version. Preserves user content (`context/`, `
|
|
46
|
-
| `npx hstack doctor` | Read-only health check. Reports version drift, framework file drift, missing or orphan symlinks, missing wiring lines,
|
|
42
|
+
| `npx hstack update` | Sync framework files to the package version. Preserves user content (`context/`, `adr/`, `tech-debt/`). Surfaces a diff plan before writing. Migrates a pre-ADR-0010 install (`hstack/CLAUDE.md` → `hstack/KERNEL.md` plus the import line), and takes back what v0.17 removed: the enforcement scripts, the coord and telemetry trees, and the coord hooks in `.claude/settings.json`. |
|
|
43
|
+
| `npx hstack doctor` | Read-only health check. Reports version drift, framework file drift, missing or orphan symlinks, missing wiring lines, a stale pre-ADR-0010 kernel filename, and any Skill / subagent description over the ADR-0011 routing-trigger budget. Exits 1 on any finding. |
|
|
47
44
|
|
|
48
45
|
The kernel is installed at `hstack/KERNEL.md`, not `hstack/CLAUDE.md` (ADR-0010): Claude Code discovers *any* nested file named `CLAUDE.md` and injects it on the first read of a file in its directory, which loaded the whole kernel a second time on top of the `@`-import. The import in the consumer's root `CLAUDE.md` is the single load path — it fires at launch, survives compaction, and is inherited by subagents.
|
|
49
46
|
|
|
50
|
-
The framework-vs-user-content boundary is canonical in `src/manifest.ts`. **What `init` and `update` write**: `hstack/KERNEL.md`, `hstack/templates/`, `hstack/.claude/agents/`, `hstack/.claude/skills/`, `hstack/
|
|
47
|
+
The framework-vs-user-content boundary is canonical in `src/manifest.ts`. **What `init` and `update` write**: `hstack/KERNEL.md`, `hstack/templates/`, `hstack/.claude/agents/`, `hstack/.claude/skills/`, `hstack/VERSION`. **What they never touch**: `hstack/context/`, `hstack/adr/`, `hstack/tech-debt/` — the engineering memory belongs to the repo that wrote it.
|
|
51
48
|
|
|
52
49
|
### Manual install (legacy)
|
|
53
50
|
|
|
@@ -63,39 +60,7 @@ for d in hstack/.claude/skills/hstack-*/; do
|
|
|
63
60
|
ln -s "../../hstack/.claude/skills/$name" ".claude/skills/$name"
|
|
64
61
|
done
|
|
65
62
|
echo '> **Engineering workflow:** all changes in this repo are governed by hstack. See @hstack/KERNEL.md.' >> CLAUDE.md
|
|
66
|
-
|
|
67
|
-
git add hstack .claude CLAUDE.md .gitignore && git commit -m "vendor hstack"
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
Then wire the coord-notification hooks (ADR-0007) by merging this into `.claude/settings.json` (create the file if absent; keep any existing keys):
|
|
71
|
-
|
|
72
|
-
```json
|
|
73
|
-
{
|
|
74
|
-
"hooks": {
|
|
75
|
-
"SessionStart": [
|
|
76
|
-
{
|
|
77
|
-
"hooks": [
|
|
78
|
-
{
|
|
79
|
-
"type": "command",
|
|
80
|
-
"command": "python3 \"$CLAUDE_PROJECT_DIR\"/hstack/scripts/coord/coord_scan.py hook",
|
|
81
|
-
"timeout": 15
|
|
82
|
-
}
|
|
83
|
-
]
|
|
84
|
-
}
|
|
85
|
-
],
|
|
86
|
-
"UserPromptSubmit": [
|
|
87
|
-
{
|
|
88
|
-
"hooks": [
|
|
89
|
-
{
|
|
90
|
-
"type": "command",
|
|
91
|
-
"command": "python3 \"$CLAUDE_PROJECT_DIR\"/hstack/scripts/coord/coord_scan.py hook",
|
|
92
|
-
"timeout": 15
|
|
93
|
-
}
|
|
94
|
-
]
|
|
95
|
-
}
|
|
96
|
-
]
|
|
97
|
-
}
|
|
98
|
-
}
|
|
63
|
+
git add hstack .claude CLAUDE.md && git commit -m "vendor hstack"
|
|
99
64
|
```
|
|
100
65
|
|
|
101
66
|
`hstack doctor` works against manually-vendored installs too. It will flag the missing `hstack/VERSION` marker as a warning until you run `hstack update --force` to stamp it.
|
|
@@ -110,7 +75,7 @@ Run `npx hstack doctor` to audit health without making changes — useful for CI
|
|
|
110
75
|
|
|
111
76
|
#### Adding or removing a Skill or subagent
|
|
112
77
|
|
|
113
|
-
`hstack update` handles this for a consumer pulling a release. A session working *in the framework source* carries the obligation manually, and lands the wiring change in the same PR as the Skill or subagent change
|
|
78
|
+
`hstack update` handles this for a consumer pulling a release. A session working *in the framework source* carries the obligation manually, and lands the wiring change in the same PR as the Skill or subagent change:
|
|
114
79
|
|
|
115
80
|
| Change | Consumer-side action |
|
|
116
81
|
|---|---|
|
|
@@ -121,84 +86,47 @@ Run `npx hstack doctor` to audit health without making changes — useful for CI
|
|
|
121
86
|
| Subagent removed | None, same reason. |
|
|
122
87
|
| Copy-based consumer (copied `.claude/` instead of symlinking) | Mirror every add / remove / rename by hand. The drift cost is why symlinks are recommended. |
|
|
123
88
|
|
|
124
|
-
#### Telemetry
|
|
125
|
-
|
|
126
|
-
`hstack/scripts/telemetry/` ships with the framework and is installed by `hstack init` automatically. The `/hstack:telemetry` Skill shells out to `python3 hstack/scripts/telemetry/report.py --window 30`, generating a markdown report at `hstack/telemetry/reports/<YYYY-MM-DD>.md`. The reports directory is git-tracked; per-change `.telemetry/` sidecar dirs are git-ignored (`hstack init` adds the `**/.telemetry/` line for you).
|
|
127
|
-
|
|
128
|
-
Five Skills (`hstack-test-plan`, `hstack-implement`, `hstack-verify`, `hstack-adversarial-review`, `hstack-finalize`) emit small JSON sidecars at their existing terminal commits — schema in `hstack/templates/telemetry-sidecar.md`. The sidecars are derivative — re-runnable from git + frontmatter + transcripts — and exist only to make per-change attribution cheap. Deleting them is harmless.
|
|
129
|
-
|
|
130
|
-
Coord usage rides the same discipline: `coord_scan.py` appends one JSON line per `scan` / `hook` / `ack` invocation to `hstack/.telemetry/coord/events.jsonl` (covered by the same `**/.telemetry/` gitignore line) — per-worktree measurement of hit-rate and hook latency, never authoritative, safe to delete. `send` usage needs no log: every send is a `chore(coord): message <id>` commit already visible in git history.
|
|
131
|
-
|
|
132
89
|
#### Platform support
|
|
133
90
|
|
|
134
|
-
macOS and Linux only
|
|
91
|
+
macOS and Linux only. Windows is hard-failed at `hstack init` — the dir-level + per-skill symlink wiring needs admin or developer-mode on Windows, and copy-mode fallback is a v2 consideration.
|
|
135
92
|
|
|
136
93
|
## First run
|
|
137
94
|
|
|
138
|
-
Open a fresh Claude Code session in the consuming repo.
|
|
139
|
-
|
|
140
|
-
### Empty repo — greenfield
|
|
141
|
-
|
|
142
|
-
```
|
|
143
|
-
/hstack:greenfield-init
|
|
144
|
-
```
|
|
145
|
-
|
|
146
|
-
Six phases of conversational design, each ending at a commit point. Total elapsed time is founder-paced — typically 4–8 hours of conversation across multiple sessions. Phases:
|
|
147
|
-
|
|
148
|
-
1. **Product discovery** — `product-discovery` agent runs one of three techniques (Brainstorm, Forcing-Questions, Project-Brief) and produces `hstack/context/product/product-brief.md`, then auto-routes to `product-manager` to refresh vision, roadmap, personas, glossary.
|
|
149
|
-
2. **Data architecture** — `data-architect` agent walks five sections (Tenancy, Entities, RLS, RAG, Migration Sketches) and produces a deeper `hstack/context/data-architecture.md`.
|
|
150
|
-
3. **App architecture** — `app-architect` agent walks five sections (Module Map, Agent Orchestration, Deterministic-vs-LLM Split, State-Ownership, Surface Boundaries) and produces `hstack/context/app-architecture.md`. Scaffolds module-spec stubs.
|
|
151
|
-
4. **Stack decisions** — `stack-architect` agent runs the constraint interview, routes ADRs through `spec-author` with pre-populated Context / Decision / Alternatives. Default-stack fast-path collapses confirmed defaults into one rollup ADR.
|
|
152
|
-
5. **Threat-model + hardening** — `security-reviewer` in `--mode foundational` scores against proposed posture.
|
|
153
|
-
6. **Scaffold** — `/hstack:scaffold` generates a bootstrap change-spec, runs foundational-mode security/data review, then planner → implementer phase-by-phase → verifier. At the end, the repo is bootable.
|
|
154
|
-
|
|
155
|
-
### Existing repo — brownfield
|
|
156
|
-
|
|
157
|
-
```
|
|
158
|
-
/hstack:brownfield-init
|
|
159
|
-
```
|
|
160
|
-
|
|
161
|
-
Conversational, split into mini-sessions of ten-to-fifteen minutes each — one per product-context document. Each mini-session ends at a commit point. Total elapsed time is 60–90 minutes for a fresh adoption. No other per-change Skill runs until init completes.
|
|
162
|
-
|
|
163
|
-
Brownfield-init produces `hstack/config.yaml` and every required document under `hstack/context/`: vision, glossary, roadmap, personas (via `product-manager` reading existing docs in extract+confirm mode), data-architecture and app-architecture (delegated to the standalone atoms running in extract mode against the live schema and source tree), tech-stack, ci-cd, threat-model, hardening-checklist, infrastructure, incident-runbook. If the consuming repo has existing source documents (Notion pages, repo markdown, Google Docs), point the agents at them and they will map content into the canonical templates before walking field-by-field confirmation.
|
|
164
|
-
|
|
165
|
-
After brownfield-init, run `/hstack:module-spec <area>` once per critical module to reverse-engineer baseline module-specs from the stubs scaffolded by `/hstack:app-architecture`.
|
|
95
|
+
Open a fresh Claude Code session in the consuming repo. There is no init interview in the light version: the kernel is loaded by the import line, and the living docs get written when there is something true to write in them.
|
|
166
96
|
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
```
|
|
172
|
-
/hstack:product-discovery [--mode extract|elicit] [--section <name>]
|
|
173
|
-
/hstack:data-architecture [--mode extract|elicit] [--section <name>]
|
|
174
|
-
/hstack:app-architecture [--mode extract|elicit] [--section <name>]
|
|
175
|
-
/hstack:stack-decide [--layer <name>]
|
|
176
|
-
```
|
|
97
|
+
1. **Write the two architecture docs** when the shape of the product is settled enough to be worth recording — `/hstack-data-architecture` (tenancy, entities, RLS posture, RAG layout) and `/hstack-app-architecture` (module map with its exposure column, LLM call sites, deterministic-vs-LLM split, state ownership, surfaces). Both run in extract mode against a live schema or the source tree, and ask when extraction is not enough.
|
|
98
|
+
2. **Fill the rest by hand or in the PR that needs them**, from `hstack/templates/`: `tech-stack.md`, `infrastructure.md` — whose § Deploy Pipeline is what `/hstack-promote` reads — `roadmap.md`, `invariants.md`, `review-miss.md`, and `code-standards.md` with its `Seen here` lines.
|
|
99
|
+
3. **Wire the linter.** Import `hstack/templates/eslint-clean-code.mjs` from the repo's `eslint.config.mjs` (the file's header shows the call), run `npx eslint --suppress-all` once to freeze the existing violations, and commit `eslint-suppressions.json`. From then on only new violations fail `lint`, and the frozen count only goes down.
|
|
100
|
+
4. **Then just work.** The per-change loop below is the whole of it.
|
|
177
101
|
|
|
178
|
-
|
|
102
|
+
## The change loop
|
|
179
103
|
|
|
180
|
-
|
|
104
|
+
The kernel states it in one line: branch → announce the perimeter → a five-bullet plan when the change holds more than three files → code and tests → `/hstack-wrap` → PR → fast CI green → a human other than the author reads → merge → `/hstack-promote`.
|
|
181
105
|
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
|
185
|
-
|
|
|
186
|
-
|
|
|
187
|
-
|
|
|
188
|
-
|
|
|
189
|
-
|
|
|
190
|
-
| Figma handoff | cofounder produces, commits `figma-handoff.md` | `surfaces` includes `ui` |
|
|
191
|
-
| Plan | `/hstack:change-plan` | always |
|
|
192
|
-
| Security review | `/hstack:security-review` | always |
|
|
193
|
-
| Data review | `/hstack:data-review` | `surfaces` includes `db` |
|
|
194
|
-
| Implement | `/hstack:implement <change-id> <task-id>` | once per phase |
|
|
195
|
-
| Verify | `/hstack:verify` | always |
|
|
196
|
-
| Adversarial review | `/hstack:adversarial-review` | always — **fresh Claude Code session required** |
|
|
197
|
-
| Ship | `/hstack:ship` | always — read-only scorecard + PR description |
|
|
106
|
+
| When | Then |
|
|
107
|
+
| --- | --- |
|
|
108
|
+
| db, schema or RLS work | the Supabase skills, and `data-architecture.md` |
|
|
109
|
+
| the change is done | `/hstack-wrap` |
|
|
110
|
+
| the PR is merged | `/hstack-promote` |
|
|
111
|
+
| a sensitive surface is touched | `/hstack-adversarial-review`, in a fresh session |
|
|
112
|
+
| a bug a review missed | an entry in `review-miss.md` |
|
|
113
|
+
| a module's tests look thin | `/hstack-test-audit <module>` |
|
|
198
114
|
|
|
199
|
-
|
|
115
|
+
The nine Skills:
|
|
200
116
|
|
|
201
|
-
|
|
117
|
+
| Skill | What it is for |
|
|
118
|
+
| --- | --- |
|
|
119
|
+
| `/hstack-wrap` | The end of a change: runs `/review` and `/security-review`, audits test immutability, updates the living docs the diff invalidated, writes the PR description. |
|
|
120
|
+
| `/hstack-promote` | The release: pending production migrations, a smoke test on the unpromoted build, then promotion. Commands live in `infrastructure.md` § Deploy Pipeline. |
|
|
121
|
+
| `/hstack-commit` | The one Commitizen format humans and agents both write. |
|
|
122
|
+
| `/hstack-adversarial-review` | The deep pass on a sensitive surface, from a session that never saw the change being written. Findings land as a PR comment. |
|
|
123
|
+
| `/hstack-test-audit` | On demand, for one module: business rules against existing tests, the gaps named, the missing tests written. |
|
|
124
|
+
| `/hstack-data-architecture` | When the data layer really moves. |
|
|
125
|
+
| `/hstack-app-architecture` | When the application architecture really moves — the exposure map lives here. |
|
|
126
|
+
| `/hstack-adr-new` | A one-way door, drafted in the PR that implements it. |
|
|
127
|
+
| `/hstack-story` | The user story of a Notion feature. A product tool, never a gate on a change. |
|
|
128
|
+
|
|
129
|
+
Four subagents do the heavy reading behind them: `adversarial-reviewer`, `test-strategist`, `data-architect`, `app-architect`.
|
|
202
130
|
|
|
203
131
|
## Repository layout
|
|
204
132
|
|
|
@@ -206,65 +134,50 @@ After init the consuming repo has:
|
|
|
206
134
|
|
|
207
135
|
```
|
|
208
136
|
hstack/
|
|
209
|
-
config.yaml # repo-level configuration
|
|
210
137
|
KERNEL.md # the kernel (authority)
|
|
211
|
-
|
|
212
|
-
context/ #
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
promoted/ # durable
|
|
226
|
-
templates/ # canonical templates
|
|
227
|
-
discovery/ # three technique scripts (brainstorm, forcing-questions, project-brief)
|
|
228
|
-
kernel-fit/ # closed-loop drift detection findings
|
|
229
|
-
lints/ # pattern-based lint rules
|
|
230
|
-
scripts/ # validators, gate runners, telemetry
|
|
138
|
+
VERSION # installed framework version
|
|
139
|
+
context/ # the agent's memory between sessions
|
|
140
|
+
data-architecture.md # tenancy, entities, RLS, RAG
|
|
141
|
+
app-architecture.md # module map + exposure map, LLM call sites, surfaces
|
|
142
|
+
tech-stack.md # pinned versions, pinned on purpose
|
|
143
|
+
infrastructure.md # where things run, why the couplings, the gotchas
|
|
144
|
+
roadmap.md # Now / Next / Later — advisory, never a gate
|
|
145
|
+
invariants.md # the business rules a test names
|
|
146
|
+
review-miss.md # what a review missed, so the next one re-checks it
|
|
147
|
+
code-standards.md # the rules that need judgment; the linter owns the rest
|
|
148
|
+
... # frozen and dated: threat-model, product-brief, vision, personas, incident-runbook
|
|
149
|
+
adr/ # one-way doors only
|
|
150
|
+
tech-debt/ # one file per item; deleted in the PR that fixes it
|
|
151
|
+
templates/ # the nine canonical templates + eslint-clean-code.mjs
|
|
231
152
|
.claude/
|
|
232
|
-
skills/hstack-*/SKILL.md #
|
|
233
|
-
agents/ #
|
|
153
|
+
skills/hstack-*/SKILL.md # nine Skills
|
|
154
|
+
agents/ # four subagents
|
|
234
155
|
```
|
|
235
156
|
|
|
236
|
-
## Honesty clause
|
|
237
|
-
|
|
238
|
-
hstack v1 ships good engineering hygiene: spec discipline, scope-locked implementation, conversational interviews with confirmation gates, append-only ADRs and tech-debt, frontmatter-driven status. It does not by itself deliver SOC 2 / GDPR posture.
|
|
157
|
+
## Honesty clause
|
|
239
158
|
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
- **
|
|
243
|
-
- **
|
|
244
|
-
- **adversarial-review.md** — v1 fresh-session separation is honor-system, attested in frontmatter; v2 verifies via Claude Code session-id comparison at the CI gate.
|
|
245
|
-
|
|
246
|
-
The Skills frame their output to reflect this. v1 rationales never claim "verified by test." When the honest answer is "structured judgment based on the diff," the artifact says so.
|
|
247
|
-
|
|
248
|
-
The full v2 roadmap lives in the architecture document.
|
|
159
|
+
- **Reviews are LLM judgments, not evidence.** An empty findings list means the reviewer found nothing, not that nothing is there. CI is the only mechanical check in the loop.
|
|
160
|
+
- **Fresh-session separation is honor-system.** `/hstack-adversarial-review` states that the session never saw the implementation conversation; nothing verifies it.
|
|
161
|
+
- **The exposure map grades product severity, never security severity.** Every routable entry point is covered by the kernel's security checklist whatever the map says.
|
|
162
|
+
- **The light version gave things up on purpose**, and ADR-0015 names them: retroactive traceability of a change's reasoning beyond its PR, the status machinery that made artifacts queryable, and the per-change gates. The trade was made pre-PMF, where the dominant risk is never shipping.
|
|
249
163
|
|
|
250
164
|
## Reference
|
|
251
165
|
|
|
252
166
|
Authoritative, in the repo:
|
|
253
167
|
|
|
254
168
|
- [`template/KERNEL.md`](./template/KERNEL.md) — the kernel. Authority over every Skill, subagent, and template.
|
|
255
|
-
- [`template/templates/`](./template/templates/) — the canonical structure of every artifact type
|
|
256
|
-
- `
|
|
257
|
-
- `
|
|
169
|
+
- [`template/templates/`](./template/templates/) — the canonical structure of every artifact type.
|
|
170
|
+
- [`adr/ADR-0015-the-light-pivot.md`](./adr/ADR-0015-the-light-pivot.md) — why the pivot is subtractive, and what it costs.
|
|
171
|
+
- [`adr/ADR-0016-the-linter-enforces-the-doc-judges.md`](./adr/ADR-0016-the-linter-enforces-the-doc-judges.md) — code quality split into a lint config at `error` and a judgment doc, and why prose alone did not hold.
|
|
172
|
+
- [`CHANGELOG.md`](./CHANGELOG.md) — the release history, including the full v0.16.0 lineage.
|
|
258
173
|
|
|
259
|
-
|
|
174
|
+
Historical companions, describing the frozen full version rather than `main`:
|
|
260
175
|
|
|
261
|
-
- [Architecture document](https://www.notion.so/360d6791656c813d955af822cb8814d1) — long-form companion to the
|
|
176
|
+
- [Architecture document](https://www.notion.so/360d6791656c813d955af822cb8814d1) — long-form companion to the pre-v1 kernel.
|
|
262
177
|
- [Adversarial review of the architecture](https://www.notion.so/361d6791656c81f78eb3c97ba4aecbb4) — the 21-finding pressure test that shaped the v1 / v2 split.
|
|
263
178
|
|
|
264
|
-
The former "template schemas and frontmatter contracts" page is no longer listed: it has diverged from the repo and is superseded by the templates directory and the validator registry (ADR-0013).
|
|
265
|
-
|
|
266
179
|
## Status
|
|
267
180
|
|
|
268
|
-
hstack v0.
|
|
181
|
+
hstack v0.18.0 — the kernel at ~1,800 words, nine Skills, four subagents, nine templates and a lint config. The `v0.16.0` tag holds the complete version: ~34 Skills, ~16 subagents, the validator, the merge gates, the coord and telemetry trees.
|
|
269
182
|
|
|
270
|
-
|
|
183
|
+
Next milestone: wiring the linter and `code-standards.md` into moso-app after its dead-code cleanup, and watching whether the ratchet count goes down.
|
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.
|
|
1
|
+
0.18.0
|
package/dist/commands/doctor.js
CHANGED
|
@@ -169,19 +169,29 @@ export async function runDoctor(opts) {
|
|
|
169
169
|
.join("\n"),
|
|
170
170
|
});
|
|
171
171
|
}
|
|
172
|
-
//
|
|
173
|
-
//
|
|
174
|
-
//
|
|
175
|
-
const hookActions = actions.filter((a) => a.kind === "
|
|
172
|
+
// Leftovers from before v0.17: the coord hooks in .claude/settings.json and
|
|
173
|
+
// the framework paths that left FRAMEWORK_PATHS with their machinery. Both
|
|
174
|
+
// survive pruneNoopActions only while they are still on disk.
|
|
175
|
+
const hookActions = actions.filter((a) => a.kind === "remove-coord-hooks");
|
|
176
176
|
for (const a of hookActions) {
|
|
177
177
|
const m = a;
|
|
178
178
|
const state = await coordHooksState(m.file);
|
|
179
179
|
findings.push({
|
|
180
|
-
level: "error",
|
|
181
|
-
category: "hooks",
|
|
180
|
+
level: state === "invalid" ? "error" : "warn",
|
|
181
|
+
category: "coord-hooks",
|
|
182
182
|
message: state === "invalid"
|
|
183
|
-
? `.claude/settings.json is not a parseable JSON settings object — coord notification
|
|
184
|
-
: `.claude/settings.json
|
|
183
|
+
? `.claude/settings.json is not a parseable JSON settings object — hstack will not touch it; remove the coord notification hook entries by hand (ADR-0007, removed in v0.17)`
|
|
184
|
+
: `.claude/settings.json still carries the coord notification hooks (ADR-0007, removed in v0.17) — fix: \`npx hstack update\``,
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
const legacyActions = actions.filter((a) => a.kind === "remove-legacy-paths");
|
|
188
|
+
for (const a of legacyActions) {
|
|
189
|
+
const m = a;
|
|
190
|
+
findings.push({
|
|
191
|
+
level: "warn",
|
|
192
|
+
category: "legacy-paths",
|
|
193
|
+
message: `${m.relpaths.length} pre-v0.17 framework path(s) still under hstack/ — fix: \`npx hstack update\``,
|
|
194
|
+
detail: opts.verbose ? m.relpaths.map((r) => ` hstack/${r}`).join("\n") : undefined,
|
|
185
195
|
});
|
|
186
196
|
}
|
|
187
197
|
// Render
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/init.js
CHANGED
|
@@ -79,9 +79,13 @@ export async function runInit(opts) {
|
|
|
79
79
|
console.log("Next steps:");
|
|
80
80
|
console.log(" 1. Review the changes: " + pc.cyan("git status"));
|
|
81
81
|
console.log(" 2. Commit: " + pc.cyan("git add . && git commit -m 'chore: install hstack'"));
|
|
82
|
-
console.log(" 3. Open Claude Code in this repo
|
|
83
|
-
|
|
84
|
-
"
|
|
82
|
+
console.log(" 3. Open Claude Code in this repo. The kernel loads itself; write the living docs\n" +
|
|
83
|
+
" under hstack/context/ when there is something true to write in them —\n" +
|
|
84
|
+
" " +
|
|
85
|
+
pc.cyan("/hstack-data-architecture") +
|
|
86
|
+
" and " +
|
|
87
|
+
pc.cyan("/hstack-app-architecture") +
|
|
88
|
+
" do the two big ones.");
|
|
85
89
|
return 0;
|
|
86
90
|
}
|
|
87
91
|
//# sourceMappingURL=init.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/update.js
CHANGED
|
@@ -52,13 +52,16 @@ export async function runUpdate(opts) {
|
|
|
52
52
|
}
|
|
53
53
|
// 7. Render plan
|
|
54
54
|
const summary = planSummary(actions);
|
|
55
|
+
const legacy = actions.find((a) => a.kind === "remove-legacy-paths");
|
|
55
56
|
console.log(pc.bold(`hstack update: v${installedVersion} -> v${newVersion}`));
|
|
56
57
|
console.log("");
|
|
57
|
-
renderSummary(summary);
|
|
58
|
+
renderSummary(summary, legacy?.relpaths.length ?? 0);
|
|
58
59
|
console.log("");
|
|
59
60
|
if (opts.verbose ||
|
|
60
61
|
summary["remove-file"] ||
|
|
61
62
|
summary["remove-symlink"] ||
|
|
63
|
+
summary["remove-legacy-paths"] ||
|
|
64
|
+
summary["remove-coord-hooks"] ||
|
|
62
65
|
summary["migrate-kernel-filename"]) {
|
|
63
66
|
console.log(pc.dim("Detail:"));
|
|
64
67
|
console.log(filterDetailedActions(actions, opts.verbose ?? false, gitRoot));
|
|
@@ -95,7 +98,7 @@ export async function runUpdate(opts) {
|
|
|
95
98
|
console.log("Review with " + pc.cyan("git diff") + " and commit when satisfied.");
|
|
96
99
|
return 0;
|
|
97
100
|
}
|
|
98
|
-
function renderSummary(summary) {
|
|
101
|
+
function renderSummary(summary, legacyPathCount) {
|
|
99
102
|
const fmt = (label, n, color) => n > 0 ? ` ${color(`${n} ${label}`)}` : null;
|
|
100
103
|
const lines = [
|
|
101
104
|
fmt("kernel rename migration, CLAUDE.md -> KERNEL.md (ADR-0010)", summary["migrate-kernel-filename"] ?? 0, pc.cyan),
|
|
@@ -104,6 +107,8 @@ function renderSummary(summary) {
|
|
|
104
107
|
fmt("framework file(s) removed", summary["remove-file"] ?? 0, pc.red),
|
|
105
108
|
fmt("symlink(s) added", summary["symlink"] ?? 0, pc.green),
|
|
106
109
|
fmt("symlink(s) removed", summary["remove-symlink"] ?? 0, pc.red),
|
|
110
|
+
fmt("pre-v0.17 path(s) removed", legacyPathCount, pc.red),
|
|
111
|
+
fmt("settings.json cleanup, coord notification hooks removed (ADR-0007)", summary["remove-coord-hooks"] ?? 0, pc.cyan),
|
|
107
112
|
].filter(Boolean);
|
|
108
113
|
if (lines.length === 0) {
|
|
109
114
|
console.log(pc.dim(" (no file-level changes; idempotent checks only)"));
|
|
@@ -118,6 +123,8 @@ function filterDetailedActions(actions, verbose, consumerRoot) {
|
|
|
118
123
|
? true
|
|
119
124
|
: a.kind === "remove-file" ||
|
|
120
125
|
a.kind === "remove-symlink" ||
|
|
126
|
+
a.kind === "remove-legacy-paths" ||
|
|
127
|
+
a.kind === "remove-coord-hooks" ||
|
|
121
128
|
a.kind === "migrate-kernel-filename");
|
|
122
129
|
return renderPlan(interesting, consumerRoot);
|
|
123
130
|
}
|