Skip to content

Prune five examples whose ceremony costs more than the answer - #10

Merged
sajonaro merged 7 commits into
mainfrom
prune-contrived-examples
Oct 3, 2026
Merged

sajonaro merged 7 commits into
mainfrom
prune-contrived-examples

Conversation

@sajonaro

@sajonaro sajonaro commented Oct 3, 2026

Copy link
Copy Markdown
Contributor

Removes gotha/, calculation/ (and libraries/economy.lib.writ), oversight/, workflow/ and access/. Each had 7–12 states, and the finding could be read off the move list or was decided by the modelling choices rather than the search. island/ stays: the known paradox appearing as a declared gap is the point.

  • writ control and writ compare --git now run on payments. Dropping the idempotency key across two commits loses never-double.
  • The modality cross-check walks 18 scenarios and 55 properties (53 compared). Its live assertions now cite payments and deployment.
  • README tables, docker-compose services and the libraries index are updated to match.

./run-tests.sh: 265 passed, 0 failed.

Stacking note: this branch sits on config-space (#9), because the rewired tests use payments. The base is main on purpose, so this PR shows #4–#9's commits until they merge and then shrinks to one commit. Merge it after #9.

🤖 Generated with Claude Code

sajonaro and others added 7 commits October 3, 2026 19:42
…ugh composition

separation-of-duties: a toxic-combination table checked by group name, and a
role added later that approves; two grants, neither listed, make a conflict.
scp-escalation: moving prod into an OU built from the sandbox template; compare
reports the CloudTrail guardrail and the security team's audit read LOST.
joiner-mover-leaver: group-based offboarding and the direct permission set it
cannot see; a trap, not a delay. Writing it, writ found a second bug in the
first draft of the safe plan (approve, leave, provision) and the README keeps it.

Each failing property names a (show …) query, and each .rules file prints the
privilege path. Cross-check 31 -> 41 properties (never: 3 -> 7); 257 checks.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A large expense needs the manager's and finance's approval. The shortcut pays
when both slots are filled; Bob is manager and finance's deputy, so four
allowed steps pay on one person's say-so. Amounts are bands, not numbers.

compare reports never-on-one-person LOST while the law it breaks reads
preserved (laws compare by declaration); the README says so. In the rules,
independence is a join: a rules guard cannot compare a path with a path,
though the claims language can. Also documented: in the safe process the only
way to undo a signature is to reject, cancel, or change the bank account.

Cross-check 41 -> 45 properties (43 compared, 2 fair skipped); 270 checks.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…hat leaks

Policy v1 allows file reads outright and makes the shell ask; v2 adds a
web-fetch allowed outright. compare: no-unapproved-exfiltration LOST in three
moves — switch-to-auto, read-secret-with-file-read, send-secret-with-web-fetch
— none of them human; the verdict names t = web-fetch.

The loop, run against the unedited claims: the honest fix (web-fetch asks)
holds everything but stays exit 1 until the human acknowledges its new
approval path; the cheat (delete the `out` arrow) turns the safety property
n/a and `writ check` EXITS 0 — compare against v1 refuses it. Tested as is.

Cross-check 45 -> 49 properties (47 compared); 289 checks.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Three instances rolled r1 -> r2 behind a health gate, then a one-way migration.
The safe plan fails can-roll-back: the runbook done right, eight steps, ends
where r1 is unreachable for good; ct.rules one-way names `migrate` and nothing
else. The shortcut drops the health gate and goes dark in four steps.

Writing it, writ found a race in the first draft: finish the rollout, decide to
roll back, and the migration (guarded on the instances only) runs anyway; the
rollback then starts r1 on v2. migrate now also requires target r2.

Cross-check 49 -> 52 properties (50 compared); 301 checks.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
One order: authorize, capture over a wire that loses replies, settle, ship,
refund, cancel. Without a key, a lost reply and a retry charge twice in six
steps; derive double-charged shows the order looking normal in every stage.
The shortcut also charges for a cancelled order: the void overtakes the
capture, finds nothing, and the capture lands after it.

Writing it, writ failed the first draft of the SAFE file, key and all:
cancel was allowed whenever the shop had not captured, so a capture still on
the wire landed after the cancellation. cancel now voids at the processor,
under the same key.

Cross-check 52 -> 56 properties (54 compared); 314 checks.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Four flags and two modes, 64 combinations; the guarded operations reach
exactly the 21 the product's rules allow. The shortcut's disable-sso checks
authentication but not the shard latch: enable-legacy-auth, shard, disable-sso
reaches a forbidden state, and only in that order. --fiber cfg.region shows
the EU deployment is safe from it by accident. v2 adds a billing flag whose
enable turns tenancy on: compare reports never-unsafe LOST in one move, and
check reports the new operation unadmitted. final-phase names exactly the
sharded configurations.

Cross-check 56 -> 60 properties (58 compared); 329 checks.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
gotha, calculation, oversight, workflow and access each had 7-12 states,
and their findings could be read off the move list or were fixed by the
modelling choices. gotha and calculation were also political arguments
whose verdicts depended on those choices, not on the search. island stays:
its point is that a known paradox shows up as a declared gap.

writ control and writ compare --git now run on payments (the
idempotency key dropped across two commits loses never-double). The
cross-check walks 18 scenarios and 55 properties, and its live
assertions point at payments and deployment.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@sajonaro
sajonaro merged commit c716317 into main Oct 3, 2026
1 check passed
@github-actions github-actions Bot locked and limited conversation to collaborators Oct 3, 2026
@sajonaro
sajonaro deleted the prune-contrived-examples branch October 3, 2026 17:52
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant