feat(rust): scaffold workspace + parity harness (phase-0)

Bootstrap the Rust port of Headroom. Additive only — no existing Python
code modified. Ships the workshop, not the widgets.

Layout
  Cargo.toml (workspace) + rust-toolchain.toml
  crates/headroom-core    — transform library, stub only
  crates/headroom-proxy   — axum binary, /healthz only
  crates/headroom-py      — PyO3 cdylib, exposes headroom._core.hello()
  crates/headroom-parity  — Rust-vs-Python oracle harness + parity-run CLI

Tooling
  Makefile: test, test-parity, bench, build-proxy, build-wheel, fmt, lint
  .github/workflows/rust.yml: test, wheels (linux/mac), audit, parity-nightly
  deny.toml for cargo-deny

Parity corpus
  tests/parity/recorder.py + scripts/record_fixtures.py
  125 recorded fixtures across 5 leaf transforms (ccr, tokenizer,
  log_compressor, diff_compressor, cache_aligner)

Docs
  RUST_DEV.md — developer setup and workspace reference
  docs/spec/022-rust-migration.md — migration plan and stage breakdown

.gitignore: whitelist scripts/record_fixtures.py; ignore target/

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
chopratejas 2026-04-24 13:39:48 -07:00
parent a1d9832e27
commit 0414cb70e4
148 changed files with 7292 additions and 0 deletions

123
.github/workflows/rust.yml vendored Normal file
View file

@ -0,0 +1,123 @@
name: rust
on:
push:
branches: [ main, rust-rewrite ]
paths:
- 'crates/**'
- 'Cargo.toml'
- 'Cargo.lock'
- 'rust-toolchain.toml'
- 'tests/parity/**'
- 'Makefile'
- '.github/workflows/rust.yml'
pull_request:
paths:
- 'crates/**'
- 'Cargo.toml'
- 'Cargo.lock'
- 'rust-toolchain.toml'
- 'tests/parity/**'
- 'Makefile'
- '.github/workflows/rust.yml'
schedule:
# Nightly parity run at 07:17 UTC (weekdays only). Phase 0 allows failure.
- cron: '17 7 * * 1-5'
concurrency:
group: rust-${{ github.ref }}
cancel-in-progress: true
jobs:
test:
name: test (ubuntu)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install stable toolchain
uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt, clippy
- name: Cache cargo registry + build
uses: Swatinem/rust-cache@v2
- name: cargo fmt --check
run: cargo fmt --all -- --check
- name: cargo clippy
run: cargo clippy --workspace -- -D warnings
- name: cargo test
run: cargo test --workspace
wheels:
name: wheels (${{ matrix.target }})
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-latest
target: x86_64-unknown-linux-gnu
maturin-target: x86_64
- os: macos-14
target: aarch64-apple-darwin
maturin-target: aarch64-apple-darwin
- os: macos-13
target: x86_64-apple-darwin
maturin-target: x86_64-apple-darwin
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Build wheel
uses: PyO3/maturin-action@v1
with:
command: build
args: --release -m crates/headroom-py/pyproject.toml --out dist
target: ${{ matrix.maturin-target }}
- name: Upload wheel artifact
uses: actions/upload-artifact@v4
with:
name: wheels-${{ matrix.target }}
path: dist/*.whl
audit:
name: audit
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- name: Install cargo-audit + cargo-deny
run: |
cargo install --locked cargo-audit || true
cargo install --locked cargo-deny || true
- name: cargo audit (soft-fail)
continue-on-error: true
run: cargo audit
- name: cargo deny check licenses
continue-on-error: true
run: cargo deny check licenses
parity-nightly:
name: parity (nightly, allowed to fail during Phase 0)
if: github.event_name == 'schedule'
runs-on: ubuntu-latest
continue-on-error: true
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- uses: actions/setup-python@v5
with:
python-version: '3.11'
- uses: Swatinem/rust-cache@v2
- name: Install deps
run: |
python -m venv .venv
source .venv/bin/activate
pip install --upgrade pip
pip install maturin
pip install -e .
- name: Run parity harness
run: |
source .venv/bin/activate
make test-parity

6
.gitignore vendored
View file

@ -13,6 +13,12 @@ scripts/*
!scripts/repro_codex_replay.py
!scripts/fixtures/
!scripts/fixtures/*.json
!scripts/record_fixtures.py
# Rust / Cargo build artifacts
/target/
**/target/
Cargo.lock.bak
# Swift SDK (separate repo)
swift/

1797
Cargo.lock generated Normal file

File diff suppressed because it is too large Load diff

39
Cargo.toml Normal file
View file

@ -0,0 +1,39 @@
[workspace]
resolver = "2"
members = [
"crates/headroom-core",
"crates/headroom-proxy",
"crates/headroom-py",
"crates/headroom-parity",
]
# headroom-py is a Python extension module — it must be built via maturin, not
# plain cargo (the "extension-module" feature tells pyo3 not to link libpython,
# which is required for `import` to work). `cargo build --workspace` without
# explicit members skips it; `cargo test --workspace` still runs its tests
# because pyo3 can dynamically link here for the cdylib used by tests.
default-members = [
"crates/headroom-core",
"crates/headroom-proxy",
"crates/headroom-parity",
]
[workspace.package]
edition = "2021"
rust-version = "1.78"
license = "Apache-2.0"
repository = "https://github.com/chopratejas/headroom"
authors = ["Headroom Maintainers"]
[workspace.dependencies]
serde = { version = "1", features = ["derive"] }
serde_json = "1"
bytes = "1"
thiserror = "1"
tracing = "0.1"
anyhow = "1"
clap = { version = "4", features = ["derive"] }
tokio = { version = "1", features = ["macros", "rt-multi-thread", "signal"] }
axum = "0.7"
tower = "0.5"
reqwest = { version = "0.12", default-features = false, features = ["json", "rustls-tls"] }
pyo3 = "0.22"

58
Makefile Normal file
View file

@ -0,0 +1,58 @@
# Headroom Rust build targets. `just` is not installed on dev boxes; this
# Makefile is the source of truth and is mirrored by .github/workflows/rust.yml.
SHELL := /bin/bash
CARGO ?= cargo
MATURIN ?= maturin
PYTHON ?= python3
FIXTURES ?= tests/parity/fixtures
.PHONY: help test test-parity bench build-proxy build-wheel fmt fmt-check lint clippy clean
help:
@echo "Headroom Rust targets:"
@echo " make test - cargo test --workspace"
@echo " make test-parity - maturin develop + parity-run against fixtures"
@echo " make bench - cargo bench --workspace"
@echo " make build-proxy - release build + strip headroom-proxy, print size"
@echo " make build-wheel - release wheel for headroom-py"
@echo " make fmt - cargo fmt --all"
@echo " make fmt-check - cargo fmt --all -- --check"
@echo " make lint - cargo clippy --workspace -- -D warnings"
@echo " make clean - cargo clean"
test:
$(CARGO) test --workspace
test-parity:
@if [ -z "$$VIRTUAL_ENV" ]; then \
echo "error: activate a venv first (e.g. source .venv/bin/activate)"; \
exit 1; \
fi
$(MATURIN) develop -m crates/headroom-py/pyproject.toml
$(CARGO) run -p headroom-parity -- run --fixtures $(FIXTURES)
bench:
$(CARGO) bench --workspace
build-proxy:
$(CARGO) build --release -p headroom-proxy
@BIN=target/release/headroom-proxy; \
if command -v strip >/dev/null 2>&1; then strip "$$BIN" || true; fi; \
SIZE=$$(wc -c < "$$BIN"); \
printf 'headroom-proxy: %s bytes (%.1f MiB)\n' "$$SIZE" "$$(echo "$$SIZE / 1048576" | bc -l)"
build-wheel:
$(MATURIN) build --release -m crates/headroom-py/pyproject.toml
fmt:
$(CARGO) fmt --all
fmt-check:
$(CARGO) fmt --all -- --check
clippy lint:
$(CARGO) clippy --workspace -- -D warnings
clean:
$(CARGO) clean

142
RUST_DEV.md Normal file
View file

@ -0,0 +1,142 @@
# Headroom Rust Rewrite — Developer Guide
This document covers the Rust port of Headroom. It is the only new top-level
doc created in Phase 0; longer-form design/plan writeups live elsewhere and
are not versioned in this repo.
## Workspace layout
```
Cargo.toml # workspace root
rust-toolchain.toml # pins stable rustc with rustfmt+clippy
crates/
headroom-core/ # library: shared types + transform trait surface
headroom-proxy/ # binary: axum /healthz (Phase 2 grows this)
headroom-py/ # PyO3 cdylib exposing `headroom._core`
headroom-parity/ # lib + `parity-run` CLI for Python parity tests
tests/parity/
fixtures/<transform>/*.json # recorded Python outputs (Phase 1 ports match)
recorder.py # Python-side fixture recorder
scripts/record_fixtures.py # entry point for running the recorder
```
`cargo build --workspace` builds every crate. `default-members` drops
`headroom-py` from `cargo run`/bare-`cargo test` flows so that `cargo test
--workspace` does not try to execute the PyO3 cdylib standalone (it can't
find `libpython` without a Python interpreter hosting it).
## Common commands
`just` is not installed on dev boxes here; a `Makefile` at the repo root
exposes the same targets:
| Target | What it does |
| --- | --- |
| `make test` | `cargo test --workspace` |
| `make test-parity` | Builds `headroom-py` via maturin, runs `parity-run run` |
| `make bench` | `cargo bench --workspace` |
| `make build-proxy` | Release-builds `headroom-proxy`, strips, prints size |
| `make build-wheel` | `maturin build --release -m crates/headroom-py/pyproject.toml` |
| `make fmt` | `cargo fmt --all` |
| `make lint` | `cargo fmt --check` + `cargo clippy --workspace -- -D warnings` |
## Running the proxy
```bash
cargo run -p headroom-proxy
# or
make build-proxy
./target/release/headroom-proxy
# then
curl -s http://127.0.0.1:8787/healthz
# => {"ok":true}
```
## Maturin + Python wiring
`headroom-py` is a PyO3 cdylib that exposes `headroom._core` in Python. The
`extension-module` feature is opt-in so plain `cargo build --workspace` does
not try to link against `libpython` on systems that don't have it.
### First-time setup (clean venv recommended)
```bash
python3.11 -m venv /tmp/hr-rust-venv
source /tmp/hr-rust-venv/bin/activate
pip install maturin
cd crates/headroom-py
maturin develop # editable dev build, installs headroom._core
cd /tmp # IMPORTANT: step out of the repo root first
python -c "from headroom._core import hello; print(hello())"
# => headroom-core
```
> Why `cd /tmp`? The repo root also contains the Python `headroom/` package.
> Running the smoke import from the repo root makes Python resolve `headroom`
> to `./headroom/__init__.py` (the full SDK, which pulls in heavy deps) instead
> of the lightweight namespace package installed by maturin. Tests should
> either run outside the repo root, or ensure `headroom` is installed into
> the same venv (then the maturin-installed `_core.so` lands alongside it and
> both imports resolve).
### Release wheels
```bash
make build-wheel
# wheels land under target/wheels/
```
CI (`.github/workflows/rust.yml`) builds linux-x86_64, macos-arm64, and
macos-x86_64 wheels via `PyO3/maturin-action` and uploads them as artifacts.
## Parity harness
`crates/headroom-parity` owns the Rust-vs-Python oracle:
- JSON fixtures under `tests/parity/fixtures/<transform>/` (schema:
`{ transform, input, config, output, recorded_at, input_sha256 }`).
- `TransformComparator` trait — one impl per transform. Phase 0 stubs return
`Err(...)`; the harness flags those as `Skipped`, not panics.
- `parity-run` CLI: `cargo run -p headroom-parity -- run [--only TRANSFORM]`.
- Unit tests in `crates/headroom-parity/src/lib.rs` include a **negative
test** (`harness_reports_diff_for_divergent_comparator`) proving the
harness detects mismatched output before any real port lands.
### Recording fresh fixtures
```bash
source .venv/bin/activate # the main Python SDK venv
python scripts/record_fixtures.py # uses tests/parity/recorder.py
ls tests/parity/fixtures/*/ | sort | uniq -c
```
The recorder monkey-patches the in-process transform classes (see
`record_all()` in `tests/parity/recorder.py`). It does **not** modify any
file under `headroom/`.
## Phase 0 Blockers
These are known limitations for Phase 0. They are tracked here so Phase 1
doesn't rediscover them.
- **`cache_aligner` fixtures**: `CacheAligner.apply()` takes
`(messages, tokenizer, **kwargs)` — a `Tokenizer` is provider-specific and
its cheapest `NoopTokenCounter` / `TiktokenTokenCounter` construction still
requires pulling `headroom.providers.*` which imports the full observability
stack (opentelemetry, etc). The recorder records `cache_aligner` only if a
usable tokenizer is cheaply available; otherwise it logs a blocker and
skips. See `recorder.py::_build_cache_aligner_tokenizer`.
- **`ccr` is not a single class**: The repo has `CCRToolInjector`,
`CCRResponseHandler`, `CCRToolCall`, `CCRToolResult` etc. rather than a
single `CCR` class. The recorder targets the encoder-style entry point
most analogous to the Rust port (`CCRToolInjector.inject_tool` and
`CCRResponseHandler.parse_response`). If Phase 1 wants a different split
it should update `recorder.py::record_all` accordingly.
- **Pre-commit hook noise**: `scripts/sync-plugin-versions.py` mutates
`.claude-plugin/marketplace.json`, `.github/plugin/marketplace.json`, and
`plugins/headroom-agent-hooks/**/plugin.json` on every commit. Those
changes are harmless but each commit in Phase 0 picks them up. Phase 1
does not need to do anything special — just let the hook run.
- **`rust-toolchain.toml`** pins `channel = "stable"` rather than a specific
version so CI picks up the same toolchain the local box uses. Tighten to a
pinned version (e.g. `1.78`) once the port stabilizes.

View file

@ -0,0 +1,15 @@
[package]
name = "headroom-core"
version = "0.1.0"
edition.workspace = true
rust-version.workspace = true
license.workspace = true
repository.workspace = true
description = "Core Headroom types and compression transform traits (Rust)."
[dependencies]
serde = { workspace = true }
serde_json = { workspace = true }
bytes = { workspace = true }
thiserror = { workspace = true }
tracing = { workspace = true }

View file

@ -0,0 +1,21 @@
//! headroom-core: foundation crate for the Rust port of Headroom.
//!
//! Phase 0: only exposes stubs. No algorithm implementations yet.
pub mod transforms;
/// Identity stub used by downstream crates and the Python binding to verify
/// linkage end-to-end.
pub fn hello() -> &'static str {
"headroom-core"
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn hello_returns_crate_name() {
assert_eq!(hello(), "headroom-core");
}
}

View file

@ -0,0 +1,2 @@
//! Transform trait namespace. Deliberately empty in Phase 0 — ports land in
//! Phase 1 (log_compressor, diff_compressor, cache_aligner, tokenizer, ccr).

View file

@ -0,0 +1,26 @@
[package]
name = "headroom-parity"
version = "0.1.0"
edition.workspace = true
rust-version.workspace = true
license.workspace = true
repository.workspace = true
description = "Rust-vs-Python parity harness for the Headroom port."
[lib]
path = "src/lib.rs"
[[bin]]
name = "parity-run"
path = "src/bin/parity_run.rs"
[dependencies]
serde = { workspace = true }
serde_json = { workspace = true }
anyhow = { workspace = true }
clap = { workspace = true }
thiserror = { workspace = true }
headroom-core = { path = "../headroom-core" }
# NOTE: Phase 0 does not invoke Python from Rust. Phase 1 adds `pyo3` with
# `auto-initialize` here so comparators can call into the installed
# `headroom` package directly.

View file

@ -0,0 +1,78 @@
//! `parity-run` CLI: drive the parity harness from the command line.
use anyhow::Result;
use clap::{Parser, Subcommand};
use headroom_parity::{builtin_comparators, run_comparator};
use std::path::PathBuf;
#[derive(Parser, Debug)]
#[command(
name = "parity-run",
about = "Run Headroom Rust-vs-Python parity checks"
)]
struct Cli {
#[command(subcommand)]
cmd: Cmd,
}
#[derive(Subcommand, Debug)]
enum Cmd {
/// Run all built-in comparators against fixtures under --fixtures.
Run {
#[arg(long, default_value = "tests/parity/fixtures")]
fixtures: PathBuf,
/// Only run this comparator (by transform name).
#[arg(long)]
only: Option<String>,
},
/// List the transforms the harness knows about.
List,
}
fn main() -> Result<()> {
let cli = Cli::parse();
match cli.cmd {
Cmd::List => {
for c in builtin_comparators() {
println!("{}", c.name());
}
Ok(())
}
Cmd::Run { fixtures, only } => {
let mut any_diffs = false;
for comparator in builtin_comparators() {
if let Some(ref filt) = only {
if filt != comparator.name() {
continue;
}
}
let report = run_comparator(&fixtures, comparator.as_ref())?;
println!(
"[{:<16}] total={} matched={} skipped={} diffed={}",
comparator.name(),
report.total(),
report.matched,
report.skipped.len(),
report.diffed.len()
);
for (path, reason) in &report.skipped {
println!(" skipped {}: {}", path.display(), reason);
}
for (path, expected, actual) in &report.diffed {
any_diffs = true;
println!(" DIFF {}", path.display());
println!(" expected: {}", first_line(expected));
println!(" actual : {}", first_line(actual));
}
}
if any_diffs {
std::process::exit(1);
}
Ok(())
}
}
}
fn first_line(s: &str) -> String {
s.lines().next().unwrap_or("").to_string()
}

View file

@ -0,0 +1,308 @@
//! Parity harness: load JSON fixtures recorded from the Python implementation,
//! run the Rust port, and compare outputs.
//!
//! Phase 0: the per-transform comparators are stubs (`todo!()`), but the
//! harness wiring (fixture loading, dispatch, diff reporting) is real and
//! covered by a negative test.
use anyhow::{bail, Context, Result};
use serde::{Deserialize, Serialize};
use std::fs;
use std::path::{Path, PathBuf};
/// Recorded fixture schema. Matches `tests/parity/recorder.py`.
#[derive(Debug, Deserialize, Serialize, Clone)]
pub struct Fixture {
pub transform: String,
pub input: serde_json::Value,
#[serde(default)]
pub config: serde_json::Value,
pub output: serde_json::Value,
#[serde(default)]
pub recorded_at: String,
#[serde(default)]
pub input_sha256: String,
}
/// Outcome of comparing a recorded fixture against the current Rust impl.
#[derive(Debug, Clone)]
pub enum ComparisonOutcome {
Match,
Diff { expected: String, actual: String },
Skipped { reason: String },
}
/// Trait implemented by transform-specific comparators. A comparator receives
/// the fixture's input and config and produces a JSON value to compare against
/// `fixture.output`.
pub trait TransformComparator {
fn name(&self) -> &str;
fn run(
&self,
input: &serde_json::Value,
config: &serde_json::Value,
) -> Result<serde_json::Value>;
}
/// Compare a single fixture against a comparator and return an outcome.
pub fn compare_fixture(
comparator: &dyn TransformComparator,
fixture: &Fixture,
) -> Result<ComparisonOutcome> {
let actual = match comparator.run(&fixture.input, &fixture.config) {
Ok(v) => v,
Err(e) => {
return Ok(ComparisonOutcome::Skipped {
reason: format!("comparator error: {e}"),
})
}
};
if actual == fixture.output {
Ok(ComparisonOutcome::Match)
} else {
Ok(ComparisonOutcome::Diff {
expected: serde_json::to_string_pretty(&fixture.output)?,
actual: serde_json::to_string_pretty(&actual)?,
})
}
}
/// Load every `*.json` fixture under `dir/<transform>/`.
pub fn load_fixtures_for(dir: &Path, transform: &str) -> Result<Vec<(PathBuf, Fixture)>> {
let root = dir.join(transform);
if !root.exists() {
return Ok(Vec::new());
}
let mut out = Vec::new();
for entry in fs::read_dir(&root).with_context(|| format!("reading {}", root.display()))? {
let entry = entry?;
let path = entry.path();
if path.extension().and_then(|s| s.to_str()) != Some("json") {
continue;
}
let bytes = fs::read(&path).with_context(|| format!("reading {}", path.display()))?;
let fixture: Fixture = serde_json::from_slice(&bytes)
.with_context(|| format!("parsing fixture {}", path.display()))?;
if fixture.transform != transform {
bail!(
"fixture {} declares transform={} but lives under {}",
path.display(),
fixture.transform,
transform
);
}
out.push((path, fixture));
}
Ok(out)
}
/// Aggregate report of one comparator run.
#[derive(Debug, Default)]
pub struct Report {
pub matched: usize,
pub diffed: Vec<(PathBuf, String, String)>,
pub skipped: Vec<(PathBuf, String)>,
}
impl Report {
pub fn total(&self) -> usize {
self.matched + self.diffed.len() + self.skipped.len()
}
pub fn is_clean(&self) -> bool {
self.diffed.is_empty()
}
}
/// Run a comparator over every fixture under `dir/<transform>/` and return a
/// report. Propagates IO/parse errors but never panics on comparator errors —
/// those become `Skipped` entries.
pub fn run_comparator(dir: &Path, comparator: &dyn TransformComparator) -> Result<Report> {
let mut report = Report::default();
let fixtures = load_fixtures_for(dir, comparator.name())?;
for (path, fixture) in fixtures {
match compare_fixture(comparator, &fixture)? {
ComparisonOutcome::Match => report.matched += 1,
ComparisonOutcome::Diff { expected, actual } => {
report.diffed.push((path, expected, actual));
}
ComparisonOutcome::Skipped { reason } => {
report.skipped.push((path, reason));
}
}
}
Ok(report)
}
// --- Built-in comparator stubs ---------------------------------------------
//
// Phase 1 will replace `todo!()` bodies with real Rust ports. Until then they
// return `Err`, causing the harness to mark fixtures as `Skipped` instead of
// panicking. The parity-run binary wires them up so the CLI works today.
macro_rules! stub_comparator {
($ty:ident, $name:literal) => {
pub struct $ty;
impl TransformComparator for $ty {
fn name(&self) -> &str {
$name
}
fn run(
&self,
_input: &serde_json::Value,
_config: &serde_json::Value,
) -> Result<serde_json::Value> {
anyhow::bail!(concat!("comparator ", $name, " not implemented (Phase 0)"))
}
}
};
}
stub_comparator!(LogCompressorComparator, "log_compressor");
stub_comparator!(DiffCompressorComparator, "diff_compressor");
stub_comparator!(CacheAlignerComparator, "cache_aligner");
stub_comparator!(TokenizerComparator, "tokenizer");
stub_comparator!(CcrComparator, "ccr");
/// Every built-in comparator, in a stable order.
pub fn builtin_comparators() -> Vec<Box<dyn TransformComparator>> {
vec![
Box::new(LogCompressorComparator),
Box::new(DiffCompressorComparator),
Box::new(CacheAlignerComparator),
Box::new(TokenizerComparator),
Box::new(CcrComparator),
]
}
#[cfg(test)]
mod tests {
use super::*;
use std::io::Write;
/// A fake comparator that always returns "rust-output" regardless of
/// input. Paired with a fixture whose `output` is "python-output", this
/// proves the harness reports diffs correctly.
struct FakeDivergent;
impl TransformComparator for FakeDivergent {
fn name(&self) -> &str {
"fake_divergent"
}
fn run(
&self,
_input: &serde_json::Value,
_config: &serde_json::Value,
) -> Result<serde_json::Value> {
Ok(serde_json::json!("rust-output"))
}
}
struct FakeAgreeing;
impl TransformComparator for FakeAgreeing {
fn name(&self) -> &str {
"fake_agreeing"
}
fn run(
&self,
_input: &serde_json::Value,
_config: &serde_json::Value,
) -> Result<serde_json::Value> {
Ok(serde_json::json!("python-output"))
}
}
fn write_fixture(dir: &Path, transform: &str, name: &str, output: serde_json::Value) {
let sub = dir.join(transform);
fs::create_dir_all(&sub).unwrap();
let fixture = Fixture {
transform: transform.to_string(),
input: serde_json::json!("hello"),
config: serde_json::json!({}),
output,
recorded_at: "2026-04-23T00:00:00Z".to_string(),
input_sha256: "deadbeef".to_string(),
};
let mut f = fs::File::create(sub.join(format!("{name}.json"))).unwrap();
f.write_all(&serde_json::to_vec_pretty(&fixture).unwrap())
.unwrap();
}
#[test]
fn harness_reports_diff_for_divergent_comparator() {
let tmp = tempdir();
write_fixture(
tmp.path(),
"fake_divergent",
"case1",
serde_json::json!("python-output"),
);
let report = run_comparator(tmp.path(), &FakeDivergent).unwrap();
assert_eq!(report.total(), 1);
assert_eq!(report.matched, 0);
assert_eq!(report.diffed.len(), 1);
assert!(!report.is_clean());
let (_, expected, actual) = &report.diffed[0];
assert!(expected.contains("python-output"));
assert!(actual.contains("rust-output"));
}
#[test]
fn harness_reports_match_for_agreeing_comparator() {
let tmp = tempdir();
write_fixture(
tmp.path(),
"fake_agreeing",
"case1",
serde_json::json!("python-output"),
);
let report = run_comparator(tmp.path(), &FakeAgreeing).unwrap();
assert_eq!(report.matched, 1);
assert!(report.is_clean());
}
#[test]
fn missing_transform_dir_yields_empty_report() {
let tmp = tempdir();
let report = run_comparator(tmp.path(), &FakeAgreeing).unwrap();
assert_eq!(report.total(), 0);
}
#[test]
fn stub_comparators_skip_rather_than_panic() {
let tmp = tempdir();
write_fixture(
tmp.path(),
"log_compressor",
"case1",
serde_json::json!({"compressed": "x"}),
);
let report = run_comparator(tmp.path(), &LogCompressorComparator).unwrap();
assert_eq!(report.skipped.len(), 1);
assert_eq!(report.matched, 0);
}
/// Minimal tempdir helper to avoid a dev-dependency on `tempfile`.
struct TempDir(PathBuf);
impl TempDir {
fn path(&self) -> &Path {
&self.0
}
}
impl Drop for TempDir {
fn drop(&mut self) {
let _ = fs::remove_dir_all(&self.0);
}
}
fn tempdir() -> TempDir {
use std::time::{SystemTime, UNIX_EPOCH};
let nanos = SystemTime::now()
.duration_since(UNIX_EPOCH)
.unwrap()
.as_nanos();
let p = std::env::temp_dir().join(format!(
"headroom-parity-{nanos}-{:?}",
std::thread::current().id()
));
fs::create_dir_all(&p).unwrap();
TempDir(p)
}
}

