hstack 0.7.1 → 0.17.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 +308 -0
- package/README.md +90 -154
- package/VERSION +1 -1
- package/dist/commands/doctor.js +69 -9
- 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 +17 -4
- package/dist/commands/update.js.map +1 -1
- package/dist/lib/descriptions.js +160 -0
- package/dist/lib/descriptions.js.map +1 -0
- package/dist/lib/diff.js +1 -1
- package/dist/lib/git.js +16 -0
- package/dist/lib/git.js.map +1 -1
- package/dist/lib/wire.js +274 -142
- package/dist/lib/wire.js.map +1 -1
- package/dist/manifest.js +49 -22
- package/dist/manifest.js.map +1 -1
- package/package.json +4 -3
- package/template/.claude/agents/adversarial-reviewer.md +42 -98
- package/template/.claude/agents/app-architect.md +44 -133
- package/template/.claude/agents/data-architect.md +46 -127
- package/template/.claude/agents/test-strategist.md +39 -109
- package/template/.claude/skills/hstack-adr-new/SKILL.md +23 -100
- package/template/.claude/skills/hstack-adversarial-review/SKILL.md +47 -174
- package/template/.claude/skills/hstack-adversarial-review/references/finding-categories.md +134 -0
- package/template/.claude/skills/hstack-app-architecture/SKILL.md +43 -95
- package/template/.claude/skills/hstack-commit/SKILL.md +28 -97
- package/template/.claude/skills/hstack-data-architecture/SKILL.md +34 -82
- 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 +48 -0
- package/template/.claude/skills/hstack-wrap/references/pr-description.md +45 -0
- package/template/KERNEL.md +167 -0
- package/template/templates/adr.md +9 -18
- package/template/templates/app-architecture.md +38 -50
- package/template/templates/data-architecture.md +39 -93
- package/template/templates/infrastructure.md +54 -148
- package/template/templates/roadmap.md +35 -0
- 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 -126
- package/template/.claude/agents/implementer.md +0 -154
- package/template/.claude/agents/kernel-fit-analyst.md +0 -190
- package/template/.claude/agents/planner.md +0 -110
- package/template/.claude/agents/product-discovery.md +0 -165
- package/template/.claude/agents/product-manager.md +0 -111
- package/template/.claude/agents/researcher.md +0 -123
- package/template/.claude/agents/security-reviewer.md +0 -123
- package/template/.claude/agents/spec-author.md +0 -123
- package/template/.claude/agents/stack-architect.md +0 -137
- package/template/.claude/agents/ui-ux-briefer.md +0 -105
- package/template/.claude/agents/verifier.md +0 -113
- package/template/.claude/skills/hstack-branch/SKILL.md +0 -103
- package/template/.claude/skills/hstack-brownfield-init/SKILL.md +0 -158
- package/template/.claude/skills/hstack-change-new/SKILL.md +0 -111
- package/template/.claude/skills/hstack-change-plan/SKILL.md +0 -119
- package/template/.claude/skills/hstack-configure/SKILL.md +0 -126
- package/template/.claude/skills/hstack-coord/SKILL.md +0 -131
- package/template/.claude/skills/hstack-data-review/SKILL.md +0 -132
- package/template/.claude/skills/hstack-finalize/SKILL.md +0 -159
- package/template/.claude/skills/hstack-flag/SKILL.md +0 -138
- package/template/.claude/skills/hstack-greenfield-init/SKILL.md +0 -175
- package/template/.claude/skills/hstack-help/SKILL.md +0 -179
- package/template/.claude/skills/hstack-implement/SKILL.md +0 -185
- package/template/.claude/skills/hstack-kernel-fit-promote/SKILL.md +0 -164
- package/template/.claude/skills/hstack-kernel-fit-scan/SKILL.md +0 -197
- package/template/.claude/skills/hstack-kernel-fit-triage/SKILL.md +0 -159
- package/template/.claude/skills/hstack-module-spec/SKILL.md +0 -105
- package/template/.claude/skills/hstack-product-discovery/SKILL.md +0 -101
- package/template/.claude/skills/hstack-research/SKILL.md +0 -145
- package/template/.claude/skills/hstack-scaffold/SKILL.md +0 -140
- package/template/.claude/skills/hstack-security-review/SKILL.md +0 -133
- package/template/.claude/skills/hstack-ship/SKILL.md +0 -129
- package/template/.claude/skills/hstack-stack-decide/SKILL.md +0 -108
- package/template/.claude/skills/hstack-story-draft/SKILL.md +0 -119
- package/template/.claude/skills/hstack-tech-debt-new/SKILL.md +0 -122
- package/template/.claude/skills/hstack-tech-debt-resolve/SKILL.md +0 -158
- package/template/.claude/skills/hstack-tech-debt-stale/SKILL.md +0 -113
- package/template/.claude/skills/hstack-tech-debt-wontfix/SKILL.md +0 -104
- package/template/.claude/skills/hstack-telemetry/SKILL.md +0 -98
- package/template/.claude/skills/hstack-test-plan/SKILL.md +0 -182
- package/template/.claude/skills/hstack-ui-brief/SKILL.md +0 -108
- package/template/.claude/skills/hstack-verify/SKILL.md +0 -150
- package/template/CLAUDE.md +0 -443
- package/template/scripts/coord/coord_scan.py +0 -681
- 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 -129
- 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/transcripts.py +0 -181
- package/template/scripts/telemetry/render.py +0 -395
- package/template/scripts/telemetry/report.py +0 -138
- package/template/scripts/telemetry/run_kernel_fit.py +0 -91
- 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 -27
- package/template/templates/coord-message.md +0 -55
- 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/mvp-scope.md +0 -34
- package/template/templates/persona.md +0 -38
- package/template/templates/plan.md +0 -49
- package/template/templates/product-brief.md +0 -56
- package/template/templates/security-review.md +0 -63
- package/template/templates/telemetry-sidecar.md +0 -184
- 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/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 (`CLAUDE.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,17 +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. |
|
|
44
|
+
|
|
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.
|
|
47
46
|
|
|
48
|
-
The framework-vs-user-content boundary is canonical in `src/manifest.ts`. **What `init` and `update` write**: `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.
|
|
49
48
|
|
|
50
49
|
### Manual install (legacy)
|
|
51
50
|
|
|
@@ -60,40 +59,8 @@ for d in hstack/.claude/skills/hstack-*/; do
|
|
|
60
59
|
name=$(basename "$d")
|
|
61
60
|
ln -s "../../hstack/.claude/skills/$name" ".claude/skills/$name"
|
|
62
61
|
done
|
|
63
|
-
echo '> **Engineering workflow:** all changes in this repo are governed by hstack. See @hstack/
|
|
64
|
-
|
|
65
|
-
git add hstack .claude CLAUDE.md .gitignore && git commit -m "vendor hstack"
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
Then wire the coord-notification hooks (ADR-0007) by merging this into `.claude/settings.json` (create the file if absent; keep any existing keys):
|
|
69
|
-
|
|
70
|
-
```json
|
|
71
|
-
{
|
|
72
|
-
"hooks": {
|
|
73
|
-
"SessionStart": [
|
|
74
|
-
{
|
|
75
|
-
"hooks": [
|
|
76
|
-
{
|
|
77
|
-
"type": "command",
|
|
78
|
-
"command": "python3 \"$CLAUDE_PROJECT_DIR\"/hstack/scripts/coord/coord_scan.py hook",
|
|
79
|
-
"timeout": 15
|
|
80
|
-
}
|
|
81
|
-
]
|
|
82
|
-
}
|
|
83
|
-
],
|
|
84
|
-
"UserPromptSubmit": [
|
|
85
|
-
{
|
|
86
|
-
"hooks": [
|
|
87
|
-
{
|
|
88
|
-
"type": "command",
|
|
89
|
-
"command": "python3 \"$CLAUDE_PROJECT_DIR\"/hstack/scripts/coord/coord_scan.py hook",
|
|
90
|
-
"timeout": 15
|
|
91
|
-
}
|
|
92
|
-
]
|
|
93
|
-
}
|
|
94
|
-
]
|
|
95
|
-
}
|
|
96
|
-
}
|
|
62
|
+
echo '> **Engineering workflow:** all changes in this repo are governed by hstack. See @hstack/KERNEL.md.' >> CLAUDE.md
|
|
63
|
+
git add hstack .claude CLAUDE.md && git commit -m "vendor hstack"
|
|
97
64
|
```
|
|
98
65
|
|
|
99
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.
|
|
@@ -106,84 +73,59 @@ Run `npx hstack@latest update` whenever you want to pull the latest framework ve
|
|
|
106
73
|
|
|
107
74
|
Run `npx hstack doctor` to audit health without making changes — useful for CI checks, audits before opening a PR against the consumer repo, or onboarding a new contributor.
|
|
108
75
|
|
|
109
|
-
####
|
|
76
|
+
#### Adding or removing a Skill or subagent
|
|
110
77
|
|
|
111
|
-
`hstack
|
|
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:
|
|
112
79
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
80
|
+
| Change | Consumer-side action |
|
|
81
|
+
|---|---|
|
|
82
|
+
| New Skill at `.claude/skills/hstack-<name>/` | Create the symlink: `ln -s ../../hstack/.claude/skills/hstack-<name> <consumer-root>/.claude/skills/hstack-<name>` |
|
|
83
|
+
| Skill removed | Remove the matching symlink. Orphan symlinks are silent failures. |
|
|
84
|
+
| Skill renamed | Treat as removal + addition, in both source and consumer. |
|
|
85
|
+
| New subagent at `.claude/agents/<name>.md` | None. `.claude/agents/` is a dir-level symlink under the recommended pattern, so the file appears automatically. |
|
|
86
|
+
| Subagent removed | None, same reason. |
|
|
87
|
+
| Copy-based consumer (copied `.claude/` instead of symlinking) | Mirror every add / remove / rename by hand. The drift cost is why symlinks are recommended. |
|
|
116
88
|
|
|
117
89
|
#### Platform support
|
|
118
90
|
|
|
119
|
-
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.
|
|
120
92
|
|
|
121
93
|
## First run
|
|
122
94
|
|
|
123
|
-
Open a fresh Claude Code session in the consuming repo.
|
|
124
|
-
|
|
125
|
-
### Empty repo — greenfield
|
|
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.
|
|
126
96
|
|
|
127
|
-
|
|
128
|
-
/hstack
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
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:
|
|
132
|
-
|
|
133
|
-
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, mvp-scope, personas, glossary.
|
|
134
|
-
2. **Data architecture** — `data-architect` agent walks five sections (Tenancy, Entities, RLS, RAG, Migration Sketches) and produces a deeper `hstack/context/data-architecture.md`.
|
|
135
|
-
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.
|
|
136
|
-
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.
|
|
137
|
-
5. **Threat-model + hardening** — `security-reviewer` in `--mode foundational` scores against proposed posture.
|
|
138
|
-
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.
|
|
139
|
-
|
|
140
|
-
### Existing repo — brownfield
|
|
141
|
-
|
|
142
|
-
```
|
|
143
|
-
/hstack:brownfield-init
|
|
144
|
-
```
|
|
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`.
|
|
99
|
+
3. **Then just work.** The per-change loop below is the whole of it.
|
|
145
100
|
|
|
146
|
-
|
|
101
|
+
## The change loop
|
|
147
102
|
|
|
148
|
-
|
|
103
|
+
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`.
|
|
149
104
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
/hstack:data-architecture [--mode extract|elicit] [--section <name>]
|
|
159
|
-
/hstack:app-architecture [--mode extract|elicit] [--section <name>]
|
|
160
|
-
/hstack:stack-decide [--layer <name>]
|
|
161
|
-
```
|
|
162
|
-
|
|
163
|
-
Each atom is independently re-runnable. Section-targeted entry (`--section`) fast-jumps to a specific section but always re-runs the end-of-atom coherence check.
|
|
164
|
-
|
|
165
|
-
## Per-change workflow
|
|
166
|
-
|
|
167
|
-
Each change moves through up to eleven phases, each backed by one Skill. Conditional phases run only when the change's declared `surfaces` include the relevant tag (`ui`, `db`, `agent`, `auth`, `api`, `infra`).
|
|
168
|
-
|
|
169
|
-
| Phase | Skill | Required when |
|
|
170
|
-
| --- | --- | --- |
|
|
171
|
-
| Story | `/hstack:story-draft` | user-facing change |
|
|
172
|
-
| Scaffold | `/hstack:change-new <area> <slug>` | always |
|
|
173
|
-
| Spec | invoke `spec-author` directly | always |
|
|
174
|
-
| UI brief | `/hstack:ui-brief` | `surfaces` includes `ui` |
|
|
175
|
-
| Figma handoff | cofounder produces, commits `figma-handoff.md` | `surfaces` includes `ui` |
|
|
176
|
-
| Plan | `/hstack:change-plan` | always |
|
|
177
|
-
| Security review | `/hstack:security-review` | always |
|
|
178
|
-
| Data review | `/hstack:data-review` | `surfaces` includes `db` |
|
|
179
|
-
| Implement | `/hstack:implement <change-id> <task-id>` | once per phase |
|
|
180
|
-
| Verify | `/hstack:verify` | always |
|
|
181
|
-
| Adversarial review | `/hstack:adversarial-review` | always — **fresh Claude Code session required** |
|
|
182
|
-
| Ship | `/hstack:ship` | always — read-only scorecard + PR description |
|
|
105
|
+
| When | Then |
|
|
106
|
+
| --- | --- |
|
|
107
|
+
| db, schema or RLS work | the Supabase skills, and `data-architecture.md` |
|
|
108
|
+
| the change is done | `/hstack-wrap` |
|
|
109
|
+
| the PR is merged | `/hstack-promote` |
|
|
110
|
+
| a sensitive surface is touched | `/hstack-adversarial-review`, in a fresh session |
|
|
111
|
+
| a bug a review missed | an entry in `review-miss.md` |
|
|
112
|
+
| a module's tests look thin | `/hstack-test-audit <module>` |
|
|
183
113
|
|
|
184
|
-
|
|
114
|
+
The nine Skills:
|
|
185
115
|
|
|
186
|
-
|
|
116
|
+
| Skill | What it is for |
|
|
117
|
+
| --- | --- |
|
|
118
|
+
| `/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. |
|
|
119
|
+
| `/hstack-promote` | The release: pending production migrations, a smoke test on the unpromoted build, then promotion. Commands live in `infrastructure.md` § Deploy Pipeline. |
|
|
120
|
+
| `/hstack-commit` | The one Commitizen format humans and agents both write. |
|
|
121
|
+
| `/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. |
|
|
122
|
+
| `/hstack-test-audit` | On demand, for one module: business rules against existing tests, the gaps named, the missing tests written. |
|
|
123
|
+
| `/hstack-data-architecture` | When the data layer really moves. |
|
|
124
|
+
| `/hstack-app-architecture` | When the application architecture really moves — the exposure map lives here. |
|
|
125
|
+
| `/hstack-adr-new` | A one-way door, drafted in the PR that implements it. |
|
|
126
|
+
| `/hstack-story` | The user story of a Notion feature. A product tool, never a gate on a change. |
|
|
127
|
+
|
|
128
|
+
Four subagents do the heavy reading behind them: `adversarial-reviewer`, `test-strategist`, `data-architect`, `app-architect`.
|
|
187
129
|
|
|
188
130
|
## Repository layout
|
|
189
131
|
|
|
@@ -191,54 +133,48 @@ After init the consuming repo has:
|
|
|
191
133
|
|
|
192
134
|
```
|
|
193
135
|
hstack/
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
research/
|
|
209
|
-
sessions/ # transient
|
|
210
|
-
promoted/ # durable
|
|
211
|
-
templates/ # canonical templates
|
|
212
|
-
discovery/ # three technique scripts (brainstorm, forcing-questions, project-brief)
|
|
213
|
-
kernel-fit/ # closed-loop drift detection findings
|
|
214
|
-
lints/ # pattern-based lint rules
|
|
215
|
-
scripts/ # validators, gate runners, telemetry
|
|
136
|
+
KERNEL.md # the kernel (authority)
|
|
137
|
+
VERSION # installed framework version
|
|
138
|
+
context/ # the agent's memory between sessions
|
|
139
|
+
data-architecture.md # tenancy, entities, RLS, RAG
|
|
140
|
+
app-architecture.md # module map + exposure map, LLM call sites, surfaces
|
|
141
|
+
tech-stack.md # pinned versions, pinned on purpose
|
|
142
|
+
infrastructure.md # where things run, why the couplings, the gotchas
|
|
143
|
+
roadmap.md # Now / Next / Later — advisory, never a gate
|
|
144
|
+
invariants.md # the business rules a test names
|
|
145
|
+
review-miss.md # what a review missed, so the next one re-checks it
|
|
146
|
+
... # frozen and dated: threat-model, product-brief, vision, personas, incident-runbook
|
|
147
|
+
adr/ # one-way doors only
|
|
148
|
+
tech-debt/ # one file per item; deleted in the PR that fixes it
|
|
149
|
+
templates/ # the eight canonical templates
|
|
216
150
|
.claude/
|
|
217
|
-
skills/hstack-*/SKILL.md #
|
|
218
|
-
agents/ #
|
|
151
|
+
skills/hstack-*/SKILL.md # nine Skills
|
|
152
|
+
agents/ # four subagents
|
|
219
153
|
```
|
|
220
154
|
|
|
221
|
-
## Honesty clause
|
|
222
|
-
|
|
223
|
-
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.
|
|
155
|
+
## Honesty clause
|
|
224
156
|
|
|
225
|
-
|
|
157
|
+
- **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.
|
|
158
|
+
- **Fresh-session separation is honor-system.** `/hstack-adversarial-review` states that the session never saw the implementation conversation; nothing verifies it.
|
|
159
|
+
- **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.
|
|
160
|
+
- **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.
|
|
226
161
|
|
|
227
|
-
|
|
228
|
-
- **data-review.md** — v1 permits graceful degradation when the Supabase MCP is unreachable for low-stakes changes; v2 hard-fails uniformly.
|
|
229
|
-
- **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.
|
|
162
|
+
## Reference
|
|
230
163
|
|
|
231
|
-
|
|
164
|
+
Authoritative, in the repo:
|
|
232
165
|
|
|
233
|
-
|
|
166
|
+
- [`template/KERNEL.md`](./template/KERNEL.md) — the kernel. Authority over every Skill, subagent, and template.
|
|
167
|
+
- [`template/templates/`](./template/templates/) — the canonical structure of every artifact type.
|
|
168
|
+
- [`adr/ADR-0015-the-light-pivot.md`](./adr/ADR-0015-the-light-pivot.md) — why the pivot is subtractive, and what it costs.
|
|
169
|
+
- [`CHANGELOG.md`](./CHANGELOG.md) — the release history, including the full v0.16.0 lineage.
|
|
234
170
|
|
|
235
|
-
|
|
171
|
+
Historical companions, describing the frozen full version rather than `main`:
|
|
236
172
|
|
|
237
|
-
- [
|
|
238
|
-
- [Architecture document](https://www.notion.so/360d6791656c813d955af822cb8814d1) — long-form companion to the kernel.
|
|
239
|
-
- [Template schemas and frontmatter contracts](https://www.notion.so/361d6791656c8178bbbbc812fa6426e0) — per-template fields, sections, lifecycle, validation rules.
|
|
173
|
+
- [Architecture document](https://www.notion.so/360d6791656c813d955af822cb8814d1) — long-form companion to the pre-v1 kernel.
|
|
240
174
|
- [Adversarial review of the architecture](https://www.notion.so/361d6791656c81f78eb3c97ba4aecbb4) — the 21-finding pressure test that shaped the v1 / v2 split.
|
|
241
175
|
|
|
242
176
|
## Status
|
|
243
177
|
|
|
244
|
-
hstack v0.
|
|
178
|
+
hstack v0.17.0 — the kernel at ~1,700 words, nine Skills, four subagents, eight templates. The `v0.16.0` tag holds the complete version: ~34 Skills, ~16 subagents, the validator, the merge gates, the coord and telemetry trees.
|
|
179
|
+
|
|
180
|
+
Next milestone: the first real use of the light version, upgrading moso-app from 0.7.1 to 0.17.
|
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.
|
|
1
|
+
0.17.0
|
package/dist/commands/doctor.js
CHANGED
|
@@ -4,7 +4,8 @@ import { readFileSync } from "node:fs";
|
|
|
4
4
|
import { resolve, basename } from "node:path";
|
|
5
5
|
import { findGitRoot } from "../lib/git.js";
|
|
6
6
|
import { packageTemplateDir, packageVersionFile } from "../lib/paths.js";
|
|
7
|
-
import { planUpdate, pruneNoopActions, coordHooksState } from "../lib/wire.js";
|
|
7
|
+
import { planUpdate, pruneNoopActions, coordHooksState, kernelFilenameState, KERNEL_IMPORT_PROBE, LEGACY_KERNEL_IMPORT_PROBE, LEGACY_KERNEL_PATH_PROBE, } from "../lib/wire.js";
|
|
8
|
+
import { descriptionsOverBudget, WORD_BUDGET, CHAR_BUDGET, } from "../lib/descriptions.js";
|
|
8
9
|
function readPackageVersion() {
|
|
9
10
|
return readFileSync(packageVersionFile(), "utf8").trim();
|
|
10
11
|
}
|
|
@@ -50,6 +51,34 @@ export async function runDoctor(opts) {
|
|
|
50
51
|
message: `installed v${installedVersion}, package v${packageVersion} — run \`npx hstack update\``,
|
|
51
52
|
});
|
|
52
53
|
}
|
|
54
|
+
// Kernel filename (ADR-0010). An `hstack/CLAUDE.md` left on disk is loaded a
|
|
55
|
+
// second time by nested-CLAUDE.md discovery on the first read of anything
|
|
56
|
+
// under hstack/ (~15k tokens); an import line still pointing at the old path
|
|
57
|
+
// means the kernel may not be loaded at all once the file is renamed. Both
|
|
58
|
+
// are errors, not drift.
|
|
59
|
+
const kernelFile = await kernelFilenameState(gitRoot);
|
|
60
|
+
if (kernelFile.legacyKernelFile || kernelFile.legacyImport) {
|
|
61
|
+
const parts = [];
|
|
62
|
+
if (kernelFile.legacyKernelFile) {
|
|
63
|
+
parts.push("hstack/CLAUDE.md is still present — nested-CLAUDE.md discovery injects a second full copy of the kernel");
|
|
64
|
+
}
|
|
65
|
+
if (kernelFile.legacyImport) {
|
|
66
|
+
parts.push(`the root CLAUDE.md import still points at ${LEGACY_KERNEL_IMPORT_PROBE}`);
|
|
67
|
+
}
|
|
68
|
+
findings.push({
|
|
69
|
+
level: "error",
|
|
70
|
+
category: "kernel-filename",
|
|
71
|
+
message: `${parts.join("; ")} (ADR-0010) — fix: \`npx hstack update\``,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
else if (kernelFile.legacyImportUnrewritable) {
|
|
75
|
+
findings.push({
|
|
76
|
+
level: "error",
|
|
77
|
+
category: "kernel-filename",
|
|
78
|
+
message: `CLAUDE.md references the old kernel path \`${LEGACY_KERNEL_PATH_PROBE}\` in a form hstack will not rewrite (ADR-0010) — ` +
|
|
79
|
+
`fix by hand: the import must read \`${KERNEL_IMPORT_PROBE}\``,
|
|
80
|
+
});
|
|
81
|
+
}
|
|
53
82
|
const overwrites = actions.filter((a) => a.kind === "overwrite-file");
|
|
54
83
|
if (overwrites.length > 0) {
|
|
55
84
|
findings.push({
|
|
@@ -119,19 +148,50 @@ export async function runDoctor(opts) {
|
|
|
119
148
|
message: `${file} is missing the required hstack line`,
|
|
120
149
|
});
|
|
121
150
|
}
|
|
122
|
-
//
|
|
123
|
-
//
|
|
124
|
-
//
|
|
125
|
-
|
|
151
|
+
// Description budget (ADR-0011, Option F). Descriptions are the always-loaded
|
|
152
|
+
// routing index — ~3k tokens at 40 words each, ~29.7k before the rewrite —
|
|
153
|
+
// paid at turn zero of every session in every consuming repo, including
|
|
154
|
+
// sessions that invoke nothing. The rule shipped with the rewrite; this
|
|
155
|
+
// finding is what stops it regressing. Measured against the package template,
|
|
156
|
+
// because the consumer's copies are framework files `framework-drift` already
|
|
157
|
+
// covers.
|
|
158
|
+
const overBudget = descriptionsOverBudget(templateDir);
|
|
159
|
+
if (overBudget.length > 0) {
|
|
160
|
+
findings.push({
|
|
161
|
+
level: "warn",
|
|
162
|
+
category: "description-budget",
|
|
163
|
+
message: `${overBudget.length} skill/agent description(s) over the ${WORD_BUDGET}-word budget ` +
|
|
164
|
+
`(ADR-0011) — a description names the trigger, the body carries the rest`,
|
|
165
|
+
detail: overBudget
|
|
166
|
+
.map((d) => ` ${d.name} — ${d.words} words, ${d.chars} chars` +
|
|
167
|
+
(d.chars > CHAR_BUDGET && d.words <= WORD_BUDGET ? " (over the character ceiling)" : "") +
|
|
168
|
+
` [${d.relpath}]`)
|
|
169
|
+
.join("\n"),
|
|
170
|
+
});
|
|
171
|
+
}
|
|
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");
|
|
126
176
|
for (const a of hookActions) {
|
|
127
177
|
const m = a;
|
|
128
178
|
const state = await coordHooksState(m.file);
|
|
129
179
|
findings.push({
|
|
130
|
-
level: "error",
|
|
131
|
-
category: "hooks",
|
|
180
|
+
level: state === "invalid" ? "error" : "warn",
|
|
181
|
+
category: "coord-hooks",
|
|
132
182
|
message: state === "invalid"
|
|
133
|
-
? `.claude/settings.json is not a parseable JSON settings object — coord notification
|
|
134
|
-
: `.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,
|
|
135
195
|
});
|
|
136
196
|
}
|
|
137
197
|
// Render
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,
|
|
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,11 +52,17 @@ 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
|
-
if (opts.verbose ||
|
|
60
|
+
if (opts.verbose ||
|
|
61
|
+
summary["remove-file"] ||
|
|
62
|
+
summary["remove-symlink"] ||
|
|
63
|
+
summary["remove-legacy-paths"] ||
|
|
64
|
+
summary["remove-coord-hooks"] ||
|
|
65
|
+
summary["migrate-kernel-filename"]) {
|
|
60
66
|
console.log(pc.dim("Detail:"));
|
|
61
67
|
console.log(filterDetailedActions(actions, opts.verbose ?? false, gitRoot));
|
|
62
68
|
console.log("");
|
|
@@ -92,14 +98,17 @@ export async function runUpdate(opts) {
|
|
|
92
98
|
console.log("Review with " + pc.cyan("git diff") + " and commit when satisfied.");
|
|
93
99
|
return 0;
|
|
94
100
|
}
|
|
95
|
-
function renderSummary(summary) {
|
|
101
|
+
function renderSummary(summary, legacyPathCount) {
|
|
96
102
|
const fmt = (label, n, color) => n > 0 ? ` ${color(`${n} ${label}`)}` : null;
|
|
97
103
|
const lines = [
|
|
104
|
+
fmt("kernel rename migration, CLAUDE.md -> KERNEL.md (ADR-0010)", summary["migrate-kernel-filename"] ?? 0, pc.cyan),
|
|
98
105
|
fmt("framework file(s) added", summary["add-file"] ?? 0, pc.green),
|
|
99
106
|
fmt("framework file(s) modified", summary["overwrite-file"] ?? 0, pc.yellow),
|
|
100
107
|
fmt("framework file(s) removed", summary["remove-file"] ?? 0, pc.red),
|
|
101
108
|
fmt("symlink(s) added", summary["symlink"] ?? 0, pc.green),
|
|
102
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),
|
|
103
112
|
].filter(Boolean);
|
|
104
113
|
if (lines.length === 0) {
|
|
105
114
|
console.log(pc.dim(" (no file-level changes; idempotent checks only)"));
|
|
@@ -112,7 +121,11 @@ function renderSummary(summary) {
|
|
|
112
121
|
function filterDetailedActions(actions, verbose, consumerRoot) {
|
|
113
122
|
const interesting = actions.filter((a) => verbose
|
|
114
123
|
? true
|
|
115
|
-
: a.kind === "remove-file" ||
|
|
124
|
+
: a.kind === "remove-file" ||
|
|
125
|
+
a.kind === "remove-symlink" ||
|
|
126
|
+
a.kind === "remove-legacy-paths" ||
|
|
127
|
+
a.kind === "remove-coord-hooks" ||
|
|
128
|
+
a.kind === "migrate-kernel-filename");
|
|
116
129
|
return renderPlan(interesting, consumerRoot);
|
|
117
130
|
}
|
|
118
131
|
//# sourceMappingURL=update.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
|