invariant-r10 invariant-r10/inputs-gpt-execution-adjudication-v4.md
Date: 2026-09-02 (America/Chicago) Input: fable51-r10pre-execution-v4.zip + sidecar SHA-256 Disposition: SCIENTIFIC RESULTS GO. F35 EXACT ATTACK CLOSED. `package-v2.6` STRUCTURE…

GPT-5.6 Adjudication — R10-pre Execution v4

Date: 2026-09-02 (America/Chicago) Input: fable51-r10pre-execution-v4.zip + sidecar SHA-256 Disposition: SCIENTIFIC RESULTS GO. F35 EXACT ATTACK CLOSED. `package-v2.6` STRUCTURE ACCEPTED, BUT A v2.7 EVIDENCE-STATE PATCH IS REQUIRED BY THIS ADJUDICATION. R0.8 REMAINS OPEN FOR ONE NEW CRASH-CUT CONTROL. NO BROAD FABLE THEORY ROUND.

0. Independent verification

Outer archive

The supplied SHA-256 sidecar matches exactly:

79d11f839e1bf4f36b95cc473e5dc3949c08ba1d09dea38547858e0c963cf1b6

Top-level integrity

SHA256SUMS verifies successfully.

v2.6 drift gate

Independent run:

drift_gate v2.6: scanned 12 current-facing files;
56 crosswalk records;
5 promotions
DRIFT GATE PASS

The v2.6 gate rejects v2.5. It catches stale R0.8.6 status, stale L1 vocabulary, missing E-50a/E-50b/E-51, and the old untyped evidence-state schema.

L1 witnesses

L1-PRE

Across PYTHONHASHSEED=0,1,42,123:

6 expectations, 0 failed
sha256:
60722f414e56c6497d59783c8cb2806c20d4090099e3642d19a3167015b1eafa

L1 temporal v2.6

Across the same four seeds:

19 expectations, 0 failed
sha256:
b4e675ffe3371fad4c54022218d0364b4d445cffe714967bb1998209c7acb21f

The terminology correction is real:

RESOLVABLE
!=
EVENTUALITY GUARANTEED

and the model now separates environment offer from system attach.

EXP-6b / E-51

Independent run:

14 expectations, 0 failed

EXP-7 v2

Independent run:

35 expectations, 0 failed

Raw E-42/E-43 remain red. The adapters measure A-IDEMPOTENT and L-ANCESTRY rather than pre-empting TRVM governance.

factory-kit

The project-agnostic validator admits the real v2.6 projection:

check-evidence-transitions:
    evidence-state@1
    56 records
    5 promotions
✓ ADMISSIBLE

Its selftest baseline passes and all eleven built-in mutations are refused.

R0.8.6 handback

The complete handback is shipped.

Its internal SHA256SUMS.txt verifies successfully.

The source history is:

479e007  R0.8.6 falsification — NC28 fails on purpose
afcb374  F35 repair + verifier hardening
747f025  record the three-way fsync outcome at the discard

The retained series reports:

21 PASS / 0 FAIL of 21

with seven independently logged legs per run:

guards
nc15
nc25
nc26
nc27
nc28
run_r08

and verify_battery.py re-derives each leg's subject marker from its retained log rather than trusting only exit=0.

Representative NC28 after repair:

foreign successor:
    revision 3 / head c3b1c27d...

presented to honest anchor:
    ok=false
    anchor revision/head unchanged

NC28 PASS

I can independently inspect the shipped source, git history, logs, hashes and receipts. This review sandbox does not provide the original PX13 Docker/Rust runner, so I am not claiming an independent re-execution of the 21-run PX13 battery.

1. F35 — ACCEPT closure of the exact defect

The defect was:

root.revision == anchor.revision + 1

was treated as sufficient evidence that the ahead root was the honest deployment's interrupted successor.

That proved only:

ORDER

not:

PROVENANCE / AUTHORIZATION

A valid successor produced from the same ancestor under a different anchor could occupy the same one-ahead position.

R0.8.6 changes the anchor from:

committed revision/head

to:

committed revision/head
+
pending successor revision/head

and writes the pending authorization before the root records the pending transition.

The admission question is now:

"is this exact next head the one this anchor authorized?"

rather than:

"is this candidate exactly one revision ahead?"

