Commit graph

591 commits

Author SHA1 Message Date
Meta Vens
332dbd0149 deploy-provenance map: tree executable members (body facts, rationale)
Imagination pass for cut tree-executable-members (session
self-2026-10-23-eureka-b): seal, digest and receipt facts, symlink rule,
live binary and install path, disk sizing for the acceptance job.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 19:42:34 +02:00
Meta Vens
d74ac8da5c Launcher: presence freshness treats a stamp after the reading as age zero; pin the bound literally
Reading the clock after the cached result still left the answer to ordering; the
one place freshness is decided is the age subtraction, and monotonic time cannot
run backwards, so a result stamped after the reading is fresher than it and ages
zero. The bound test names 86400 and 86401 so raising the constant is caught.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 15:01:56 +02:00
Meta Vens
d111986093 Launcher: pin deadline clock sources, read presence freshness in a race-free order, bound declared durations
The test clock's wall now starts a Unix-epoch away from the monotonic clock, so a
deadline or schedule that reads the wrong source fails. serving_state reads the
cached probe before the clock (a stamp is taken before it is stored, so the later
reading is never behind it) and ages with saturating_sub; the test that pinned the
old wrong answer is replaced by a deterministic descheduled-reader test. The
lease-wait, startup and heartbeat seconds are bounded to one day at parse with a
refusal that names the flag and not the value, and every deadline is computed by
one saturating helper.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 14:23:28 +02:00
Meta Vens
06782d38f2 idunn-launch tests: the presence tripwire trips on the monotonic read, before any lock is held
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 12:27:38 +02:00
Meta Vens
5d8f7e18c5 idunn-launch: freshness, deadlines and the probe schedule run on a monotonic clock
Clock gains monotonic_millis; the cached health result's age, the freshness
decision, the probe schedule, heartbeat and lease/startup deadlines all read it.
Wall time stays on the signed record only. A result stamped after now is not
evidence. Tests step the wall clock both ways, pin the warming-proof cap, and
bound the lease-timeout join.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 12:26:22 +02:00
Meta Vens
b5d13652e1 idunn-launch tests: the first Active probe is also held to the refresh cadence
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-23 04:50:09 +02:00
Meta Vens
6b1d14d159 idunn-launch tests: an Active child is probed at the refresh cadence
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-23 04:43:04 +02:00
Meta Vens
2ea0572a4c Docs: member connection limit and the cached presence answer
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-23 04:34:28 +02:00
Meta Vens
1207f21948 Real-nginx tests report how many challenges were answered
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-23 04:34:14 +02:00
Meta Vens
60b64e283d Real-nginx tests stop nginx through nginx so its workers do not hold the test's pipe
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-23 04:33:23 +02:00
Meta Vens
d6ebd328e1 Fix route limit bound (nginx allows below 65536); the dead-acceptor test kills the presence thread through the clock
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-23 04:16:44 +02:00
Meta Vens
c38bb36560 Fix route limit bound (nginx allows below 65536); the dead-acceptor test kills the presence thread through the clock
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-23 04:15:50 +02:00
Meta Vens
e5294db40c idunn-launch: a challenge answers from the lifecycle's last probe, stale or failed reads degraded; tests bound their waits and pin startup timeout and heartbeat cadence
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-23 04:12:57 +02:00
Meta Vens
36114b8b7b Idunn routes tests: the rendered member block pins its limit zone; real-nginx flood tests prove presence stays answerable
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-23 04:12:56 +02:00
Meta Vens
2218ffb8a8 Idunn routes: the member server block renders a limit_conn on a per-route zone; [route.member].max_connections defaults to 128
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-23 04:10:12 +02:00
Meta Vens
b379fbd700 Tests kill mutation survivors: each owned-name site is pinned alone, the member range below the route's is accepted, a challenge near the frame bound is answered; accept errors share one backoff
Builds.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-23 01:45:19 +02:00
Meta Vens
9173a0e8e6 idunn-launch answers presence only: the splice, the unix child endpoint and --listener are deleted; the child binds the member bind and the probe reaches it over TCP
PresenceAcceptor serves one connection at a time within a 1 s deadline and never ends on an accept error; a dead presence thread fails the unit. Builds.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-23 01:28:30 +02:00
Meta Vens
7805c0aa9a Idunn routes: an optional [route.member] renders a second nginx server block and sets GAMECULT_IDUNN_MEMBER_BIND; Idunn-owned launch names live in one list
The member candidate port is derived from the candidate port; both stable sockets get firewall rules; native targets render the same bytes as before. Builds.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-23 01:18:26 +02:00
Meta Vens
e2dee7c16a idunn-launch tests: the inherited lease lock must stay held for a second, so a concurrent fork cannot mask a missing descriptor
Builds.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-23 00:15:33 +02:00
Meta Vens
8246de7c37 idunn-launch tests: lock-release wait tolerates a concurrent fork; health probe test reads the request line, not a 64-byte read
Builds.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 23:26:35 +02:00
Meta Vens
d36786f76c idunn-launch: credentials only under CREDENTIALS_DIRECTORY, bounded route acceptor, lease lock inherited by the child, startup probe rules pinned
Soul s1 fixes. Credential placeholders resolve files under
$CREDENTIALS_DIRECTORY only, never an environment variable. The route
acceptor has a first-byte deadline, a total challenge deadline and a
connection cap with unspawned refusal; a dead acceptor degrades presence.
The shared lease lock is a plain descriptor the child inherits, so the lock
lives as long as any writer. Tests pin a late-healthy child and a hung probe.
One commit: the spawner and lease trait signatures change together with
their fakes. Builds.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 23:16:42 +02:00
Meta Vens
9c69d00641 Tests kill survivors: grant binding and holder custody, parse fields, credential names, env credentials, Odin endpoint, half-close splice, heartbeat pacing, SIGTERM escalation
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 20:48:29 +02:00
Meta Vens
0e09488c19 idunn-launch tests: wait_until takes FnMut
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 20:09:26 +02:00
Meta Vens
d94150d396 idunn-launch: release root is the launcher's own release; docs for foreign workloads; probe, spawner and authority tests
Not built at this commit; verified at the head by the final job.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 19:58:21 +02:00
Meta Vens
6866d75536 idunn-launch tests: lease gate, foreign lease, lease loss, stateless, route challenge, verbatim splice, closed placeholders, child exit (unbuilt)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 19:10:58 +02:00
Meta Vens
b9f27ce1e7 idunn-launch: presence launcher, lease hold, closed-set config renderer, route acceptor (unbuilt)
Does not build-verified yet; tests follow. drivers.rs: holder-side lease read, one lease-binding rule shared with grant.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 18:53:29 +02:00
Meta Vens
491459e6a0 State kind external-directory: process-owned directory, lease-gated like external-file
Not built or tested yet; verified at the end of the cut.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 18:47:20 +02:00
Meta Vens
6e2a31cf31 Body map after reincarnation cut 2: two slots, take_target, forward retry, operator-required
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 02:40:55 +02:00
Meta Vens
2f8671ac35 Reincarnation map: cut 2 installed
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 02:36:25 +02:00
Meta Vens
dbbdbf12fe Merge idunn/reincarnation-c2: phase-split handover, owner deadlines, forward retry, continuity yields
Cuts c2-phase-split, c2b-owner-deadlines, c2c-post-fence-forward, c2d-continuity-yields with their Soul passes; installed on Yggdrasil 2026-10-20 00:34 UTC.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 02:36:24 +02:00
Meta Vens
8760a4fab3 A boot lift that errs fails closed
If the boot lift returned Err, boot logged and served with nothing held, so
every pending continuity abort ran and stopped a running candidate. Boot now
sets lift_unsettled; retry_held_lift runs the lift for each continuity abort
until one succeeds, and no abort step runs before. Boot's call moves into
Engine::boot_lift so the failure is testable.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 01:51:57 +02:00
Meta Vens
c4edc66c48 The boot lift yields to a Deploy by the continuity's own yield test
The lift kept an abort running for any awaits_handover Deploy, so a braked
Deploy released a held record to an abort that stopped the only copy of the
body. One predicate, deploy_the_continuity_yields_to (candidate unproven, a
waiting Deploy that deploy_can_move), is now what both the deadline's yield
and the lift ask (rulings c2d-yield-only-unproven-to-movable,
c2c-lift-defers-on-observe-error).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 01:50:46 +02:00
Meta Vens
b993615c69 Negative tests: the lift must not yield to a braked waiting Deploy
Two tests, from Soul's h2 attacks: a running candidate at boot beside a braked
stop-then-start Deploy at its Sealing tail, and a held (unobservable)
candidate when such a Deploy appears. Both must leave the candidate unstopped.
They fail here: the lift treats any awaits_handover Deploy as a reason to keep
aborting.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 01:47:48 +02:00
Meta Vens
b119e500ad c2d fix 2/2: a continuity yields only while unproven, and only to a Deploy that can move
serving_proven (Committing, or routing evidence recorded) ends the yield:
yields_to_a_deploy replaces retries_forward, and wait_for_owner reads it, so
a Deploy no longer waits on an owner that will keep serving. deploy_can_move
asks the deployment brake live for a Deploy at its Sealing tail, so a braked
Deploy draws no yield and the yield happens once the brake releases. The
tests of 04389e6 are repaired to reach their worlds (the failures they
showed at 1beca61 were the right ones). Rulings
c2d-yield-only-unproven-to-movable.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 21:43:34 +02:00
Meta Vens
04389e6afc c2d fix 1/2: negative tests, no yield to a serving continuity or a braked Deploy
Fail at 1beca61 (the c2d logic is 81bfb03's): a Committing continuity past
its deadline yields to a waiting Deploy and stops serving; a stop-then-start
Deploy at its Sealing tail with the deployment brake unreleased draws the
yield. The second test releases the brake and pins that the yield then
happens and closes the continuity's operator-required incident Recovered.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 21:38:10 +02:00
Meta Vens
1beca61ac4 c2c fix 3/3: the refusal table's recorded-withdrawal case ends at the lift
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 21:31:36 +02:00
Meta Vens
35d9c7fcf8 c2c fix 2/3: the lift defers on an observe error; the retry exit is worded from the driver
An abort over a candidate the boot lift could not observe is held in
process memory: resume_candidate runs no step of it and retries the lift
each pass (retry_held_lift) until observation answers Ok (lifted) or the
driver proves the candidate dead (the abort proceeds). The predicate and
write move into consider_lifting_continuity_abort, which boot and the
retry share. Ruling c2c-lift-defers-on-observe-error.

The page and the expire refusal name the manual exit from the plan's
workload binding: a unit to stop for systemd, a process to kill for a
host actuator.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 21:30:18 +02:00
Meta Vens
11f7fdbf09 c2c fix 1/3: negative test, a lift that cannot observe must not let the abort stop the candidate
Fails at 81bfb03: an observe error leaves the abort running and its first
step stops the candidate. Also pins the lease_withdrawal==Complete conjunct
(case LeaseWithdrawalRecordedComplete) and makes the refusal table's
dead-candidate case provably dead (SwitchWorkload::bury).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 21:28:06 +02:00
Meta Vens
81bfb03712 route-continuity-target invariant 5: the continuity yields to a deployment awaiting the handover
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 20:11:10 +02:00
Meta Vens
4e66a65758 c2d stateful yield test: drop the Fencing half the seeded Deploy cannot honestly assert
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 20:10:18 +02:00
Meta Vens
09bd127643 c2d: stateful yield test, an Odin-shaped continuity yields its lease to a waiting Deploy
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 20:09:28 +02:00
Meta Vens
f79deecdb7 c2d tests: the helper stops short of the deadline; each test passes it 2026-10-19 20:07:30 +02:00
Meta Vens
fd6e3e65af c2d yield table: show how row (i) ends 2026-10-19 20:06:48 +02:00
Meta Vens
a868321259 c2d yield table: name the row an error comes from
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 20:06:00 +02:00
Meta Vens
196e0dc884 c2d: a resolver write spends the resume backoff; the boot lift leaves a yield
resume_candidate removes the transaction's backoff when the resolver
moved its record, so a yield abort is not held behind the forward retry's
backoff (ruling c2d-yield-mechanics). return_wedged_continuity_aborts_forward
skips an abort whose target holds a Deploy awaiting the handover. Tests:
the yield table, the unit rows, the c2b waiter-still-ends row, the
backoff spend, and lift case (vii).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 20:03:48 +02:00
Meta Vens
4f68809f0b Continuity yields to a Deploy awaiting the handover (ruling continuity-yields-to-deploy)
A continuity past its deadline at or past Fencing begins its own
post-fencing abort when a Deploy on its target awaits the handover; the
waiter keeps waiting on an owner that retries forward. Adds
retries_forward and awaits_handover, both derived.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 19:59:37 +02:00
Meta Vens
a7ad3de559 c2d negative: a waiting Deploy must land over a forward-retrying continuity past its deadline
Red at e529858: the waiter ends FailedBeforeFencing owner-left-to-operator.
The yield (ruling continuity-yields-to-deploy) lands in the next commit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 19:58:09 +02:00
Meta Vens
e5298584a4 Merge origin/main (bounded_detail hotfix) into idunn/reincarnation-c2
Conflict in begin_post_fencing_abort: kept c2's now_millis binding and
the hotfix's bounded_detail in place of truncate. The owner-wait note
written by wait_for_owner now goes through bounded_detail too; every
other c2/c2b/c2c detail writer already did.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 19:34:20 +02:00
Meta Vens
ec45906ead bounded_detail: use std char-boundary floor/ceil instead of hand loops
The hand loops hung under mutation (infinite loops); std does it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 19:07:23 +02:00
Meta Vens
8f00df079f Sealing-failure test: clear the resume backoff between ticks
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 18:40:52 +02:00