0.67.0-alpha · core 2026-09-19
release 0.67.0-alpha on GitHub →
Changed
- Testing skills aligned with 2026 evidence.
stelow-workflow-testing-ai-codeandstelow-workflow-testing-executionnow ban presence-only tests (except topology/count/refusal pins), require red-proof (a test never observed failing is rejected), and prefer hand-mutation plus extreme mutation over full mutation tooling (not recommended by default; adequacy is not a goal). TDD claims calibrated to independent meta-analyses; TDAD paradox documented (procedure without test context backfires). Scope tables and brownfield procedures live underreferences/(SKILL.md back under 500 lines).
Removed
- Dead Stryker wiring.
stryker.config.jsonmutated nothing ("mutate": []),test:mutationran in no CI workflow, and the config pointed at a TODO doc that never existed. Removed config, script, and the three@stryker-mutatordevDependencies. Mutation guidance now lives in the testing skills (hand-mutation first, extreme second, full tooling only for regulated code).
- Multica/Fusion residue across live docs.
host-levers.mdFusion section, per-host tables/rows inREADME.md,stelow-helper.mdandINSTALLATION.md, the deadhostobject instelow.schema.json(never written by anything), deadplugins/fusion-*ignore rules, and stale skill counts (25/26 → 28) inarchitecture.md,cli-agents/,INSTALLATION.md,host-levers.mdandsource-of-truth.md(rewritten). Fixed 7 dangling pointers toskills/.../entry/references/host-levers.md(file never existed) to the canonicalreferences/host-levers.md. Historical records (audits, post-mortems, CHANGELOG, superseded design docs) and the intentionalsetup-pulse.shremoval stub are untouched by design. stage-status.mdrewritten around the 17 canonical stages. The 0-indexed 15-phase table, numericstage=Nform and "editstelow.jsondirectly" advice contradicted the transition contract.
Added
- Workflow mechanics portable beyond git repos. Non-repository workspaces resolve their root from
STELOW_STATEDIR; review-mode rules (mode-skipped passthroughs, gate refusals with redirects) and statedir-first artifact preconditions moved from a downstream fork intodo_advance, so any host gets identical behavior. - Portable
stelowCLI surface:seed,schema,ask,advance --dry-run/--json.seedmints per-workflow state dirs from a single template (+ tracking entry);schemadumps machine-readable command contracts for runtime introspection;askimplements the file-handoff question protocol (ask/pending.json+answer.json, identity from env only, typed exit codes);advancevalidates without mutating under--dry-runand emits JSON. Usage errors exit 2, runtime failures exit 1, everywhere. - Generated
transitions.mdwith CI gate.stages.yamlis now really single source:scripts/generate-transitions.py(+npm run gen:transitions,--checkgate test) emits order table and transition lines byte-identically. Generation already caught real drift (stalereject: execution, outdated order descriptions). - Zero host names in skills.
stages.yamltool table is a canonical list (per-host columns removed);ask.mdshows only the portablestelow askform; host conditionals rewritten in capability language. The host-agnostic audit test now also forbidsbb stelow,fn_*calls and host names.
Fixed
- Ask thread placeholder names the worker session.
ask.mdshowed--thread <this_thread_id>, sending workers guessing with provider session ids and directory hashes — a wrong id failed deep inside blaming storage. Now<your-worker-thread-id>with an explicit never-list. (Orchestrator copy only; per-skill copies regenerate via sync-cli-tools.sh.) - Transition tokens ignore prose comments. Parenthetical prose in transition blocks (
(full rework path …),(none …)) leaked bare words as valid candidates —advance stayswould have corruptedcurrent_stage. Lines are cut at the first paren before tokenizing. - Read-only commands never touch the filesystem.
status,doctorand dry runs no longermkdirthe state dir as a side effect. stage-status.mdtells the truth. The 0-indexed 15-phase table (wrong stages, "edit stelow.json directly") is replaced by the 17 canonical slugs with phasename-only commands.
- README workflow table lists all 14 skills.
entryandrouterrows were missing, failing the skill-count contract (the test was right, the docs were stale).
- State Coverage Table template uses valid GFM delimiters. The
interface-alternativesreferences shipped:---:+separator cells (stray+), which no GFM renderer recognizes — every generated table rendered as raw pipes. Workers copying the template now produce real tables; a plugin-side regression test scans vendored skills for bad delimiters.
- Ask batching rule replaces the parallel-questions exception.
ask-patterns.mdcalled Pattern 5 "the ONLY place with multiple questions in parallel", discouraging batching everywhere else. The rule is now dependency-based: independent questions share ONEask_user_questioncall (the user answers together), dependent ones stay sequential. Appetite (Pattern 7) and Review Mode (Pattern 8) stay separate by deliberate decision sequencing. The bb host mapping (references/cli-tools/ask.md) documents repeated--questiongroups. - Interface selection no longer waits for a human in
Auto/Product Spec Gatemodes. The interface-alternatives skill ordered an unconditional user pick, contradicting the Mode table (Auto → LLM decides) and parking Auto cards forever. The pick is now mode-gated, with a new machine-readable policy atskills/stelow-workflow-orchestrator/references/human-gates.mdthat plugin surfaces can derive the same rules from. Orchestrator safety rules, stage table, and transitions stage list point at it. - Scope adjustment and execution start covered by the same policy. Pattern 3 (scope IN/OUT ask) and the plan-gate body are mode-gated; execution never asks to proceed.
human-gates.mdadditionally defines the gate-tool fallback (missingvisual_review→ Auto self-approves with a receipt, gated modes open a structured ask, chat-parking is forbidden).
Changed (Breaking)
- Opportunity mapping outputs Markdown instead of Confluence markup. No Confluence consumers remain and backward compatibility is waived: headings, nested lists, bold/italic map mechanically, emoji carry over, and the single wrapping code block goes away (in Markdown it would prevent rendering — Confluence needed it as paste-source).
- *Rename 12 workflow stage skills from
stelow-product-tostelow-workflow-* — orchestrator, shape-up, interface-alternatives, plan-critique, tech-planning, scope-executor, ux-critique, codebase-critique, coding-standards, testing-ai-code, testing-execution, execution-critique.stelow-product-healthwas renamed back from the intermediatestelow-workflow-health(it is a strategy library, not a stage skill). Recorded inretired-skills.yamlsoinstall.shprunes stale~/.agents/skills/copies. - README Skills section grouped by prefix —
stelow-workflow-(12, the machinery that runs the workflow) andstelow-product-(14, product strategy & domain libraries). Frontmattermetadata.categoryaligned to the prefix (workflow/product) in all 28 skills (incl.stelow-workflow-entry/stelow-workflow-router); the obsolete product/research/code/meta taxonomy is gone. - Remove tooling dirs from the repo —
.changeset/,.github/(CI + release docs),.husky/(commit-msg + pre-push hooks),.opencode/(host-specific command wrappers). All gitignored. - Drop the npm-package surface —
main/exportsentry points intobuild/(which the current build never produces),files,publishConfig,prepublishOnly/prepack, the unusedtypeboxpeer dependency, and the unusedyamldependency. Distribution stays Git/GitHub-only (skills-only).
Added
stelow-product-paywall— paywall & onboarding monetization funnel, adapted from Jake Castillo's Cal AI playbook (paywall-first build order, paywall as PMF test, pain-matched onboarding, 3 funnel benchmarks, trial policy, web2app).
Removed
huskydev dependency andpreparehook-install script — no hooks remain in the repo.- CI/coverage badges from README (workflow deleted).
Changed
- Skill count 25 → 26; counts, globs, and docs updated to the dual
stelow-product-/stelow-workflow-prefix convention.