View file

@ -0,0 +1,25 @@
[package]
name = "headroom-proxy"
version = "0.1.0"
edition.workspace = true
rust-version.workspace = true
license.workspace = true
repository.workspace = true
description = "Headroom compression proxy (Rust, axum)."
[[bin]]
name = "headroom-proxy"
path = "src/main.rs"
[dependencies]
axum = { workspace = true }
tokio = { workspace = true }
tower = { workspace = true }
tracing = { workspace = true }
reqwest = { workspace = true }
serde = { workspace = true }
serde_json = { workspace = true }
headroom-core = { path = "../headroom-core" }
[dev-dependencies]
tower = { workspace = true, features = ["util"] }

View file

@ -0,0 +1,57 @@
//! headroom-proxy: Rust proxy binary (Phase 0 scaffolding).
//!
//! Currently exposes only `/healthz`. Provider routes land in Phase 2.
use axum::{routing::get, Json, Router};
use serde_json::{json, Value};
use std::net::SocketAddr;
async fn healthz() -> Json<Value> {
Json(json!({ "ok": true }))
}
fn app() -> Router {
Router::new().route("/healthz", get(healthz))
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
tracing_subscriber_init();
let addr: SocketAddr = "127.0.0.1:8787".parse()?;
tracing::info!(%addr, crate_hello = headroom_core::hello(), "starting headroom-proxy");
let listener = tokio::net::TcpListener::bind(addr).await?;
axum::serve(listener, app()).await?;
Ok(())
}
fn tracing_subscriber_init() {
// Minimal no-op initializer so we don't pull tracing-subscriber in Phase 0.
// Replace with tracing-subscriber in Phase 2 when richer logging is needed.
}
#[cfg(test)]
mod tests {
use super::app;
use axum::body::Body;
use axum::http::{Request, StatusCode};
use tower::ServiceExt;
#[tokio::test]
async fn healthz_returns_ok() {
let response = app()
.oneshot(
Request::builder()
.uri("/healthz")
.body(Body::empty())
.unwrap(),
)
.await
.unwrap();
assert_eq!(response.status(), StatusCode::OK);
let bytes = axum::body::to_bytes(response.into_body(), 1024)
.await
.unwrap();
let value: serde_json::Value = serde_json::from_slice(&bytes).unwrap();
assert_eq!(value, serde_json::json!({"ok": true}));
}
}

View file

@ -0,0 +1,26 @@
[package]
name = "headroom-py"
version = "0.1.0"
edition.workspace = true
rust-version.workspace = true
license.workspace = true
repository.workspace = true
description = "PyO3 bindings exposing headroom-core to Python as headroom._core."
[lib]
name = "_core"
crate-type = ["cdylib"]
# Disable the default test harness — Rust `cargo test` can't run a cdylib that
# links against libpython without LD/DYLD setup. Tests for this crate happen
# on the Python side (via `maturin develop` + pytest/smoke).
test = false
doctest = false
bench = false
[features]
default = []
extension-module = ["pyo3/extension-module"]
[dependencies]
headroom-core = { path = "../headroom-core" }
pyo3 = { workspace = true }

View file

@ -0,0 +1,21 @@
[build-system]
requires = ["maturin>=1.5,<2.0"]
build-backend = "maturin"
[project]
name = "headroom-core-py"
version = "0.1.0"
description = "Python bindings to the Rust headroom-core crate."
requires-python = ">=3.10"
license = { text = "Apache-2.0" }
authors = [{ name = "Headroom Maintainers" }]
[tool.maturin]
# Build as a submodule of the `headroom` namespace so it becomes
# `from headroom._core import hello`.
module-name = "headroom._core"
# Keep python source layout out of this directory; maturin will install the
# compiled module into an existing `headroom` package in site-packages (or
# the active venv's overlay created by `maturin develop`).
python-source = "python"
features = ["extension-module"]

View file

@ -0,0 +1,15 @@
//! PyO3 bindings for headroom-core. Exposed to Python as `headroom._core`.
use pyo3::prelude::*;
/// Return the identity string from headroom-core.
#[pyfunction]
fn hello() -> &'static str {
headroom_core::hello()
}
#[pymodule]
fn _core(m: &Bound<'_, PyModule>) -> PyResult<()> {
m.add_function(wrap_pyfunction!(hello, m)?)?;
Ok(())
}

32
deny.toml Normal file
View file

@ -0,0 +1,32 @@
# cargo-deny configuration for the Rust workspace. Intentionally permissive
# during Phase 0 — tighten before Phase 2 goes to production.
[graph]
all-features = false
[licenses]
version = 2
allow = [
"MIT",
"Apache-2.0",
"Apache-2.0 WITH LLVM-exception",
"BSD-2-Clause",
"BSD-3-Clause",
"ISC",
"Unicode-3.0",
"Unicode-DFS-2016",
"CC0-1.0",
"Zlib",
"0BSD",
"MPL-2.0",
]
confidence-threshold = 0.8
exceptions = []
[bans]
multiple-versions = "allow"
wildcards = "allow"
[sources]
unknown-registry = "warn"
unknown-git = "warn"

View file

@ -0,0 +1,98 @@
# 022. Rust Migration
**Status:** in-progress (Stage 0 complete)
Headroom is evolving from a pure-Python proxy into a Rust engine with a Python SDK layer. This document describes the motivation, target architecture, and phased execution plan. It is the source of truth for the migration; the Discord announcement and contributor docs are derived from it.
## Why Rust
Three forces push us toward Rust:
1. **Latency.** Every LLM request flows through compression transforms on the hot path. Rust runs that math 210× faster than Python, with negligible interpreter overhead and near-instant cold starts.
2. **Deployment.** A Rust proxy is a single static binary (~10 MB). No Python interpreter, no pip, no wheel matrix, no model downloads at startup. It drops cleanly into containers, serverless runtimes, or bare hosts.
3. **Non-Python consumers.** Integrations like the TypeScript OpenClaw plugin talk to Headroom over HTTP. A faster proxy makes every downstream client faster without changing any client code.
The Python code is not being thrown away. Rust lives alongside Python in the same repository, the HTTP contract stays stable, and existing users see no breaking changes.
## Target architecture
Two new artifacts, built over time:
- **`headroom-proxy`** — a standalone Rust binary that speaks the existing Headroom HTTP API and contains native implementations of the proxy's hot-path logic (routing, streaming, compression, telemetry). This is the deployable artifact.
- **`headroom-core`** — a Rust library with the compression transforms (CCR, log compressor, diff compressor, tokenizer, code compressor, content router, etc.). Consumed by `headroom-proxy` directly; optionally exposed to Python via a PyO3 binding if/when embedded SDK use warrants it.
Both live in a Cargo workspace under `crates/` at the repo root. They are built, tested, and released together with the Python package.
## Migration strategy
**Trunk-based, no long-lived branch.** Every Rust change ships as a small PR to `main`. Rust and Python live side by side. CI enforces parity on every PR — if the Rust port diverges from the Python reference, the build fails.
**Proxy-first, not transforms-first.** We build the Rust proxy binary as the primary deliverable, starting from a pure HTTP passthrough that forwards upstream to the existing Python proxy. Native Rust implementations of individual routes then replace passthroughs one at a time, gated by feature flags. This lets us ship a deployable Rust binary on day one and iterate without modifying Python internals.
**Feature-flagged cutover.** Each native Rust route is toggled by config. Default is passthrough-to-Python until a route has been shadow-tested and validated. Rollback is a flag flip, not a redeploy.
**Parity by shadow traffic.** Recorded input/output fixtures give us a unit-test-level parity check. Shadow mode — running both proxies on live traffic and diffing outputs — gives us the real validation gate before any cutover.
## Stages
### Stage 0 — Foundation ✅
Cargo workspace with four crates (`headroom-core`, `headroom-proxy`, `headroom-py`, `headroom-parity`), CI, build tooling (Makefile, GitHub Actions), and a parity test harness seeded with 125 recorded fixtures across 5 leaf transforms. No production behavior changed.
### Stage 1 — Rust proxy as passthrough
`headroom-proxy` accepts requests on the same HTTP contract as the Python proxy and forwards everything upstream to Python. No transforms yet, no intelligence. The point is a deployable binary that can run in front of the existing stack with zero risk.
### Stage 2 — First native route
Replace the passthrough for `/v1/chat/completions` (OpenAI) with a native Rust implementation: Rust transforms, direct provider call, streamed response. Feature-flagged. Python proxy handles everything else unchanged.
### Stage 3 — Shadow mode validation
Run both proxies on real traffic. Diff outputs with tolerance for chunk timing (SSE). Gate: one week of ≤ 0.1% content divergence before flipping the flag for real.
### Stage 4 — Provider expansion
Anthropic, Google, Cohere, Mistral, Bedrock, others. Each provider goes through its own shadow period before cutover.
### Stage 5 — Code-aware transforms
Port `code_compressor` (tree-sitter, already Rust-native upstream), `content_router`, `content_detector`. These are larger transforms but have no ML dependencies.
### Stage 6 — Storage layer
SQLite (`rusqlite` + `sqlite-vec`), HNSW vector index (`instant-distance`), graph store (`neo4rs`). Feature-flagged backend for the memory subsystem.
### Stage 7 — ONNX migration
Remove the torch-dependent LLMLingua compressor. Convert remaining ML models (SmartCrusher, IntelligentContext, memory embedders) to ONNX with fixed opset. Run via the `ort` crate. Remove `torch`, `transformers`, `sentence-transformers`, `llmlingua` from runtime dependencies.
### Stage 8 — Retire the Python proxy
Delete `headroom/proxy/server.py` and the Python HTTP routes. The Python package (`import headroom`) continues to exist for SDK users and integration adapters (LangChain, Agno, MCP, Strands), which talk HTTP and don't care which proxy implementation is behind the endpoint.
## What does not change
- `pip install headroom` continues to work.
- The HTTP API contract is preserved.
- LangChain, Agno, MCP, Strands integrations keep working unchanged.
- The CLI, dashboard, eval framework, examples, and documentation site are all unaffected.
- Python contributions remain welcome for integrations, tooling, examples, and any code paths not yet ported.
## Contributing
- **Python contributors** do not need to learn Rust. CI will flag a PR if a Python change diverges from a Rust-ported counterpart; in that case either update both implementations or disable the feature flag for the affected route.
- **Rust contributors** should read `RUST_DEV.md` for workspace setup, then pick a transform or proxy route from the open issues.
## Risks and open questions
- **ONNX export parity** for embedding models: numerical reproducibility must be validated per model before cutover. Some models may resist clean export and require keeping a Python inference path behind PyO3 as a fallback.
- **LLMLingua removal** is a feature removal visible to users relying on it; deprecation timing will be announced on Discord before Stage 7 begins.
- **PyO3 binding scope**: we may ultimately not need a PyO3-exposed `headroom._core` at all, if existing Python SDK users are happy with the HTTP contract. Decision deferred to Stage 8.
## References
- `RUST_DEV.md` — developer setup and workspace reference
- `crates/` — Rust sources
- `tests/parity/` — fixtures and parity harness
- `Makefile``make test`, `make test-parity`, `make build-proxy`, `make build-wheel`, `make fmt`, `make lint`

4
rust-toolchain.toml Normal file
View file

@ -0,0 +1,4 @@
[toolchain]
channel = "stable"
components = ["rustfmt", "clippy"]
profile = "minimal"

View file

@ -0,0 +1,59 @@
#!/usr/bin/env python3
"""Entry point for recording Rust-vs-Python parity fixtures.
Usage:
python scripts/record_fixtures.py
This driver:
1. Monkey-patches the Phase-1 transform classes via
`tests.parity.recorder.record_all()`.
2. Runs a small deterministic synthetic workload (no network, no real LLM
calls) that hits each transform at least 20 times with varied inputs.
3. Prints a summary and exits non-zero if any transform was blocked.
"""
from __future__ import annotations
import logging
import sys
from pathlib import Path
# Make `tests/parity/recorder.py` importable without installing it.
_REPO_ROOT = Path(__file__).resolve().parent.parent
sys.path.insert(0, str(_REPO_ROOT))
from tests.parity.recorder import record_all, run_default_workload # noqa: E402
def main() -> int:
logging.basicConfig(level=logging.INFO, format="%(levelname)s %(name)s: %(message)s")
log = logging.getLogger("record_fixtures")
statuses = record_all()
log.info("patch status:")
blocked = []
for name, status in statuses.items():
log.info(" %-16s %s", name, status)
if status.startswith("blocked:"):
blocked.append((name, status))
counts = run_default_workload()
log.info("fixture counts:")
shortfall = []
for name, n in counts.items():
log.info(" %-16s %d", name, n)
if n < 20:
shortfall.append((name, n))
if blocked:
log.error("blocked transforms: %s", blocked)
if shortfall:
log.error("transforms with <20 fixtures: %s", shortfall)
# Exit non-zero if anything was wholly blocked; short recordings are
# a soft warning.
return 1 if blocked else 0
if __name__ == "__main__":
raise SystemExit(main())

View file

@ -0,0 +1,64 @@
{
"config": {
"collapse_blank_lines": true,
"date_patterns": [
"Current [Dd]ate:?\\s*\\d{4}-\\d{2}-\\d{2}",
"Today is \\w+,?\\s+\\w+ \\d+",
"Today's date:?\\s*\\d{4}-\\d{2}-\\d{2}",
"\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}"
],
"detection_tiers": [
"regex"
],
"dynamic_tail_separator": "\n\n---\n[Dynamic Context]\n",
"enabled": false,
"entropy_threshold": 0.7,
"extra_dynamic_labels": [],
"normalize_whitespace": true,
"use_dynamic_detector": true
},
"input": [
{
"content": "You are a helpful assistant. The date is 2026-04-23. Request id 12.",
"role": "system"
},
{
"content": "Question number 12: what is 2+2?",
"role": "user"
}
],
"input_sha256": "0225460359a992d95ef38cd7cec1d3e564d3271d289620aec5c55ed795659827",
"output": {
"cache_metrics": {
"prefix_changed": true,
"previous_hash": "7f4a75c96f08adfe",
"stable_prefix_bytes": 57,
"stable_prefix_hash": "d6c0c0f0a1603e63",
"stable_prefix_tokens_est": 15
},
"diff_artifact": null,
"markers_inserted": [
"stable_prefix_hash:d6c0c0f0a1603e63"
],
"messages": [
{
"content": "You are a helpful assistant. The date is . Request id 12.\n\n---\n[Dynamic Context]\n2026-04-23",
"role": "system"
},
{
"content": "Question number 12: what is 2+2?",
"role": "user"
}
],
"timing": {},
"tokens_after": 51,
"tokens_before": 47,
"transforms_applied": [
"cache_align"
],
"warnings": [],
"waste_signals": null
},
"recorded_at": "2026-04-23T23:51:37.783792+00:00",
"transform": "cache_aligner"
}

View file

@ -0,0 +1,64 @@
{
"config": {
"collapse_blank_lines": true,
"date_patterns": [
"Current [Dd]ate:?\\s*\\d{4}-\\d{2}-\\d{2}",
"Today is \\w+,?\\s+\\w+ \\d+",
"Today's date:?\\s*\\d{4}-\\d{2}-\\d{2}",
"\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}"
],
"detection_tiers": [
"regex"
],
"dynamic_tail_separator": "\n\n---\n[Dynamic Context]\n",
"enabled": false,
"entropy_threshold": 0.7,
"extra_dynamic_labels": [],
"normalize_whitespace": true,
"use_dynamic_detector": true
},
"input": [
{
"content": "You are a helpful assistant. The date is 2026-04-23. Request id 8.",
"role": "system"
},
{
"content": "Question number 8: what is 2+2?",
"role": "user"
}
],
"input_sha256": "231ab237501e106b7c4ef2b8aa3842c31abf201f4f2b8c36166d2ae786f24f83",
"output": {
"cache_metrics": {
"prefix_changed": true,
"previous_hash": "ae6baf456ddfbff6",
"stable_prefix_bytes": 56,
"stable_prefix_hash": "f2be38f2730cd5ec",
"stable_prefix_tokens_est": 15
},
"diff_artifact": null,
"markers_inserted": [
"stable_prefix_hash:f2be38f2730cd5ec"
],
"messages": [
{
"content": "You are a helpful assistant. The date is . Request id 8.\n\n---\n[Dynamic Context]\n2026-04-23",
"role": "system"
},
{
"content": "Question number 8: what is 2+2?",
"role": "user"
}
],
"timing": {},
"tokens_after": 51,
"tokens_before": 47,
"transforms_applied": [
"cache_align"
],
"warnings": [],
"waste_signals": null
},
"recorded_at": "2026-04-23T23:51:37.781924+00:00",
"transform": "cache_aligner"
}

View file

@ -0,0 +1,64 @@
{
"config": {
"collapse_blank_lines": true,
"date_patterns": [
"Current [Dd]ate:?\\s*\\d{4}-\\d{2}-\\d{2}",
"Today is \\w+,?\\s+\\w+ \\d+",
"Today's date:?\\s*\\d{4}-\\d{2}-\\d{2}",
"\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}"
],
"detection_tiers": [
"regex"
],
"dynamic_tail_separator": "\n\n---\n[Dynamic Context]\n",
"enabled": false,
"entropy_threshold": 0.7,
"extra_dynamic_labels": [],
"normalize_whitespace": true,
"use_dynamic_detector": true
},
"input": [
{
"content": "You are a helpful assistant. The date is 2026-04-23. Request id 2.",
"role": "system"
},
{
"content": "Question number 2: what is 2+2?",
"role": "user"
}
],
"input_sha256": "25683f67cbb74ecea3018e0cbf0855b05b32c41db0ad584e38af49227d9626ef",
"output": {
"cache_metrics": {
"prefix_changed": true,
"previous_hash": "62429dcfa8ef6f9a",
"stable_prefix_bytes": 56,
"stable_prefix_hash": "b903dee7e3bdfda5",
"stable_prefix_tokens_est": 15
},
"diff_artifact": null,
"markers_inserted": [
"stable_prefix_hash:b903dee7e3bdfda5"
],
"messages": [
{
"content": "You are a helpful assistant. The date is . Request id 2.\n\n---\n[Dynamic Context]\n2026-04-23",
"role": "system"
},
{
"content": "Question number 2: what is 2+2?",
"role": "user"
}
],
"timing": {},
"tokens_after": 51,
"tokens_before": 47,
"transforms_applied": [
"cache_align"
],
"warnings": [],
"waste_signals": null
},
"recorded_at": "2026-04-23T23:51:37.777851+00:00",
"transform": "cache_aligner"
}

View file