The foreign-successor control is a direct falsifier and flips FAIL -> PASS.

Ruling

F35 exact foreign-successor-substitution defect: CLOSED under:

single host
one protected deployment-owned anchor namespace
trusted root/anchor directory
content-addressed canonical successor head

This is a real strengthening of S3 continuity.

2. The order-of-checks repair is correct

I particularly accept moving anchor reconciliation out of Root::open.

Previously a candidate could move the trust anchor before Ctl::open had verified:

store re-derivation
canonical head
schema contract
integrity_check

R0.8.6 now:

Root::open:
    validates whether an ahead root was authorized
    DOES NOT advance the anchor

Ctl::open:
    validates the candidate store/root semantics
    THEN reconcile_anchor()

That is the correct trust ordering.

A trust anchor must not be advanced merely because an untrusted candidate has the right numerical shape.

3. No F36 is demonstrated — but one new crash cut is not directly witnessed

I do not see evidence in this bundle of a new F36 that re-opens the F35 semantic repair.

However, the repair introduces a new load-bearing sequence:

A. anchor pending-successor authorization persisted
B. root pending transition persisted
C. store successor committed
D. root committed
E. anchor committed / pending authorization cleared

The existing runtime crash hook:

after-pending

fires after Root::set_pending() returns, therefore after both A and B.

It does not directly hit:

A succeeded
B did not happen

nor the sibling case:

A succeeded
root persistence B returned an error

The source ordering is sensible, but this exact cut is now load-bearing because A is new trusted durable state.

Required control before freezing R0.8

Add a small NC29 or equivalent fault-injection control:

NC29 — anchor-authorized / root-unwritten crash cut

1. start from committed R/H0
2. compute intended successor H1
3. persist anchor pending R+1/H1
4. inject process death or root-persist failure BEFORE root pending lands
5. restart against root/store still at R/H0

It should establish explicitly:

a. the controller does not invent that H1 committed;
b. a one-ahead root Hforeign != H1 is refused;
c. the exact H1 successor, if later presented with a semantically matching
   canonical store, is the only ahead successor the anchor can admit;
d. after an explicit replacement/cancellation policy (if replacement is
   permitted before the root pending lands), the old H1 can no longer be
   admitted;
e. the recovery/report surface exposes enough state to distinguish
   "nothing ever authorized" from "successor H1 was durably authorized but
   the root never recorded pending", OR the design explicitly documents why
   that distinction is intentionally not externally observable.

This is an evidence gap, not a demonstrated defect.

Do not mint F36 unless the control actually produces an unsafe or dishonest state.

4. R0.8 status

My current ruling:

F31  CLOSED
F32  CLOSED
F33  CLOSED under trusted/fixed SQLite interpreter profile
F34  CLOSED under stated correctness profile
F24  CLOSED
F22  exact attack CLOSED under deployment-directory trust profile
F30  CLOSED
F35  CLOSED under the single-host deployment-anchor profile

NC29 new authorization/root cut:
     UNTESTED

Therefore:

R0.8 = OPEN

but much more narrowly than before.

I would not keep R0.8 open merely because power-loss durability is unclaimed if the round's declared scope is process-crash continuity.

Instead make the profile explicit:

R0.8:
    process crash / restart
    single host
    trusted canonical root + anchor parent directory
    no power-loss / block-layer persistence theorem
    no distributed consensus theorem

If NC29 is green and no new process-crash defect appears, I would seriously consider freezing R0.8 within that profile.

Power-loss / directory-durability semantics can then be a distinct later profile/round rather than an eternal reason R0.8 cannot close.

5. package-v2.6 — structure ACCEPTED; final evidence state needs v2.7

The §18 patch is complete and internally coherent.

I accept the typed projection architecture:

record
promotion
status
artifact
derived count

and the generic rules A–H.

However, v2.6 deliberately says:

F35 = OPEN-UNADJUDICATED

because it was waiting for this review.

This adjudication changes that fact.

So v2.6 cannot remain the final current evidence state after this ruling.

Required v2.7 patch

No theory.

Update only evidence state / current-facing doctrine:

F35:
    CLOSED by R0.8.6 under the explicit single-host trusted-anchor profile

R0.8:
    OPEN due to NC29 untested authorization/root crash cut
    + explicit out-of-scope profile limits

