Repository navigation
v0.0.9 — status-aware run-sequence + per-spec timeout + scaffold scripts
[0.0.9] — 2026-05-03
Theme: status-aware run-sequence + per-spec timeout + scaffold scripts + dep-aware internal-consistency. Four small frictions surfaced in the v0.0.8 BASELINE — drafting specs got pulled into run-sequence; wide-blast-radius specs hit the 600s agent-timeout ceiling with no override; the scaffold's package.json shipped empty scripts even as every spec's DoD claimed they were runnable; internal-consistency flagged shared constraints in multi-spec products as unreferenced because it didn't follow depends-on edges. v0.0.9 closes all four.
Added
agent-timeout-msfrontmatter field +spec/wide-blast-radiuslint warning (factory-core). New optional'agent-timeout-ms': z.number().int().positive().optional()onSpecFrontmatterSchema. New lint codespec/wide-blast-radius(severity: warning) emitted when a spec's Subtasks section names ≥ 8 distinct file paths. Field-level addition; zero new public exports.- Scaffold
scripts: { typecheck, test, check, build }(factory-core).PACKAGE_JSON_TEMPLATE.scriptsnow ships the four canonical entries matching the monorepo's own conventions, so a freshfactory initproject can immediately run the gates its DoD claims. run-sequenceskips drafting specs by default +--include-draftingflag (factory-runtime).loadSpecsnow filtersfrontmatter.status === 'drafting'unlessincludeDrafting: true. New CLI flag--include-draftingandfactory.config.jsonkeyruntime.includeDrafting(defaultfalse). CLI flag > config > built-in default.- Per-spec
agent-timeout-msconsumption (factory-runtime).run()now resolves the agent timeout viaspec.frontmatter['agent-timeout-ms'] ?? options.maxAgentTimeoutMs ?? DEFAULT_MAX_AGENT_TIMEOUT_MS. Wide-blast-radius specs override the 600s ceiling without bumping the global default for everyone. internal-consistencyjudge followsdepends-onedges (factory-spec-review). The judge'sbuildPromptconsumes the existingJudgePromptCtx.deps(plumbed through in v0.0.7 bycross-doc-consistency) and appends a## Deps Constraints (referenced via depends-on)section to the artifact, with each dep's## Constraints / Decisionsblock sliced viafindSection. The criterion gains a sentence instructing the LLM judge to score against the union of this spec's Constraints + every dep's Constraints. Field-level on existing types; zero new exports.
Changed
- All six
@wifo/factory-*packages bumped to0.0.9in lockstep.init-templates.tsPACKAGE_JSON_TEMPLATE.dependenciesbumped from^0.0.8to^0.0.9for every@wifo/factory-*dep.
Public API surface
Unchanged across every package. Strictly equal to v0.0.8's surface (29 / 21 / 10 / 18 / ~16 / ~7). All v0.0.9 changes are field-level on existing schemas/types/templates + version metadata.
Reconciliations worth knowing
internal-consistencycache invalidates on first run after upgrade. The criterion text gains one sentence, soruleSetHash()flips and v0.0.8 cache entries miss. Expected and correct.- Dep loading remains the CLI's responsibility. v0.0.7 already wired the CLI to auto-load each declared dep from
docs/specs/<id>.mdordocs/specs/done/<id>.mdand thread them throughrunReview'sdepsoption. v0.0.9 just teachesinternal-consistencyto opt into the existing data flow. internal-consistencystill applies on every spec. The judge'sapplies()is unchanged (returns true unconditionally). The dep-awareness affects scoring, not whether the judge fires. A spec without deps still gets scored, just without dep-context.- Transitive dep loading is NOT yet shipped. The CLI loads direct deps only. Walking a dep's own
depends-onchain is deferred to a future release. - Drafting-by-default is
run-sequenceonly.factory-runtime run(single-spec) still runs whatever spec you point it at regardless of status. The status filter is purely a sequence-level guard.