fix: Windows reads of lock files, update paths cfg(unix), merge main again (P11c)
check / check (push) Canceled after 0s
check / portable (macos-latest) (push) Canceled after 0s
check / portable (windows-latest) (push) Canceled after 0s
two-user / two-user (push) Canceled after 0s

spec_vault swept every file under a book, lock files included; on Windows
a held LockFileEx lock is mandatory and the read failed. The locks are
already dedicated files (never data), so the test skips *.lock. Merged
main (P13 step 6, the macOS server.log assert, P11a's AppImage identity):
host.rs keeps main's five-field identity on Unix and size/last-write on
Windows; the update poll and set_program_version are Unix-only.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HS8WZziDnyxunC23MUxrLp
This commit is contained in:
swaitsandClaude Fable 5.1 committed 2026-10-29 17:03:30 -06:00
commit 7749afc557
234 files changed
+13028 -18411

No files matched your search

+69
View File
@@ -449,6 +449,55 @@ pub fn describe(b: &Books, line: &JournalLine) -> Option<Event> {
format!("Draft #{id} discarded: {}", s(p, "reason")),
None,
),
// Audits and attestations (plan P8): claims about the books, not
// figures.
"audit.run" => ev(
icon::MAGNIFYING_GLASS,
format!(
"Audit {} through {}",
s(p, "scope").replace('_', " "),
s(p, "through")
),
None,
),
"receipt.attested" => ev(
icon::CHECK_CIRCLE,
if p.get("disagrees").and_then(|v| v.as_bool()) == Some(true) {
format!(
"{} read {} against entry #{}: it disagrees",
s(p, "by"),
attachment_name(b, att),
p.get("entry_id").and_then(|v| v.as_u64()).unwrap_or(0)
)
} else {
format!(
"{} attested {} for entry #{}",
s(p, "by"),
attachment_name(b, att),
p.get("entry_id").and_then(|v| v.as_u64()).unwrap_or(0)
)
},
Some(Route::Document(att)),
),
"entry.reviewed" => ev(
icon::CHECK_CIRCLE,
format!(
"{} reviewed entry #{}",
s(p, "by"),
p.get("entry_id").and_then(|v| v.as_u64()).unwrap_or(0)
),
p.get("entry_id").and_then(|v| v.as_u64()).map(Route::Entry),
),
"period.attested" => ev(
icon::CHECK_CIRCLE,
format!(
"{} attested period #{} on audit #{}",
s(p, "by"),
p.get("period_id").and_then(|v| v.as_u64()).unwrap_or(0),
p.get("audit_run_id").and_then(|v| v.as_u64()).unwrap_or(0)
),
None,
),
"entry.settles" => {
let settles: Vec<String> = p
.get("settles")
@@ -1172,6 +1221,26 @@ pub fn describe(b: &Books, line: &JournalLine) -> Option<Event> {
format!("Open item #{id} resolved: {}", s(p, "resolution")),
Some(Route::Company),
),
"convention.source_revised" => ev(
icon::SCROLL,
format!(
"Source of convention {} corrected to {}: {}",
s(p, "id"),
s(&p["source"], "decided_by"),
s(p, "reason")
),
Some(Route::Company),
),
"decision.source_revised" => ev(
icon::GAVEL,
format!("Source of decision #{id} corrected: {}", s(p, "reason")),
Some(Route::Company),
),
"open_item.source_revised" => ev(
icon::CHECK_CIRCLE,
format!("Source of open item #{id} corrected: {}", s(p, "reason")),
Some(Route::Company),
),
"entry.approved" => ev(
icon::SEAL_CHECK,
format!(