E-13b:
    extend the closure from CLOSED-F31/CLOSED-F32
    to include CLOSED-F35
    with the same trust-profile qualifier

Preserve the F35 failing witness and repair witness append-only.

The v2.7 gate should refuse:

F35 still OPEN-UNADJUDICATED

after this adjudication.

6. Evidence-state promotion schema — ACCEPT, with four additions

The current promotion record shape is good:

record_id
from
to
sensitivity_witness
executed
executed_by
runtime
pre_fix_witness
repair_witness
promoted_in
history

I would keep it, but I recommend four fields/normalizations before making it a long-term factory contract.

A. use stable class tokens separately from prose

Do not make giant prose strings in from / to the machine comparison.

Prefer:

{
  "from_token": "FALSIFIED",
  "to_token": "TESTED-CONDITIONAL",
  "from_detail": "...",
  "to_detail": "..."
}

The prose remains useful for humans; the token is what the station reasons over.

B. bind the subject implementation

Every executed promotion should carry:

subject_identity:
    repo
    commit
    tree
    artifact digest where applicable

A runtime receipt without the exact subject identity is weaker than it needs to be.

C. bind adjudication when adjudication is required

For cross-lane evidence classes such as this R0.8.6 closure:

adjudication_ref
adjudicator
adjudicated_at

should be available.

Execution and adjudication are distinct acts.

D. make the projection generated, not a second hand-authored registry

evidence_state.json should be a deterministic projection from canonical lane registries + promotion records.

Its own hash should go in the station receipt.

That avoids solving registry drift by creating one more registry to drift.

7. Should every lane be required to provide evidence_state.json?

At promotion/freeze/closure boundaries: YES.

On every ordinary development commit: NO.

Recommended station rule:

if a lane requests any of:
    evidence-class promotion
    FALSIFIED -> repaired/tested
    OPEN -> CLOSED/FROZEN
    candidate -> accepted/corollary
    scope/trust-profile strengthening

then:
    an evidence-state projection is mandatory
    and the generic validator must admit it

If the lane claims no evidence-state transition, the station can instead derive:

promotions = 0

and prove the projection is unchanged.

This keeps the epistemic discipline at the exact place it matters without turning every code edit into registry ceremony.

8. FAC-CONTROL-SENSITIVITY — keep DECLARED for now

The rule is strong and the factory kit is good.

But I would not mark the broad claim PROVED yet.

Why:

The checker proves, over its declared evidence-state@1 domain, that it enforces mechanical requirements such as:

no silent promotion
typed witness
receipt exists
receipt hash matches
executed flag
runtime identity
conditional claim has conditions
OPEN has open findings
FALSIFIED->TESTED preserves prefix witness
derived counts agree

and its eleven mutations prove the checker can say FAIL.

That is excellent executable evidence.

But the broad claim also contains:

the control reaches the intended subject and discriminates the forbidden state.

The kit itself admits it cannot generically decide the semantic CONTENT of a receipt or what "reaches the intended subject" means.

Therefore:

FAC-CONTROL-SENSITIVITY:
    DECLARED
    strongly supported / executable implementation binding exists

not:
    PROVED

A narrower claim could be PROVED

The factory could separately mint something like:

FAC-EVIDENCE-TRANSITION-SCHEMA-CLOSED

whose domain is exactly the structural rules A/C/D/E/F/G plus typed/hash-bound B metadata.

That narrower property is much closer to PROVED / exhaustive-in-declared-domain.

Then FAC-CONTROL-SENSITIVITY remains the semantic factory rule that says what the receipts must actually mean.

9. E-51 / E-50a — "unresolved or satisfied" needs one refinement

The model found an important correction:

blocking UNKNOWN only is insufficient

because a same-key replay after an already-COMMITTED intent is also a second effect by construction on a naive far side.

So this statement is correct:

a claim whose stable intent key is unresolved OR already satisfied is not a freely claimable fresh attempt.

But I would not use the same override for both states.

Unresolved intent

For:

UNKNOWN / indeterminate completion

the S5 rule applies:

refuse ordinary replay
OR
require REPLAY_RISK_AUTHORIZED

because the operator is explicitly accepting the possibility that the prior attempt already landed.

Already satisfied intent

