bastard-framework 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,19 @@ All notable changes to BASTARD will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/).
7
7
 
8
+ ## [1.2.0] - 2026-04-03
9
+
10
+ ### Added
11
+ - `bastard onboard [name]` — one-command setup (init + parents + hooks + status + workflow)
12
+ - ASCII art pipeline diagram in README
13
+ - "Built with BASTARD" section with 5 SaaS starter templates
14
+ - 👹 emoji branding, new tagline: "The bastard framework that kills AI slop"
15
+ - GitHub topics: ai-agents, claude-code, saas-builder, anti-slop, gated-workflow, meta-framework
16
+
17
+ ### Changed
18
+ - Complete README overhaul (OpenClaw-inspired layout, centered header, navigation bar)
19
+ - Reorganized command tables into Pipeline / Quality / Setup categories
20
+
8
21
  ## [1.1.0] - 2026-04-03
9
22
 
10
23
  ### Added
package/README.md CHANGED
@@ -1,170 +1,333 @@
1
- [![npm version](https://img.shields.io/npm/v/bastard-framework)](https://www.npmjs.com/package/bastard-framework)
2
- [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
1
+ <p align="center">
2
+ <br>
3
+ <span style="font-size: 64px">👹</span>
4
+ <br>
5
+ </p>
6
+
7
+ <h1 align="center">BASTARD</h1>
8
+
9
+ <p align="center">
10
+ <b>The bastard framework that kills AI slop.</b><br>
11
+ <i>Born from many. Better than all.</i>
12
+ </p>
13
+
14
+ <p align="center">
15
+ <a href="https://www.npmjs.com/package/bastard-framework"><img src="https://img.shields.io/npm/v/bastard-framework?style=flat-square&color=cb3837" alt="npm"></a>
16
+ <a href="https://github.com/Denis-hamon/bastard/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue?style=flat-square" alt="license"></a>
17
+ <a href="https://github.com/Denis-hamon/bastard/actions"><img src="https://img.shields.io/github/actions/workflow/status/Denis-hamon/bastard/ci.yml?style=flat-square&label=CI" alt="CI"></a>
18
+ <img src="https://img.shields.io/badge/AI_Slop_Score-A-brightgreen?style=flat-square" alt="slop score">
19
+ <img src="https://img.shields.io/badge/node-%3E%3D20-green?style=flat-square" alt="node">
20
+ </p>
21
+
22
+ <p align="center">
23
+ <a href="#-one-command-setup">Setup</a> &bull;
24
+ <a href="#-the-pipeline">Pipeline</a> &bull;
25
+ <a href="#-no-code-before-round-5-ever">Gates</a> &bull;
26
+ <a href="#-ai-slop-detection">Slop Detector</a> &bull;
27
+ <a href="#-built-with-bastard">Templates</a> &bull;
28
+ <a href="#-github-action">CI Action</a>
29
+ </p>
3
30
 
4
- # BASTARD
31
+ ---
32
+
33
+ ## 👹 What is BASTARD?
34
+
35
+ **B**uild **A**ny **S**aaS **T**hrough **A**gent **R**oles & **D**iscipline.
5
36
 
6
- > **The guardrails between your favorite Claude Code frameworks.**
37
+ BASTARD is a meta-framework that orchestrates **7 parent Claude Code frameworks** into an **8-round gated pipeline**. It doesn't replace any of them — it tells them when to speak and when to shut up.
7
38
 
8
- Every framework tells Claude what to do. BASTARD is the only one that tells Claude what it **cannot** do.
39
+ > Every framework tells Claude what to do.
40
+ > BASTARD is the only one that tells Claude what it **cannot** do.
9
41
 
10
- ## Try It Now (No Setup Needed)
42
+ ## 🔥 Try It Now (Zero Setup)
11
43
 
12
- Score any project for AI slop — no install, no init, no commitment:
44
+ Score any project for AI slop — no install, no config, no commitment:
13
45
 
14
46
  ```bash
15
47
  npx bastard-framework audit .
16
48
  ```
17
49
 
18
- ## The Problem
19
-
20
- The Claude Code ecosystem has amazing frameworks: BMAD for PRDs, gstack for design, GSD for execution, TaskMaster for planning. But **nobody enforces the transitions**. You write a beautiful PRD with BMAD, then ignore it when coding. You skip security review. You ship with generic AI-generated UI.
21
-
22
- BASTARD wires the genius zones of 7 frameworks into a gated pipeline where you literally cannot code before a PRD is approved, cannot style before a design system exists, and cannot ship before acceptance criteria are verified.
50
+ That's it. Works on **any** codebase.
23
51
 
24
- ## Quick Start
52
+ ## 🚀 One-Command Setup
25
53
 
26
54
  ```bash
27
- # Initialize a BASTARD project (scaffolds templates + state machine)
28
- npx bastard-framework init my-saas
55
+ npx bastard-framework onboard my-saas
56
+ ```
57
+
58
+ This single command:
59
+ 1. **Scaffolds** your project with 9 pre-structured templates
60
+ 2. **Installs** all 7 parent frameworks (latest versions)
61
+ 3. **Activates** Claude Code guard hooks
62
+ 4. **Shows** your pipeline status + first round workflow
29
63
 
30
- # Install all 7 parent frameworks (always fetches latest)
31
- bastard parents install
64
+ <details>
65
+ <summary><b>📺 See what it looks like</b></summary>
32
66
 
33
- # Install Claude Code hooks (blocks code writes before Round 5)
34
- bastard hooks install
67
+ ```
68
+ ╔══════════════════════════════════════════════════════════╗
69
+ ║ ║
70
+ ║ 👹 BASTARD ONBOARDING ║
71
+ ║ ║
72
+ ║ The bastard framework that kills AI slop. ║
73
+ ║ Born from many. Better than all. ║
74
+ ║ ║
75
+ ╚══════════════════════════════════════════════════════════╝
76
+
77
+ [1/4] Initializing project...
78
+ ✓ Project "my-saas" initialized (9 templates)
79
+
80
+ [2/4] Installing parent frameworks (latest)...
81
+ [1/7] ✓ BMAD Method — installed
82
+ [2/7] ✓ Get Shit Done — installed
83
+ ...
84
+
85
+ [3/4] Installing Claude Code guard hooks...
86
+ ✓ Hooks installed
87
+
88
+ [4/4] You're ready.
89
+
90
+ Pipeline:
91
+
92
+ ► Round 1 — Vision & Product [bmad]
93
+ ◌ Round 2 — Design System & UX [gstack + turbo]
94
+ ◌ Round 3 — Architecture [bmad + super]
95
+ ◌ Round 4 — Decomposition & Planification [taskm + gsd]
96
+ ◌ Round 5 — Execution du Code [gsd + super]
97
+ ◌ Round 6 — Securite [tob + super]
98
+ ◌ Round 7 — QA & Tests [gstack]
99
+ ◌ Round 8 — Review & Livraison [gstack + gsd]
100
+
101
+ ┌──────────────────────────────────────────────────────────┐
102
+ │ │
103
+ │ 👹 BASTARD is watching. │
104
+ │ │
105
+ │ NO CODE BEFORE ROUND 5. EVER. │
106
+ │ │
107
+ │ Your guard hooks are active. │
108
+ │ Write to src/ before Round 5 │
109
+ │ and BASTARD will block you. │
110
+ │ │
111
+ └──────────────────────────────────────────────────────────┘
112
+ ```
113
+ </details>
35
114
 
36
- # See your pipeline
37
- bastard status
115
+ ## 🔒 The Pipeline
38
116
 
39
- # Start working — Round 1 workflow with step-by-step guidance
40
- bastard run
41
117
  ```
118
+ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐
119
+ │ Round 1 │───▶│ Round 2 │───▶│ Round 3 │───▶│ Round 4 │
120
+ │ Product │ │ Design │ │ Arch │ │ Planning│
121
+ │ [bmad] │ │[gstack] │ │ [bmad] │ │ [taskm] │
122
+ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘
123
+ │GATE │GATE │GATE │GATE
124
+ ▼ ▼ ▼ ▼
125
+ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐
126
+ │ Round 5 │───▶│ Round 6 │───▶│ Round 7 │───▶│ Round 8 │
127
+ │ Code │ │Security │ │ QA │ │ Ship │
128
+ │ [gsd] │ │ [tob] │ │[gstack] │ │ [gsd] │
129
+ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘
130
+ │GATE │GATE │GATE │GATE
131
+ ▼ ▼ ▼ ▼
132
+ ✅ SHIPPED
133
+ ```
134
+
135
+ Each round has a **hard gate**. Not a suggestion — an actual enforcement mechanism. The gate must pass before you advance.
42
136
 
43
- ## Example Project
137
+ | Round | What happens | Frameworks | Gate checks |
138
+ |:---:|---|---|---|
139
+ | 1 | Product vision, PRD, personas | bmad | Content validated (100+ chars, user story format) |
140
+ | 2 | Design system, tokens, mockups | gstack + turbo | CSS custom properties defined, human approved |
141
+ | 3 | Architecture, ADRs, API contracts | bmad + super | ADR structure validated (Status/Context/Decision) |
142
+ | 4 | Task decomposition, wave planning | taskm + gsd | Task files exist, context documented |
143
+ | 5 | Code execution, TDD, atomic commits | gsd + super | Source + tests exist |
144
+ | 6 | STRIDE threat model, OWASP review | tob + super | Threat model + security review content validated |
145
+ | 7 | Browser QA, design score, regression | gstack | AI Slop Score = A, Design Score >= B |
146
+ | 8 | Adversarial review, acceptance verify | gstack + gsd | 100% acceptance criteria green |
44
147
 
45
- See [`examples/todo-app/`](examples/todo-app/) a minimal todo app that went through all 8 rounds. The code is < 200 LOC. The documents are the star.
148
+ ## 🚫 No Code Before Round 5. Ever.
46
149
 
47
- ## The Pipeline
150
+ This is not a guideline. This is **enforced by Claude Code hooks**.
48
151
 
49
152
  ```
50
- Round 1 Vision & Product [bmad] PRD, personas, acceptance criteria
51
- Round 2 Design System & UX [gstack + turbo] Design tokens, mockups, slop-free UI
52
- Round 3 Architecture [bmad + super] ADRs, infra schema, API contracts
53
- Round 4 Decomposition [taskm + gsd] Task graph, waves, context docs
54
- Round 5 Code Execution [gsd + super] Wave execution, atomic commits, TDD
55
- Round 6 Security [tob + super] STRIDE, OWASP, crypto review
56
- Round 7 QA & Tests [gstack] Browser QA, design score, regression
57
- Round 8 Review & Ship [gstack + gsd] Adversarial review, acceptance verify
153
+ ┌──────────────────────────────────────────────────────────────┐
154
+ │ │
155
+ $ claude "write src/app.ts" │
156
+ │ │
157
+ │ ██████╗ BLOCKED │
158
+ │ ██╔══██╗ │
159
+ │ ██████╔╝ BASTARD: No source code before Round 5 │
160
+ ██╔══██╗ (currently Round 1). │
161
+ │ ██████╔╝ │
162
+ │ ╚═════╝ Complete Rounds 1-4 first: │
163
+ │ product → design → architecture → planning │
164
+ │ │
165
+ └──────────────────────────────────────────────────────────────┘
58
166
  ```
59
167
 
60
- Each round has a **gate**. The gate must pass before you advance. No exceptions.
61
-
62
- ## What Makes BASTARD Different
63
-
64
- ### Hard Gates, Not Suggestions
168
+ **What the guard blocks:**
169
+ - Source code writes (`src/`, `lib/`, `app/`) before Round 5
170
+ - CSS/styling files before Round 2 gate passes
171
+ - Task/planning files before Round 4
172
+ - `git add .` and `git add -A` (per-file staging only)
173
+ - Direct commits to `main`/`master`
174
+ - Security-sensitive files without Round 6 review
65
175
 
66
176
  ```bash
67
- bastard gate # Run automated checks (content validation, not just file existence)
68
- bastard approve 1 # Human sign-off
69
- bastard next # Advance — BLOCKED if gate fails
177
+ bastard hooks install # Activate the guard
178
+ bastard hooks remove # Deactivate (you rebel)
70
179
  ```
71
180
 
72
- ### Claude Code Guard Hooks
181
+ ## 🔍 AI Slop Detection
73
182
 
74
- Once installed, Claude Code **physically cannot** write source code before Round 5:
183
+ 9 pattern detectors that catch the telltale signs of AI-generated UI:
75
184
 
76
185
  ```
77
- $ echo '{"tool_name":"Write","tool_input":{"file_path":"src/app.ts"}}' | bastard guard
78
- BASTARD: No source code before Round 5 (currently Round 1).
79
- Complete Rounds 1-4 first: product vision → design → architecture → planning.
186
+ ┌──────────────────────────────────────────────────────┐
187
+ │ AI SLOP BLACKLIST │
188
+ │ │
189
+ │ ██ Blue-purple gradients The #1 AI tell │
190
+ │ ██ 3-column icon grids Every AI landing page │
191
+ │ ██ Generic card grids Rounded + shadow + grid │
192
+ │ ██ Gradient text bg-clip-text chaos │
193
+ │ ██ Oversized heroes min-h-screen + overlay │
194
+ │ ██ Floating abstract shapes Blurred circles │
195
+ │ ██ Single font family No typographic depth │
196
+ │ ██ Generic CTAs only "Get Started" fatigue │
197
+ │ ██ Hero→Features→Pricing The AI playbook │
198
+ └──────────────────────────────────────────────────────┘
80
199
  ```
81
200
 
82
- ### AI Slop Detection
83
-
84
- 9 pattern detectors that catch the telltale signs of AI-generated UI:
85
-
86
201
  ```bash
87
- bastard slop src/ # Scan for slop patterns
88
- bastard score src/ # Check design token compliance
89
- bastard audit src/ # Combined report with merge verdict
202
+ bastard slop . # Scan any project
203
+ bastard slop . --json # Machine-readable output
204
+ bastard slop . --fail-below A # CI gate (exit 1 if below A)
205
+ bastard audit . # Slop + Design Score combined
206
+ bastard badge . # Generate shields.io badge
90
207
  ```
91
208
 
92
- Detected patterns: blue-purple gradients, 3-column icon grids, generic CTAs, floating blobs, single font families, oversized heroes, gradient text, generic section flows, card grid layouts.
209
+ ### 📊 AI Slop Leaderboard
93
210
 
94
- ### Content Validation
211
+ We scanned popular open-source SaaS projects:
95
212
 
96
- Templates aren't enough. BASTARD checks that documents have **real content**, not just empty headers:
213
+ | Project | Stars | Slop Score | Patterns |
214
+ |---------|:---:|:---:|---|
215
+ | [Maybe](https://github.com/maybe-finance/maybe) | 54k | **B** | Single Font (1) |
216
+ | [Twenty](https://github.com/twentyhq/twenty) | 44k | **C** | Single Font, Gradient Text (4) |
217
+ | [Cal.com](https://github.com/calcom/cal.com) | 41k | **D** | Hero, Card Grid, Gradient Text, Single Font (5) |
218
+ | [Formbricks](https://github.com/formbricks/formbricks) | 12k | **F** | Hero, Icon Grid, Card Grid (6) |
219
+
220
+ *Run it on yours:* `npx bastard-framework audit .`
221
+
222
+ ## 👹 The Seven Parents
223
+
224
+ | ID | Framework | What BASTARD steals | Rounds |
225
+ |:---:|---|---|:---:|
226
+ | `bmad` | [BMAD Method](https://github.com/bmad-code-org/BMAD-METHOD) | Product vision, PRD, Architecture | 1, 3 |
227
+ | `gsd` | [Get Shit Done](https://github.com/gsd-build/get-shit-done) | Context engineering, wave execution | 4, 5, 8 |
228
+ | `gstack` | [gstack](https://github.com/garrytan/gstack) | Design system, QA, shipping | 2, 7, 8 |
229
+ | `super` | [SuperClaude](https://github.com/SuperClaude-Org/SuperClaude_Framework) | Cognitive personas, token efficiency | 3, 5, 6 |
230
+ | `tob` | [Trail of Bits](https://github.com/trailofbits/skills) | Security review, threat modeling | 6 |
231
+ | `turbo` | [TurboDocx FD](https://github.com/turbodocx/frontend-design) | Frontend design, anti-AI-slop | 2 |
232
+ | `taskm` | [TaskMaster](https://github.com/eyaltoledano/claude-task-master) | Task decomposition, dependency graphs | 4 |
97
233
 
98
234
  ```bash
99
- bastard validate prd # PRD has 100+ chars in Problem section? User stories in proper format?
100
- bastard validate design # Design tokens defined with CSS custom properties?
101
- bastard validate # All documents at once
235
+ bastard parents # Who's installed?
236
+ bastard parents install # Get them all (always latest)
102
237
  ```
103
238
 
104
- ## The Seven Parents
239
+ ## 🏗️ Built with BASTARD
105
240
 
106
- | Framework | What BASTARD Uses It For | Rounds |
107
- |-----------|------------------------|--------|
108
- | [BMAD Method](https://github.com/bmad-code-org/BMAD-METHOD) | Product vision, PRD, Architecture | 1, 3 |
109
- | [Get Shit Done](https://github.com/gsd-build/get-shit-done) | Context engineering, wave execution | 4, 5, 8 |
110
- | [gstack](https://github.com/garrytan/gstack) | Design system, QA, shipping | 2, 7, 8 |
111
- | [SuperClaude](https://github.com/SuperClaude-Org/SuperClaude_Framework) | Cognitive personas, token efficiency | 3, 5, 6 |
112
- | [Trail of Bits](https://github.com/trailofbits/skills) | Security review, threat modeling | 6 |
113
- | [TurboDocx FD](https://github.com/turbodocx/frontend-design) | Frontend design, anti-AI-slop | 2 |
114
- | [TaskMaster](https://github.com/eyaltoledano/claude-task-master) | Task decomposition, dependency graphs | 4 |
241
+ ### Reference Project
115
242
 
116
- BASTARD doesn't replace any of them. It tells them when to speak and when to shut up.
243
+ See [`examples/todo-app/`](examples/todo-app/) a minimal todo app that went through all 8 rounds. Every document, every gate, every artifact. The code is < 200 LOC. The documents are the star.
117
244
 
118
- ```bash
119
- bastard parents # See which are installed
120
- bastard parents install # Install all (always latest)
121
- bastard parents install --force # Update all to latest
245
+ ### SaaS Starter Templates
246
+
247
+ Use BASTARD to build any of these. The pipeline is the same — the product changes:
248
+
249
+ | Template | What you build | Key rounds |
250
+ |----------|---------------|------------|
251
+ | **Waitlist SaaS** | Landing page + email capture + admin dashboard | R2 (design), R5 (code), R6 (data privacy) |
252
+ | **Feedback Widget** | Embeddable widget + dashboard + analytics | R2 (design), R3 (embed architecture), R5 (widget + API) |
253
+ | **Booking Platform** | Calendly-like scheduling + notifications | R1 (complex PRD), R3 (real-time arch), R6 (auth security) |
254
+ | **AI Chat Interface** | LLM-powered chatbot + conversation history | R3 (LLM architecture), R5 (streaming), R6 (prompt injection) |
255
+ | **Internal Tool** | CRUD dashboard + RBAC + audit logs | R3 (multi-tenant arch), R6 (access control), R7 (E2E tests) |
256
+
257
+ Every template follows the same 8-round pipeline. Start with `bastard onboard my-saas` and fill the Round 1 documents for your specific product.
258
+
259
+ ## ⚡ GitHub Action
260
+
261
+ Block AI slop in your CI pipeline. One line:
262
+
263
+ ```yaml
264
+ - uses: Denis-hamon/bastard/action@main
265
+ with:
266
+ path: src/
267
+ fail-below: A # A, B, C, D, or F
122
268
  ```
123
269
 
124
- ## All Commands
270
+ The action:
271
+ - Runs AI Slop + Design Score audit
272
+ - Posts results as a PR comment (auto-updates, no spam)
273
+ - Fails the check if below threshold
274
+ - Outputs `slop-score`, `design-score`, `passed` for downstream steps
275
+
276
+ ## 📋 All Commands
277
+
278
+ ### Pipeline
125
279
 
126
- | Command | Description |
127
- |---------|------------|
128
- | `bastard init [name]` | Scaffold project + templates + state machine |
280
+ | Command | What it does |
281
+ |---------|-------------|
282
+ | `bastard onboard [name]` | **One command: init + parents + hooks + status** |
283
+ | `bastard init [name]` | Scaffold project + templates |
129
284
  | `bastard status` | Visual pipeline with round/gate status |
130
285
  | `bastard run [round]` | Step-by-step workflow with framework guidance |
131
- | `bastard prompt [round]` | Generate copy-pasteable prompt for a round |
286
+ | `bastard prompt [round]` | Generate copy-pasteable prompt |
132
287
  | `bastard gate [round]` | Run automated gate checks |
133
288
  | `bastard validate [doc]` | Deep content validation |
134
289
  | `bastard approve <N>` | Human sign-off on a round |
135
- | `bastard next` | Advance to next round (blocked if gate fails) |
136
- | `bastard round <N>` | Jump to a round (with warnings) |
137
- | `bastard parents` | Show installed/missing parent frameworks |
138
- | `bastard parents install` | Install all parents (latest versions) |
139
- | `bastard hooks install` | Install Claude Code guard hooks |
140
- | `bastard hooks remove` | Remove guard hooks |
141
- | `bastard slop [path]` | AI Slop detection (works on any project) |
142
- | `bastard score [path]` | Design token compliance (works on any project) |
143
- | `bastard audit [path]` | Combined slop + design report |
290
+ | `bastard next` | Advance (blocked if gate fails) |
291
+ | `bastard round <N>` | Jump with warnings |
144
292
  | `bastard history` | Action audit trail |
145
293
  | `bastard reset` | Reset pipeline (keeps files) |
146
294
 
147
- ## Standards
295
+ ### Quality
296
+
297
+ | Command | What it does |
298
+ |---------|-------------|
299
+ | `bastard slop [path]` | AI Slop detection (any project) |
300
+ | `bastard score [path]` | Design token compliance (any project) |
301
+ | `bastard audit [path]` | Combined report + merge verdict |
302
+ | `bastard badge [path]` | Generate shields.io badge |
303
+
304
+ All quality commands support `--json` and `--fail-below <grade>`.
305
+
306
+ ### Setup
307
+
308
+ | Command | What it does |
309
+ |---------|-------------|
310
+ | `bastard parents` | Show installed/missing frameworks |
311
+ | `bastard parents install` | Install all 7 parents (latest) |
312
+ | `bastard hooks install` | Activate Claude Code guard |
313
+ | `bastard hooks remove` | Deactivate guard |
148
314
 
149
- A SaaS exits BASTARD when all gates pass:
315
+ ## 🎯 Exit Standards
150
316
 
151
- | Metric | Minimum |
152
- |--------|---------|
153
- | Test coverage | >= 80% |
154
- | Design Score | >= B |
155
- | AI Slop Score | A |
156
- | OWASP vulnerabilities | 0 critical, 0 high |
157
- | Acceptance criteria | 100% green |
158
- | ADRs | 1 per major decision |
317
+ A SaaS exits BASTARD when all gates are green:
159
318
 
160
- ## Philosophy
319
+ | Metric | Minimum | Enforced by |
320
+ |--------|:---:|---|
321
+ | Test coverage | >= 80% | Round 5 gate |
322
+ | Design Score | >= B | Round 7 gate |
323
+ | AI Slop Score | A | Round 7 gate |
324
+ | OWASP vulnerabilities | 0 critical, 0 high | Round 6 gate |
325
+ | Acceptance criteria | 100% green | Round 8 gate |
326
+ | ADRs | 1 per major decision | Round 3 gate |
161
327
 
162
- **Principle:** Every framework has a zone of genius and a zone of ignorance. BASTARD wires the genius zones in sequence and ignores the rest.
328
+ ## 🤝 Contributing
163
329
 
164
- - No code before a validated PRD (Round 1 gate)
165
- - No CSS before an approved design system (Round 2 gate)
166
- - No merge on auth/payment without security review (Round 6)
167
- - No ship without acceptance verification (Round 8 closes the loop back to Round 1)
330
+ See [CONTRIBUTING.md](CONTRIBUTING.md). BASTARD is opinionated by design — contributions that dilute the pipeline will be rejected. But if you've found a framework better than one of the seven parents at its specific job, we want to hear about it.
168
331
 
169
332
  ## License
170
333
 
@@ -172,4 +335,7 @@ MIT
172
335
 
173
336
  ---
174
337
 
175
- *Born from many. Better than all.*
338
+ <p align="center">
339
+ <b>👹 BASTARD</b><br>
340
+ <i>The bastard framework that kills AI slop.<br>Born from many. Better than all.</i>
341
+ </p>
package/dist/cli.js CHANGED
@@ -2791,7 +2791,7 @@ function displayAudit(slop, design) {
2791
2791
 
2792
2792
  // src/cli.ts
2793
2793
  var program = new Command();
2794
- program.name("bastard").description("Build Any SaaS Through Agent Roles & Discipline").version("1.1.0");
2794
+ program.name("bastard").description("Build Any SaaS Through Agent Roles & Discipline").version("1.2.0");
2795
2795
  program.command("init [name]").description("Initialize a new BASTARD project").option("--install-parents", "Also install all parent frameworks").option("--with-hooks", "Also install Claude Code guard hooks").action(async (name, opts) => {
2796
2796
  const projectRoot = process.cwd();
2797
2797
  if (stateExists(projectRoot)) {
@@ -2837,6 +2837,85 @@ program.command("init [name]").description("Initialize a new BASTARD project").o
2837
2837
  displayHooksInstalled(hookResult);
2838
2838
  }
2839
2839
  });
2840
+ program.command("onboard [name]").description("One command to rule them all: init + parents + hooks + status + run").action(async (name) => {
2841
+ const projectRoot = process.cwd();
2842
+ const projectName = name ?? basename(projectRoot);
2843
+ console.log(chalk2.bold(`
2844
+ \u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557
2845
+ \u2551 \u2551
2846
+ \u2551 \u{1F479} BASTARD ONBOARDING \u2551
2847
+ \u2551 \u2551
2848
+ \u2551 The bastard framework that kills AI slop. \u2551
2849
+ \u2551 Born from many. Better than all. \u2551
2850
+ \u2551 \u2551
2851
+ \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D
2852
+ `));
2853
+ if (stateExists(projectRoot)) {
2854
+ console.log(chalk2.green(" \u2713 Project already initialized.\n"));
2855
+ } else {
2856
+ console.log(chalk2.bold(" [1/4] Initializing project...\n"));
2857
+ const dirs = [
2858
+ "docs/product",
2859
+ "docs/design/mockups",
2860
+ "docs/architecture/ADR",
2861
+ "docs/security",
2862
+ "docs/planning",
2863
+ ".planning",
2864
+ "tasks",
2865
+ "src",
2866
+ "tests",
2867
+ ".bastard"
2868
+ ];
2869
+ for (const dir of dirs) {
2870
+ const fullPath = resolve3(projectRoot, dir);
2871
+ if (!existsSync10(fullPath)) mkdirSync5(fullPath, { recursive: true });
2872
+ }
2873
+ const state2 = createInitialState(projectName);
2874
+ saveState(projectRoot, state2);
2875
+ const created = scaffoldTemplates(projectRoot, projectName);
2876
+ console.log(chalk2.green(` \u2713 Project "${projectName}" initialized (${created.length} templates)
2877
+ `));
2878
+ }
2879
+ console.log(chalk2.bold(" [2/4] Installing parent frameworks (latest)...\n"));
2880
+ const results = await installParents(
2881
+ projectRoot,
2882
+ {},
2883
+ (result, index, total) => displayInstallProgress(result, index, total)
2884
+ );
2885
+ displayInstallSummary(results);
2886
+ console.log(chalk2.bold(" [3/4] Installing Claude Code guard hooks...\n"));
2887
+ const hookResult = installHooks(projectRoot);
2888
+ displayHooksInstalled(hookResult);
2889
+ console.log(chalk2.bold(" [4/4] You're ready.\n"));
2890
+ const state = loadState(projectRoot);
2891
+ displayStatus(state);
2892
+ const workflow = getWorkflow(state.currentRound);
2893
+ if (workflow) {
2894
+ const statuses = detectParents(projectRoot);
2895
+ const installed = new Set(statuses.filter((s) => s.installed).map((s) => s.framework.id));
2896
+ displayWorkflow(workflow, installed);
2897
+ }
2898
+ console.log(chalk2.bold(`
2899
+ \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510
2900
+ \u2502 \u2502
2901
+ \u2502 \u{1F479} BASTARD is watching. \u2502
2902
+ \u2502 \u2502
2903
+ \u2502 \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502
2904
+ \u2502 \u2502 \u2502 \u2502
2905
+ \u2502 \u2502 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 NO CODE BEFORE ROUND 5. EVER. \u2502 \u2502
2906
+ \u2502 \u2502 \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557 \u2502 \u2502
2907
+ \u2502 \u2502 \u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D Your guard hooks are active. \u2502 \u2502
2908
+ \u2502 \u2502 \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557 Write to src/ before Round 5 \u2502 \u2502
2909
+ \u2502 \u2502 \u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D and BASTARD will block you. \u2502 \u2502
2910
+ \u2502 \u2502 \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u2502 \u2502
2911
+ \u2502 \u2502 \u2502 \u2502
2912
+ \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502
2913
+ \u2502 \u2502
2914
+ \u2502 Next: fill your PRD, then \`bastard gate\` \u2502
2915
+ \u2502 \u2502
2916
+ \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518
2917
+ `));
2918
+ });
2840
2919
  program.command("status").description("Show current pipeline status").action(() => {
2841
2920
  const projectRoot = process.cwd();
2842
2921
  const state = loadState(projectRoot);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bastard-framework",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "description": "Build Any SaaS Through Agent Roles & Discipline — The guardrails between your favorite Claude Code frameworks.",
5
5
  "type": "module",
6
6
  "bin": {