flow-next v2.0.0
·
10 commits
to main
since this release
Added
- Optional HTML artifact mode — spec & PR render lenses (fn-62 / FLOW-12). When activated, the lifecycle skills that own the human touchpoints emit beautifully rendered, self-contained HTML pages alongside their markdown output: a render lens is a regenerable review artifact derived from a markdown source of truth — never the storage format, never parsed back as state. Markdown (and tracker-sync) stays 100% the record; users who stick with default markdown see zero change (no reference file loads, no artifacts are written, no new steps, zero token cost).
- Activation (fn-62.1):
flowctl config set artifacts.html.enabled true— seeded in flowctl config defaults (false, soconfig getreturns a value, not null, on fresh repos;tests/test_artifacts_config.py)./flow-next:setupasks once (include-only-if-unset, like every ceremony question) and on opt-in offers the optionallavish-axiinstall with its session-spanning feedback model. Artifacts live at fixed deterministic paths —.flow/artifacts/<spec-id>/spec.html/pr.html, never timestamped (Lavish keys annotation sessions on the absolute file path) — committed by default so PR blob links resolve, or gitignored per project (setup offers the choice; link strategy followsgit check-ignore). - Shared disclosure reference (fn-62.2): one progressively disclosed file,
references/html-artifacts.md, loaded by participating skills only when the mode is on. Carries all generation rules plus an explicit anti-slop design contract (own instrument-panel palette/typography, no CDN fonts, zero external requests, print-friendly, staleness stamp in every footer, layered CSS-grid DAG rendering — never hand-typed SVG coordinates). Generation is agentic (the host agent reads the reference); flowctl's only contribution is the config knob. - Spec artifact (fn-62.3): ONE generation pathway with state-dependent rendering — spec-only business-review view before tasks exist (
/flow-next:capture§5.10), the added plan layer (task dependency DAG with critical path, R-ID → task coverage matrix) once tasks exist (/flow-next:planStep 8.5, after the refinement loop exits). The spec markdown links its lens via an idempotent marker line (replaced in place, never duplicated). - PR artifact (fn-62.4):
/flow-next:make-prPhase 1.5 emits a read-only review instrument — diff-derived (never from commit messages), verified against the spec's R-ID export before publishing (mismatches render as visibly flagged rows; warn-in-artifact, never blocking), churn grouped by review intent, where-to-look checklist. Committed narrowly (chore(flow): pr artifact <spec-id>, artifact file only — nevergit add -A);--dry-runwrites no artifact; generation failure is non-fatal and the Ralph stdout contract (PR_URL=only) is untouched. - Lavish integration (optional, detect-on-PATH — never wrapped, bundled, or required) : with
lavish-axion PATH in an interactive session, spec artifacts open as annotation sessions; feedback is pull-only and session-spanning (queues in~/.lavish-axi/state.json, survives agent death, any later session drains it vialavish-axi poll), and every annotation maps to a markdown-source edit followed by lens regeneration. The PR artifact never enters the annotate loop; autonomous/Ralph contexts never open a session and never poll. Absence or server idle-stop is invisible — the artifact is a self-contained static page. - Docs (fn-62.5): new
docs/html-artifacts.mdreference (GitHub-display limitation + local-open guidance included), README / teams / ralph / GLOSSARY surfaces.
- Activation (fn-62.1):
Removed
- BREAKING: the
planSync.crossEpicconfig alias is gone (deprecated since 1.1.3; removal promised for 2.0 throughout the 1.x line).flowctlno longer reads, writes, or migrates the legacy key: readingplanSync.crossSpecnever falls back to a leftovercrossEpicvalue,config get/set planSync.crossEpicis now a plain unknown-key lookup (no redirect, no deprecation warning), andflowctl initno longer mirrors legacy → canonical. A leftovercrossEpickey in.flow/config.jsonis inert (preserved by the config merge, never read). Migration: if you still rely on it, set the canonical key once —flowctl config set planSync.crossSpec true. Regression suites converted to pin the removal (tests/test_config_alias.py,tests/test_init_crossspec_mirror.py); prose surfaces (setup workflow,docs/flowctl.md, plan-sync agent, local-dev smoke) updated to match.
Notes
- 2.0.0 marks the leap, not an unrelated rewrite: the HTML artifact mode is fully opt-in (OFF by default — markdown-only users see zero new steps, prerequisites, or token overhead), and the only breaking change is the long-promised crossEpic alias removal above. Codex mirror regenerated and audited (references/ copy byte-identical, no spurious ask-block injections, validators green). flow-next.dev shipped the counterpart pass in the same workstream: visual-aids + pipeline pages, landing/SPECS/TEAMS/REVIEW surfaces, docs-site changelog +
FLOW_NEXT_VERSION→ 2.0.0.