@ -0,0 +1,64 @@
{
"config": {
"collapse_blank_lines": true,
"date_patterns": [
"Current [Dd]ate:?\\s*\\d{4}-\\d{2}-\\d{2}",
"Today is \\w+,?\\s+\\w+ \\d+",
"Today's date:?\\s*\\d{4}-\\d{2}-\\d{2}",
"\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}"
],
"detection_tiers": [
"regex"
],
"dynamic_tail_separator": "\n\n---\n[Dynamic Context]\n",
"enabled": false,
"entropy_threshold": 0.7,
"extra_dynamic_labels": [],
"normalize_whitespace": true,
"use_dynamic_detector": true
},
"input": [
{
"content": "You are a helpful assistant. The date is 2026-04-23. Request id 0.",
"role": "system"
},
{
"content": "Question number 0: what is 2+2?",
"role": "user"
}
],
"input_sha256": "31eb80356eeeb30df589cbd6000601f1815e5c5731c98009c6e6488d60847aa8",
"output": {
"cache_metrics": {
"prefix_changed": false,
"previous_hash": null,
"stable_prefix_bytes": 56,
"stable_prefix_hash": "a6f9a6e9b16b87f8",
"stable_prefix_tokens_est": 15
},
"diff_artifact": null,
"markers_inserted": [
"stable_prefix_hash:a6f9a6e9b16b87f8"
],
"messages": [
{
"content": "You are a helpful assistant. The date is . Request id 0.\n\n---\n[Dynamic Context]\n2026-04-23",
"role": "system"
},
{
"content": "Question number 0: what is 2+2?",
"role": "user"
}
],
"timing": {},
"tokens_after": 51,
"tokens_before": 47,
"transforms_applied": [
"cache_align"
],
"warnings": [],
"waste_signals": null
},
"recorded_at": "2026-04-23T23:51:37.772878+00:00",
"transform": "cache_aligner"
}

View file

@ -0,0 +1,64 @@
{
"config": {
"collapse_blank_lines": true,
"date_patterns": [
"Current [Dd]ate:?\\s*\\d{4}-\\d{2}-\\d{2}",
"Today is \\w+,?\\s+\\w+ \\d+",
"Today's date:?\\s*\\d{4}-\\d{2}-\\d{2}",
"\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}"
],
"detection_tiers": [
"regex"
],
"dynamic_tail_separator": "\n\n---\n[Dynamic Context]\n",
"enabled": false,
"entropy_threshold": 0.7,
"extra_dynamic_labels": [],
"normalize_whitespace": true,
"use_dynamic_detector": true
},
"input": [
{
"content": "You are a helpful assistant. The date is 2026-04-23. Request id 18.",
"role": "system"
},
{
"content": "Question number 18: what is 2+2?",
"role": "user"
}
],
"input_sha256": "336311b995b063d547dd0bc4b1505a6d92b546810989c807a45a9b9adbd8726b",
"output": {
"cache_metrics": {
"prefix_changed": true,
"previous_hash": "3448a68808670799",
"stable_prefix_bytes": 57,
"stable_prefix_hash": "5d2cc8038b3e2eff",
"stable_prefix_tokens_est": 15
},
"diff_artifact": null,
"markers_inserted": [
"stable_prefix_hash:5d2cc8038b3e2eff"
],
"messages": [
{
"content": "You are a helpful assistant. The date is . Request id 18.\n\n---\n[Dynamic Context]\n2026-04-23",
"role": "system"
},
{
"content": "Question number 18: what is 2+2?",
"role": "user"
}
],
"timing": {},
"tokens_after": 51,
"tokens_before": 47,
"transforms_applied": [
"cache_align"
],
"warnings": [],
"waste_signals": null
},
"recorded_at": "2026-04-23T23:51:37.797368+00:00",
"transform": "cache_aligner"
}

View file

@ -0,0 +1,64 @@
{
"config": {
"collapse_blank_lines": true,
"date_patterns": [
"Current [Dd]ate:?\\s*\\d{4}-\\d{2}-\\d{2}",
"Today is \\w+,?\\s+\\w+ \\d+",
"Today's date:?\\s*\\d{4}-\\d{2}-\\d{2}",
"\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}"
],
"detection_tiers": [
"regex"
],
"dynamic_tail_separator": "\n\n---\n[Dynamic Context]\n",
"enabled": false,
"entropy_threshold": 0.7,
"extra_dynamic_labels": [],
"normalize_whitespace": true,
"use_dynamic_detector": true
},
"input": [
{
"content": "You are a helpful assistant. The date is 2026-04-23. Request id 5.",
"role": "system"
},
{
"content": "Question number 5: what is 2+2?",
"role": "user"
}
],
"input_sha256": "475e76a9f99c29abbaae11133063a5c9d56e923ba7641576fc8af781f8c90231",
"output": {
"cache_metrics": {
"prefix_changed": true,
"previous_hash": "a81110326e885546",
"stable_prefix_bytes": 56,
"stable_prefix_hash": "d28bc9575c97a6b5",
"stable_prefix_tokens_est": 15
},
"diff_artifact": null,
"markers_inserted": [
"stable_prefix_hash:d28bc9575c97a6b5"
],
"messages": [
{
"content": "You are a helpful assistant. The date is . Request id 5.\n\n---\n[Dynamic Context]\n2026-04-23",
"role": "system"
},
{
"content": "Question number 5: what is 2+2?",
"role": "user"
}
],
"timing": {},
"tokens_after": 51,
"tokens_before": 47,
"transforms_applied": [
"cache_align"
],
"warnings": [],
"waste_signals": null
},
"recorded_at": "2026-04-23T23:51:37.780357+00:00",
"transform": "cache_aligner"
}

View file

@ -0,0 +1,64 @@
{
"config": {
"collapse_blank_lines": true,
"date_patterns": [
"Current [Dd]ate:?\\s*\\d{4}-\\d{2}-\\d{2}",
"Today is \\w+,?\\s+\\w+ \\d+",
"Today's date:?\\s*\\d{4}-\\d{2}-\\d{2}",
"\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}"
],
"detection_tiers": [
"regex"
],
"dynamic_tail_separator": "\n\n---\n[Dynamic Context]\n",
"enabled": false,
"entropy_threshold": 0.7,
"extra_dynamic_labels": [],
"normalize_whitespace": true,
"use_dynamic_detector": true
},
"input": [
{
"content": "You are a helpful assistant. The date is 2026-04-23. Request id 13.",
"role": "system"
},
{
"content": "Question number 13: what is 2+2?",
"role": "user"
}
],
"input_sha256": "4b171a7f9af6e2d55e4d1ac374e9b87e2842455a358aa3628ae533ebb401e5c8",
"output": {
"cache_metrics": {
"prefix_changed": true,
"previous_hash": "d6c0c0f0a1603e63",
"stable_prefix_bytes": 57,
"stable_prefix_hash": "36ca37871b1a19b3",
"stable_prefix_tokens_est": 15
},
"diff_artifact": null,
"markers_inserted": [
"stable_prefix_hash:36ca37871b1a19b3"
],
"messages": [
{
"content": "You are a helpful assistant. The date is . Request id 13.\n\n---\n[Dynamic Context]\n2026-04-23",
"role": "system"
},
{
"content": "Question number 13: what is 2+2?",
"role": "user"
}
],
"timing": {},
"tokens_after": 51,
"tokens_before": 47,
"transforms_applied": [
"cache_align"
],
"warnings": [],
"waste_signals": null
},
"recorded_at": "2026-04-23T23:51:37.784256+00:00",
"transform": "cache_aligner"
}

View file

@ -0,0 +1,64 @@
{
"config": {
"collapse_blank_lines": true,
"date_patterns": [
"Current [Dd]ate:?\\s*\\d{4}-\\d{2}-\\d{2}",
"Today is \\w+,?\\s+\\w+ \\d+",
"Today's date:?\\s*\\d{4}-\\d{2}-\\d{2}",
"\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}"
],
"detection_tiers": [
"regex"
],
"dynamic_tail_separator": "\n\n---\n[Dynamic Context]\n",
"enabled": false,
"entropy_threshold": 0.7,
"extra_dynamic_labels": [],
"normalize_whitespace": true,
"use_dynamic_detector": true
},
"input": [
{
"content": "You are a helpful assistant. The date is 2026-04-23. Request id 4.",
"role": "system"
},
{
"content": "Question number 4: what is 2+2?",
"role": "user"
}
],
"input_sha256": "541daf83f5a1fda96f7548a5ccd77471ed9f65f18c96b0d0e739672249b50558",
"output": {
"cache_metrics": {
"prefix_changed": true,
"previous_hash": "387e30c8b8e09c1b",
"stable_prefix_bytes": 56,
"stable_prefix_hash": "a81110326e885546",
"stable_prefix_tokens_est": 15
},
"diff_artifact": null,
"markers_inserted": [
"stable_prefix_hash:a81110326e885546"
],
"messages": [
{
"content": "You are a helpful assistant. The date is . Request id 4.\n\n---\n[Dynamic Context]\n2026-04-23",
"role": "system"
},
{
"content": "Question number 4: what is 2+2?",
"role": "user"
}
],
"timing": {},
"tokens_after": 51,
"tokens_before": 47,
"transforms_applied": [
"cache_align"
],
"warnings": [],
"waste_signals": null
},
"recorded_at": "2026-04-23T23:51:37.779840+00:00",
"transform": "cache_aligner"
}

View file

@ -0,0 +1,64 @@
{
"config": {
"collapse_blank_lines": true,
"date_patterns": [
"Current [Dd]ate:?\\s*\\d{4}-\\d{2}-\\d{2}",
"Today is \\w+,?\\s+\\w+ \\d+",
"Today's date:?\\s*\\d{4}-\\d{2}-\\d{2}",
"\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}"
],
"detection_tiers": [
"regex"
],
"dynamic_tail_separator": "\n\n---\n[Dynamic Context]\n",
"enabled": false,
"entropy_threshold": 0.7,
"extra_dynamic_labels": [],
"normalize_whitespace": true,
"use_dynamic_detector": true
},
"input": [
{
"content": "You are a helpful assistant. The date is 2026-04-23. Request id 7.",
"role": "system"
},
{
"content": "Question number 7: what is 2+2?",
"role": "user"
}
],
"input_sha256": "6502f683439de0524e87b14e56fe9ac81dadfec1136fc1b7029511272648d34e",
"output": {
"cache_metrics": {
"prefix_changed": true,
"previous_hash": "370f22d8bec65ce9",
"stable_prefix_bytes": 56,
"stable_prefix_hash": "ae6baf456ddfbff6",
"stable_prefix_tokens_est": 15
},
"diff_artifact": null,
"markers_inserted": [
"stable_prefix_hash:ae6baf456ddfbff6"
],
"messages": [
{
"content": "You are a helpful assistant. The date is . Request id 7.\n\n---\n[Dynamic Context]\n2026-04-23",
"role": "system"
},
{
"content": "Question number 7: what is 2+2?",
"role": "user"
}
],
"timing": {},
"tokens_after": 51,
"tokens_before": 47,
"transforms_applied": [
"cache_align"
],
"warnings": [],
"waste_signals": null
},
"recorded_at": "2026-04-23T23:51:37.781367+00:00",
"transform": "cache_aligner"
}

View file

@ -0,0 +1,64 @@
{
"config": {
"collapse_blank_lines": true,
"date_patterns": [
"Current [Dd]ate:?\\s*\\d{4}-\\d{2}-\\d{2}",
"Today is \\w+,?\\s+\\w+ \\d+",
"Today's date:?\\s*\\d{4}-\\d{2}-\\d{2}",
"\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}"
],
"detection_tiers": [
"regex"
],
"dynamic_tail_separator": "\n\n---\n[Dynamic Context]\n",
"enabled": false,
"entropy_threshold": 0.7,
"extra_dynamic_labels": [],
"normalize_whitespace": true,
"use_dynamic_detector": true
},
"input": [
{
"content": "You are a helpful assistant. The date is 2026-04-23. Request id 17.",
"role": "system"
},
{
"content": "Question number 17: what is 2+2?",
"role": "user"
}
],
"input_sha256": "7b556192a56bca9484db5a8aa7198e1fb9484d134385950a5186780e6e2dd5f4",
"output": {
"cache_metrics": {
"prefix_changed": true,
"previous_hash": "a63698f1393aaf8d",
"stable_prefix_bytes": 57,
"stable_prefix_hash": "3448a68808670799",
"stable_prefix_tokens_est": 15
},
"diff_artifact": null,
"markers_inserted": [
"stable_prefix_hash:3448a68808670799"
],
"messages": [
{
"content": "You are a helpful assistant. The date is . Request id 17.\n\n---\n[Dynamic Context]\n2026-04-23",
"role": "system"
},
{
"content": "Question number 17: what is 2+2?",
"role": "user"
}
],
"timing": {},
"tokens_after": 51,
"tokens_before": 47,
"transforms_applied": [
"cache_align"
],
"warnings": [],
"waste_signals": null
},
"recorded_at": "2026-04-23T23:51:37.795172+00:00",
"transform": "cache_aligner"
}

View file

@ -0,0 +1,64 @@
{
"config": {
"collapse_blank_lines": true,
"date_patterns": [
"Current [Dd]ate:?\\s*\\d{4}-\\d{2}-\\d{2}",
"Today is \\w+,?\\s+\\w+ \\d+",
"Today's date:?\\s*\\d{4}-\\d{2}-\\d{2}",
"\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}"
],
"detection_tiers": [
"regex"
],
"dynamic_tail_separator": "\n\n---\n[Dynamic Context]\n",
"enabled": false,
"entropy_threshold": 0.7,
"extra_dynamic_labels": [],
"normalize_whitespace": true,
"use_dynamic_detector": true
},
"input": [
{
"content": "You are a helpful assistant. The date is 2026-04-23. Request id 9.",
"role": "system"
},
{
"content": "Question number 9: what is 2+2?",
"role": "user"
}
],
"input_sha256": "8822af1cf9a14254ca88e13a955b89703e56b89f4889b62c0c74f69b753fae55",
"output": {
"cache_metrics": {
"prefix_changed": true,
"previous_hash": "f2be38f2730cd5ec",
"stable_prefix_bytes": 56,
"stable_prefix_hash": "f0eb6d1b95c08f62",
"stable_prefix_tokens_est": 15
},
"diff_artifact": null,
"markers_inserted": [
"stable_prefix_hash:f0eb6d1b95c08f62"
],
"messages": [
{
"content": "You are a helpful assistant. The date is . Request id 9.\n\n---\n[Dynamic Context]\n2026-04-23",
"role": "system"
},
{
"content": "Question number 9: what is 2+2?",
"role": "user"
}
],
"timing": {},
"tokens_after": 51,
"tokens_before": 47,
"transforms_applied": [
"cache_align"
],
"warnings": [],
"waste_signals": null
},
"recorded_at": "2026-04-23T23:51:37.782389+00:00",
"transform": "cache_aligner"
}

View file

@ -0,0 +1,64 @@
{
"config": {
"collapse_blank_lines": true,
"date_patterns": [
"Current [Dd]ate:?\\s*\\d{4}-\\d{2}-\\d{2}",
"Today is \\w+,?\\s+\\w+ \\d+",
"Today's date:?\\s*\\d{4}-\\d{2}-\\d{2}",
"\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}"
],
"detection_tiers": [
"regex"
],
"dynamic_tail_separator": "\n\n---\n[Dynamic Context]\n",
"enabled": false,
"entropy_threshold": 0.7,
"extra_dynamic_labels": [],
"normalize_whitespace": true,
"use_dynamic_detector": true
},
"input": [
{
"content": "You are a helpful assistant. The date is 2026-04-23. Request id 14.",
"role": "system"
},
{
"content": "Question number 14: what is 2+2?",
"role": "user"
}
],
"input_sha256": "92b25557cfbfa8dba4b21abe9c4de4e6fde501cdf4a6b37556e45fcd32a852eb",
"output": {
"cache_metrics": {
"prefix_changed": true,
"previous_hash": "36ca37871b1a19b3",
"stable_prefix_bytes": 57,
"stable_prefix_hash": "2847e8fa28fb37d6",
"stable_prefix_tokens_est": 15
},
"diff_artifact": null,
"markers_inserted": [
"stable_prefix_hash:2847e8fa28fb37d6"
],
"messages": [
{
"content": "You are a helpful assistant. The date is . Request id 14.\n\n---\n[Dynamic Context]\n2026-04-23",
"role": "system"
},
{
"content": "Question number 14: what is 2+2?",
"role": "user"
}
],
"timing": {},
"tokens_after": 51,
"tokens_before": 47,
"transforms_applied": [
"cache_align"
],
"warnings": [],
"waste_signals": null
},
"recorded_at": "2026-04-23T23:51:37.784722+00:00",
"transform": "cache_aligner"
}

View file

@ -0,0 +1,64 @@
{
"config": {
"collapse_blank_lines": true,
"date_patterns": [
"Current [Dd]ate:?\\s*\\d{4}-\\d{2}-\\d{2}",
"Today is \\w+,?\\s+\\w+ \\d+",
"Today's date:?\\s*\\d{4}-\\d{2}-\\d{2}",
"\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}"
],
"detection_tiers": [
"regex"
],
"dynamic_tail_separator": "\n\n---\n[Dynamic Context]\n",
"enabled": false,
"entropy_threshold": 0.7,
"extra_dynamic_labels": [],
"normalize_whitespace": true,
"use_dynamic_detector": true
},
"input": [
{
"content": "You are a helpful assistant. The date is 2026-04-23. Request id 1.",
"role": "system"
},
{
"content": "Question number 1: what is 2+2?",
"role": "user"
}
],
"input_sha256": "acda633b1733c6e6e9b99cac3085118df5907266d9175c2ccb69ccadbe200d5a",
"output": {
"cache_metrics": {
"prefix_changed": true,
"previous_hash": "a6f9a6e9b16b87f8",
"stable_prefix_bytes": 56,
"stable_prefix_hash": "62429dcfa8ef6f9a",
"stable_prefix_tokens_est": 15
},
"diff_artifact": null,
"markers_inserted": [
"stable_prefix_hash:62429dcfa8ef6f9a"
],
"messages": [
{
"content": "You are a helpful assistant. The date is . Request id 1.\n\n---\n[Dynamic Context]\n2026-04-23",
"role": "system"
},
{
"content": "Question number 1: what is 2+2?",
"role": "user"
}
],
"timing": {},
"tokens_after": 51,
"tokens_before": 47,
"transforms_applied": [
"cache_align"
],
"warnings": [],
"waste_signals": null
},
"recorded_at": "2026-04-23T23:51:37.776323+00:00",
"transform": "cache_aligner"
}

View file

@ -0,0 +1,64 @@
{
"config": {
"collapse_blank_lines": true,
"date_patterns": [
"Current [Dd]ate:?\\s*\\d{4}-\\d{2}-\\d{2}",
"Today is \\w+,?\\s+\\w+ \\d+",
"Today's date:?\\s*\\d{4}-\\d{2}-\\d{2}",
"\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}"
],
"detection_tiers": [
"regex"
],
"dynamic_tail_separator": "\n\n---\n[Dynamic Context]\n",
"enabled": false,
"entropy_threshold": 0.7,
"extra_dynamic_labels": [],
"normalize_whitespace": true,
"use_dynamic_detector": true
},
"input": [
{
"content": "You are a helpful assistant. The date is 2026-04-23. Request id 19.",
"role": "system"
},
{
"content": "Question number 19: what is 2+2?",
"role": "user"
}
],
"input_sha256": "c2563e51d50a4da6d315ced09771ec955cc0dd833897cc1a4f924703a154cafb",
"output": {
"cache_metrics": {
"prefix_changed": true,
"previous_hash": "5d2cc8038b3e2eff",
"stable_prefix_bytes": 57,
"stable_prefix_hash": "d37929b1256f7860",
"stable_prefix_tokens_est": 15
},
"diff_artifact": null,
"markers_inserted": [
"stable_prefix_hash:d37929b1256f7860"
],
"messages": [
{
"content": "You are a helpful assistant. The date is . Request id 19.\n\n---\n[Dynamic Context]\n2026-04-23",
"role": "system"
},
{
"content": "Question number 19: what is 2+2?",
"role": "user"
}
],
"timing": {},
"tokens_after": 51,
"tokens_before": 47,
"transforms_applied": [
"cache_align"
],
"warnings": [],
"waste_signals": null
},
"recorded_at": "2026-04-23T23:51:37.799586+00:00",
"transform": "cache_aligner"
}

View file

@ -0,0 +1,64 @@
{
"config": {
"collapse_blank_lines": true,
"date_patterns": [
"Current [Dd]ate:?\\s*\\d{4}-\\d{2}-\\d{2}",
"Today is \\w+,?\\s+\\w+ \\d+",
"Today's date:?\\s*\\d{4}-\\d{2}-\\d{2}",
"\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}"
],
"detection_tiers": [
"regex"
],
"dynamic_tail_separator": "\n\n---\n[Dynamic Context]\n",
"enabled": false,
"entropy_threshold": 0.7,
"extra_dynamic_labels": [],
"normalize_whitespace": true,
"use_dynamic_detector": true
},
"input": [
{
"content": "You are a helpful assistant. The date is 2026-04-23. Request id 11.",
"role": "system"
},
{
"content": "Question number 11: what is 2+2?",
"role": "user"
}
],
"input_sha256": "c43df917ec5d7d4c5d95dcddee64ef6260c9b98b00c967330e8fe62b20b4b0a1",
"output": {
"cache_metrics": {
"prefix_changed": true,
"previous_hash": "c8cd901c29a6e141",
"stable_prefix_bytes": 57,
"stable_prefix_hash": "7f4a75c96f08adfe",
"stable_prefix_tokens_est": 15
},
"diff_artifact": null,
"markers_inserted": [
"stable_prefix_hash:7f4a75c96f08adfe"
],
"messages": [
{
"content": "You are a helpful assistant. The date is . Request id 11.\n\n---\n[Dynamic Context]\n2026-04-23",
"role": "system"
},
{
"content": "Question number 11: what is 2+2?",
"role": "user"
}
],
"timing": {},
"tokens_after": 51,
"tokens_before": 47,
"transforms_applied": [
"cache_align"
],
"warnings": [],
"waste_signals": null
},
"recorded_at": "2026-04-23T23:51:37.783317+00:00",
"transform": "cache_aligner"
}

View file

@ -0,0 +1,64 @@
{
"config": {
"collapse_blank_lines": true,
"date_patterns": [
"Current [Dd]ate:?\\s*\\d{4}-\\d{2}-\\d{2}",
"Today is \\w+,?\\s+\\w+ \\d+",
"Today's date:?\\s*\\d{4}-\\d{2}-\\d{2}",
"\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}"
],
"detection_tiers": [
"regex"
],
"dynamic_tail_separator": "\n\n---\n[Dynamic Context]\n",
"enabled": false,
"entropy_threshold": 0.7,
"extra_dynamic_labels": [],
"normalize_whitespace": true,
"use_dynamic_detector": true
},
"input": [
{
"content": "You are a helpful assistant. The date is 2026-04-23. Request id 15.",
"role": "system"
},
{
"content": "Question number 15: what is 2+2?",
"role": "user"
}
],
"input_sha256": "c5ec19381964f8ef5a08d27435e71db7160c00a8980a78a97843832af3cf1190",
"output": {
"cache_metrics": {
"prefix_changed": true,
"previous_hash": "2847e8fa28fb37d6",
"stable_prefix_bytes": 57,
"stable_prefix_hash": "8a75d8139c10abcf",
"stable_prefix_tokens_est": 15
},
"diff_artifact": null,
"markers_inserted": [
"stable_prefix_hash:8a75d8139c10abcf"
],
"messages": [
{
"content": "You are a helpful assistant. The date is . Request id 15.\n\n---\n[Dynamic Context]\n2026-04-23",
"role": "system"
},
{
"content": "Question number 15: what is 2+2?",
"role": "user"
}
],
"timing": {},
"tokens_after": 51,
"tokens_before": 47,
"transforms_applied": [
"cache_align"
],
"warnings": [],
"waste_signals": null
},
"recorded_at": "2026-04-23T23:51:37.787416+00:00",
"transform": "cache_aligner"
}

View file

@ -0,0 +1,64 @@
{
"config": {
"collapse_blank_lines": true,
"date_patterns": [
"Current [Dd]ate:?\\s*\\d{4}-\\d{2}-\\d{2}",
"Today is \\w+,?\\s+\\w+ \\d+",
"Today's date:?\\s*\\d{4}-\\d{2}-\\d{2}",
"\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}"
],
"detection_tiers": [
"regex"
],
"dynamic_tail_separator": "\n\n---\n[Dynamic Context]\n",
"enabled": false,
"entropy_threshold": 0.7,
"extra_dynamic_labels": [],
"normalize_whitespace": true,
"use_dynamic_detector": true
},
"input": [
{
"content": "You are a helpful assistant. The date is 2026-04-23. Request id 3.",
"role": "system"
},
{
"content": "Question number 3: what is 2+2?",
"role": "user"
}
],
"input_sha256": "e7a901cbf00a645fb14d9c0d0fec1cff05a1e54ce124f51497461605a5d5e5ba",
"output": {
"cache_metrics": {
"prefix_changed": true,
"previous_hash": "b903dee7e3bdfda5",
"stable_prefix_bytes": 56,
"stable_prefix_hash": "387e30c8b8e09c1b",
"stable_prefix_tokens_est": 15
},
"diff_artifact": null,
"markers_inserted": [
"stable_prefix_hash:387e30c8b8e09c1b"
],
"messages": [
{
"content": "You are a helpful assistant. The date is . Request id 3.\n\n---\n[Dynamic Context]\n2026-04-23",
"role": "system"
},
{
"content": "Question number 3: what is 2+2?",
"role": "user"
}
],
"timing": {},
"tokens_after": 51,
"tokens_before": 47,
"transforms_applied": [
"cache_align"
],
"warnings": [],
"waste_signals": null
},
"recorded_at": "2026-04-23T23:51:37.779295+00:00",
"transform": "cache_aligner"
}

View file

@ -0,0 +1,64 @@
{
"config": {
"collapse_blank_lines": true,
"date_patterns": [
"Current [Dd]ate:?\\s*\\d{4}-\\d{2}-\\d{2}",
"Today is \\w+,?\\s+\\w+ \\d+",
"Today's date:?\\s*\\d{4}-\\d{2}-\\d{2}",
"\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}"
],
"detection_tiers": [
"regex"
],
"dynamic_tail_separator": "\n\n---\n[Dynamic Context]\n",
"enabled": false,
"entropy_threshold": 0.7,
"extra_dynamic_labels": [],
"normalize_whitespace": true,
"use_dynamic_detector": true
},
"input": [
{
"content": "You are a helpful assistant. The date is 2026-04-23. Request id 10.",
"role": "system"
},
{
"content": "Question number 10: what is 2+2?",
"role": "user"
}
],
"input_sha256": "ed9c7e7ca8f0ada6b54b1b96ae23e960e89fa6a897a5b48b3be1493ccb84afff",
"output": {
"cache_metrics": {
"prefix_changed": true,
"previous_hash": "f0eb6d1b95c08f62",
"stable_prefix_bytes": 57,
"stable_prefix_hash": "c8cd901c29a6e141",
"stable_prefix_tokens_est": 15
},
"diff_artifact": null,
"markers_inserted": [
"stable_prefix_hash:c8cd901c29a6e141"
],
"messages": [
{
"content": "You are a helpful assistant. The date is . Request id 10.\n\n---\n[Dynamic Context]\n2026-04-23",
"role": "system"
},
{
"content": "Question number 10: what is 2+2?",
"role": "user"
}
],
"timing": {},
"tokens_after": 51,
"tokens_before": 47,
"transforms_applied": [
"cache_align"
],
"warnings": [],
"waste_signals": null
},
"recorded_at": "2026-04-23T23:51:37.782857+00:00",
"transform": "cache_aligner"
}

View file

@ -0,0 +1,64 @@
{
"config": {
"collapse_blank_lines": true,
"date_patterns": [
"Current [Dd]ate:?\\s*\\d{4}-\\d{2}-\\d{2}",
"Today is \\w+,?\\s+\\w+ \\d+",
"Today's date:?\\s*\\d{4}-\\d{2}-\\d{2}",
"\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}"
],
"detection_tiers": [
"regex"
],
"dynamic_tail_separator": "\n\n---\n[Dynamic Context]\n",
"enabled": false,
"entropy_threshold": 0.7,
"extra_dynamic_labels": [],
"normalize_whitespace": true,
"use_dynamic_detector": true
},
"input": [
{
"content": "You are a helpful assistant. The date is 2026-04-23. Request id 6.",
"role": "system"
},
{
"content": "Question number 6: what is 2+2?",
"role": "user"
}
],
"input_sha256": "efe495ffb2ff99227362d743a53d36d48d178f9e704443aad491795a8ff9ae39",
"output": {
"cache_metrics": {
"prefix_changed": true,
"previous_hash": "d28bc9575c97a6b5",
"stable_prefix_bytes": 56,
"stable_prefix_hash": "370f22d8bec65ce9",
"stable_prefix_tokens_est": 15
},
"diff_artifact": null,
"markers_inserted": [
"stable_prefix_hash:370f22d8bec65ce9"
],
"messages": [
{
"content": "You are a helpful assistant. The date is . Request id 6.\n\n---\n[Dynamic Context]\n2026-04-23",
"role": "system"
},
{
"content": "Question number 6: what is 2+2?",
"role": "user"
}
],
"timing": {},
"tokens_after": 51,
"tokens_before": 47,
"transforms_applied": [
"cache_align"
],
"warnings": [],
"waste_signals": null
},
"recorded_at": "2026-04-23T23:51:37.780871+00:00",
"transform": "cache_aligner"
}

View file

@ -0,0 +1,64 @@
{
"config": {
"collapse_blank_lines": true,
"date_patterns": [
"Current [Dd]ate:?\\s*\\d{4}-\\d{2}-\\d{2}",
"Today is \\w+,?\\s+\\w+ \\d+",
"Today's date:?\\s*\\d{4}-\\d{2}-\\d{2}",
"\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}"
],
"detection_tiers": [
"regex"
],
"dynamic_tail_separator": "\n\n---\n[Dynamic Context]\n",
"enabled": false,
"entropy_threshold": 0.7,
"extra_dynamic_labels": [],
"normalize_whitespace": true,
"use_dynamic_detector": true
},
"input": [
{
"content": "You are a helpful assistant. The date is 2026-04-23. Request id 16.",
"role": "system"
},
{
"content": "Question number 16: what is 2+2?",
"role": "user"
}
],
"input_sha256": "f2b50b3cf76fe6a197f251c3745e78a172846277ca7665b97cd913d6ee243f79",
"output": {
"cache_metrics": {
"prefix_changed": true,
"previous_hash": "8a75d8139c10abcf",
"stable_prefix_bytes": 57,
"stable_prefix_hash": "a63698f1393aaf8d",
"stable_prefix_tokens_est": 15
},
"diff_artifact": null,
"markers_inserted": [
"stable_prefix_hash:a63698f1393aaf8d"
],
"messages": [
{
"content": "You are a helpful assistant. The date is . Request id 16.\n\n---\n[Dynamic Context]\n2026-04-23",
"role": "system"
},
{
"content": "Question number 16: what is 2+2?",
"role": "user"
}
],
"timing": {},
"tokens_after": 51,
"tokens_before": 47,
"transforms_applied": [
"cache_align"
],
"warnings": [],
"waste_signals": null
},
"recorded_at": "2026-04-23T23:51:37.792923+00:00",
"transform": "cache_aligner"
}

View file

@ -0,0 +1,41 @@
{
"config": {},
"input": [
{
"description": "desc 16",
"name": "other_tool_16"
}
],
"input_sha256": "15887705e46d70a33029342fc15f4a3259031c01e2317008f4683833798d78d9",
"output": [
[
{
"description": "desc 16",
"name": "other_tool_16"
},
{
"description": "Retrieve original uncompressed content that was compressed to save tokens. Use this when you need more data than what's shown in compressed tool results. The hash is provided in compression markers like [N items compressed... hash=abc123].",
"input_schema": {
"properties": {
"hash": {
"description": "Hash key from the compression marker (e.g., 'abc123' from hash=abc123)",
"type": "string"
},
"query": {
"description": "Optional search query to filter results. If provided, only returns items matching the query. If omitted, returns all original items.",
"type": "string"
}
},
"required": [
"hash"
],
"type": "object"
},
"name": "headroom_retrieve"
}
],
true
],
"recorded_at": "2026-04-23T23:51:37.805953+00:00",
"transform": "ccr"
}

View file

@ -0,0 +1,41 @@
{
"config": {},
"input": [
{
"description": "desc 22",
"name": "other_tool_22"
}
],
"input_sha256": "1e13216df83b1b242e602e061752778811c4303a567abe718681754dc0e7ff1e",
"output": [
[
{
"description": "desc 22",
"name": "other_tool_22"
},
{
"description": "Retrieve original uncompressed content that was compressed to save tokens. Use this when you need more data than what's shown in compressed tool results. The hash is provided in compression markers like [N items compressed... hash=abc123].",
"input_schema": {
"properties": {
"hash": {
"description": "Hash key from the compression marker (e.g., 'abc123' from hash=abc123)",
"type": "string"
},
"query": {
"description": "Optional search query to filter results. If provided, only returns items matching the query. If omitted, returns all original items.",
"type": "string"
}
},
"required": [
"hash"
],
"type": "object"
},
"name": "headroom_retrieve"
}
],
true
],
"recorded_at": "2026-04-23T23:51:37.806891+00:00",
"transform": "ccr"
}

View file

@ -0,0 +1,44 @@
{
"config": {},
"input": [
{
"description": "desc 17",
"name": "other_tool_17"
}
],
"input_sha256": "22e61aa4e1839aaf69514cbdbdc4ac615fe1e436fe87c5de75d860a94762ff3a",
"output": [
[
{
"description": "desc 17",
"name": "other_tool_17"
},
{
"function": {
"description": "Retrieve original uncompressed content that was compressed to save tokens. Use this when you need more data than what's shown in compressed tool results. The hash is provided in compression markers like [N items compressed... hash=abc123].",
"name": "headroom_retrieve",
"parameters": {
"properties": {
"hash": {
"description": "Hash key from the compression marker (e.g., 'abc123' from hash=abc123)",
"type": "string"
},
"query": {
"description": "Optional search query to filter results. If provided, only returns items matching the query. If omitted, returns all original items.",
"type": "string"
}
},
"required": [
"hash"
],
"type": "object"
}
},
"type": "function"
}
],
true
],
"recorded_at": "2026-04-23T23:51:37.806121+00:00",
"transform": "ccr"
}

View file

@ -0,0 +1,44 @@
{
"config": {},
"input": [
{
"description": "desc 19",
"name": "other_tool_19"
}
],
"input_sha256": "2670d5319d6ff242031fc022d473f8b670ff943b47b70440f84e15655ca7dcd0",
"output": [
[
{
"description": "desc 19",
"name": "other_tool_19"
},
{
"function": {
"description": "Retrieve original uncompressed content that was compressed to save tokens. Use this when you need more data than what's shown in compressed tool results. The hash is provided in compression markers like [N items compressed... hash=abc123].",
"name": "headroom_retrieve",
"parameters": {
"properties": {
"hash": {
"description": "Hash key from the compression marker (e.g., 'abc123' from hash=abc123)",
"type": "string"
},
"query": {
"description": "Optional search query to filter results. If provided, only returns items matching the query. If omitted, returns all original items.",
"type": "string"
}
},
"required": [
"hash"
],
"type": "object"
}
},
"type": "function"
}
],
true
],
"recorded_at": "2026-04-23T23:51:37.806448+00:00",
"transform": "ccr"
}

View file

@ -0,0 +1,41 @@
{
"config": {},
"input": [
{
"description": "desc 20",
"name": "other_tool_20"
}
],
"input_sha256": "2c7824a6bc69ae8935944b28a879d0adf7f10d7d9fdd7cf0e74775389cc48944",
"output": [
[
{
"description": "desc 20",
"name": "other_tool_20"
},
{
"description": "Retrieve original uncompressed content that was compressed to save tokens. Use this when you need more data than what's shown in compressed tool results. The hash is provided in compression markers like [N items compressed... hash=abc123].",
"input_schema": {
"properties": {
"hash": {
"description": "Hash key from the compression marker (e.g., 'abc123' from hash=abc123)",
"type": "string"
},
"query": {
"description": "Optional search query to filter results. If provided, only returns items matching the query. If omitted, returns all original items.",
"type": "string"
}
},
"required": [
"hash"
],
"type": "object"
},
"name": "headroom_retrieve"
}
],
true
],
"recorded_at": "2026-04-23T23:51:37.806597+00:00",
"transform": "ccr"
}

View file

@ -0,0 +1,44 @@
{
"config": {},
"input": [
{
"description": "desc 23",
"name": "other_tool_23"
}
],
"input_sha256": "3d8773cdc4d3493c7df439805446ac7a09f75942495ccc985e6959c67521917f",
"output": [
[
{
"description": "desc 23",
"name": "other_tool_23"
},
{
"function": {
"description": "Retrieve original uncompressed content that was compressed to save tokens. Use this when you need more data than what's shown in compressed tool results. The hash is provided in compression markers like [N items compressed... hash=abc123].",
"name": "headroom_retrieve",
"parameters": {
"properties": {
"hash": {
"description": "Hash key from the compression marker (e.g., 'abc123' from hash=abc123)",
"type": "string"
},
"query": {
"description": "Optional search query to filter results. If provided, only returns items matching the query. If omitted, returns all original items.",
"type": "string"
}
},
"required": [
"hash"
],
"type": "object"
}
},
"type": "function"
}
],
true
],
"recorded_at": "2026-04-23T23:51:37.807121+00:00",
"transform": "ccr"
}

View file

@ -0,0 +1,44 @@
{
"config": {},
"input": [
{
"description": "desc 11",
"name": "other_tool_11"
}
],
"input_sha256": "3de30e123dc02906deb06ba4ff4146bf31802302ed4ea40e636b45041ba1b661",
"output": [
[
{
"description": "desc 11",
"name": "other_tool_11"
},
{
"function": {
"description": "Retrieve original uncompressed content that was compressed to save tokens. Use this when you need more data than what's shown in compressed tool results. The hash is provided in compression markers like [N items compressed... hash=abc123].",
"name": "headroom_retrieve",
"parameters": {
"properties": {
"hash": {
"description": "Hash key from the compression marker (e.g., 'abc123' from hash=abc123)",
"type": "string"
},
"query": {
"description": "Optional search query to filter results. If provided, only returns items matching the query. If omitted, returns all original items.",
"type": "string"
}
},
"required": [
"hash"
],
"type": "object"
}
},
"type": "function"
}
],
true
],
"recorded_at": "2026-04-23T23:51:37.803681+00:00",
"transform": "ccr"
}

View file

@ -0,0 +1,44 @@
{
"config": {},
"input": [
{
"description": "desc 3",
"name": "other_tool_3"
}
],
"input_sha256": "7d7e15a8b88f7f62634f22e3040c14dff81ed35cee498af81f150b6cbc1a55bd",
"output": [
[
{
"description": "desc 3",
"name": "other_tool_3"
},
{
"function": {
"description": "Retrieve original uncompressed content that was compressed to save tokens. Use this when you need more data than what's shown in compressed tool results. The hash is provided in compression markers like [N items compressed... hash=abc123].",
"name": "headroom_retrieve",
"parameters": {
"properties": {
"hash": {
"description": "Hash key from the compression marker (e.g., 'abc123' from hash=abc123)",
"type": "string"
},
"query": {
"description": "Optional search query to filter results. If provided, only returns items matching the query. If omitted, returns all original items.",
"type": "string"
}
},
"required": [
"hash"
],
"type": "object"
}
},
"type": "function"
}
],
true
],
"recorded_at": "2026-04-23T23:51:37.802244+00:00",
"transform": "ccr"
}

View file

@ -0,0 +1,44 @@
{
"config": {},
"input": [
{
"description": "desc 1",
"name": "other_tool_1"
}
],
"input_sha256": "7f7179505206626f8793122805abad646557b8e23915db1a8f2ed8fb4154e47e",
"output": [
[
{
"description": "desc 1",
"name": "other_tool_1"
},
{
"function": {
"description": "Retrieve original uncompressed content that was compressed to save tokens. Use this when you need more data than what's shown in compressed tool results. The hash is provided in compression markers like [N items compressed... hash=abc123].",
"name": "headroom_retrieve",
"parameters": {
"properties": {
"hash": {
"description": "Hash key from the compression marker (e.g., 'abc123' from hash=abc123)",
"type": "string"
},
"query": {
"description": "Optional search query to filter results. If provided, only returns items matching the query. If omitted, returns all original items.",
"type": "string"
}
},
"required": [
"hash"
],
"type": "object"
}
},
"type": "function"
}
],
true
],
"recorded_at": "2026-04-23T23:51:37.801863+00:00",
"transform": "ccr"
}

View file

@ -0,0 +1,44 @@
{
"config": {},
"input": [
{
"description": "desc 21",
"name": "other_tool_21"
}
],
"input_sha256": "8bf62db276326e98b3d49ae9c24e4eb75e58393fe706d13da72b2fb5efc76f01",
"output": [
[
{
"description": "desc 21",
"name": "other_tool_21"
},
{
"function": {
"description": "Retrieve original uncompressed content that was compressed to save tokens. Use this when you need more data than what's shown in compressed tool results. The hash is provided in compression markers like [N items compressed... hash=abc123].",
"name": "headroom_retrieve",
"parameters": {
"properties": {
"hash": {
"description": "Hash key from the compression marker (e.g., 'abc123' from hash=abc123)",
"type": "string"
},
"query": {
"description": "Optional search query to filter results. If provided, only returns items matching the query. If omitted, returns all original items.",
"type": "string"
}
},
"required": [
"hash"
],
"type": "object"
}
},
"type": "function"
}
],
true
],
"recorded_at": "2026-04-23T23:51:37.806740+00:00",
"transform": "ccr"
}

View file

@ -0,0 +1,41 @@
{
"config": {},
"input": [
{
"description": "desc 4",
"name": "other_tool_4"
}
],
"input_sha256": "8c605629cab1b7231506f35b0bcbcfbaa831984804968851eaf58829121f52ec",
"output": [
[
{
"description": "desc 4",
"name": "other_tool_4"
},
{
"description": "Retrieve original uncompressed content that was compressed to save tokens. Use this when you need more data than what's shown in compressed tool results. The hash is provided in compression markers like [N items compressed... hash=abc123].",
"input_schema": {
"properties": {
"hash": {
"description": "Hash key from the compression marker (e.g., 'abc123' from hash=abc123)",
"type": "string"
},
"query": {
"description": "Optional search query to filter results. If provided, only returns items matching the query. If omitted, returns all original items.",
"type": "string"
}
},
"required": [
"hash"
],
"type": "object"
},
"name": "headroom_retrieve"
}
],
true
],
"recorded_at": "2026-04-23T23:51:37.802480+00:00",
"transform": "ccr"
}

View file

@ -0,0 +1,41 @@
{
"config": {},
"input": [
{
"description": "desc 6",
"name": "other_tool_6"
}
],
"input_sha256": "936e54516eae8e15c9d4bf975a3471613e66fa2077b69f37fe6d47e862c3662c",
"output": [
[
{
"description": "desc 6",
"name": "other_tool_6"
},
{
"description": "Retrieve original uncompressed content that was compressed to save tokens. Use this when you need more data than what's shown in compressed tool results. The hash is provided in compression markers like [N items compressed... hash=abc123].",
"input_schema": {
"properties": {
"hash": {
"description": "Hash key from the compression marker (e.g., 'abc123' from hash=abc123)",
"type": "string"
},
"query": {
"description": "Optional search query to filter results. If provided, only returns items matching the query. If omitted, returns all original items.",
"type": "string"
}
},
"required": [
"hash"
],
"type": "object"
},
"name": "headroom_retrieve"
}
],
true
],
"recorded_at": "2026-04-23T23:51:37.802838+00:00",
"transform": "ccr"
}

View file

@ -0,0 +1,41 @@
{
"config": {},
"input": [
{
"description": "desc 18",
"name": "other_tool_18"
}
],
"input_sha256": "93b84c8742a4a013bba557f2a803d751a140d8e349be31871897696132a65664",
"output": [
[
{
"description": "desc 18",
"name": "other_tool_18"
},
{
"description": "Retrieve original uncompressed content that was compressed to save tokens. Use this when you need more data than what's shown in compressed tool results. The hash is provided in compression markers like [N items compressed... hash=abc123].",
"input_schema": {
"properties": {
"hash": {
"description": "Hash key from the compression marker (e.g., 'abc123' from hash=abc123)",
"type": "string"
},
"query": {
"description": "Optional search query to filter results. If provided, only returns items matching the query. If omitted, returns all original items.",
"type": "string"
}
},
"required": [
"hash"
],
"type": "object"
},
"name": "headroom_retrieve"
}
],
true
],
"recorded_at": "2026-04-23T23:51:37.806284+00:00",
"transform": "ccr"
}

View file

