- `flake.nix` contains an unresolved conflict at lines 126-131, so `nix develop -c cargo test –manifest-path trueflow/Cargo.toml –features tui-test-support` fails while parsing the flake.
- `trueflow/src/commands/tui.rs` contains unresolved conflict markers in `apply_action_locally` and block-header helpers, so the Rust crate cannot compile once the environment reaches crate parsing.
- Fixed by resolving the flake dev-shell package list to use `commonNativeBuildInputs`, resolving the TUI conflicts to keep `ReviewNavigator::remove_visible_block` and the nested block-header renderer, and removing the orphaned helper left by the discarded side.
- Verified by `search` finding no conflict markers in `flake.nix` or `trueflow/src/commands/tui.rs`, and by `nix develop -c cargo check –manifest-path trueflow/Cargo.toml –features tui-test-support –lib –bins`.
- `trueflow/src/commands/review.rs` skips an entire file when the file node has an effective approved verdict before checking child blocks.
- Repro: approve a file target, then add a later block-level rejected/comment record for a block in that file; `review –all –json` should still show the block, but the early file skip hides it.
- Fixed by removing the early file-level approved skip in normal and diff-scoped review collection, leaving each block’s effective verdict to decide visibility so direct child verdicts override inherited file approval.
- Verified by `nix develop -c cargo test –manifest-path trueflow/Cargo.toml –features tui-test-support –test bug_regressions test_block_rejection_overrides_file_approval_in_review`.
- `trueflow/src/coverage.rs` counts all identities for a check when enforcing `CoveragePolicy::two_person_review()`, regardless of whether those records approved or rejected/commented.
- Repro: Alice rejects/comments a block, Bob later approves it; latest verdict is approved and two identities are counted even though only one person approved.
- Fixed by making `is_well_reviewed` count distinct identities through the policy verdict requirement while preserving the public raw identity count accessors.
- Verified by `nix develop -c cargo test –manifest-path trueflow/Cargo.toml –lib coverage::tests`.
- `trueflow/src/repo_path.rs` validates constructor input but derives `Deserialize` directly into the private string field.
- Repro: `serde_json::from_str::<RepoPath>(“"../outside.rs"”)` currently accepts a path normal construction rejects, allowing invalid persisted review records and scan cache entries.
- Fixed by replacing derived `Deserialize` with a custom implementation that routes persisted strings through `RepoPath::new`.
- Verified by `nix develop -c cargo test –manifest-path trueflow/Cargo.toml –lib repo_path::tests`.
- `trueflow/src/scanner.rs` indexes cached entries by `CachedFileEntry.path` and stamp, then blindly appends the embedded `FileState` from the cached outcome.
- Repro: a cache entry keyed as `src/lib.rs` with the correct file stamp but an included `file_state.path` of `other.rs` will be reused and poison the scanned file set instead of being rejected or rescanned.
- Fixed by validating loaded cache entries for duplicate keys and for `Included.file_state.path == CachedFileEntry.path`; invalid cache content now falls back to rescan through the existing cache-error path.
- Verified by `nix develop -c cargo test –manifest-path trueflow/Cargo.toml –lib scanner::tests::scan_cache`.
- `trueflow/src/commands/feedback.rs` accepts `–since`, `–only`, `–exclude`, and `–include-approved`, but the `–pr` path returns before passing those filters into `run_pull_request_feedback`.
- Repro: create old and new anchored PR feedback records, run `feedback –pr pr:11 –since <after-old> –dry-run`; the old filtered-out record is still staged for GitHub.
- Fixed by threading PR feedback through the same since, block-kind, and include-approved record filtering used by local feedback before building the GitHub review plan.
- Verified by `nix develop -c cargo test –manifest-path trueflow/Cargo.toml –lib commands::feedback::tests::pull_request_feedback`.
- `collect_local_feedback` builds the cursor from all database records, not the exported records.
- Repro: export `feedback –since last –target file:src/a.rs` with newer feedback in `src/b.rs`; the cursor advances past the unseen `src/b.rs` record and later `–since last` exports skip it forever.
- Fixed by building the `last` cursor from the records actually exported in feedback entries, not every record in the review database, and preserving prior same-timestamp exported ids so repeated `–since last` exports stay empty after same-second records.
- Verified by `nix develop -c cargo test –manifest-path trueflow/Cargo.toml –features tui-test-support –test bug_regressions feedback_since_last` and `nix develop -c cargo test –manifest-path trueflow/Cargo.toml –test e2e_feedback_conformance`.
- Local feedback uses latest-verdict suppression, but `build_pull_request_feedback_plan` stages any noted anchored record without checking whether a later approved record resolved the same target.
- Repro: store a comment record with an anchor, then a later approved record for the same target; `feedback –pr –dry-run` still stages the stale comment.
- Fixed by the PR feedback filter path now using `collect_feedback_entries`, which applies latest-verdict suppression unless `–include-approved` is set.
- Verified by `nix develop -c cargo test –manifest-path trueflow/Cargo.toml –lib commands::feedback::tests::pull_request_feedback`.
- `trueflow/src/feedback_since.rs` checks multiplication overflow but then computes `now.timestamp() - seconds` directly.
- Repro: a huge but multiplication-safe duration such as an enormous day/week count can underflow, panicking in debug builds or wrapping in release instead of returning a validation error.
- Fixed by using `checked_sub` for the timestamp subtraction and returning the existing “relative duration is too large” validation error on overflow.
- Verified by `nix develop -c cargo test –manifest-path trueflow/Cargo.toml –lib feedback_since::tests`.
- `enter_tui_mode` enters alternate screen, mouse capture, and bracketed paste before optionally pushing keyboard enhancement flags.
- Repro: a writer that fails on the keyboard-enhancement write returns an error after earlier terminal modes were already enabled, and `TerminalSession::enter` does not call `leave_tui_mode` for that failure.
- Fixed by rolling back base TUI modes if keyboard enhancement setup fails after alternate screen, mouse capture, and bracketed paste were enabled.
- Verified by `nix develop -c cargo test –manifest-path trueflow/Cargo.toml –lib commands::tui_terminal::tests`.
- `leave_tui_mode` returns immediately if `PopKeyboardEnhancementFlags` fails, so `LeaveAlternateScreen` is never attempted.
- Repro: a writer that fails on the pop sequence records disable mouse/paste bytes but no leave-alternate-screen bytes, and `Drop` retries the same failing path.
- Fixed by making `leave_tui_mode` attempt mouse/paste cleanup, keyboard-pop, and alternate-screen leave independently, returning the first error only after all cleanup writes have been attempted.
- Verified by `nix develop -c cargo test –manifest-path trueflow/Cargo.toml –lib commands::tui_terminal::tests`.
- Normal-mode key handling matches only `KeyCode`, so Ctrl-C is treated like plain `c` and opens the note overlay under the default keybinds.
- Repro: send `KeyEvent::new(KeyCode::Char(‘c’), KeyModifiers::CONTROL)` in a vt100/test-support normal review scenario; it dispatches `KeybindAction::Note`.
- Fixed by routing normal-mode keybinds through `KeyEvent` and ignoring character bindings with Control/Alt/Super modifiers while preserving Shift for uppercase bindings.
- Verified by `nix develop -c cargo test –manifest-path trueflow/Cargo.toml –features tui-test-support –lib keybind_action_ignores_control_modified_character_bindings`.
- Dart type-like and Lua module-like splitters register `ReviewUnits` but emit only member/table-field spans, dropping class/module headers, braces, separators, and unrecognized chunks.
- Repro: assert concatenated sub-block content equals the parent block for a Dart `class Worker { … }` and a Lua `local Defaults = { … }`; changed headers/punctuation can otherwise be approved without review.
- Fixed by emitting review chunks for omitted gaps/prefixes/tails around Dart type members and Lua table fields, preserving concatenated parent content.
- Verified by `nix develop -c cargo test –manifest-path trueflow/Cargo.toml –lib split_type_like_review_units_preserves_full_class_content` and `nix develop -c cargo test –manifest-path trueflow/Cargo.toml –lib split_module_like_preserves_full_table_content`.
- `split_container_like_block` extends the last collected Clojure semantic span to the end of the form.
- Repro: `(ns demo.core (:require [clojure.string :as str]) (:gen-class))` makes the `:require` Import span include `(:gen-class)` and the closing paren, so import filters can hide non-import namespace configuration.
- Fixed by no longer extending the final semantic span to the enclosing form end; trailing namespace clauses are emitted separately through the existing non-child chunk path.
- Verified by `nix develop -c cargo test –manifest-path trueflow/Cargo.toml –lib languages::clojure::tests`.
- Go/C++/Zig/Haskell structural-child splitters emit semantic children but no header/preamble/trailer review unit, while `is_subblock_covered` treats all covered structural children as covering the parent.
- Repro: approve all fields/methods of a large struct/class, then change only the parent header; review can consider the parent covered because there is no header sub-block to require approval.
- Fixed by treating structural-child coverage as insufficient unless the container itself has a direct approval, because emitted children do not cover the omitted header/preamble/trailer bytes.
- Verified by `nix develop -c cargo test –manifest-path trueflow/Cargo.toml –lib structural_child_coverage_does_not_cover_container_header`.
- `analysis::analyze_file` comments say it checks the first 8KB for NUL but actually reads only 1024 bytes.
- Repro: an extensionless file with a NUL at byte 1200 is classified as text; `scanner::process_file` then attempts UTF-8 parsing and records a scan diagnostic instead of returning a binary `FileState`.
- Fixed by reading the documented 8 KiB binary-detection header instead of 1 KiB before checking for NUL bytes and shebangs.
- Verified by `nix develop -c cargo test –manifest-path trueflow/Cargo.toml –lib analyze_file_detects_binary_nul_after_first_kilobyte`.
- `trueflow/tests/tui_pty_smoke.rs` keeps the parent copy of the slave PTY open after spawning `trueflow tui`.
- Repro: five `trueflow::tui_pty_smoke` tests pass their TUI assertions, then hang while joining the reader thread because EOF never arrives on the PTY master until the parent slave handle closes.
- Fixed by dropping `pair.slave` immediately after each spawned TUI child.
- Verified by `nix develop -c cargo test –manifest-path trueflow/Cargo.toml –test tui_pty_smoke –features tui-test-support`.
Reviews can be signed by known PGP keys, and this can extend/scale into a network of trusted code. For example, open source libraries could accumulate layers of reviews from many individuals (across companies), and we can cryptographically verify who reviewed what.
- [ ] Add a small “reviewed!” animation in review mode when approving/commenting.
- [ ] Show reviewed vs remaining counts in bottom-right (e.g., 5 / 15), with green reviewed and yellow remaining.
- [ ] Implement side-by-side view (Diff vs New Content).
- [ ] **Complex:** Implement true inline editing where changes in the review buffer apply to the file.
- Draft Plan: Use `ediff` or a custom overlay that writes back to file on `C-c C-c`.
- Alternative: Use `recursive-edit` in the file buffer.
- [X] Encapsulate generation of `Uuid`, `SystemTime`, and `CURRENT_VERSION` in `Record::new` to simplify `mark.rs`; verified by `record_new_generates_identity_fields_and_empty_optional_metadata`.
- [X] Optimize verification by maintaining a `HashSet` of imported public keys to avoid redundant `gpg –import` calls; verified by `verifier_imports_each_public_key_once`.
- [X] Extract `GpgClient` to handle temp dir lifecycle and provide high-level signing, public-key export, and verification methods; verified by `gpg::tests`, `commands::mark::tests`, and `commands::verify::tests`.
- [ ] Add `trueflow coverage` command that shells out to `cargo llvm-cov` or `just coverage`.
- [ ] Add coverage mode to show least-reviewed files.
- [ ] Add per-file heatmap (red = unreviewed, blue = well-reviewed).
- [ ] Add an overlay/command to show reviewed vs unreviewed lines and coverage.
- [ ] Extend coverage to code paths/branches where possible.
- [ ] Model how well reviewed a codepath is using AST relationships.
- [ ] Compute a complexity score per block to trigger review thresholds.
- [ ] Add top 16 languages/markdown variants.
- [ ] Add an `all_langs` repo fixture and E2E smoke tests per language.
- [ ] Add Swift language support for common review units: imports, structs/classes/enums, protocols, extensions, methods, and tests.
- [ ] Add Swift fixtures and E2E review-generation tests covering realistic review cases.
- [ ] Verify review UX for Swift-specific patterns like protocol conformance changes, extension-heavy files, and SwiftUI view bodies.
- [ ] Support review types (security, dependencies, performance, readability, data structures, business logic).
- [ ] Tag reviews with a type and make modes affect block ordering and filters (e.g., data structures shows structs).
- [X] Keep PR review fetch-only; do not check out or switch the user worktree.
- Verified by `fetch_pull_request_refs_fetches_hidden_refs_and_commit_objects`, which asserts PR ref fetching preserves the current branch, HEAD, and worktree file contents.
- [ ] Harden GitHub PR feedback posting against API drift and enterprise-host edge cases.
- [X] Keep unknown live GitHub review states pending in the local delivery ledger instead of marking staged records delivered; verified by `sync_pending_reviews_keeps_unknown_live_state_pending`.
- [X] Classify optional `gh api` review lookups as missing only for explicit HTTP 404 / 404 Not Found output; verified by `gh_api_output_not_found_detection_matches_explicit_http_404` and `gh_api_output_not_found_detection_ignores_unrelated_404_text`.
- [X] Keep pending review ledger entries intact when GitHub returns a non-terminal state after submit; verified by `pull_request_feedback_submit_keeps_pending_when_response_state_is_unknown`.
- [X] Reject GitHub remote URLs with extra path segments instead of inferring the wrong owner/repo; verified by `parse_git_remotes_config_rejects_urls_with_extra_path_segments`.
- [X] Reject SCP-like Git remotes with an empty host instead of resolving PRs against a blank GitHub hostname; verified by `parse_git_remotes_config_rejects_scp_like_urls_with_empty_host`.
- [X] Reject truncated pull request commit metadata before feedback mapping can silently miss PR commits; verified by `parse_pull_request_metadata_rejects_truncated_commit_list`.
- [X] Reject pull request commit metadata that omits the advertised head commit; verified by `parse_pull_request_metadata_rejects_commit_list_missing_head_sha`.
- [X] Reject pull request commit metadata where the final returned commit is not the advertised head commit; verified by `parse_pull_request_metadata_rejects_commit_list_where_head_is_not_final`.
- [X] Reject malformed GraphQL add-comment responses that have no errors field but omit `addPullRequestReviewComment.comment.id`; verified by `add_review_comment_graphql_response_rejects_missing_comment_id`.
- [X] Persist each successfully appended pending-review comment before attempting the next append, so retry does not duplicate earlier comments after a later append failure; verified by `pull_request_feedback_records_successful_appends_before_later_append_failure`.
- [X] Ignore trueflow-owned pending reviews recorded against an older PR head when excluding records, appending comments, or submitting review drafts for the current head; verified by `excluded_record_ids_for_head_ignores_pending_ids_from_other_heads`, `pull_request_feedback_ignores_pending_review_from_stale_head`, and `pull_request_feedback_submit_ignores_pending_review_from_stale_head`.
- [X] Document PR review/export workflows in README and website docs.
- [ ] Call a local model to explain context behind a change.
- [X] Confirm current all-features/all-targets clippy baseline passes with `cargo clippy –all-features –all-targets –manifest-path trueflow/Cargo.toml – -D warnings`.
- [X] Add explicit all-features/all-targets `lint-full` coverage while keeping the fast `lint` path off bench-only targets; verified by `justfile_fast_and_code_gates_match_build_time_contract`.
- [X] Keep the measured `lint-all-targets` stage mapped to full clippy coverage; verified by `measurement_profiles_and_stage_commands_match_recipe_split`.
- [ ] Evaluate high-quality Rust lints (deny, udeps, semver-checks, geiger, nextest) and wire into `just check`.
- [ ] Formalize a high-quality install plan (cargo install vs curl | sh vs package managers).
code block area and controls in TUI
“` struct #[derive(Debug, Clone)] in ./example_repos/all_languages/main.rs (hash=a85ccbc9), subblocks: └─ CodeParagraph
#[derive(Debug, Clone)] struct Config { name: String, threshold: i32, } “` Two things:
- struct #[derive(Debug, Clone)] is wrong, should be struct Config
- Let’s make the output a little nicer to read:
(no ./)
example_repos/all_languages/main.rs
-> struct Config (hash=a85ccbc9)
{directly embed the subblock tree here}
- [X] Fix semantic block identifiers so inline Rust attributes after a declaration keyword do not become the displayed name; verified by `semantic_block_identifier_skips_inline_rust_attribute_after_declaration_keyword`.
- [X] Reformat the TUI/tree output as the nested path and subblock tree shape above; verified by `build_header_lines_show_block_path_named_hash_and_subblock_tree`.
current user for the current REV. i.e. delete all review records that point to the current rev. (without removing historical reviews, etc.)
reverse-chronological order, like a trueflow log command, defaults to say the most recent 16 or something.
- [ ] Define and verify how we present textual diff chunks versus reconstructed new content.
- [ ] Explore how Jujutsu can improve diffing, review, and syncing flows.
- [ ] Add landing page, user docs, and onboarding guide.
- [ ] Ship a fully static musl build.
- [ ] Audit dependencies; prefer pure Rust and reduce OpenSSL/FFI usage.
- [ ] Spin up Vultr infra and document deployment via the org meta repo.
- [ ] Audit for performance improvements and implement top candidates.
- [X] Skip rewriting the scan cache on complete cache hits while still rewriting when cached entries disappear; verified by `scan_cache_skips_write_on_complete_cache_hit` and `scan_cache_rewrites_when_cached_file_is_deleted`.
- [X] Reuse one direct-scan ignore matcher per `scan_paths` call and keep custom ignored directory names excluded for explicit paths; verified by `scan_paths_keeps_custom_ignored_directories_ignored`.
- [X] Let targeted `scan_paths` calls warm and refresh scan cache entries without dropping unrelated cached files; verified by `scan_paths_writes_and_reuses_requested_file_cache` and `scan_paths_preserves_unrequested_cache_entries`.
- [ ] Investigate whether salsa or another incremental engine can improve scanner/review cache invalidation without adding avoidable dependency weight.
j back sentence; l forward sentence
[HIGH] please move the pgup/down, and [h]prev next down up to the right side of the navigation legend. parent and child can be in the middle. on the left, approve and comment, then mode. quit stays on furthest right. please confirm the order and layout with me.
- Verified by `footer_progress_uses_session_remaining_blocks_not_scope_total` and `footer_progress_reaches_complete_when_session_blocks_are_done`.