flow-next v1.10.1
·
49 commits
to main
since this release
Fixed
flowctl copilot impl-reviewno longer crashes withUnicodeDecodeErroron a repo containing a non-UTF-8 source subtree (#167 — the read-side counterpart to #123).find_references()(the symbol-cross-reference collector behindgather_context_hints) rangit grepover a fixed, broad extension set (*.c *.h *.cpp *.cs *.java *.py …) and decoded the hits with a hardtext=True, encoding="utf-8"and noerrors=. Becausegather_context_hintsextracts symbols from the changed files and greps each one repo-wide, a single legacy file anywhere in the tree — e.g. a German cp1252 C/C++ subtree carrying0xfcü /0xe4ä /0xf6ö /0xdfß — was enough to abort context gathering, even when every file you actively edit is UTF-8. The collector now capturesgit grepoutput as bytes and decodes defensively (result.stdout.decode("utf-8", errors="replace")), matching the byte-then-decode pattern the diff readers already use. Behavior is unchanged for valid UTF-8 repos. Reported with measured data by VGottselig (a large Windows CAD codebase: 304 of ~5400 C/C++ files non-UTF-8).flowctlforces its own stdout/stderr to UTF-8 at startup, so non-ASCII output (→, umlauts) no longer aborts on a legacy console codepage such as Windows cp1252 (UnicodeEncodeError: 'charmap' codec can't encode character '→', e.g. fromcopilot plan-review'sprint(output)) (#167).main()now callssys.stdout/stderr.reconfigure(encoding="utf-8", errors="replace")first thing, guarded so a captured or already-detached stream is left untouched. This removes the need for thePYTHONIOENCODING=utf-8workaround.
Changed
/flow-next:workVerify-Completion (phase 3d) now carries a recovery heuristic for a lost/errored worker result (#167). When the host (Agent-tool) drops a long-running worker's completion report ([Tool result missing due to internal error]) — its work may be complete even though the report never arrived — the loop no longer blocks waiting for a result that will never come. It diagnoses from ground truth (flowctl show+git log+git status) and classifies: already done → proceed to plan-sync; code present but not finalized → spawn a re-anchoring continuation worker that resumes from the late phase (build → review →flowctl done) instead of restarting; nothing landed → retry normally. Skill prose only; Codex mirror regenerated.
Notes
- Both
flowctl.pycopies (canonicalscripts/+ dogfood.flow/bin/) updated in lockstep (byte-identical invariant held). New regression suite:tests/test_cp1252_robustness.py(reproduces the cp1252find_referencescrash against a staged non-UTF-8 fixture; locks the stdio reconfigure guard and the phase-3d recovery prose, canonical + Codex mirror).