@ -0,0 +1,41 @@
{
"config": {},
"input": [
{
"description": "desc 8",
"name": "other_tool_8"
}
],
"input_sha256": "a4395ce692509f2395abe00668a974fc2551593da1e4a1997c315feec62d609a",
"output": [
[
{
"description": "desc 8",
"name": "other_tool_8"
},
{
"description": "Retrieve original uncompressed content that was compressed to save tokens. Use this when you need more data than what's shown in compressed tool results. The hash is provided in compression markers like [N items compressed... hash=abc123].",
"input_schema": {
"properties": {
"hash": {
"description": "Hash key from the compression marker (e.g., 'abc123' from hash=abc123)",
"type": "string"
},
"query": {
"description": "Optional search query to filter results. If provided, only returns items matching the query. If omitted, returns all original items.",
"type": "string"
}
},
"required": [
"hash"
],
"type": "object"
},
"name": "headroom_retrieve"
}
],
true
],
"recorded_at": "2026-04-23T23:51:37.803184+00:00",
"transform": "ccr"
}

View file

@ -0,0 +1,41 @@
{
"config": {},
"input": [
{
"description": "desc 2",
"name": "other_tool_2"
}
],
"input_sha256": "a960a03905b2305decb2cc44a143d7e5af8879ec54b7b31eb98d139af150cf45",
"output": [
[
{
"description": "desc 2",
"name": "other_tool_2"
},
{
"description": "Retrieve original uncompressed content that was compressed to save tokens. Use this when you need more data than what's shown in compressed tool results. The hash is provided in compression markers like [N items compressed... hash=abc123].",
"input_schema": {
"properties": {
"hash": {
"description": "Hash key from the compression marker (e.g., 'abc123' from hash=abc123)",
"type": "string"
},
"query": {
"description": "Optional search query to filter results. If provided, only returns items matching the query. If omitted, returns all original items.",
"type": "string"
}
},
"required": [
"hash"
],
"type": "object"
},
"name": "headroom_retrieve"
}
],
true
],
"recorded_at": "2026-04-23T23:51:37.802061+00:00",
"transform": "ccr"
}

View file

@ -0,0 +1,44 @@
{
"config": {},
"input": [
{
"description": "desc 5",
"name": "other_tool_5"
}
],
"input_sha256": "a9a5944d23fe44c03c2c77f1329c70e0c0d619fe4ce5da7fdd9c475d8e00b96a",
"output": [
[
{
"description": "desc 5",
"name": "other_tool_5"
},
{
"function": {
"description": "Retrieve original uncompressed content that was compressed to save tokens. Use this when you need more data than what's shown in compressed tool results. The hash is provided in compression markers like [N items compressed... hash=abc123].",
"name": "headroom_retrieve",
"parameters": {
"properties": {
"hash": {
"description": "Hash key from the compression marker (e.g., 'abc123' from hash=abc123)",
"type": "string"
},
"query": {
"description": "Optional search query to filter results. If provided, only returns items matching the query. If omitted, returns all original items.",
"type": "string"
}
},
"required": [
"hash"
],
"type": "object"
}
},
"type": "function"
}
],
true
],
"recorded_at": "2026-04-23T23:51:37.802669+00:00",
"transform": "ccr"
}

View file

@ -0,0 +1,44 @@
{
"config": {},
"input": [
{
"description": "desc 13",
"name": "other_tool_13"
}
],
"input_sha256": "aae9481c92191cd197de2f114ec033d9b1623a05a763f234225480ec2aa37ec1",
"output": [
[
{
"description": "desc 13",
"name": "other_tool_13"
},
{
"function": {
"description": "Retrieve original uncompressed content that was compressed to save tokens. Use this when you need more data than what's shown in compressed tool results. The hash is provided in compression markers like [N items compressed... hash=abc123].",
"name": "headroom_retrieve",
"parameters": {
"properties": {
"hash": {
"description": "Hash key from the compression marker (e.g., 'abc123' from hash=abc123)",
"type": "string"
},
"query": {
"description": "Optional search query to filter results. If provided, only returns items matching the query. If omitted, returns all original items.",
"type": "string"
}
},
"required": [
"hash"
],
"type": "object"
}
},
"type": "function"
}
],
true
],
"recorded_at": "2026-04-23T23:51:37.805176+00:00",
"transform": "ccr"
}

View file

@ -0,0 +1,44 @@
{
"config": {},
"input": [
{
"description": "desc 7",
"name": "other_tool_7"
}
],
"input_sha256": "b993d838f6a7aba083e8564f106357d30640dcfd0dc327b01e9b5f26f85f4129",
"output": [
[
{
"description": "desc 7",
"name": "other_tool_7"
},
{
"function": {
"description": "Retrieve original uncompressed content that was compressed to save tokens. Use this when you need more data than what's shown in compressed tool results. The hash is provided in compression markers like [N items compressed... hash=abc123].",
"name": "headroom_retrieve",
"parameters": {
"properties": {
"hash": {
"description": "Hash key from the compression marker (e.g., 'abc123' from hash=abc123)",
"type": "string"
},
"query": {
"description": "Optional search query to filter results. If provided, only returns items matching the query. If omitted, returns all original items.",
"type": "string"
}
},
"required": [
"hash"
],
"type": "object"
}
},
"type": "function"
}
],
true
],
"recorded_at": "2026-04-23T23:51:37.803014+00:00",
"transform": "ccr"
}

View file

@ -0,0 +1,41 @@
{
"config": {},
"input": [
{
"description": "desc 24",
"name": "other_tool_24"
}
],
"input_sha256": "c171cef065b43a3e16a97bdc84ba0e562c2195876b6281914cb81b72445da332",
"output": [
[
{
"description": "desc 24",
"name": "other_tool_24"
},
{
"description": "Retrieve original uncompressed content that was compressed to save tokens. Use this when you need more data than what's shown in compressed tool results. The hash is provided in compression markers like [N items compressed... hash=abc123].",
"input_schema": {
"properties": {
"hash": {
"description": "Hash key from the compression marker (e.g., 'abc123' from hash=abc123)",
"type": "string"
},
"query": {
"description": "Optional search query to filter results. If provided, only returns items matching the query. If omitted, returns all original items.",
"type": "string"
}
},
"required": [
"hash"
],
"type": "object"
},
"name": "headroom_retrieve"
}
],
true
],
"recorded_at": "2026-04-23T23:51:37.807275+00:00",
"transform": "ccr"
}

View file

@ -0,0 +1,41 @@
{
"config": {},
"input": [
{
"description": "desc 12",
"name": "other_tool_12"
}
],
"input_sha256": "d22dc7c618d06703b9be20a3e39352da3d17ce60039b8a90b5c9293eb277acf6",
"output": [
[
{
"description": "desc 12",
"name": "other_tool_12"
},
{
"description": "Retrieve original uncompressed content that was compressed to save tokens. Use this when you need more data than what's shown in compressed tool results. The hash is provided in compression markers like [N items compressed... hash=abc123].",
"input_schema": {
"properties": {
"hash": {
"description": "Hash key from the compression marker (e.g., 'abc123' from hash=abc123)",
"type": "string"
},
"query": {
"description": "Optional search query to filter results. If provided, only returns items matching the query. If omitted, returns all original items.",
"type": "string"
}
},
"required": [
"hash"
],
"type": "object"
},
"name": "headroom_retrieve"
}
],
true
],
"recorded_at": "2026-04-23T23:51:37.803865+00:00",
"transform": "ccr"
}

View file

@ -0,0 +1,41 @@
{
"config": {},
"input": [
{
"description": "desc 0",
"name": "other_tool_0"
}
],
"input_sha256": "d266ff10965e9e45f7a464dc376554f36e73ad61b2a69d9dca09d9c750836093",
"output": [
[
{
"description": "desc 0",
"name": "other_tool_0"
},
{
"description": "Retrieve original uncompressed content that was compressed to save tokens. Use this when you need more data than what's shown in compressed tool results. The hash is provided in compression markers like [N items compressed... hash=abc123].",
"input_schema": {
"properties": {
"hash": {
"description": "Hash key from the compression marker (e.g., 'abc123' from hash=abc123)",
"type": "string"
},
"query": {
"description": "Optional search query to filter results. If provided, only returns items matching the query. If omitted, returns all original items.",
"type": "string"
}
},
"required": [
"hash"
],
"type": "object"
},
"name": "headroom_retrieve"
}
],
true
],
"recorded_at": "2026-04-23T23:51:37.801596+00:00",
"transform": "ccr"
}

View file

@ -0,0 +1,41 @@
{
"config": {},
"input": [
{
"description": "desc 14",
"name": "other_tool_14"
}
],
"input_sha256": "e240be82ab1c494ba39d3d4200640e34865f4ae214b72bb7c4ae099b17d8806f",
"output": [
[
{
"description": "desc 14",
"name": "other_tool_14"
},
{
"description": "Retrieve original uncompressed content that was compressed to save tokens. Use this when you need more data than what's shown in compressed tool results. The hash is provided in compression markers like [N items compressed... hash=abc123].",
"input_schema": {
"properties": {
"hash": {
"description": "Hash key from the compression marker (e.g., 'abc123' from hash=abc123)",
"type": "string"
},
"query": {
"description": "Optional search query to filter results. If provided, only returns items matching the query. If omitted, returns all original items.",
"type": "string"
}
},
"required": [
"hash"
],
"type": "object"
},
"name": "headroom_retrieve"
}
],
true
],
"recorded_at": "2026-04-23T23:51:37.805539+00:00",
"transform": "ccr"
}

View file

@ -0,0 +1,44 @@
{
"config": {},
"input": [
{
"description": "desc 15",
"name": "other_tool_15"
}
],
"input_sha256": "f76cad36ebb6cf4e20617a5603457c90084eff584b81ea3214cc6d5c59784cf9",
"output": [
[
{
"description": "desc 15",
"name": "other_tool_15"
},
{
"function": {
"description": "Retrieve original uncompressed content that was compressed to save tokens. Use this when you need more data than what's shown in compressed tool results. The hash is provided in compression markers like [N items compressed... hash=abc123].",
"name": "headroom_retrieve",
"parameters": {
"properties": {
"hash": {
"description": "Hash key from the compression marker (e.g., 'abc123' from hash=abc123)",
"type": "string"
},
"query": {
"description": "Optional search query to filter results. If provided, only returns items matching the query. If omitted, returns all original items.",
"type": "string"
}
},
"required": [
"hash"
],
"type": "object"
}
},
"type": "function"
}
],
true
],
"recorded_at": "2026-04-23T23:51:37.805767+00:00",
"transform": "ccr"
}

View file

@ -0,0 +1,41 @@
{
"config": {},
"input": [
{
"description": "desc 10",
"name": "other_tool_10"
}
],
"input_sha256": "f7f1e1ad4d5f25c506d156919dc300b087a500deef17cfb97e7021f57f6db3af",
"output": [
[
{
"description": "desc 10",
"name": "other_tool_10"
},
{
"description": "Retrieve original uncompressed content that was compressed to save tokens. Use this when you need more data than what's shown in compressed tool results. The hash is provided in compression markers like [N items compressed... hash=abc123].",
"input_schema": {
"properties": {
"hash": {
"description": "Hash key from the compression marker (e.g., 'abc123' from hash=abc123)",
"type": "string"
},
"query": {
"description": "Optional search query to filter results. If provided, only returns items matching the query. If omitted, returns all original items.",
"type": "string"
}
},
"required": [
"hash"
],
"type": "object"
},
"name": "headroom_retrieve"
}
],
true
],
"recorded_at": "2026-04-23T23:51:37.803519+00:00",
"transform": "ccr"
}

View file

@ -0,0 +1,44 @@
{
"config": {},
"input": [
{
"description": "desc 9",
"name": "other_tool_9"
}
],
"input_sha256": "fd10707d5dc2526ba85fc276a771f799bccbd3fe1d81aab1208aee8a2cf14411",
"output": [
[
{
"description": "desc 9",
"name": "other_tool_9"
},
{
"function": {
"description": "Retrieve original uncompressed content that was compressed to save tokens. Use this when you need more data than what's shown in compressed tool results. The hash is provided in compression markers like [N items compressed... hash=abc123].",
"name": "headroom_retrieve",
"parameters": {
"properties": {
"hash": {
"description": "Hash key from the compression marker (e.g., 'abc123' from hash=abc123)",
"type": "string"
},
"query": {
"description": "Optional search query to filter results. If provided, only returns items matching the query. If omitted, returns all original items.",
"type": "string"
}
},
"required": [
"hash"
],
"type": "object"
}
},
"type": "function"
}
],
true
],
"recorded_at": "2026-04-23T23:51:37.803338+00:00",
"transform": "ccr"
}

View file

@ -0,0 +1,26 @@
{
"config": {
"always_keep_additions": true,
"always_keep_deletions": true,
"enable_ccr": true,
"max_context_lines": 2,
"max_files": 20,
"max_hunks_per_file": 10,
"min_lines_for_ccr": 50
},
"input": "diff --git a/file_0.py b/file_0.py\n--- a/file_0.py\n+++ b/file_0.py\n@@ -1,10 +1,12 @@\n context_0_0\n context_1_0\n context_2_0\n context_3_0\n context_4_0\n-removed_0_0\n-removed_1_0\n-removed_2_0\n+added_0_0\n+added_1_0\n+added_2_0\n+added_3_0\n+added_4_0\n tail_0_0\n tail_1_0\n tail_2_0\n tail_3_0\n tail_4_0\ndiff --git a/file_1.py b/file_1.py\n--- a/file_1.py\n+++ b/file_1.py\n@@ -1,10 +1,12 @@\n context_0_1\n context_1_1\n context_2_1\n context_3_1\n context_4_1\n-removed_0_1\n-removed_1_1\n-removed_2_1\n+added_0_1\n+added_1_1\n+added_2_1\n+added_3_1\n+added_4_1\n tail_0_1\n tail_1_1\n tail_2_1\n tail_3_1\n tail_4_1\ndiff --git a/file_2.py b/file_2.py\n--- a/file_2.py\n+++ b/file_2.py\n@@ -1,10 +1,12 @@\n context_0_2\n context_1_2\n context_2_2\n context_3_2\n context_4_2\n-removed_0_2\n-removed_1_2\n-removed_2_2\n+added_0_2\n+added_1_2\n+added_2_2\n+added_3_2\n+added_4_2\n tail_0_2\n tail_1_2\n tail_2_2\n tail_3_2\n tail_4_2\ndiff --git a/file_3.py b/file_3.py\n--- a/file_3.py\n+++ b/file_3.py\n@@ -1,10 +1,12 @@\n context_0_3\n context_1_3\n context_2_3\n context_3_3\n context_4_3\n-removed_0_3\n-removed_1_3\n-removed_2_3\n+added_0_3\n+added_1_3\n+added_2_3\n+added_3_3\n+added_4_3\n tail_0_3\n tail_1_3\n tail_2_3\n tail_3_3\n tail_4_3\ndiff --git a/file_4.py b/file_4.py\n--- a/file_4.py\n+++ b/file_4.py\n@@ -1,10 +1,12 @@\n context_0_4\n context_1_4\n context_2_4\n context_3_4\n context_4_4\n-removed_0_4\n-removed_1_4\n-removed_2_4\n+added_0_4\n+added_1_4\n+added_2_4\n+added_3_4\n+added_4_4\n tail_0_4\n tail_1_4\n tail_2_4\n tail_3_4\n tail_4_4\ndiff --git a/file_5.py b/file_5.py\n--- a/file_5.py\n+++ b/file_5.py\n@@ -1,10 +1,12 @@\n context_0_5\n context_1_5\n context_2_5\n context_3_5\n context_4_5\n-removed_0_5\n-removed_1_5\n-removed_2_5\n+added_0_5\n+added_1_5\n+added_2_5\n+added_3_5\n+added_4_5\n tail_0_5\n tail_1_5\n tail_2_5\n tail_3_5\n tail_4_5\ndiff --git a/file_6.py b/file_6.py\n--- a/file_6.py\n+++ b/file_6.py\n@@ -1,10 +1,12 @@\n context_0_6\n context_1_6\n context_2_6\n context_3_6\n context_4_6\n-removed_0_6\n-removed_1_6\n-removed_2_6\n+added_0_6\n+added_1_6\n+added_2_6\n+added_3_6\n+added_4_6\n tail_0_6\n tail_1_6\n tail_2_6\n tail_3_6\n tail_4_6\ndiff --git a/file_7.py b/file_7.py\n--- a/file_7.py\n+++ b/file_7.py\n@@ -1,10 +1,12 @@\n context_0_7\n context_1_7\n context_2_7\n context_3_7\n context_4_7\n-removed_0_7\n-removed_1_7\n-removed_2_7\n+added_0_7\n+added_1_7\n+added_2_7\n+added_3_7\n+added_4_7\n tail_0_7\n tail_1_7\n tail_2_7\n tail_3_7\n tail_4_7\n# variant 1",
"input_sha256": "0cf5e189bd42fab1313c9ded283effee957d096eb1a8e1aa05fab8224644307f",
"output": {
"additions": 40,
"cache_key": "4ced183e23d56ca575d6ff00",
"compressed": "diff --git a/file_0.py b/file_0.py\n--- a/file_0.py\n+++ b/file_0.py\n@@ -1,10 +1,12 @@\n context_3_0\n context_4_0\n-removed_0_0\n-removed_1_0\n-removed_2_0\n+added_0_0\n+added_1_0\n+added_2_0\n+added_3_0\n+added_4_0\n tail_0_0\n tail_1_0\ndiff --git a/file_1.py b/file_1.py\n--- a/file_1.py\n+++ b/file_1.py\n@@ -1,10 +1,12 @@\n context_3_1\n context_4_1\n-removed_0_1\n-removed_1_1\n-removed_2_1\n+added_0_1\n+added_1_1\n+added_2_1\n+added_3_1\n+added_4_1\n tail_0_1\n tail_1_1\ndiff --git a/file_2.py b/file_2.py\n--- a/file_2.py\n+++ b/file_2.py\n@@ -1,10 +1,12 @@\n context_3_2\n context_4_2\n-removed_0_2\n-removed_1_2\n-removed_2_2\n+added_0_2\n+added_1_2\n+added_2_2\n+added_3_2\n+added_4_2\n tail_0_2\n tail_1_2\ndiff --git a/file_3.py b/file_3.py\n--- a/file_3.py\n+++ b/file_3.py\n@@ -1,10 +1,12 @@\n context_3_3\n context_4_3\n-removed_0_3\n-removed_1_3\n-removed_2_3\n+added_0_3\n+added_1_3\n+added_2_3\n+added_3_3\n+added_4_3\n tail_0_3\n tail_1_3\ndiff --git a/file_4.py b/file_4.py\n--- a/file_4.py\n+++ b/file_4.py\n@@ -1,10 +1,12 @@\n context_3_4\n context_4_4\n-removed_0_4\n-removed_1_4\n-removed_2_4\n+added_0_4\n+added_1_4\n+added_2_4\n+added_3_4\n+added_4_4\n tail_0_4\n tail_1_4\ndiff --git a/file_5.py b/file_5.py\n--- a/file_5.py\n+++ b/file_5.py\n@@ -1,10 +1,12 @@\n context_3_5\n context_4_5\n-removed_0_5\n-removed_1_5\n-removed_2_5\n+added_0_5\n+added_1_5\n+added_2_5\n+added_3_5\n+added_4_5\n tail_0_5\n tail_1_5\ndiff --git a/file_6.py b/file_6.py\n--- a/file_6.py\n+++ b/file_6.py\n@@ -1,10 +1,12 @@\n context_3_6\n context_4_6\n-removed_0_6\n-removed_1_6\n-removed_2_6\n+added_0_6\n+added_1_6\n+added_2_6\n+added_3_6\n+added_4_6\n tail_0_6\n tail_1_6\ndiff --git a/file_7.py b/file_7.py\n--- a/file_7.py\n+++ b/file_7.py\n@@ -1,10 +1,12 @@\n context_3_7\n context_4_7\n-removed_0_7\n-removed_1_7\n-removed_2_7\n+added_0_7\n+added_1_7\n+added_2_7\n+added_3_7\n+added_4_7\n tail_0_7\n tail_1_7\n[8 files changed, +40 -24 lines]\n[177 lines compressed to 129. Retrieve full diff: hash=4ced183e23d56ca575d6ff00]",
"compressed_line_count": 129,
"deletions": 24,
"files_affected": 8,
"hunks_kept": 8,
"hunks_removed": 0,
"original_line_count": 177
},
"recorded_at": "2026-04-23T23:51:37.351451+00:00",
"transform": "diff_compressor"
}

View file

@ -0,0 +1,26 @@
{
"config": {
"always_keep_additions": true,
"always_keep_deletions": true,
"enable_ccr": true,
"max_context_lines": 2,
"max_files": 20,
"max_hunks_per_file": 10,
"min_lines_for_ccr": 50
},
"input": "diff --git a/src/main.rs b/src/main.rs\n--- a/src/main.rs\n+++ b/src/main.rs\n@@ -10,7 +10,7 @@\n unchanged_line_0\n unchanged_line_1\n unchanged_line_2\n unchanged_line_3\n unchanged_line_4\n- let x = 1;\n+ let x = 2;\n unchanged_after_0\n unchanged_after_1\n unchanged_after_2\n unchanged_after_3\n unchanged_after_4\n# variant 0",
"input_sha256": "10f0106f40cbe2faa4471f44c8469acc2a7cd9cf36ba23f4c895f365cf85b298",
"output": {
"additions": 0,
"cache_key": null,
"compressed": "diff --git a/src/main.rs b/src/main.rs\n--- a/src/main.rs\n+++ b/src/main.rs\n@@ -10,7 +10,7 @@\n unchanged_line_0\n unchanged_line_1\n unchanged_line_2\n unchanged_line_3\n unchanged_line_4\n- let x = 1;\n+ let x = 2;\n unchanged_after_0\n unchanged_after_1\n unchanged_after_2\n unchanged_after_3\n unchanged_after_4\n# variant 0",
"compressed_line_count": 17,
"deletions": 0,
"files_affected": 0,
"hunks_kept": 0,
"hunks_removed": 0,
"original_line_count": 17
},
"recorded_at": "2026-04-23T23:51:37.349228+00:00",
"transform": "diff_compressor"
}

View file

