Repository navigation
v0.0.13 — init-script ergonomics + brownfield polish + cycle-break
[0.0.13] — 2026-05-06
Theme: init-script ergonomics + brownfield-adopter polish + architectural cycle-break. v0.0.13 closes 8 BACKLOG entries surfaced across the v0.0.12 BASELINE (5 init-script frictions + 1 carve-out re-shape) and the v0.0.12 tag-fire (2 architectural items). Six sibling specs ship together — first cluster to converge 6/6 first-iter in a single run-sequence invocation with zero recovery.
Added
factory initfirst-contact polish (factory-core). Three init-template fixes that close every greenfield friction the v0.0.12 BASELINE flagged: (a)BIOME_JSON_TEMPLATEmigrates from Biome 1.x's"include"key to Biome 2.x's"includes"(matching the pinned major); (b) scaffold writes.factory/.gitkeep+ appends.factory/worktrees/,.factory/twin-recordings/to.gitignore(idempotent); (c)factory.config.jsongainsdod.template?: string[]derived frompackage.jsonscripts at init time, and/scope-projectreads it as the canonical DoD section body — closes the per-cluster 4×spec/dod-needs-explicit-commandwarning the v0.0.12 BASELINE measured.- Auto-quiet for non-TTY stderr (factory-runtime). When
process.stderr.isTTYis false (pipe /tee/ CI capture), the[runtime]progress lines auto-suppress. New--no-quiet(and--progressalias) opts back into progress for non-TTY contexts that want it. Precedence: CLI flag >factory.config.json runtime.quiet> auto-detect > built-in default. Closes the v0.0.12 BASELINE honorable mention "live progress pollutes captured logs." factory finish-task --all-converged(factory-core). Batch ship-cycle move-to-done. Walks the most recentfactory-sequence(or one named via--since <factorySequenceId>); moves each converged spec from<dir>/<id>.mdto<dir>/done/<id>.md; emits onefactory-spec-shippedrecord per moved spec. Mutually exclusive with the positional<spec-id>form. Closes the only step that didn't auto-progress with the rest ofrun-sequence.- Per-scenario coverage-trip detection (factory-harness). v0.0.12's option (a) (
--coverage=false) was descoped because bun 1.3.x rejects the flag; v0.0.13 ships option (b) — the runner parses bun's stdout for0 fail+coverage threshold ... not metmarkers AND a nonzero exit, classifying the result aspasswith detail prefixharness/coverage-threshold-tripped:rather thanfail. Real test failures still classify asfail; the carve-out is conservative. - Bun-as-test-only — schema emitter is Node-native (factory-core).
packages/core/scripts/emit-json-schema.tsrewritten to usenode:fs+ standard ESM. Build script changes frombun run scripts/...totsx scripts/....tsxjoinsdevDependenciesof@wifo/factory-core.pnpm buildandpnpm typecheckare now Node-only — bun is required only forpnpm test(the test runner isbun test srcper package — intentional and unchanged). Documented in top-level README + AGENTS.md + scaffold README.
Changed
@wifo/factory-spec-reviewis now apeerDependencyof@wifo/factory-core(wasdependenciesin v0.0.12). pnpm 8+ and npm 7+ auto-install peer deps, so the v0.0.12 brownfield zero-config goal is preserved for the major package managers. The build-graph cycle introduced in v0.0.12 disappears: peer deps don't form build-time edges. Legacy npm < 7 caveat documented inpackages/core/README.md+ top-level README.packages/core/src/cli.tsreverts to a staticimport { runReviewCli } from '@wifo/factory-spec-review/cli'— the v0.0.12createRequire(import.meta.url)workaround is removed (the cycle is gone, no need to defer type resolution)..github/workflows/publish.ymlbuild step reverts topnpm -r build(single line). The v0.0.12 explicit per-package list and--workspace-concurrency=1flag are removed. Build-before-typecheck order preserved (independent constraint).- All six
@wifo/factory-*packages bumped to0.0.13in lockstep.init-templates.tsPACKAGE_JSON_TEMPLATE.dependenciesbumped from^0.0.12to^0.0.13for every@wifo/factory-*dep.
Public API surface
| Package | v0.0.12 | v0.0.13 |
|---|---|---|
@wifo/factory-core |
34 | 34 |
@wifo/factory-context |
18 | 18 |
@wifo/factory-harness |
~16 | ~16 |
@wifo/factory-runtime |
26 | 26 |
@wifo/factory-spec-review |
10 | 10 |
@wifo/factory-twin |
~7 | ~7 |
Reconciliations worth knowing
- v0.0.13 is the first cluster to ship 6/6 first-iter via one
run-sequenceinvocation with zero recovery. Total: 71m wall-clock, 169k charged tokens. v0.0.10 (5/5 in 81m) was the prior best; v0.0.11 had iter-2 retry on one spec; v0.0.12 took 4 invocations due to--coverage=falserecovery. The v0.0.13 ship is the cleanest dogfood evidence to date that the runtime is stable. - Peer-dep auto-install requires pnpm 8+ or npm 7+. Legacy npm users get a clear stderr message; the install-docs caveat is one-line in both top-level README and
packages/core/README.md. - bun is still required for
pnpm test. Every package's test script isbun test src— that's the workspace's chosen test runner, intentional and unchanged. The setup-bun GitHub Actions step also stays for the test phase. factory init --adopt(shipped v0.0.12) interacts cleanly with the v0.0.13 init-template additions. TheIGNORE_IF_PRESENTset still skips pre-existingpackage.json/tsconfig.json/biome.json. The new.factory/.gitkeepand.gitignoreextension are append-only — no overwrite.- v0.0.13 explicitly does NOT ship: vitest/jest equivalents for coverage-trip detection (deferred — bun-only);
factory-cliumbrella package for the cycle-break (option b from the v0.0.13 BACKLOG entry — out of scope; peer-dep is the lighter v0.0.13 solution); migrating tests off bun (out of scope; bun test stays); JSON-line streaming progress format; per-channel progress fd; auto-firefactory finish-taskon convergence.