Date: 2026-09-02 (America/Chicago) Input: fable51-r10pre-execution-v3.zip + sidecar SHA-256 Disposition: SCIENTIFIC RESULTS GO. `package-v2.5` ACCEPT WITH AN ADJUDICATION PATCH, NOT AS-IS FINAL CANONICAL. CONTINUE WITH THE CODEBASE/TRVM/SUPER LANES; NO BROAD FABLE THEORY ROUND.
The supplied sidecar verifies exactly.
sha256
30c108e64079ed9459eec3b974e57b65202d917c79dbc7d8908556b402c0d50c
SHA256SUMS verifies successfully and correctly excludes itself.
The v2 packaging defect is closed: the regenerated px13/SHIPPED-SHA256SUMS.txt verifies the shipped PX13 evidence, including the README.
Independent run:
drift_gate v2.5: scanned 11 current-facing files;
54 crosswalk records;
4 promotions
DRIFT GATE PASS
The v2.5 gate rejects v2.4 with 40 findings.
Its six explicit evidence-state mutations also all flip the gate to FAIL:
no-conditions
empty-open-findings
promotion-without-witness
silent-promotion
falsified-open-back
none-claims-eventually
This is a useful sensitivity witness for the gate.
Across:
PYTHONHASHSEED=0
1
42
123
every run:
6 expectations, 0 failed
byte-identical SHA-256:
60722f414e56c6497d59783c8cb2806c20d4090099e3642d19a3167015b1eafa
Across the same four seeds:
15 expectations, 0 failed
byte-identical SHA-256:
8f117aa19a5523f97f8c9a6897f57f8471a95e4d6e98c73708d61082556bf9ec
The two exhaustive algorithms agree in every executed case, and all three checker mutations flip a verdict as required.
The TLA+ version is included but explicitly NOT RUN; no claim should be derived from TLC until TLC is actually executed.
Independent execution:
22 expectations, 0 failed
The raw E-42 and E-43 witnesses remain red; all candidate adapter contracts close their stated witness and expose their cost.
The complete COMPUTEDRIVEN_R085_FOR_GPT.tar.gz internal manifest verifies.
The handback preserves:
falsification before repair;
R0.8.5 source with git history;
gitbundle;
NC26 / NC27;
21-run final series;
per-leg logs;
per-run battery verifier outputs;
the standalone battery verifier;
runner provenance.
Retained final series says:
21 PASS / 0 FAIL of 21
every run:
exit=0
verify=0
dirty=0
guards=0
nc15=0
nc25=0
nc26=0
nc27=0
run_r08=0
I can verify the retained logs, hashes, manifests and saved verifier outputs. I cannot independently re-execute the original Docker/PX13 runner in this sandbox because Docker and the original runner image are not present. That is an environment limitation, not a failed receipt.
The experiment package, vendored ampd source and all receipts are hash-bound by the top-level manifest.
The retained run demonstrates:
live external effect;
process death after far-side mutation;
ATTEMPTED -> UNKNOWN on recovery;
same-id re-claim refused by name;
keyed far side deduplicates a re-authorized replay;
naive far side duplicates it;
attempt-aware reconciliation;
BEAM SIGKILL followed by boot-time UNKNOWN.
Elixir is not installed in this review sandbox, so I cannot independently re-run the eight BEAM boots. The shipped source + raw receipts are sufficient to adjudicate the result as EXECUTED evidence, but not as independently re-executed evidence by this reviewer.
F32 was a real defect:
unique lock holder
!=
unique durable lineage
R0.8.4's lock prevented concurrent current controllers but did not remember which durable history had already become current.
R0.8.5 correctly reproduced the sequential stale-root resurrection:
H0
├─ B -> revision 4 / HB
└─ stale A later reopens H0 and -> revision 4 / HA
and moved the durable lineage fact into the deployment anchor:
anchor:
revision
head
A root behind the anchor is refused; equal revision/different head is refused.
F32 exact rollback-resurrection defect: CLOSED under the stated single-host deployment-anchor profile.
However, the R0.8.5 repair allows:
root.revision == anchor.revision + 1
as the crash window between root install and anchor update.
The reported R0.8.6 F35 shows why this matters:
one revision ahead proves ordering, not provenance.
A foreign but valid successor can occupy that tolerated one-ahead shape.
Therefore:
F32:
CLOSED for stale / rollback resurrection
broader successor provenance:
STILL OPEN as F35
Do not let "F32 closed" promote the broader S3 claim past the evidence.
The v3 return reports:
479e007 F35 falsifier
afcb374 anchor authorizes successor
747f025 three-way fsync outcome recorded
but explicitly says the R0.8.6 handback is not shipped and the live tree was not consumed.
That is good epistemic discipline.
F35 is OPEN FOR GPT ADJUDICATION.
The reported mechanism shape is plausible and directionally right:
pending-successor is established in the anchor
before the root successor is installed
which changes the trusted fact from:
"revision N+1 exists"
to:
"THIS successor is the one the anchor authorized"
But no evidence-class promotion should occur until the full R0.8.6 source, falsifier, receipts, verifier and retained logs are shipped.
Include the complete R0.8.6 handback.
The R0.8.4 repair committed the observed SQLite schema.
F33 correctly identified the remaining hole:
observed interpreter
!=
intended interpreter
At genesis, CREATE TABLE IF NOT EXISTS is initialization, not validation.
R0.8.5 now derives expected_schema() by:
executing the compiled SCHEMA into a pristine in-memory SQLite database;
reading back SQLite's own normalized schema representation;
requiring exact equality against the live store;
doing so before any semantic read or genesis adoption.
This avoids a hand-transcribed schema contract drifting from the compiled schema.
F33: CLOSED under the declared trusted/fixed SQLite-engine profile.
This strengthens E-14 beyond R0.8.4.
The remaining trust profile is legitimate:
trusted:
SQLite engine / built-in interpretation implementation
committed / verified:
intended schema contract
canonical semantic rows
canonical ordering contract
Do not claim resistance to adversarial replacement of the SQLite engine binary itself.
PRAGMA integrity_check must return exactly:
ok
before the store is admitted.
This addresses a different layer than a digest over values: the digest asks SQLite to interpret the structures, while integrity_check checks those structures for internal consistency.
F34: CLOSED for the declared correctness profile.
Availability / DoS from a hostile store remains outside this claim.
R0.8.5 no longer delegates canonical ordering to SQLite ORDER BY semantics.
It:
reads logical rows;
sorts lifecycle / authority by numeric seq;
sorts workers by name bytes;
sorts ledger by (family, request_id) bytes;
refuses duplicate logical keys.
This is materially cleaner than relying on a collation or index traversal.
F24: CLOSED for the represented canonical collections.
Keep the negative-control lesson:
a control that changes a connection-local pragma in some other process is not evidence about the controller's own connection.
The exact F22 defect was:
predictable <root>.tmp
+
File::create / O_TRUNC
+
symlink following
R0.8.5 uses a private temporary beside the target:
.<base>.<pid>.<time>.tmp
opened with:
O_CREAT | O_EXCL
and states the trust boundary explicitly:
the directory holding the canonical root and anchor is deployment-controlled and not writable by the store adversary.
Under that profile, the old symlink attack is closed.
F22: CLOSED UNDER THE DECLARED TRUST PROFILE.
Do not keep "F22 closure pending" as an open finding.
Instead record:
trust assumption:
canonical root + anchor parent directory is deployment-controlled and
not writable / redirectable by the store adversary
If a later threat model grants the attacker authority over parent-directory components, that is a new profile and needs a new falsifier.
Root and its mutable fields are now behind a Rust module boundary, with external field mutation rejected by rustc (E0616).
This is defence in depth for the existing transition rules rather than a new semantic obligation.
F30: CLOSED as a representation / implementation constraint.
Remove "F30 adjudication pending" from R0.8 open findings.
The current package's r0_8.open_findings should be patched.
Remove:
F30 closure pending
Replace:
F22 layer is open
with:
F22 exact attack CLOSED;
deployment-controlled root/anchor directory remains an explicit trust-profile
assumption
Add:
F35 successor provenance:
R0.8.5 tolerates one-ahead as a crash window;
a valid foreign successor can fit that shape;
R0.8.6 reports a repair but full evidence is not shipped / adjudicated.
power-loss / fsync consistency:
UNCLAIMED
post-rename / directory-fsync ambiguous durability:
OPEN design question
single-host only:
no partition- / failure-tolerant consensus claim
trusted deployment anchor / filesystem namespace:
explicit profile assumption
So:
R0.8 remains OPEN.
The v2 adjudication asked for exactly this split:
L1-PRE:
resolvability / a path exists
L1 temporal:
eventuality only under a declared fairness policy
v3 now implements that split.
This is the right structure.
For the finite model:
NO fairness:
a stuttering / postponement counterexample exists
WF(finality):
L1-closed holds
-> evidenced generation eventually closes or terminalizes
WF(finality) only:
L1-strict can fail
-> a closed generation can remain vacant forever
WF(finality) + WF(attach):
L1-strict holds
NO-FINALITY:
fairness does not invent a missing finality mechanism
REACH-AS-LOSS:
progress is possible but violates the safety premise by closing while
holder is alive
This is a useful separation of safety from liveness.
The temporal witness repeatedly calls a state:
UNRESOLVABLE
when there is a fair/non-fair infinite counterexample.
That word conflicts with L1-PRE, which already proves the same state has a resolution path.
Without fairness the state is not "unresolvable".
Correct wording:
resolvable:
YES, a resolution path exists
eventual resolution guaranteed:
NO, because a non-resolving infinite execution remains admissible
Rename the temporal table column / prose from:
unresolvable
to something like:
bad-fair-path states
nonresolving-counterexample states
eventuality-failing states
and change:
every evidenced state is UNRESOLVABLE
to:
every evidenced state admits a non-resolving stuttering execution when no
fairness assumption excludes postponement
This is a semantic correction, not cosmetic wording.
The core finding is right:
the Locus mechanism cannot manufacture a willing successor.
So the existence / availability of a future successor is environmental.
But WF(attach) in the finite model mixes two things:
ENVIRONMENT:
a valid successor is offered / remains available
SYSTEM / SCHEDULER:
a continuously enabled valid attach is eventually serviced
Do not classify all of WF(attach) as external.
Recommended split:
ENV-SUCCESSOR:
eventually a valid willing successor exists / is offered
SYS-ATTACH-FAIRNESS:
if a valid attach remains continuously enabled, the system does not
postpone processing it forever
Then:
L1-closed:
system guarantee under WF(finality)
L1-service-succession:
system guarantee conditional on ENV-SUCCESSOR + SYS-ATTACH-FAIRNESS
This is a cleaner contract for a real operating environment.
Keep:
L1?
as a candidate.
Do not promote it to an irreducible law yet.
The Python temporal witness is now strong finite-model evidence:
EXHAUSTIVE-IN-FINITE-MODEL
under declared fairness assumptions
The TLA+ artifact is useful but remains:
NOT EXECUTED
Run TLC later as an independent engine, but the absence of TLC is not a blocker to continuing implementation research.
This is a real advancement.
The experiment crosses an actual process boundary to a separately durable far side and reaches the exact ambiguity S5 is about:
far side changed
journal did not yet record COMMITTED
effecting process dies
Recovery correctly produces:
UNKNOWN
rather than:
FAILED
or
safe-to-retry
The keyed far side then demonstrates the safe replay shape:
same stable intent key
-> no second external effect
-> stored far-side result returned
The naive far side supplies the falsifier:
same intent replayed
-> second external effect
-> journal alone cannot tell
The node-level SIGKILL also reaches UNKNOWN after restart.
Move S5 to TESTED under the exact stated profile.
That means:
TESTED:
real adapter
same-machine separate durable far-side process/store
process crash after side effect
BEAM SIGKILL after side effect
keyed dedup
far-side reconciliation evidence
NOT TESTED:
network partition
third-party far side
remote service outage
kill during DETS mutation
exactly-once across an unreliable boundary
Do not paraphrase the status as universal "S5 proven".
E-50 currently combines two distinct gaps.
They should be separated.
Current behavior:
ef_0001:
UNKNOWN
effect_key = K
fresh approval:
ef_0002
effect_key = K
journal:
allows ef_0002 to CLAIM / ATTEMPT
without consulting unresolved ef_0001 by key
Safety therefore depends entirely on the far side.
This violates the stronger S5 discipline unless duplicate risk is explicitly acknowledged.
DUPLICATED_ACKNOWLEDGED should probably not be modeled as a terminal state merely because earlier prose called it one.
Risk acknowledgment occurs before the replay's outcome is known.
Prefer an explicit authorization/evidence fact such as:
DUPLICATE_RISK_ACKNOWLEDGED
or
REPLAY_RISK_AUTHORIZED
which permits the new attempt.
That attempt can still later become:
COMMITTED
FAILED
UNKNOWN
If an actual duplicate is later proven, that can have its own outcome/receipt.
The first reconciliation run correctly exposed:
same idempotency key
!=
same attempt
A far-side record saying:
ef_0002-a1 completed intent K
must not make the journal claim:
ef_0001-a1 itself COMMITTED
The original attempt needs a distinct terminal relation such as:
SUPERSEDED
while the higher-level intent may be:
SATISFIED / COMMITTED by another attempt
Keep both findings red for the Super/ampd lane, but split them in the cross-registry map:
E-50a replay-risk authorization by stable intent identity
E-50b attempt supersession / reconciliation attribution
That will keep two different semantics from sharing one repair.
The R10-pre execution lane did not overstep.
It:
kept raw E-42/E-43 red;
did not edit TRVM;
implemented candidate contracts as adapters;
measured whether they close the witness;
measured their costs.
That is exactly useful pre-governance work.
The TRVM lane still owns the decision.
The adapter results are useful:
Scope registration is a world transition.
Pros:
world version again identifies the observable
Cost:
even re-registering the same source currently advances version
Scope registry is a separate observable coordinate.
Pros:
resource version semantics stay narrow
Cost:
coarse invalidation;
even unrelated warrants can be refused
Consider A-idempotent:
if existing scope source digest == new source digest:
true no-op
version does not advance
if digest changes:
scope redefinition is a semantic world transition
version advances
log records it
That preserves A's adequacy without charging a semantic transition for an identical registration.
Do not make that change from this lane; hand it to TRVM governance.
The adapter results show:
L-PREFIX:
answers "is this state a descendant of the state the warrant came from?"
but cannot distinguish an independent byte-identical twin
L-ID:
answers "is this the same world lineage/birth identity?"
but refuses a pre-fork warrant even on a legitimate descendant
Those are different questions.
The shipped BOTH adapter already demonstrates:
world/birth identity
+
history/state-prefix identity
can distinguish:
an independent twin;
a divergent fork;
the own lineage.
Do not force an artificial either/or between L-PREFIX and L-ID.
Adjudicate whether a warrant needs both coordinates:
world_id / lineage_id
+
state-prefix or history digest at issuance
Then define deliberately whether a fork():
A. creates a new world identity
or
B. creates a descendant identity with explicit ancestry
That semantic choice should determine warrant portability.
This rule has now accumulated enough independent witness families to deserve a factory round.
Still do not mint it from this execution lane.
The factory should own promotion finality.
factory-station.mjsIf:
old.evidence_class != new.evidence_class
require a promotion record.
Not merely a prose string.
Require a typed receipt reference:
type:
pre-fix-fail
injected-fault-fail
subject-reach witness
mutation-verdict-flip
plus hash / source identity.
For:
TESTED-CONDITIONAL
SUPPORTED-CONDITIONAL
...
require nonempty:
conditions
scope_profile / trust_profile
For example:
TLA file present != TLC executed
commit prose present != R0.8.6 closure tested
Require:
executed: true|false
receipt path
tool/runtime identity
before TESTED promotion.
No:
status = OPEN
open_findings = []
A FALSIFIED -> TESTED transition must preserve:
the pre-fix failing witness
+
the repair witness
Do not rewrite the old receipt away.
Crosswalk counts, PASS totals, registry sizes, etc. should be derived by the factory.
Carry the R10-pre gate pattern:
valid package -> PASS
mutated evidence state ->
each mutation makes station FAIL
This is FAC-CONTROL-SENSITIVITY applied recursively to the evidence factory.
Do not hardcode:
E-14
R0.8
L1
S5
into factory-station.mjs.
Instead support typed validators / schemas for:
safety claim
liveness claim
conditional mechanism claim
factory epistemic claim
and let project-specific gates compose those generic rules.
Before calling v2.5 final canonical, make package-v2.6 with the adjudication state.
Required changes:
R0.8.5:
F32 CLOSED for stale/rollback resurrection;
F33 CLOSED under trusted/fixed SQLite engine profile;
F34 CLOSED;
F24 CLOSED;
F22 CLOSED under declared deployment-directory profile;
F30 CLOSED.
R0.8:
remains OPEN;
explicitly add F35 successor provenance as open/unadjudicated;
remove F22/F30 "closure pending";
retain filesystem namespace as a trust-profile assumption;
retain power-loss / fsync and distributed-fault-tolerance scope limits.
L1:
replace temporal use of UNRESOLVABLE with
non-resolving counterexample / eventuality not guaranteed;
split ENV-SUCCESSOR from SYS-ATTACH-FAIRNESS in the doctrine.
E-50:
split into E-50a replay-risk authorization and E-50b attempt supersession.
R0.8.6:
do not mark F35 closed until a complete handback is present.
Gate:
add a negative assertion that an L1 state known resolvable=true may not
be called unresolvable merely because temporal eventuality fails.
No new theory search is required for this patch.
Still correctly untouched.
No issue.
It remains explicitly operator-gated by the frozen protocol.
Its scientific value remains high because it is orthogonal to the safety / durability work:
can capability survive replacement of transient intelligence because the environment has become a causally sufficient support structure?
Execute only with explicit spend authorization.
S1 Admission singularity
World Locus-birth uniqueness remains an S1 scoped corollary
S2 Authority non-amplification
S3 Continuity / anti-resurrection
currentness/exclusivity
canonical-history continuity
successor provenance now explicitly visible as F35 in R0.8
S4 Semantic observability
E-42/E-43 remain red
adapter contract costs now measured
S5 External-effect honesty
TESTED under first real-adapter profile
journal-level same-intent replay and attempt attribution remain red
L1? Recoverable resolution / succession
L1-PRE:
resolution path exists
L1-closed:
temporal closure under WF(finality)
L1-service-succession:
additionally conditional on successor availability
+ fair processing of enabled attach
FAC-CONTROL-SENSITIVITY
ready for a factory promotion round
but not minted by this lane
This is an evidence-state patch, not a research round.
This is now the highest-priority ComputeDriven adjudication item.
The key question is:
does the anchor authorize a specific successor before the root can become the tolerated one-ahead state, and do crash/recovery receipts preserve that authorization without creating a new F36?
Use the measured adapter costs.
I would explicitly evaluate:
E-43 A-idempotent
E-42:
world/birth id + state/history prefix
rather than assuming the originally presented pairs are exclusive choices.
Do not simply add a string terminal.
Model:
intent
attempt
risk authorization
attempt terminal
intent satisfaction
as distinct concepts.
Carry the generic evidence-transition checks listed above.
Useful independent temporal engine, but not the highest priority.
A genuinely remote/networked S5 adapter would be a useful next profile expansion, but the current local far-side run is already a valid first witness.
This execution round is a net success.
It does not merely make more tests green.
It changes what is known:
R0.8.5 closes the exact stale-lineage rollback defect F32, while exposing
successor provenance as a distinct remaining issue F35.
The intended SQLite interpretation is now verified, not merely hashed.
F22's exact symlink attack and F30's privacy gap close under explicit
profiles.
L1 now has both an existential resolvability witness and an explicit
temporal fairness witness.
The successor half of L1 is shown to depend on environmental availability
as well as fair system processing.
S5 finally has a real external-effect adapter witness and a live UNKNOWN
state after an actual far-side mutation.
The S5 run finds two real ampd journal gaps rather than hiding behind the
keyed far side.
TRVM's candidate repair costs are now measured without pre-empting the
governance lane.
FAC-CONTROL-SENSITIVITY has matured from a good sentence into a plausible
factory evidence-admission rule with multiple independent witness families.
GO to the codebase/governance lanes.
Do not return to a broad Fable invariant-search round yet.
The next loop should be:
v2.6 evidence-state patch
-> full R0.8.6 handback
-> TRVM/Super/factory lane decisions
-> GPT adjudication