@ -0,0 +1,26 @@
{
"config": {
"always_keep_additions": true,
"always_keep_deletions": true,
"enable_ccr": true,
"max_context_lines": 2,
"max_files": 20,
"max_hunks_per_file": 10,
"min_lines_for_ccr": 50
},
"input": "diff --git a/file_0.py b/file_0.py\n--- a/file_0.py\n+++ b/file_0.py\n@@ -1,10 +1,12 @@\n context_0_0\n context_1_0\n context_2_0\n context_3_0\n context_4_0\n-removed_0_0\n-removed_1_0\n-removed_2_0\n+added_0_0\n+added_1_0\n+added_2_0\n+added_3_0\n+added_4_0\n tail_0_0\n tail_1_0\n tail_2_0\n tail_3_0\n tail_4_0\ndiff --git a/file_1.py b/file_1.py\n--- a/file_1.py\n+++ b/file_1.py\n@@ -1,10 +1,12 @@\n context_0_1\n context_1_1\n context_2_1\n context_3_1\n context_4_1\n-removed_0_1\n-removed_1_1\n-removed_2_1\n+added_0_1\n+added_1_1\n+added_2_1\n+added_3_1\n+added_4_1\n tail_0_1\n tail_1_1\n tail_2_1\n tail_3_1\n tail_4_1\ndiff --git a/file_2.py b/file_2.py\n--- a/file_2.py\n+++ b/file_2.py\n@@ -1,10 +1,12 @@\n context_0_2\n context_1_2\n context_2_2\n context_3_2\n context_4_2\n-removed_0_2\n-removed_1_2\n-removed_2_2\n+added_0_2\n+added_1_2\n+added_2_2\n+added_3_2\n+added_4_2\n tail_0_2\n tail_1_2\n tail_2_2\n tail_3_2\n tail_4_2\ndiff --git a/file_3.py b/file_3.py\n--- a/file_3.py\n+++ b/file_3.py\n@@ -1,10 +1,12 @@\n context_0_3\n context_1_3\n context_2_3\n context_3_3\n context_4_3\n-removed_0_3\n-removed_1_3\n-removed_2_3\n+added_0_3\n+added_1_3\n+added_2_3\n+added_3_3\n+added_4_3\n tail_0_3\n tail_1_3\n tail_2_3\n tail_3_3\n tail_4_3\ndiff --git a/file_4.py b/file_4.py\n--- a/file_4.py\n+++ b/file_4.py\n@@ -1,10 +1,12 @@\n context_0_4\n context_1_4\n context_2_4\n context_3_4\n context_4_4\n-removed_0_4\n-removed_1_4\n-removed_2_4\n+added_0_4\n+added_1_4\n+added_2_4\n+added_3_4\n+added_4_4\n tail_0_4\n tail_1_4\n tail_2_4\n tail_3_4\n tail_4_4\ndiff --git a/file_5.py b/file_5.py\n--- a/file_5.py\n+++ b/file_5.py\n@@ -1,10 +1,12 @@\n context_0_5\n context_1_5\n context_2_5\n context_3_5\n context_4_5\n-removed_0_5\n-removed_1_5\n-removed_2_5\n+added_0_5\n+added_1_5\n+added_2_5\n+added_3_5\n+added_4_5\n tail_0_5\n tail_1_5\n tail_2_5\n tail_3_5\n tail_4_5\ndiff --git a/file_6.py b/file_6.py\n--- a/file_6.py\n+++ b/file_6.py\n@@ -1,10 +1,12 @@\n context_0_6\n context_1_6\n context_2_6\n context_3_6\n context_4_6\n-removed_0_6\n-removed_1_6\n-removed_2_6\n+added_0_6\n+added_1_6\n+added_2_6\n+added_3_6\n+added_4_6\n tail_0_6\n tail_1_6\n tail_2_6\n tail_3_6\n tail_4_6\ndiff --git a/file_7.py b/file_7.py\n--- a/file_7.py\n+++ b/file_7.py\n@@ -1,10 +1,12 @@\n context_0_7\n context_1_7\n context_2_7\n context_3_7\n context_4_7\n-removed_0_7\n-removed_1_7\n-removed_2_7\n+added_0_7\n+added_1_7\n+added_2_7\n+added_3_7\n+added_4_7\n tail_0_7\n tail_1_7\n tail_2_7\n tail_3_7\n tail_4_7\n# variant 2",
"input_sha256": "1a4e35c597c7a001858425c04cf7083cec38ab5966126b16e58cfc616d497d93",
"output": {
"additions": 40,
"cache_key": "11ee99638b134ba374157005",
"compressed": "diff --git a/file_0.py b/file_0.py\n--- a/file_0.py\n+++ b/file_0.py\n@@ -1,10 +1,12 @@\n context_3_0\n context_4_0\n-removed_0_0\n-removed_1_0\n-removed_2_0\n+added_0_0\n+added_1_0\n+added_2_0\n+added_3_0\n+added_4_0\n tail_0_0\n tail_1_0\ndiff --git a/file_1.py b/file_1.py\n--- a/file_1.py\n+++ b/file_1.py\n@@ -1,10 +1,12 @@\n context_3_1\n context_4_1\n-removed_0_1\n-removed_1_1\n-removed_2_1\n+added_0_1\n+added_1_1\n+added_2_1\n+added_3_1\n+added_4_1\n tail_0_1\n tail_1_1\ndiff --git a/file_2.py b/file_2.py\n--- a/file_2.py\n+++ b/file_2.py\n@@ -1,10 +1,12 @@\n context_3_2\n context_4_2\n-removed_0_2\n-removed_1_2\n-removed_2_2\n+added_0_2\n+added_1_2\n+added_2_2\n+added_3_2\n+added_4_2\n tail_0_2\n tail_1_2\ndiff --git a/file_3.py b/file_3.py\n--- a/file_3.py\n+++ b/file_3.py\n@@ -1,10 +1,12 @@\n context_3_3\n context_4_3\n-removed_0_3\n-removed_1_3\n-removed_2_3\n+added_0_3\n+added_1_3\n+added_2_3\n+added_3_3\n+added_4_3\n tail_0_3\n tail_1_3\ndiff --git a/file_4.py b/file_4.py\n--- a/file_4.py\n+++ b/file_4.py\n@@ -1,10 +1,12 @@\n context_3_4\n context_4_4\n-removed_0_4\n-removed_1_4\n-removed_2_4\n+added_0_4\n+added_1_4\n+added_2_4\n+added_3_4\n+added_4_4\n tail_0_4\n tail_1_4\ndiff --git a/file_5.py b/file_5.py\n--- a/file_5.py\n+++ b/file_5.py\n@@ -1,10 +1,12 @@\n context_3_5\n context_4_5\n-removed_0_5\n-removed_1_5\n-removed_2_5\n+added_0_5\n+added_1_5\n+added_2_5\n+added_3_5\n+added_4_5\n tail_0_5\n tail_1_5\ndiff --git a/file_6.py b/file_6.py\n--- a/file_6.py\n+++ b/file_6.py\n@@ -1,10 +1,12 @@\n context_3_6\n context_4_6\n-removed_0_6\n-removed_1_6\n-removed_2_6\n+added_0_6\n+added_1_6\n+added_2_6\n+added_3_6\n+added_4_6\n tail_0_6\n tail_1_6\ndiff --git a/file_7.py b/file_7.py\n--- a/file_7.py\n+++ b/file_7.py\n@@ -1,10 +1,12 @@\n context_3_7\n context_4_7\n-removed_0_7\n-removed_1_7\n-removed_2_7\n+added_0_7\n+added_1_7\n+added_2_7\n+added_3_7\n+added_4_7\n tail_0_7\n tail_1_7\n[8 files changed, +40 -24 lines]\n[177 lines compressed to 129. Retrieve full diff: hash=11ee99638b134ba374157005]",
"compressed_line_count": 129,
"deletions": 24,
"files_affected": 8,
"hunks_kept": 8,
"hunks_removed": 0,
"original_line_count": 177
},
"recorded_at": "2026-04-23T23:51:37.352262+00:00",
"transform": "diff_compressor"
}

View file

@ -0,0 +1,26 @@
{
"config": {
"always_keep_additions": true,
"always_keep_deletions": true,
"enable_ccr": true,
"max_context_lines": 2,
"max_files": 20,
"max_hunks_per_file": 10,
"min_lines_for_ccr": 50
},
"input": "diff --git a/src/main.rs b/src/main.rs\n--- a/src/main.rs\n+++ b/src/main.rs\n@@ -10,7 +10,7 @@\n unchanged_line_0\n unchanged_line_1\n unchanged_line_2\n unchanged_line_3\n unchanged_line_4\n- let x = 1;\n+ let x = 2;\n unchanged_after_0\n unchanged_after_1\n unchanged_after_2\n unchanged_after_3\n unchanged_after_4\n# variant 2",
"input_sha256": "1bdfa041108f0aad443277ec10aab9ff265608f50ff3f58c156b7fee476727d6",
"output": {
"additions": 0,
"cache_key": null,
"compressed": "diff --git a/src/main.rs b/src/main.rs\n--- a/src/main.rs\n+++ b/src/main.rs\n@@ -10,7 +10,7 @@\n unchanged_line_0\n unchanged_line_1\n unchanged_line_2\n unchanged_line_3\n unchanged_line_4\n- let x = 1;\n+ let x = 2;\n unchanged_after_0\n unchanged_after_1\n unchanged_after_2\n unchanged_after_3\n unchanged_after_4\n# variant 2",
"compressed_line_count": 17,
"deletions": 0,
"files_affected": 0,
"hunks_kept": 0,
"hunks_removed": 0,
"original_line_count": 17
},
"recorded_at": "2026-04-23T23:51:37.349572+00:00",
"transform": "diff_compressor"
}

View file

@ -0,0 +1,26 @@
{
"config": {
"always_keep_additions": true,
"always_keep_deletions": true,
"enable_ccr": true,
"max_context_lines": 2,
"max_files": 20,
"max_hunks_per_file": 10,
"min_lines_for_ccr": 50
},
"input": "diff --git a/a.py b/a.py\n--- a/a.py\n+++ b/a.py\n@@ -1,3 +1,3 @@\n-x = 1\n+x = 2\n y = 3\n z = 4\n# variant 0",
"input_sha256": "1eeb1f7ae64c77446687a9b56b0ba9712856faaf1993dfec6bd13135d7003552",
"output": {
"additions": 0,
"cache_key": null,
"compressed": "diff --git a/a.py b/a.py\n--- a/a.py\n+++ b/a.py\n@@ -1,3 +1,3 @@\n-x = 1\n+x = 2\n y = 3\n z = 4\n# variant 0",
"compressed_line_count": 9,
"deletions": 0,
"files_affected": 0,
"hunks_kept": 0,
"hunks_removed": 0,
"original_line_count": 9
},
"recorded_at": "2026-04-23T23:51:37.347500+00:00",
"transform": "diff_compressor"
}

View file

@ -0,0 +1,26 @@
{
"config": {
"always_keep_additions": true,
"always_keep_deletions": true,
"enable_ccr": true,
"max_context_lines": 2,
"max_files": 20,
"max_hunks_per_file": 10,
"min_lines_for_ccr": 50
},
"input": "diff --git a/src/main.rs b/src/main.rs\n--- a/src/main.rs\n+++ b/src/main.rs\n@@ -10,7 +10,7 @@\n unchanged_line_0\n unchanged_line_1\n unchanged_line_2\n unchanged_line_3\n unchanged_line_4\n- let x = 1;\n+ let x = 2;\n unchanged_after_0\n unchanged_after_1\n unchanged_after_2\n unchanged_after_3\n unchanged_after_4\n# variant 5",
"input_sha256": "2c07a365f52d6fa6911a8c6c2ab691f2a800538898a2bb0df048d7025a60a79e",
"output": {
"additions": 0,
"cache_key": null,
"compressed": "diff --git a/src/main.rs b/src/main.rs\n--- a/src/main.rs\n+++ b/src/main.rs\n@@ -10,7 +10,7 @@\n unchanged_line_0\n unchanged_line_1\n unchanged_line_2\n unchanged_line_3\n unchanged_line_4\n- let x = 1;\n+ let x = 2;\n unchanged_after_0\n unchanged_after_1\n unchanged_after_2\n unchanged_after_3\n unchanged_after_4\n# variant 5",
"compressed_line_count": 17,
"deletions": 0,
"files_affected": 0,
"hunks_kept": 0,
"hunks_removed": 0,
"original_line_count": 17
},
"recorded_at": "2026-04-23T23:51:37.350101+00:00",
"transform": "diff_compressor"
}

View file

@ -0,0 +1,26 @@
{
"config": {
"always_keep_additions": true,
"always_keep_deletions": true,
"enable_ccr": true,
"max_context_lines": 2,
"max_files": 20,
"max_hunks_per_file": 10,
"min_lines_for_ccr": 50
},
"input": "diff --git a/new.py b/new.py\nnew file mode 100644\n--- /dev/null\n+++ b/new.py\n@@ -0,0 +1,4 @@\n+def hello():\n+ return 'world'\n+\n+x = hello()\n# variant 0",
"input_sha256": "2cd095b132f5da3f90c8f101e192724f40e4d23fa8ad720c287a72d7944ea589",
"output": {
"additions": 0,
"cache_key": null,
"compressed": "diff --git a/new.py b/new.py\nnew file mode 100644\n--- /dev/null\n+++ b/new.py\n@@ -0,0 +1,4 @@\n+def hello():\n+ return 'world'\n+\n+x = hello()\n# variant 0",
"compressed_line_count": 10,
"deletions": 0,
"files_affected": 0,
"hunks_kept": 0,
"hunks_removed": 0,
"original_line_count": 10
},
"recorded_at": "2026-04-23T23:51:37.353113+00:00",
"transform": "diff_compressor"
}

View file

@ -0,0 +1,26 @@
{
"config": {
"always_keep_additions": true,
"always_keep_deletions": true,
"enable_ccr": true,
"max_context_lines": 2,
"max_files": 20,
"max_hunks_per_file": 10,
"min_lines_for_ccr": 50
},
"input": "diff --git a/a.py b/a.py\n--- a/a.py\n+++ b/a.py\n@@ -1,3 +1,3 @@\n-x = 1\n+x = 2\n y = 3\n z = 4\n# variant 2",
"input_sha256": "433b2d25303645edb0104d51e2c4f677cf0509703a7755adb44071b2251f479a",
"output": {
"additions": 0,
"cache_key": null,
"compressed": "diff --git a/a.py b/a.py\n--- a/a.py\n+++ b/a.py\n@@ -1,3 +1,3 @@\n-x = 1\n+x = 2\n y = 3\n z = 4\n# variant 2",
"compressed_line_count": 9,
"deletions": 0,
"files_affected": 0,
"hunks_kept": 0,
"hunks_removed": 0,
"original_line_count": 9
},
"recorded_at": "2026-04-23T23:51:37.347987+00:00",
"transform": "diff_compressor"
}

View file

@ -0,0 +1,26 @@
{
"config": {
"always_keep_additions": true,
"always_keep_deletions": true,
"enable_ccr": true,
"max_context_lines": 2,
"max_files": 20,
"max_hunks_per_file": 10,
"min_lines_for_ccr": 50
},
"input": "diff --git a/new.py b/new.py\nnew file mode 100644\n--- /dev/null\n+++ b/new.py\n@@ -0,0 +1,4 @@\n+def hello():\n+ return 'world'\n+\n+x = hello()\n# variant 2",
"input_sha256": "4844a5f9605b84255e51b1e4b434ee7e8a93311eaac6704b146c1176b97d1d0a",
"output": {
"additions": 0,
"cache_key": null,
"compressed": "diff --git a/new.py b/new.py\nnew file mode 100644\n--- /dev/null\n+++ b/new.py\n@@ -0,0 +1,4 @@\n+def hello():\n+ return 'world'\n+\n+x = hello()\n# variant 2",
"compressed_line_count": 10,
"deletions": 0,
"files_affected": 0,
"hunks_kept": 0,
"hunks_removed": 0,
"original_line_count": 10
},
"recorded_at": "2026-04-23T23:51:37.353749+00:00",
"transform": "diff_compressor"
}

View file

@ -0,0 +1,26 @@
{
"config": {
"always_keep_additions": true,
"always_keep_deletions": true,
"enable_ccr": true,
"max_context_lines": 2,
"max_files": 20,
"max_hunks_per_file": 10,
"min_lines_for_ccr": 50
},
"input": "diff --git a/new.py b/new.py\nnew file mode 100644\n--- /dev/null\n+++ b/new.py\n@@ -0,0 +1,4 @@\n+def hello():\n+ return 'world'\n+\n+x = hello()\n# variant 1",
"input_sha256": "649fd65ad35111911ad4d54fa694eac28d9bcbcc9f9fc99e10329f5bbcf20035",
"output": {
"additions": 0,
"cache_key": null,
"compressed": "diff --git a/new.py b/new.py\nnew file mode 100644\n--- /dev/null\n+++ b/new.py\n@@ -0,0 +1,4 @@\n+def hello():\n+ return 'world'\n+\n+x = hello()\n# variant 1",
"compressed_line_count": 10,
"deletions": 0,
"files_affected": 0,
"hunks_kept": 0,
"hunks_removed": 0,
"original_line_count": 10
},
"recorded_at": "2026-04-23T23:51:37.353544+00:00",
"transform": "diff_compressor"
}

View file

@ -0,0 +1,26 @@
{
"config": {
"always_keep_additions": true,
"always_keep_deletions": true,
"enable_ccr": true,
"max_context_lines": 2,
"max_files": 20,
"max_hunks_per_file": 10,
"min_lines_for_ccr": 50
},
"input": "diff --git a/a.py b/a.py\n--- a/a.py\n+++ b/a.py\n@@ -1,3 +1,3 @@\n-x = 1\n+x = 2\n y = 3\n z = 4\n# variant 6",
"input_sha256": "9b9a03215a7198bfe469acdb7207e518354b4d5e0d2b2ed1edd958a0c22184b9",
"output": {
"additions": 0,
"cache_key": null,
"compressed": "diff --git a/a.py b/a.py\n--- a/a.py\n+++ b/a.py\n@@ -1,3 +1,3 @@\n-x = 1\n+x = 2\n y = 3\n z = 4\n# variant 6",
"compressed_line_count": 9,
"deletions": 0,
"files_affected": 0,
"hunks_kept": 0,
"hunks_removed": 0,
"original_line_count": 9
},
"recorded_at": "2026-04-23T23:51:37.349054+00:00",
"transform": "diff_compressor"
}

View file

@ -0,0 +1,26 @@
{
"config": {
"always_keep_additions": true,
"always_keep_deletions": true,
"enable_ccr": true,
"max_context_lines": 2,
"max_files": 20,
"max_hunks_per_file": 10,
"min_lines_for_ccr": 50
},
"input": "diff --git a/a.py b/a.py\n--- a/a.py\n+++ b/a.py\n@@ -1,3 +1,3 @@\n-x = 1\n+x = 2\n y = 3\n z = 4\n# variant 4",
"input_sha256": "b0b83d16366edfed6f05a8f452615d7fa78f0b7a3da5f00435084b5c85de199f",
"output": {
"additions": 0,
"cache_key": null,
"compressed": "diff --git a/a.py b/a.py\n--- a/a.py\n+++ b/a.py\n@@ -1,3 +1,3 @@\n-x = 1\n+x = 2\n y = 3\n z = 4\n# variant 4",
"compressed_line_count": 9,
"deletions": 0,
"files_affected": 0,
"hunks_kept": 0,
"hunks_removed": 0,
"original_line_count": 9
},
"recorded_at": "2026-04-23T23:51:37.348655+00:00",
"transform": "diff_compressor"
}

View file

@ -0,0 +1,26 @@
{
"config": {
"always_keep_additions": true,
"always_keep_deletions": true,
"enable_ccr": true,
"max_context_lines": 2,
"max_files": 20,
"max_hunks_per_file": 10,
"min_lines_for_ccr": 50
},
"input": "diff --git a/src/main.rs b/src/main.rs\n--- a/src/main.rs\n+++ b/src/main.rs\n@@ -10,7 +10,7 @@\n unchanged_line_0\n unchanged_line_1\n unchanged_line_2\n unchanged_line_3\n unchanged_line_4\n- let x = 1;\n+ let x = 2;\n unchanged_after_0\n unchanged_after_1\n unchanged_after_2\n unchanged_after_3\n unchanged_after_4\n# variant 3",
"input_sha256": "b605bd89e234cbff8b72d508c791f9ba0d263e929c3f0ad1263431486a8080f0",
"output": {
"additions": 0,
"cache_key": null,
"compressed": "diff --git a/src/main.rs b/src/main.rs\n--- a/src/main.rs\n+++ b/src/main.rs\n@@ -10,7 +10,7 @@\n unchanged_line_0\n unchanged_line_1\n unchanged_line_2\n unchanged_line_3\n unchanged_line_4\n- let x = 1;\n+ let x = 2;\n unchanged_after_0\n unchanged_after_1\n unchanged_after_2\n unchanged_after_3\n unchanged_after_4\n# variant 3",
"compressed_line_count": 17,
"deletions": 0,
"files_affected": 0,
"hunks_kept": 0,
"hunks_removed": 0,
"original_line_count": 17
},
"recorded_at": "2026-04-23T23:51:37.349729+00:00",
"transform": "diff_compressor"
}

View file

@ -0,0 +1,26 @@
{
"config": {
"always_keep_additions": true,
"always_keep_deletions": true,
"enable_ccr": true,
"max_context_lines": 2,
"max_files": 20,
"max_hunks_per_file": 10,
"min_lines_for_ccr": 50
},
"input": "diff --git a/src/main.rs b/src/main.rs\n--- a/src/main.rs\n+++ b/src/main.rs\n@@ -10,7 +10,7 @@\n unchanged_line_0\n unchanged_line_1\n unchanged_line_2\n unchanged_line_3\n unchanged_line_4\n- let x = 1;\n+ let x = 2;\n unchanged_after_0\n unchanged_after_1\n unchanged_after_2\n unchanged_after_3\n unchanged_after_4\n# variant 4",
"input_sha256": "c6b6d5c9fd7f1ad260a76dc351d49219e2bbc94807e9a7f22f3fd0dabf2a45da",
"output": {
"additions": 0,
"cache_key": null,
"compressed": "diff --git a/src/main.rs b/src/main.rs\n--- a/src/main.rs\n+++ b/src/main.rs\n@@ -10,7 +10,7 @@\n unchanged_line_0\n unchanged_line_1\n unchanged_line_2\n unchanged_line_3\n unchanged_line_4\n- let x = 1;\n+ let x = 2;\n unchanged_after_0\n unchanged_after_1\n unchanged_after_2\n unchanged_after_3\n unchanged_after_4\n# variant 4",
"compressed_line_count": 17,
"deletions": 0,
"files_affected": 0,
"hunks_kept": 0,
"hunks_removed": 0,
"original_line_count": 17
},
"recorded_at": "2026-04-23T23:51:37.349941+00:00",
"transform": "diff_compressor"
}

View file

