P3 review: P2 can read the books until the owner consents
check / check (push) Canceled after 0s

A schedule-convention setting, the two new tax categories, a disposal
before the in-service date and a depreciation catch-up each need their
feature now (tax_categories_gain_exempt, disposal_before_service,
depreciation_catch_up), so no write before consent leaves books P2 refuses
or misreads; replayed names are read with P2's TIN detector (B-28). The
cutover runs end to end through the real P2 and P3 binaries in a test.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01T3gXMVt7XJPi6ens1or9Dj
This commit is contained in:
swaitsandClaude Opus 5.5 committed 2026-10-21 17:43:45 -06:00
1 parent 6288ead747
commit 2c5b5a7171
78 files changed
+1375 -4

No files matched your search

+24
View File
@@ -1380,3 +1380,27 @@ fn a_write_waiting_for_the_upgrade_journals_nothing() {
assert_eq!(*store.journal_format(), ledger_store::format::current());
store.verify().unwrap();
}
/// The replay fuzz target (`fuzz_store_replay`: the writer and the viewer
/// agree on every journal) draws its lines from every event type this
/// version reads, P3's included (`asset.basis_set`, `party.creditor_set`
/// were missing: the fuzzer never wrote them, so it never checked the two
/// readers agree on them).
#[test]
fn the_replay_fuzzer_writes_every_event_type() {
let target = include_str!("../../../fuzz/fuzz_targets/fuzz_store_replay.rs");
let list = target
.split("const TYPES: &[&str] = &[")
.nth(1)
.and_then(|rest| rest.split("];").next())
.expect("the fuzz target's TYPES");
let missing: Vec<&str> = EVENT_TYPES
.iter()
.copied()
.filter(|t| *t != "store.created" && !list.contains(&format!("\"{t}\"")))
.collect();
assert!(
missing.is_empty(),
"the replay fuzzer never writes {missing:?}"
);
}