For:

COMMITTED
SUPERSEDED because another attempt satisfied the intent

the same intent is already done.

The normal behavior should be:

do not execute another effect under the same intent key
return / derive the existing satisfaction

REPLAY_RISK_AUTHORIZED should not normally turn a satisfied intent into a license to repeat it.

If the user actually wants another physical effect, that is a new intent, even if it is semantically related to the previous one:

new effect_key / intent_id
repeat_of = old_intent
fresh approval / authority

If the product wants a special "knowingly repeat the same satisfied action" operation, give it a different concept such as:

REPEAT_INTENT_AUTHORIZED

rather than overloading uncertainty replay.

Correct E-50a trigger

Therefore:

key has UNKNOWN:
    blocked unless REPLAY_RISK_AUTHORIZED

key is SATISFIED:
    blocked as already satisfied;
    a new physical effect requires a new intent identity

key attempts all FAILED-ABSENT:
    retry/new attempt under same intent is admissible

This is cleaner than one override for both uncertainty and known completion.

10. Strict reconciler on an unkeyed far side — ACCEPT

Yes.

If the far side provides no stable effect identity, a lookup that does not find a keyed record cannot prove:

the effect did not happen

Therefore:

UNKNOWN stays UNKNOWN

is the honest reconciliation result.

Progress then requires explicit duplicate-risk authority.

That is exactly S5:

absence of evidence
!=
evidence of non-completion

The strict reconciler is the correct default for an unkeyed/unanalyzable far side.

11. E-50b — ACCEPT the identity split

The model's separation is correct:

INTENT
ATTEMPT
RISK AUTHORIZATION
ATTEMPT TERMINAL
INTENT SATISFACTION

SUPERSEDED is a useful attempt-level terminal relation:

this attempt did not land
another attempt of this intent did

It must not be confused with the intent's outcome itself.

A far-side record should name:

intent/effect key
attempt id
effect id / result

and reconciliation attributes the result to the actual attempt.

This is a good Super/ampd handoff.

12. L1 offer/attach refinement — ACCEPT, but one third system property is implicit

The v2.6 split is a real improvement:

ENV-SUCCESSOR:
    a valid willing successor is offered

SYS-ATTACH-FAIRNESS:
    a continuously enabled valid attach is eventually processed

The finite witness correctly shows neither alone is enough.

However, the model makes attach enabled automatically whenever:

holder == none
and
offered != none

That hides one real-system obligation.

In the actual architecture, an offered successor may still need:

authority
grant / capability
policy permission
generation/finality proof
resource compatibility
world/locus admission

before attach becomes enabled.

So the real contract should distinguish:

ENV-SUCCESSOR-AVAILABILITY
    an eligible/willing candidate exists and is offered

SYS-SUCCESSOR-ENABLEMENT
    after valid finality + a valid offer, the system establishes or recognizes
    the authority/policy state that makes at least one successor attachment
    admissible

SYS-ATTACH-FAIRNESS
    once that admissible attach remains enabled, the scheduler/control plane
    does not postpone it forever

If the phrase "valid offer" is defined to include every system-owned authority precondition, the third item is hidden inside the environment assumption, which is the wrong ownership boundary.

I recommend making SYS-SUCCESSOR-ENABLEMENT explicit in the next temporal model.

It is not necessarily another irreducible L-law; it may be a mechanism obligation required to discharge L1 under the continue-service policy.

13. E-43 A-IDEMPOTENT — useful, with a boundary warning

The measured refinement is sensible:

same scope source digest:
    semantic no-op

changed source digest:
    world transition

But the adapter currently keeps the source digest outside the World.

A native implementation must make:

compare source digest
+
decide no-op/change
+
mutate registry/version/log

one protected semantic operation.

Otherwise the no-op optimization can introduce a TOCTOU hole between the external digest check and the World mutation.

This belongs in the TRVM governance decision.

14. E-42 L-ANCESTRY — useful, but governance still owns fork semantics

The experiment shows why both coordinates matter:

world / birth identity
+
history position / ancestry

A pre-fork warrant can be portable to a descendant if the architecture deliberately says:

fork creates a descendant world identity with explicit ancestry

while twins/copies outside fork() remain unrelated.

That is coherent.

But whether a warrant SHOULD cross a fork remains a semantic policy choice.