@ -0,0 +1,26 @@
{
"config": {
"always_keep_additions": true,
"always_keep_deletions": true,
"enable_ccr": true,
"max_context_lines": 2,
"max_files": 20,
"max_hunks_per_file": 10,
"min_lines_for_ccr": 50
},
"input": "diff --git a/src/main.rs b/src/main.rs\n--- a/src/main.rs\n+++ b/src/main.rs\n@@ -10,7 +10,7 @@\n unchanged_line_0\n unchanged_line_1\n unchanged_line_2\n unchanged_line_3\n unchanged_line_4\n- let x = 1;\n+ let x = 2;\n unchanged_after_0\n unchanged_after_1\n unchanged_after_2\n unchanged_after_3\n unchanged_after_4\n# variant 1",
"input_sha256": "c72662c635d1defae45f9cdd261f3ddd8fe62c6a5feee19470609bb84b2d561d",
"output": {
"additions": 0,
"cache_key": null,
"compressed": "diff --git a/src/main.rs b/src/main.rs\n--- a/src/main.rs\n+++ b/src/main.rs\n@@ -10,7 +10,7 @@\n unchanged_line_0\n unchanged_line_1\n unchanged_line_2\n unchanged_line_3\n unchanged_line_4\n- let x = 1;\n+ let x = 2;\n unchanged_after_0\n unchanged_after_1\n unchanged_after_2\n unchanged_after_3\n unchanged_after_4\n# variant 1",
"compressed_line_count": 17,
"deletions": 0,
"files_affected": 0,
"hunks_kept": 0,
"hunks_removed": 0,
"original_line_count": 17
},
"recorded_at": "2026-04-23T23:51:37.349404+00:00",
"transform": "diff_compressor"
}

View file

@ -0,0 +1,26 @@
{
"config": {
"always_keep_additions": true,
"always_keep_deletions": true,
"enable_ccr": true,
"max_context_lines": 2,
"max_files": 20,
"max_hunks_per_file": 10,
"min_lines_for_ccr": 50
},
"input": "diff --git a/a.py b/a.py\n--- a/a.py\n+++ b/a.py\n@@ -1,3 +1,3 @@\n-x = 1\n+x = 2\n y = 3\n z = 4\n# variant 5",
"input_sha256": "d0ba5cae330722be827e591da5644c445cf646db7b4c76a51473cda1165140ba",
"output": {
"additions": 0,
"cache_key": null,
"compressed": "diff --git a/a.py b/a.py\n--- a/a.py\n+++ b/a.py\n@@ -1,3 +1,3 @@\n-x = 1\n+x = 2\n y = 3\n z = 4\n# variant 5",
"compressed_line_count": 9,
"deletions": 0,
"files_affected": 0,
"hunks_kept": 0,
"hunks_removed": 0,
"original_line_count": 9
},
"recorded_at": "2026-04-23T23:51:37.348881+00:00",
"transform": "diff_compressor"
}

View file

@ -0,0 +1,26 @@
{
"config": {
"always_keep_additions": true,
"always_keep_deletions": true,
"enable_ccr": true,
"max_context_lines": 2,
"max_files": 20,
"max_hunks_per_file": 10,
"min_lines_for_ccr": 50
},
"input": "diff --git a/a.py b/a.py\n--- a/a.py\n+++ b/a.py\n@@ -1,3 +1,3 @@\n-x = 1\n+x = 2\n y = 3\n z = 4\n# variant 1",
"input_sha256": "d0e62d2f1493bd7273d2837a335a50507835f0aa4cf2b52aa6be131dfbe24001",
"output": {
"additions": 0,
"cache_key": null,
"compressed": "diff --git a/a.py b/a.py\n--- a/a.py\n+++ b/a.py\n@@ -1,3 +1,3 @@\n-x = 1\n+x = 2\n y = 3\n z = 4\n# variant 1",
"compressed_line_count": 9,
"deletions": 0,
"files_affected": 0,
"hunks_kept": 0,
"hunks_removed": 0,
"original_line_count": 9
},
"recorded_at": "2026-04-23T23:51:37.347801+00:00",
"transform": "diff_compressor"
}

View file

@ -0,0 +1,26 @@
{
"config": {
"always_keep_additions": true,
"always_keep_deletions": true,
"enable_ccr": true,
"max_context_lines": 2,
"max_files": 20,
"max_hunks_per_file": 10,
"min_lines_for_ccr": 50
},
"input": "diff --git a/file_0.py b/file_0.py\n--- a/file_0.py\n+++ b/file_0.py\n@@ -1,10 +1,12 @@\n context_0_0\n context_1_0\n context_2_0\n context_3_0\n context_4_0\n-removed_0_0\n-removed_1_0\n-removed_2_0\n+added_0_0\n+added_1_0\n+added_2_0\n+added_3_0\n+added_4_0\n tail_0_0\n tail_1_0\n tail_2_0\n tail_3_0\n tail_4_0\ndiff --git a/file_1.py b/file_1.py\n--- a/file_1.py\n+++ b/file_1.py\n@@ -1,10 +1,12 @@\n context_0_1\n context_1_1\n context_2_1\n context_3_1\n context_4_1\n-removed_0_1\n-removed_1_1\n-removed_2_1\n+added_0_1\n+added_1_1\n+added_2_1\n+added_3_1\n+added_4_1\n tail_0_1\n tail_1_1\n tail_2_1\n tail_3_1\n tail_4_1\ndiff --git a/file_2.py b/file_2.py\n--- a/file_2.py\n+++ b/file_2.py\n@@ -1,10 +1,12 @@\n context_0_2\n context_1_2\n context_2_2\n context_3_2\n context_4_2\n-removed_0_2\n-removed_1_2\n-removed_2_2\n+added_0_2\n+added_1_2\n+added_2_2\n+added_3_2\n+added_4_2\n tail_0_2\n tail_1_2\n tail_2_2\n tail_3_2\n tail_4_2\ndiff --git a/file_3.py b/file_3.py\n--- a/file_3.py\n+++ b/file_3.py\n@@ -1,10 +1,12 @@\n context_0_3\n context_1_3\n context_2_3\n context_3_3\n context_4_3\n-removed_0_3\n-removed_1_3\n-removed_2_3\n+added_0_3\n+added_1_3\n+added_2_3\n+added_3_3\n+added_4_3\n tail_0_3\n tail_1_3\n tail_2_3\n tail_3_3\n tail_4_3\ndiff --git a/file_4.py b/file_4.py\n--- a/file_4.py\n+++ b/file_4.py\n@@ -1,10 +1,12 @@\n context_0_4\n context_1_4\n context_2_4\n context_3_4\n context_4_4\n-removed_0_4\n-removed_1_4\n-removed_2_4\n+added_0_4\n+added_1_4\n+added_2_4\n+added_3_4\n+added_4_4\n tail_0_4\n tail_1_4\n tail_2_4\n tail_3_4\n tail_4_4\ndiff --git a/file_5.py b/file_5.py\n--- a/file_5.py\n+++ b/file_5.py\n@@ -1,10 +1,12 @@\n context_0_5\n context_1_5\n context_2_5\n context_3_5\n context_4_5\n-removed_0_5\n-removed_1_5\n-removed_2_5\n+added_0_5\n+added_1_5\n+added_2_5\n+added_3_5\n+added_4_5\n tail_0_5\n tail_1_5\n tail_2_5\n tail_3_5\n tail_4_5\ndiff --git a/file_6.py b/file_6.py\n--- a/file_6.py\n+++ b/file_6.py\n@@ -1,10 +1,12 @@\n context_0_6\n context_1_6\n context_2_6\n context_3_6\n context_4_6\n-removed_0_6\n-removed_1_6\n-removed_2_6\n+added_0_6\n+added_1_6\n+added_2_6\n+added_3_6\n+added_4_6\n tail_0_6\n tail_1_6\n tail_2_6\n tail_3_6\n tail_4_6\ndiff --git a/file_7.py b/file_7.py\n--- a/file_7.py\n+++ b/file_7.py\n@@ -1,10 +1,12 @@\n context_0_7\n context_1_7\n context_2_7\n context_3_7\n context_4_7\n-removed_0_7\n-removed_1_7\n-removed_2_7\n+added_0_7\n+added_1_7\n+added_2_7\n+added_3_7\n+added_4_7\n tail_0_7\n tail_1_7\n tail_2_7\n tail_3_7\n tail_4_7\n# variant 3",
"input_sha256": "d4ed44a6fc66735876898acb5e3b2c54f97e72033bb71eda006acdbbfb8a2e96",
"output": {
"additions": 40,
"cache_key": "706080f4af877cb632f87e1d",
"compressed": "diff --git a/file_0.py b/file_0.py\n--- a/file_0.py\n+++ b/file_0.py\n@@ -1,10 +1,12 @@\n context_3_0\n context_4_0\n-removed_0_0\n-removed_1_0\n-removed_2_0\n+added_0_0\n+added_1_0\n+added_2_0\n+added_3_0\n+added_4_0\n tail_0_0\n tail_1_0\ndiff --git a/file_1.py b/file_1.py\n--- a/file_1.py\n+++ b/file_1.py\n@@ -1,10 +1,12 @@\n context_3_1\n context_4_1\n-removed_0_1\n-removed_1_1\n-removed_2_1\n+added_0_1\n+added_1_1\n+added_2_1\n+added_3_1\n+added_4_1\n tail_0_1\n tail_1_1\ndiff --git a/file_2.py b/file_2.py\n--- a/file_2.py\n+++ b/file_2.py\n@@ -1,10 +1,12 @@\n context_3_2\n context_4_2\n-removed_0_2\n-removed_1_2\n-removed_2_2\n+added_0_2\n+added_1_2\n+added_2_2\n+added_3_2\n+added_4_2\n tail_0_2\n tail_1_2\ndiff --git a/file_3.py b/file_3.py\n--- a/file_3.py\n+++ b/file_3.py\n@@ -1,10 +1,12 @@\n context_3_3\n context_4_3\n-removed_0_3\n-removed_1_3\n-removed_2_3\n+added_0_3\n+added_1_3\n+added_2_3\n+added_3_3\n+added_4_3\n tail_0_3\n tail_1_3\ndiff --git a/file_4.py b/file_4.py\n--- a/file_4.py\n+++ b/file_4.py\n@@ -1,10 +1,12 @@\n context_3_4\n context_4_4\n-removed_0_4\n-removed_1_4\n-removed_2_4\n+added_0_4\n+added_1_4\n+added_2_4\n+added_3_4\n+added_4_4\n tail_0_4\n tail_1_4\ndiff --git a/file_5.py b/file_5.py\n--- a/file_5.py\n+++ b/file_5.py\n@@ -1,10 +1,12 @@\n context_3_5\n context_4_5\n-removed_0_5\n-removed_1_5\n-removed_2_5\n+added_0_5\n+added_1_5\n+added_2_5\n+added_3_5\n+added_4_5\n tail_0_5\n tail_1_5\ndiff --git a/file_6.py b/file_6.py\n--- a/file_6.py\n+++ b/file_6.py\n@@ -1,10 +1,12 @@\n context_3_6\n context_4_6\n-removed_0_6\n-removed_1_6\n-removed_2_6\n+added_0_6\n+added_1_6\n+added_2_6\n+added_3_6\n+added_4_6\n tail_0_6\n tail_1_6\ndiff --git a/file_7.py b/file_7.py\n--- a/file_7.py\n+++ b/file_7.py\n@@ -1,10 +1,12 @@\n context_3_7\n context_4_7\n-removed_0_7\n-removed_1_7\n-removed_2_7\n+added_0_7\n+added_1_7\n+added_2_7\n+added_3_7\n+added_4_7\n tail_0_7\n tail_1_7\n[8 files changed, +40 -24 lines]\n[177 lines compressed to 129. Retrieve full diff: hash=706080f4af877cb632f87e1d]",
"compressed_line_count": 129,
"deletions": 24,
"files_affected": 8,
"hunks_kept": 8,
"hunks_removed": 0,
"original_line_count": 177
},
"recorded_at": "2026-04-23T23:51:37.352883+00:00",
"transform": "diff_compressor"
}

View file

@ -0,0 +1,26 @@
{
"config": {
"always_keep_additions": true,
"always_keep_deletions": true,
"enable_ccr": true,
"max_context_lines": 2,
"max_files": 20,
"max_hunks_per_file": 10,
"min_lines_for_ccr": 50
},
"input": "diff --git a/a.py b/a.py\n--- a/a.py\n+++ b/a.py\n@@ -1,3 +1,3 @@\n-x = 1\n+x = 2\n y = 3\n z = 4\n# variant 3",
"input_sha256": "e9c505e42b2b2edccb70c13aaee3c5d22cd07ac26449846db49d8aafb8ea538b",
"output": {
"additions": 0,
"cache_key": null,
"compressed": "diff --git a/a.py b/a.py\n--- a/a.py\n+++ b/a.py\n@@ -1,3 +1,3 @@\n-x = 1\n+x = 2\n y = 3\n z = 4\n# variant 3",
"compressed_line_count": 9,
"deletions": 0,
"files_affected": 0,
"hunks_kept": 0,
"hunks_removed": 0,
"original_line_count": 9
},
"recorded_at": "2026-04-23T23:51:37.348162+00:00",
"transform": "diff_compressor"
}

View file

@ -0,0 +1,26 @@
{
"config": {
"always_keep_additions": true,
"always_keep_deletions": true,
"enable_ccr": true,
"max_context_lines": 2,
"max_files": 20,
"max_hunks_per_file": 10,
"min_lines_for_ccr": 50
},
"input": "diff --git a/file_0.py b/file_0.py\n--- a/file_0.py\n+++ b/file_0.py\n@@ -1,10 +1,12 @@\n context_0_0\n context_1_0\n context_2_0\n context_3_0\n context_4_0\n-removed_0_0\n-removed_1_0\n-removed_2_0\n+added_0_0\n+added_1_0\n+added_2_0\n+added_3_0\n+added_4_0\n tail_0_0\n tail_1_0\n tail_2_0\n tail_3_0\n tail_4_0\ndiff --git a/file_1.py b/file_1.py\n--- a/file_1.py\n+++ b/file_1.py\n@@ -1,10 +1,12 @@\n context_0_1\n context_1_1\n context_2_1\n context_3_1\n context_4_1\n-removed_0_1\n-removed_1_1\n-removed_2_1\n+added_0_1\n+added_1_1\n+added_2_1\n+added_3_1\n+added_4_1\n tail_0_1\n tail_1_1\n tail_2_1\n tail_3_1\n tail_4_1\ndiff --git a/file_2.py b/file_2.py\n--- a/file_2.py\n+++ b/file_2.py\n@@ -1,10 +1,12 @@\n context_0_2\n context_1_2\n context_2_2\n context_3_2\n context_4_2\n-removed_0_2\n-removed_1_2\n-removed_2_2\n+added_0_2\n+added_1_2\n+added_2_2\n+added_3_2\n+added_4_2\n tail_0_2\n tail_1_2\n tail_2_2\n tail_3_2\n tail_4_2\ndiff --git a/file_3.py b/file_3.py\n--- a/file_3.py\n+++ b/file_3.py\n@@ -1,10 +1,12 @@\n context_0_3\n context_1_3\n context_2_3\n context_3_3\n context_4_3\n-removed_0_3\n-removed_1_3\n-removed_2_3\n+added_0_3\n+added_1_3\n+added_2_3\n+added_3_3\n+added_4_3\n tail_0_3\n tail_1_3\n tail_2_3\n tail_3_3\n tail_4_3\ndiff --git a/file_4.py b/file_4.py\n--- a/file_4.py\n+++ b/file_4.py\n@@ -1,10 +1,12 @@\n context_0_4\n context_1_4\n context_2_4\n context_3_4\n context_4_4\n-removed_0_4\n-removed_1_4\n-removed_2_4\n+added_0_4\n+added_1_4\n+added_2_4\n+added_3_4\n+added_4_4\n tail_0_4\n tail_1_4\n tail_2_4\n tail_3_4\n tail_4_4\ndiff --git a/file_5.py b/file_5.py\n--- a/file_5.py\n+++ b/file_5.py\n@@ -1,10 +1,12 @@\n context_0_5\n context_1_5\n context_2_5\n context_3_5\n context_4_5\n-removed_0_5\n-removed_1_5\n-removed_2_5\n+added_0_5\n+added_1_5\n+added_2_5\n+added_3_5\n+added_4_5\n tail_0_5\n tail_1_5\n tail_2_5\n tail_3_5\n tail_4_5\ndiff --git a/file_6.py b/file_6.py\n--- a/file_6.py\n+++ b/file_6.py\n@@ -1,10 +1,12 @@\n context_0_6\n context_1_6\n context_2_6\n context_3_6\n context_4_6\n-removed_0_6\n-removed_1_6\n-removed_2_6\n+added_0_6\n+added_1_6\n+added_2_6\n+added_3_6\n+added_4_6\n tail_0_6\n tail_1_6\n tail_2_6\n tail_3_6\n tail_4_6\ndiff --git a/file_7.py b/file_7.py\n--- a/file_7.py\n+++ b/file_7.py\n@@ -1,10 +1,12 @@\n context_0_7\n context_1_7\n context_2_7\n context_3_7\n context_4_7\n-removed_0_7\n-removed_1_7\n-removed_2_7\n+added_0_7\n+added_1_7\n+added_2_7\n+added_3_7\n+added_4_7\n tail_0_7\n tail_1_7\n tail_2_7\n tail_3_7\n tail_4_7\n# variant 0",
"input_sha256": "ea99ab1ea7449acf7762b3127df1287e352717d8036a6f1b818c7cb1b2edb527",
"output": {
"additions": 40,
"cache_key": "416e7f5d3ae0f718cc2609eb",
"compressed": "diff --git a/file_0.py b/file_0.py\n--- a/file_0.py\n+++ b/file_0.py\n@@ -1,10 +1,12 @@\n context_3_0\n context_4_0\n-removed_0_0\n-removed_1_0\n-removed_2_0\n+added_0_0\n+added_1_0\n+added_2_0\n+added_3_0\n+added_4_0\n tail_0_0\n tail_1_0\ndiff --git a/file_1.py b/file_1.py\n--- a/file_1.py\n+++ b/file_1.py\n@@ -1,10 +1,12 @@\n context_3_1\n context_4_1\n-removed_0_1\n-removed_1_1\n-removed_2_1\n+added_0_1\n+added_1_1\n+added_2_1\n+added_3_1\n+added_4_1\n tail_0_1\n tail_1_1\ndiff --git a/file_2.py b/file_2.py\n--- a/file_2.py\n+++ b/file_2.py\n@@ -1,10 +1,12 @@\n context_3_2\n context_4_2\n-removed_0_2\n-removed_1_2\n-removed_2_2\n+added_0_2\n+added_1_2\n+added_2_2\n+added_3_2\n+added_4_2\n tail_0_2\n tail_1_2\ndiff --git a/file_3.py b/file_3.py\n--- a/file_3.py\n+++ b/file_3.py\n@@ -1,10 +1,12 @@\n context_3_3\n context_4_3\n-removed_0_3\n-removed_1_3\n-removed_2_3\n+added_0_3\n+added_1_3\n+added_2_3\n+added_3_3\n+added_4_3\n tail_0_3\n tail_1_3\ndiff --git a/file_4.py b/file_4.py\n--- a/file_4.py\n+++ b/file_4.py\n@@ -1,10 +1,12 @@\n context_3_4\n context_4_4\n-removed_0_4\n-removed_1_4\n-removed_2_4\n+added_0_4\n+added_1_4\n+added_2_4\n+added_3_4\n+added_4_4\n tail_0_4\n tail_1_4\ndiff --git a/file_5.py b/file_5.py\n--- a/file_5.py\n+++ b/file_5.py\n@@ -1,10 +1,12 @@\n context_3_5\n context_4_5\n-removed_0_5\n-removed_1_5\n-removed_2_5\n+added_0_5\n+added_1_5\n+added_2_5\n+added_3_5\n+added_4_5\n tail_0_5\n tail_1_5\ndiff --git a/file_6.py b/file_6.py\n--- a/file_6.py\n+++ b/file_6.py\n@@ -1,10 +1,12 @@\n context_3_6\n context_4_6\n-removed_0_6\n-removed_1_6\n-removed_2_6\n+added_0_6\n+added_1_6\n+added_2_6\n+added_3_6\n+added_4_6\n tail_0_6\n tail_1_6\ndiff --git a/file_7.py b/file_7.py\n--- a/file_7.py\n+++ b/file_7.py\n@@ -1,10 +1,12 @@\n context_3_7\n context_4_7\n-removed_0_7\n-removed_1_7\n-removed_2_7\n+added_0_7\n+added_1_7\n+added_2_7\n+added_3_7\n+added_4_7\n tail_0_7\n tail_1_7\n[8 files changed, +40 -24 lines]\n[177 lines compressed to 129. Retrieve full diff: hash=416e7f5d3ae0f718cc2609eb]",
"compressed_line_count": 129,
"deletions": 24,
"files_affected": 8,
"hunks_kept": 8,
"hunks_removed": 0,
"original_line_count": 177
},
"recorded_at": "2026-04-23T23:51:37.350758+00:00",
"transform": "diff_compressor"
}

View file

@ -0,0 +1,30 @@
{
"config": {
"dedupe_warnings": true,
"enable_ccr": true,
"error_context_lines": 3,
"keep_first_error": true,
"keep_last_error": true,
"keep_summary_lines": true,
"max_errors": 10,
"max_stack_traces": 3,
"max_total_lines": 100,
"max_warnings": 5,
"min_lines_for_ccr": 50,
"stack_trace_max_lines": 20
},
"input": "PASSED test_foo\nPASSED test_bar\nFAILED test_baz\nassert 1 == 2\n# variant 1",
"input_sha256": "012c7bbeb96d95e99a7f94c87e528f7141cde31e3ad846bb5782c3435ea964f1",
"output": {
"cache_key": null,
"compressed": "PASSED test_foo\nPASSED test_bar\nFAILED test_baz\nassert 1 == 2\n# variant 1",
"compressed_line_count": 5,
"compression_ratio": 1.0,
"format_detected": "generic",
"original": "PASSED test_foo\nPASSED test_bar\nFAILED test_baz\nassert 1 == 2\n# variant 1",
"original_line_count": 5,
"stats": {}
},
"recorded_at": "2026-04-23T23:51:37.252755+00:00",
"transform": "log_compressor"
}

View file

@ -0,0 +1,30 @@
{
"config": {
"dedupe_warnings": true,
"enable_ccr": true,
"error_context_lines": 3,
"keep_first_error": true,
"keep_last_error": true,
"keep_summary_lines": true,
"max_errors": 10,
"max_stack_traces": 3,
"max_total_lines": 100,
"max_warnings": 5,
"min_lines_for_ccr": 50,
"stack_trace_max_lines": 20
},
"input": "npm WARN deprecated foo@1.0.0: use bar\nadded 0 packages in 3s\nadded 1 packages in 3s\nadded 2 packages in 3s\nadded 3 packages in 3s\nadded 4 packages in 3s\nnpm ERR! code ERESOLVE\nnpm ERR! ERESOLVE unable to resolve dependency tree\nnpm ERR! While resolving: project@1.0.0\nnpm ERR! Found: react@17.0.2\n# variant 7",
"input_sha256": "1fbaf88e12686704fed85212e2cdd60d8da4a50265a9ecbc1b8f48e684ac9c9e",
"output": {
"cache_key": null,
"compressed": "npm WARN deprecated foo@1.0.0: use bar\nadded 0 packages in 3s\nadded 1 packages in 3s\nadded 2 packages in 3s\nadded 3 packages in 3s\nadded 4 packages in 3s\nnpm ERR! code ERESOLVE\nnpm ERR! ERESOLVE unable to resolve dependency tree\nnpm ERR! While resolving: project@1.0.0\nnpm ERR! Found: react@17.0.2\n# variant 7",
"compressed_line_count": 11,
"compression_ratio": 1.0,
"format_detected": "generic",
"original": "npm WARN deprecated foo@1.0.0: use bar\nadded 0 packages in 3s\nadded 1 packages in 3s\nadded 2 packages in 3s\nadded 3 packages in 3s\nadded 4 packages in 3s\nnpm ERR! code ERESOLVE\nnpm ERR! ERESOLVE unable to resolve dependency tree\nnpm ERR! While resolving: project@1.0.0\nnpm ERR! Found: react@17.0.2\n# variant 7",
"original_line_count": 11,
"stats": {}
},
"recorded_at": "2026-04-23T23:51:37.255799+00:00",
"transform": "log_compressor"
}

