Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
59 commits
Select commit Hold shift + click to select a range
38c8acb
feat: enforce conflict recovery policy
cosentinode Jul 14, 2026
0fdb1e4
fix: revalidate conflict recovery state
cosentinode Jul 14, 2026
c8f0f9a
fix: protect rebase recovery refs
cosentinode Jul 14, 2026
168f0dc
fix: preflight deferred sequence policy
cosentinode Jul 14, 2026
025b34f
fix: protect ignored recovery data
cosentinode Jul 14, 2026
691dd2f
fix: bound exact recovery snapshots
cosentinode Jul 14, 2026
433d8c0
fix: fail closed on bounded recovery guards
cosentinode Jul 14, 2026
0595603
fix: protect recovery directory contents
cosentinode Jul 14, 2026
00e13d5
fix: fail closed at recovery execution
cosentinode Jul 14, 2026
9ae25d0
fix: execute recovery with ref fencing
cosentinode Jul 14, 2026
e459c8c
fix: fence recovery at execution boundary
cosentinode Jul 14, 2026
aa62cbd
fix: isolate recovery before atomic promotion
cosentinode Jul 14, 2026
29bd5b7
fix: fail closed without recovery capabilities
cosentinode Jul 15, 2026
a0aaa02
fix: preserve bounded recovery generations
cosentinode Jul 15, 2026
5f47c31
fix: close atomic recovery isolation gaps
cosentinode Jul 15, 2026
560ba61
fix: harden atomic recovery ownership
cosentinode Jul 15, 2026
83c420f
fix: secure atomic recovery copies
cosentinode Jul 15, 2026
b219d32
fix: close recovery isolation escapes
cosentinode Jul 15, 2026
23889b4
Merge origin/develop into issue-55-recovery-policy
cosentinode Jul 15, 2026
8fac167
Merge remote-tracking branch 'origin/develop' into issue-55-recovery-…
cosentinode Jul 15, 2026
c152899
fix: classify recovery policy operations
cosentinode Jul 15, 2026
87c246c
fix: preserve changed recovery backups
cosentinode Jul 15, 2026
0cc1a1e
fix: reject nested recovery mounts
cosentinode Jul 15, 2026
039e950
fix: close recovery promotion and cleanup races
cosentinode Jul 15, 2026
0d53d75
fix: bound recovery commands and directory reads
cosentinode Jul 15, 2026
8abedc7
fix: close remaining recovery races
cosentinode Jul 15, 2026
8917d61
fix: fence recovery generations and processes
cosentinode Jul 15, 2026
d032e39
fix: close recovery review races
cosentinode Jul 15, 2026
dd03ab3
fix: fail closed on unsafe recovery isolation
cosentinode Jul 15, 2026
fd20411
Merge remote-tracking branch 'origin/develop' into issue-55-recovery-…
cosentinode Jul 15, 2026
2fd6643
fix: simplify conflict recovery execution
cosentinode Jul 15, 2026
f315360
fix: bound exact recovery execution
cosentinode Jul 15, 2026
21e7413
fix: harden bounded recovery invocation
cosentinode Jul 15, 2026
0c22e68
fix: hard-cap recovery output files
cosentinode Jul 15, 2026
8856600
fix: close recovery execution gaps
cosentinode Jul 15, 2026
09a6afc
fix: preserve recovery planning on Windows
cosentinode Jul 15, 2026
90ebf08
fix: close recovery concurrency boundaries
cosentinode Jul 15, 2026
6918205
fix: close recovery process escapes
cosentinode Jul 15, 2026
dddd4d3
Merge remote-tracking branch 'origin/develop' into issue-55-recovery-…
cosentinode Jul 15, 2026
c2137df
fix: fail closed on recovery inputs
cosentinode Jul 15, 2026
922a5b9
fix: harden recovery serialization
cosentinode Jul 15, 2026
6cd9065
fix: close recovery platform gaps
cosentinode Jul 15, 2026
7460515
fix: correct portable recovery checks
cosentinode Jul 15, 2026
a513b89
test: stabilize Windows output bound
cosentinode Jul 15, 2026
48551b1
fix: close remaining recovery races
cosentinode Jul 15, 2026
ad8936d
fix: fence final recovery inputs
cosentinode Jul 17, 2026
ffad67a
fix: permit Windows identity rechecks
cosentinode Jul 17, 2026
a103672
test: fix Windows recovery replacement setup
cosentinode Jul 17, 2026
a7fb8db
test: scope lock directory race to Unix
cosentinode Jul 17, 2026
cbd47eb
fix: address recovery safety review
cosentinode Jul 17, 2026
76a39bb
Merge origin/develop into issue-55-recovery-policy
cosentinode Jul 17, 2026
ea00099
test: restore recovery platform coverage
cosentinode Jul 17, 2026
5891bf9
fix: fingerprint ignored recovery inputs
cosentinode Jul 17, 2026
dab7f21
fix: scope recovery safety fences
cosentinode Jul 17, 2026
cd9f6a0
fix: close recovery execution races
cosentinode Jul 17, 2026
2e6097b
Merge remote-tracking branch 'origin/develop' into issue-55-recovery-…
cosentinode Jul 17, 2026
f4ffe98
fix: close recovery review gaps
cosentinode Jul 17, 2026
9c0feaa
fix: avoid interrupting mutating recovery
cosentinode Jul 17, 2026
f47a1bc
test: stabilize recovery fixture line endings
cosentinode Jul 17, 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
26 changes: 25 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ jobs:
with:
components: clippy, rustfmt

