Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
05fb942
Add out-of-band branch graph manager
codex May 19, 2026
2a0dab6
Render branch manager as revision graph
codex May 19, 2026
4710aca
Show revision cross-sections in branch graph
codex May 19, 2026
8009640
Disable caching for branch manager
codex May 19, 2026
9993bdb
Render branch manager as git-style timeline
codex May 19, 2026
dcaab3f
Refine branch timeline graph UI
codex May 19, 2026
57fd6e5
Use same-origin branch manager actions
codex May 19, 2026
be27c5a
Polish branch graph conflict loading
codex May 20, 2026
f45f48a
Support revising applied merge resolutions
codex May 20, 2026
3c34f8f
Fix WordPress media merge fixture MIME data
codex May 20, 2026
451828b
Show plugin and theme conflict details in branch manager
codex May 20, 2026
0bd38cb
Show conflict entity context table
codex May 20, 2026
fb2ae1e
Clarify merge graph and compact conflict review
codex May 20, 2026
449a3ed
Refine branch conflict review UX
codex May 20, 2026
7be397a
Stabilize branch manager lock test
codex May 20, 2026
ccb9eca
Unify branch manager bottom workbench
codex May 20, 2026
234f8ec
Clarify branch graph merge review layout
codex May 20, 2026
6c5db9f
Polish branch manager review workflow
codex May 20, 2026
fb3a5cc
Refine branch conflict review controls
codex May 20, 2026
e803c84
Add deep links for branch conflict reviews
codex May 20, 2026
7144c05
Expose safer branch conflict automation
codex May 20, 2026
08c5886
Harden branch conflict review actions
codex May 20, 2026
90e0a84
Clarify conflict review terminology
codex May 20, 2026
6efb305
Rename conflict review state to unreviewed
codex May 20, 2026
cd27aa1
Clarify branch review conflict check labels
codex May 20, 2026
097ca7c
Refine branch manager actions and scrolling
codex May 20, 2026
0ee1b29
Clarify conflict change-check actions
codex May 20, 2026
dd0ef03
Simplify branch conflict review pane
codex May 20, 2026
ecd3ee3
Progressively disclose conflict details
codex May 20, 2026
52654e1
Compact conflict review toolbar
codex May 20, 2026
e5e2d13
Simplify conflict resolution review UI
codex May 20, 2026
8f18704
Keep source target branch actions in manager
codex May 20, 2026
cfd39a3
Render branch graph from metadata fallback
codex May 20, 2026
846625d
Explain missing plugin merge drivers
codex May 20, 2026
cb781d9
Clarify conflict resolution labels
codex May 20, 2026
b1c9035
Fix branch action wording test
codex May 20, 2026
a066bdb
Guard shared SQLite helper declarations
codex May 20, 2026
700b0c6
Keep release verify cache non-blocking
codex May 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/workflows/release-verify.yml
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,7 @@ jobs:
# includes every input that affects the produced binaries.
- name: Cache .build
uses: actions/cache@v5
continue-on-error: true
with:
path: .build
key: >-
Expand Down
23 changes: 22 additions & 1 deletion crates/forkpress-cli/src/app.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4037,6 +4037,7 @@ fn cow_branch_command(
let mut apply = false;
let mut apply_reviewed = false;
let mut after_revalidate = false;
let mut replace_applied = false;
let mut note: Option<String> = None;
let mut reviewer: Option<String> = None;
let mut run: Option<String> = None;
Expand All @@ -4062,6 +4063,10 @@ fn cow_branch_command(
after_revalidate = true;
index += 1;
}
"--replace-applied" => {
replace_applied = true;
index += 1;
}
"--note" => {
let Some(value) = args.args.get(index + 1) else {
bail!("--note requires text");
Expand Down Expand Up @@ -4104,6 +4109,20 @@ fn cow_branch_command(
if !apply_reviewed && choice.is_none() {
bail!("branch merge-resolve requires --choice source|target or --apply-reviewed");
}
if replace_applied && record_type != "conflict" {
bail!(
"--replace-applied can only be used with `forkpress branch merge-resolve conflict <id>`"
);
}
if replace_applied && apply_reviewed {
bail!("--replace-applied cannot be combined with --apply-reviewed");
}
if replace_applied && !apply {
bail!("--replace-applied requires --apply");
}
if replace_applied && after_revalidate {
bail!("--replace-applied cannot be combined with --after-revalidate");
}
if record_type == "conflict-key" {
resolve_cow_merge_conflict_key(
&layout,
Expand All @@ -4128,6 +4147,7 @@ fn cow_branch_command(
apply,
apply_reviewed,
after_revalidate,
replace_applied,
note.as_deref(),
reviewer.as_deref(),
)?;
Expand Down Expand Up @@ -4215,7 +4235,7 @@ fn branch_help_text(command: Option<&str>) -> &'static str {
"Usage: forkpress branch merge-review <conflict|decision|resolution> <id> --status <pending|needs-action|reviewed> --note <text> [--reviewer <name>]\n forkpress branch merge-review conflict-key <key> [--run <id>] --status <pending|needs-action|reviewed> --note <text> [--reviewer <name>]\n\nAttach review metadata to an audit record. Reviewing by conflict key is allowed only when the key identifies one unresolved conflict, or when --run disambiguates it.\n"
}
Some("merge-resolve") => {
"Usage: forkpress branch merge-resolve conflict <id> (--choice <source|target> [--apply]|--apply-reviewed) [--after-revalidate] [--note <text>] [--reviewer <name>]\n forkpress branch merge-resolve conflict-key <key> [--run <id>] (--choice <source|target> [--apply]|--apply-reviewed) [--after-revalidate] [--note <text>] [--reviewer <name>]\n\nValidate or apply a reviewed merge conflict choice. Resolving by conflict key is allowed only when the key identifies one unresolved conflict, or when --run disambiguates it. Use --apply-reviewed to apply the latest validated choice. Use --after-revalidate only after merge-audit --revalidate has carried a stale DB row/cell, file conflict, or compatible source-added schema index/view/trigger conflict back to needs-action.\n"
"Usage: forkpress branch merge-resolve conflict <id> (--choice <source|target> [--apply]|--apply-reviewed) [--after-revalidate] [--replace-applied] [--note <text>] [--reviewer <name>]\n forkpress branch merge-resolve conflict-key <key> [--run <id>] (--choice <source|target> [--apply]|--apply-reviewed) [--after-revalidate] [--note <text>] [--reviewer <name>]\n\nValidate or apply a reviewed merge conflict choice. Resolving by conflict key is allowed only when the key identifies one unresolved conflict, or when --run disambiguates it. Use --apply-reviewed to apply the latest validated choice. Use --after-revalidate only after merge-audit --revalidate has carried a stale DB row/cell, file conflict, or compatible source-added schema index/view/trigger conflict back to needs-action. Use --replace-applied with conflict <id>, --choice source|target, and --apply to change an already-applied DB cell conflict resolution when the target cell still matches the previous applied resolution.\n"
}
Some("merge-apply-reviewed") => {
"Usage: forkpress branch merge-apply-reviewed [--run <id>] [--limit <n>] [--note <text>] [--reviewer <name>] [--format text|json]\n\nApply every currently validated, unapplied generic conflict resolution in the review queue. Inspect the same queue first with `forkpress branch merge-audit --next-action apply-reviewed-choice`.\n"
Expand Down Expand Up @@ -6968,6 +6988,7 @@ mod git_helper_tests {
branch_help_text(Some("merge-resolve"))
.contains("source-added schema index/view/trigger")
);
assert!(branch_help_text(Some("merge-resolve")).contains("--replace-applied"));
assert!(branch_help_text(None).contains("merge-apply-reviewed"));
assert!(branch_help_text(Some("merge-apply-reviewed")).contains("apply-reviewed-choice"));
assert!(branch_help_text(None).contains("conflicts [options]"));
Expand Down
4 changes: 4 additions & 0 deletions crates/forkpress-storage/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1937,6 +1937,7 @@ pub fn resolve_cow_merge_conflict(
apply: bool,
apply_reviewed: bool,
after_revalidate: bool,
replace_applied: bool,
note: Option<&str>,
reviewer: Option<&str>,
) -> Result<()> {
Expand All @@ -1961,6 +1962,9 @@ pub fn resolve_cow_merge_conflict(
if after_revalidate {
args.push("--after-revalidate".into());
}
if replace_applied {
args.push("--replace-applied".into());
}
if let Some(note) = note {
args.push("--note".into());
args.push(note.into());
Expand Down
Binary file added docs/assets/pr-395/branch-timeline.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/assets/pr-395/conflict-mobile.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/assets/pr-395/conflict-theme.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading