You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Documented the new UX loop, drop-in action, and demo.
README.md now walks through record ➜ timeline ➜ export, highlights the composite GitHub Action usage, and points to the flaky CI demo flow.
docs/quickstart.md updated to use the built-in flaky demo with a timeline step before export.
CHANGELOG.md and docs/releases/release-notes.md add a v2.1 entry for the timeline command, GitHub Action, and demo.
**DiffKeeper is a "Black Box Flight Recorder" for your containers.**
6
+
**DiffKeeper is a Black Box Flight Recorder for your containers.**
7
7
8
-
It watches your application's filesystem in real-time and records every change. When a container crashes—or a CI test flakes—you can rewind the state to any exact moment in time to see exactly what happened.
8
+
It watches your application's filesystem in real-time and records every change. When a container crashes—or a CI test flakes—you can rewind the state to any exact moment and see exactly what happened.
9
9
10
-
> **Note:**This project previously focused on "Stateful Containers" and database persistence. That architecture has been archived. See [Genesis & Pivot](docs/GENESIS_AND_PIVOT.md) for the story.
10
+
> **Note:**The earlier "stateful containers" design is archived. See [Genesis & Pivot](docs/GENESIS_AND_PIVOT.md) for the story.
11
11
12
12
---
13
13
@@ -17,33 +17,67 @@ You have a flaky test in CI. It fails 1 out of 50 times. You re-run the job, and
17
17
* They don't show you that a config file was corrupted, a temp file was locked, or a binary was overwritten.
18
18
19
19
## The Solution: Instant Replay
20
-
DiffKeeper uses eBPF to capture filesystem writes at line-rate and stores them in a high-speed log (Pebble).
20
+
DiffKeeper uses eBPF to capture filesystem writes at line-rate and stores them in Pebble. Then it gives you a timeline so you never guess timestamps again.
21
21
22
-
### 1. Record a Session
23
-
Wrap your flaky test (or command) with `diffkeeper record`. It adds minimal overhead.
22
+
### 1) Record a Session
23
+
Wrap your flaky test (or any command). Minimal overhead.
24
24
25
25
```bash
26
-
# In your local terminal or CI pipeline
27
26
diffkeeper record --state-dir=/tmp/trace -- go test ./...
28
27
```
29
28
30
-
### 2. Export the "Crash Site"
31
-
The test failed! But the container is gone. No problem—DiffKeeper saved the history. Restore the filesystem to exactly 2 minutes and 14 seconds into the run:
29
+
### 2) See the Timeline (no blindfolds)
30
+
List every write in order to pick the exact second to rewind:
Now `cd ./debug_fs` and explore the files exactly as they existed at that moment.
46
+
`cd ./debug_fs` and inspect files exactly as they existed at that moment.
47
+
48
+
## Drop-in GitHub Action
49
+
No curl | sh snippets needed—use the composite action directly:
50
+
51
+
```yaml
52
+
steps:
53
+
- uses: actions/checkout@v4
54
+
- name: Record flaky test
55
+
uses: saworbit/diffkeeper@v1
56
+
with:
57
+
command: go test ./...
58
+
state-dir: diffkeeper-trace
59
+
```
60
+
61
+
On failure the trace uploads as an artifact; you can run `diffkeeper timeline` to find the culprit write, then `diffkeeper export` to reconstruct it locally.
62
+
63
+
## The "Flaky CI" Demo
64
+
Run the built-in demo to see the loop end-to-end:
65
+
66
+
```bash
67
+
diffkeeper record --state-dir=./trace -- go run ./demo/flaky-ci-test
cat ./restored/status.log # ERROR: Connection Lost
71
+
```
38
72
39
73
## Architecture
40
74
- **Engine:** Pure Go + eBPF (CO-RE)
41
-
-**Storage:** Pebble (LSM Tree) for high-speed ingestion.
42
-
-**Diffing:** bsdiff (Binary patches) for efficient storage.
75
+
- **Storage:** Pebble (LSM) for high-speed ingestion.
76
+
- **Diffing:** bsdiff (binary patches) for efficient storage.
43
77
44
78
## CI / Dogfooding
45
-
- GitHub Actions (`.github/workflows/ci.yml`) runs unit/race tests, cross-platform builds, and a functional "timemachine" test that records a flaky script and verifies exports at multiple timestamps.
46
-
-The BoltDBera workflows are archived under `docs/archive/v1-legacy/workflows/`.
79
+
- GitHub Actions (`.github/workflows/ci.yml`) runs unit/race tests, cross-platform builds, and a functional time-machine test that records a flaky script and verifies exports.
80
+
- BoltDB-era workflows remain archived under `docs/archive/v1-legacy/workflows/`.
47
81
48
82
## Getting Started
49
-
See the [Quickstart](docs/quickstart.md) to record your first trace.
83
+
See the [Quickstart](docs/quickstart.md) to record, view the timeline, and export your first trace.
Copy file name to clipboardExpand all lines: docs/releases/release-notes.md
+15Lines changed: 15 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,5 +1,20 @@
1
1
# DiffKeeper Release Notes
2
2
3
+
## v2.1 "Timeline UX" - November 28, 2025
4
+
5
+
**Status:** Preview (ready for CI adoption)
6
+
7
+
### Highlights
8
+
-**Timeline CLI:**`diffkeeper timeline` streams a chronological feed of filesystem writes with relative timestamps, so export targets are never a guess.
9
+
-**GitHub Action:** Composite `action.yml` enables `uses: saworbit/diffkeeper@v1` with automatic artifact upload of traces on failure.
10
+
-**Flaky Demo:** Added `demo/flaky-ci-test` and doc updates (README/quickstart) to show record ➜ timeline ➜ export in a few seconds.
11
+
12
+
### Notes
13
+
- Timeline reads Pebble metadata in read-only mode; no impact on recorded traces.
14
+
- Action installs via release installer and runs `diffkeeper record` with sudo to attach eBPF on Linux runners.
0 commit comments