The TRVM lane should choose first:

fork = new independent world
or
fork = descendant world with inherited ancestry

Then warrant portability follows from that choice.

The R10-pre lane was right not to promote the law itself.

15. Current frontier after v4 adjudication

Safety / semantic integrity

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
    exact successor authorization/provenance

    F35 exact attack CLOSED
    NC29 authorization/root crash cut UNTESTED

S4  Semantic observability
    E-42/E-43 remain red
    better candidate contracts now measured

S5  External-effect honesty
    TESTED under first real-adapter profile
    E-50a/E-50b remain red for Super

Liveness

L1? Recoverable resolution / succession

L1-PRE:
    resolution path exists

L1-closed:
    eventual closure/terminalization under WF(finality)

L1-service-succession:
    conditional on:
        ENV-SUCCESSOR-AVAILABILITY
        SYS-SUCCESSOR-ENABLEMENT   (make explicit next)
        SYS-ATTACH-FAIRNESS

Factory epistemics

FAC-CONTROL-SENSITIVITY:
    DECLARED candidate
    strong executable support
    not yet PROVED because semantic subject-reach/content remains adjudicative

narrow structural evidence-state validator:
    candidate for a stronger PROVED classification

16. What to do next

A. package-v2.7 evidence-state patch

No theory.

Apply this adjudication:

F35 CLOSED
E-13b includes CLOSED-F35
R0.8 remains OPEN only for NC29 + explicit profile boundaries
E-50a distinguishes UNKNOWN replay authorization from already-satisfied intent
L1 names SYS-SUCCESSOR-ENABLEMENT

B. NC29

This is now the highest-value small ComputeDriven experiment.

Instrument:

after anchor pending-successor persist
before root pending persist

and separately:

anchor persist succeeds
root persist returns error

Preserve the failing witness if one exists before changing machinery.

C. If NC29 is clean, consider freezing R0.8 under its explicit profile

Do not make power-loss durability part of the freeze accidentally.

Freeze exactly what was tested.

D. Super/ampd lane

Take E-50a/E-50b.

Use:

UNKNOWN:
    REPLAY_RISK_AUTHORIZED may permit another attempt

SATISFIED:
    same intent is done;
    another physical effect gets a new intent identity

SUPERSEDED:
    attempt-level relation, not intent outcome

E. TRVM lane

Adjudicate:

E-43 A-IDEMPOTENT atomically inside the World boundary

E-42 world identity + ancestry/history position

F. Factory lane

Run the actual promotion round.

My recommendation:

FAC-CONTROL-SENSITIVITY = DECLARED

station requires evidence-state projection at every evidence promotion /
closure / freeze boundary, not every ordinary commit

Consider a narrower structural validator claim for PROVED.

G. L1

Add SYS-SUCCESSOR-ENABLEMENT to the temporal model before making production liveness machinery depend on the three-way contract.

H. EMB-E1

Still operator-gated.

No spend authorization is implied by this adjudication.

17. Final ruling

v4 is another strong execution return.

Most important changes in knowledge:

  1. F35's exact foreign-successor attack is CLOSED.

  2. The anchor now authorizes identity, not merely freshness/order.

  3. Trust-anchor movement occurs only after semantic candidate validation.

  4. The new repair exposes one untested micro crash cut; this is an evidence

gap, not yet a new defect.

  1. The L1 environment/system split is correct, and it exposes a third

real-system obligation: successor enablement.

  1. E-51's key-state result is directionally right, but uncertainty replay and

already-satisfied repetition should not share one override.

  1. An unkeyed far side must preserve UNKNOWN; absence cannot be inferred.

  2. The factory validator is strong executable machinery, but the broad

FAC-CONTROL-SENSITIVITY semantic claim should remain DECLARED until "subject reach" is itself formalized.

  1. package-v2.6 is structurally accepted, but this adjudication necessarily

creates the need for package-v2.7 because F35 is no longer OPEN-UNADJUDICATED.

GO to the codebase / governance lanes.

Do not return to a broad Fable invariant-search round yet.

Next loop:

v2.7 evidence patch
-> NC29
-> Super E-50
-> TRVM E-42/E-43 governance
-> factory promotion round
-> GPT adjudication

Open in the interactive atlas