v3.16.0¶
Someone pulled the plug mid-write. The journal ended on half a line, and the task that owned it was gone. That used to be the end of the story. Here it is a repair.
Replay stopped losing the ending¶
- A crash-torn journal tail is repaired and the suspended task resumes. (#3955, @Louis20060723)
- Journal consistency and sealed identity are separate verdicts, so a clean prefix stops passing for a whole journal. (#3908, @Silentpartnercoding)
event_countcounts usable events through the sealed prefix instead of trusting the file. (#4025, @sujeito-operator)- A journal line that is not valid UTF-8 is discarded, not raised. (#4008, @sujeito-operator)
replay --as-jsonemits JSON on every exit path, including the ones that fail. (#4017, @Chirag6722; #3991)
Proof instead of assurance¶
- A result bundle verifies offline against DSSE. No network, no registry, nobody to ask. (#3903, @Nickgonzales76017)
allowed_filesis enforced at the merge acceptance gate, not merely declared. (#4002, @Aeirx)- A merge whose incoming change cannot be verified is refused rather than waved through. (#4022)
- The credential
token_typeallowlist derives from its own Literal and cannot drift from it. (#4030, @Aeirx)
Volunteer workers¶
Bernstein opted into its own volunteer program, which is either good engineering or a conflict of interest. The project manifest is content-addressed, the sandbox profile is derived rather than declared, and bernstein volunteer verify says which. (#3907, #3909, #3912, #3916, #3920)
Boundaries¶
- Sixteen hand-rolled path checks became one containment helper. (#3855, #3857, #3858, @vaibhav8a)
- Card matches are Luhn-validated before redaction: real numbers go, coincidences stay readable. (#3818, @vaibhav8a)
- Budget forecasts are scoped to the caller's tenant. (#3850, @vaibhav8a)
- Upgrade proposals are gated on the proposer's measured history. Confidence is not history. (#3840, #3843, @Nickgonzales76017)
The CI said it was fine¶
It was not. A gate that always succeeded, a mutation lane that could not fail, a workflow whose header described another workflow. Now they say what they do.
- Silently-inert gates and misleading green, across the workflow surface. (#3945, #3960)
- Workflow headers and names match behaviour. (#3956, @ThinkerDesigns)
- Merges land through a queue, and release bumps go through it too. (#3964)
Also¶
- READMEs in Hindi and Bengali. (#3992)
- First-run paths for
evolveandlistenare fenced. (#3848, @jvsilva12600009) - A dashboard vocabulary reference. (#3790, @atirna)
- The TUI renders a toast again, and its task list stops lying about stale rows. (#3938; #3932, @ShlokShar)
Upgrading¶
Upgrade in place. JournalVerifyResult reports chain consistency, reader coverage and sealed identity as three verdicts instead of one ok bit; anything reading the old bit needs updating.
Contributors¶
@Chirag6722 · @sujeito-operator · @vaibhav8a · @Louis20060723 · @Nickgonzales76017 · @Aeirx · @ThinkerDesigns · @Silentpartnercoding · @ShlokShar · @atirna · @jvsilva12600009 — and Renovate and Dependabot, who never sleep.
Soundtrack¶
Two footwork takes on the same lyric sheet.
Lyrics
[Intro — dry vocal, chopped]
Version three... one... six
Tag it — tag it — tag it
(queue empty, main green)
[Drop — chop loop]
Drain the queue, drain the queue
Merge — merge — merge —
Green on main, green on main
Fake green? Found it. Gated.
[Break — replay]
Torn tail? Stitched.
Crash mid-write? Resume.
Replay it byte for byte
Same hash — same hash — every time
[Drop — receipts]
Show me the receipt (-ceipt -ceipt -ceipt)
Verify it offline
No trust, just proof
No trust — just proof
[Break — volunteer]
Lend your worker to the cause
Sandbox locked, scope declared
Zero creds, clean room
We run our own program
[Bridge — tenant]
Your data — your lane
Tenant-scoped, stay in your lane
Card match? Redacted.
No leak — no leak
[Outro]
Readme speaks four new tongues
Mutation gate bites now
The ratchet only turns one way
Three... one... six. (tag it)