Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,11 @@

## Unreleased

- Raise the immutable-history aggregate authoritative-evidence limit from
512 MiB to 5 GiB so large repositories can publish, validate, and compare
complete realizations while retaining the existing per-record and record-count
bounds.

- Make `compass review` text and Markdown easier to scan by shortening commit
and report references, using plain-language status labels, and summarizing
witness relationships without printing opaque graph-node IDs. Canonical JSON
Expand Down
8 changes: 8 additions & 0 deletions COMPATIBILITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,14 @@ history profiles, and cache identities.

## Evolving contracts

Immutable history now accepts up to 5 GiB of aggregate authoritative key and
value bytes per realization, raised from 512 MiB. The history schema and
canonical encoding are unchanged, as are the per-key, per-value, per-tree,
JSON-depth, job, and diagnostic bounds. Readers from older Compass releases
continue to reject a realization whose authoritative content exceeds 512 MiB;
deploy a reader containing this limit widening before sharing larger
realizations.

The closed route-stage vocabulary used by `compass.graph/1`,
`compass.query/1`, and `compass.framework-context/1` now includes the additive
`dependency` and `security` values. The query contract manifest and fingerprint
Expand Down
8 changes: 7 additions & 1 deletion crates/compass-history/src/validate.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ use crate::{

type Records = Vec<(Vec<u8>, Vec<u8>)>;

pub const MAX_AUTHORITATIVE_BYTES: u64 = 512 * 1024 * 1024;
pub const MAX_AUTHORITATIVE_BYTES: u64 = 5 * 1024 * 1024 * 1024;
pub const MAX_KEY_BYTES: usize = 1024 * 1024;
pub const MAX_RECORD_VALUE_BYTES: usize = 64 * 1024 * 1024;
pub const MAX_RECORDS_PER_TREE: u64 = 10_000_000;
Expand Down Expand Up @@ -594,6 +594,12 @@ mod tests {
}
}

#[test]
fn authoritative_history_limit_is_five_gibibytes() {
assert_eq!(MAX_AUTHORITATIVE_BYTES, 5_368_709_120);
assert!(!exceeds_limit(616_211_608, MAX_AUTHORITATIVE_BYTES));
}

#[test]
fn repeated_resource_limit_failures_collapse_to_the_largest_observation() {
let mut problems = Vec::new();
Expand Down
6 changes: 6 additions & 0 deletions docs/guides/versioned-history.md
Original file line number Diff line number Diff line change
Expand Up @@ -403,6 +403,12 @@ Export equivalence is semantic and canonical. JSON object or record ordering
that does not affect meaning is not a contract; graph structure, attributes,
multiplicity, duplicate id-less hyperedges, and authoritative bytes are.

Each immutable realization accepts at most 5 GiB of aggregate authoritative
key and value bytes. Per-record and record-count limits remain independently
enforced, and crossing any limit fails publication rather than exposing a
partial realization. Compass releases with the former 512 MiB ceiling cannot
read a realization above that older bound.

## 8. Choose a preferred realization

When a commit has multiple valid realizations:
Expand Down
Loading