chore(template): clean-slate template snapshot from bb4a0c7

Curated, product-agnostic snapshot of the post-story-04 tree: demo
content deleted, auth-only reference feature, web-next shell, all gates
green. Product-specific docs, ADRs 027-029, PRDs/epics/archive, editor
library traces, and product naming are curated out; generic template
repairs (coverage provider devDeps, root test:coverage script, live
lint fixes, root-only release-please) are kept. See TEMPLATE.md for
provenance, curation list, and usage.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016j8z4VHjedXDTjEDNg7qHK
This commit is contained in:
2026-07-12 20:40:54 +02:00
commit f77e6ea881
1062 changed files with 105156 additions and 0 deletions

59
scripts/work/cli.test.mjs Normal file
View File

@@ -0,0 +1,59 @@
import { describe, it, expect } from "vitest";
import { execSync } from "node:child_process";
import path from "node:path";
import { fileURLToPath } from "node:url";
const __dirname = path.dirname(fileURLToPath(import.meta.url));
const CLI = path.join(__dirname, "cli.mjs");
function run(args) {
try {
return execSync(`node "${CLI}" ${args}`, { encoding: "utf8" });
} catch (e) {
return e.stdout + e.stderr;
}
}
describe("pnpm work cli", () => {
it("prints usage when no subcommand is given", () => {
const out = run("");
expect(out).toContain("Usage:");
expect(out).toContain("rebuild-state");
expect(out).toContain("status");
expect(out).toContain("next");
expect(out).toContain("ready");
expect(out).toContain("blocked");
});
it("rebuild-state writes _state.json", () => {
const out = run("rebuild-state");
expect(out).toContain("Rebuilt");
expect(out).toContain("epic");
});
it("status prints a tree", () => {
const out = run("status");
// We expect at least one epic-line marker character
expect(out).toMatch(/[✓→○]/);
});
it("next prints the next non-done story OR confirms all done", () => {
const out = run("next");
expect(out.length).toBeGreaterThan(0);
});
it("ready prints something", () => {
const out = run("ready");
expect(out.length).toBeGreaterThan(0);
});
it("blocked prints something", () => {
const out = run("blocked");
expect(out.length).toBeGreaterThan(0);
});
it("dispatch prints a plan", () => {
const out = run("dispatch");
expect(out).toContain("Dispatch plan");
});
});