@manhquy/flow-skill 0.7.1-next.0 → 0.7.2
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 +21 -0
- package/README.md +5 -5
- package/README_VN.md +5 -5
- package/package.json +1 -1
- package/skills/flow/SKILL.md +108 -221
- package/skills/flow/_templates/01-research.md +3 -2
- package/skills/flow/_templates/02-scope.md +2 -0
- package/skills/flow/_templates/03-prd.md +2 -1
- package/skills/flow/_templates/05-contract.md +1 -0
- package/skills/flow/_templates/card.md +5 -1
- package/skills/flow/law/CLAUDE.md +6 -5
- package/skills/flow/law/CODING.md +37 -0
- package/skills/flow/references/agent-detection.md +11 -9
- package/skills/flow/references/agent-stage-mapping.md +47 -12
- package/skills/flow/references/auto-run.md +37 -7
- package/skills/flow/references/clarify.md +7 -7
- package/skills/flow/references/command-dispatch.md +51 -51
- package/skills/flow/references/concierge.md +2 -2
- package/skills/flow/references/debt-and-halts.md +20 -5
- package/skills/flow/references/gate-00.md +10 -0
- package/skills/flow/references/gate-01.md +18 -0
- package/skills/flow/references/gate-02.md +16 -0
- package/skills/flow/references/gate-03.md +10 -0
- package/skills/flow/references/gate-04.md +12 -0
- package/skills/flow/references/gate-05.md +33 -0
- package/skills/flow/references/gate-assess.md +13 -0
- package/skills/flow/references/gate-card.md +25 -0
- package/skills/flow/references/gate-consistency.md +24 -0
- package/skills/flow/references/gate-constitution.md +19 -0
- package/skills/flow/references/gate-debt.md +5 -0
- package/skills/flow/references/gate-eval.md +6 -3
- package/skills/flow/references/gate-examples.md +78 -0
- package/skills/flow/references/gate-rules.md +40 -241
- package/skills/flow/references/gate-shared.md +37 -0
- package/skills/flow/references/ground-truth-gates.md +1 -1
- package/skills/flow/references/mode-work.md +13 -10
- package/skills/flow/runner/flow.sh +223 -24
- package/skills-manifest.json +16 -2
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,27 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to `@manhquy/flow-skill`. Format: [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). Versioning: [SemVer](https://semver.org/).
|
|
4
4
|
|
|
5
|
+
## [0.7.2] — 2026-09-11 — ships skill v0.32.0 (stable / latest)
|
|
6
|
+
|
|
7
|
+
Skill-content release. Ships skill product **v0.32.0** (mid-tier dispatcher,
|
|
8
|
+
mechanical scanners, `law/CODING.md`, gate-examples, split `gate-rules.md` —
|
|
9
|
+
see root `CHANGELOG.md` `## 0.32.0`). Installer CLI contract unchanged.
|
|
10
|
+
Publishes to dist-tag **`latest`**.
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
- Bundled skill tree re-synced from monorepo `skills/flow/`.
|
|
14
|
+
- Install: **`npx @manhquy/flow-skill@latest`**.
|
|
15
|
+
|
|
16
|
+
## [0.7.1] — 2026-08-21 — ships skill v0.31.0 (stable / latest)
|
|
17
|
+
|
|
18
|
+
Skill-content release. Graduates **0.7.1-next.0** to stable. Ships skill product
|
|
19
|
+
**v0.31.0** (see root `CHANGELOG.md` `## 0.31.0`). Installer CLI contract
|
|
20
|
+
unchanged. Publishes to dist-tag **`latest`**.
|
|
21
|
+
|
|
22
|
+
### Changed
|
|
23
|
+
- Bundled skill tree re-synced from monorepo `skills/flow/`.
|
|
24
|
+
- Install: **`npx @manhquy/flow-skill@latest`**.
|
|
25
|
+
|
|
5
26
|
## [0.7.1-next.0] — 2026-08-20 — ships skill v0.31.0 (eval receipts + host-agnostic parallel + value-first docs)
|
|
6
27
|
|
|
7
28
|
Skill-content release. Re-ships skill product **v0.31.0** (see root
|
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@ Install the **flow** skill into coding agents with one command.
|
|
|
5
5
|
| | |
|
|
6
6
|
|---|---|
|
|
7
7
|
| **Package** | [`@manhquy/flow-skill`](https://www.npmjs.com/package/@manhquy/flow-skill) (installer CLI) |
|
|
8
|
-
| **Current GA** | **0.7.
|
|
8
|
+
| **Current GA** | **0.7.2** — ships skill product **v0.32.0** |
|
|
9
9
|
| **Platforms** | macOS · Linux · Windows (same Node path) |
|
|
10
10
|
| **Requirement** | Node.js **≥ 22.14** |
|
|
11
11
|
| **Source** | [github.com/manhquydev/flow-skill](https://github.com/manhquydev/flow-skill) |
|
|
@@ -35,7 +35,7 @@ npx @manhquy/flow-skill@latest
|
|
|
35
35
|
|
|
36
36
|
```bash
|
|
37
37
|
npx @manhquy/flow-skill@latest --help
|
|
38
|
-
# expect: flow-skill v0.7.x (ships skill v0.
|
|
38
|
+
# expect: flow-skill v0.7.x (ships skill v0.32.x)
|
|
39
39
|
```
|
|
40
40
|
|
|
41
41
|
### Common commands
|
|
@@ -90,7 +90,7 @@ npx @manhquy/flow-skill@latest --yes --all --dry-run --json
|
|
|
90
90
|
|----|--------|
|
|
91
91
|
| `npx @manhquy/flow-skill@latest` | Bare `npx @manhquy/flow-skill` (stale npx cache) |
|
|
92
92
|
| **Run** the CLI to copy the skill | `npm i` alone (package only; no skill files in agent homes) |
|
|
93
|
-
| Pin installer `@0.7.
|
|
93
|
+
| Pin installer `@0.7.2` if needed | Pin npm `@0.32.0` (skill version ≠ package version) |
|
|
94
94
|
| Prefer `@latest` | `@rc` (retired / behind) |
|
|
95
95
|
|
|
96
96
|
**Two version axes:** `package.json` version = installer; `SKILL.md` metadata = skill product. Both appear in `--help` and in the `plan` JSONL event (`version` + `skillVersion`).
|
|
@@ -138,7 +138,7 @@ rm -rf <project>/.claude/skills/flow
|
|
|
138
138
|
|---------|-----|
|
|
139
139
|
| Agent has no `/flow` after `npm i` | Run `npx @manhquy/flow-skill@latest` (install must **execute**) |
|
|
140
140
|
| Old skill after reinstall | Always use `@latest`; avoid bare package name |
|
|
141
|
-
| `No matching version found` for `@0.
|
|
141
|
+
| `No matching version found` for `@0.32.0` | That is the **skill** version. Use `@latest` or `@0.7.x` |
|
|
142
142
|
| Node too old | Install Node ≥ 22.14 (`nvm install 22`, etc.) |
|
|
143
143
|
| Windows `EBUSY` / `EPERM` | Close the agent holding files under the skill dir; re-run |
|
|
144
144
|
| Stale install lock | Delete `<parent>/.flow-skill.installing.lock` if reclaim fails |
|
|
@@ -148,7 +148,7 @@ rm -rf <project>/.claude/skills/flow
|
|
|
148
148
|
## JSONL (`--json`)
|
|
149
149
|
|
|
150
150
|
```jsonl
|
|
151
|
-
{"event":"plan","version":"0.7.
|
|
151
|
+
{"event":"plan","version":"0.7.2","skillVersion":"0.32.0","dryRun":false,"scope":"global","targets":["claude"]}
|
|
152
152
|
{"event":"install:start","target":"claude","dests":["~/.claude/skills/flow"]}
|
|
153
153
|
{"event":"install:done","target":"claude","dests":["~/.claude/skills/flow"],"result":"success","error":null,"warnings":[]}
|
|
154
154
|
{"event":"summary","success":true,"total":1,"attempted":1,"installed":1,"failed":0,"skipped":0,"aborted":false}
|
package/README_VN.md
CHANGED
|
@@ -5,7 +5,7 @@ Cài skill **flow** vào coding agent bằng một lệnh.
|
|
|
5
5
|
| | |
|
|
6
6
|
|---|---|
|
|
7
7
|
| **Package** | [`@manhquy/flow-skill`](https://www.npmjs.com/package/@manhquy/flow-skill) (installer CLI) |
|
|
8
|
-
| **GA hiện tại** | **0.7.
|
|
8
|
+
| **GA hiện tại** | **0.7.2** — ships skill product **v0.32.0** |
|
|
9
9
|
| **Nền tảng** | macOS · Linux · Windows (cùng code path Node) |
|
|
10
10
|
| **Yêu cầu** | Node.js **≥ 22.14** |
|
|
11
11
|
| **Source** | [github.com/manhquydev/flow-skill](https://github.com/manhquydev/flow-skill) |
|
|
@@ -35,7 +35,7 @@ npx @manhquy/flow-skill@latest
|
|
|
35
35
|
|
|
36
36
|
```bash
|
|
37
37
|
npx @manhquy/flow-skill@latest --help
|
|
38
|
-
# expect: flow-skill v0.7.x (ships skill v0.
|
|
38
|
+
# expect: flow-skill v0.7.x (ships skill v0.32.x)
|
|
39
39
|
```
|
|
40
40
|
|
|
41
41
|
### Lệnh hay dùng
|
|
@@ -90,7 +90,7 @@ npx @manhquy/flow-skill@latest --yes --all --dry-run --json
|
|
|
90
90
|
|-----|--------|
|
|
91
91
|
| `npx @manhquy/flow-skill@latest` | Bare `npx @manhquy/flow-skill` (cache npx có thể cũ) |
|
|
92
92
|
| **Chạy** CLI để copy skill | Chỉ `npm i` (chỉ thêm package; không cài skill vào agent home) |
|
|
93
|
-
| Pin installer `@0.7.
|
|
93
|
+
| Pin installer `@0.7.2` nếu cần cố định | Pin npm `@0.32.0` (version **skill** ≠ version package) |
|
|
94
94
|
| Ưu tiên `@latest` / `@0.7.x` | `@rc` (đã retire / tụt hậu) |
|
|
95
95
|
|
|
96
96
|
**Hai trục version:** `package.json` = installer CLI; `SKILL.md` metadata = skill product. Cả hai hiện trong `--help` và event JSONL `plan` (`version` + `skillVersion`).
|
|
@@ -138,7 +138,7 @@ rm -rf <project>/.claude/skills/flow
|
|
|
138
138
|
|------------|------------|
|
|
139
139
|
| Agent không có `/flow` sau `npm i` | Chạy `npx @manhquy/flow-skill@latest` (phải **execute** installer) |
|
|
140
140
|
| Skill cũ sau khi “cài lại” | Luôn dùng `@latest`; tránh bare package name |
|
|
141
|
-
| `No matching version found` với `@0.
|
|
141
|
+
| `No matching version found` với `@0.32.0` | Đó là version **skill**. Dùng `@latest` hoặc `@0.7.x` |
|
|
142
142
|
| Node quá cũ | Cài Node ≥ 22.14 (`nvm install 22`, v.v.) |
|
|
143
143
|
| Windows `EBUSY` / `EPERM` | Đóng agent đang giữ file trong skill dir; chạy lại |
|
|
144
144
|
| Stale install lock | Xóa `<parent>/.flow-skill.installing.lock` nếu reclaim thất bại |
|
|
@@ -148,7 +148,7 @@ rm -rf <project>/.claude/skills/flow
|
|
|
148
148
|
## JSONL (`--json`)
|
|
149
149
|
|
|
150
150
|
```jsonl
|
|
151
|
-
{"event":"plan","version":"0.7.
|
|
151
|
+
{"event":"plan","version":"0.7.2","skillVersion":"0.32.0","dryRun":false,"scope":"global","targets":["claude"]}
|
|
152
152
|
{"event":"install:start","target":"claude","dests":["~/.claude/skills/flow"]}
|
|
153
153
|
{"event":"install:done","target":"claude","dests":["~/.claude/skills/flow"],"result":"success","error":null,"warnings":[]}
|
|
154
154
|
{"event":"summary","success":true,"total":1,"attempted":1,"installed":1,"failed":0,"skipped":0,"aborted":false}
|
package/package.json
CHANGED
package/skills/flow/SKILL.md
CHANGED
|
@@ -3,262 +3,149 @@ name: flow
|
|
|
3
3
|
description: Run the buildflow gated build process from idea to real done-evidence. Walk gated stages (Idea->Research->Scope->PRD->ADR->Contract->Cards->Build->Review->Deploy/Ship->Verify->Retro), each with a honest gate that must pass before advancing. Adapts to project type (web|cli|library|skill). Use when starting or driving a real product build, when the user types /flow, /flow next, /flow card, /flow check, or asks to scope/plan/ship a project through gates. Kill at any gate is a valid outcome.
|
|
4
4
|
user-invocable: true
|
|
5
5
|
when_to_use: "User wants to build a real product end-to-end with discipline (idea -> a deployed URL for web, or installs+runs for a CLI/library/skill), or types any /flow command, or asks for a gated build process, scope decision, contract-first plan, or card-based shipping."
|
|
6
|
-
argument-hint: "[ resume | next | card | check C-NNN | project-type web|cli|library|skill | mode teach|work | skip <stage> | ready | workspace add|list|enter|remove|check|doctor | auto [stop] | attest semantic|live-verify|status|recover | doctor | retro | eval
|
|
6
|
+
argument-hint: "[ resume | next | card | check C-NNN | project-type web|cli|library|skill | mode teach|work | skip <stage> | ready | workspace add|list|enter|remove|check|doctor | auto [stop] | attest semantic|live-verify|status|recover | doctor | retro | eval | clarify | converge | or just say what you want in plain language ]"
|
|
7
7
|
keywords: [flow, buildflow, gate, build, ship, scope, prd, contract, card, deploy, vertical-slice, cli, library, skill, worktree, parallel-agents, workspace, multi-agent]
|
|
8
8
|
license: MIT
|
|
9
9
|
metadata:
|
|
10
10
|
author: flow-skill
|
|
11
|
-
version: "0.
|
|
11
|
+
version: "0.32.0"
|
|
12
12
|
attribution: "Methodology from ai20k-build-phase/buildflow (Tony, arealisticdreamer.com); durable-layer ancestry and improve-ritual spirit from repository-harness (protocol v1 EOL — flow-owned fork); agent patterns from claudekit-engineer, BMAD-METHOD. v0.22 concierge from BMAD bmad-help; forge-idea from bmad-forge-idea (MIT, BMad Code LLC)."
|
|
13
13
|
---
|
|
14
14
|
|
|
15
15
|
# /flow — buildflow gated build harness
|
|
16
16
|
|
|
17
|
-
Idea to
|
|
18
|
-
**
|
|
19
|
-
you advance. **Kill at any gate is a valid, honored outcome** (killing a weak idea at
|
|
20
|
-
Scope is cheap and smart).
|
|
17
|
+
Idea to **world-state done-evidence** (deployed URL for web; install+run for cli/library/skill), not paperwork. Each stage has an artifact and a **GATE**.
|
|
18
|
+
**Kill at any gate is a valid, honored outcome.**
|
|
21
19
|
|
|
22
20
|
```
|
|
23
21
|
Idea -> Research -> Scope -> PRD -> ADR -> Contract -> Cards -> Build -> Review -> Deploy -> Verify-live -> Retro
|
|
24
22
|
|------------------ planning (files in flow/) ------------------| |------- shipping (inside cards/) -------|
|
|
25
23
|
```
|
|
26
24
|
|
|
27
|
-
## Two-layer harness
|
|
25
|
+
## Two-layer harness
|
|
28
26
|
|
|
29
|
-
`/flow` is
|
|
27
|
+
`/flow` is two layers. Both must agree; the script can pass hollow content.
|
|
30
28
|
|
|
31
|
-
1. **Mechanical
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
2. **Semantic
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
per-stage challenges in `references/gate-rules.md` before you let the operator advance.
|
|
29
|
+
1. **Mechanical — `runner/flow.sh`** (deterministic, exit 0/1). Stage/card lifecycle plus
|
|
30
|
+
cheatable checks: unchecked boxes (including leftover `- [ ]` under `## Open decisions`),
|
|
31
|
+
`[FILL]`, card status, empty done-evidence, plus content scanners on 01/02/03/05
|
|
32
|
+
(typed-web entry floor, L-above-A, PRD adjectives, OD cap). Always run it first — its
|
|
33
|
+
exit code is ground truth, never host judgment. Open-decision leftover boxes are the
|
|
34
|
+
same scanner; `clarify` only prints them — not a second gate.
|
|
35
|
+
2. **Semantic — this skill.** The script cannot tell a real competitor quote from a
|
|
36
|
+
fabricated one, or a grade-laundered C feature from an honest B. After mechanical
|
|
37
|
+
PASS, apply `references/gate-examples.md` before letting the operator advance.
|
|
41
38
|
|
|
42
|
-
|
|
43
|
-
content is hollow — catch that.
|
|
39
|
+
## PTC_ONLY
|
|
44
40
|
|
|
45
|
-
|
|
41
|
+
This file is always-on. Load **one** extra reference for the verb in play (load table)
|
|
42
|
+
plus that verb's row in `references/command-dispatch.md`. Do not load the rest until
|
|
43
|
+
needed. Typed verbs always win over chat.
|
|
46
44
|
|
|
47
|
-
|
|
48
|
-
with this skill:
|
|
45
|
+
## STOP
|
|
49
46
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
**Windows / Codex gotcha (read this):** in PowerShell/Codex a bare `bash` usually resolves to
|
|
60
|
-
**WSL** (`C:\WINDOWS\system32\bash.exe`), which **cannot** read `C:/...` or `/c/...` paths and
|
|
61
|
-
fails with `No such file or directory` — the mechanical layer then looks "broken" when it is not.
|
|
62
|
-
**Always invoke `runner/flow.cmd`** on Windows; it locates Git Bash and runs the engine with a
|
|
63
|
-
path Git Bash accepts. Only call `bash flow.sh` directly when you've confirmed `bash` is Git Bash.
|
|
64
|
-
|
|
65
|
-
`<skill-dir>` is wherever this skill is installed (`~/.claude/skills/flow`, `~/.codex/skills/flow`,
|
|
66
|
-
`~/.agents/skills/flow`, the Antigravity homes `~/.gemini/antigravity-cli/skills/flow` (CLI) /
|
|
67
|
-
`~/.gemini/config/skills/flow` (IDE), or a project `.claude/skills/flow`). The runner reads/writes
|
|
68
|
-
`flow/` and `cards/` under the current directory (override with `FLOW_PROJECT_ROOT`).
|
|
69
|
-
|
|
70
|
-
**Antigravity (`agy` CLI / IDE):** flow installs as the same `SKILL.md` bundle; run `agy inspect` to
|
|
71
|
-
confirm Antigravity discovered it. The mechanical layer is the **same** `bash flow.sh` / `flow.cmd`
|
|
72
|
-
runner — the Windows WSL-bash trap below applies identically (use `flow.cmd` from a Windows shell).
|
|
73
|
-
The Antigravity agent invokes shell tools, so it drives `flow.sh` like any other harness.
|
|
74
|
-
|
|
75
|
-
**One session per project (concurrency lock).** Two `/flow` sessions sharing one project
|
|
76
|
-
will stomp each other's plan. The runner keeps a `flow/.lock` (auto-reclaimed after
|
|
77
|
-
`FLOW_LOCK_TTL`, default 900s): mutating commands (`next`/`card`/`skip`/`auto`) refuse a
|
|
78
|
-
fresh **foreign** lock and `status` warns. For hard protection, **export a stable
|
|
79
|
-
`FLOW_SESSION_ID` once per session** and pass it on every call (e.g.
|
|
80
|
-
`FLOW_SESSION_ID=$mysid bash <skill-dir>/runner/flow.sh next`) — without it the runner can
|
|
81
|
-
only warn (it can't prove a different session, so it never self-blocks). `FLOW_FORCE=1`
|
|
82
|
-
takes over a lock you're sure is dead; `/flow unlock` clears it.
|
|
83
|
-
|
|
84
|
-
## Commands
|
|
47
|
+
- Runner reports **BLOCKED by another session's lock** → STOP. Never `FLOW_FORCE` a live
|
|
48
|
+
session; concurrent runs corrupt the plan. Set `FLOW_SESSION_ID` per session.
|
|
49
|
+
- Mechanical **FAIL** → STOP. Relay exact line numbers. In `teach`, never tick a box or
|
|
50
|
+
write an artifact on the operator's behalf.
|
|
51
|
+
- Security-class skip/debt → **HALT** until the operator accepts the exposure in `DEBT.md`.
|
|
52
|
+
- Never mark a card `done` without pasted world-state evidence.
|
|
53
|
+
- Never edit `_templates/` or `runner/flow.sh` during a project run.
|
|
54
|
+
- `NEXT_VERB=` is advisory; never auto-exec `auto`/`skip`.
|
|
85
55
|
|
|
86
|
-
|
|
87
|
-
|---|---|
|
|
88
|
-
| `/flow` | `flow.sh status` — where am I, what's blocking, card states |
|
|
89
|
-
| `/flow resume` | `flow.sh resume` — **read-only session-story brief for entering a project mid-cycle**: last session (command names only, never raw args), in-flight card + dwell, gate state, one `NEXT ->` line. No lock. Run this FIRST when picking up an existing project (see the dispatch rule below). |
|
|
90
|
-
| `/flow next` | `flow.sh next` — gate-check current stage; on pass, unlock next stage. **Then** you apply the semantic challenge for the stage just passed. |
|
|
91
|
-
| `/flow assess` | `flow.sh assess` — **brownfield**: scaffold + gate a current-state assessment (`flow/00-inspect.md`, auto-scan seeded) for an EXISTING codebase before planning. Operator-reviewed. |
|
|
92
|
-
| `/flow card` | `flow.sh card` — create next build card (only after all 6 planning gates pass) |
|
|
93
|
-
| `/flow card start C-NNN` | `flow.sh card start` — mark a card **in flight** (operator-visible in-progress; shown in `/flow status`). Tracked in a portable `cards/.inflight` registry, never touches the gated `status:` field. Optional convenience — coexists with hand-editing. |
|
|
94
|
-
| `/flow card done C-NNN` | `flow.sh card done` — CLI-owned flip of a card to `done`, gated by the SAME done-rules as `check` (real Evidence + checked Verify); **reverts** if the gate fails (never a hollow done). Coexists with hand-editing `status: done` + `/flow check`. |
|
|
95
|
-
| `/flow check C-NNN` | `flow.sh check C-NNN` — validate a card; **then** you review diff-vs-scope, allowed-files drift, contract shapes, DESIGN.md for UI, and that evidence is real world-state |
|
|
96
|
-
| `/flow mode teach\|work` | set who writes the artifacts (default `teach`) |
|
|
97
|
-
| `/flow ready` | `flow.sh ready` — which todo cards are buildable + parallel-safety hint |
|
|
98
|
-
| `/flow workspace add\|list\|enter\|remove\|check\|doctor` | `flow.sh workspace …` — **multi-agent worktree isolation** for running several agents (Claude/Codex/Antigravity, many terminals) in parallel WITHOUT the "one agent switches branch → every terminal flips" trap. Each agent gets its own `git worktree` (own HEAD/index/files, shared object store); git is the live registry (`git worktree list`) and a 10-field JSONL side-file (`.flow/workspaces.jsonl`) adds vendor/card/port/task. `add <branch> [--card C-NNN] [--vendor …] [--task …] [--copy-env]` provisions a worktree + distinct port-offset + paste-ready cd/env block; `list` shows who-is-where; `enter <branch>` re-prints a crashed terminal's env; `check <branch> [--card]` flags branch-claim + allowed-files overlap before you launch; `remove <branch> [--force]` tears down safely (never auto-forces); `doctor` reconciles orphan trees/records. Advisory layer; git's refusal to check out one branch twice is the real lock. |
|
|
99
|
-
| `/flow auto` | `flow.sh auto` — attested preflight (risk + Stage 05 receipt) activates shared auto policy; then drive the autonomous run (see AUTO principles). `auto stop` clears it. |
|
|
100
|
-
| `/flow attest …` | `flow.sh attest semantic\|live-verify\|status\|recover` — mint/inspect fingerprint-bound receipts (`references/attestations.md`) |
|
|
101
|
-
| `/flow recall` | `flow.sh recall` — read back durable memory (open debt, recent retro, previous-card scope, harness friction/backlog, playbooks) **at the start of a stage/card** so you don't re-learn known pain |
|
|
102
|
-
| `/flow usage` | `flow.sh usage` — roll up the mechanical usage log (JSONL flight-recorder of every invocation) into `usage_event` and print build analytics: cycle-time, gate fail-rate, per-stage dwell, cycle completion, command breakdown. `--global` for the device-wide view; `--prune [--keep N]` caps the log (crash-safe). Local-only; disable with `FLOW_LOG_DISABLE=1`/`DO_NOT_TRACK=1`. `recall` now surfaces a one-line usage digest and `retro`'s `propose` flags chronically-failing stages. |
|
|
103
|
-
| `/flow contract` | `flow.sh contract` — flag client base-URL vs served-path prefix drift (web; advisory; run after the contract gate) |
|
|
104
|
-
| `/flow tokens` | `flow.sh tokens` — flag DESIGN.md vs CSS design-token drift: unused tokens + value mismatches + orphan vars (advisory; UI cards) |
|
|
105
|
-
| `/flow coherence` | `flow.sh coherence` — flag version drift across declared version fields (doc-vs-code coherence; advisory) |
|
|
106
|
-
| `/flow consistency` | `flow.sh consistency` — audit cross-artifact coverage: every PRD `FRn` is claimed by a card (`implements:`) and served by a contract interface; numeric success metric; no leftover placeholders (advisory; run after the contract gate, before cards) |
|
|
107
|
-
| `/flow constitution` | `flow.sh constitution` — check operator-authored per-project invariants in `flow/constitution.md` (structure + optional grep-markers); **advisory and NOT a `next` gate** — run it at the scope/PRD/contract seam, then apply the semantic challenge in `gate-rules.md` |
|
|
108
|
-
| `/flow clarify` | `flow.sh clarify` — list leftover `- [ ]` bullets under `## Open decisions` on scope/PRD/contract (section-scoped, always exit 0); **advisory and NOT a `next` gate**. Write-back is the ritual in `references/clarify.md` (opt-in). |
|
|
109
|
-
| `/flow converge` | `flow.sh converge [--file <payload>]` — **append-only** remainder cards reconciling present code vs plan. Assess per `references/converge.md`, write a `flow-converge/v1` payload, then run: transactional (all cards or none), never edits an existing card, prints `CONVERGED` + writes nothing when there is no gap. Semantic proof: `flow.sh eval --stage converge`. |
|
|
110
|
-
| `/flow eval [--stage 01\|02\|card] [--fixture <id>] [--n 3] [--timeout <s>] [--keep-going]` | `flow.sh eval` — **behavioral eval**: does the LLM semantic gate (`gate-rules.md`) actually flag a hollow-but-mechanically-clean fixture? Opt-in, **billable** (live mode skips cleanly, zero calls, if `claude` CLI absent; `--replay` never inherits that SKIP); prints a per-stage scorecard. v0.21: on a final-INVALID vote, raw stdout + stderr + rc are persisted to `.flow/eval-raw/<run_id>/` (git-ignored, envelope-stripped) so an INVALID storm is postmortemable; the first UNRELIABLE fixture aborts the batch (`--keep-going` forces full-batch, worst-case ~37 calls at `--n 3`); the retry backoff is env-injectable (`FLOW_EVAL_RETRY_BACKOFF`, default 5s, set 0 in tests). See `references/gate-eval.md` for scope/cost/limitations. |
|
|
111
|
-
| `/flow eval --report` | `flow.sh eval --report` — **offline**, zero calls: last complete batch's scorecard + drift vs the prior complete batch |
|
|
112
|
-
| `/flow eval --replay` | `flow.sh eval --replay` — **keyless**: replay recorded stripped transcripts through parse → vote → per-fixture match lines (no scorecard; replay writes no results rows). Not a fresh-judge; verdicts never count toward the eval floor. Stale gate-rules hash → exit 1 (re-record live with `--record`). |
|
|
113
|
-
| `/flow promote <file>` | `flow.sh promote <file>` — copy a playbook into the cross-project KB (`~/.claude/flow/playbooks`); `recall` then surfaces it everywhere |
|
|
114
|
-
| `/flow project-type <web\|cli\|library\|skill>` | `flow.sh project-type` — set/read the project type that selects the per-type gate lens (`references/project-types.md`) |
|
|
115
|
-
| `/flow skip <stage>` | `flow.sh skip` — advance past a gate that has a matching open `DEBT.md` line; **security-class skips are operator-only and HALT** (never auto-skipped) |
|
|
116
|
-
| `/flow doctor` | `flow.sh doctor` — environment/install self-check (paths, runner, Git Bash) |
|
|
117
|
-
| `/flow harness … \| debt … \| design` | runner subsystems: `harness` (durable intake/story/trace/decision/backlog — see `harness/README.md`), `debt` (record/list deliberate gate-skips), `design` (mechanical UI-token check) |
|
|
118
|
-
| `/flow unlock` | `flow.sh unlock` — clear this project's concurrency lock after a crashed/abandoned session |
|
|
119
|
-
| `/flow retro` | the 3 retro questions; the operator writes the line, never you |
|
|
120
|
-
|
|
121
|
-
## Conversational entry (default)
|
|
122
|
-
|
|
123
|
-
Chat is the default front door — most operators should never need to learn a verb.
|
|
124
|
-
Any natural-language ask routes through `references/concierge.md`: run `flow.sh status`
|
|
125
|
-
(ground truth, never guess) → look up the closest row in `references/flow-catalog.tsv`
|
|
126
|
-
→ propose exactly ONE next action in plain language, zero-jargon → offer to run it,
|
|
127
|
-
following the file's May-run/Must-ask default-deny classification. Typed verbs always
|
|
128
|
-
win — the concierge never intercepts an explicit `/flow <verb>`. New users get one
|
|
129
|
-
plain consent question before the concierge switches to `mode work` on their behalf.
|
|
130
|
-
|
|
131
|
-
## Dispatch rules (how to behave for each command)
|
|
132
|
-
|
|
133
|
-
1. **Entering a project mid-cycle? Run `/flow resume` before any other flow verb.** If this is
|
|
134
|
-
a fresh session (no prior context in this conversation) and the project already has a
|
|
135
|
-
`flow/` or `cards/` dir, `resume` is the read-only session-story brief that replaces
|
|
136
|
-
re-deriving state from scratch — last session, in-flight card + dwell, gate state, one
|
|
137
|
-
`NEXT ->` line. Skip this only when you already have live context (e.g. you were the one who
|
|
138
|
-
just ran `next`/`card` this same session) — running it every single command is unnecessary.
|
|
139
|
-
2. **Always call `flow.sh` first** and read its exit code + output. Relay it faithfully. If it
|
|
140
|
-
reports **BLOCKED by another session's lock**, STOP and coordinate — never `FLOW_FORCE` past a
|
|
141
|
-
live session; concurrent `/flow` runs corrupt the plan.
|
|
142
|
-
3. **On `next`:** if the script FAILS, stop — report exactly what it listed (line numbers),
|
|
143
|
-
and offer to help fill, but **never check a box or write an artifact on the operator's
|
|
144
|
-
behalf** in `teach` mode. If the script PASSES, run the **semantic gate** for the stage
|
|
145
|
-
just completed (see `references/gate-rules.md`). If you find hollow content (fabricated
|
|
146
|
-
quotes, grade-laundering, a pain with no feature, an endpoint with no auth), tell the
|
|
147
|
-
operator it mechanically passed but is qualitatively weak, and let them decide. Do not
|
|
148
|
-
silently advance past a hollow artifact; do not silently block a sound one.
|
|
149
|
-
4. **On `card`/`check`:** enforce the build-session laws in `law/CLAUDE.md` — one card per
|
|
150
|
-
session, touch only `## Allowed files`, contract is the seam, done = world-state proof.
|
|
151
|
-
**Before authoring a new stage or card, run `/flow recall`** and treat its output (prior
|
|
152
|
-
debt / retro / friction / previous-card scope) as context to apply, not noise.
|
|
153
|
-
5. **Mode `work`:** interview the operator once, draft stages 00–05 yourself, pause only
|
|
154
|
-
for scope sign-off, deliver the card set as one summary. Gates and done-rules are
|
|
155
|
-
identical to `teach` — you still must pass every gate, you just also author.
|
|
156
|
-
6. **Never** edit `_templates/` or `runner/flow.sh` during a project run. Read any file the
|
|
157
|
-
runner just created before editing it.
|
|
56
|
+
## Run `flow.sh` first
|
|
158
57
|
|
|
159
|
-
|
|
58
|
+
From the **project root** (where `flow/` and `cards/` live):
|
|
160
59
|
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
Backend builds TO it, UI consumes FROM it. Never improvise a shape; amend the contract
|
|
165
|
-
first, then code. Honor a shape now (null/stub) even when its value ships in a later card.
|
|
166
|
-
3. **Done = proof in the world.** Every card names its done-evidence up front. Verify on
|
|
167
|
-
the live URL as a user. "Tests pass" / "code merged" are mid-pipeline, never done.
|
|
60
|
+
```
|
|
61
|
+
# macOS / Linux / Windows Git Bash:
|
|
62
|
+
bash <skill-dir>/runner/flow.sh <command>
|
|
168
63
|
|
|
169
|
-
|
|
64
|
+
# Windows PowerShell or cmd (INCLUDING inside Codex): use the .cmd launcher, NOT bare bash.
|
|
65
|
+
<skill-dir>\runner\flow.cmd <command>
|
|
66
|
+
```
|
|
170
67
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
**and usable**, a cross-vendor **Codex (GPT-5.x) second engine** unlocks — used at three gated
|
|
175
|
-
moments: two-strikes rescue, cross-model adversarial review (a different *model*, not just a
|
|
176
|
-
different context), and opt-in primary drafter at research/build (default stays ck:). It detects
|
|
177
|
-
and degrades like every other tier (installed≠usable; absence never breaks a run). Full seam,
|
|
178
|
-
cost gate, and shapes: **`references/codex-integration.md`**. When `agy`/the Antigravity IDE is
|
|
179
|
-
present **and usable**, a cross-vendor **Antigravity (Gemini-3) third engine** unlocks too — same
|
|
180
|
-
high-value moments, giving a **three-model** adversarial gate. Antigravity needs the strictest
|
|
181
|
-
usability check (`agy -p` returns exit 0 + empty stdout even when unauthenticated, so route only on
|
|
182
|
-
non-empty expected output, never exit code; headless capture is unreliable → interactive review is
|
|
183
|
-
the supported default). Full seam: **`references/antigravity-integration.md`**. The stage→agent map, scoped prompt
|
|
184
|
-
template, and durable-record hooks are in `references/agent-stage-mapping.md`:
|
|
185
|
-
research→`researcher`, scope/PRD→`planner`, ADR→`architect`, contract→`bmad-spec` kernel,
|
|
186
|
-
build→`fullstack-developer`, review→`code-reviewer` or `bmad-code-review` (3-layer
|
|
187
|
-
adversarial), verify-live→`tester`. **The gate is identical on every path** — an agent
|
|
188
|
-
drafts, the gate still judges. Give each subagent ONLY task + files + acceptance + relevant
|
|
189
|
-
law/contract excerpts (no session history); each returns DONE/DONE_WITH_CONCERNS/BLOCKED/
|
|
190
|
-
NEEDS_CONTEXT. After a delegation: run the gate, apply the semantic challenge, write the
|
|
191
|
-
durable hook (`flow.sh harness ...`), announce which path ran.
|
|
68
|
+
Bare `bash` on Windows/Codex is usually WSL and cannot read `C:/` paths. Always
|
|
69
|
+
`runner/flow.cmd` from a Windows shell; it locates Git Bash. Call `flow.sh` directly
|
|
70
|
+
only when `bash` is Git Bash.
|
|
192
71
|
|
|
193
|
-
|
|
72
|
+
`<skill-dir>` is the install home (`~/.claude/skills/flow`, `~/.codex/skills/flow`,
|
|
73
|
+
`~/.agents/skills/flow`, Antigravity `~/.gemini/antigravity-cli/skills/flow` (CLI) /
|
|
74
|
+
`~/.gemini/config/skills/flow` (IDE), or project `.claude/skills/flow`). Override with
|
|
75
|
+
`FLOW_PROJECT_ROOT`. Antigravity (`agy` CLI / IDE): same `SKILL.md` bundle; run
|
|
76
|
+
`agy inspect` to confirm it loaded.
|
|
194
77
|
|
|
195
|
-
|
|
196
|
-
|
|
78
|
+
**One session per project.** `flow/.lock` auto-reclaims after `FLOW_LOCK_TTL` (default
|
|
79
|
+
900s). Mutating commands refuse a fresh foreign lock. Export a stable `FLOW_SESSION_ID`.
|
|
80
|
+
`FLOW_FORCE=1` only for a lock known dead; `unlock` clears it.
|
|
197
81
|
|
|
198
|
-
##
|
|
82
|
+
## Three laws
|
|
199
83
|
|
|
200
|
-
|
|
201
|
-
**
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
card: tier-classify → scoped subagent in its own worktree → build → adversarial review →
|
|
208
|
-
owner-backed semantic receipt → `flow.sh check` PASS → merge → deploy → live_verify
|
|
209
|
-
receipt → world-state evidence → `card done` → durable trace + `AUTO-LOG.md`.
|
|
210
|
-
- **Tier A**: green + no security-class → auto-merge, no ask.
|
|
211
|
-
- **Tier B**: fixable issues → one repair by a FRESH subagent (two-strikes), else escalate.
|
|
212
|
-
If the fix needs >1 experimental attempt against a single numeric target (not a review
|
|
213
|
-
disagreement), reach for `flow.sh loop-prep` + the native loop protocol
|
|
214
|
-
(`references/native-rituals.md` §5) instead — richer with the `ck-loop` skill if
|
|
215
|
-
installed. See "Loop vs two-strikes" in `references/claudekit-skills.md`.
|
|
216
|
-
- **Tier C**: security-class (auth, authorization, admin exposure, tenancy, payments, data
|
|
217
|
-
migration, removing validation) → **HALT.** Operator accepts the exposure in `DEBT.md`,
|
|
218
|
-
in writing. Never planner-decided.
|
|
219
|
-
Hard stops (iteration/token/time caps) and ground-truth gates (`flow.sh` exit, real
|
|
220
|
-
`## Verify` runs, live check — never an agent's self-assessment) are mandatory.
|
|
84
|
+
1. **Inspect first.** Competitors, live systems, code. Evidence, not vibes.
|
|
85
|
+
2. **Contract is the seam.** Stage 05 before any code. Backend builds TO it, UI consumes
|
|
86
|
+
FROM it. Amend the contract, then code. Honor a shape now (null/stub) even when the
|
|
87
|
+
value ships later.
|
|
88
|
+
3. **Done = proof in the world.** Name type-aware done-evidence up front: deployed URL
|
|
89
|
+
for web; install+run for cli/library/skill. "Tests pass" / "code merged" are
|
|
90
|
+
mid-pipeline, never done.
|
|
221
91
|
|
|
222
|
-
##
|
|
92
|
+
## Load table
|
|
223
93
|
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
- `references/agent-stage-mapping.md`
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
94
|
+
| In play | Load |
|
|
95
|
+
|---|---|
|
|
96
|
+
| typed verb | `references/command-dispatch.md` (that row only) |
|
|
97
|
+
| plain language | `references/concierge.md`, `references/flow-catalog.tsv` |
|
|
98
|
+
| next PASS / check semantic | `references/gate-examples.md` |
|
|
99
|
+
| card / build session | `law/CLAUDE.md` |
|
|
100
|
+
| UI | `law/DESIGN.md` |
|
|
101
|
+
| auto | `references/auto-run.md` |
|
|
102
|
+
| attest / receipts | `references/attestations.md` |
|
|
103
|
+
| mode work | `references/mode-work.md` |
|
|
104
|
+
| eval | `references/gate-eval.md` |
|
|
105
|
+
| Idea/Scope ritual | `references/forge-idea.md` |
|
|
106
|
+
| engines | `references/codex-integration.md`, `references/antigravity-integration.md`, `references/claudekit-skills.md` |
|
|
107
|
+
| parallel occupancy | `references/host-agnostic-parallel.md` |
|
|
108
|
+
| agents | `references/agent-detection.md`, `references/agent-stage-mapping.md` |
|
|
109
|
+
| skip / halt | `references/debt-and-halts.md` |
|
|
110
|
+
| harness | `harness/README.md` |
|
|
111
|
+
| retro | `law/RETRO.md` |
|
|
112
|
+
|
|
113
|
+
## Dispatch rules
|
|
114
|
+
|
|
115
|
+
1. **Entering a project mid-cycle?** Fresh session and existing `flow/` or `cards/` → run
|
|
116
|
+
resume first (read-only session-story: last session, in-flight + dwell, gate state,
|
|
117
|
+
one `NEXT ->` line). Skip only with live context this session.
|
|
118
|
+
2. **Always call `flow.sh` first** and relay exit + output. Lock BLOCKED → STOP.
|
|
119
|
+
3. **On next:** FAIL → stop, offer help, never author/tick in teach. PASS → semantic
|
|
120
|
+
challenge in `gate-examples.md` (the one extra file). Do not silently advance hollow
|
|
121
|
+
content; do not silently block a sound artifact.
|
|
122
|
+
4. **On card/check:** `law/CLAUDE.md` — one card per session, only `## Allowed files`,
|
|
123
|
+
contract is the seam, done = world-state proof. Run recall first; apply its output.
|
|
124
|
+
5. **Mode `work`:** interview once, draft 00–05, pause only for scope sign-off, same
|
|
125
|
+
gates as teach.
|
|
126
|
+
6. **Never** edit `_templates/` or `runner/flow.sh` during a project run. Read any file
|
|
127
|
+
the runner just created before editing it.
|
|
128
|
+
|
|
129
|
+
## Seams (one-line pointers)
|
|
130
|
+
|
|
131
|
+
- Verb map: `references/command-dispatch.md` (no Commands table in this file).
|
|
132
|
+
- Chat front door: `references/concierge.md` + `references/flow-catalog.tsv`.
|
|
133
|
+
- Idea/Scope persona ritual: `references/forge-idea.md` (adapted from BMAD-METHOD,
|
|
134
|
+
`bmad-forge-idea`, MIT, opt-in, never a gate condition).
|
|
135
|
+
- Codex second engine: `references/codex-integration.md`.
|
|
136
|
+
- Antigravity Gemini-3 **third engine**: `references/antigravity-integration.md`
|
|
137
|
+
(confirm load with `agy inspect`).
|
|
138
|
+
- ck-skill layer: `references/claudekit-skills.md`.
|
|
139
|
+
- Parallel occupancy: `references/host-agnostic-parallel.md`.
|
|
140
|
+
- Receipts: `references/attestations.md`.
|
|
141
|
+
- `harness/` is **flow-owned**. Improve via **R-IMPROVE-HARNESS** in
|
|
142
|
+
`references/native-rituals.md`. Never `story update --status implemented` — use
|
|
143
|
+
`story complete --proof-source`.
|
|
257
144
|
|
|
258
145
|
## Forbidden
|
|
259
146
|
|
|
260
|
-
- Checking a gate box or writing a planning artifact on the operator's behalf (
|
|
147
|
+
- Checking a gate box or writing a planning artifact on the operator's behalf (teach).
|
|
261
148
|
- Setting a card `done` without pasted world-state evidence.
|
|
262
|
-
- Building two cards in one session, or in parallel before
|
|
149
|
+
- Building two cards in one session, or in parallel before `ready` marks them safe.
|
|
263
150
|
- Frontend code before the UI mock card is approved.
|
|
264
151
|
- Editing `_templates/` or `runner/flow.sh` during a project run.
|
|
@@ -20,13 +20,14 @@ Rule: INSPECT what already exists. Evidence required — links, quotes, screensh
|
|
|
20
20
|
|
|
21
21
|
## What exists already (3 — open them, don't guess)
|
|
22
22
|
|
|
23
|
-
1.
|
|
23
|
+
1. Splitwise (splitwise.com) — handles group expense splitting well, but its recurring-bill view buries anything not tagged "rent"; three of our pilot households gave up trying to track a shared internet bill inside it and moved back to a spreadsheet.
|
|
24
24
|
2. [FILL]
|
|
25
25
|
3. [FILL]
|
|
26
26
|
|
|
27
27
|
## What users say (web: 3 real complaints quoted+linked · non-web: real first-party friction)
|
|
28
28
|
|
|
29
|
-
1. >
|
|
29
|
+
1. > "Splitwise is great until someone doesn't open the app for two weeks and the balance just sits there. I want a nudge, not a number."
|
|
30
|
+
— u/frugal_flatmate, r/personalfinance thread "How do you actually get roommates to pay you back?" (reddit.com/r/personalfinance/comments/17k2xq1)
|
|
30
31
|
2. > [FILL]
|
|
31
32
|
3. > [FILL]
|
|
32
33
|
|
|
@@ -51,6 +51,8 @@ When a C feature is the real need, three honest paths:
|
|
|
51
51
|
|
|
52
52
|
## Features in v1 (each with impact AND grade)
|
|
53
53
|
|
|
54
|
+
- Debt-simplification nudge (who-owes-whom, minimized transaction count) — impact H (the differentiator named in stage-01: "I want a nudge, not a number") — grade C (a real graph-minimization algorithm, not off-the-shelf) — path 1: this C IS the product's differentiator, so it goes FIRST in build order, and no sibling C features are scoped alongside it in v1.
|
|
55
|
+
- Recurring-bill nickname on the group list — impact L (nice-to-have; nobody would pay or switch for a label) — grade A (CRUD string on an existing row)
|
|
54
56
|
- [FILL: feature — impact H/M/L (business reason: acquisition/revenue/retention/core job) — grade A/B/C — why]
|
|
55
57
|
|
|
56
58
|
## Suggested features (impact-first — proposed, not decided)
|
|
@@ -29,7 +29,7 @@ it; if a pain has no feature, it goes to the "not addressed" list — honestly.
|
|
|
29
29
|
|
|
30
30
|
| # | Persona | Pain (concrete) | Evidence (stage-01 quote/source or named observation) | Today's workaround | V1 feature that kills it | Observable gain |
|
|
31
31
|
|---|---|---|---|---|---|---|
|
|
32
|
-
| P1 |
|
|
32
|
+
| P1 | Roommate who owns the internet bill | Recurring bills not tagged rent vanish in Splitwise; households bounce back to a spreadsheet | stage-01: "I want a nudge, not a number." — u/frugal_flatmate (reddit.com/r/personalfinance/comments/17k2xq1) | Shared Google Sheet that breaks under concurrent edits | Debt-simplification nudge (FR1) | Group balance shows "Alice owes Bob $12.50" instead of a pairwise table |
|
|
33
33
|
|
|
34
34
|
### Pains NOT addressed in v1 (deliberate — tie to the scope cut list)
|
|
35
35
|
|
|
@@ -45,6 +45,7 @@ Tag each v1 feature with a stable id `FRn:` (functional requirement) — the tra
|
|
|
45
45
|
anchor. Every `FRn` must later be claimed by a card (`implements: FRn`) and served by an
|
|
46
46
|
interface in the contract (`FRn →`); `/flow consistency` checks this mechanically.
|
|
47
47
|
|
|
48
|
+
- FR1: As a roommate who paid the internet bill, I open the group balance, and I see the minimized who-owes-whom nudge; empty: none; fail: pairwise table plus "couldn't simplify"
|
|
48
49
|
- [FILL: "FR1: As a <user>, I <action>, and I see <result>" — one per v1 feature from stage 02]
|
|
49
50
|
|
|
50
51
|
## Non-functional requirements
|
|
@@ -46,6 +46,7 @@ Function/—/Access(=none)/Args/Return. The shared column below is "Access/Effec
|
|
|
46
46
|
|
|
47
47
|
| Method/Interface | Path/Name | Access/Effects | Input shape | Output shape |
|
|
48
48
|
|---|---|---|---|---|
|
|
49
|
+
| GET | /healthz | public | none | 200 `{ok:true}` · empty: none · fail `{ok:false,error}` |
|
|
49
50
|
| [FILL] | [FILL] | [FILL] | [FILL] | [FILL] |
|
|
50
51
|
|
|
51
52
|
## Shared shapes (objects used by multiple interfaces)
|