v3.5.8 - the transition that claims to be one #229
No reviewers
Labels
No labels
already-shipped
bug
documentation
duplicate
enhancement
external-review
good first issue
help wanted
in progress
invalid
needs-decision
proposal
question
security
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: crenshawdev/cadence-archived#229
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "cadence/v3.5.8"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #145, #140, #139.
Four operations in this codebase wrote several files and reported the result as
if they had written one. An atomic rename protects a single file from torn bytes
and cannot make a transaction across two, so each of them could leave a
half-applied tree inside an
ok:trueenvelope with nothing saying so.Two phases, 36 commits off
v3.5.7, three requirement ids all traced to averified phase (
JRN-01,JRN-02,JRN-03)./cad-auditPASS on both arms,13 of 13 acceptance criteria covered.
The shape was decided on evidence rather than on the issue text.
renumberandmilestone-prunealready refused whole and reported what had completed, by hand.That is a refusal protocol, not a journal: it needs no on-disk state, no resume
path and no reader in
/cad-health. Generalizing the two implementations thatalready worked was the work, and the two operations that claimed atomicity
without having it were moved onto the result.
What changed
cadence-core/bin/lib/file-transition.mjsowns the ordered multi-file write.runTransition({steps, discipline, preflight})returns{ok, refused, completed, failures}, with two disciplines drawn from behaviourthat already shipped and a lazy pre-flight that returns on its first
unsatisfied condition before any thunk runs. A
HELPERScensus row reddens ifits body is copied under any name.
cmdPhaseDonevalidates every edit before the first write and names whichdocuments landed. The "all-or-nothing" comment sitting above two separate
renames is gone rather than qualified.
release-bumpreads and decides its whole write set before the firstatomicWrite, so a malformed sibling leaves the primary manifest at the oldversion under
ok:falseinstead of shipping a half-bumped tree as success.renumberandmilestone-pruneroute their existing partial-state refusalsthrough the primitive with
partial-applyandpartial-pruneunmoved, pinnedby tests that redden on a paraphrase.
CHANGELOG.mdrefuses underunreadable-changeloginstead ofhanging on a FIFO or scaffolding a release heading over the whole history.
Raised by the blocking
risk_surfacereview on the phase-2 range.Known gaps
The
partial-flipandpartial-bumparms ship probe-proven only, with nocommitted regression test: every uid-independent way to force a write to fail
past the pre-flight was converted into a pre-write refusal by the work itself,
and D-02 forbids
chmodSync. Treat those two envelopes as untested in CI.planning.mjs'sread(reqFile)still accepts any existing filesystem object, soa FIFO at
.planning/REQUIREMENTS.mdhangsphase-donebefore its refusal canrun. Same class as the
CHANGELOG.mdblocker, one seam over, raised medium anddowngraded at adjudication.
The manifest is at
3.5.8; thev3.5.8tag is cut onmainafter this merge.The transition's failure gets an envelope of this seam's own instead of falling through to the dispatch catch, which emitted {"ok":false,"reason":"internal"} with no manifest, siblings or changelog field at all. It is ok:false with action:"partial" and reason partial-bump, and manifest.bumped, each siblings[] row's bumped and changelog.changed are filled from what the transition COMPLETED rather than from what was decided. Probe-proven against a forced changelog throw: manifest.bumped true, changelog.changed false, the thrown message in detail, exit 1. The header admits the second ok:false shape and keeps the sentence that no ok:true refusal shape exists here.