- name: Validate release workflow
- name: Validate workflows
shell: bash
run: |
set -euo pipefail
Expand All @@ -65,6 +65,7 @@ jobs:
echo "8aca8db96f1b94770f1b0d72b6dddcb1ebb8123cb3712530b08cc387b349a3d8 ${tool_dir}/${archive}" | sha256sum -c -
tar -C "${tool_dir}" -xzf "${tool_dir}/${archive}" actionlint
"${tool_dir}/actionlint"
bash scripts/test-ci-workflow.sh
bash scripts/test-release-workflow.sh

- name: Validate Linux installation documentation
Expand All @@ -83,6 +84,29 @@ jobs:
- name: Build
run: cargo build --locked --workspace

recovery-platforms:
name: Recovery safety (${{ matrix.os }})
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os:
- macos-latest
- windows-latest

steps:
- name: Checkout
uses: actions/checkout@v5

- name: Install Rust
uses: dtolnay/rust-toolchain@stable

- name: Test end-to-end recovery support
run: cargo test --locked -p bitbygit-git recovery_platform_

- name: Build workspace
run: cargo build --locked --workspace

installation-docs-macos:
name: macOS installation docs
runs-on: macos-15
Expand Down
128 changes: 128 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,12 +53,13 @@ Package-manager distribution is not currently available.
Prerequisites:

- Rust 1.85 or newer.
- `git` available on `PATH`.
- Git 2.42 or newer available on `PATH` (required for guarded conflict recovery).
- `gh` is optional and required only for GitHub-specific workflows.

Run local checks:

```sh
bash scripts/test-ci-workflow.sh
bash scripts/test-release-workflow.sh
bash scripts/test-installation-docs.sh
cargo fmt --all --check
Expand Down
42 changes: 42 additions & 0 deletions crates/bitbygit-core/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ pub enum OperationRequest {
Rebase {
base: String,
},
Recover(RecoveryRequest),
OpenPullRequest {
base: Option<String>,
},
Expand All @@ -49,6 +50,32 @@ pub enum OperationRequest {
},
}

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum RecoveryRequest {
MergeContinue,
MergeAbort,
RebaseContinue,
RebaseAbort,
RebaseSkip,
}

impl RecoveryRequest {
pub const fn operation_label(self) -> &'static str {
match self {
Self::MergeContinue | Self::MergeAbort => "merge",
Self::RebaseContinue | Self::RebaseAbort | Self::RebaseSkip => "rebase",
}
}

pub const fn action_label(self) -> &'static str {
match self {
Self::MergeContinue | Self::RebaseContinue => "continue",
Self::MergeAbort | Self::RebaseAbort => "abort",
Self::RebaseSkip => "skip",
}
}
}

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum OperationKind {
RefreshStatus,
Expand All @@ -68,6 +95,11 @@ pub enum OperationKind {
CreateBranch,
MergeFastForward,
Rebase,
MergeContinue,
MergeAbort,
RebaseContinue,
RebaseAbort,
RebaseSkip,
OpenPullRequest,
}

Expand All @@ -90,6 +122,11 @@ impl OperationKind {
Self::CreateBranch => "create branch",
Self::MergeFastForward => "merge",
Self::Rebase => "rebase",
Self::MergeContinue => "merge continue",
Self::MergeAbort => "merge abort",
Self::RebaseContinue => "rebase continue",
Self::RebaseAbort => "rebase abort",
Self::RebaseSkip => "rebase skip",
Self::OpenPullRequest => "open pull request",
}
}
Expand All @@ -113,6 +150,11 @@ impl OperationKind {
Self::CreateBranch => "create_branch",
Self::MergeFastForward => "merge_ff_only",
Self::Rebase => "rebase",
Self::MergeContinue => "merge_continue",
Self::MergeAbort => "merge_abort",
Self::RebaseContinue => "rebase_continue",
Self::RebaseAbort => "rebase_abort",
Self::RebaseSkip => "rebase_skip",
Self::OpenPullRequest => "open_pull_request",
}
}
Expand Down
Loading
Loading