Honor tracker conflict tiebreak in deterministic status policy - #270
Merged
Conversation
- route deadlocks through validated flow-wins and tracker-wins policy - preserve no-mutation conflicts for unrepresentable tracker-active mirrors - cover direct, facade, config, provider, docs, and bundled parity Task: fn-146-honor-tracker-conflict-tiebreak-in.1
- record Codex SHIP verdict for the implementation - preserve task-scoped review history Task: fn-146-honor-tracker-conflict-tiebreak-in.1
- record completion summary and verification evidence - mark fn-146 task done Task: fn-146-honor-tracker-conflict-tiebreak-in.1
Owner
Author
|
@codex review |
|
Codex Review: Didn't find any major issues. Bravo. Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
gmickel
added a commit
that referenced
this pull request
Jul 29, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Honor tracker conflict tiebreak in deterministic status policy
GitHub #268 exposed a contract gap:
tracker.conflictTiebreakwas configured and documented, but the deterministic status policy always returnedstatus-deadlock. This change wires the existing setting into the shared provider-neutral decision path.TL;DR
always-ask,flow-wins, andtracker-winsin the shared deterministic status policy.R-ID coverage
always-askpreserves candidate-bearing conflicts for both terminal×active orientations with no mutation.30341e0,c6db2ebflow-winsapplies Flow state through the provider-neutral write path with merge-evidence gating.30341e0,c6db2eb30341e0,c6db2eb30341e0,c6db2eb30341e0,c6db2eb30341e0,c6db2eb30341e0,c6db2ebVerification
fn-146-honor-tracker-conflict-tiebreak-in.1 —
cd plugins/flow-next/tests && python3 -m unittest test_tracker_status test_tracker_facade test_tracker_config -q·cd plugins/flow-next/tests && python3 -m unittest test_tracker_status test_tracker_facade test_tracker_config test_tracker_distribution -q·python3 scripts/run_tests_parallel.py·uvx ruff@0.16.0 check plugins/flow-next/scripts/flowctl.py plugins/flow-next/scripts/flowctl_tracker/status/policy.py plugins/flow-next/scripts/flowctl_tracker/status/verb.py plugins/flow-next/scripts/flowctl_tracker/facade/ops.py plugins/flow-next/tests/test_tracker_status.py plugins/flow-next/tests/test_tracker_facade.py plugins/flow-next/tests/test_tracker_config.py·uvx ruff@0.16.0 check .·./scripts/sync-codex.sh (twice; idempotent and validation guards green)·cd /Users/gordon/work/flow-next.dev && pnpm buildCritical changes
plugins/flow-next/tests/test_tracker_status.py(+205/-1 lines)plugins/flow-next/tests/test_tracker_facade.py(+88/-0 lines)plugins/flow-next/scripts/flowctl_tracker/status/policy.py(+67/-1 lines).flow/specs/fn-146-honor-tracker-conflict-tiebreak-in.json(+120/-0 lines).flow/specs/fn-146-honor-tracker-conflict-tiebreak-in.md(+91/-0 lines)How to review this PR
The pipeline verified all 7 R-IDs, 194 focused tests, the 3,286-test full suite, pinned Ruff, distribution parity, two idempotent Codex sync passes, and the public-doc build. Cross-model implementation and spec-completion reviews both returned
SHIP. Human judgment should focus on authority selection at the deadlock boundary, fail-fast placement, and whether the unrepresentable mirror remains safely non-mutating.Review plan
Must review (~13%)
plugins/flow-next/scripts/flowctl_tracker/status/policy.py— high-churn authority-selection logic. Do all three policies preserve deadlock-first ordering and the unrepresentable conflict boundary indecide()?plugins/flow-next/scripts/flowctl_tracker/status/verb.py— runtime status path. Doesstatus()validate before its claim and preserve existing apply/apply-local persistence semantics?plugins/flow-next/scripts/flowctl_tracker/facade/ops.py— lifecycle entry paths. Doop_push(),op_pull(), andop_reconcile()reject malformed config before sequence work?plugins/flow-next/scripts/flowctl.py— CLI validation. Doescmd_config_set()retain the strict enum error contract?Spot-check
plugins/flow-next/tests/test_tracker_status.py— both collision orientations, all policies, provider parity, receipts, and no-mutation assertions.plugins/flow-next/tests/test_tracker_facade.py— facade consumption and fail-fast side-effect matrix.plugins/flow-next/tests/test_tracker_config.py— strict CLI enum cases.plugins/flow-next/docs/flowctl.md,plugins/flow-next/docs/tracker-sync.md,plugins/flow-next/skills/flow-next-tracker-sync/references/status-sync.md, andCHANGELOG.md— runtime/documentation agreement.plugins/flow-next/scripts/flowctl_tracker/MANIFEST.json— distribution hashes.Safe to skim
.flow/bin/flowctl.py,.flow/bin/flowctl_tracker/facade/ops.py,.flow/bin/flowctl_tracker/status/policy.py, and.flow/bin/flowctl_tracker/status/verb.py— propagated runtime copies, parity-tested..flow/bin/flowctl_tracker/MANIFEST.json— generated distribution state.plugins/flow-next/codex/skills/flow-next-tracker-sync/references/status-sync.md— regenerated bysync-codex.sh, guard-verified..flow/specs/fn-146-honor-tracker-conflict-tiebreak-in.json,.flow/specs/fn-146-honor-tracker-conflict-tiebreak-in.md,.flow/tasks/fn-146-honor-tracker-conflict-tiebreak-in.1.json, and.flow/tasks/fn-146-honor-tracker-conflict-tiebreak-in.1.md— Flow task/spec state.Memory left behind
Bugs captured during this spec:
bug/integration/caller-facade-guards-must-cover-retro-2026-07-29— The primary Capture lifecycle touchpoint used the fn-140 facade, but its bounded MISSING-receipt retro-fire still instructed the removed skill-dispatch grammar.bug/integration/caller-fakes-must-enforce-lifecycle-2026-07-29— The tracker caller execution harness accepted incomplete lifecycle facade calls and returned no output, so active-path tests could pass while omitting required operation inputs or ignoring a JSON stream leak.bug/integration/caller-oracle-must-preserve-historical-2026-07-29— The first caller oracle normalized desired future event tags into the historical baseline and stored active observations as prose.bug/integration/tracker-ownership-rewrites-require-2026-07-29— The deterministic tracker ownership rewrite passed focused tests but review found stale adjacent contracts.Glossary / strategy notes
Closes #268
Generated by
/flow-next:make-prfromfn-146-honor-tracker-conflict-tiebreak-inagainstorigin/mainon 2026-07-29.