Skip to content

flow-next v1.9.1

Choose a tag to compare

@github-actions github-actions released this 06 Jun 05:55
· 53 commits to main since this release
88de18b

Fixed

  • /flow-next:setup now detects Cursor and writes Cursor-correct project instructions, instead of mis-detecting it as Codex. Setup's platform detection keyed only on plugin-root env vars (DROID_PLUGIN_ROOT → Droid, CLAUDE_PLUGIN_ROOT → Claude Code, else → Codex). Cursor exposes neither, so a Cursor local install fell into the Codex branch — /flow-next:setup wrote the $flow-next-plan Codex command syntax into AGENTS.md and ran .codex/ agent + hook setup, while the installer advertises Cursor usage as /flow-next:*. Setup now adds a CURSOR_AGENT + .cursor-plugin/plugin.json manifest branch (ordered before the else → codex fallback) → PLATFORM=cursor, applied at every platform-branch point in the workflow (detection, the 6b docs-status template, the Step 6 Docs question, and the Step 7 write mapping), which: writes the /flow-next:plan slash-command snippet (Cursor runs the same commands; lands in AGENTS.md, which Cursor reads), resolves flowctl via .flow/bin/flowctl, reads the version from .cursor-plugin/plugin.json, and skips the Codex-only .codex/ agent/hook copy. The detection requires both the env var and the Cursor manifest because CURSOR_AGENT is inherited by child processes — so Codex launched from a Cursor shell inherits it; the manifest (present only in a real ~/.cursor/plugins/local/flow-next install) plus a ! -d ${PLUGIN_ROOT}/codex guard (a real Cursor install excludes the codex/ mirror, so its absence rejects the shared repo source tree where all manifests coexist) keep a Codex-hosted-in-Cursor run — whether installed or run from source — correctly classified as codex. For that codex/-absence proof to hold on re-install, the installers now produce a true mirror: install-cursor.sh adds rsync --delete-excluded and install-cursor.ps1 explicitly Remove-Items the excluded dirs after robocopy /MIR (plain --delete / /MIR + /XD leave a pre-existing codex/ in place); test_install_cursor_parity.py locks both. Surfaced + hardened across five rounds of PR #162/#163 review. Codex mirror regenerated.
  • Tracker-sync create-if-unlinked now snapshots the merge base at issue-create time, even when the triggering op is comment. When the first lifecycle touchpoint for an unlinked spec was a comment op (e.g. work.done / makePr with earlier events disabled), the auto-create path created the issue and attached the tracker id but did not call sync set-merge-base / set-last-synced — and the comment path itself leaves body/status untouched, so the linked issue had no merge base. A later body sync would then hit the no-base bootstrap, treat the sync as a fast-forward projection, and could silently overwrite tracker-side edits made after the issue was created. The flow-first auto-link now snapshots the just-rendered pair (set-merge-base BOTH halves + set-last-synced) at create time — the issue body we just wrote is the renderFlowToTracker output, so the base is exact. (push-first auto-link was already covered by the push skeleton's post-write snapshot; this makes the comment/reconcile-first paths match.) Surfaced in PR #162 review. Codex mirror regenerated.