View file

@ -0,0 +1,30 @@
{
"config": {
"dedupe_warnings": true,
"enable_ccr": true,
"error_context_lines": 3,
"keep_first_error": true,
"keep_last_error": true,
"keep_summary_lines": true,
"max_errors": 10,
"max_stack_traces": 3,
"max_total_lines": 100,
"max_warnings": 5,
"min_lines_for_ccr": 50,
"stack_trace_max_lines": 20
},
"input": " Compiling crate_0 v0.1.0\n Compiling crate_1 v0.1.1\n Compiling crate_2 v0.1.2\n Compiling crate_3 v0.1.3\n Compiling crate_4 v0.1.4\n Compiling crate_5 v0.1.5\n Compiling crate_6 v0.1.6\n Compiling crate_7 v0.1.7\n Compiling crate_8 v0.1.8\n Compiling crate_9 v0.1.9\nerror[E0308]: mismatched types\n --> src/lib.rs:42:9\n |\n42 | return x;\n | ^^^^^^^^^ expected `i32`, found `u64`\nerror: aborting due to previous error\n# variant 8",
"input_sha256": "23112ae8ae41ba59238aaa673c4f26987898e1f99c772683128f1fb2f1396089",
"output": {
"cache_key": null,
"compressed": " Compiling crate_0 v0.1.0\n Compiling crate_1 v0.1.1\n Compiling crate_2 v0.1.2\n Compiling crate_3 v0.1.3\n Compiling crate_4 v0.1.4\n Compiling crate_5 v0.1.5\n Compiling crate_6 v0.1.6\n Compiling crate_7 v0.1.7\n Compiling crate_8 v0.1.8\n Compiling crate_9 v0.1.9\nerror[E0308]: mismatched types\n --> src/lib.rs:42:9\n |\n42 | return x;\n | ^^^^^^^^^ expected `i32`, found `u64`\nerror: aborting due to previous error\n# variant 8",
"compressed_line_count": 17,
"compression_ratio": 1.0,
"format_detected": "generic",
"original": " Compiling crate_0 v0.1.0\n Compiling crate_1 v0.1.1\n Compiling crate_2 v0.1.2\n Compiling crate_3 v0.1.3\n Compiling crate_4 v0.1.4\n Compiling crate_5 v0.1.5\n Compiling crate_6 v0.1.6\n Compiling crate_7 v0.1.7\n Compiling crate_8 v0.1.8\n Compiling crate_9 v0.1.9\nerror[E0308]: mismatched types\n --> src/lib.rs:42:9\n |\n42 | return x;\n | ^^^^^^^^^ expected `i32`, found `u64`\nerror: aborting due to previous error\n# variant 8",
"original_line_count": 17,
"stats": {}
},
"recorded_at": "2026-04-23T23:51:37.256267+00:00",
"transform": "log_compressor"
}

View file

@ -0,0 +1,30 @@
{
"config": {
"dedupe_warnings": true,
"enable_ccr": true,
"error_context_lines": 3,
"keep_first_error": true,
"keep_last_error": true,
"keep_summary_lines": true,
"max_errors": 10,
"max_stack_traces": 3,
"max_total_lines": 100,
"max_warnings": 5,
"min_lines_for_ccr": 50,
"stack_trace_max_lines": 20
},
"input": "INFO iteration 1\nERROR error 1\nWARN warn 1\nINFO done 1\n# variant 15",
"input_sha256": "305987ea77c385e6d7118462dbb2c64e28056e67cf4d3068fd4f857af59073c9",
"output": {
"cache_key": null,
"compressed": "INFO iteration 1\nERROR error 1\nWARN warn 1\nINFO done 1\n# variant 15",
"compressed_line_count": 5,
"compression_ratio": 1.0,
"format_detected": "generic",
"original": "INFO iteration 1\nERROR error 1\nWARN warn 1\nINFO done 1\n# variant 15",
"original_line_count": 5,
"stats": {}
},
"recorded_at": "2026-04-23T23:51:37.345690+00:00",
"transform": "log_compressor"
}

View file

@ -0,0 +1,30 @@
{
"config": {
"dedupe_warnings": true,
"enable_ccr": true,
"error_context_lines": 3,
"keep_first_error": true,
"keep_last_error": true,
"keep_summary_lines": true,
"max_errors": 10,
"max_stack_traces": 3,
"max_total_lines": 100,
"max_warnings": 5,
"min_lines_for_ccr": 50,
"stack_trace_max_lines": 20
},
"input": "INFO iteration 2\nERROR error 2\nWARN warn 2\nINFO done 2\n# variant 16",
"input_sha256": "349121068ecbb26ee92c4cd4b7ce11970b9bc5fec1f17c93857106d21ae180da",
"output": {
"cache_key": null,
"compressed": "INFO iteration 2\nERROR error 2\nWARN warn 2\nINFO done 2\n# variant 16",
"compressed_line_count": 5,
"compression_ratio": 1.0,
"format_detected": "generic",
"original": "INFO iteration 2\nERROR error 2\nWARN warn 2\nINFO done 2\n# variant 16",
"original_line_count": 5,
"stats": {}
},
"recorded_at": "2026-04-23T23:51:37.346245+00:00",
"transform": "log_compressor"
}

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,30 @@
{
"config": {
"dedupe_warnings": true,
"enable_ccr": true,
"error_context_lines": 3,
"keep_first_error": true,
"keep_last_error": true,
"keep_summary_lines": true,
"max_errors": 10,
"max_stack_traces": 3,
"max_total_lines": 100,
"max_warnings": 5,
"min_lines_for_ccr": 50,
"stack_trace_max_lines": 20
},
"input": "make: *** [Makefile:12: all] Error 2\ngcc -c foo.c -o foo.o\nfoo.c:5:3: error: 'undeclared' undeclared\n# variant 12",
"input_sha256": "3bf3f8bd70c80dadc9abe939665c927c9a51b4b7f0b330a513c19224240c15ec",
"output": {
"cache_key": null,
"compressed": "make: *** [Makefile:12: all] Error 2\ngcc -c foo.c -o foo.o\nfoo.c:5:3: error: 'undeclared' undeclared\n# variant 12",
"compressed_line_count": 4,
"compression_ratio": 1.0,
"format_detected": "generic",
"original": "make: *** [Makefile:12: all] Error 2\ngcc -c foo.c -o foo.o\nfoo.c:5:3: error: 'undeclared' undeclared\n# variant 12",
"original_line_count": 4,
"stats": {}
},
"recorded_at": "2026-04-23T23:51:37.258511+00:00",
"transform": "log_compressor"
}

View file

@ -0,0 +1,30 @@
{
"config": {
"dedupe_warnings": true,
"enable_ccr": true,
"error_context_lines": 3,
"keep_first_error": true,
"keep_last_error": true,
"keep_summary_lines": true,
"max_errors": 10,
"max_stack_traces": 3,
"max_total_lines": 100,
"max_warnings": 5,
"min_lines_for_ccr": 50,
"stack_trace_max_lines": 20
},
"input": "INFO iteration 5\nERROR error 5\nWARN warn 5\nINFO done 5\n# variant 19",
"input_sha256": "5533a8264a04dd6194f99fc8be8120acc72acaa3dddad9933397a7adc224f3f1",
"output": {
"cache_key": null,
"compressed": "INFO iteration 5\nERROR error 5\nWARN warn 5\nINFO done 5\n# variant 19",
"compressed_line_count": 5,
"compression_ratio": 1.0,
"format_detected": "generic",
"original": "INFO iteration 5\nERROR error 5\nWARN warn 5\nINFO done 5\n# variant 19",
"original_line_count": 5,
"stats": {}
},
"recorded_at": "2026-04-23T23:51:37.347250+00:00",
"transform": "log_compressor"
}

View file

@ -0,0 +1,30 @@
{
"config": {
"dedupe_warnings": true,
"enable_ccr": true,
"error_context_lines": 3,
"keep_first_error": true,
"keep_last_error": true,
"keep_summary_lines": true,
"max_errors": 10,
"max_stack_traces": 3,
"max_total_lines": 100,
"max_warnings": 5,
"min_lines_for_ccr": 50,
"stack_trace_max_lines": 20
},
"input": "INFO iteration 3\nERROR error 3\nWARN warn 3\nINFO done 3\n# variant 17",
"input_sha256": "566491aacda8af92442765e7b21619e3cf7be1a1a6ef4539c80941bcb142e346",
"output": {
"cache_key": null,
"compressed": "INFO iteration 3\nERROR error 3\nWARN warn 3\nINFO done 3\n# variant 17",
"compressed_line_count": 5,
"compression_ratio": 1.0,
"format_detected": "generic",
"original": "INFO iteration 3\nERROR error 3\nWARN warn 3\nINFO done 3\n# variant 17",
"original_line_count": 5,
"stats": {}
},
"recorded_at": "2026-04-23T23:51:37.346815+00:00",
"transform": "log_compressor"
}

View file

@ -0,0 +1,30 @@
{
"config": {
"dedupe_warnings": true,
"enable_ccr": true,
"error_context_lines": 3,
"keep_first_error": true,
"keep_last_error": true,
"keep_summary_lines": true,
"max_errors": 10,
"max_stack_traces": 3,
"max_total_lines": 100,
"max_warnings": 5,
"min_lines_for_ccr": 50,
"stack_trace_max_lines": 20
},
"input": " Compiling crate_0 v0.1.0\n Compiling crate_1 v0.1.1\n Compiling crate_2 v0.1.2\n Compiling crate_3 v0.1.3\n Compiling crate_4 v0.1.4\n Compiling crate_5 v0.1.5\n Compiling crate_6 v0.1.6\n Compiling crate_7 v0.1.7\n Compiling crate_8 v0.1.8\n Compiling crate_9 v0.1.9\nerror[E0308]: mismatched types\n --> src/lib.rs:42:9\n |\n42 | return x;\n | ^^^^^^^^^ expected `i32`, found `u64`\nerror: aborting due to previous error\n# variant 9",
"input_sha256": "629d38929748b41e8eeca7db86ba54846b958552dc0b94c3a99757e9cde72df2",
"output": {
"cache_key": null,
"compressed": " Compiling crate_0 v0.1.0\n Compiling crate_1 v0.1.1\n Compiling crate_2 v0.1.2\n Compiling crate_3 v0.1.3\n Compiling crate_4 v0.1.4\n Compiling crate_5 v0.1.5\n Compiling crate_6 v0.1.6\n Compiling crate_7 v0.1.7\n Compiling crate_8 v0.1.8\n Compiling crate_9 v0.1.9\nerror[E0308]: mismatched types\n --> src/lib.rs:42:9\n |\n42 | return x;\n | ^^^^^^^^^ expected `i32`, found `u64`\nerror: aborting due to previous error\n# variant 9",
"compressed_line_count": 17,
"compression_ratio": 1.0,
"format_detected": "generic",
"original": " Compiling crate_0 v0.1.0\n Compiling crate_1 v0.1.1\n Compiling crate_2 v0.1.2\n Compiling crate_3 v0.1.3\n Compiling crate_4 v0.1.4\n Compiling crate_5 v0.1.5\n Compiling crate_6 v0.1.6\n Compiling crate_7 v0.1.7\n Compiling crate_8 v0.1.8\n Compiling crate_9 v0.1.9\nerror[E0308]: mismatched types\n --> src/lib.rs:42:9\n |\n42 | return x;\n | ^^^^^^^^^ expected `i32`, found `u64`\nerror: aborting due to previous error\n# variant 9",
"original_line_count": 17,
"stats": {}
},
"recorded_at": "2026-04-23T23:51:37.256543+00:00",
"transform": "log_compressor"
}

View file

@ -0,0 +1,30 @@
{
"config": {
"dedupe_warnings": true,
"enable_ccr": true,
"error_context_lines": 3,
"keep_first_error": true,
"keep_last_error": true,
"keep_summary_lines": true,
"max_errors": 10,
"max_stack_traces": 3,
"max_total_lines": 100,
"max_warnings": 5,
"min_lines_for_ccr": 50,
"stack_trace_max_lines": 20
},
"input": "INFO iteration 0\nERROR error 0\nWARN warn 0\nINFO done 0\n# variant 14",
"input_sha256": "65bd6228add102acdba36b90e87b1babc54ca9076563d38c74cdc4803eff6dad",
"output": {
"cache_key": null,
"compressed": "INFO iteration 0\nERROR error 0\nWARN warn 0\nINFO done 0\n# variant 14",
"compressed_line_count": 5,
"compression_ratio": 1.0,
"format_detected": "generic",
"original": "INFO iteration 0\nERROR error 0\nWARN warn 0\nINFO done 0\n# variant 14",
"original_line_count": 5,
"stats": {}
},
"recorded_at": "2026-04-23T23:51:37.345475+00:00",
"transform": "log_compressor"
}

View file

@ -0,0 +1,30 @@
{
"config": {
"dedupe_warnings": true,
"enable_ccr": true,
"error_context_lines": 3,
"keep_first_error": true,
"keep_last_error": true,
"keep_summary_lines": true,
"max_errors": 10,
"max_stack_traces": 3,
"max_total_lines": 100,
"max_warnings": 5,
"min_lines_for_ccr": 50,
"stack_trace_max_lines": 20
},
"input": "npm WARN deprecated foo@1.0.0: use bar\nadded 0 packages in 3s\nadded 1 packages in 3s\nadded 2 packages in 3s\nadded 3 packages in 3s\nadded 4 packages in 3s\nnpm ERR! code ERESOLVE\nnpm ERR! ERESOLVE unable to resolve dependency tree\nnpm ERR! While resolving: project@1.0.0\nnpm ERR! Found: react@17.0.2\n# variant 5",
"input_sha256": "79b59341f8159b3ea568443e6e767b411b80211975d248cfc1f3d35b3d486fdc",
"output": {
"cache_key": null,
"compressed": "npm WARN deprecated foo@1.0.0: use bar\nadded 0 packages in 3s\nadded 1 packages in 3s\nadded 2 packages in 3s\nadded 3 packages in 3s\nadded 4 packages in 3s\nnpm ERR! code ERESOLVE\nnpm ERR! ERESOLVE unable to resolve dependency tree\nnpm ERR! While resolving: project@1.0.0\nnpm ERR! Found: react@17.0.2\n# variant 5",
"compressed_line_count": 11,
"compression_ratio": 1.0,
"format_detected": "generic",
"original": "npm WARN deprecated foo@1.0.0: use bar\nadded 0 packages in 3s\nadded 1 packages in 3s\nadded 2 packages in 3s\nadded 3 packages in 3s\nadded 4 packages in 3s\nnpm ERR! code ERESOLVE\nnpm ERR! ERESOLVE unable to resolve dependency tree\nnpm ERR! While resolving: project@1.0.0\nnpm ERR! Found: react@17.0.2\n# variant 5",
"original_line_count": 11,
"stats": {}
},
"recorded_at": "2026-04-23T23:51:37.254799+00:00",
"transform": "log_compressor"
}

View file

@ -0,0 +1,30 @@
{
"config": {
"dedupe_warnings": true,
"enable_ccr": true,
"error_context_lines": 3,
"keep_first_error": true,
"keep_last_error": true,
"keep_summary_lines": true,
"max_errors": 10,
"max_stack_traces": 3,
"max_total_lines": 100,
"max_warnings": 5,
"min_lines_for_ccr": 50,
"stack_trace_max_lines": 20
},
"input": "============================= test session starts ==============================\ncollected 42 items\ntests/test_mod_0.py::test_case PASSED [0%]\ntests/test_mod_1.py::test_case PASSED [2%]\ntests/test_mod_2.py::test_case PASSED [4%]\ntests/test_mod_3.py::test_case PASSED [6%]\ntests/test_mod_4.py::test_case PASSED [8%]\ntests/test_mod_5.py::test_case PASSED [10%]\ntests/test_mod_6.py::test_case PASSED [12%]\ntests/test_mod_7.py::test_case PASSED [14%]\ntests/test_mod_8.py::test_case PASSED [16%]\ntests/test_mod_9.py::test_case PASSED [18%]\ntests/test_mod_10.py::test_case PASSED [20%]\ntests/test_mod_11.py::test_case PASSED [22%]\ntests/test_mod_12.py::test_case PASSED [24%]\ntests/test_mod_13.py::test_case PASSED [26%]\ntests/test_mod_14.py::test_case PASSED [28%]\ntests/test_mod_15.py::test_case PASSED [30%]\ntests/test_mod_16.py::test_case PASSED [32%]\ntests/test_mod_17.py::test_case PASSED [34%]\ntests/test_mod_18.py::test_case PASSED [36%]\ntests/test_mod_19.py::test_case PASSED [38%]\ntests/test_mod_20.py::test_case PASSED [40%]\ntests/test_mod_21.py::test_case PASSED [42%]\ntests/test_mod_22.py::test_case PASSED [44%]\ntests/test_mod_23.py::test_case PASSED [46%]\ntests/test_mod_24.py::test_case PASSED [48%]\ntests/test_mod_25.py::test_bad FAILED\n=================================== FAILURES ===================================\n___________________________________ test_bad ___________________________________\n def test_bad():\n> assert compute(1, 2) == 4\nE assert 3 == 4\ntests/test_mod_25.py:17: AssertionError\n=========================== short test summary info ============================\nFAILED tests/test_mod_25.py::test_bad\n1 failed, 25 passed in 0.42s\n# variant 2",
"input_sha256": "7cd0d60fe9f4aad2453c28a3614668bed7b5bdfc007074f8b98672b6fbb27622",
"output": {
"cache_key": null,
"compressed": "============================= test session starts ==============================\ncollected 42 items\ntests/test_mod_0.py::test_case PASSED [0%]\ntests/test_mod_1.py::test_case PASSED [2%]\ntests/test_mod_2.py::test_case PASSED [4%]\ntests/test_mod_3.py::test_case PASSED [6%]\ntests/test_mod_4.py::test_case PASSED [8%]\ntests/test_mod_5.py::test_case PASSED [10%]\ntests/test_mod_6.py::test_case PASSED [12%]\ntests/test_mod_7.py::test_case PASSED [14%]\ntests/test_mod_8.py::test_case PASSED [16%]\ntests/test_mod_9.py::test_case PASSED [18%]\ntests/test_mod_10.py::test_case PASSED [20%]\ntests/test_mod_11.py::test_case PASSED [22%]\ntests/test_mod_12.py::test_case PASSED [24%]\ntests/test_mod_13.py::test_case PASSED [26%]\ntests/test_mod_14.py::test_case PASSED [28%]\ntests/test_mod_15.py::test_case PASSED [30%]\ntests/test_mod_16.py::test_case PASSED [32%]\ntests/test_mod_17.py::test_case PASSED [34%]\ntests/test_mod_18.py::test_case PASSED [36%]\ntests/test_mod_19.py::test_case PASSED [38%]\ntests/test_mod_20.py::test_case PASSED [40%]\ntests/test_mod_21.py::test_case PASSED [42%]\ntests/test_mod_22.py::test_case PASSED [44%]\ntests/test_mod_23.py::test_case PASSED [46%]\ntests/test_mod_24.py::test_case PASSED [48%]\ntests/test_mod_25.py::test_bad FAILED\n=================================== FAILURES ===================================\n___________________________________ test_bad ___________________________________\n def test_bad():\n> assert compute(1, 2) == 4\nE assert 3 == 4\ntests/test_mod_25.py:17: AssertionError\n=========================== short test summary info ============================\nFAILED tests/test_mod_25.py::test_bad\n1 failed, 25 passed in 0.42s\n# variant 2",
"compressed_line_count": 38,
"compression_ratio": 1.0,
"format_detected": "generic",
"original": "============================= test session starts ==============================\ncollected 42 items\ntests/test_mod_0.py::test_case PASSED [0%]\ntests/test_mod_1.py::test_case PASSED [2%]\ntests/test_mod_2.py::test_case PASSED [4%]\ntests/test_mod_3.py::test_case PASSED [6%]\ntests/test_mod_4.py::test_case PASSED [8%]\ntests/test_mod_5.py::test_case PASSED [10%]\ntests/test_mod_6.py::test_case PASSED [12%]\ntests/test_mod_7.py::test_case PASSED [14%]\ntests/test_mod_8.py::test_case PASSED [16%]\ntests/test_mod_9.py::test_case PASSED [18%]\ntests/test_mod_10.py::test_case PASSED [20%]\ntests/test_mod_11.py::test_case PASSED [22%]\ntests/test_mod_12.py::test_case PASSED [24%]\ntests/test_mod_13.py::test_case PASSED [26%]\ntests/test_mod_14.py::test_case PASSED [28%]\ntests/test_mod_15.py::test_case PASSED [30%]\ntests/test_mod_16.py::test_case PASSED [32%]\ntests/test_mod_17.py::test_case PASSED [34%]\ntests/test_mod_18.py::test_case PASSED [36%]\ntests/test_mod_19.py::test_case PASSED [38%]\ntests/test_mod_20.py::test_case PASSED [40%]\ntests/test_mod_21.py::test_case PASSED [42%]\ntests/test_mod_22.py::test_case PASSED [44%]\ntests/test_mod_23.py::test_case PASSED [46%]\ntests/test_mod_24.py::test_case PASSED [48%]\ntests/test_mod_25.py::test_bad FAILED\n=================================== FAILURES ===================================\n___________________________________ test_bad ___________________________________\n def test_bad():\n> assert compute(1, 2) == 4\nE assert 3 == 4\ntests/test_mod_25.py:17: AssertionError\n=========================== short test summary info ============================\nFAILED tests/test_mod_25.py::test_bad\n1 failed, 25 passed in 0.42s\n# variant 2",
"original_line_count": 38,
"stats": {}
},
"recorded_at": "2026-04-23T23:51:37.253497+00:00",
"transform": "log_compressor"
}

Some files were not shown because too many files have changed in this diff Show more