From 7dadcc19db927eea654da4b9e9d10928ca68801e Mon Sep 17 00:00:00 2001 From: EHotwagner Date: Fri, 2 Oct 2026 11:04:25 +0200 Subject: [PATCH 01/12] Settle complete growing log records before policy evaluation --- .../RuntimeEvidence/CodecTests.fs | 6 ++ .../RuntimeEvidence/CorrespondenceTests.fs | 79 ++++++++++++++++++- .../RuntimeEvidence/FailureDiagnostic.fs | 1 + ...ence.closeRevokesCurrentAuthority.itf.json | 2 +- ...idence.completeRecordWaitDeadline.itf.json | 1 + ...dence.completeRecordWaitExhausted.itf.json | 1 + ...nce.completeRecordWaitThenConsume.itf.json | 1 + .../GrowingLogEvidence.healthy.itf.json | 2 +- ...vidence.pendingTailHasNoAuthority.itf.json | 2 +- ...dence.pendingThenCompleteResample.itf.json | 1 + ...idence.policyClosureDriftIsSticky.itf.json | 2 +- .../RuntimeEvidence/GrowingLogEvidence.qnt | 52 +++++++++++- ...idence.staleBoundaryCannotConsume.itf.json | 2 +- ...erConsumptionPreservesHistoryOnly.itf.json | 2 +- ...ValidationRevokesCurrentAuthority.itf.json | 2 +- ...AfterConsumptionHasNoNewAuthority.itf.json | 1 + .../GrowingLogEvidence_test.qnt | 21 +++++ .../RuntimeEvidence/README.md | 6 ++ .../tests/check-runtime-evidence.sh | 7 +- 19 files changed, 179 insertions(+), 12 deletions(-) create mode 100644 tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.completeRecordWaitDeadline.itf.json create mode 100644 tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.completeRecordWaitExhausted.itf.json create mode 100644 tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.completeRecordWaitThenConsume.itf.json create mode 100644 tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.pendingThenCompleteResample.itf.json create mode 100644 tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.waitAfterConsumptionHasNoNewAuthority.itf.json diff --git a/tests/Broker.NativeProof/RuntimeEvidence/CodecTests.fs b/tests/Broker.NativeProof/RuntimeEvidence/CodecTests.fs index f7505a1..a3396f7 100644 --- a/tests/Broker.NativeProof/RuntimeEvidence/CodecTests.fs +++ b/tests/Broker.NativeProof/RuntimeEvidence/CodecTests.fs @@ -106,6 +106,12 @@ module CodecTests = let finalDiagnostic=diagnostic.Replace(observation,finalObservation).Replace(observationHash,sha(bytes(finalObservation+"\n"))).Replace(operationBase64,Convert.ToBase64String(bytes refusedOperation)).Replace(operationHash,sha(bytes refusedOperation)) let projected=evaluate finalDiagnostic|>Codec.complete if not(projected.Contains("\"status\":\"observed-failure\"") && projected.Contains($"\"check\":\"{check}\"") && projected.Contains("\"nativeAcceptance\":false")) then failwithf "final custody check refused: %s" check + for check,outcome,category in [ "infolog-record-settlement-exhausted","refused","refused"; "infolog-record-settlement-deadline","deadline","operation-unknown" ] do + let settlementObservation=observation.Replace("\"check\":\"policy-result-join\"",$"\"check\":\"{check}\"").Replace("\"outcome\":\"policy-nonaccepted\"",$"\"outcome\":\"{outcome}\"").Replace("\"policyObservation\":"+policyObservation,"\"policyObservation\":null") + let settlementOperation=$"{{\"schema\":\"fsbar.barc-stock-operation-result/v1\",\"status\":\"failed\",\"category\":\"{category}\"}}\n" + let settlementDiagnostic=diagnostic.Replace(observation,settlementObservation).Replace(observationHash,sha(bytes(settlementObservation+"\n"))).Replace(operationBase64,Convert.ToBase64String(bytes settlementOperation)).Replace(operationHash,sha(bytes settlementOperation)) + let projected=evaluate settlementDiagnostic|>Codec.complete + if not(projected.Contains("\"status\":\"observed-failure\"") && projected.Contains($"\"check\":\"{check}\"") && projected.Contains("\"policyObservation\":null") && projected.Contains("\"nativeAcceptance\":false")) then failwithf "settlement diagnostic refused: %s" check let rawLeak=mechanicalDiagnostic.Replace("\"check\":\"infolog-final-refresh\"","\"check\":\"PRIVATE_SENTINEL\"") if (evaluate rawLeak|>Codec.complete).Contains("PRIVATE_SENTINEL") then failwith "unrecognized diagnostic detail escaped" let oversized=diagnostic+String(' ',8193) diff --git a/tests/Broker.NativeProof/RuntimeEvidence/CorrespondenceTests.fs b/tests/Broker.NativeProof/RuntimeEvidence/CorrespondenceTests.fs index 82dba99..70465e5 100644 --- a/tests/Broker.NativeProof/RuntimeEvidence/CorrespondenceTests.fs +++ b/tests/Broker.NativeProof/RuntimeEvidence/CorrespondenceTests.fs @@ -4,6 +4,7 @@ open System open System.IO open System.Security.Cryptography open System.Text +open System.Text.Json open FsQuint open FSBar.NativeProof.RuntimeEvidence @@ -20,11 +21,13 @@ module CorrespondenceTests = |> Array.map (fun root -> Path.Combine(root,name)) |> Array.find File.Exists |> Path.GetFullPath let private source={Path="GrowingLogEvidence_test.qnt";Line=1;Column=1} let private boundaryText = function Some BrowserAdmission->"browser"|Some Normalization->"normalization"|Some Release->"release"|None->"none" - let private state rootsValid prefixIntact writerPresent (value: EvidenceState) = + let private stateWithSettlement settlementPhase settlementRemaining deadlineAvailable rootsValid prefixIntact writerPresent (value: EvidenceState) = let present=value.Identity.IsSome - let record=Record ["phase",Text value.Phase;"generation",Integer(if present then "1" else "0");"observedRevision",Integer(string value.ObservedRevision);"validatedRevision",Integer(string value.ValidatedRevision);"intendedBoundary",Text(boundaryText value.ValidatedBoundary);"consumedRevision",Integer(string value.ConsumedRevision);"consumedBoundary",Text(boundaryText value.ConsumedBoundary);"producerMatches",Boolean present;"logMatches",Boolean present;"sourceMatches",Boolean present;"rootsValid",Boolean rootsValid;"prefixIntact",Boolean prefixIntact;"writerPresent",Boolean writerPresent;"authorityActive",Boolean(value.Phase="validated" && not value.StickyInvalid);"stickyInvalid",Boolean value.StickyInvalid;"policyPhase",Text policyPhase;"policyInvocation",Text policyInvocation;"policyClosure",Text policyClosure] + let settlement=Record ["phase",Text settlementPhase;"remaining",Integer(string settlementRemaining);"deadlineAvailable",Boolean deadlineAvailable] + let record=Record ["phase",Text value.Phase;"generation",Integer(if present then "1" else "0");"observedRevision",Integer(string value.ObservedRevision);"validatedRevision",Integer(string value.ValidatedRevision);"intendedBoundary",Text(boundaryText value.ValidatedBoundary);"consumedRevision",Integer(string value.ConsumedRevision);"consumedBoundary",Text(boundaryText value.ConsumedBoundary);"producerMatches",Boolean present;"logMatches",Boolean present;"sourceMatches",Boolean present;"rootsValid",Boolean rootsValid;"prefixIntact",Boolean prefixIntact;"writerPresent",Boolean writerPresent;"authorityActive",Boolean(value.Phase="validated" && not value.StickyInvalid);"stickyInvalid",Boolean value.StickyInvalid;"policyPhase",Text policyPhase;"policyInvocation",Text policyInvocation;"policyClosure",Text policyClosure;"settlement",settlement] let draft={Identity="";Bindings=["evidence",record]} {draft with Identity=QuintReplay.stateFingerprint draft |> unwrap} + let private state rootsValid prefixIntact writerPresent value = stateWithSettlement "idle" 32 true rootsValid prefixIntact writerPresent value let private accepted = function Accepted value -> value | other -> failwithf "%A" other let private transitioned = function Accepted value|Pending value|Refused value|Unknown value -> value let private compareTrace baseDirectory environment name actions projected = @@ -33,6 +36,18 @@ module CorrespondenceTests = let observations=projected|>List.mapi(fun index actual->{Index=index+1;Action=actions[index];Source=source;Actual=actual}) match QuintReplay.compare trace observations |> unwrap with QuintReplayResult.Equivalent -> trace,observations | other -> failwithf "%s reducer/model divergence: %A" name other let run baseDirectory = + match Environment.GetEnvironmentVariable("BAR_SETTLEMENT_TRANSCRIPT") with + | null | "" -> () + | path -> + use document=JsonDocument.Parse(File.ReadAllBytes path) + let rows=document.RootElement.EnumerateArray()|>Seq.toArray + if rows.Length<>2 then failwith "actual settlement transcript length" + let read index event probe remaining = + let row=rows[index] + let names=row.EnumerateObject()|>Seq.map _.Name|>Set.ofSeq + if names<>set ["event";"probe";"remaining"] || row.GetProperty("event").GetString()<>event || row.GetProperty("probe").GetInt32()<>probe || row.GetProperty("remaining").GetInt32()<>remaining then failwith "actual settlement transcript mismatch" + read 0 "incomplete" 1 31 + read 1 "complete" 2 30 policyPhase<-"none";policyInvocation<-"none";policyClosure<-"none" let tool=locate "quint" let environment={Seed="424242";Bounds=["revisions",3L;"generations",2L];ToolFingerprint=hashFile tool;ProfileFingerprint=hashJoined [Path.Combine(baseDirectory,"GrowingLogEvidence.qnt");Path.Combine(baseDirectory,"GrowingLogEvidence_test.qnt")];ContractFingerprint=hashFile(Path.Combine(baseDirectory,"Codec.fs"));AdapterFingerprint=hashFile(Path.Combine(baseDirectory,"DataRootPolicy.fs"));ImplementationFingerprint=hashJoined [Path.Combine(baseDirectory,"GrowingLogEvidence.fs");typeof.Assembly.Location]} @@ -145,3 +160,63 @@ module CorrespondenceTests = let stale=GrowingLogEvidence.consume Normalization v |> transitioned sequence "staleBoundaryCannotConsume" ["acquire";"sampleInitial";"validate:browser";"staleBoundary"] [state false false true a;state true true true s;state true true true v;state true true true stale] sequence "closeRevokesCurrentAuthority" ["acquire";"sampleInitial";"validate:browser";"close"] [state false false true a;state true true true s;state true true true v;state true true true (GrowingLogEvidence.close v)] + + // Settlement steps are mechanical: replay them against the exact same + // production reducer state. Only the complete candidate is submitted + // to GrowingLogEvidence.sample and advances its revision. + policyPhase<-"none";policyInvocation<-"none";policyClosure<-"none" + let waitStates=ResizeArray() + waitStates.Add(state false false true a) + waitStates.Add(stateWithSettlement "probing" 32 true false false true a) + waitStates.Add(stateWithSettlement "probing" 31 true false false true a) + waitStates.Add(stateWithSettlement "candidate" 30 true false false true a) + waitStates.Add(stateWithSettlement "candidate" 30 true true true true s) + let waitGuard=PolicyComposition.start guardId + policyPhase<-waitGuard.State.Phase;policyInvocation<-guardId.InvocationId;policyClosure<-guardId.ClosureSha256 + waitStates.Add(stateWithSettlement "candidate" 30 true true true true s) + let waitReady=PolicyComposition.ready guardId waitGuard + policyPhase<-waitReady.State.Phase;waitStates.Add(stateWithSettlement "candidate" 30 true true true true s) + let waitValidated=GrowingLogEvidence.validate BrowserAdmission s|>accepted + waitStates.Add(stateWithSettlement "candidate" 30 true true true true waitValidated) + let waitEvaluated=PolicyComposition.evaluated guardId waitReady + policyPhase<-waitEvaluated.State.Phase;waitStates.Add(stateWithSettlement "candidate" 30 true true true true waitValidated) + let waitCompleted=match PolicyComposition.finishGuard guardId true waitEvaluated with Choice1Of2 value->value|Choice2Of2 value->failwithf "%A" value + policyPhase<-waitCompleted.State.Phase;waitStates.Add(stateWithSettlement "candidate" 30 true true true true waitValidated) + let waitConsumed=GrowingLogEvidence.consume BrowserAdmission waitValidated|>accepted + waitStates.Add(stateWithSettlement "candidate" 30 true true true true waitConsumed) + sequence "completeRecordWaitThenConsume" ["acquire";"beginSettlement";"incompleteRecordProbe";"completeRecordCandidate";"sampleInitial";"beginPolicy:invocation";"readyPolicy:invocation";"validate:browser";"evaluatedPolicy:invocation";"completePolicy:invocation";"consume:browser"] (List.ofSeq waitStates) + + policyPhase<-"none";policyInvocation<-"none";policyClosure<-"none" + let exhaustedStates=ResizeArray() + exhaustedStates.Add(state false false true a) + exhaustedStates.Add(stateWithSettlement "probing" 32 true false false true a) + for remaining in 31..-1..0 do exhaustedStates.Add(stateWithSettlement "probing" remaining true false false true a) + exhaustedStates.Add(stateWithSettlement "refused" 0 true false false true a) + sequence "completeRecordWaitExhausted" (["acquire";"beginSettlement"] @ List.replicate 32 "incompleteRecordProbe" @ ["recordSettlementExhausted"]) (List.ofSeq exhaustedStates) + sequence "completeRecordWaitDeadline" ["acquire";"beginSettlement";"incompleteRecordProbe";"recordSettlementDeadline"] [state false false true a;stateWithSettlement "probing" 32 true false false true a;stateWithSettlement "probing" 31 true false false true a;stateWithSettlement "deadline" 31 false false false true a] + + let afterConsumeStates=ResizeArray() + afterConsumeStates.Add(state false false true a) + afterConsumeStates.Add(stateWithSettlement "probing" 32 true false false true a) + afterConsumeStates.Add(stateWithSettlement "candidate" 31 true false false true a) + afterConsumeStates.Add(stateWithSettlement "candidate" 31 true true true true s) + let afterGuard=PolicyComposition.start guardId + policyPhase<-afterGuard.State.Phase;policyInvocation<-guardId.InvocationId;policyClosure<-guardId.ClosureSha256 + afterConsumeStates.Add(stateWithSettlement "candidate" 31 true true true true s) + let afterReady=PolicyComposition.ready guardId afterGuard + policyPhase<-afterReady.State.Phase;afterConsumeStates.Add(stateWithSettlement "candidate" 31 true true true true s) + let afterValidated=GrowingLogEvidence.validate BrowserAdmission s|>accepted + afterConsumeStates.Add(stateWithSettlement "candidate" 31 true true true true afterValidated) + let afterEvaluated=PolicyComposition.evaluated guardId afterReady + policyPhase<-afterEvaluated.State.Phase;afterConsumeStates.Add(stateWithSettlement "candidate" 31 true true true true afterValidated) + let afterCompleted=match PolicyComposition.finishGuard guardId true afterEvaluated with Choice1Of2 value->value|Choice2Of2 value->failwithf "%A" value + policyPhase<-afterCompleted.State.Phase;afterConsumeStates.Add(stateWithSettlement "candidate" 31 true true true true afterValidated) + let afterConsumed=GrowingLogEvidence.consume BrowserAdmission afterValidated|>accepted + afterConsumeStates.Add(stateWithSettlement "candidate" 31 true true true true afterConsumed) + afterConsumeStates.Add(stateWithSettlement "probing" 32 true true true true afterConsumed) + afterConsumeStates.Add(stateWithSettlement "probing" 31 true true true true afterConsumed) + sequence "waitAfterConsumptionHasNoNewAuthority" ["acquire";"beginSettlement";"completeRecordCandidate";"sampleInitial";"beginPolicy:invocation";"readyPolicy:invocation";"validate:browser";"evaluatedPolicy:invocation";"completePolicy:invocation";"consume:browser";"beginSettlement";"incompleteRecordProbe"] (List.ofSeq afterConsumeStates) + + policyPhase<-"none";policyInvocation<-"none";policyClosure<-"none" + let completedPending=GrowingLogEvidence.sample (observe 2 120L (String('d',64)) true true true true) pending|>accepted + sequence "pendingThenCompleteResample" ["acquire";"pendingTail";"beginSettlement";"incompleteRecordProbe";"completeRecordCandidate";"pendingCompleteResample"] [state false false true a;state false true true pending;stateWithSettlement "probing" 32 true false true true pending;stateWithSettlement "probing" 31 true false true true pending;stateWithSettlement "candidate" 30 true false true true pending;stateWithSettlement "candidate" 30 true true true true completedPending] diff --git a/tests/Broker.NativeProof/RuntimeEvidence/FailureDiagnostic.fs b/tests/Broker.NativeProof/RuntimeEvidence/FailureDiagnostic.fs index 92a63b8..fdf6e43 100644 --- a/tests/Broker.NativeProof/RuntimeEvidence/FailureDiagnostic.fs +++ b/tests/Broker.NativeProof/RuntimeEvidence/FailureDiagnostic.fs @@ -33,6 +33,7 @@ module FailureDiagnostic = "infolog-final-descriptor-identity"; "infolog-final-file-custody" "infolog-final-size-cap"; "infolog-final-size-regression" "infolog-final-prefix-read"; "infolog-final-prefix-drift" + "infolog-record-settlement-exhausted"; "infolog-record-settlement-deadline" "policy-sample-exhausted"; "browser-start" ] let outcomes = Set [ "refused"; "os-unavailable"; "deadline"; "malformed"; "unexpected"; "policy-nonaccepted" ] let policyCheckpoints = Set [ "initial-closure"; "current-process"; "invocation-ready"; "request-read"; "request-evaluation"; "final-closure"; "invocation-completion" ] diff --git a/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.closeRevokesCurrentAuthority.itf.json b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.closeRevokesCurrentAuthority.itf.json index fcf42d9..a8b128c 100644 --- a/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.closeRevokesCurrentAuthority.itf.json +++ b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.closeRevokesCurrentAuthority.itf.json @@ -1 +1 @@ -{"#meta":{"format":"ITF","format-description":"https://apalache-mc.org/docs/adr/015adr-trace.html","source":"GrowingLogEvidence_test.qnt","status":"ok"},"states":[{"#meta":{"index":0},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":false,"rootsValid":false,"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":1},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":2},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":true,"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":3},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":true,"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":4},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"closed","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":true,"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}}],"vars":["evidence"]} +{"#meta":{"format":"ITF","format-description":"https://apalache-mc.org/docs/adr/015adr-trace.html","source":"GrowingLogEvidence_test.qnt","status":"ok"},"states":[{"#meta":{"index":0},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":false,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":1},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":2},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":3},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":4},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"closed","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}}],"vars":["evidence"]} diff --git a/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.completeRecordWaitDeadline.itf.json b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.completeRecordWaitDeadline.itf.json new file mode 100644 index 0000000..f44521b --- /dev/null +++ b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.completeRecordWaitDeadline.itf.json @@ -0,0 +1 @@ +{"#meta":{"format":"ITF","format-description":"https://apalache-mc.org/docs/adr/015adr-trace.html","source":"GrowingLogEvidence_test.qnt","status":"ok"},"states":[{"#meta":{"index":0},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":false,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":1},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":2},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":3},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"31"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":4},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":false,"phase":"deadline","remaining":{"#bigint":"31"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}}],"vars":["evidence"]} diff --git a/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.completeRecordWaitExhausted.itf.json b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.completeRecordWaitExhausted.itf.json new file mode 100644 index 0000000..0cede1f --- /dev/null +++ b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.completeRecordWaitExhausted.itf.json @@ -0,0 +1 @@ +{"#meta":{"format":"ITF","format-description":"https://apalache-mc.org/docs/adr/015adr-trace.html","source":"GrowingLogEvidence_test.qnt","status":"ok"},"states":[{"#meta":{"index":0},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":false,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":1},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":2},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":3},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"31"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":4},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"30"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":5},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"29"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":6},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"28"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":7},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"27"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":8},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"26"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":9},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"25"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":10},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"24"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":11},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"23"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":12},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"22"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":13},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"21"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":14},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"20"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":15},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"19"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":16},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"18"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":17},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"17"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":18},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"16"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":19},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"15"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":20},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"14"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":21},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"13"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":22},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"12"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":23},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"11"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":24},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"10"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":25},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"9"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":26},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"8"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":27},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"7"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":28},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"6"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":29},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"5"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":30},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"4"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":31},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"3"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":32},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"2"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":33},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"1"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":34},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"0"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":35},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"refused","remaining":{"#bigint":"0"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}}],"vars":["evidence"]} diff --git a/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.completeRecordWaitThenConsume.itf.json b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.completeRecordWaitThenConsume.itf.json new file mode 100644 index 0000000..5bfe0fe --- /dev/null +++ b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.completeRecordWaitThenConsume.itf.json @@ -0,0 +1 @@ +{"#meta":{"format":"ITF","format-description":"https://apalache-mc.org/docs/adr/015adr-trace.html","source":"GrowingLogEvidence_test.qnt","status":"ok"},"states":[{"#meta":{"index":0},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":false,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":1},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":2},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":3},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"31"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":4},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"30"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":5},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"30"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":6},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"started","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"30"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":7},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"ready","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"30"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":8},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"ready","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"30"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":9},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"evaluated","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"30"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":10},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"30"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":11},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"30"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}}],"vars":["evidence"]} diff --git a/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.healthy.itf.json b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.healthy.itf.json index d80d13b..0daed3c 100644 --- a/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.healthy.itf.json +++ b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.healthy.itf.json @@ -1 +1 @@ -{"#meta":{"format":"ITF","format-description":"https://apalache-mc.org/docs/adr/015adr-trace.html","source":"GrowingLogEvidence_test.qnt","status":"ok"},"states":[{"#meta":{"index":0},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":false,"rootsValid":false,"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":1},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation1","policyPhase":"started","prefixIntact":false,"producerMatches":false,"rootsValid":false,"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":2},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation1","policyPhase":"ready","prefixIntact":false,"producerMatches":false,"rootsValid":false,"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":3},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation1","policyPhase":"ready","prefixIntact":false,"producerMatches":true,"rootsValid":false,"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":4},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation1","policyPhase":"ready","prefixIntact":true,"producerMatches":true,"rootsValid":true,"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":5},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation1","policyPhase":"ready","prefixIntact":true,"producerMatches":true,"rootsValid":true,"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":6},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation1","policyPhase":"evaluated","prefixIntact":true,"producerMatches":true,"rootsValid":true,"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":7},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation1","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":8},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation1","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":9},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"2"},"phase":"sampled","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":true,"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":10},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"2"},"phase":"sampled","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation2","policyPhase":"started","prefixIntact":true,"producerMatches":true,"rootsValid":true,"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":11},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"2"},"phase":"sampled","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation2","policyPhase":"ready","prefixIntact":true,"producerMatches":true,"rootsValid":true,"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":12},"evidence":{"authorityActive":true,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"normalization","logMatches":true,"observedRevision":{"#bigint":"2"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation2","policyPhase":"ready","prefixIntact":true,"producerMatches":true,"rootsValid":true,"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"2"},"writerPresent":true}},{"#meta":{"index":13},"evidence":{"authorityActive":true,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"normalization","logMatches":true,"observedRevision":{"#bigint":"2"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation2","policyPhase":"evaluated","prefixIntact":true,"producerMatches":true,"rootsValid":true,"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"2"},"writerPresent":true}},{"#meta":{"index":14},"evidence":{"authorityActive":true,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"normalization","logMatches":true,"observedRevision":{"#bigint":"2"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation2","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"2"},"writerPresent":true}},{"#meta":{"index":15},"evidence":{"authorityActive":false,"consumedBoundary":"normalization","consumedRevision":{"#bigint":"2"},"generation":{"#bigint":"1"},"intendedBoundary":"normalization","logMatches":true,"observedRevision":{"#bigint":"2"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation2","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"2"},"writerPresent":true}},{"#meta":{"index":16},"evidence":{"authorityActive":false,"consumedBoundary":"normalization","consumedRevision":{"#bigint":"2"},"generation":{"#bigint":"1"},"intendedBoundary":"normalization","logMatches":true,"observedRevision":{"#bigint":"3"},"phase":"sampled","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":true,"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"2"},"writerPresent":true}},{"#meta":{"index":17},"evidence":{"authorityActive":false,"consumedBoundary":"normalization","consumedRevision":{"#bigint":"2"},"generation":{"#bigint":"1"},"intendedBoundary":"normalization","logMatches":true,"observedRevision":{"#bigint":"3"},"phase":"sampled","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation3","policyPhase":"started","prefixIntact":true,"producerMatches":true,"rootsValid":true,"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"2"},"writerPresent":true}},{"#meta":{"index":18},"evidence":{"authorityActive":false,"consumedBoundary":"normalization","consumedRevision":{"#bigint":"2"},"generation":{"#bigint":"1"},"intendedBoundary":"normalization","logMatches":true,"observedRevision":{"#bigint":"3"},"phase":"sampled","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation3","policyPhase":"ready","prefixIntact":true,"producerMatches":true,"rootsValid":true,"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"2"},"writerPresent":true}},{"#meta":{"index":19},"evidence":{"authorityActive":true,"consumedBoundary":"normalization","consumedRevision":{"#bigint":"2"},"generation":{"#bigint":"1"},"intendedBoundary":"release","logMatches":true,"observedRevision":{"#bigint":"3"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation3","policyPhase":"ready","prefixIntact":true,"producerMatches":true,"rootsValid":true,"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"3"},"writerPresent":true}},{"#meta":{"index":20},"evidence":{"authorityActive":true,"consumedBoundary":"normalization","consumedRevision":{"#bigint":"2"},"generation":{"#bigint":"1"},"intendedBoundary":"release","logMatches":true,"observedRevision":{"#bigint":"3"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation3","policyPhase":"evaluated","prefixIntact":true,"producerMatches":true,"rootsValid":true,"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"3"},"writerPresent":true}},{"#meta":{"index":21},"evidence":{"authorityActive":true,"consumedBoundary":"normalization","consumedRevision":{"#bigint":"2"},"generation":{"#bigint":"1"},"intendedBoundary":"release","logMatches":true,"observedRevision":{"#bigint":"3"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation3","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"3"},"writerPresent":true}},{"#meta":{"index":22},"evidence":{"authorityActive":false,"consumedBoundary":"release","consumedRevision":{"#bigint":"3"},"generation":{"#bigint":"1"},"intendedBoundary":"release","logMatches":true,"observedRevision":{"#bigint":"3"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation3","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"3"},"writerPresent":true}}],"vars":["evidence"]} +{"#meta":{"format":"ITF","format-description":"https://apalache-mc.org/docs/adr/015adr-trace.html","source":"GrowingLogEvidence_test.qnt","status":"ok"},"states":[{"#meta":{"index":0},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":false,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":1},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation1","policyPhase":"started","prefixIntact":false,"producerMatches":false,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":2},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation1","policyPhase":"ready","prefixIntact":false,"producerMatches":false,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":3},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation1","policyPhase":"ready","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":4},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation1","policyPhase":"ready","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":5},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation1","policyPhase":"ready","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":6},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation1","policyPhase":"evaluated","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":7},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation1","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":8},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation1","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":9},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"2"},"phase":"sampled","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":10},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"2"},"phase":"sampled","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation2","policyPhase":"started","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":11},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"2"},"phase":"sampled","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation2","policyPhase":"ready","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":12},"evidence":{"authorityActive":true,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"normalization","logMatches":true,"observedRevision":{"#bigint":"2"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation2","policyPhase":"ready","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"2"},"writerPresent":true}},{"#meta":{"index":13},"evidence":{"authorityActive":true,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"normalization","logMatches":true,"observedRevision":{"#bigint":"2"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation2","policyPhase":"evaluated","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"2"},"writerPresent":true}},{"#meta":{"index":14},"evidence":{"authorityActive":true,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"normalization","logMatches":true,"observedRevision":{"#bigint":"2"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation2","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"2"},"writerPresent":true}},{"#meta":{"index":15},"evidence":{"authorityActive":false,"consumedBoundary":"normalization","consumedRevision":{"#bigint":"2"},"generation":{"#bigint":"1"},"intendedBoundary":"normalization","logMatches":true,"observedRevision":{"#bigint":"2"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation2","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"2"},"writerPresent":true}},{"#meta":{"index":16},"evidence":{"authorityActive":false,"consumedBoundary":"normalization","consumedRevision":{"#bigint":"2"},"generation":{"#bigint":"1"},"intendedBoundary":"normalization","logMatches":true,"observedRevision":{"#bigint":"3"},"phase":"sampled","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"2"},"writerPresent":true}},{"#meta":{"index":17},"evidence":{"authorityActive":false,"consumedBoundary":"normalization","consumedRevision":{"#bigint":"2"},"generation":{"#bigint":"1"},"intendedBoundary":"normalization","logMatches":true,"observedRevision":{"#bigint":"3"},"phase":"sampled","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation3","policyPhase":"started","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"2"},"writerPresent":true}},{"#meta":{"index":18},"evidence":{"authorityActive":false,"consumedBoundary":"normalization","consumedRevision":{"#bigint":"2"},"generation":{"#bigint":"1"},"intendedBoundary":"normalization","logMatches":true,"observedRevision":{"#bigint":"3"},"phase":"sampled","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation3","policyPhase":"ready","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"2"},"writerPresent":true}},{"#meta":{"index":19},"evidence":{"authorityActive":true,"consumedBoundary":"normalization","consumedRevision":{"#bigint":"2"},"generation":{"#bigint":"1"},"intendedBoundary":"release","logMatches":true,"observedRevision":{"#bigint":"3"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation3","policyPhase":"ready","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"3"},"writerPresent":true}},{"#meta":{"index":20},"evidence":{"authorityActive":true,"consumedBoundary":"normalization","consumedRevision":{"#bigint":"2"},"generation":{"#bigint":"1"},"intendedBoundary":"release","logMatches":true,"observedRevision":{"#bigint":"3"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation3","policyPhase":"evaluated","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"3"},"writerPresent":true}},{"#meta":{"index":21},"evidence":{"authorityActive":true,"consumedBoundary":"normalization","consumedRevision":{"#bigint":"2"},"generation":{"#bigint":"1"},"intendedBoundary":"release","logMatches":true,"observedRevision":{"#bigint":"3"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation3","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"3"},"writerPresent":true}},{"#meta":{"index":22},"evidence":{"authorityActive":false,"consumedBoundary":"release","consumedRevision":{"#bigint":"3"},"generation":{"#bigint":"1"},"intendedBoundary":"release","logMatches":true,"observedRevision":{"#bigint":"3"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation3","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"3"},"writerPresent":true}}],"vars":["evidence"]} diff --git a/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.pendingTailHasNoAuthority.itf.json b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.pendingTailHasNoAuthority.itf.json index d2231be..9d23715 100644 --- a/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.pendingTailHasNoAuthority.itf.json +++ b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.pendingTailHasNoAuthority.itf.json @@ -1 +1 @@ -{"#meta":{"format":"ITF","format-description":"https://apalache-mc.org/docs/adr/015adr-trace.html","source":"GrowingLogEvidence_test.qnt","status":"ok"},"states":[{"#meta":{"index":0},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":false,"rootsValid":false,"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":1},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":2},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":false,"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":3},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"closed","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":false,"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}}],"vars":["evidence"]} +{"#meta":{"format":"ITF","format-description":"https://apalache-mc.org/docs/adr/015adr-trace.html","source":"GrowingLogEvidence_test.qnt","status":"ok"},"states":[{"#meta":{"index":0},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":false,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":1},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":2},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":3},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"closed","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}}],"vars":["evidence"]} diff --git a/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.pendingThenCompleteResample.itf.json b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.pendingThenCompleteResample.itf.json new file mode 100644 index 0000000..d30dce2 --- /dev/null +++ b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.pendingThenCompleteResample.itf.json @@ -0,0 +1 @@ +{"#meta":{"format":"ITF","format-description":"https://apalache-mc.org/docs/adr/015adr-trace.html","source":"GrowingLogEvidence_test.qnt","status":"ok"},"states":[{"#meta":{"index":0},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":false,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":1},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":2},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":3},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":4},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"31"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":5},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"30"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":6},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"2"},"phase":"sampled","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"30"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}}],"vars":["evidence"]} diff --git a/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.policyClosureDriftIsSticky.itf.json b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.policyClosureDriftIsSticky.itf.json index e2a53da..f0b3b85 100644 --- a/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.policyClosureDriftIsSticky.itf.json +++ b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.policyClosureDriftIsSticky.itf.json @@ -1 +1 @@ -{"#meta":{"format":"ITF","format-description":"https://apalache-mc.org/docs/adr/015adr-trace.html","source":"GrowingLogEvidence_test.qnt","status":"ok"},"states":[{"#meta":{"index":0},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":false,"rootsValid":false,"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":1},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"started","prefixIntact":false,"producerMatches":false,"rootsValid":false,"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":2},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"ready","prefixIntact":false,"producerMatches":false,"rootsValid":false,"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":3},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"ready","prefixIntact":false,"producerMatches":true,"rootsValid":false,"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":4},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"ready","prefixIntact":true,"producerMatches":true,"rootsValid":true,"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":5},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"ready","prefixIntact":true,"producerMatches":true,"rootsValid":true,"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":6},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"evaluated","prefixIntact":true,"producerMatches":true,"rootsValid":true,"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":7},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"invalid","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"invalid","prefixIntact":true,"producerMatches":true,"rootsValid":true,"sourceMatches":true,"stickyInvalid":true,"validatedRevision":{"#bigint":"1"},"writerPresent":true}}],"vars":["evidence"]} +{"#meta":{"format":"ITF","format-description":"https://apalache-mc.org/docs/adr/015adr-trace.html","source":"GrowingLogEvidence_test.qnt","status":"ok"},"states":[{"#meta":{"index":0},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":false,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":1},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"started","prefixIntact":false,"producerMatches":false,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":2},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"ready","prefixIntact":false,"producerMatches":false,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":3},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"ready","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":4},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"ready","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":5},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"ready","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":6},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"evaluated","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":7},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"invalid","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"invalid","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":true,"validatedRevision":{"#bigint":"1"},"writerPresent":true}}],"vars":["evidence"]} diff --git a/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.qnt b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.qnt index 0e6f203..9653f60 100644 --- a/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.qnt +++ b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.qnt @@ -1,4 +1,5 @@ module GrowingLogEvidence { + type Settlement = { phase: str, remaining: int, deadlineAvailable: bool } type Evidence = { phase: str, generation: int, @@ -18,6 +19,7 @@ module GrowingLogEvidence { policyPhase: str, policyInvocation: str, policyClosure: str, + settlement: Settlement, } var evidence: Evidence @@ -28,6 +30,7 @@ module GrowingLogEvidence { logMatches: false, sourceMatches: false, rootsValid: false, prefixIntact: false, writerPresent: false, authorityActive: false, stickyInvalid: false, policyPhase: "none", policyInvocation: "none", policyClosure: "none", + settlement: { phase: "idle", remaining: 32, deadlineAvailable: true }, } action beginPolicy(invocation: str, closure: str): bool = all { @@ -60,14 +63,55 @@ module GrowingLogEvidence { writerPresent: true } } + action beginSettlement = all { + evidence.phase != "invalid", evidence.phase != "unknown", evidence.phase != "closed", + evidence.settlement.phase == "idle" or evidence.settlement.phase == "candidate", + evidence' = { ...evidence, authorityActive: false, + settlement: { phase: "probing", remaining: 32, deadlineAvailable: true } } + } + + action incompleteRecordProbe = all { + evidence.settlement.phase == "probing", evidence.settlement.deadlineAvailable, + evidence.settlement.remaining > 0, + evidence' = { ...evidence, + settlement: { phase: "probing", remaining: evidence.settlement.remaining - 1, deadlineAvailable: true } } + } + + action completeRecordCandidate = all { + evidence.settlement.phase == "probing", evidence.settlement.deadlineAvailable, + evidence.settlement.remaining > 0, + evidence' = { ...evidence, + settlement: { phase: "candidate", remaining: evidence.settlement.remaining - 1, deadlineAvailable: true } } + } + + action recordSettlementExhausted = all { + evidence.settlement.phase == "probing", evidence.settlement.remaining == 0, + evidence' = { ...evidence, authorityActive: false, + settlement: { ...evidence.settlement, phase: "refused" } } + } + + action recordSettlementDeadline = all { + evidence.settlement.phase == "probing", + evidence' = { ...evidence, authorityActive: false, + settlement: { ...evidence.settlement, phase: "deadline", deadlineAvailable: false } } + } + action sampleInitial = all { evidence.phase == "acquired", evidence' = { ...evidence, phase: "sampled", observedRevision: 1, rootsValid: true, prefixIntact: true } } + action pendingCompleteResample = all { + evidence.phase == "sampled", not(evidence.stickyInvalid), + evidence.settlement.phase == "candidate", evidence.observedRevision < 3, + evidence' = { ...evidence, observedRevision: evidence.observedRevision + 1, + rootsValid: true, prefixIntact: true, authorityActive: false } + } + action validate(boundary: str): bool = all { evidence.phase == "sampled", + evidence.settlement.phase == "idle" or evidence.settlement.phase == "candidate", boundary == "browser" or boundary == "normalization" or boundary == "release", not(evidence.stickyInvalid), evidence.producerMatches, evidence.logMatches, evidence.sourceMatches, evidence.writerPresent, evidence.rootsValid, @@ -137,7 +181,9 @@ module GrowingLogEvidence { } action step = any { - acquire, sampleInitial, validate("browser"), validate("normalization"), validate("release"), + acquire, beginSettlement, incompleteRecordProbe, completeRecordCandidate, + recordSettlementExhausted, recordSettlementDeadline, pendingCompleteResample, + sampleInitial, validate("browser"), validate("normalization"), validate("release"), consume("browser"), consume("normalization"), consume("release"), benignAppend, pendingTail, staleBoundary, prefixRewrite, prefixTruncate, replacement, wrongWriter, wrongGeneration, wrongSource, contradictorySuffix, unavailable, close, @@ -166,9 +212,11 @@ module GrowingLogEvidence { val policyAuthorityIsCausal = evidence.phase != "consumed" or all { evidence.policyPhase == "completed", evidence.policyInvocation != "none", evidence.policyClosure != "none", } + val settlementIsBounded = evidence.settlement.remaining >= 0 and evidence.settlement.remaining <= 32 + val waitingDoesNotAuthorize = evidence.settlement.phase != "probing" or not(evidence.authorityActive) val invariant = all { consumedOnlyValidated, currentConsumptionMatchesValidation, authorityRequiresIdentity, invalidityIsSticky, terminalCannotValidate, boundaryIsClosed, - intendedBoundaryIsClosed, policyAuthorityIsCausal, + intendedBoundaryIsClosed, policyAuthorityIsCausal, settlementIsBounded, waitingDoesNotAuthorize, } } diff --git a/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.staleBoundaryCannotConsume.itf.json b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.staleBoundaryCannotConsume.itf.json index 063c4bb..c3b6c79 100644 --- a/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.staleBoundaryCannotConsume.itf.json +++ b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.staleBoundaryCannotConsume.itf.json @@ -1 +1 @@ -{"#meta":{"format":"ITF","format-description":"https://apalache-mc.org/docs/adr/015adr-trace.html","source":"GrowingLogEvidence_test.qnt","status":"ok"},"states":[{"#meta":{"index":0},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":false,"rootsValid":false,"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":1},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":2},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":true,"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":3},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":true,"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":4},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"invalid","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":true,"sourceMatches":true,"stickyInvalid":true,"validatedRevision":{"#bigint":"1"},"writerPresent":true}}],"vars":["evidence"]} +{"#meta":{"format":"ITF","format-description":"https://apalache-mc.org/docs/adr/015adr-trace.html","source":"GrowingLogEvidence_test.qnt","status":"ok"},"states":[{"#meta":{"index":0},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":false,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":1},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":2},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":3},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":4},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"invalid","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":true,"validatedRevision":{"#bigint":"1"},"writerPresent":true}}],"vars":["evidence"]} diff --git a/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.unavailableAfterConsumptionPreservesHistoryOnly.itf.json b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.unavailableAfterConsumptionPreservesHistoryOnly.itf.json index 3d022a0..9ee1619 100644 --- a/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.unavailableAfterConsumptionPreservesHistoryOnly.itf.json +++ b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.unavailableAfterConsumptionPreservesHistoryOnly.itf.json @@ -1 +1 @@ -{"#meta":{"format":"ITF","format-description":"https://apalache-mc.org/docs/adr/015adr-trace.html","source":"GrowingLogEvidence_test.qnt","status":"ok"},"states":[{"#meta":{"index":0},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":false,"rootsValid":false,"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":1},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"started","prefixIntact":false,"producerMatches":false,"rootsValid":false,"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":2},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"ready","prefixIntact":false,"producerMatches":false,"rootsValid":false,"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":3},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"ready","prefixIntact":false,"producerMatches":true,"rootsValid":false,"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":4},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"ready","prefixIntact":true,"producerMatches":true,"rootsValid":true,"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":5},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"ready","prefixIntact":true,"producerMatches":true,"rootsValid":true,"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":6},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"evaluated","prefixIntact":true,"producerMatches":true,"rootsValid":true,"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":7},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":8},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":9},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"unknown","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"sourceMatches":true,"stickyInvalid":true,"validatedRevision":{"#bigint":"1"},"writerPresent":false}}],"vars":["evidence"]} +{"#meta":{"format":"ITF","format-description":"https://apalache-mc.org/docs/adr/015adr-trace.html","source":"GrowingLogEvidence_test.qnt","status":"ok"},"states":[{"#meta":{"index":0},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":false,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":1},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"started","prefixIntact":false,"producerMatches":false,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":2},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"ready","prefixIntact":false,"producerMatches":false,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":3},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"ready","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":4},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"ready","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":5},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"ready","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":6},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"evaluated","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":7},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":8},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":9},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"unknown","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":true,"validatedRevision":{"#bigint":"1"},"writerPresent":false}}],"vars":["evidence"]} diff --git a/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.unavailableAfterValidationRevokesCurrentAuthority.itf.json b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.unavailableAfterValidationRevokesCurrentAuthority.itf.json index 0281460..a11a2c5 100644 --- a/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.unavailableAfterValidationRevokesCurrentAuthority.itf.json +++ b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.unavailableAfterValidationRevokesCurrentAuthority.itf.json @@ -1 +1 @@ -{"#meta":{"format":"ITF","format-description":"https://apalache-mc.org/docs/adr/015adr-trace.html","source":"GrowingLogEvidence_test.qnt","status":"ok"},"states":[{"#meta":{"index":0},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":false,"rootsValid":false,"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":1},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":2},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":true,"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":3},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":true,"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":4},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"unknown","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":true,"sourceMatches":true,"stickyInvalid":true,"validatedRevision":{"#bigint":"1"},"writerPresent":false}}],"vars":["evidence"]} +{"#meta":{"format":"ITF","format-description":"https://apalache-mc.org/docs/adr/015adr-trace.html","source":"GrowingLogEvidence_test.qnt","status":"ok"},"states":[{"#meta":{"index":0},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":false,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":1},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":2},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":3},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":4},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"unknown","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":true,"validatedRevision":{"#bigint":"1"},"writerPresent":false}}],"vars":["evidence"]} diff --git a/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.waitAfterConsumptionHasNoNewAuthority.itf.json b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.waitAfterConsumptionHasNoNewAuthority.itf.json new file mode 100644 index 0000000..f2566fe --- /dev/null +++ b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.waitAfterConsumptionHasNoNewAuthority.itf.json @@ -0,0 +1 @@ +{"#meta":{"format":"ITF","format-description":"https://apalache-mc.org/docs/adr/015adr-trace.html","source":"GrowingLogEvidence_test.qnt","status":"ok"},"states":[{"#meta":{"index":0},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":false,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":1},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":2},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":3},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"31"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":4},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"31"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":5},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"started","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"31"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":6},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"ready","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"31"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":7},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"ready","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"31"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":8},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"evaluated","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"31"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":9},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"31"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":10},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"31"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":11},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":12},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"31"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}}],"vars":["evidence"]} diff --git a/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence_test.qnt b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence_test.qnt index 3ea39ea..6fd42f7 100644 --- a/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence_test.qnt +++ b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence_test.qnt @@ -47,4 +47,25 @@ module GrowingLogEvidence_test { run policyClosureDriftIsSticky = init.then(beginPolicy("invocation", "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")) .then(readyPolicy("invocation", "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")).then(acquire).then(sampleInitial).then(validate("browser")).then(evaluatedPolicy("invocation", "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")).then(policyDrift) .expect(invariant and evidence.policyPhase == "invalid" and evidence.stickyInvalid) + + + run completeRecordWaitThenConsume = init.then(acquire).then(beginSettlement).then(incompleteRecordProbe).then(completeRecordCandidate).then(sampleInitial) + .then(beginPolicy("invocation","cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")).then(readyPolicy("invocation","cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")) + .then(validate("browser")).then(evaluatedPolicy("invocation","cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")).then(completePolicy("invocation","cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")).then(consume("browser")) + .expect(invariant and evidence.consumedRevision == 1 and evidence.settlement.remaining == 30) + + run completeRecordWaitExhausted = init.then(acquire).then(beginSettlement).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(recordSettlementExhausted) + .expect(invariant and evidence.observedRevision == 0 and evidence.consumedRevision == 0 and evidence.settlement.phase == "refused") + + run completeRecordWaitDeadline = init.then(acquire).then(beginSettlement).then(incompleteRecordProbe).then(recordSettlementDeadline) + .expect(invariant and evidence.observedRevision == 0 and evidence.consumedRevision == 0 and evidence.settlement.phase == "deadline") + + run waitAfterConsumptionHasNoNewAuthority = init.then(acquire).then(beginSettlement).then(completeRecordCandidate).then(sampleInitial) + .then(beginPolicy("invocation","cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")).then(readyPolicy("invocation","cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")) + .then(validate("browser")).then(evaluatedPolicy("invocation","cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")).then(completePolicy("invocation","cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")).then(consume("browser")) + .then(beginSettlement).then(incompleteRecordProbe) + .expect(invariant and evidence.consumedRevision == 1 and not(evidence.authorityActive) and evidence.settlement.phase == "probing") + + run pendingThenCompleteResample = init.then(acquire).then(pendingTail).then(beginSettlement).then(incompleteRecordProbe).then(completeRecordCandidate).then(pendingCompleteResample) + .expect(invariant and evidence.observedRevision == 2 and evidence.validatedRevision == 0 and evidence.settlement.phase == "candidate") } diff --git a/tests/Broker.NativeProof/RuntimeEvidence/README.md b/tests/Broker.NativeProof/RuntimeEvidence/README.md index de7d16e..b60c20b 100644 --- a/tests/Broker.NativeProof/RuntimeEvidence/README.md +++ b/tests/Broker.NativeProof/RuntimeEvidence/README.md @@ -15,6 +15,12 @@ Every appended revision needs fresh validation for BrowserAdmission, Normalizati Release. Prefix mutation, truncation, producer/log/source identity drift, contradictory root history, and unavailable observations revoke the scope irreversibly. +The private adapter performs a bounded mechanical complete-record settlement before it +submits a sample. Incomplete probes do not call this reducer or advance a revision. The +canonical Quint settlement record models the 32-probe budget, deadline refusal, wait +without authority, and pending-to-complete resampling while this F# reducer remains the +only policy state transition. + Before it reads a request, the executable accepts only `--closure-manifest PATH --closure-sha256 HEX --invocation-id ID`. It verifies an exact five-file managed census, exact provenance census, PDB-embedded SourceLink, source identity diff --git a/tests/Broker.NativeProof/RuntimeEvidence/tests/check-runtime-evidence.sh b/tests/Broker.NativeProof/RuntimeEvidence/tests/check-runtime-evidence.sh index 5b7f167..d5f632a 100755 --- a/tests/Broker.NativeProof/RuntimeEvidence/tests/check-runtime-evidence.sh +++ b/tests/Broker.NativeProof/RuntimeEvidence/tests/check-runtime-evidence.sh @@ -5,7 +5,7 @@ export DOTNET_PROCESSOR_COUNT="${DOTNET_PROCESSOR_COUNT:-1}" test "$(quint --version)" = "0.32.0" quint typecheck "$ROOT/GrowingLogEvidence.qnt" quint typecheck "$ROOT/GrowingLogEvidence_test.qnt" -quint test "$ROOT/GrowingLogEvidence_test.qnt" --main GrowingLogEvidence_test --match '^(healthyBoundaries|rewriteIsSticky|unavailableCannotGrant|unavailableAfterValidationRevokesCurrentAuthority|unavailableAfterConsumptionPreservesHistoryOnly|staleBoundaryCannotConsume|pendingTailHasNoAuthority|closeRevokesCurrentAuthority|truncateIsSticky|replacementIsSticky|wrongWriterIsSticky|wrongGenerationIsSticky|wrongSourceIsSticky|contradictorySuffixIsSticky|policyInvocationCompletesSameClosure|policyClosureDriftIsSticky)$' --seed 424242 --max-samples 1 +quint test "$ROOT/GrowingLogEvidence_test.qnt" --main GrowingLogEvidence_test --match '^(healthyBoundaries|rewriteIsSticky|unavailableCannotGrant|unavailableAfterValidationRevokesCurrentAuthority|unavailableAfterConsumptionPreservesHistoryOnly|staleBoundaryCannotConsume|pendingTailHasNoAuthority|closeRevokesCurrentAuthority|truncateIsSticky|replacementIsSticky|wrongWriterIsSticky|wrongGenerationIsSticky|wrongSourceIsSticky|contradictorySuffixIsSticky|policyInvocationCompletesSameClosure|policyClosureDriftIsSticky|completeRecordWaitThenConsume|completeRecordWaitExhausted|completeRecordWaitDeadline|waitAfterConsumptionHasNoNewAuthority|pendingThenCompleteResample)$' --seed 424242 --max-samples 1 quint run "$ROOT/GrowingLogEvidence.qnt" --seed 424242 --max-samples 500 --max-steps 16 --invariant invariant --verbosity 1 TMP=$(mktemp -d) trap 'python3 - "$TMP" <<'"'"'PY'"'"' @@ -34,6 +34,11 @@ pendingTailHasNoAuthority|GrowingLogEvidence.pendingTailHasNoAuthority.itf.json staleBoundaryCannotConsume|GrowingLogEvidence.staleBoundaryCannotConsume.itf.json closeRevokesCurrentAuthority|GrowingLogEvidence.closeRevokesCurrentAuthority.itf.json policyClosureDriftIsSticky|GrowingLogEvidence.policyClosureDriftIsSticky.itf.json +completeRecordWaitThenConsume|GrowingLogEvidence.completeRecordWaitThenConsume.itf.json +completeRecordWaitExhausted|GrowingLogEvidence.completeRecordWaitExhausted.itf.json +completeRecordWaitDeadline|GrowingLogEvidence.completeRecordWaitDeadline.itf.json +waitAfterConsumptionHasNoNewAuthority|GrowingLogEvidence.waitAfterConsumptionHasNoNewAuthority.itf.json +pendingThenCompleteResample|GrowingLogEvidence.pendingThenCompleteResample.itf.json EOF dotnet restore "$ROOT/RuntimeEvidence.Tests.fsproj" --locked-mode dotnet build "$ROOT/RuntimeEvidence.Tests.fsproj" -c Release --no-restore -m:1 From 00838d959f3680c8a1a1c54af90a23882b6c9ba2 Mon Sep 17 00:00:00 2001 From: EHotwagner Date: Fri, 2 Oct 2026 11:34:26 +0200 Subject: [PATCH 02/12] Close settlement budget and transcript correspondence gaps --- .../RuntimeEvidence/CorrespondenceTests.fs | 229 ++++++++++++++---- ...ence.closeRevokesCurrentAuthority.itf.json | 2 +- ...idence.completeRecordWaitDeadline.itf.json | 2 +- ...dence.completeRecordWaitExhausted.itf.json | 2 +- ...nce.completeRecordWaitThenConsume.itf.json | 2 +- .../GrowingLogEvidence.healthy.itf.json | 2 +- ...vidence.pendingTailHasNoAuthority.itf.json | 2 +- ...dence.pendingThenCompleteResample.itf.json | 2 +- ...idence.policyClosureDriftIsSticky.itf.json | 2 +- .../RuntimeEvidence/GrowingLogEvidence.qnt | 55 ++++- ...nce.sharedBudgetAcrossEvaluations.itf.json | 1 + ...idence.staleBoundaryCannotConsume.itf.json | 2 +- ...erConsumptionPreservesHistoryOnly.itf.json | 2 +- ...ValidationRevokesCurrentAuthority.itf.json | 2 +- ...AfterConsumptionHasNoNewAuthority.itf.json | 2 +- .../GrowingLogEvidence_test.qnt | 41 +++- .../RuntimeEvidence/README.md | 4 + .../tests/check-runtime-evidence.sh | 13 +- 18 files changed, 280 insertions(+), 87 deletions(-) create mode 100644 tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.sharedBudgetAcrossEvaluations.itf.json diff --git a/tests/Broker.NativeProof/RuntimeEvidence/CorrespondenceTests.fs b/tests/Broker.NativeProof/RuntimeEvidence/CorrespondenceTests.fs index 70465e5..c26f47f 100644 --- a/tests/Broker.NativeProof/RuntimeEvidence/CorrespondenceTests.fs +++ b/tests/Broker.NativeProof/RuntimeEvidence/CorrespondenceTests.fs @@ -21,13 +21,13 @@ module CorrespondenceTests = |> Array.map (fun root -> Path.Combine(root,name)) |> Array.find File.Exists |> Path.GetFullPath let private source={Path="GrowingLogEvidence_test.qnt";Line=1;Column=1} let private boundaryText = function Some BrowserAdmission->"browser"|Some Normalization->"normalization"|Some Release->"release"|None->"none" - let private stateWithSettlement settlementPhase settlementRemaining deadlineAvailable rootsValid prefixIntact writerPresent (value: EvidenceState) = + let private stateWithSettlement settlementPhase settlementBoundary settlementRemaining deadlineAvailable rootsValid prefixIntact writerPresent (value: EvidenceState) = let present=value.Identity.IsSome - let settlement=Record ["phase",Text settlementPhase;"remaining",Integer(string settlementRemaining);"deadlineAvailable",Boolean deadlineAvailable] + let settlement=Record ["phase",Text settlementPhase;"boundary",Text settlementBoundary;"remaining",Integer(string settlementRemaining);"deadlineAvailable",Boolean deadlineAvailable] let record=Record ["phase",Text value.Phase;"generation",Integer(if present then "1" else "0");"observedRevision",Integer(string value.ObservedRevision);"validatedRevision",Integer(string value.ValidatedRevision);"intendedBoundary",Text(boundaryText value.ValidatedBoundary);"consumedRevision",Integer(string value.ConsumedRevision);"consumedBoundary",Text(boundaryText value.ConsumedBoundary);"producerMatches",Boolean present;"logMatches",Boolean present;"sourceMatches",Boolean present;"rootsValid",Boolean rootsValid;"prefixIntact",Boolean prefixIntact;"writerPresent",Boolean writerPresent;"authorityActive",Boolean(value.Phase="validated" && not value.StickyInvalid);"stickyInvalid",Boolean value.StickyInvalid;"policyPhase",Text policyPhase;"policyInvocation",Text policyInvocation;"policyClosure",Text policyClosure;"settlement",settlement] let draft={Identity="";Bindings=["evidence",record]} {draft with Identity=QuintReplay.stateFingerprint draft |> unwrap} - let private state rootsValid prefixIntact writerPresent value = stateWithSettlement "idle" 32 true rootsValid prefixIntact writerPresent value + let private state rootsValid prefixIntact writerPresent value = stateWithSettlement "idle" "none" 32 true rootsValid prefixIntact writerPresent value let private accepted = function Accepted value -> value | other -> failwithf "%A" other let private transitioned = function Accepted value|Pending value|Refused value|Unknown value -> value let private compareTrace baseDirectory environment name actions projected = @@ -36,23 +36,67 @@ module CorrespondenceTests = let observations=projected|>List.mapi(fun index actual->{Index=index+1;Action=actions[index];Source=source;Actual=actual}) match QuintReplay.compare trace observations |> unwrap with QuintReplayResult.Equivalent -> trace,observations | other -> failwithf "%s reducer/model divergence: %A" name other let run baseDirectory = - match Environment.GetEnvironmentVariable("BAR_SETTLEMENT_TRANSCRIPT") with - | null | "" -> () - | path -> - use document=JsonDocument.Parse(File.ReadAllBytes path) - let rows=document.RootElement.EnumerateArray()|>Seq.toArray - if rows.Length<>2 then failwith "actual settlement transcript length" - let read index event probe remaining = - let row=rows[index] - let names=row.EnumerateObject()|>Seq.map _.Name|>Set.ofSeq - if names<>set ["event";"probe";"remaining"] || row.GetProperty("event").GetString()<>event || row.GetProperty("probe").GetInt32()<>probe || row.GetProperty("remaining").GetInt32()<>remaining then failwith "actual settlement transcript mismatch" - read 0 "incomplete" 1 31 - read 1 "complete" 2 30 + let requiredEnvironment name = + match Environment.GetEnvironmentVariable name with + | null | "" -> failwithf "required correspondence input absent: %s" name + | value -> Path.GetFullPath value + let transcriptPath=requiredEnvironment "BAR_SETTLEMENT_TRANSCRIPT" + let helperRoot=requiredEnvironment "BAR_GROWING_LOG_HELPER" + let helperPath=Path.Combine(helperRoot,"growing_log.py") + if not(File.Exists transcriptPath && File.Exists helperPath) then failwith "required correspondence artifact absent" + use transcriptDocument=JsonDocument.Parse(File.ReadAllBytes transcriptPath) + let transcript=transcriptDocument.RootElement + let exactNames (element:JsonElement) names = + let actual=element.EnumerateObject()|>Seq.map _.Name|>Set.ofSeq + if actual<>set names then failwith "closed settlement transcript object" + exactNames transcript ["schema";"helperSha256";"scenarios"] + if transcript.GetProperty("schema").GetString()<>"fsbar.barc-complete-record-settlement-correspondence/v1" || transcript.GetProperty("helperSha256").GetString()<>hashFile helperPath then failwith "settlement helper/transcript binding" + let scenarios=transcript.GetProperty("scenarios").EnumerateArray()|>Seq.toArray + if scenarios.Length<>6 then failwith "closed settlement scenario census" + let scenario name = + let matches=scenarios|>Array.filter(fun row->exactNames row ["name";"events";"effects"];row.GetProperty("name").GetString()=name) + if matches.Length<>1 then failwithf "required settlement scenario absent/duplicate: %s" name + matches[0] + let events name = + scenario name|>fun row->row.GetProperty("events").EnumerateArray()|>Seq.mapi(fun index event-> + exactNames event ["event";"probe";"remaining"] + let kind=event.GetProperty("event").GetString() + let probe=event.GetProperty("probe").GetInt32() + let remaining=event.GetProperty("remaining").GetInt32() + if (kind<>"incomplete" && kind<>"complete") || probe<>index+1 || remaining<>32-probe then failwithf "noncausal settlement event: %s" name + kind,probe,remaining)|>Seq.toList + let effects name = + let value=(scenario name).GetProperty("effects") + exactNames value ["policyCalls";"revisions";"outcome";"check";"beforeState";"afterState"] + value + let requireEffects name calls revisions outcome check = + let value=effects name + let actualRevisions=value.GetProperty("revisions").EnumerateArray()|>Seq.map _.GetInt32()|>Seq.toList + let actualCheck=if value.GetProperty("check").ValueKind=JsonValueKind.Null then None else Some(value.GetProperty("check").GetString()) + if value.GetProperty("policyCalls").GetInt32()<>calls || actualRevisions<>revisions || value.GetProperty("outcome").GetString()<>outcome || actualCheck<>check then failwithf "settlement effects mismatch: %s" name + requireEffects "completeRecordWaitThenConsume" 1 [1] "accepted" None + requireEffects "completeRecordWaitExhausted" 0 [] "refused" (Some "infolog-record-settlement-exhausted") + requireEffects "completeRecordWaitDeadline" 0 [] "deadline" (Some "infolog-record-settlement-deadline") + requireEffects "sharedBudgetAcrossEvaluations" 1 [1] "refused" (Some "infolog-record-settlement-exhausted") + requireEffects "pendingThenCompleteResample" 2 [1;2] "accepted" None + requireEffects "waitAfterConsumptionHasNoNewAuthority" 0 [] "refused" (Some "infolog-record-settlement-exhausted") + for name in ["completeRecordWaitExhausted";"completeRecordWaitDeadline"] do + let value=effects name + if value.GetProperty("beforeState").ValueKind<>JsonValueKind.Null || value.GetProperty("afterState").ValueKind<>JsonValueKind.Null then failwithf "mechanical wait changed production state: %s" name + let historical=effects "waitAfterConsumptionHasNoNewAuthority" + if historical.GetProperty("beforeState").GetRawText()<>historical.GetProperty("afterState").GetRawText() then failwith "wait changed historical production state" + let requireProductionState name (element:JsonElement) (value:EvidenceState) = + exactNames element ["phase";"observedRevision";"validatedRevision";"validatedBoundary";"consumedRevision";"consumedBoundary";"bytes";"sha256";"stickyInvalid";"reason";"identitySha256"] + let optionalText (property:string) = let item=element.GetProperty property in if item.ValueKind=JsonValueKind.Null then None else Some(item.GetString()) + let validDigest (property:string) = let text=element.GetProperty(property).GetString() in text.Length=64 && text|>Seq.forall(fun c->Char.IsDigit c || (c>='a' && c<='f')) + let boundaryOptionText = function Some boundary->Some(boundaryText(Some boundary))|None->None + if element.GetProperty("phase").GetString()<>value.Phase || element.GetProperty("observedRevision").GetInt32()<>value.ObservedRevision || element.GetProperty("validatedRevision").GetInt32()<>value.ValidatedRevision || optionalText "validatedBoundary"<>boundaryOptionText value.ValidatedBoundary || element.GetProperty("consumedRevision").GetInt32()<>value.ConsumedRevision || optionalText "consumedBoundary"<>boundaryOptionText value.ConsumedBoundary || element.GetProperty("stickyInvalid").GetBoolean()<>value.StickyInvalid || optionalText "reason"<>value.Reason || element.GetProperty("bytes").GetInt64()<0L || not(validDigest "sha256" && validDigest "identitySha256") then failwithf "production settlement state mismatch: %s" name policyPhase<-"none";policyInvocation<-"none";policyClosure<-"none" let tool=locate "quint" - let environment={Seed="424242";Bounds=["revisions",3L;"generations",2L];ToolFingerprint=hashFile tool;ProfileFingerprint=hashJoined [Path.Combine(baseDirectory,"GrowingLogEvidence.qnt");Path.Combine(baseDirectory,"GrowingLogEvidence_test.qnt")];ContractFingerprint=hashFile(Path.Combine(baseDirectory,"Codec.fs"));AdapterFingerprint=hashFile(Path.Combine(baseDirectory,"DataRootPolicy.fs"));ImplementationFingerprint=hashJoined [Path.Combine(baseDirectory,"GrowingLogEvidence.fs");typeof.Assembly.Location]} + let environment={Seed="424242";Bounds=["revisions",3L;"generations",2L];ToolFingerprint=hashFile tool;ProfileFingerprint=hashJoined [Path.Combine(baseDirectory,"GrowingLogEvidence.qnt");Path.Combine(baseDirectory,"GrowingLogEvidence_test.qnt")];ContractFingerprint=hashFile(Path.Combine(baseDirectory,"Codec.fs"));AdapterFingerprint=hashJoined [Path.Combine(baseDirectory,"DataRootPolicy.fs");helperPath;transcriptPath];ImplementationFingerprint=hashJoined [Path.Combine(baseDirectory,"GrowingLogEvidence.fs");typeof.Assembly.Location]} let id={RunId="run";SourceSetSha256=String('a',64);ApphostSha256=String('b',64);ClosureSha256=String('c',64);Pid=100;StartTicks="1";Uid=1000;Device="1";Inode="2";Path="/private/infolog.txt"} let observe rev bytes sha complete available writer roots={Identity=id;Revision=rev;Bytes=bytes;Sha256=sha;PreviousPrefixIntact=true;WriterPresent=writer;CompleteRecord=complete;Available=available;RootsValid=roots;PendingReason=None} + let observePending rev bytes sha={observe rev bytes sha false true true false with PendingReason=Some "isolation-record-absent"} let mutable current=GrowingLogEvidence.empty let states=ResizeArray() let push next roots prefix writer=current<-accepted next;states.Add(state roots prefix writer current) @@ -80,21 +124,24 @@ module CorrespondenceTests = push(GrowingLogEvidence.validate BrowserAdmission current) true true true evaluateComplete identity1 true true true push(GrowingLogEvidence.consume BrowserAdmission current) true true true + states.Add(state true true true current) policyPhase<-"none";policyInvocation<-"none";policyClosure<-"none" push(GrowingLogEvidence.sample (observe 2 120L (String('d',64)) true true true true) current) true true true let identity2=beginReady 2 true true true push(GrowingLogEvidence.validate Normalization current) true true true evaluateComplete identity2 true true true push(GrowingLogEvidence.consume Normalization current) true true true + states.Add(state true true true current) policyPhase<-"none";policyInvocation<-"none";policyClosure<-"none" push(GrowingLogEvidence.sample (observe 3 140L (String('e',64)) true true true true) current) true true true let identity3=beginReady 3 true true true push(GrowingLogEvidence.validate Release current) true true true evaluateComplete identity3 true true true push(GrowingLogEvidence.consume Release current) true true true + states.Add(state true true true current) let before n=["beginPolicy:invocation"+string n;"readyPolicy:invocation"+string n] let after n=["evaluatedPolicy:invocation"+string n;"completePolicy:invocation"+string n] - let healthyActions=before 1@["acquire";"sampleInitial";"validate:browser"]@after 1@["consume:browser";"benignAppend"]@before 2@["validate:normalization"]@after 2@["consume:normalization";"benignAppend"]@before 3@["validate:release"]@after 3@["consume:release"] + let healthyActions=before 1@["acquire";"sampleInitial";"validate:browser"]@after 1@["consume:browser";"completeBoundary:browser";"benignAppend"]@before 2@["validate:normalization"]@after 2@["consume:normalization";"completeBoundary:normalization";"benignAppend"]@before 3@["validate:release"]@after 3@["consume:release";"completeBoundary:release"] compareTrace baseDirectory environment "healthy" healthyActions (List.ofSeq states)|>ignore let guardProbe={InvocationId="invocation";ClosureSha256=String('c',64);Pid=100;StartTicks="1";Uid=1000} current<-GrowingLogEvidence.empty @@ -161,62 +208,140 @@ module CorrespondenceTests = sequence "staleBoundaryCannotConsume" ["acquire";"sampleInitial";"validate:browser";"staleBoundary"] [state false false true a;state true true true s;state true true true v;state true true true stale] sequence "closeRevokesCurrentAuthority" ["acquire";"sampleInitial";"validate:browser";"close"] [state false false true a;state true true true s;state true true true v;state true true true (GrowingLogEvidence.close v)] - // Settlement steps are mechanical: replay them against the exact same - // production reducer state. Only the complete candidate is submitted - // to GrowingLogEvidence.sample and advances its revision. + // Settlement projections are driven by freshly emitted helper events. + let appendEventStates (target:ResizeArray) boundary roots prefix writer reducerState rows = + for kind,_,remaining in rows do + let phase=if kind="complete" then "candidate" else "probing" + target.Add(stateWithSettlement phase boundary remaining true roots prefix writer reducerState) + let eventActions rows = rows|>List.map(fun (kind,_,_)->if kind="complete" then "completeRecordCandidate" else "incompleteRecordProbe") + policyPhase<-"none";policyInvocation<-"none";policyClosure<-"none" + let completionEvents=events "completeRecordWaitThenConsume" let waitStates=ResizeArray() waitStates.Add(state false false true a) - waitStates.Add(stateWithSettlement "probing" 32 true false false true a) - waitStates.Add(stateWithSettlement "probing" 31 true false false true a) - waitStates.Add(stateWithSettlement "candidate" 30 true false false true a) - waitStates.Add(stateWithSettlement "candidate" 30 true true true true s) + waitStates.Add(stateWithSettlement "probing" "browser" 32 true false false true a) + appendEventStates waitStates "browser" false false true a completionEvents + let completionRemaining=completionEvents|>List.last|>fun (_,_,remaining)->remaining + waitStates.Add(stateWithSettlement "candidate" "browser" completionRemaining true true true true s) let waitGuard=PolicyComposition.start guardId policyPhase<-waitGuard.State.Phase;policyInvocation<-guardId.InvocationId;policyClosure<-guardId.ClosureSha256 - waitStates.Add(stateWithSettlement "candidate" 30 true true true true s) + waitStates.Add(stateWithSettlement "candidate" "browser" completionRemaining true true true true s) let waitReady=PolicyComposition.ready guardId waitGuard - policyPhase<-waitReady.State.Phase;waitStates.Add(stateWithSettlement "candidate" 30 true true true true s) + policyPhase<-waitReady.State.Phase;waitStates.Add(stateWithSettlement "candidate" "browser" completionRemaining true true true true s) let waitValidated=GrowingLogEvidence.validate BrowserAdmission s|>accepted - waitStates.Add(stateWithSettlement "candidate" 30 true true true true waitValidated) + waitStates.Add(stateWithSettlement "candidate" "browser" completionRemaining true true true true waitValidated) let waitEvaluated=PolicyComposition.evaluated guardId waitReady - policyPhase<-waitEvaluated.State.Phase;waitStates.Add(stateWithSettlement "candidate" 30 true true true true waitValidated) + policyPhase<-waitEvaluated.State.Phase;waitStates.Add(stateWithSettlement "candidate" "browser" completionRemaining true true true true waitValidated) let waitCompleted=match PolicyComposition.finishGuard guardId true waitEvaluated with Choice1Of2 value->value|Choice2Of2 value->failwithf "%A" value - policyPhase<-waitCompleted.State.Phase;waitStates.Add(stateWithSettlement "candidate" 30 true true true true waitValidated) + policyPhase<-waitCompleted.State.Phase;waitStates.Add(stateWithSettlement "candidate" "browser" completionRemaining true true true true waitValidated) let waitConsumed=GrowingLogEvidence.consume BrowserAdmission waitValidated|>accepted - waitStates.Add(stateWithSettlement "candidate" 30 true true true true waitConsumed) - sequence "completeRecordWaitThenConsume" ["acquire";"beginSettlement";"incompleteRecordProbe";"completeRecordCandidate";"sampleInitial";"beginPolicy:invocation";"readyPolicy:invocation";"validate:browser";"evaluatedPolicy:invocation";"completePolicy:invocation";"consume:browser"] (List.ofSeq waitStates) + requireProductionState "completeRecordWaitThenConsume" ((effects "completeRecordWaitThenConsume").GetProperty("afterState")) waitConsumed + waitStates.Add(stateWithSettlement "candidate" "browser" completionRemaining true true true true waitConsumed) + sequence "completeRecordWaitThenConsume" (["acquire";"beginSettlement:browser"]@eventActions completionEvents@["sampleInitial";"beginPolicy:invocation";"readyPolicy:invocation";"validate:browser";"evaluatedPolicy:invocation";"completePolicy:invocation";"consume:browser"]) (List.ofSeq waitStates) policyPhase<-"none";policyInvocation<-"none";policyClosure<-"none" + let exhaustedEvents=events "completeRecordWaitExhausted" let exhaustedStates=ResizeArray() exhaustedStates.Add(state false false true a) - exhaustedStates.Add(stateWithSettlement "probing" 32 true false false true a) - for remaining in 31..-1..0 do exhaustedStates.Add(stateWithSettlement "probing" remaining true false false true a) - exhaustedStates.Add(stateWithSettlement "refused" 0 true false false true a) - sequence "completeRecordWaitExhausted" (["acquire";"beginSettlement"] @ List.replicate 32 "incompleteRecordProbe" @ ["recordSettlementExhausted"]) (List.ofSeq exhaustedStates) - sequence "completeRecordWaitDeadline" ["acquire";"beginSettlement";"incompleteRecordProbe";"recordSettlementDeadline"] [state false false true a;stateWithSettlement "probing" 32 true false false true a;stateWithSettlement "probing" 31 true false false true a;stateWithSettlement "deadline" 31 false false false true a] + exhaustedStates.Add(stateWithSettlement "probing" "browser" 32 true false false true a) + appendEventStates exhaustedStates "browser" false false true a exhaustedEvents + exhaustedStates.Add(stateWithSettlement "refused" "browser" 0 true false false true a) + sequence "completeRecordWaitExhausted" (["acquire";"beginSettlement:browser"]@eventActions exhaustedEvents@["recordSettlementExhausted"]) (List.ofSeq exhaustedStates) + + let deadlineEvents=events "completeRecordWaitDeadline" + let deadlineStates=ResizeArray() + deadlineStates.Add(state false false true a) + deadlineStates.Add(stateWithSettlement "probing" "browser" 32 true false false true a) + appendEventStates deadlineStates "browser" false false true a deadlineEvents + let deadlineRemaining=deadlineEvents|>List.last|>fun (_,_,remaining)->remaining + deadlineStates.Add(stateWithSettlement "deadline" "browser" deadlineRemaining false false false true a) + sequence "completeRecordWaitDeadline" (["acquire";"beginSettlement:browser"]@eventActions deadlineEvents@["recordSettlementDeadline"]) (List.ofSeq deadlineStates) + policyPhase<-"none";policyInvocation<-"none";policyClosure<-"none" + let sharedEvents=events "sharedBudgetAcrossEvaluations" + let sharedFirst=sharedEvents|>List.head + if (sharedFirst|>fun (kind,_,_)->kind)<>"complete" then failwith "shared budget first candidate absent" + let sharedRemaining=sharedFirst|>fun (_,_,remaining)->remaining + let sharedStates=ResizeArray() + sharedStates.Add(state false false true a) + sharedStates.Add(stateWithSettlement "probing" "browser" 32 true false false true a) + sharedStates.Add(stateWithSettlement "candidate" "browser" sharedRemaining true false false true a) + sharedStates.Add(stateWithSettlement "candidate" "browser" sharedRemaining true true true true s) + let sharedGuard=PolicyComposition.start guardId + policyPhase<-sharedGuard.State.Phase;policyInvocation<-guardId.InvocationId;policyClosure<-guardId.ClosureSha256 + sharedStates.Add(stateWithSettlement "candidate" "browser" sharedRemaining true true true true s) + let sharedReady=PolicyComposition.ready guardId sharedGuard + policyPhase<-sharedReady.State.Phase;sharedStates.Add(stateWithSettlement "candidate" "browser" sharedRemaining true true true true s) + let sharedValidated=GrowingLogEvidence.validate BrowserAdmission s|>accepted + sharedStates.Add(stateWithSettlement "candidate" "browser" sharedRemaining true true true true sharedValidated) + let sharedEvaluated=PolicyComposition.evaluated guardId sharedReady + policyPhase<-sharedEvaluated.State.Phase;sharedStates.Add(stateWithSettlement "candidate" "browser" sharedRemaining true true true true sharedValidated) + let sharedCompleted=match PolicyComposition.finishGuard guardId true sharedEvaluated with Choice1Of2 value->value|Choice2Of2 value->failwithf "%A" value + policyPhase<-sharedCompleted.State.Phase;sharedStates.Add(stateWithSettlement "candidate" "browser" sharedRemaining true true true true sharedValidated) + let sharedConsumed=GrowingLogEvidence.consume BrowserAdmission sharedValidated|>accepted + requireProductionState "sharedBudgetAcrossEvaluations" ((effects "sharedBudgetAcrossEvaluations").GetProperty("afterState")) sharedConsumed + sharedStates.Add(stateWithSettlement "candidate" "browser" sharedRemaining true true true true sharedConsumed) + sharedStates.Add(stateWithSettlement "probing" "browser" sharedRemaining true true true true sharedConsumed) + appendEventStates sharedStates "browser" true true true sharedConsumed (sharedEvents|>List.tail) + sharedStates.Add(stateWithSettlement "refused" "browser" 0 true true true true sharedConsumed) + sequence "sharedBudgetAcrossEvaluations" (["acquire";"beginSettlement:browser";"completeRecordCandidate";"sampleInitial";"beginPolicy:invocation";"readyPolicy:invocation";"validate:browser";"evaluatedPolicy:invocation";"completePolicy:invocation";"consume:browser";"retrySettlement:browser"]@eventActions(sharedEvents|>List.tail)@["recordSettlementExhausted"]) (List.ofSeq sharedStates) + + policyPhase<-"none";policyInvocation<-"none";policyClosure<-"none" + let pendingEvents=events "pendingThenCompleteResample" + if pendingEvents|>List.map(fun (kind,_,_)->kind)<>["complete";"incomplete";"complete"] then failwith "actual pending resample event order" + let pendingStates=ResizeArray() + pendingStates.Add(state false false true a) + pendingStates.Add(stateWithSettlement "probing" "browser" 32 true false false true a) + let _,_,pendingR1=pendingEvents[0] + pendingStates.Add(stateWithSettlement "candidate" "browser" pendingR1 true false false true a) + let pending1=GrowingLogEvidence.sample (observePending 1 100L (String('c',64))) a|>transitioned + pendingStates.Add(stateWithSettlement "candidate" "browser" pendingR1 true false true true pending1) + pendingStates.Add(stateWithSettlement "probing" "browser" pendingR1 true false true true pending1) + let _,_,pendingR2=pendingEvents[1] + pendingStates.Add(stateWithSettlement "probing" "browser" pendingR2 true false true true pending1) + let _,_,pendingR3=pendingEvents[2] + pendingStates.Add(stateWithSettlement "candidate" "browser" pendingR3 true false true true pending1) + let pending2=GrowingLogEvidence.sample (observe 2 120L (String('d',64)) true true true true) pending1|>accepted + pendingStates.Add(stateWithSettlement "candidate" "browser" pendingR3 true true true true pending2) + let pendingGuard=PolicyComposition.start guardId + policyPhase<-pendingGuard.State.Phase;policyInvocation<-guardId.InvocationId;policyClosure<-guardId.ClosureSha256 + pendingStates.Add(stateWithSettlement "candidate" "browser" pendingR3 true true true true pending2) + let pendingReady=PolicyComposition.ready guardId pendingGuard + policyPhase<-pendingReady.State.Phase;pendingStates.Add(stateWithSettlement "candidate" "browser" pendingR3 true true true true pending2) + let pendingValidated=GrowingLogEvidence.validate BrowserAdmission pending2|>accepted + pendingStates.Add(stateWithSettlement "candidate" "browser" pendingR3 true true true true pendingValidated) + let pendingEvaluated=PolicyComposition.evaluated guardId pendingReady + policyPhase<-pendingEvaluated.State.Phase;pendingStates.Add(stateWithSettlement "candidate" "browser" pendingR3 true true true true pendingValidated) + let pendingCompleted=match PolicyComposition.finishGuard guardId true pendingEvaluated with Choice1Of2 value->value|Choice2Of2 value->failwithf "%A" value + policyPhase<-pendingCompleted.State.Phase;pendingStates.Add(stateWithSettlement "candidate" "browser" pendingR3 true true true true pendingValidated) + let pendingConsumed=GrowingLogEvidence.consume BrowserAdmission pendingValidated|>accepted + requireProductionState "pendingThenCompleteResample" ((effects "pendingThenCompleteResample").GetProperty("afterState")) pendingConsumed + pendingStates.Add(stateWithSettlement "candidate" "browser" pendingR3 true true true true pendingConsumed) + sequence "pendingThenCompleteResample" ["acquire";"beginSettlement:browser";"completeRecordCandidate";"pendingTail";"retrySettlement:browser";"incompleteRecordProbe";"completeRecordCandidate";"pendingCompleteResample";"beginPolicy:invocation";"readyPolicy:invocation";"validate:browser";"evaluatedPolicy:invocation";"completePolicy:invocation";"consume:browser"] (List.ofSeq pendingStates) + + policyPhase<-"none";policyInvocation<-"none";policyClosure<-"none" + let afterEvents=events "waitAfterConsumptionHasNoNewAuthority" let afterConsumeStates=ResizeArray() afterConsumeStates.Add(state false false true a) - afterConsumeStates.Add(stateWithSettlement "probing" 32 true false false true a) - afterConsumeStates.Add(stateWithSettlement "candidate" 31 true false false true a) - afterConsumeStates.Add(stateWithSettlement "candidate" 31 true true true true s) + afterConsumeStates.Add(stateWithSettlement "probing" "browser" 32 true false false true a) + afterConsumeStates.Add(stateWithSettlement "candidate" "browser" 31 true false false true a) + afterConsumeStates.Add(stateWithSettlement "candidate" "browser" 31 true true true true s) let afterGuard=PolicyComposition.start guardId policyPhase<-afterGuard.State.Phase;policyInvocation<-guardId.InvocationId;policyClosure<-guardId.ClosureSha256 - afterConsumeStates.Add(stateWithSettlement "candidate" 31 true true true true s) + afterConsumeStates.Add(stateWithSettlement "candidate" "browser" 31 true true true true s) let afterReady=PolicyComposition.ready guardId afterGuard - policyPhase<-afterReady.State.Phase;afterConsumeStates.Add(stateWithSettlement "candidate" 31 true true true true s) + policyPhase<-afterReady.State.Phase;afterConsumeStates.Add(stateWithSettlement "candidate" "browser" 31 true true true true s) let afterValidated=GrowingLogEvidence.validate BrowserAdmission s|>accepted - afterConsumeStates.Add(stateWithSettlement "candidate" 31 true true true true afterValidated) + afterConsumeStates.Add(stateWithSettlement "candidate" "browser" 31 true true true true afterValidated) let afterEvaluated=PolicyComposition.evaluated guardId afterReady - policyPhase<-afterEvaluated.State.Phase;afterConsumeStates.Add(stateWithSettlement "candidate" 31 true true true true afterValidated) + policyPhase<-afterEvaluated.State.Phase;afterConsumeStates.Add(stateWithSettlement "candidate" "browser" 31 true true true true afterValidated) let afterCompleted=match PolicyComposition.finishGuard guardId true afterEvaluated with Choice1Of2 value->value|Choice2Of2 value->failwithf "%A" value - policyPhase<-afterCompleted.State.Phase;afterConsumeStates.Add(stateWithSettlement "candidate" 31 true true true true afterValidated) + policyPhase<-afterCompleted.State.Phase;afterConsumeStates.Add(stateWithSettlement "candidate" "browser" 31 true true true true afterValidated) let afterConsumed=GrowingLogEvidence.consume BrowserAdmission afterValidated|>accepted - afterConsumeStates.Add(stateWithSettlement "candidate" 31 true true true true afterConsumed) - afterConsumeStates.Add(stateWithSettlement "probing" 32 true true true true afterConsumed) - afterConsumeStates.Add(stateWithSettlement "probing" 31 true true true true afterConsumed) - sequence "waitAfterConsumptionHasNoNewAuthority" ["acquire";"beginSettlement";"completeRecordCandidate";"sampleInitial";"beginPolicy:invocation";"readyPolicy:invocation";"validate:browser";"evaluatedPolicy:invocation";"completePolicy:invocation";"consume:browser";"beginSettlement";"incompleteRecordProbe"] (List.ofSeq afterConsumeStates) - - policyPhase<-"none";policyInvocation<-"none";policyClosure<-"none" - let completedPending=GrowingLogEvidence.sample (observe 2 120L (String('d',64)) true true true true) pending|>accepted - sequence "pendingThenCompleteResample" ["acquire";"pendingTail";"beginSettlement";"incompleteRecordProbe";"completeRecordCandidate";"pendingCompleteResample"] [state false false true a;state false true true pending;stateWithSettlement "probing" 32 true false true true pending;stateWithSettlement "probing" 31 true false true true pending;stateWithSettlement "candidate" 30 true false true true pending;stateWithSettlement "candidate" 30 true true true true completedPending] + requireProductionState "waitAfterConsumptionHasNoNewAuthority" (historical.GetProperty("beforeState")) afterConsumed + afterConsumeStates.Add(stateWithSettlement "candidate" "browser" 31 true true true true afterConsumed) + afterConsumeStates.Add(stateWithSettlement "idle" "none" 31 true true true true afterConsumed) + afterConsumeStates.Add(stateWithSettlement "probing" "normalization" 32 true true true true afterConsumed) + appendEventStates afterConsumeStates "normalization" true true true afterConsumed afterEvents + afterConsumeStates.Add(stateWithSettlement "refused" "normalization" 0 true true true true afterConsumed) + sequence "waitAfterConsumptionHasNoNewAuthority" (["acquire";"beginSettlement:browser";"completeRecordCandidate";"sampleInitial";"beginPolicy:invocation";"readyPolicy:invocation";"validate:browser";"evaluatedPolicy:invocation";"completePolicy:invocation";"consume:browser";"completeBoundary:browser";"beginSettlement:normalization"]@eventActions afterEvents@["recordSettlementExhausted"]) (List.ofSeq afterConsumeStates) diff --git a/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.closeRevokesCurrentAuthority.itf.json b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.closeRevokesCurrentAuthority.itf.json index a8b128c..bf58959 100644 --- a/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.closeRevokesCurrentAuthority.itf.json +++ b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.closeRevokesCurrentAuthority.itf.json @@ -1 +1 @@ -{"#meta":{"format":"ITF","format-description":"https://apalache-mc.org/docs/adr/015adr-trace.html","source":"GrowingLogEvidence_test.qnt","status":"ok"},"states":[{"#meta":{"index":0},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":false,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":1},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":2},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":3},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":4},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"closed","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}}],"vars":["evidence"]} +{"#meta":{"format":"ITF","format-description":"https://apalache-mc.org/docs/adr/015adr-trace.html","source":"GrowingLogEvidence_test.qnt","status":"ok"},"states":[{"#meta":{"index":0},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":false,"rootsValid":false,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":1},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":2},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":3},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":4},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"closed","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}}],"vars":["evidence"]} diff --git a/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.completeRecordWaitDeadline.itf.json b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.completeRecordWaitDeadline.itf.json index f44521b..c35eac6 100644 --- a/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.completeRecordWaitDeadline.itf.json +++ b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.completeRecordWaitDeadline.itf.json @@ -1 +1 @@ -{"#meta":{"format":"ITF","format-description":"https://apalache-mc.org/docs/adr/015adr-trace.html","source":"GrowingLogEvidence_test.qnt","status":"ok"},"states":[{"#meta":{"index":0},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":false,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":1},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":2},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":3},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"31"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":4},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":false,"phase":"deadline","remaining":{"#bigint":"31"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}}],"vars":["evidence"]} +{"#meta":{"format":"ITF","format-description":"https://apalache-mc.org/docs/adr/015adr-trace.html","source":"GrowingLogEvidence_test.qnt","status":"ok"},"states":[{"#meta":{"index":0},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":false,"rootsValid":false,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":1},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":2},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":3},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"31"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":4},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":false,"phase":"deadline","remaining":{"#bigint":"31"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}}],"vars":["evidence"]} diff --git a/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.completeRecordWaitExhausted.itf.json b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.completeRecordWaitExhausted.itf.json index 0cede1f..36ece66 100644 --- a/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.completeRecordWaitExhausted.itf.json +++ b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.completeRecordWaitExhausted.itf.json @@ -1 +1 @@ -{"#meta":{"format":"ITF","format-description":"https://apalache-mc.org/docs/adr/015adr-trace.html","source":"GrowingLogEvidence_test.qnt","status":"ok"},"states":[{"#meta":{"index":0},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":false,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":1},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":2},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":3},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"31"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":4},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"30"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":5},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"29"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":6},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"28"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":7},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"27"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":8},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"26"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":9},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"25"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":10},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"24"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":11},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"23"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":12},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"22"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":13},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"21"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":14},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"20"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":15},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"19"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":16},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"18"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":17},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"17"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":18},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"16"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":19},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"15"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":20},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"14"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":21},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"13"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":22},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"12"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":23},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"11"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":24},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"10"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":25},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"9"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":26},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"8"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":27},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"7"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":28},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"6"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":29},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"5"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":30},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"4"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":31},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"3"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":32},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"2"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":33},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"1"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":34},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"0"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":35},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"refused","remaining":{"#bigint":"0"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}}],"vars":["evidence"]} +{"#meta":{"format":"ITF","format-description":"https://apalache-mc.org/docs/adr/015adr-trace.html","source":"GrowingLogEvidence_test.qnt","status":"ok"},"states":[{"#meta":{"index":0},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":false,"rootsValid":false,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":1},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":2},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":3},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"31"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":4},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"30"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":5},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"29"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":6},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"28"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":7},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"27"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":8},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"26"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":9},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"25"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":10},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"24"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":11},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"23"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":12},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"22"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":13},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"21"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":14},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"20"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":15},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"19"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":16},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"18"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":17},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"17"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":18},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"16"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":19},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"15"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":20},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"14"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":21},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"13"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":22},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"12"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":23},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"11"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":24},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"10"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":25},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"9"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":26},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"8"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":27},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"7"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":28},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"6"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":29},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"5"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":30},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"4"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":31},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"3"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":32},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"2"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":33},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"1"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":34},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"0"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":35},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"refused","remaining":{"#bigint":"0"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}}],"vars":["evidence"]} diff --git a/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.completeRecordWaitThenConsume.itf.json b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.completeRecordWaitThenConsume.itf.json index 5bfe0fe..3fa33c6 100644 --- a/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.completeRecordWaitThenConsume.itf.json +++ b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.completeRecordWaitThenConsume.itf.json @@ -1 +1 @@ -{"#meta":{"format":"ITF","format-description":"https://apalache-mc.org/docs/adr/015adr-trace.html","source":"GrowingLogEvidence_test.qnt","status":"ok"},"states":[{"#meta":{"index":0},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":false,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":1},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":2},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":3},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"31"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":4},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"30"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":5},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"30"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":6},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"started","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"30"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":7},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"ready","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"30"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":8},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"ready","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"30"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":9},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"evaluated","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"30"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":10},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"30"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":11},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"30"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}}],"vars":["evidence"]} +{"#meta":{"format":"ITF","format-description":"https://apalache-mc.org/docs/adr/015adr-trace.html","source":"GrowingLogEvidence_test.qnt","status":"ok"},"states":[{"#meta":{"index":0},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":false,"rootsValid":false,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":1},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":2},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":3},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"31"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":4},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"30"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":5},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"30"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":6},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"started","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"30"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":7},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"ready","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"30"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":8},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"ready","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"30"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":9},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"evaluated","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"30"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":10},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"30"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":11},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"30"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}}],"vars":["evidence"]} diff --git a/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.healthy.itf.json b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.healthy.itf.json index 0daed3c..c090060 100644 --- a/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.healthy.itf.json +++ b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.healthy.itf.json @@ -1 +1 @@ -{"#meta":{"format":"ITF","format-description":"https://apalache-mc.org/docs/adr/015adr-trace.html","source":"GrowingLogEvidence_test.qnt","status":"ok"},"states":[{"#meta":{"index":0},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":false,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":1},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation1","policyPhase":"started","prefixIntact":false,"producerMatches":false,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":2},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation1","policyPhase":"ready","prefixIntact":false,"producerMatches":false,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":3},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation1","policyPhase":"ready","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":4},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation1","policyPhase":"ready","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":5},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation1","policyPhase":"ready","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":6},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation1","policyPhase":"evaluated","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":7},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation1","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":8},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation1","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":9},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"2"},"phase":"sampled","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":10},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"2"},"phase":"sampled","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation2","policyPhase":"started","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":11},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"2"},"phase":"sampled","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation2","policyPhase":"ready","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":12},"evidence":{"authorityActive":true,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"normalization","logMatches":true,"observedRevision":{"#bigint":"2"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation2","policyPhase":"ready","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"2"},"writerPresent":true}},{"#meta":{"index":13},"evidence":{"authorityActive":true,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"normalization","logMatches":true,"observedRevision":{"#bigint":"2"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation2","policyPhase":"evaluated","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"2"},"writerPresent":true}},{"#meta":{"index":14},"evidence":{"authorityActive":true,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"normalization","logMatches":true,"observedRevision":{"#bigint":"2"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation2","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"2"},"writerPresent":true}},{"#meta":{"index":15},"evidence":{"authorityActive":false,"consumedBoundary":"normalization","consumedRevision":{"#bigint":"2"},"generation":{"#bigint":"1"},"intendedBoundary":"normalization","logMatches":true,"observedRevision":{"#bigint":"2"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation2","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"2"},"writerPresent":true}},{"#meta":{"index":16},"evidence":{"authorityActive":false,"consumedBoundary":"normalization","consumedRevision":{"#bigint":"2"},"generation":{"#bigint":"1"},"intendedBoundary":"normalization","logMatches":true,"observedRevision":{"#bigint":"3"},"phase":"sampled","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"2"},"writerPresent":true}},{"#meta":{"index":17},"evidence":{"authorityActive":false,"consumedBoundary":"normalization","consumedRevision":{"#bigint":"2"},"generation":{"#bigint":"1"},"intendedBoundary":"normalization","logMatches":true,"observedRevision":{"#bigint":"3"},"phase":"sampled","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation3","policyPhase":"started","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"2"},"writerPresent":true}},{"#meta":{"index":18},"evidence":{"authorityActive":false,"consumedBoundary":"normalization","consumedRevision":{"#bigint":"2"},"generation":{"#bigint":"1"},"intendedBoundary":"normalization","logMatches":true,"observedRevision":{"#bigint":"3"},"phase":"sampled","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation3","policyPhase":"ready","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"2"},"writerPresent":true}},{"#meta":{"index":19},"evidence":{"authorityActive":true,"consumedBoundary":"normalization","consumedRevision":{"#bigint":"2"},"generation":{"#bigint":"1"},"intendedBoundary":"release","logMatches":true,"observedRevision":{"#bigint":"3"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation3","policyPhase":"ready","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"3"},"writerPresent":true}},{"#meta":{"index":20},"evidence":{"authorityActive":true,"consumedBoundary":"normalization","consumedRevision":{"#bigint":"2"},"generation":{"#bigint":"1"},"intendedBoundary":"release","logMatches":true,"observedRevision":{"#bigint":"3"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation3","policyPhase":"evaluated","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"3"},"writerPresent":true}},{"#meta":{"index":21},"evidence":{"authorityActive":true,"consumedBoundary":"normalization","consumedRevision":{"#bigint":"2"},"generation":{"#bigint":"1"},"intendedBoundary":"release","logMatches":true,"observedRevision":{"#bigint":"3"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation3","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"3"},"writerPresent":true}},{"#meta":{"index":22},"evidence":{"authorityActive":false,"consumedBoundary":"release","consumedRevision":{"#bigint":"3"},"generation":{"#bigint":"1"},"intendedBoundary":"release","logMatches":true,"observedRevision":{"#bigint":"3"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation3","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"3"},"writerPresent":true}}],"vars":["evidence"]} +{"#meta":{"format":"ITF","format-description":"https://apalache-mc.org/docs/adr/015adr-trace.html","source":"GrowingLogEvidence_test.qnt","status":"ok"},"states":[{"#meta":{"index":0},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":false,"rootsValid":false,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":1},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation1","policyPhase":"started","prefixIntact":false,"producerMatches":false,"rootsValid":false,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":2},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation1","policyPhase":"ready","prefixIntact":false,"producerMatches":false,"rootsValid":false,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":3},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation1","policyPhase":"ready","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":4},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation1","policyPhase":"ready","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":5},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation1","policyPhase":"ready","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":6},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation1","policyPhase":"evaluated","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":7},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation1","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":8},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation1","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":9},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation1","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":10},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"2"},"phase":"sampled","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":11},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"2"},"phase":"sampled","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation2","policyPhase":"started","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":12},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"2"},"phase":"sampled","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation2","policyPhase":"ready","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":13},"evidence":{"authorityActive":true,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"normalization","logMatches":true,"observedRevision":{"#bigint":"2"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation2","policyPhase":"ready","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"2"},"writerPresent":true}},{"#meta":{"index":14},"evidence":{"authorityActive":true,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"normalization","logMatches":true,"observedRevision":{"#bigint":"2"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation2","policyPhase":"evaluated","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"2"},"writerPresent":true}},{"#meta":{"index":15},"evidence":{"authorityActive":true,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"normalization","logMatches":true,"observedRevision":{"#bigint":"2"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation2","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"2"},"writerPresent":true}},{"#meta":{"index":16},"evidence":{"authorityActive":false,"consumedBoundary":"normalization","consumedRevision":{"#bigint":"2"},"generation":{"#bigint":"1"},"intendedBoundary":"normalization","logMatches":true,"observedRevision":{"#bigint":"2"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation2","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"2"},"writerPresent":true}},{"#meta":{"index":17},"evidence":{"authorityActive":false,"consumedBoundary":"normalization","consumedRevision":{"#bigint":"2"},"generation":{"#bigint":"1"},"intendedBoundary":"normalization","logMatches":true,"observedRevision":{"#bigint":"2"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation2","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"2"},"writerPresent":true}},{"#meta":{"index":18},"evidence":{"authorityActive":false,"consumedBoundary":"normalization","consumedRevision":{"#bigint":"2"},"generation":{"#bigint":"1"},"intendedBoundary":"normalization","logMatches":true,"observedRevision":{"#bigint":"3"},"phase":"sampled","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"2"},"writerPresent":true}},{"#meta":{"index":19},"evidence":{"authorityActive":false,"consumedBoundary":"normalization","consumedRevision":{"#bigint":"2"},"generation":{"#bigint":"1"},"intendedBoundary":"normalization","logMatches":true,"observedRevision":{"#bigint":"3"},"phase":"sampled","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation3","policyPhase":"started","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"2"},"writerPresent":true}},{"#meta":{"index":20},"evidence":{"authorityActive":false,"consumedBoundary":"normalization","consumedRevision":{"#bigint":"2"},"generation":{"#bigint":"1"},"intendedBoundary":"normalization","logMatches":true,"observedRevision":{"#bigint":"3"},"phase":"sampled","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation3","policyPhase":"ready","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"2"},"writerPresent":true}},{"#meta":{"index":21},"evidence":{"authorityActive":true,"consumedBoundary":"normalization","consumedRevision":{"#bigint":"2"},"generation":{"#bigint":"1"},"intendedBoundary":"release","logMatches":true,"observedRevision":{"#bigint":"3"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation3","policyPhase":"ready","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"3"},"writerPresent":true}},{"#meta":{"index":22},"evidence":{"authorityActive":true,"consumedBoundary":"normalization","consumedRevision":{"#bigint":"2"},"generation":{"#bigint":"1"},"intendedBoundary":"release","logMatches":true,"observedRevision":{"#bigint":"3"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation3","policyPhase":"evaluated","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"3"},"writerPresent":true}},{"#meta":{"index":23},"evidence":{"authorityActive":true,"consumedBoundary":"normalization","consumedRevision":{"#bigint":"2"},"generation":{"#bigint":"1"},"intendedBoundary":"release","logMatches":true,"observedRevision":{"#bigint":"3"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation3","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"3"},"writerPresent":true}},{"#meta":{"index":24},"evidence":{"authorityActive":false,"consumedBoundary":"release","consumedRevision":{"#bigint":"3"},"generation":{"#bigint":"1"},"intendedBoundary":"release","logMatches":true,"observedRevision":{"#bigint":"3"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation3","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"3"},"writerPresent":true}},{"#meta":{"index":25},"evidence":{"authorityActive":false,"consumedBoundary":"release","consumedRevision":{"#bigint":"3"},"generation":{"#bigint":"1"},"intendedBoundary":"release","logMatches":true,"observedRevision":{"#bigint":"3"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation3","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"3"},"writerPresent":true}}],"vars":["evidence"]} diff --git a/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.pendingTailHasNoAuthority.itf.json b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.pendingTailHasNoAuthority.itf.json index 9d23715..31144b7 100644 --- a/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.pendingTailHasNoAuthority.itf.json +++ b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.pendingTailHasNoAuthority.itf.json @@ -1 +1 @@ -{"#meta":{"format":"ITF","format-description":"https://apalache-mc.org/docs/adr/015adr-trace.html","source":"GrowingLogEvidence_test.qnt","status":"ok"},"states":[{"#meta":{"index":0},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":false,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":1},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":2},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":3},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"closed","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}}],"vars":["evidence"]} +{"#meta":{"format":"ITF","format-description":"https://apalache-mc.org/docs/adr/015adr-trace.html","source":"GrowingLogEvidence_test.qnt","status":"ok"},"states":[{"#meta":{"index":0},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":false,"rootsValid":false,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":1},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":2},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":3},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"closed","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}}],"vars":["evidence"]} diff --git a/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.pendingThenCompleteResample.itf.json b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.pendingThenCompleteResample.itf.json index d30dce2..aaa062a 100644 --- a/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.pendingThenCompleteResample.itf.json +++ b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.pendingThenCompleteResample.itf.json @@ -1 +1 @@ -{"#meta":{"format":"ITF","format-description":"https://apalache-mc.org/docs/adr/015adr-trace.html","source":"GrowingLogEvidence_test.qnt","status":"ok"},"states":[{"#meta":{"index":0},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":false,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":1},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":2},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":3},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":4},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"31"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":5},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"30"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":6},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"2"},"phase":"sampled","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"30"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}}],"vars":["evidence"]} +{"#meta":{"format":"ITF","format-description":"https://apalache-mc.org/docs/adr/015adr-trace.html","source":"GrowingLogEvidence_test.qnt","status":"ok"},"states":[{"#meta":{"index":0},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":false,"rootsValid":false,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":1},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":2},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":3},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"31"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":4},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"31"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":5},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"31"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":6},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"30"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":7},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"29"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":8},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"2"},"phase":"sampled","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"29"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":9},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"2"},"phase":"sampled","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"started","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"29"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":10},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"2"},"phase":"sampled","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"ready","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"29"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":11},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"2"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"ready","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"29"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"2"},"writerPresent":true}},{"#meta":{"index":12},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"2"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"evaluated","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"29"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"2"},"writerPresent":true}},{"#meta":{"index":13},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"2"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"29"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"2"},"writerPresent":true}},{"#meta":{"index":14},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"2"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"2"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"29"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"2"},"writerPresent":true}}],"vars":["evidence"]} diff --git a/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.policyClosureDriftIsSticky.itf.json b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.policyClosureDriftIsSticky.itf.json index f0b3b85..639a2a4 100644 --- a/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.policyClosureDriftIsSticky.itf.json +++ b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.policyClosureDriftIsSticky.itf.json @@ -1 +1 @@ -{"#meta":{"format":"ITF","format-description":"https://apalache-mc.org/docs/adr/015adr-trace.html","source":"GrowingLogEvidence_test.qnt","status":"ok"},"states":[{"#meta":{"index":0},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":false,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":1},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"started","prefixIntact":false,"producerMatches":false,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":2},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"ready","prefixIntact":false,"producerMatches":false,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":3},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"ready","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":4},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"ready","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":5},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"ready","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":6},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"evaluated","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":7},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"invalid","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"invalid","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":true,"validatedRevision":{"#bigint":"1"},"writerPresent":true}}],"vars":["evidence"]} +{"#meta":{"format":"ITF","format-description":"https://apalache-mc.org/docs/adr/015adr-trace.html","source":"GrowingLogEvidence_test.qnt","status":"ok"},"states":[{"#meta":{"index":0},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":false,"rootsValid":false,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":1},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"started","prefixIntact":false,"producerMatches":false,"rootsValid":false,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":2},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"ready","prefixIntact":false,"producerMatches":false,"rootsValid":false,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":3},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"ready","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":4},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"ready","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":5},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"ready","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":6},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"evaluated","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":7},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"invalid","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"invalid","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":true,"validatedRevision":{"#bigint":"1"},"writerPresent":true}}],"vars":["evidence"]} diff --git a/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.qnt b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.qnt index 9653f60..ae6addb 100644 --- a/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.qnt +++ b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.qnt @@ -1,5 +1,5 @@ module GrowingLogEvidence { - type Settlement = { phase: str, remaining: int, deadlineAvailable: bool } + type Settlement = { phase: str, boundary: str, remaining: int, deadlineAvailable: bool } type Evidence = { phase: str, generation: int, @@ -30,12 +30,14 @@ module GrowingLogEvidence { logMatches: false, sourceMatches: false, rootsValid: false, prefixIntact: false, writerPresent: false, authorityActive: false, stickyInvalid: false, policyPhase: "none", policyInvocation: "none", policyClosure: "none", - settlement: { phase: "idle", remaining: 32, deadlineAvailable: true }, + settlement: { phase: "idle", boundary: "none", remaining: 32, deadlineAvailable: true }, } action beginPolicy(invocation: str, closure: str): bool = all { evidence.phase != "invalid", evidence.phase != "unknown", evidence.phase != "closed", evidence.policyPhase == "none", + evidence.settlement.phase == "idle" or evidence.settlement.phase == "candidate", + evidence.settlement.deadlineAvailable, invocation != "none", closure != "none", evidence' = { ...evidence, policyPhase: "started", policyInvocation: invocation, policyClosure: closure } } @@ -63,25 +65,38 @@ module GrowingLogEvidence { writerPresent: true } } - action beginSettlement = all { + def canBeginSettlement(boundary: str): bool = all { evidence.phase != "invalid", evidence.phase != "unknown", evidence.phase != "closed", - evidence.settlement.phase == "idle" or evidence.settlement.phase == "candidate", + evidence.settlement.phase == "idle", + boundary == "browser" or boundary == "normalization" or boundary == "release", + } + + action beginSettlement(boundary: str): bool = all { + canBeginSettlement(boundary), + evidence' = { ...evidence, authorityActive: false, + settlement: { phase: "probing", boundary: boundary, remaining: 32, deadlineAvailable: true } } + } + + action retrySettlement(boundary: str): bool = all { + evidence.phase != "invalid", evidence.phase != "unknown", evidence.phase != "closed", + evidence.settlement.phase == "candidate", evidence.settlement.boundary == boundary, + evidence.settlement.deadlineAvailable, evidence.settlement.remaining > 0, evidence' = { ...evidence, authorityActive: false, - settlement: { phase: "probing", remaining: 32, deadlineAvailable: true } } + settlement: { ...evidence.settlement, phase: "probing" } } } action incompleteRecordProbe = all { evidence.settlement.phase == "probing", evidence.settlement.deadlineAvailable, evidence.settlement.remaining > 0, evidence' = { ...evidence, - settlement: { phase: "probing", remaining: evidence.settlement.remaining - 1, deadlineAvailable: true } } + settlement: { ...evidence.settlement, phase: "probing", remaining: evidence.settlement.remaining - 1 } } } action completeRecordCandidate = all { evidence.settlement.phase == "probing", evidence.settlement.deadlineAvailable, evidence.settlement.remaining > 0, evidence' = { ...evidence, - settlement: { phase: "candidate", remaining: evidence.settlement.remaining - 1, deadlineAvailable: true } } + settlement: { ...evidence.settlement, phase: "candidate", remaining: evidence.settlement.remaining - 1 } } } action recordSettlementExhausted = all { @@ -98,6 +113,7 @@ module GrowingLogEvidence { action sampleInitial = all { evidence.phase == "acquired", + evidence.settlement.phase == "idle" or evidence.settlement.phase == "candidate", evidence' = { ...evidence, phase: "sampled", observedRevision: 1, rootsValid: true, prefixIntact: true } } @@ -112,6 +128,7 @@ module GrowingLogEvidence { action validate(boundary: str): bool = all { evidence.phase == "sampled", evidence.settlement.phase == "idle" or evidence.settlement.phase == "candidate", + evidence.settlement.phase == "idle" or evidence.settlement.boundary == boundary, boundary == "browser" or boundary == "normalization" or boundary == "release", not(evidence.stickyInvalid), evidence.producerMatches, evidence.logMatches, evidence.sourceMatches, evidence.writerPresent, evidence.rootsValid, @@ -121,18 +138,31 @@ module GrowingLogEvidence { authorityActive: true } } - action consume(boundary: str): bool = all { + def canConsume(boundary: str): bool = all { evidence.phase == "validated", evidence.policyPhase == "completed", boundary == "browser" or boundary == "normalization" or boundary == "release", evidence.validatedRevision == evidence.observedRevision, evidence.intendedBoundary == boundary, + evidence.authorityActive, evidence.settlement.deadlineAvailable, + evidence.settlement.phase == "idle" or all { evidence.settlement.phase == "candidate", evidence.settlement.boundary == boundary }, not(evidence.stickyInvalid), + } + + action consume(boundary: str): bool = all { + canConsume(boundary), evidence' = { ...evidence, phase: "consumed", consumedRevision: evidence.observedRevision, consumedBoundary: boundary, authorityActive: false } } + action completeBoundary(boundary: str): bool = all { + evidence.phase == "consumed", evidence.consumedBoundary == boundary, + evidence.settlement.phase == "idle" or all { evidence.settlement.phase == "candidate", evidence.settlement.boundary == boundary }, + evidence' = { ...evidence, + settlement: { ...evidence.settlement, phase: "idle", boundary: "none" } } + } + action benignAppend = all { evidence.phase == "validated" or evidence.phase == "consumed", evidence.observedRevision < 3, @@ -181,10 +211,12 @@ module GrowingLogEvidence { } action step = any { - acquire, beginSettlement, incompleteRecordProbe, completeRecordCandidate, + acquire, beginSettlement("browser"), beginSettlement("normalization"), beginSettlement("release"), + retrySettlement("browser"), retrySettlement("normalization"), retrySettlement("release"), incompleteRecordProbe, completeRecordCandidate, recordSettlementExhausted, recordSettlementDeadline, pendingCompleteResample, sampleInitial, validate("browser"), validate("normalization"), validate("release"), consume("browser"), consume("normalization"), consume("release"), + completeBoundary("browser"), completeBoundary("normalization"), completeBoundary("release"), benignAppend, pendingTail, staleBoundary, prefixRewrite, prefixTruncate, replacement, wrongWriter, wrongGeneration, wrongSource, contradictorySuffix, unavailable, close, beginPolicy("invocation", "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"), readyPolicy("invocation", "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"), @@ -214,9 +246,14 @@ module GrowingLogEvidence { } val settlementIsBounded = evidence.settlement.remaining >= 0 and evidence.settlement.remaining <= 32 val waitingDoesNotAuthorize = evidence.settlement.phase != "probing" or not(evidence.authorityActive) + val terminalSettlementDoesNotAuthorize = + (evidence.settlement.phase != "deadline" and evidence.settlement.phase != "refused") or not(evidence.authorityActive) + val settlementBoundaryIsClosed = evidence.settlement.boundary == "none" or evidence.settlement.boundary == "browser" or evidence.settlement.boundary == "normalization" or evidence.settlement.boundary == "release" + val idleSettlementHasNoBoundary = evidence.settlement.phase != "idle" or evidence.settlement.boundary == "none" val invariant = all { consumedOnlyValidated, currentConsumptionMatchesValidation, authorityRequiresIdentity, invalidityIsSticky, terminalCannotValidate, boundaryIsClosed, intendedBoundaryIsClosed, policyAuthorityIsCausal, settlementIsBounded, waitingDoesNotAuthorize, + terminalSettlementDoesNotAuthorize, settlementBoundaryIsClosed, idleSettlementHasNoBoundary, } } diff --git a/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.sharedBudgetAcrossEvaluations.itf.json b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.sharedBudgetAcrossEvaluations.itf.json new file mode 100644 index 0000000..e4ac24f --- /dev/null +++ b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.sharedBudgetAcrossEvaluations.itf.json @@ -0,0 +1 @@ +{"#meta":{"format":"ITF","format-description":"https://apalache-mc.org/docs/adr/015adr-trace.html","source":"GrowingLogEvidence_test.qnt","status":"ok"},"states":[{"#meta":{"index":0},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":false,"rootsValid":false,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":1},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":2},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":3},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"31"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":4},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"31"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":5},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"started","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"31"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":6},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"ready","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"31"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":7},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"ready","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"31"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":8},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"evaluated","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"31"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":9},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"31"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":10},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"31"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":11},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"31"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":12},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"30"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":13},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"29"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":14},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"28"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":15},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"27"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":16},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"26"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":17},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"25"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":18},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"24"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":19},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"23"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":20},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"22"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":21},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"21"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":22},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"20"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":23},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"19"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":24},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"18"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":25},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"17"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":26},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"16"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":27},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"15"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":28},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"14"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":29},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"13"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":30},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"12"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":31},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"11"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":32},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"10"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":33},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"9"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":34},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"8"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":35},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"7"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":36},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"6"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":37},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"5"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":38},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"4"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":39},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"3"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":40},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"2"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":41},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"1"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":42},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"0"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":43},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"refused","remaining":{"#bigint":"0"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}}],"vars":["evidence"]} diff --git a/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.staleBoundaryCannotConsume.itf.json b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.staleBoundaryCannotConsume.itf.json index c3b6c79..6742f6a 100644 --- a/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.staleBoundaryCannotConsume.itf.json +++ b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.staleBoundaryCannotConsume.itf.json @@ -1 +1 @@ -{"#meta":{"format":"ITF","format-description":"https://apalache-mc.org/docs/adr/015adr-trace.html","source":"GrowingLogEvidence_test.qnt","status":"ok"},"states":[{"#meta":{"index":0},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":false,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":1},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":2},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":3},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":4},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"invalid","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":true,"validatedRevision":{"#bigint":"1"},"writerPresent":true}}],"vars":["evidence"]} +{"#meta":{"format":"ITF","format-description":"https://apalache-mc.org/docs/adr/015adr-trace.html","source":"GrowingLogEvidence_test.qnt","status":"ok"},"states":[{"#meta":{"index":0},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":false,"rootsValid":false,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":1},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":2},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":3},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":4},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"invalid","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":true,"validatedRevision":{"#bigint":"1"},"writerPresent":true}}],"vars":["evidence"]} diff --git a/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.unavailableAfterConsumptionPreservesHistoryOnly.itf.json b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.unavailableAfterConsumptionPreservesHistoryOnly.itf.json index 9ee1619..80d66f3 100644 --- a/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.unavailableAfterConsumptionPreservesHistoryOnly.itf.json +++ b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.unavailableAfterConsumptionPreservesHistoryOnly.itf.json @@ -1 +1 @@ -{"#meta":{"format":"ITF","format-description":"https://apalache-mc.org/docs/adr/015adr-trace.html","source":"GrowingLogEvidence_test.qnt","status":"ok"},"states":[{"#meta":{"index":0},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":false,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":1},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"started","prefixIntact":false,"producerMatches":false,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":2},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"ready","prefixIntact":false,"producerMatches":false,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":3},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"ready","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":4},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"ready","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":5},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"ready","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":6},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"evaluated","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":7},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":8},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":9},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"unknown","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":true,"validatedRevision":{"#bigint":"1"},"writerPresent":false}}],"vars":["evidence"]} +{"#meta":{"format":"ITF","format-description":"https://apalache-mc.org/docs/adr/015adr-trace.html","source":"GrowingLogEvidence_test.qnt","status":"ok"},"states":[{"#meta":{"index":0},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":false,"rootsValid":false,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":1},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"started","prefixIntact":false,"producerMatches":false,"rootsValid":false,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":2},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"ready","prefixIntact":false,"producerMatches":false,"rootsValid":false,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":3},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"ready","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":4},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"ready","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":5},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"ready","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":6},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"evaluated","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":7},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":8},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":9},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"unknown","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":true,"validatedRevision":{"#bigint":"1"},"writerPresent":false}}],"vars":["evidence"]} diff --git a/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.unavailableAfterValidationRevokesCurrentAuthority.itf.json b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.unavailableAfterValidationRevokesCurrentAuthority.itf.json index a11a2c5..288ffaa 100644 --- a/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.unavailableAfterValidationRevokesCurrentAuthority.itf.json +++ b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.unavailableAfterValidationRevokesCurrentAuthority.itf.json @@ -1 +1 @@ -{"#meta":{"format":"ITF","format-description":"https://apalache-mc.org/docs/adr/015adr-trace.html","source":"GrowingLogEvidence_test.qnt","status":"ok"},"states":[{"#meta":{"index":0},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":false,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":1},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":2},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":3},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":4},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"unknown","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":true,"validatedRevision":{"#bigint":"1"},"writerPresent":false}}],"vars":["evidence"]} +{"#meta":{"format":"ITF","format-description":"https://apalache-mc.org/docs/adr/015adr-trace.html","source":"GrowingLogEvidence_test.qnt","status":"ok"},"states":[{"#meta":{"index":0},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":false,"rootsValid":false,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":1},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":2},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":3},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":4},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"unknown","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":true,"validatedRevision":{"#bigint":"1"},"writerPresent":false}}],"vars":["evidence"]} diff --git a/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.waitAfterConsumptionHasNoNewAuthority.itf.json b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.waitAfterConsumptionHasNoNewAuthority.itf.json index f2566fe..c7eb801 100644 --- a/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.waitAfterConsumptionHasNoNewAuthority.itf.json +++ b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.waitAfterConsumptionHasNoNewAuthority.itf.json @@ -1 +1 @@ -{"#meta":{"format":"ITF","format-description":"https://apalache-mc.org/docs/adr/015adr-trace.html","source":"GrowingLogEvidence_test.qnt","status":"ok"},"states":[{"#meta":{"index":0},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":false,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":1},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":2},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":3},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"31"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":4},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"31"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":5},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"started","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"31"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":6},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"ready","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"31"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":7},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"ready","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"31"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":8},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"evaluated","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"31"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":9},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"31"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":10},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"31"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":11},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":12},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"31"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}}],"vars":["evidence"]} +{"#meta":{"format":"ITF","format-description":"https://apalache-mc.org/docs/adr/015adr-trace.html","source":"GrowingLogEvidence_test.qnt","status":"ok"},"states":[{"#meta":{"index":0},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":false,"rootsValid":false,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":1},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":2},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":3},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"31"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":4},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"31"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":5},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"started","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"31"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":6},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"ready","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"31"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":7},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"ready","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"31"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":8},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"evaluated","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"31"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":9},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"31"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":10},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"31"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":11},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"31"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":12},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"normalization","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":13},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"normalization","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"31"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":14},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"normalization","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"30"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":15},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"normalization","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"29"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":16},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"normalization","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"28"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":17},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"normalization","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"27"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":18},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"normalization","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"26"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":19},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"normalization","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"25"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":20},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"normalization","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"24"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":21},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"normalization","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"23"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":22},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"normalization","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"22"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":23},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"normalization","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"21"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":24},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"normalization","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"20"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":25},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"normalization","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"19"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":26},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"normalization","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"18"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":27},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"normalization","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"17"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":28},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"normalization","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"16"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":29},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"normalization","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"15"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":30},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"normalization","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"14"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":31},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"normalization","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"13"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":32},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"normalization","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"12"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":33},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"normalization","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"11"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":34},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"normalization","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"10"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":35},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"normalization","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"9"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":36},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"normalization","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"8"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":37},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"normalization","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"7"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":38},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"normalization","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"6"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":39},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"normalization","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"5"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":40},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"normalization","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"4"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":41},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"normalization","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"3"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":42},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"normalization","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"2"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":43},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"normalization","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"1"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":44},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"normalization","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"0"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":45},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"normalization","deadlineAvailable":true,"phase":"refused","remaining":{"#bigint":"0"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}}],"vars":["evidence"]} diff --git a/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence_test.qnt b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence_test.qnt index 6fd42f7..0069d26 100644 --- a/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence_test.qnt +++ b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence_test.qnt @@ -3,9 +3,9 @@ module GrowingLogEvidence_test { run healthyBoundaries = init.then(beginPolicy("invocation1","cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")).then(readyPolicy("invocation1","cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")).then(acquire).then(sampleInitial).then(validate("browser")) .then(evaluatedPolicy("invocation1","cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")).then(completePolicy("invocation1","cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")) - .then(consume("browser")).then(benignAppend).then(beginPolicy("invocation2","cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")).then(readyPolicy("invocation2","cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")).then(validate("normalization")).then(evaluatedPolicy("invocation2","cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")).then(completePolicy("invocation2","cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")) - .then(consume("normalization")).then(benignAppend).then(beginPolicy("invocation3","cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")).then(readyPolicy("invocation3","cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")).then(validate("release")).then(evaluatedPolicy("invocation3","cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")).then(completePolicy("invocation3","cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")) - .then(consume("release")).expect(invariant and evidence.consumedRevision == 3) + .then(consume("browser")).then(completeBoundary("browser")).then(benignAppend).then(beginPolicy("invocation2","cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")).then(readyPolicy("invocation2","cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")).then(validate("normalization")).then(evaluatedPolicy("invocation2","cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")).then(completePolicy("invocation2","cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")) + .then(consume("normalization")).then(completeBoundary("normalization")).then(benignAppend).then(beginPolicy("invocation3","cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")).then(readyPolicy("invocation3","cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")).then(validate("release")).then(evaluatedPolicy("invocation3","cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")).then(completePolicy("invocation3","cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")) + .then(consume("release")).then(completeBoundary("release")).expect(invariant and evidence.consumedRevision == 3) run rewriteIsSticky = init.then(acquire).then(sampleInitial).then(beginPolicy("invocation","cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")).then(readyPolicy("invocation","cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")).then(evaluatedPolicy("invocation","cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")).then(completePolicy("invocation","cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")).then(validate("browser")) .then(consume("browser")).then(invalidate).then(close) @@ -49,23 +49,40 @@ module GrowingLogEvidence_test { .expect(invariant and evidence.policyPhase == "invalid" and evidence.stickyInvalid) - run completeRecordWaitThenConsume = init.then(acquire).then(beginSettlement).then(incompleteRecordProbe).then(completeRecordCandidate).then(sampleInitial) + run completeRecordWaitThenConsume = init.then(acquire).then(beginSettlement("browser")).then(incompleteRecordProbe).then(completeRecordCandidate).then(sampleInitial) .then(beginPolicy("invocation","cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")).then(readyPolicy("invocation","cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")) .then(validate("browser")).then(evaluatedPolicy("invocation","cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")).then(completePolicy("invocation","cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")).then(consume("browser")) .expect(invariant and evidence.consumedRevision == 1 and evidence.settlement.remaining == 30) - run completeRecordWaitExhausted = init.then(acquire).then(beginSettlement).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(recordSettlementExhausted) + run completeRecordWaitExhausted = init.then(acquire).then(beginSettlement("browser")).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(recordSettlementExhausted) .expect(invariant and evidence.observedRevision == 0 and evidence.consumedRevision == 0 and evidence.settlement.phase == "refused") - run completeRecordWaitDeadline = init.then(acquire).then(beginSettlement).then(incompleteRecordProbe).then(recordSettlementDeadline) + run completeRecordWaitDeadline = init.then(acquire).then(beginSettlement("browser")).then(incompleteRecordProbe).then(recordSettlementDeadline) .expect(invariant and evidence.observedRevision == 0 and evidence.consumedRevision == 0 and evidence.settlement.phase == "deadline") - run waitAfterConsumptionHasNoNewAuthority = init.then(acquire).then(beginSettlement).then(completeRecordCandidate).then(sampleInitial) + run waitAfterConsumptionHasNoNewAuthority = init.then(acquire).then(beginSettlement("browser")).then(completeRecordCandidate).then(sampleInitial) .then(beginPolicy("invocation","cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")).then(readyPolicy("invocation","cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")) - .then(validate("browser")).then(evaluatedPolicy("invocation","cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")).then(completePolicy("invocation","cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")).then(consume("browser")) - .then(beginSettlement).then(incompleteRecordProbe) - .expect(invariant and evidence.consumedRevision == 1 and not(evidence.authorityActive) and evidence.settlement.phase == "probing") + .then(validate("browser")).then(evaluatedPolicy("invocation","cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")).then(completePolicy("invocation","cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")).then(consume("browser")).then(completeBoundary("browser")) + .then(beginSettlement("normalization")).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(recordSettlementExhausted) + .expect(invariant and evidence.consumedRevision == 1 and not(evidence.authorityActive) and evidence.settlement.phase == "refused") + + run pendingThenCompleteResample = init.then(acquire).then(beginSettlement("browser")).then(completeRecordCandidate).then(pendingTail) + .then(retrySettlement("browser")).then(incompleteRecordProbe).then(completeRecordCandidate).then(pendingCompleteResample) + .then(beginPolicy("invocation","cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")).then(readyPolicy("invocation","cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")).then(validate("browser")).then(evaluatedPolicy("invocation","cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")).then(completePolicy("invocation","cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")).then(consume("browser")) + .expect(invariant and evidence.observedRevision == 2 and evidence.consumedRevision == 2 and evidence.settlement.remaining == 29) + + run sharedBudgetAcrossEvaluations = init.then(acquire).then(beginSettlement("browser")).then(completeRecordCandidate).then(sampleInitial).then(beginPolicy("invocation","cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")).then(readyPolicy("invocation","cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")).then(validate("browser")).then(evaluatedPolicy("invocation","cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")).then(completePolicy("invocation","cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")).then(consume("browser")).then(retrySettlement("browser")).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(recordSettlementExhausted) + .expect(invariant and evidence.observedRevision == 1 and evidence.settlement.phase == "refused" and evidence.settlement.remaining == 0) + + run candidateCannotRenewBudget = init.then(acquire).then(beginSettlement("browser")).then(completeRecordCandidate) + .expect(invariant and evidence.settlement.remaining == 31 and not(canBeginSettlement("browser"))) + + run terminalSettlementCannotConsume = init.then(acquire).then(sampleInitial) + .then(beginPolicy("invocation","cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")).then(readyPolicy("invocation","cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")) + .then(validate("browser")).then(evaluatedPolicy("invocation","cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")).then(completePolicy("invocation","cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")) + .then(beginSettlement("browser")).then(recordSettlementDeadline) + .expect(invariant and evidence.consumedRevision == 0 and not(canConsume("browser"))) - run pendingThenCompleteResample = init.then(acquire).then(pendingTail).then(beginSettlement).then(incompleteRecordProbe).then(completeRecordCandidate).then(pendingCompleteResample) - .expect(invariant and evidence.observedRevision == 2 and evidence.validatedRevision == 0 and evidence.settlement.phase == "candidate") + run retriesShareOneProbeBudget = init.then(acquire).then(beginSettlement("browser")).then(completeRecordCandidate).then(retrySettlement("browser")).then(incompleteRecordProbe).then(completeRecordCandidate).then(retrySettlement("browser")) + .expect(invariant and evidence.settlement.phase == "probing" and evidence.settlement.remaining == 29 and not(canBeginSettlement("browser"))) } diff --git a/tests/Broker.NativeProof/RuntimeEvidence/README.md b/tests/Broker.NativeProof/RuntimeEvidence/README.md index b60c20b..1818550 100644 --- a/tests/Broker.NativeProof/RuntimeEvidence/README.md +++ b/tests/Broker.NativeProof/RuntimeEvidence/README.md @@ -20,6 +20,10 @@ submits a sample. Incomplete probes do not call this reducer or advance a revisi canonical Quint settlement record models the 32-probe budget, deadline refusal, wait without authority, and pending-to-complete resampling while this F# reducer remains the only policy state transition. +The combined gate requires a freshly generated six-scenario helper transcript and binds +its bytes and the helper implementation into replay evidence. Boundary entry alone resets +the 32-probe budget; retries preserve it. Deadline and exhaustion block current +consumption while historical consumed state remains evidence only. Before it reads a request, the executable accepts only `--closure-manifest PATH --closure-sha256 HEX --invocation-id ID`. It verifies an exact diff --git a/tests/Broker.NativeProof/RuntimeEvidence/tests/check-runtime-evidence.sh b/tests/Broker.NativeProof/RuntimeEvidence/tests/check-runtime-evidence.sh index d5f632a..b569087 100755 --- a/tests/Broker.NativeProof/RuntimeEvidence/tests/check-runtime-evidence.sh +++ b/tests/Broker.NativeProof/RuntimeEvidence/tests/check-runtime-evidence.sh @@ -5,7 +5,7 @@ export DOTNET_PROCESSOR_COUNT="${DOTNET_PROCESSOR_COUNT:-1}" test "$(quint --version)" = "0.32.0" quint typecheck "$ROOT/GrowingLogEvidence.qnt" quint typecheck "$ROOT/GrowingLogEvidence_test.qnt" -quint test "$ROOT/GrowingLogEvidence_test.qnt" --main GrowingLogEvidence_test --match '^(healthyBoundaries|rewriteIsSticky|unavailableCannotGrant|unavailableAfterValidationRevokesCurrentAuthority|unavailableAfterConsumptionPreservesHistoryOnly|staleBoundaryCannotConsume|pendingTailHasNoAuthority|closeRevokesCurrentAuthority|truncateIsSticky|replacementIsSticky|wrongWriterIsSticky|wrongGenerationIsSticky|wrongSourceIsSticky|contradictorySuffixIsSticky|policyInvocationCompletesSameClosure|policyClosureDriftIsSticky|completeRecordWaitThenConsume|completeRecordWaitExhausted|completeRecordWaitDeadline|waitAfterConsumptionHasNoNewAuthority|pendingThenCompleteResample)$' --seed 424242 --max-samples 1 +quint test "$ROOT/GrowingLogEvidence_test.qnt" --main GrowingLogEvidence_test --match '^(healthyBoundaries|rewriteIsSticky|unavailableCannotGrant|unavailableAfterValidationRevokesCurrentAuthority|unavailableAfterConsumptionPreservesHistoryOnly|staleBoundaryCannotConsume|pendingTailHasNoAuthority|closeRevokesCurrentAuthority|truncateIsSticky|replacementIsSticky|wrongWriterIsSticky|wrongGenerationIsSticky|wrongSourceIsSticky|contradictorySuffixIsSticky|policyInvocationCompletesSameClosure|policyClosureDriftIsSticky|completeRecordWaitThenConsume|completeRecordWaitExhausted|completeRecordWaitDeadline|waitAfterConsumptionHasNoNewAuthority|pendingThenCompleteResample|sharedBudgetAcrossEvaluations|candidateCannotRenewBudget|terminalSettlementCannotConsume|retriesShareOneProbeBudget)$' --seed 424242 --max-samples 1 quint run "$ROOT/GrowingLogEvidence.qnt" --seed 424242 --max-samples 500 --max-steps 16 --invariant invariant --verbosity 1 TMP=$(mktemp -d) trap 'python3 - "$TMP" <<'"'"'PY'"'"' @@ -39,10 +39,19 @@ completeRecordWaitExhausted|GrowingLogEvidence.completeRecordWaitExhausted.itf.j completeRecordWaitDeadline|GrowingLogEvidence.completeRecordWaitDeadline.itf.json waitAfterConsumptionHasNoNewAuthority|GrowingLogEvidence.waitAfterConsumptionHasNoNewAuthority.itf.json pendingThenCompleteResample|GrowingLogEvidence.pendingThenCompleteResample.itf.json +sharedBudgetAcrossEvaluations|GrowingLogEvidence.sharedBudgetAcrossEvaluations.itf.json EOF dotnet restore "$ROOT/RuntimeEvidence.Tests.fsproj" --locked-mode dotnet build "$ROOT/RuntimeEvidence.Tests.fsproj" -c Release --no-restore -m:1 -dotnet run --project "$ROOT/RuntimeEvidence.Tests.fsproj" -c Release --no-build +: "${BAR_GROWING_LOG_HELPER:?BAR_GROWING_LOG_HELPER is required for complete-record correspondence}" +test -f "$BAR_GROWING_LOG_HELPER/growing_log.py" +TRANSCRIPT="$TMP/complete-record-correspondence.json" +(cd "$BAR_GROWING_LOG_HELPER" && \ + BAR_RUNTIME_EVIDENCE_BUILD="$ROOT/bin/RuntimeEvidence/Release/net10.0" \ + BAR_RUNTIME_EVIDENCE_SOURCE="$(cd "$ROOT/../../.." && pwd)" \ + BAR_SETTLEMENT_TRANSCRIPT="$TRANSCRIPT" \ + python3 -m unittest -v test_growing_log.GrowingLogTests.test_required_complete_record_correspondence_bundle) +BAR_GROWING_LOG_HELPER="$BAR_GROWING_LOG_HELPER" BAR_SETTLEMENT_TRANSCRIPT="$TRANSCRIPT" dotnet run --project "$ROOT/RuntimeEvidence.Tests.fsproj" -c Release --no-build POLICY_OUTPUT="$ROOT/bin/RuntimeEvidence/Release/net10.0" for artifact in RuntimeEvidence RuntimeEvidence.dll RuntimeEvidence.deps.json RuntimeEvidence.runtimeconfig.json FSharp.Core.dll; do From 08164ee9976bc106d2f16063af26c581f549254a Mon Sep 17 00:00:00 2001 From: EHotwagner Date: Fri, 2 Oct 2026 12:00:22 +0200 Subject: [PATCH 03/12] Bind settlement transcripts to full state and ordered effects --- .../RuntimeEvidence/CorrespondenceTests.fs | 144 +++++++++++++----- ...e.lastProbeCandidateThenExhausted.itf.json | 1 + .../RuntimeEvidence/GrowingLogEvidence.qnt | 6 +- .../GrowingLogEvidence_test.qnt | 3 + .../RuntimeEvidence/README.md | 7 +- .../tests/check-runtime-evidence.sh | 3 +- 6 files changed, 122 insertions(+), 42 deletions(-) create mode 100644 tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.lastProbeCandidateThenExhausted.itf.json diff --git a/tests/Broker.NativeProof/RuntimeEvidence/CorrespondenceTests.fs b/tests/Broker.NativeProof/RuntimeEvidence/CorrespondenceTests.fs index c26f47f..ef07de5 100644 --- a/tests/Broker.NativeProof/RuntimeEvidence/CorrespondenceTests.fs +++ b/tests/Broker.NativeProof/RuntimeEvidence/CorrespondenceTests.fs @@ -50,47 +50,98 @@ module CorrespondenceTests = let actual=element.EnumerateObject()|>Seq.map _.Name|>Set.ofSeq if actual<>set names then failwith "closed settlement transcript object" exactNames transcript ["schema";"helperSha256";"scenarios"] - if transcript.GetProperty("schema").GetString()<>"fsbar.barc-complete-record-settlement-correspondence/v1" || transcript.GetProperty("helperSha256").GetString()<>hashFile helperPath then failwith "settlement helper/transcript binding" + if transcript.GetProperty("schema").GetString()<>"fsbar.barc-complete-record-settlement-correspondence/v2" || transcript.GetProperty("helperSha256").GetString()<>hashFile helperPath then failwith "settlement helper/transcript binding" let scenarios=transcript.GetProperty("scenarios").EnumerateArray()|>Seq.toArray - if scenarios.Length<>6 then failwith "closed settlement scenario census" + if scenarios.Length<>7 then failwith "closed settlement scenario census" let scenario name = - let matches=scenarios|>Array.filter(fun row->exactNames row ["name";"events";"effects"];row.GetProperty("name").GetString()=name) + let matches=scenarios|>Array.filter(fun row->exactNames row ["name";"timeline"];row.GetProperty("name").GetString()=name) if matches.Length<>1 then failwithf "required settlement scenario absent/duplicate: %s" name matches[0] + let timeline name=(scenario name).GetProperty("timeline").EnumerateArray()|>Seq.toArray let events name = - scenario name|>fun row->row.GetProperty("events").EnumerateArray()|>Seq.mapi(fun index event-> - exactNames event ["event";"probe";"remaining"] + timeline name|>Array.filter(fun event->event.GetProperty("kind").GetString()="probe")|>Array.mapi(fun index event-> + exactNames event ["kind";"event";"probe";"remaining"] let kind=event.GetProperty("event").GetString() let probe=event.GetProperty("probe").GetInt32() let remaining=event.GetProperty("remaining").GetInt32() if (kind<>"incomplete" && kind<>"complete") || probe<>index+1 || remaining<>32-probe then failwithf "noncausal settlement event: %s" name - kind,probe,remaining)|>Seq.toList - let effects name = - let value=(scenario name).GetProperty("effects") - exactNames value ["policyCalls";"revisions";"outcome";"check";"beforeState";"afterState"] - value - let requireEffects name calls revisions outcome check = - let value=effects name - let actualRevisions=value.GetProperty("revisions").EnumerateArray()|>Seq.map _.GetInt32()|>Seq.toList - let actualCheck=if value.GetProperty("check").ValueKind=JsonValueKind.Null then None else Some(value.GetProperty("check").GetString()) - if value.GetProperty("policyCalls").GetInt32()<>calls || actualRevisions<>revisions || value.GetProperty("outcome").GetString()<>outcome || actualCheck<>check then failwithf "settlement effects mismatch: %s" name - requireEffects "completeRecordWaitThenConsume" 1 [1] "accepted" None - requireEffects "completeRecordWaitExhausted" 0 [] "refused" (Some "infolog-record-settlement-exhausted") - requireEffects "completeRecordWaitDeadline" 0 [] "deadline" (Some "infolog-record-settlement-deadline") - requireEffects "sharedBudgetAcrossEvaluations" 1 [1] "refused" (Some "infolog-record-settlement-exhausted") - requireEffects "pendingThenCompleteResample" 2 [1;2] "accepted" None - requireEffects "waitAfterConsumptionHasNoNewAuthority" 0 [] "refused" (Some "infolog-record-settlement-exhausted") - for name in ["completeRecordWaitExhausted";"completeRecordWaitDeadline"] do - let value=effects name - if value.GetProperty("beforeState").ValueKind<>JsonValueKind.Null || value.GetProperty("afterState").ValueKind<>JsonValueKind.Null then failwithf "mechanical wait changed production state: %s" name - let historical=effects "waitAfterConsumptionHasNoNewAuthority" - if historical.GetProperty("beforeState").GetRawText()<>historical.GetProperty("afterState").GetRawText() then failwith "wait changed historical production state" - let requireProductionState name (element:JsonElement) (value:EvidenceState) = - exactNames element ["phase";"observedRevision";"validatedRevision";"validatedBoundary";"consumedRevision";"consumedBoundary";"bytes";"sha256";"stickyInvalid";"reason";"identitySha256"] - let optionalText (property:string) = let item=element.GetProperty property in if item.ValueKind=JsonValueKind.Null then None else Some(item.GetString()) - let validDigest (property:string) = let text=element.GetProperty(property).GetString() in text.Length=64 && text|>Seq.forall(fun c->Char.IsDigit c || (c>='a' && c<='f')) - let boundaryOptionText = function Some boundary->Some(boundaryText(Some boundary))|None->None - if element.GetProperty("phase").GetString()<>value.Phase || element.GetProperty("observedRevision").GetInt32()<>value.ObservedRevision || element.GetProperty("validatedRevision").GetInt32()<>value.ValidatedRevision || optionalText "validatedBoundary"<>boundaryOptionText value.ValidatedBoundary || element.GetProperty("consumedRevision").GetInt32()<>value.ConsumedRevision || optionalText "consumedBoundary"<>boundaryOptionText value.ConsumedBoundary || element.GetProperty("stickyInvalid").GetBoolean()<>value.StickyInvalid || optionalText "reason"<>value.Reason || element.GetProperty("bytes").GetInt64()<0L || not(validDigest "sha256" && validDigest "identitySha256") then failwithf "production settlement state mismatch: %s" name + kind,probe,remaining)|>Array.toList + let parseBoundary = function "browser"->BrowserAdmission|"normalization"->Normalization|"release"->Release|value->failwithf "closed boundary: %s" value + let optionalText (element:JsonElement) (property:string) = + let item=element.GetProperty property + if item.ValueKind=JsonValueKind.Null then None else Some(item.GetString()) + let parseIdentity (element:JsonElement) = + exactNames element ["runId";"sourceSetSha256";"apphostSha256";"closureSha256";"pid";"startTicks";"uid";"device";"inode";"path"] + {RunId=element.GetProperty("runId").GetString();SourceSetSha256=element.GetProperty("sourceSetSha256").GetString();ApphostSha256=element.GetProperty("apphostSha256").GetString();ClosureSha256=element.GetProperty("closureSha256").GetString();Pid=element.GetProperty("pid").GetInt32();StartTicks=element.GetProperty("startTicks").GetString();Uid=element.GetProperty("uid").GetInt32();Device=element.GetProperty("device").GetString();Inode=element.GetProperty("inode").GetString();Path=element.GetProperty("path").GetString()} + let parseState (element:JsonElement) = + exactNames element ["phase";"observedRevision";"validatedRevision";"validatedBoundary";"consumedRevision";"consumedBoundary";"bytes";"sha256";"stickyInvalid";"reason";"identity"] + let identity=element.GetProperty("identity") + { Phase=element.GetProperty("phase").GetString() + Identity=(if identity.ValueKind=JsonValueKind.Null then None else Some(parseIdentity identity)) + ObservedRevision=element.GetProperty("observedRevision").GetInt32() + ValidatedRevision=element.GetProperty("validatedRevision").GetInt32() + ValidatedBoundary=optionalText element "validatedBoundary"|>Option.map parseBoundary + ConsumedRevision=element.GetProperty("consumedRevision").GetInt32() + ConsumedBoundary=optionalText element "consumedBoundary"|>Option.map parseBoundary + Bytes=element.GetProperty("bytes").GetInt64() + Sha256=element.GetProperty("sha256").GetString() + StickyInvalid=element.GetProperty("stickyInvalid").GetBoolean() + Reason=optionalText element "reason" } + let parseNullableState (element:JsonElement)=if element.ValueKind=JsonValueKind.Null then None else Some(parseState element) + let transitionState = function Accepted value|Pending value|Refused value|Unknown value->value + let verifyTimeline name expectedOutcome expectedCheck = + let rows=timeline name + if rows.Length=0 then failwithf "empty settlement timeline: %s" name + let terminals=rows|>Array.indexed|>Array.filter(fun (_,row)->row.GetProperty("kind").GetString()="terminal") + if terminals.Length<>1 || fst terminals[0]<>rows.Length-1 then failwithf "terminal ordering: %s" name + let terminal=snd terminals[0] + exactNames terminal ["kind";"outcome";"check";"state"] + let check=optionalText terminal "check" + if terminal.GetProperty("outcome").GetString()<>expectedOutcome || check<>expectedCheck then failwithf "terminal result mismatch: %s" name + let mutable completeSeen=false + let mutable terminalSeen=false + let mutable lastConcrete:EvidenceState option=None + for row in rows do + let kind=row.GetProperty("kind").GetString() + if terminalSeen then failwithf "effect after terminal: %s" name + match kind with + | "probe" -> if row.GetProperty("event").GetString()="complete" then completeSeen<-true + | "historical" -> + exactNames row ["kind";"beforeState";"afterState"] + let before=parseState(row.GetProperty("beforeState")) + let after=parseState(row.GetProperty("afterState")) + if before<>after then failwithf "historical state changed: %s" name + lastConcrete<-Some after + | "policy" -> + if not completeSeen then failwithf "policy before complete candidate: %s" name + exactNames row ["kind";"boundary";"status";"expected";"observation";"beforeState";"afterState"] + let expected=row.GetProperty("expected") + let observed=row.GetProperty("observation") + exactNames expected ["runId";"sourceSetSha256";"apphostSha256";"closureSha256";"writeRoot";"dataRoot"] + exactNames observed ["pid";"startTicks";"uid";"device";"inode";"path";"revision";"bytes";"sha256"] + let identity={RunId=expected.GetProperty("runId").GetString();SourceSetSha256=expected.GetProperty("sourceSetSha256").GetString();ApphostSha256=expected.GetProperty("apphostSha256").GetString();ClosureSha256=expected.GetProperty("closureSha256").GetString();Pid=observed.GetProperty("pid").GetInt32();StartTicks=observed.GetProperty("startTicks").GetString();Uid=observed.GetProperty("uid").GetInt32();Device=observed.GetProperty("device").GetString();Inode=observed.GetProperty("inode").GetString();Path=observed.GetProperty("path").GetString()} + let before=parseNullableState(row.GetProperty("beforeState")) + if before.IsSome && before.Value.Identity<>Some identity then failwithf "policy prior identity mismatch: %s" name + let acquired=match before with Some value->value|None->GrowingLogEvidence.acquire identity GrowingLogEvidence.empty|>transitionState + let status=row.GetProperty("status").GetString() + let after=parseState(row.GetProperty("afterState")) + let observation={Identity=identity;Revision=observed.GetProperty("revision").GetInt32();Bytes=observed.GetProperty("bytes").GetInt64();Sha256=observed.GetProperty("sha256").GetString();PreviousPrefixIntact=true;WriterPresent=true;CompleteRecord=status="accepted";Available=true;RootsValid=status="accepted";PendingReason=if status="pending" then after.Reason else None} + let sampled=GrowingLogEvidence.sample observation acquired|>transitionState + let expectedState=if status="accepted" then GrowingLogEvidence.validate (parseBoundary(row.GetProperty("boundary").GetString())) sampled|>transitionState|>GrowingLogEvidence.consume (parseBoundary(row.GetProperty("boundary").GetString()))|>transitionState else sampled + if expectedState<>after then failwithf "full production policy state mismatch: %s" name + lastConcrete<-Some after + | "terminal" -> + terminalSeen<-true + let state=parseNullableState(row.GetProperty("state")) + if state<>lastConcrete then failwithf "terminal concrete state mismatch: %s" name + | other->failwithf "closed ordered effect kind %s" other + verifyTimeline "completeRecordWaitThenConsume" "accepted" None + verifyTimeline "completeRecordWaitExhausted" "refused" (Some "infolog-record-settlement-exhausted") + verifyTimeline "completeRecordWaitDeadline" "deadline" (Some "infolog-record-settlement-deadline") + verifyTimeline "sharedBudgetAcrossEvaluations" "refused" (Some "infolog-record-settlement-exhausted") + verifyTimeline "pendingThenCompleteResample" "accepted" None + verifyTimeline "waitAfterConsumptionHasNoNewAuthority" "refused" (Some "infolog-record-settlement-exhausted") + verifyTimeline "lastProbeCandidateThenExhausted" "refused" (Some "infolog-record-settlement-exhausted") policyPhase<-"none";policyInvocation<-"none";policyClosure<-"none" let tool=locate "quint" let environment={Seed="424242";Bounds=["revisions",3L;"generations",2L];ToolFingerprint=hashFile tool;ProfileFingerprint=hashJoined [Path.Combine(baseDirectory,"GrowingLogEvidence.qnt");Path.Combine(baseDirectory,"GrowingLogEvidence_test.qnt")];ContractFingerprint=hashFile(Path.Combine(baseDirectory,"Codec.fs"));AdapterFingerprint=hashJoined [Path.Combine(baseDirectory,"DataRootPolicy.fs");helperPath;transcriptPath];ImplementationFingerprint=hashJoined [Path.Combine(baseDirectory,"GrowingLogEvidence.fs");typeof.Assembly.Location]} @@ -235,7 +286,6 @@ module CorrespondenceTests = let waitCompleted=match PolicyComposition.finishGuard guardId true waitEvaluated with Choice1Of2 value->value|Choice2Of2 value->failwithf "%A" value policyPhase<-waitCompleted.State.Phase;waitStates.Add(stateWithSettlement "candidate" "browser" completionRemaining true true true true waitValidated) let waitConsumed=GrowingLogEvidence.consume BrowserAdmission waitValidated|>accepted - requireProductionState "completeRecordWaitThenConsume" ((effects "completeRecordWaitThenConsume").GetProperty("afterState")) waitConsumed waitStates.Add(stateWithSettlement "candidate" "browser" completionRemaining true true true true waitConsumed) sequence "completeRecordWaitThenConsume" (["acquire";"beginSettlement:browser"]@eventActions completionEvents@["sampleInitial";"beginPolicy:invocation";"readyPolicy:invocation";"validate:browser";"evaluatedPolicy:invocation";"completePolicy:invocation";"consume:browser"]) (List.ofSeq waitStates) @@ -279,7 +329,6 @@ module CorrespondenceTests = let sharedCompleted=match PolicyComposition.finishGuard guardId true sharedEvaluated with Choice1Of2 value->value|Choice2Of2 value->failwithf "%A" value policyPhase<-sharedCompleted.State.Phase;sharedStates.Add(stateWithSettlement "candidate" "browser" sharedRemaining true true true true sharedValidated) let sharedConsumed=GrowingLogEvidence.consume BrowserAdmission sharedValidated|>accepted - requireProductionState "sharedBudgetAcrossEvaluations" ((effects "sharedBudgetAcrossEvaluations").GetProperty("afterState")) sharedConsumed sharedStates.Add(stateWithSettlement "candidate" "browser" sharedRemaining true true true true sharedConsumed) sharedStates.Add(stateWithSettlement "probing" "browser" sharedRemaining true true true true sharedConsumed) appendEventStates sharedStates "browser" true true true sharedConsumed (sharedEvents|>List.tail) @@ -315,7 +364,6 @@ module CorrespondenceTests = let pendingCompleted=match PolicyComposition.finishGuard guardId true pendingEvaluated with Choice1Of2 value->value|Choice2Of2 value->failwithf "%A" value policyPhase<-pendingCompleted.State.Phase;pendingStates.Add(stateWithSettlement "candidate" "browser" pendingR3 true true true true pendingValidated) let pendingConsumed=GrowingLogEvidence.consume BrowserAdmission pendingValidated|>accepted - requireProductionState "pendingThenCompleteResample" ((effects "pendingThenCompleteResample").GetProperty("afterState")) pendingConsumed pendingStates.Add(stateWithSettlement "candidate" "browser" pendingR3 true true true true pendingConsumed) sequence "pendingThenCompleteResample" ["acquire";"beginSettlement:browser";"completeRecordCandidate";"pendingTail";"retrySettlement:browser";"incompleteRecordProbe";"completeRecordCandidate";"pendingCompleteResample";"beginPolicy:invocation";"readyPolicy:invocation";"validate:browser";"evaluatedPolicy:invocation";"completePolicy:invocation";"consume:browser"] (List.ofSeq pendingStates) @@ -338,10 +386,34 @@ module CorrespondenceTests = let afterCompleted=match PolicyComposition.finishGuard guardId true afterEvaluated with Choice1Of2 value->value|Choice2Of2 value->failwithf "%A" value policyPhase<-afterCompleted.State.Phase;afterConsumeStates.Add(stateWithSettlement "candidate" "browser" 31 true true true true afterValidated) let afterConsumed=GrowingLogEvidence.consume BrowserAdmission afterValidated|>accepted - requireProductionState "waitAfterConsumptionHasNoNewAuthority" (historical.GetProperty("beforeState")) afterConsumed afterConsumeStates.Add(stateWithSettlement "candidate" "browser" 31 true true true true afterConsumed) afterConsumeStates.Add(stateWithSettlement "idle" "none" 31 true true true true afterConsumed) afterConsumeStates.Add(stateWithSettlement "probing" "normalization" 32 true true true true afterConsumed) appendEventStates afterConsumeStates "normalization" true true true afterConsumed afterEvents afterConsumeStates.Add(stateWithSettlement "refused" "normalization" 0 true true true true afterConsumed) sequence "waitAfterConsumptionHasNoNewAuthority" (["acquire";"beginSettlement:browser";"completeRecordCandidate";"sampleInitial";"beginPolicy:invocation";"readyPolicy:invocation";"validate:browser";"evaluatedPolicy:invocation";"completePolicy:invocation";"consume:browser";"completeBoundary:browser";"beginSettlement:normalization"]@eventActions afterEvents@["recordSettlementExhausted"]) (List.ofSeq afterConsumeStates) + + policyPhase<-"none";policyInvocation<-"none";policyClosure<-"none" + let lastEvents=events "lastProbeCandidateThenExhausted" + if lastEvents.Length<>32 || (lastEvents|>List.take 31|>List.exists(fun (kind,_,_)->kind<>"incomplete")) || (lastEvents|>List.last|>fun (kind,_,remaining)->kind<>"complete" || remaining<>0) then failwith "last-probe actual event order" + let lastStates=ResizeArray() + lastStates.Add(state false false true a) + lastStates.Add(stateWithSettlement "probing" "browser" 32 true false false true a) + appendEventStates lastStates "browser" false false true a lastEvents + lastStates.Add(stateWithSettlement "candidate" "browser" 0 true true true true s) + let lastGuard=PolicyComposition.start guardId + policyPhase<-lastGuard.State.Phase;policyInvocation<-guardId.InvocationId;policyClosure<-guardId.ClosureSha256 + lastStates.Add(stateWithSettlement "candidate" "browser" 0 true true true true s) + let lastReady=PolicyComposition.ready guardId lastGuard + policyPhase<-lastReady.State.Phase;lastStates.Add(stateWithSettlement "candidate" "browser" 0 true true true true s) + let lastValidated=GrowingLogEvidence.validate BrowserAdmission s|>accepted + lastStates.Add(stateWithSettlement "candidate" "browser" 0 true true true true lastValidated) + let lastEvaluated=PolicyComposition.evaluated guardId lastReady + policyPhase<-lastEvaluated.State.Phase;lastStates.Add(stateWithSettlement "candidate" "browser" 0 true true true true lastValidated) + let lastCompleted=match PolicyComposition.finishGuard guardId true lastEvaluated with Choice1Of2 value->value|Choice2Of2 value->failwithf "%A" value + policyPhase<-lastCompleted.State.Phase;lastStates.Add(stateWithSettlement "candidate" "browser" 0 true true true true lastValidated) + let lastConsumed=GrowingLogEvidence.consume BrowserAdmission lastValidated|>accepted + lastStates.Add(stateWithSettlement "candidate" "browser" 0 true true true true lastConsumed) + lastStates.Add(stateWithSettlement "probing" "browser" 0 true true true true lastConsumed) + lastStates.Add(stateWithSettlement "refused" "browser" 0 true true true true lastConsumed) + sequence "lastProbeCandidateThenExhausted" (["acquire";"beginSettlement:browser"]@eventActions lastEvents@["sampleInitial";"beginPolicy:invocation";"readyPolicy:invocation";"validate:browser";"evaluatedPolicy:invocation";"completePolicy:invocation";"consume:browser";"retrySettlement:browser";"recordSettlementExhausted"]) (List.ofSeq lastStates) diff --git a/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.lastProbeCandidateThenExhausted.itf.json b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.lastProbeCandidateThenExhausted.itf.json new file mode 100644 index 0000000..87b4518 --- /dev/null +++ b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.lastProbeCandidateThenExhausted.itf.json @@ -0,0 +1 @@ +{"#meta":{"format":"ITF","format-description":"https://apalache-mc.org/docs/adr/015adr-trace.html","source":"GrowingLogEvidence_test.qnt","status":"ok"},"states":[{"#meta":{"index":0},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"0"},"intendedBoundary":"none","logMatches":false,"observedRevision":{"#bigint":"0"},"phase":"empty","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":false,"rootsValid":false,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":false,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":false}},{"#meta":{"index":1},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"none","deadlineAvailable":true,"phase":"idle","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":2},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"32"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":3},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"31"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":4},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"30"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":5},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"29"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":6},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"28"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":7},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"27"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":8},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"26"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":9},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"25"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":10},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"24"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":11},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"23"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":12},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"22"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":13},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"21"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":14},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"20"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":15},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"19"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":16},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"18"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":17},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"17"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":18},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"16"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":19},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"15"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":20},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"14"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":21},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"13"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":22},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"12"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":23},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"11"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":24},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"10"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":25},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"9"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":26},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"8"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":27},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"7"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":28},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"6"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":29},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"5"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":30},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"4"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":31},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"3"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":32},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"2"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":33},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"1"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":34},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"0"},"phase":"acquired","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":false,"producerMatches":true,"rootsValid":false,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"0"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":35},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"none","policyInvocation":"none","policyPhase":"none","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"0"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":36},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"started","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"0"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":37},"evidence":{"authorityActive":false,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"none","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"sampled","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"ready","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"0"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"0"},"writerPresent":true}},{"#meta":{"index":38},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"ready","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"0"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":39},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"evaluated","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"0"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":40},"evidence":{"authorityActive":true,"consumedBoundary":"none","consumedRevision":{"#bigint":"0"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"validated","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"0"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":41},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"candidate","remaining":{"#bigint":"0"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":42},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"probing","remaining":{"#bigint":"0"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}},{"#meta":{"index":43},"evidence":{"authorityActive":false,"consumedBoundary":"browser","consumedRevision":{"#bigint":"1"},"generation":{"#bigint":"1"},"intendedBoundary":"browser","logMatches":true,"observedRevision":{"#bigint":"1"},"phase":"consumed","policyClosure":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","policyInvocation":"invocation","policyPhase":"completed","prefixIntact":true,"producerMatches":true,"rootsValid":true,"settlement":{"boundary":"browser","deadlineAvailable":true,"phase":"refused","remaining":{"#bigint":"0"}},"sourceMatches":true,"stickyInvalid":false,"validatedRevision":{"#bigint":"1"},"writerPresent":true}}],"vars":["evidence"]} diff --git a/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.qnt b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.qnt index ae6addb..f54b78b 100644 --- a/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.qnt +++ b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.qnt @@ -80,21 +80,21 @@ module GrowingLogEvidence { action retrySettlement(boundary: str): bool = all { evidence.phase != "invalid", evidence.phase != "unknown", evidence.phase != "closed", evidence.settlement.phase == "candidate", evidence.settlement.boundary == boundary, - evidence.settlement.deadlineAvailable, evidence.settlement.remaining > 0, + evidence.settlement.deadlineAvailable, evidence.settlement.remaining >= 0, evidence' = { ...evidence, authorityActive: false, settlement: { ...evidence.settlement, phase: "probing" } } } action incompleteRecordProbe = all { evidence.settlement.phase == "probing", evidence.settlement.deadlineAvailable, - evidence.settlement.remaining > 0, + evidence.settlement.remaining >= 0, evidence' = { ...evidence, settlement: { ...evidence.settlement, phase: "probing", remaining: evidence.settlement.remaining - 1 } } } action completeRecordCandidate = all { evidence.settlement.phase == "probing", evidence.settlement.deadlineAvailable, - evidence.settlement.remaining > 0, + evidence.settlement.remaining >= 0, evidence' = { ...evidence, settlement: { ...evidence.settlement, phase: "candidate", remaining: evidence.settlement.remaining - 1 } } } diff --git a/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence_test.qnt b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence_test.qnt index 0069d26..da64766 100644 --- a/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence_test.qnt +++ b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence_test.qnt @@ -74,6 +74,9 @@ module GrowingLogEvidence_test { run sharedBudgetAcrossEvaluations = init.then(acquire).then(beginSettlement("browser")).then(completeRecordCandidate).then(sampleInitial).then(beginPolicy("invocation","cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")).then(readyPolicy("invocation","cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")).then(validate("browser")).then(evaluatedPolicy("invocation","cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")).then(completePolicy("invocation","cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")).then(consume("browser")).then(retrySettlement("browser")).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(recordSettlementExhausted) .expect(invariant and evidence.observedRevision == 1 and evidence.settlement.phase == "refused" and evidence.settlement.remaining == 0) + run lastProbeCandidateThenExhausted = init.then(acquire).then(beginSettlement("browser")).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(completeRecordCandidate).then(sampleInitial).then(beginPolicy("invocation","cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")).then(readyPolicy("invocation","cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")).then(validate("browser")).then(evaluatedPolicy("invocation","cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")).then(completePolicy("invocation","cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")).then(consume("browser")).then(retrySettlement("browser")).then(recordSettlementExhausted) + .expect(invariant and evidence.observedRevision == 1 and evidence.settlement.phase == "refused" and evidence.settlement.remaining == 0) + run candidateCannotRenewBudget = init.then(acquire).then(beginSettlement("browser")).then(completeRecordCandidate) .expect(invariant and evidence.settlement.remaining == 31 and not(canBeginSettlement("browser"))) diff --git a/tests/Broker.NativeProof/RuntimeEvidence/README.md b/tests/Broker.NativeProof/RuntimeEvidence/README.md index 1818550..408a137 100644 --- a/tests/Broker.NativeProof/RuntimeEvidence/README.md +++ b/tests/Broker.NativeProof/RuntimeEvidence/README.md @@ -20,8 +20,11 @@ submits a sample. Incomplete probes do not call this reducer or advance a revisi canonical Quint settlement record models the 32-probe budget, deadline refusal, wait without authority, and pending-to-complete resampling while this F# reducer remains the only policy state transition. -The combined gate requires a freshly generated six-scenario helper transcript and binds -its bytes and the helper implementation into replay evidence. Boundary entry alone resets +The combined gate requires a freshly generated seven-scenario helper transcript and binds +its bytes and the helper implementation into replay evidence. Its single ordered stream +records probes, actual policy transitions with complete before/after state, and the terminal +result. The compiled replay reconstructs every state field from the captured request and +typed reducer, so byte, digest, identity, or effect-order drift is refused. Boundary entry alone resets the 32-probe budget; retries preserve it. Deadline and exhaustion block current consumption while historical consumed state remains evidence only. diff --git a/tests/Broker.NativeProof/RuntimeEvidence/tests/check-runtime-evidence.sh b/tests/Broker.NativeProof/RuntimeEvidence/tests/check-runtime-evidence.sh index b569087..c9c4bb8 100755 --- a/tests/Broker.NativeProof/RuntimeEvidence/tests/check-runtime-evidence.sh +++ b/tests/Broker.NativeProof/RuntimeEvidence/tests/check-runtime-evidence.sh @@ -5,7 +5,7 @@ export DOTNET_PROCESSOR_COUNT="${DOTNET_PROCESSOR_COUNT:-1}" test "$(quint --version)" = "0.32.0" quint typecheck "$ROOT/GrowingLogEvidence.qnt" quint typecheck "$ROOT/GrowingLogEvidence_test.qnt" -quint test "$ROOT/GrowingLogEvidence_test.qnt" --main GrowingLogEvidence_test --match '^(healthyBoundaries|rewriteIsSticky|unavailableCannotGrant|unavailableAfterValidationRevokesCurrentAuthority|unavailableAfterConsumptionPreservesHistoryOnly|staleBoundaryCannotConsume|pendingTailHasNoAuthority|closeRevokesCurrentAuthority|truncateIsSticky|replacementIsSticky|wrongWriterIsSticky|wrongGenerationIsSticky|wrongSourceIsSticky|contradictorySuffixIsSticky|policyInvocationCompletesSameClosure|policyClosureDriftIsSticky|completeRecordWaitThenConsume|completeRecordWaitExhausted|completeRecordWaitDeadline|waitAfterConsumptionHasNoNewAuthority|pendingThenCompleteResample|sharedBudgetAcrossEvaluations|candidateCannotRenewBudget|terminalSettlementCannotConsume|retriesShareOneProbeBudget)$' --seed 424242 --max-samples 1 +quint test "$ROOT/GrowingLogEvidence_test.qnt" --main GrowingLogEvidence_test --match '^(healthyBoundaries|rewriteIsSticky|unavailableCannotGrant|unavailableAfterValidationRevokesCurrentAuthority|unavailableAfterConsumptionPreservesHistoryOnly|staleBoundaryCannotConsume|pendingTailHasNoAuthority|closeRevokesCurrentAuthority|truncateIsSticky|replacementIsSticky|wrongWriterIsSticky|wrongGenerationIsSticky|wrongSourceIsSticky|contradictorySuffixIsSticky|policyInvocationCompletesSameClosure|policyClosureDriftIsSticky|completeRecordWaitThenConsume|completeRecordWaitExhausted|completeRecordWaitDeadline|waitAfterConsumptionHasNoNewAuthority|pendingThenCompleteResample|sharedBudgetAcrossEvaluations|candidateCannotRenewBudget|terminalSettlementCannotConsume|retriesShareOneProbeBudget|lastProbeCandidateThenExhausted)$' --seed 424242 --max-samples 1 quint run "$ROOT/GrowingLogEvidence.qnt" --seed 424242 --max-samples 500 --max-steps 16 --invariant invariant --verbosity 1 TMP=$(mktemp -d) trap 'python3 - "$TMP" <<'"'"'PY'"'"' @@ -40,6 +40,7 @@ completeRecordWaitDeadline|GrowingLogEvidence.completeRecordWaitDeadline.itf.jso waitAfterConsumptionHasNoNewAuthority|GrowingLogEvidence.waitAfterConsumptionHasNoNewAuthority.itf.json pendingThenCompleteResample|GrowingLogEvidence.pendingThenCompleteResample.itf.json sharedBudgetAcrossEvaluations|GrowingLogEvidence.sharedBudgetAcrossEvaluations.itf.json +lastProbeCandidateThenExhausted|GrowingLogEvidence.lastProbeCandidateThenExhausted.itf.json EOF dotnet restore "$ROOT/RuntimeEvidence.Tests.fsproj" --locked-mode dotnet build "$ROOT/RuntimeEvidence.Tests.fsproj" -c Release --no-restore -m:1 From 69bf79a6f0596facaa85db222f59b86d0384119e Mon Sep 17 00:00:00 2001 From: EHotwagner Date: Fri, 2 Oct 2026 12:14:56 +0200 Subject: [PATCH 04/12] Close settlement probe and causal timeline bounds --- .../RuntimeEvidence/CorrespondenceTests.fs | 54 +++++++++++++++---- .../RuntimeEvidence/GrowingLogEvidence.qnt | 11 ++-- .../GrowingLogEvidence_test.qnt | 3 ++ .../tests/check-runtime-evidence.sh | 18 ++++++- 4 files changed, 70 insertions(+), 16 deletions(-) diff --git a/tests/Broker.NativeProof/RuntimeEvidence/CorrespondenceTests.fs b/tests/Broker.NativeProof/RuntimeEvidence/CorrespondenceTests.fs index ef07de5..23325dd 100644 --- a/tests/Broker.NativeProof/RuntimeEvidence/CorrespondenceTests.fs +++ b/tests/Broker.NativeProof/RuntimeEvidence/CorrespondenceTests.fs @@ -89,23 +89,49 @@ module CorrespondenceTests = Reason=optionalText element "reason" } let parseNullableState (element:JsonElement)=if element.ValueKind=JsonValueKind.Null then None else Some(parseState element) let transitionState = function Accepted value|Pending value|Refused value|Unknown value->value - let verifyTimeline name expectedOutcome expectedCheck = + let verifyTimeline name expectedPolicies expectedOutcome expectedCheck = let rows=timeline name if rows.Length=0 then failwithf "empty settlement timeline: %s" name + let tokens=rows|>Array.map(fun row-> + match row.GetProperty("kind").GetString() with + | "probe"->"probe:"+row.GetProperty("event").GetString() + | "policy"->"policy:"+row.GetProperty("status").GetString() + | "terminal"->"terminal:"+row.GetProperty("outcome").GetString() + | "historical"->"historical" + | other->"unknown:"+other)|>Array.toList + let expectedTokens= + match name with + | "completeRecordWaitThenConsume"->["probe:incomplete";"probe:complete";"policy:accepted";"terminal:accepted"] + | "completeRecordWaitExhausted"->List.replicate 32 "probe:incomplete"@["terminal:refused"] + | "completeRecordWaitDeadline"->["probe:incomplete";"terminal:deadline"] + | "sharedBudgetAcrossEvaluations"->["probe:complete";"policy:accepted"]@List.replicate 31 "probe:incomplete"@["terminal:refused"] + | "pendingThenCompleteResample"->["probe:complete";"policy:pending";"probe:incomplete";"probe:complete";"policy:accepted";"terminal:accepted"] + | "waitAfterConsumptionHasNoNewAuthority"->["historical"]@List.replicate 32 "probe:incomplete"@["terminal:refused"] + | "lastProbeCandidateThenExhausted"->List.replicate 31 "probe:incomplete"@["probe:complete";"policy:accepted";"terminal:refused"] + | _->failwithf "unknown settlement scenario: %s" name + if tokens<>expectedTokens then failwithf "ordered timeline/canonical action join: %s" name let terminals=rows|>Array.indexed|>Array.filter(fun (_,row)->row.GetProperty("kind").GetString()="terminal") if terminals.Length<>1 || fst terminals[0]<>rows.Length-1 then failwithf "terminal ordering: %s" name let terminal=snd terminals[0] exactNames terminal ["kind";"outcome";"check";"state"] let check=optionalText terminal "check" if terminal.GetProperty("outcome").GetString()<>expectedOutcome || check<>expectedCheck then failwithf "terminal result mismatch: %s" name - let mutable completeSeen=false + let mutable candidateAvailable=false let mutable terminalSeen=false let mutable lastConcrete:EvidenceState option=None + let mutable probeCount=0 + let mutable policyCount=0 for row in rows do let kind=row.GetProperty("kind").GetString() if terminalSeen then failwithf "effect after terminal: %s" name match kind with - | "probe" -> if row.GetProperty("event").GetString()="complete" then completeSeen<-true + | "probe" -> + probeCount<-probeCount+1 + if probeCount>32 || row.GetProperty("probe").GetInt32()<>probeCount then failwithf "settlement probe bound/order: %s" name + if row.GetProperty("event").GetString()="complete" then + if candidateAvailable then failwithf "unconsumed complete candidate: %s" name + candidateAvailable<-true + else candidateAvailable<-false | "historical" -> exactNames row ["kind";"beforeState";"afterState"] let before=parseState(row.GetProperty("beforeState")) @@ -113,7 +139,10 @@ module CorrespondenceTests = if before<>after then failwithf "historical state changed: %s" name lastConcrete<-Some after | "policy" -> - if not completeSeen then failwithf "policy before complete candidate: %s" name + if not candidateAvailable then failwithf "policy without fresh complete candidate: %s" name + candidateAvailable<-false + policyCount<-policyCount+1 + if policyCount>3 then failwithf "policy evaluation bound: %s" name exactNames row ["kind";"boundary";"status";"expected";"observation";"beforeState";"afterState"] let expected=row.GetProperty("expected") let observed=row.GetProperty("observation") @@ -121,10 +150,12 @@ module CorrespondenceTests = exactNames observed ["pid";"startTicks";"uid";"device";"inode";"path";"revision";"bytes";"sha256"] let identity={RunId=expected.GetProperty("runId").GetString();SourceSetSha256=expected.GetProperty("sourceSetSha256").GetString();ApphostSha256=expected.GetProperty("apphostSha256").GetString();ClosureSha256=expected.GetProperty("closureSha256").GetString();Pid=observed.GetProperty("pid").GetInt32();StartTicks=observed.GetProperty("startTicks").GetString();Uid=observed.GetProperty("uid").GetInt32();Device=observed.GetProperty("device").GetString();Inode=observed.GetProperty("inode").GetString();Path=observed.GetProperty("path").GetString()} let before=parseNullableState(row.GetProperty("beforeState")) + if before<>lastConcrete then failwithf "policy prior state chain mismatch: %s" name if before.IsSome && before.Value.Identity<>Some identity then failwithf "policy prior identity mismatch: %s" name let acquired=match before with Some value->value|None->GrowingLogEvidence.acquire identity GrowingLogEvidence.empty|>transitionState let status=row.GetProperty("status").GetString() let after=parseState(row.GetProperty("afterState")) + if observed.GetProperty("revision").GetInt32()<>policyCount then failwithf "policy revision progression: %s" name let observation={Identity=identity;Revision=observed.GetProperty("revision").GetInt32();Bytes=observed.GetProperty("bytes").GetInt64();Sha256=observed.GetProperty("sha256").GetString();PreviousPrefixIntact=true;WriterPresent=true;CompleteRecord=status="accepted";Available=true;RootsValid=status="accepted";PendingReason=if status="pending" then after.Reason else None} let sampled=GrowingLogEvidence.sample observation acquired|>transitionState let expectedState=if status="accepted" then GrowingLogEvidence.validate (parseBoundary(row.GetProperty("boundary").GetString())) sampled|>transitionState|>GrowingLogEvidence.consume (parseBoundary(row.GetProperty("boundary").GetString()))|>transitionState else sampled @@ -135,13 +166,14 @@ module CorrespondenceTests = let state=parseNullableState(row.GetProperty("state")) if state<>lastConcrete then failwithf "terminal concrete state mismatch: %s" name | other->failwithf "closed ordered effect kind %s" other - verifyTimeline "completeRecordWaitThenConsume" "accepted" None - verifyTimeline "completeRecordWaitExhausted" "refused" (Some "infolog-record-settlement-exhausted") - verifyTimeline "completeRecordWaitDeadline" "deadline" (Some "infolog-record-settlement-deadline") - verifyTimeline "sharedBudgetAcrossEvaluations" "refused" (Some "infolog-record-settlement-exhausted") - verifyTimeline "pendingThenCompleteResample" "accepted" None - verifyTimeline "waitAfterConsumptionHasNoNewAuthority" "refused" (Some "infolog-record-settlement-exhausted") - verifyTimeline "lastProbeCandidateThenExhausted" "refused" (Some "infolog-record-settlement-exhausted") + if policyCount<>expectedPolicies then failwithf "scenario policy census: %s" name + verifyTimeline "completeRecordWaitThenConsume" 1 "accepted" None + verifyTimeline "completeRecordWaitExhausted" 0 "refused" (Some "infolog-record-settlement-exhausted") + verifyTimeline "completeRecordWaitDeadline" 0 "deadline" (Some "infolog-record-settlement-deadline") + verifyTimeline "sharedBudgetAcrossEvaluations" 1 "refused" (Some "infolog-record-settlement-exhausted") + verifyTimeline "pendingThenCompleteResample" 2 "accepted" None + verifyTimeline "waitAfterConsumptionHasNoNewAuthority" 0 "refused" (Some "infolog-record-settlement-exhausted") + verifyTimeline "lastProbeCandidateThenExhausted" 1 "refused" (Some "infolog-record-settlement-exhausted") policyPhase<-"none";policyInvocation<-"none";policyClosure<-"none" let tool=locate "quint" let environment={Seed="424242";Bounds=["revisions",3L;"generations",2L];ToolFingerprint=hashFile tool;ProfileFingerprint=hashJoined [Path.Combine(baseDirectory,"GrowingLogEvidence.qnt");Path.Combine(baseDirectory,"GrowingLogEvidence_test.qnt")];ContractFingerprint=hashFile(Path.Combine(baseDirectory,"Codec.fs"));AdapterFingerprint=hashJoined [Path.Combine(baseDirectory,"DataRootPolicy.fs");helperPath;transcriptPath];ImplementationFingerprint=hashJoined [Path.Combine(baseDirectory,"GrowingLogEvidence.fs");typeof.Assembly.Location]} diff --git a/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.qnt b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.qnt index f54b78b..c2a092b 100644 --- a/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.qnt +++ b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence.qnt @@ -85,16 +85,19 @@ module GrowingLogEvidence { settlement: { ...evidence.settlement, phase: "probing" } } } - action incompleteRecordProbe = all { + def canProbe: bool = all { evidence.settlement.phase == "probing", evidence.settlement.deadlineAvailable, - evidence.settlement.remaining >= 0, + evidence.settlement.remaining > 0, + } + + action incompleteRecordProbe = all { + canProbe, evidence' = { ...evidence, settlement: { ...evidence.settlement, phase: "probing", remaining: evidence.settlement.remaining - 1 } } } action completeRecordCandidate = all { - evidence.settlement.phase == "probing", evidence.settlement.deadlineAvailable, - evidence.settlement.remaining >= 0, + canProbe, evidence' = { ...evidence, settlement: { ...evidence.settlement, phase: "candidate", remaining: evidence.settlement.remaining - 1 } } } diff --git a/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence_test.qnt b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence_test.qnt index da64766..acb1cf1 100644 --- a/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence_test.qnt +++ b/tests/Broker.NativeProof/RuntimeEvidence/GrowingLogEvidence_test.qnt @@ -57,6 +57,9 @@ module GrowingLogEvidence_test { run completeRecordWaitExhausted = init.then(acquire).then(beginSettlement("browser")).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(recordSettlementExhausted) .expect(invariant and evidence.observedRevision == 0 and evidence.consumedRevision == 0 and evidence.settlement.phase == "refused") + run zeroBudgetCannotProbe = init.then(acquire).then(beginSettlement("browser")).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe).then(incompleteRecordProbe) + .expect(invariant and evidence.settlement.remaining == 0 and not(canProbe)) + run completeRecordWaitDeadline = init.then(acquire).then(beginSettlement("browser")).then(incompleteRecordProbe).then(recordSettlementDeadline) .expect(invariant and evidence.observedRevision == 0 and evidence.consumedRevision == 0 and evidence.settlement.phase == "deadline") diff --git a/tests/Broker.NativeProof/RuntimeEvidence/tests/check-runtime-evidence.sh b/tests/Broker.NativeProof/RuntimeEvidence/tests/check-runtime-evidence.sh index c9c4bb8..d4ef80e 100755 --- a/tests/Broker.NativeProof/RuntimeEvidence/tests/check-runtime-evidence.sh +++ b/tests/Broker.NativeProof/RuntimeEvidence/tests/check-runtime-evidence.sh @@ -5,7 +5,7 @@ export DOTNET_PROCESSOR_COUNT="${DOTNET_PROCESSOR_COUNT:-1}" test "$(quint --version)" = "0.32.0" quint typecheck "$ROOT/GrowingLogEvidence.qnt" quint typecheck "$ROOT/GrowingLogEvidence_test.qnt" -quint test "$ROOT/GrowingLogEvidence_test.qnt" --main GrowingLogEvidence_test --match '^(healthyBoundaries|rewriteIsSticky|unavailableCannotGrant|unavailableAfterValidationRevokesCurrentAuthority|unavailableAfterConsumptionPreservesHistoryOnly|staleBoundaryCannotConsume|pendingTailHasNoAuthority|closeRevokesCurrentAuthority|truncateIsSticky|replacementIsSticky|wrongWriterIsSticky|wrongGenerationIsSticky|wrongSourceIsSticky|contradictorySuffixIsSticky|policyInvocationCompletesSameClosure|policyClosureDriftIsSticky|completeRecordWaitThenConsume|completeRecordWaitExhausted|completeRecordWaitDeadline|waitAfterConsumptionHasNoNewAuthority|pendingThenCompleteResample|sharedBudgetAcrossEvaluations|candidateCannotRenewBudget|terminalSettlementCannotConsume|retriesShareOneProbeBudget|lastProbeCandidateThenExhausted)$' --seed 424242 --max-samples 1 +quint test "$ROOT/GrowingLogEvidence_test.qnt" --main GrowingLogEvidence_test --match '^(healthyBoundaries|rewriteIsSticky|unavailableCannotGrant|unavailableAfterValidationRevokesCurrentAuthority|unavailableAfterConsumptionPreservesHistoryOnly|staleBoundaryCannotConsume|pendingTailHasNoAuthority|closeRevokesCurrentAuthority|truncateIsSticky|replacementIsSticky|wrongWriterIsSticky|wrongGenerationIsSticky|wrongSourceIsSticky|contradictorySuffixIsSticky|policyInvocationCompletesSameClosure|policyClosureDriftIsSticky|completeRecordWaitThenConsume|completeRecordWaitExhausted|completeRecordWaitDeadline|zeroBudgetCannotProbe|waitAfterConsumptionHasNoNewAuthority|pendingThenCompleteResample|sharedBudgetAcrossEvaluations|candidateCannotRenewBudget|terminalSettlementCannotConsume|retriesShareOneProbeBudget|lastProbeCandidateThenExhausted)$' --seed 424242 --max-samples 1 quint run "$ROOT/GrowingLogEvidence.qnt" --seed 424242 --max-samples 500 --max-steps 16 --invariant invariant --verbosity 1 TMP=$(mktemp -d) trap 'python3 - "$TMP" <<'"'"'PY'"'"' @@ -53,6 +53,22 @@ TRANSCRIPT="$TMP/complete-record-correspondence.json" BAR_SETTLEMENT_TRANSCRIPT="$TRANSCRIPT" \ python3 -m unittest -v test_growing_log.GrowingLogTests.test_required_complete_record_correspondence_bundle) BAR_GROWING_LOG_HELPER="$BAR_GROWING_LOG_HELPER" BAR_SETTLEMENT_TRANSCRIPT="$TRANSCRIPT" dotnet run --project "$ROOT/RuntimeEvidence.Tests.fsproj" -c Release --no-build +python3 - "$TRANSCRIPT" "$TMP" <<'PY' +import copy,json,pathlib,sys +value=json.loads(pathlib.Path(sys.argv[1]).read_text());root=pathlib.Path(sys.argv[2]) +def named(v,name):return next(row for row in v['scenarios'] if row['name']==name)['timeline'] +duplicate=copy.deepcopy(value);rows=named(duplicate,'completeRecordWaitThenConsume');policy=next(row for row in rows if row['kind']=='policy');rows[-1:-1]=[copy.deepcopy(policy) for _ in range(4)] +reordered=copy.deepcopy(value);rows=named(reordered,'pendingThenCompleteResample');indexes=[index for index,row in enumerate(rows) if row['kind']=='policy'];second=rows.pop(indexes[1]);rows.insert(indexes[0]+1,second) +prior=copy.deepcopy(value);rows=named(prior,'pendingThenCompleteResample');next(row for row in rows if row['kind']=='policy' and row['observation']['revision']==2)['beforeState']=None +for name,bundle in [('duplicate-policy',duplicate),('reordered-policy',reordered),('prior-state-chain',prior)]: + (root/f'{name}.json').write_text(json.dumps(bundle,separators=(',',':'),sort_keys=True)+'\n') +PY +for mutation in duplicate-policy reordered-policy prior-state-chain; do + if BAR_GROWING_LOG_HELPER="$BAR_GROWING_LOG_HELPER" BAR_SETTLEMENT_TRANSCRIPT="$TMP/$mutation.json" dotnet run --project "$ROOT/RuntimeEvidence.Tests.fsproj" -c Release --no-build >/dev/null 2>&1; then + echo "settlement timeline mutation accepted: $mutation" >&2 + exit 1 + fi +done POLICY_OUTPUT="$ROOT/bin/RuntimeEvidence/Release/net10.0" for artifact in RuntimeEvidence RuntimeEvidence.dll RuntimeEvidence.deps.json RuntimeEvidence.runtimeconfig.json FSharp.Core.dll; do From 3438882b595da1b2de4815f561f1d5f36dc2cd62 Mon Sep 17 00:00:00 2001 From: EHotwagner Date: Fri, 2 Oct 2026 12:37:20 +0200 Subject: [PATCH 05/12] Run complete record evidence in source CI --- docs/roadmaps/barc-01-useful-play.md | 6 + .../RuntimeEvidence/README.md | 6 + .../RuntimeEvidence.Tests.fsproj | 3 + .../fixtures/complete-record-helper/README.md | 7 + .../complete-record-helper/growing_log.py | 359 +++++++++ .../complete-record-helper/private_io.py | 98 +++ .../runtime_identity.py | 153 ++++ .../test_growing_log.py | 748 ++++++++++++++++++ .../tests/check-runtime-evidence.sh | 20 +- 9 files changed, 1399 insertions(+), 1 deletion(-) create mode 100644 tests/Broker.NativeProof/RuntimeEvidence/fixtures/complete-record-helper/README.md create mode 100644 tests/Broker.NativeProof/RuntimeEvidence/fixtures/complete-record-helper/growing_log.py create mode 100644 tests/Broker.NativeProof/RuntimeEvidence/fixtures/complete-record-helper/private_io.py create mode 100644 tests/Broker.NativeProof/RuntimeEvidence/fixtures/complete-record-helper/runtime_identity.py create mode 100644 tests/Broker.NativeProof/RuntimeEvidence/fixtures/complete-record-helper/test_growing_log.py diff --git a/docs/roadmaps/barc-01-useful-play.md b/docs/roadmaps/barc-01-useful-play.md index ab0561d..14b2218 100644 --- a/docs/roadmaps/barc-01-useful-play.md +++ b/docs/roadmaps/barc-01-useful-play.md @@ -20,6 +20,12 @@ The existing `.5b/.5f` source window has two independent corrections: HighBar mu Count1 correlation/final-read proof remains distinct from actual quantity and later game completion. The subsequent `.5f` six-journey boundary retains construction/economy/combat/reclaim, guard/repair, factory/rally/queue, selected modes, local/generated pointer and keyboard, and independent imported tactical policies. Unknown outcomes stay unknown; optional atomic replacement and `.7` publication remain separate. +The complete-record runtime-evidence source is ready for protected delivery when its hosted +source gate passes. That gate uses a sanitized mechanical growing-log fixture, the typed F# +reducer, 27 canonical Quint scenarios, 14 ITFs, full concrete-state/effect correspondence, +and duplicate/order/prior-state refusal controls. This is source-delivery readiness only; +the stock product identity is unchanged and native useful-play acceptance remains **0/6**. + ## Historical source checkpoint BARC-01.5a is implemented locally from FSBar `f1a18c52246b88e958344cb3bcc87f3c2035a62e` and HighBar `680b62480bfb60a19b3591b7250e03787e1f93d1`. The checkpoint advances only the additive live sibling and browser tactical schema; the frozen five-file HighBar bundle remains byte-identical. It defines `LIVE_CONTROL_PROTOCOL_TACTICAL_V1` / `barc-live-tactical-v1` revision 1, while V1 peers retain the `.4` subset and must refuse tactical bodies before arm. Producer and consumer commit/readback references remain pending until the parent joins the tested local commits. `.5b–f` and the overall `.5` outcome remain open. diff --git a/tests/Broker.NativeProof/RuntimeEvidence/README.md b/tests/Broker.NativeProof/RuntimeEvidence/README.md index 408a137..4eff24a 100644 --- a/tests/Broker.NativeProof/RuntimeEvidence/README.md +++ b/tests/Broker.NativeProof/RuntimeEvidence/README.md @@ -28,6 +28,12 @@ typed reducer, so byte, digest, identity, or effect-order drift is refused. Boun the 32-probe budget; retries preserve it. Deadline and exhaustion block current consumption while historical consumed state remains evidence only. +Hosted `dotnet test` runs this gate through the test project's `VSTest` target. With no +external helper configured, the gate copies the committed sanitized mechanical fixture to +a temporary directory and creates its manifest from the checked-out `HEAD` and tree. It +requires Quint 0.32.0, locked NuGet restore, all 27 named model scenarios, 14 ITFs, the +compiled correspondence replay, and duplicate, reordered, and prior-state mutations. + Before it reads a request, the executable accepts only `--closure-manifest PATH --closure-sha256 HEX --invocation-id ID`. It verifies an exact five-file managed census, exact provenance census, PDB-embedded SourceLink, source identity diff --git a/tests/Broker.NativeProof/RuntimeEvidence/RuntimeEvidence.Tests.fsproj b/tests/Broker.NativeProof/RuntimeEvidence/RuntimeEvidence.Tests.fsproj index 6e3c88b..b884194 100644 --- a/tests/Broker.NativeProof/RuntimeEvidence/RuntimeEvidence.Tests.fsproj +++ b/tests/Broker.NativeProof/RuntimeEvidence/RuntimeEvidence.Tests.fsproj @@ -10,4 +10,7 @@ + + + diff --git a/tests/Broker.NativeProof/RuntimeEvidence/fixtures/complete-record-helper/README.md b/tests/Broker.NativeProof/RuntimeEvidence/fixtures/complete-record-helper/README.md new file mode 100644 index 0000000..3459763 --- /dev/null +++ b/tests/Broker.NativeProof/RuntimeEvidence/fixtures/complete-record-helper/README.md @@ -0,0 +1,7 @@ +# Sanitized complete-record mechanical fixture + +This fixture contains the same bounded filesystem and process mechanics used by the +complete-record correspondence gate. The gate copies the Python files to a temporary +mode-local directory and generates `source-manifest.json` from the checked-out commit and +tree. It contains no game payload, credential, private packet, runtime grant, or accepted +native observation. The fixture can only produce synthetic growing-log and policy inputs. diff --git a/tests/Broker.NativeProof/RuntimeEvidence/fixtures/complete-record-helper/growing_log.py b/tests/Broker.NativeProof/RuntimeEvidence/fixtures/complete-record-helper/growing_log.py new file mode 100644 index 0000000..91defdf --- /dev/null +++ b/tests/Broker.NativeProof/RuntimeEvidence/fixtures/complete-record-helper/growing_log.py @@ -0,0 +1,359 @@ +"""Held-FD adapter for one source-bound, growing Recoil infolog.""" +import base64,hashlib,json,os,re,selectors,stat,subprocess,time +from pathlib import Path +from private_io import Refused,SHA,canonical,components,hash_artifact,need,read_bytes +from runtime_identity import mark_failure,proc_bytes,start_ticks +MAX_LOG=4*1024*1024 +MAX_POLICY_INPUT=6*1024*1024 +MAX_FDS=256 +MAX_SAMPLES=3 +MAX_SETTLEMENT_PROBES=32 +MAX_PREAD_CALLS=128 +SETTLEMENT_PAUSE_SECONDS=0.01 +BOUNDARIES=('browser','normalization','release') +CLOSURE_SCHEMA='fsbar.barc-runtime-evidence-policy-closure/v3' +POLICY_OBSERVATION_SCHEMA='fsbar.barc-runtime-evidence-failure-observation/v1' +POLICY_CHECKPOINTS={'initial-closure','current-process','invocation-ready','request-read','request-evaluation','final-closure','invocation-completion'} +POLICY_KINDS={'exception','pending','refused','unknown'} +POLICY_TO_MECHANICAL={'initial-closure':'policy-closure-precheck','current-process':'policy-artifact','invocation-ready':'policy-ready','request-read':'policy-transport','request-evaluation':'policy-result-join','final-closure':'policy-final-precheck','invocation-completion':'policy-completion'} + +def _unique(pairs): + value={} + for key,item in pairs:need(key not in value,'duplicate policy JSON key');value[key]=item + return value + +def _source_set(config): + encoded=json.dumps(config['source'],sort_keys=True,separators=(',',':')).encode() + return hashlib.sha256(encoded).hexdigest() + +def _policy_observation(raw): + try: + need(isinstance(raw,bytes) and len(raw)<=2048,'policy diagnostic bound') + lines=raw.splitlines();need(len(lines)==1,'single policy diagnostic frame') + value=json.loads(lines[0].decode('utf-8'),object_pairs_hook=_unique) + need(isinstance(value,dict) and set(value)=={'schema','checkpoint','kind'} and value['schema']==POLICY_OBSERVATION_SCHEMA and value['checkpoint'] in POLICY_CHECKPOINTS and value['kind'] in POLICY_KINDS,'closed policy diagnostic frame') + return value + except Exception:return None + +def _closed_state(value,status,boundary,identity,revision,sample_bytes,sample_sha256,prior): + fields={'phase','identity','observedRevision','validatedRevision','validatedBoundary','consumedRevision','consumedBoundary','bytes','sha256','stickyInvalid','reason'} + need(isinstance(value,dict) and set(value)==fields,'closed growing log state') + expected_identity={'runId':identity['runId'],'sourceSetSha256':identity['sourceSetSha256'],'apphostSha256':identity['apphostSha256'],'closureSha256':identity['closureSha256'],'pid':identity['pid'],'startTicks':identity['startTicks'],'uid':identity['uid'],'device':identity['device'],'inode':identity['inode'],'path':identity['path']} + need(value['identity']==expected_identity and type(value['phase']) is str and type(value['stickyInvalid']) is bool and type(value['observedRevision']) is int and type(value['validatedRevision']) is int and type(value['consumedRevision']) is int and type(value['bytes']) is int and type(value['sha256']) is str,'growing log state binding') + need(value['validatedBoundary'] in (None,)+BOUNDARIES and value['consumedBoundary'] in (None,)+BOUNDARIES and (value['reason'] is None or type(value['reason']) is str),'closed growing log state values') + need(min(value['observedRevision'],value['validatedRevision'],value['consumedRevision'],value['bytes'])>=0 and value['consumedRevision']<=value['validatedRevision']<=value['observedRevision'],'coherent growing log counters') + phases={'accepted':'consumed','pending':'sampled','refused':'invalid','unknown':'unknown'} + need(status in phases and value['phase']==phases[status],'growing log status/phase mismatch') + if status=='accepted': + need(value['observedRevision']==value['validatedRevision']==value['consumedRevision']==revision and value['validatedBoundary']==value['consumedBoundary']==boundary and value['bytes']==sample_bytes and value['sha256']==sample_sha256 and value['stickyInvalid'] is False and value['reason'] is None,'fresh growing log decision') + elif status=='pending': + previous=prior or {'validatedRevision':0,'validatedBoundary':None,'consumedRevision':0,'consumedBoundary':None} + need(value['observedRevision']==revision and value['bytes']==sample_bytes and value['sha256']==sample_sha256 and value['stickyInvalid'] is False and type(value['reason']) is str and len(value['reason'])>0,'fresh pending growing log decision') + need(value['validatedRevision']==previous['validatedRevision'] and value['validatedBoundary']==previous['validatedBoundary'] and value['consumedRevision']==previous['consumedRevision'] and value['consumedBoundary']==previous['consumedBoundary'],'pending growing log history mismatch') + else: + need(value['stickyInvalid'] is True and type(value['reason']) is str and len(value['reason'])>0,'terminal growing log state mismatch') + return value + +class GrowingLog: + def __init__(self,path,process,fd,opened,writer): + self.path=str(path);self.process=dict(process);self.fd=fd;self.device=opened.st_dev;self.inode=opened.st_ino + self.previous=b'';self.revision=0;self.state=None;self.revoked=False;self.writer=writer;self.closure_sha256=None;self.failure_checkpoint='policy-scope-join';self.last_policy_observation=None;self.settlement_transcript=[];self.settlement_effects=[] + @classmethod + def acquire(cls,path,process): + check='infolog-path';fd=None + try: + path=components(str(canonical(str(path))));before=path.lstat() + check='infolog-parent';parent=path.parent.stat() + need(parent.st_uid==os.geteuid() and stat.S_ISDIR(parent.st_mode) and stat.S_IMODE(parent.st_mode)==0o700,'growing log private parent') + check='infolog-file-custody';need(stat.S_ISREG(before.st_mode) and before.st_uid==os.geteuid() and stat.S_IMODE(before.st_mode)==0o600 and before.st_nlink==1 and before.st_size<=MAX_LOG,'growing log custody/bound') + check='infolog-process';need(set(process)=={'pid','startTicks','uid'} and process['uid']==os.geteuid() and start_ticks(process['pid'])==process['startTicks'],'growing log producer identity') + check='infolog-open';fd=os.open(path,os.O_RDONLY|os.O_NOFOLLOW|os.O_CLOEXEC|os.O_NONBLOCK) + check='infolog-descriptor-identity' + opened=os.fstat(fd);need((opened.st_dev,opened.st_ino,opened.st_uid,stat.S_IMODE(opened.st_mode),opened.st_nlink)==(before.st_dev,before.st_ino,before.st_uid,0o600,1),'growing log identity changed') + writer=cls._writer(process,path,opened) + check='infolog-final-generation' + need(start_ticks(process['pid'])==process['startTicks'],'growing log producer changed') + return cls(path,process,fd,opened,writer) + except BaseException as error: + failure=mark_failure(error,check) + if fd is not None: + try:os.close(fd) + except OSError:setattr(failure,'_barc_cleanup_unknown',True) + raise failure + @staticmethod + def _writer(process,path,opened,deadline=None): + def check_deadline(): + if deadline is not None:GrowingLog._deadline(deadline) + try: + check_deadline();pid=process['pid'];names=os.listdir(f'/proc/{pid}/fd');check_deadline();need(len(names)<=MAX_FDS,'growing log writer fd bound');matches=[] + for name in names: + check_deadline() + if not name.isdigit():continue + try: + current=os.stat(f'/proc/{pid}/fd/{name}') + check_deadline() + if (current.st_dev,current.st_ino)!=(opened.st_dev,opened.st_ino):continue + value=proc_bytes(pid,f'fdinfo/{name}',4096).decode('ascii') + check_deadline() + flags=re.search(r'^flags:\s+([0-7]+)$',value,re.MULTILINE);position=re.search(r'^pos:\s+([0-9]+)$',value,re.MULTILINE) + if flags and position: + bits=int(flags[1],8) + if bits&os.O_ACCMODE in (os.O_WRONLY,os.O_RDWR):matches.append({'fd':int(name),'flags':bits,'position':int(position[1])}) + except FileNotFoundError:continue + except BaseException as error:raise mark_failure(error,'infolog-writer-census') + try: + check_deadline() + need(len(matches)==1,'growing log writer unavailable or ambiguous') + need(start_ticks(pid)==process['startTicks'],'growing log writer generation changed') + check_deadline() + return matches[0] + except BaseException as error:raise mark_failure(error,'infolog-writer-match') + def close(self): + if self.fd is not None: + os.close(self.fd);self.fd=None + @staticmethod + def _deadline(deadline): + if time.monotonic()>=deadline: + raise mark_failure(Refused('growing log record settlement deadline'),'infolog-record-settlement-deadline','deadline',None) + def _read_exact(self,length,deadline=None): + chunks=[];offset=0;calls=0 + while offset=MAX_PREAD_CALLS: + raise mark_failure(Refused('growing log record exact-read exhausted'),'infolog-record-settlement-exhausted','refused',None) + block=os.pread(self.fd,min(65536,length-offset),offset);need(block,'growing log truncated');chunks.append(block);offset+=len(block) + calls+=1 + if deadline is not None:self._deadline(deadline) + return b''.join(chunks) + def _sample(self,deadline): + try:return self._sample_impl(deadline) + except BaseException: + self.revoked=True;raise + def _custody(self, expected=None, exact_size=False, final=False, deadline=None): + def checkpoint(name): + if final:self.failure_checkpoint='infolog-final-'+name + if deadline is not None:self._deadline(deadline) + checkpoint('scope') + need(not self.revoked and self.fd is not None,'growing log scope revoked or closed') + pid=self.process['pid'] + checkpoint('process') + need(os.stat(f'/proc/{pid}').st_uid==self.process['uid']==os.geteuid() and start_ticks(pid)==self.process['startTicks'],'growing log producer changed') + checkpoint('path');path=components(self.path) + checkpoint('parent');parent=path.parent.stat() + need(parent.st_uid==os.geteuid() and stat.S_ISDIR(parent.st_mode) and stat.S_IMODE(parent.st_mode)==0o700,'growing log private parent changed') + checkpoint('named-identity');named=path.lstat() + need((named.st_dev,named.st_ino)==(self.device,self.inode),'growing log named identity changed') + checkpoint('descriptor-identity');opened=os.fstat(self.fd) + need((opened.st_dev,opened.st_ino)==(self.device,self.inode),'growing log descriptor identity changed') + checkpoint('file-custody') + need(stat.S_ISREG(named.st_mode) and named.st_uid==os.geteuid() and stat.S_IMODE(named.st_mode)==0o600 and named.st_nlink==1,'growing log custody') + checkpoint('size-cap');need(opened.st_size<=MAX_LOG,'growing log bound') + writer=self._writer(self.process,path,opened,deadline) + if expected is not None: + checkpoint('size-regression');need(opened.st_size>=len(expected) and (not exact_size or opened.st_size==len(expected)),'growing log changed after policy') + checkpoint('prefix-read');actual=self._read_exact(len(expected),deadline) + checkpoint('prefix-drift');need(actual==expected,'growing log prefix changed after read') + return opened,writer + def _sample_impl(self,deadline): + self._deadline(deadline) + opened,_=self._custody(deadline=deadline) + need(len(self.previous)<=opened.st_size,'growing log truncated') + length=opened.st_size;raw=self._read_exact(length,deadline) + # This second retained-FD read closes the permanent overwrite window + # after the first read. The custody check also reopens no authority: + # any failure makes this object sticky-revoked in _sample. + after,writer=self._custody(raw,False,deadline=deadline) + need(after.st_size>=length,'growing log truncated during sample') + intact=raw.startswith(self.previous) + need(intact,'growing log prefix changed') + self._deadline(deadline) + return raw,intact,writer + def _settle(self,deadline,probes): + while probes0,'growing log policy stdin stalled');offset+=written + except BrokenPipeError: + offset=len(encoded) + if offset==len(encoded): + selector.unregister(input_fd);process.stdin.close();stdin_open=False + elif key.data=='stdout' and stdout_open: + block=os.read(output_fd,min(65536,131073-transport_count)) + if block: + transport_count+=len(block);output.extend(block);need(transport_count<=131072,'growing log policy output bound') + if not ready and b'\n' in output: + line,tail=bytes(output).split(b'\n',1) + value=json.loads(line.decode('utf-8'),object_pairs_hook=_unique) + need(set(value)=={'schema','invocationId','closureSha256','pid','startTicks','uid','phase'} and value['schema']=='fsbar.barc-runtime-evidence-policy-ready/v2' and value['phase']=='ready' and value['invocationId']==invocation and value['closureSha256']==closure_sha and value['pid']==process.pid and value['startTicks']==start_ticks(process.pid) and value['uid']==os.geteuid(),'policy ready join') + ready=True;ready_line=line;ready_value=value;output=bytearray(tail);selector.register(input_fd,selectors.EVENT_WRITE,'stdin');input_registered=True + else: + selector.unregister(output_fd);process.stdout.close();stdout_open=False + if not ready and stdin_open: + process.stdin.close();stdin_open=False + elif key.data=='stderr' and stderr_open: + block=os.read(error_fd,min(65536,131073-transport_count)) + if block: + transport_count+=len(block);diagnostic.extend(block);need(transport_count<=131072,'growing log policy combined output bound') + else: + selector.unregister(error_fd);process.stderr.close();stderr_open=False + if process.poll() is not None and stdin_open: + if input_registered:selector.unregister(input_fd) + process.stdin.close();stdin_open=False + remaining=policy_deadline-time.monotonic() + if remaining<=0:raise subprocess.TimeoutExpired([path],5) + code=process.wait(timeout=remaining);need(code in (0,2),'growing log policy execution') + need(ready and ready_line is not None,'policy readiness unavailable') + check='policy-completion' + try:final=json.loads(bytes(output).decode('utf-8'),object_pairs_hook=_unique) + except (UnicodeError,json.JSONDecodeError) as error:raise Refused('invalid policy completion') from error + need(set(final)=={'schema','invocationId','closureSha256','pid','startTicks','uid','phase','result'} and final['schema']=='fsbar.barc-runtime-evidence-policy-completed/v2' and final['invocationId']==invocation and final['closureSha256']==closure_sha and final['pid']==process.pid and final['startTicks']==ready_value['startTicks'] and final['uid']==os.geteuid() and final['phase']=='completed','policy completion join') + self.last_policy_observation=_policy_observation(bytes(diagnostic)) if diagnostic else None + return (json.dumps(final['result'],separators=(',',':'))+'\n').encode() + except BaseException as error: + observation=_policy_observation(bytes(diagnostic)) if diagnostic else None + if observation is not None:check=POLICY_TO_MECHANICAL[observation['checkpoint']] + outcome='deadline' if isinstance(error,subprocess.TimeoutExpired) else None + if process is not None and process.poll() is None: + process.kill() + try:process.wait(timeout=max(0,policy_deadline-time.monotonic())) + except subprocess.TimeoutExpired as settlement:raise mark_failure(Refused('growing log policy child settlement unknown'),check,'unexpected',observation) from settlement + raise mark_failure(error,check,outcome,observation) + finally: + if selector is not None:selector.close() + if process is not None and process.stdin is not None and not process.stdin.closed:process.stdin.close() + if process is not None and process.stdout is not None and not process.stdout.closed:process.stdout.close() + if process is not None and process.stderr is not None and not process.stderr.closed:process.stderr.close() + def consume(self,boundary,config,deadline): + try:return self._consume_impl(boundary,config,deadline) + except BaseException as error: + self.revoked=True + raise mark_failure(error,self.failure_checkpoint) + def _consume_impl(self,boundary,config,deadline): + need(boundary in BOUNDARIES and isinstance(deadline,(int,float)),'closed growing log boundary/deadline') + policy_deadline=min(deadline,time.monotonic()+5) + policy=config['artifacts']['runtimeEvidencePolicy'];closure=config['artifacts']['runtimeEvidencePolicyClosure'] + self.failure_checkpoint='policy-artifact';hash_artifact(policy['path'],policy['sha256'],268435456) + self.failure_checkpoint='policy-closure-precheck';closure_value=self._closure(closure['path'],closure['sha256'],policy_deadline) + apphost=next(row for row in closure_value['managed'] if row['role']=='apphost') + self.failure_checkpoint='policy-apphost-join' + need((policy['path'],policy['sha256'])==(apphost['path'],apphost['sha256']),'launched apphost/closure join') + self.failure_checkpoint='policy-scope-join' + if self.closure_sha256 is None:self.closure_sha256=closure['sha256'] + need(self.closure_sha256==closure['sha256'],'policy closure changed within growing-log scope') + expected={'runId':config['runId'],'sourceSetSha256':_source_set(config),'apphostSha256':policy['sha256'],'closureSha256':closure['sha256'],'writeRoot':config['commands']['engine'][5],'dataRoot':config['commands']['engine'][3]} + last=None;probes=0 + for _ in range(MAX_SAMPLES): + need(time.monotonic()0,'growing log policy deadline') + self.failure_checkpoint='policy-transport';self.last_policy_observation=None + output=self._run_policy(policy['path'],closure['path'],closure['sha256'],encoded,policy_deadline) + try:value=json.loads(output.decode('utf-8'),object_pairs_hook=_unique,parse_constant=lambda _:(_ for _ in ()).throw(Refused('nonfinite policy JSON'))) + except (UnicodeError,json.JSONDecodeError) as error:raise Refused('invalid growing log policy result') from error + self.failure_checkpoint='policy-result-join' + need(set(value)=={'schema','status','state'} and value['schema']=='fsbar.barc-growing-log-policy-result/v2' and value['status'] in ('accepted','pending','refused','unknown') and isinstance(value['state'],dict),'closed growing log policy result') + identity=dict(expected);identity.update({'pid':self.process['pid'],'startTicks':self.process['startTicks'],'uid':self.process['uid'],'device':str(self.device),'inode':str(self.inode),'path':self.path}) + sample_sha256=hashlib.sha256(raw).hexdigest() + next_state=_closed_state(value['state'],value['status'],boundary,identity,self.revision,len(raw),sample_sha256,self.state);last=value['status'] + before_state=self.state + self.state=next_state + # Qualification consumes this bounded in-memory trace to prove the + # actual policy transition and its position among settlement probes. + self.settlement_effects.append({'kind':'policy','boundary':boundary,'status':last,'expected':expected,'observation':{key:request['observation'][key] for key in ('pid','startTicks','uid','device','inode','path','revision','bytes','sha256')},'beforeState':before_state,'afterState':next_state}) + # The decision authorizes exactly this still-current sample. Growth + # observed after policy evaluation receives a new revision instead. + self.failure_checkpoint='infolog-final-refresh';current,_=self._custody(raw,False,True,policy_deadline) + self.failure_checkpoint='policy-final-precheck' + hash_artifact(policy['path'],policy['sha256'],268435456) + self._closure(closure['path'],closure['sha256'],policy_deadline) + need(time.monotonic()1 and process['uid']==os.geteuid(),'owned selected process') + need(os.stat(f'/proc/{pid}').st_uid==os.geteuid() and start_ticks(pid)==process['startTicks'],'PID/start mismatch') + need(os.readlink(f'/proc/{pid}/exe')==engine['path'],'runtime executable mismatch') + actual_exe=os.stat(f'/proc/{pid}/exe');expected_exe=os.stat(engine['path'],follow_symlinks=False) + need((actual_exe.st_dev,actual_exe.st_ino)==(expected_exe.st_dev,expected_exe.st_ino),'runtime executable inode mismatch') + hash_artifact(engine['path'],engine['sha256']);info=hash_artifact(plugin['path'],plugin['sha256']) + lines=proc_bytes(pid,'maps',1048576).decode().splitlines();matches=[] + for line in lines: + fields=line.split(None,5) + if len(fields)==6 and fields[5]==plugin['path']: + matches.append(fields) + need(matches and all(int(fields[4])==info.st_ino and fields[3]==f'{os.major(info.st_dev):02x}:{os.minor(info.st_dev):02x}' for fields in matches),'mapped module inode mismatch') + if producer_path is not None: + target=os.stat(producer_path,follow_symlinks=False);names=os.listdir(f'/proc/{pid}/fd');need(len(names)<=256,'producer fd bound') + found=False + for name in names: + try: + current=os.stat(f'/proc/{pid}/fd/{name}') + if (current.st_dev,current.st_ino)==(target.st_dev,target.st_ino): + info=proc_bytes(pid,f"fdinfo/{name}",4096).decode() + flags=re.search(r"^flags:\s+([0-7]+)$",info,re.MULTILINE) + if flags: + value=int(flags[1],8) + if value&os.O_ACCMODE==os.O_WRONLY and value&os.O_APPEND: found=True + except FileNotFoundError: continue + need(found,'actual producer open fd unavailable') + need(start_ticks(pid)==process['startTicks'],'process changed during validation') + return {'pid':pid,'startTicks':process['startTicks'],'engineSha256':engine['sha256'],'pluginSha256':plugin['sha256']} + +def verify_capture_writer(expected,writer,node,source): + need(set(expected)=={'pid','startTicks','uid'} and set(writer)=={'pid','startTicks','uid','executable','sourcePath','sourceSha256'},'closed capture writer identity') + need({key:writer[key] for key in expected}==expected,'root-selected capture writer mismatch') + pid=expected['pid'];need(type(pid) is int and pid>1 and expected['uid']==os.geteuid(),'owned capture writer') + need(os.stat(f'/proc/{pid}').st_uid==os.geteuid() and start_ticks(pid)==expected['startTicks'],'capture PID/start mismatch') + need(os.readlink(f'/proc/{pid}/exe')==node['path'] and writer['executable']==node['path'],'capture executable mismatch') + hash_artifact(node['path'],node['sha256']);hash_artifact(source['path'],source['sha256']) + need(writer['sourcePath']==source['path'] and writer['sourceSha256']==source['sha256'],'capture source mismatch') + need(start_ticks(pid)==expected['startTicks'],'capture process changed during validation') + return {'pid':pid,'startTicks':expected['startTicks'],'sourceSha256':source['sha256']} + +def _observed_file(path,maximum=268435456): + try: + before=os.stat(path,follow_symlinks=False) + if not stat.S_ISREG(before.st_mode) or before.st_size>maximum:return {'available':False,'reason':'nonregular-or-oversized'} + fd=os.open(path,os.O_RDONLY|os.O_NOFOLLOW|os.O_NONBLOCK|os.O_CLOEXEC) + try: + first=os.fstat(fd);h=hashlib.sha256();size=0 + while True: + block=os.read(fd,65536) + if not block:break + size+=len(block) + if size>maximum:return {'available':False,'reason':'oversized'} + h.update(block) + last=os.fstat(fd) + if (first.st_dev,first.st_ino,first.st_size,first.st_mtime_ns,first.st_ctime_ns)!=(last.st_dev,last.st_ino,last.st_size,last.st_mtime_ns,last.st_ctime_ns):return {'available':False,'reason':'changed-during-read'} + return {'available':True,'device':first.st_dev,'inode':first.st_ino,'bytes':size,'sha256':h.hexdigest()} + finally:os.close(fd) + except OSError:return {'available':False,'reason':'unavailable'} + +def _closure_refuse(code,diagnostic_path,fields,allowed_count,executable_count): + document={'schema':'fsbar.barc-stock-runtime-map-diagnostic/v1','status':'refused','failureCode':code,'allowedCount':allowed_count,'executableMapCount':executable_count,'candidate':fields} + if diagnostic_path is not None: + try:atomic_new(str(diagnostic_path),document) + except Exception:pass + raise RuntimeClosureRefused(code) + +def verify_executable_map_lines(lines,allowed,diagnostic_path=None): + """Require every file-backed executable map to match one pinned path/inode.""" + seen=set();executable=[] + for line in lines: + fields=line.split(None,5) + if len(fields)!=6 or 'x' not in fields[1] or not fields[5].startswith('/'):continue + executable.append(fields) + need(len(executable)<=512,'executable mapping count bound') + for fields in executable: + raw=fields[5];deleted=raw.endswith(' (deleted)');candidate_raw=raw[:-10] if deleted else raw + path=os.path.realpath(candidate_raw);need(len(path.encode())<=4096,'executable mapping path bound') + admitted=allowed.get(path);candidate={'path':path,'mappedDevice':fields[3],'mappedInode':fields[4],'deleted':deleted,'admitted':admitted is not None,'expectedSha256':None if admitted is None else admitted['sha256'],'observed':_observed_file(path)} + if deleted:_closure_refuse('runtime-map-deleted',diagnostic_path,candidate,len(allowed),len(executable)) + if admitted is None:_closure_refuse('runtime-map-unadmitted',diagnostic_path,candidate,len(allowed),len(executable)) + try:info=os.stat(path,follow_symlinks=False) + except OSError:_closure_refuse('runtime-map-missing',diagnostic_path,candidate,len(allowed),len(executable)) + if int(fields[4])!=info.st_ino or fields[3]!=f'{os.major(info.st_dev):02x}:{os.minor(info.st_dev):02x}':_closure_refuse('runtime-map-identity-drift',diagnostic_path,candidate,len(allowed),len(executable)) + try:hash_artifact(path,admitted['sha256'],268435456) + except (Refused,OSError):_closure_refuse('runtime-map-content-drift',diagnostic_path,candidate,len(allowed),len(executable)) + seen.add(path) + if not seen:_closure_refuse('runtime-map-none',diagnostic_path,{},len(allowed),len(executable)) + return seen + +def verify_runtime_closure(process,libraries_artifact,diagnostic_path=None): + try: + need(set(process)=={'pid','startTicks','uid'},'closed runtime process identity') + pid=process['pid'];need(os.stat(f'/proc/{pid}').st_uid==os.geteuid() and start_ticks(pid)==process['startTicks'],'runtime closure PID/start mismatch') + except BaseException as error:raise mark_failure(error,'runtime-closure-process') + try: + from private_io import read_json + value=read_json(libraries_artifact['path'],libraries_artifact['sha256'],4*1024*1024) + except BaseException as error:raise mark_failure(error,'runtime-closure-input') + try: + allowed={} + for item in value['resolvedElfClosure']: + resolved=os.path.realpath(item['resolvedPath']);need(resolved==item['resolvedPath'],'closure resolved path drift');allowed[resolved]=item + for item in value['binaries']: + resolved=os.path.realpath(item['path']);allowed[resolved]={'sha256':item['sha256']} + except BaseException as error:raise mark_failure(error,'runtime-closure-resolve') + try:lines=proc_bytes(pid,'maps',4*1024*1024).decode().splitlines() + except BaseException as error:raise mark_failure(error,'runtime-map-census') + try:seen=verify_executable_map_lines(lines,allowed,diagnostic_path) + except BaseException as error:raise mark_failure(error,'runtime-map-validation') + try: + if os.path.realpath(os.readlink(f'/proc/{pid}/exe')) not in seen:_closure_refuse('runtime-engine-map-missing',diagnostic_path,{},len(allowed),len(seen)) + except BaseException as error:raise mark_failure(error,'runtime-executable-map') + try: + if start_ticks(pid)!=process['startTicks']:_closure_refuse('runtime-process-identity-drift',diagnostic_path,{},len(allowed),len(seen)) + except BaseException as error:raise mark_failure(error,'runtime-final-generation') + return seen + +def acquire_data_root_evidence(log_path,process): + """Acquire the held log descriptor; typed F# owns all root parsing and decisions.""" + from growing_log import GrowingLog + try: + need(set(process)=={'pid','startTicks','uid'},'closed runtime process identity') + pid=process['pid'];need(os.stat(f'/proc/{pid}').st_uid==os.geteuid() and process['uid']==os.geteuid() and start_ticks(pid)==process['startTicks'],'data-root PID/start mismatch') + except BaseException as error:raise mark_failure(error,'infolog-process') + try:return GrowingLog.acquire(log_path,process) + except BaseException as error:raise mark_failure(error,getattr(error,'_barc_failure_observation',{}).get('check','infolog-path')) diff --git a/tests/Broker.NativeProof/RuntimeEvidence/fixtures/complete-record-helper/test_growing_log.py b/tests/Broker.NativeProof/RuntimeEvidence/fixtures/complete-record-helper/test_growing_log.py new file mode 100644 index 0000000..6298345 --- /dev/null +++ b/tests/Broker.NativeProof/RuntimeEvidence/fixtures/complete-record-helper/test_growing_log.py @@ -0,0 +1,748 @@ +import base64,hashlib,json,os,pathlib,shutil,stat,subprocess,sys,tempfile,threading,time,unittest +from unittest import mock +import growing_log +from growing_log import GrowingLog +from private_io import Refused,digest +from runtime_identity import acquire_data_root_evidence,start_ticks + +POLICY_BUILD=pathlib.Path(os.environ['BAR_RUNTIME_EVIDENCE_BUILD']) +POLICY_SOURCE=pathlib.Path(os.environ['BAR_RUNTIME_EVIDENCE_SOURCE']) +WRITER="""import os,sys +os.umask(0o077) +p=sys.argv[1] +f=open(p,'w+b',buffering=0) +f.write(base64.b64decode(sys.argv[2])) +for command in sys.stdin.buffer: + command=command.rstrip(b'\\n') + if command.startswith(b'append:'):f.seek(0,2);f.write(command[7:]+b'\\n') + elif command.startswith(b'appendraw:'):f.seek(0,2);f.write(base64.b64decode(command[10:])) + elif command==b'rewrite':f.seek(0);f.write(b'X');f.flush() + elif command==b'truncate':f.truncate(1);f.flush() + elif command==b'close':f.close();break +""" + +class GrowingLogTests(unittest.TestCase): + def test_policy_diagnostic_decoder_is_total_closed_and_never_echoes(self): + valid=b'{"schema":"fsbar.barc-runtime-evidence-failure-observation/v1","checkpoint":"request-evaluation","kind":"refused"}\n' + self.assertEqual(growing_log._policy_observation(valid)['checkpoint'],'request-evaluation') + invalid=(valid.replace(b'"refused"',b'"PRIVATE_SENTINEL"'),valid+valid,valid.replace(b'"checkpoint"',b'"checkpoint":[],"other"'),b'['+b'x'*2049+b']') + for raw in invalid:self.assertIsNone(growing_log._policy_observation(raw)) + def test_policy_transport_retains_only_one_closed_diagnostic_frame(self): + policy=self.root/'diagnostic-policy' + policy.write_text('''#!/usr/bin/python3 +import hashlib,json,os,sys +args=dict(zip(sys.argv[1::2],sys.argv[2::2]));inv=args["--invocation-id"];closure=args["--closure-sha256"] +ticks=open(f"/proc/{os.getpid()}/stat").read().split()[21] +print(json.dumps({"schema":"fsbar.barc-runtime-evidence-policy-ready/v2","invocationId":inv,"closureSha256":closure,"pid":os.getpid(),"startTicks":ticks,"uid":os.geteuid(),"phase":"ready"},separators=(",",":")),flush=True) +sys.stdin.buffer.read() +print(json.dumps({"schema":"fsbar.barc-runtime-evidence-policy-completed/v2","invocationId":inv,"closureSha256":closure,"pid":os.getpid(),"startTicks":ticks,"uid":os.geteuid(),"phase":"completed","result":{}},separators=(",",":")),flush=True) +sys.stderr.write('{"schema":"fsbar.barc-runtime-evidence-failure-observation/v1","checkpoint":"request-evaluation","kind":"refused"}\\n');sys.stderr.flush() +''');os.chmod(policy,0o700) + runner=object.__new__(GrowingLog);runner.last_policy_observation=None + self.assertEqual(runner._run_policy(str(policy),'/unused','a'*64,b'{}',time.monotonic()+2),b'{}\n') + self.assertEqual(runner.last_policy_observation['checkpoint'],'request-evaluation') + policy.write_text(policy.read_text().replace("sys.stderr.write('{\"schema\"", "sys.stderr.write('PRIVATE_SENTINEL\\n'+ '{\"schema\""));os.chmod(policy,0o700) + runner.last_policy_observation=None + self.assertEqual(runner._run_policy(str(policy),'/unused','a'*64,b'{}',time.monotonic()+2),b'{}\n') + self.assertIsNone(runner.last_policy_observation) + def test_actual_compiled_failure_projection_uses_production_transport(self): + config=self.config();expected={'configSha256':'d'*64,'sourceSetSha256':growing_log._source_set(config),'policySha256':config['artifacts']['runtimeEvidencePolicy']['sha256'],'closureSha256':self.closure_sha} + observation={'schema':'fsbar.barc-stock-failure-observation/v1',**expected,'scope':'post-handoff-pre-browser','check':'policy-result-join','outcome':'policy-nonaccepted','policyObservation':{'schema':'fsbar.barc-runtime-evidence-failure-observation/v1','checkpoint':'request-evaluation','kind':'refused'}} + observation_raw=(json.dumps(observation,separators=(',',':'))+'\n').encode() + operation_raw=b'{"schema":"fsbar.barc-stock-operation-result/v1","status":"failed","category":"refused"}\n' + request={'schema':'fsbar.barc-stock-failure-projection/v1','expected':expected,'observation':observation,'observationSha256':hashlib.sha256(observation_raw).hexdigest(),'operationResultBase64':base64.b64encode(operation_raw).decode(),'operationResultSha256':hashlib.sha256(operation_raw).hexdigest()} + runner=object.__new__(GrowingLog);runner.last_policy_observation=None + encoded=json.dumps(request,separators=(',',':')).encode();projected=json.loads(runner._run_policy(str(self.policy),str(self.closure),self.closure_sha,encoded,time.monotonic()+5)) + self.assertEqual((projected['status'],projected['check'],projected['nativeAcceptance']),('observed-failure','policy-result-join',False)) + request['expected']['sourceSetSha256']='f'*64 + unavailable=json.loads(runner._run_policy(str(self.policy),str(self.closure),self.closure_sha,json.dumps(request,separators=(',',':')).encode(),time.monotonic()+5)) + self.assertEqual(unavailable['status'],'diagnostic-unavailable');self.assertNotIn('PRIVATE_SENTINEL',json.dumps(unavailable)) + request['expected']['sourceSetSha256']=expected['sourceSetSha256'];request['operationResultSha256']='0'*64 + false_digest=json.loads(runner._run_policy(str(self.policy),str(self.closure),self.closure_sha,json.dumps(request,separators=(',',':')).encode(),time.monotonic()+5)) + self.assertEqual(false_digest['status'],'diagnostic-unavailable') + def test_later_final_refresh_failure_drops_noncausal_pending_observation(self): + self.spawn(self.text().replace(b'[DataDirLocater::Check] Isolation Mode!\n',b''));original_run=self.handle._run_policy;original_custody=self.handle._custody;after=[False] + def policy(*args): + output=original_run(*args);after[0]=True;return output + def custody(*args,**kwargs): + if after[0]:raise OSError('PRIVATE_SENTINEL_FINAL_REFRESH') + return original_custody(*args,**kwargs) + self.handle._run_policy=policy;self.handle._custody=custody + with self.assertRaises(OSError) as caught:self.consume('browser') + fact=caught.exception._barc_failure_observation + self.assertEqual((fact['check'],fact['outcome'],fact['policyObservation']),('infolog-final-refresh','os-unavailable',None)) + def test_acquisition_close_failure_preserves_writer_refusal(self): + self.spawn();real_close=os.close;closed=[] + def close_failure(fd):closed.append(fd);raise OSError('PRIVATE_SENTINEL_CLOSE') + with mock.patch.object(GrowingLog,'_writer',side_effect=growing_log.mark_failure(Refused('PRIVATE_SENTINEL_WRITER'),'infolog-writer-match')),mock.patch.object(growing_log.os,'close',side_effect=close_failure): + with self.assertRaises(Refused) as caught:GrowingLog.acquire(self.log,self.handle.process) + for fd in closed:real_close(fd) + fact=caught.exception._barc_failure_observation + self.assertEqual((fact['check'],fact['outcome']),('infolog-writer-match','refused'));self.assertTrue(caught.exception._barc_cleanup_unknown) + def test_three_accepted_growth_samples_report_mechanical_exhaustion(self): + self.spawn();original=self.handle._run_policy;calls=[0] + def grow(*args): + output=original(*args);calls[0]+=1;self.command('append:benign complete record');return output + self.handle._run_policy=grow + with self.assertRaises(Refused) as caught:self.consume('browser') + fact=caught.exception._barc_failure_observation + self.assertEqual(calls[0],3);self.assertEqual((fact['check'],fact['outcome'],fact['policyObservation']),('policy-sample-exhausted','refused',None)) + def test_genuine_pending_exhaustion_retains_policy_observation(self): + self.spawn(self.text().replace(b'[DataDirLocater::Check] Isolation Mode!\n',b'')) + with self.assertRaises(Refused) as caught:self.consume('browser') + fact=caught.exception._barc_failure_observation + self.assertEqual((fact['check'],fact['outcome']),('policy-sample-exhausted','policy-nonaccepted'));self.assertEqual(fact['policyObservation']['kind'],'pending') + def test_partial_record_settles_before_first_policy_revision(self): + initial=self.text()[:-1];self.spawn(initial);requests=[];actual=self.handle._run_policy;actual_sample=self.handle._sample;probes=[0] + def inspect(*args): + requests.append(json.loads(args[3])['observation']['revision']);return actual(*args) + self.handle._run_policy=inspect + def sample(deadline): + value=actual_sample(deadline);probes[0]+=1 + if probes[0]==1:self.command('appendraw:'+base64.b64encode(b'\n').decode()) + return value + self.handle._sample=sample;result=self.consume('browser') + self.assertEqual((requests,result['revision']),([1],1)) + self.assertGreaterEqual(len(self.handle.settlement_transcript),2) + self.assertEqual(self.handle.settlement_transcript[-1]['event'],'complete') + output=os.environ.get('BAR_SETTLEMENT_TRANSCRIPT') + if output:pathlib.Path(output).write_text(json.dumps(self.handle.settlement_transcript,separators=(',',':'))+'\n') + def test_continuous_partial_tail_exhausts_without_policy_evaluation(self): + self.spawn(self.text()[:-1]);calls=[0] + self.handle._run_policy=lambda *args:(calls.__setitem__(0,calls[0]+1),b'')[1] + with mock.patch.object(growing_log,'MAX_SETTLEMENT_PROBES',3): + with self.assertRaises(Refused) as caught:self.consume('browser') + fact=caught.exception._barc_failure_observation + self.assertEqual((calls[0],self.handle.revision,fact['check'],fact['outcome'],fact['policyObservation']),(0,0,'infolog-record-settlement-exhausted','refused',None)) + def test_settlement_deadline_prevents_policy_launch(self): + self.spawn(self.text()[:-1]);calls=[0];self.handle._run_policy=lambda *args:calls.__setitem__(0,calls[0]+1) + with self.assertRaises(Refused) as caught:self.handle._settle(time.monotonic(),0) + fact=caught.exception._barc_failure_observation + self.assertEqual((calls[0],self.handle.revision,fact['check'],fact['outcome'],fact['policyObservation']),(0,0,'infolog-record-settlement-deadline','deadline',None)) + def test_partial_prefix_rewrite_is_sticky_across_probes(self): + self.spawn(self.text()[:-1]);real_sleep=time.sleep;changed=[False] + def rewrite(_): + if not changed[0]: + changed[0]=True;self.child.stdin.write(b'rewrite\n');self.child.stdin.flush();real_sleep(.03) + else:real_sleep(0) + with mock.patch.object(growing_log.time,'sleep',side_effect=rewrite): + with self.assertRaises(Refused):self.consume('browser') + self.assertTrue(self.handle.revoked);self.assertEqual(self.handle.revision,0) + def test_exact_read_refuses_after_finite_short_read_budget(self): + self.spawn(self.text());actual=os.pread + def short(fd,count,offset):return actual(fd,min(count,1),offset) + with mock.patch.object(growing_log,'MAX_PREAD_CALLS',2),mock.patch.object(growing_log.os,'pread',side_effect=short): + with self.assertRaises(Refused) as caught:self.consume('browser') + self.assertEqual(caught.exception._barc_failure_observation['check'],'infolog-record-settlement-exhausted') + def test_deadline_expiry_inside_writer_census_stops_before_fd_walk_and_policy(self): + self.spawn(self.text());base=time.monotonic();expired=[False];fd_stats=[0];actual_listdir=os.listdir;actual_stat=os.stat;policy=[0] + def listdir(path): + value=actual_listdir(path) + if path==f'/proc/{self.child.pid}/fd':expired[0]=True + return value + def guarded_stat(path,*args,**kwargs): + if expired[0] and str(path).startswith(f'/proc/{self.child.pid}/fd/'): + fd_stats[0]+=1 + return actual_stat(path,*args,**kwargs) + self.handle._run_policy=lambda *args:policy.__setitem__(0,policy[0]+1) + with mock.patch.object(growing_log.time,'monotonic',side_effect=lambda:base+2 if expired[0] else base),mock.patch.object(growing_log.os,'listdir',side_effect=listdir),mock.patch.object(growing_log.os,'stat',side_effect=guarded_stat): + with self.assertRaises(Refused) as caught:self.handle._settle(base+1,0) + self.assertEqual((fd_stats[0],policy[0],self.handle.revision,caught.exception._barc_failure_observation['check']),(0,0,0,'infolog-record-settlement-deadline')) + def test_deadline_at_candidate_promotion_does_not_advance_revision_or_launch_policy(self): + self.spawn(self.text());base=time.monotonic();expired=[False];actual=self.handle._sample;policy=[0] + def expire_after_sample(deadline): + value=actual(deadline);expired[0]=True;return value + self.handle._sample=expire_after_sample;self.handle._run_policy=lambda *args:policy.__setitem__(0,policy[0]+1) + with mock.patch.object(growing_log.time,'monotonic',side_effect=lambda:base+2 if expired[0] else base): + with self.assertRaises(Refused) as caught:self.handle._settle(base+1,0) + self.assertEqual((policy[0],self.handle.revision,caught.exception._barc_failure_observation['check']),(0,0,'infolog-record-settlement-deadline')) + def test_settlement_failure_after_pending_drops_policy_observation(self): + self.spawn(self.text().replace(b'[DataDirLocater::Check] Isolation Mode!\n',b''));actual=self.handle._run_policy;calls=[0] + def append_partial(*args): + output=actual(*args);calls[0]+=1 + if calls[0]==1:self.command('appendraw:'+base64.b64encode(b'partial').decode()) + return output + self.handle._run_policy=append_partial + with mock.patch.object(growing_log,'MAX_SETTLEMENT_PROBES',4): + with self.assertRaises(Refused) as caught:self.consume('browser') + fact=caught.exception._barc_failure_observation + self.assertEqual((calls[0],fact['check'],fact['outcome'],fact['policyObservation']),(1,'infolog-record-settlement-exhausted','refused',None)) + @classmethod + def setUpClass(cls): + cls.fixture=tempfile.TemporaryDirectory(prefix='bar-policy-closure-fixture-');root=pathlib.Path(cls.fixture.name) + managed=root/'managed';provenance=root/'provenance';managed.mkdir();provenance.mkdir() + for name in ('RuntimeEvidence','RuntimeEvidence.dll','RuntimeEvidence.deps.json','RuntimeEvidence.runtimeconfig.json','FSharp.Core.dll'): + shutil.copyfile(POLICY_BUILD/name,managed/name);os.chmod(managed/name,0o555 if name=='RuntimeEvidence' else 0o444) + shutil.copyfile(POLICY_BUILD/'RuntimeEvidence.pdb',provenance/'RuntimeEvidence.pdb') + version=subprocess.check_output(['dotnet','--list-runtimes'],text=True).splitlines()[-1].split()[1] + framework=pathlib.Path('/usr/share/dotnet/shared/Microsoft.NETCore.App')/version + fxr=max(pathlib.Path('/usr/share/dotnet/host/fxr').iterdir(),key=lambda p:tuple(map(int,p.name.split('.')))) + def row(path,role=None): + info=path.stat();value={'path':str(path),'bytes':info.st_size,'sha256':hashlib.sha256(path.read_bytes()).hexdigest(),'device':f'{os.major(info.st_dev):x}:{os.minor(info.st_dev):x}','inode':info.st_ino,'ownerUid':info.st_uid,'mode':stat.S_IMODE(info.st_mode),'links':info.st_nlink} + if role:value={'role':role,**value} + return value + runtime_paths={path.resolve() for directory in (framework,fxr) for path in directory.rglob('*') if path.is_file()} + candidates=[managed/'RuntimeEvidence',framework/'libcoreclr.so',framework/'libhostpolicy.so',fxr/'libhostfxr.so',*framework.glob('*.so')] + for candidate in candidates: + output=subprocess.run(['ldd',str(candidate)],text=True,stdout=subprocess.PIPE,check=True).stdout + for line in output.splitlines(): + fields=line.replace('=>',' ').split() + runtime_paths.update(pathlib.Path(x).resolve() for x in fields if x.startswith('/') and pathlib.Path(x).is_file()) + for pattern in ('libicu*.so*','libcrypto.so*','libssl.so*','libbrotli*.so*','libz.so*','libzstd.so*'): + runtime_paths.update(path.resolve() for path in pathlib.Path('/usr/lib').glob(pattern) if path.is_file() and not path.is_symlink()) + runtime_paths.add(pathlib.Path('/etc/ld.so.cache')) + runtime=[row(path) for path in sorted(runtime_paths)] + roles={'hostfxr':str(fxr/'libhostfxr.so'),'hostpolicy':str(framework/'libhostpolicy.so'),'coreLib':str(framework/'System.Private.CoreLib.dll'),'coreClr':str(framework/'libcoreclr.so'),'jit':str(framework/'libclrjit.so')} + policy_commit=subprocess.check_output(['git','-C',str(POLICY_SOURCE),'rev-parse','HEAD'],text=True).strip();policy_tree=subprocess.check_output(['git','-C',str(POLICY_SOURCE),'rev-parse','HEAD^{tree}'],text=True).strip() + product_commit='2cd9f47dd120d43b6781b6edc7dbb1d571cc51a1';product_tree='4fee295bf14f6b2fe2369085c1e743610709297e' + highbar_commit='54e17084c35b90584f8f84efc468bcc8943e4ec0' + product_roles={'fsbarCommit':product_commit,'highbarCommit':highbar_commit} + product_source_set=hashlib.sha256(json.dumps(product_roles,sort_keys=True,separators=(',',':')).encode()).hexdigest() + source_link=json.dumps({'documents':{'/_/*':f'https://raw.githubusercontent.com/FS-GG/FSBarV2/{policy_commit}/*'}},separators=(',',':')).encode() + (provenance/'RuntimeEvidence.sourcelink.json').write_bytes(source_link) + (provenance/'policy-source.json').write_text(json.dumps({'schema':'fsbar.barc-source-identity/v1','role':'policySourceManifest','commit':policy_commit,'tree':policy_tree},separators=(',',':'))) + (provenance/'product-source.json').write_text(json.dumps({'schema':'fsbar.barc-source-identity/v1','role':'productSourceManifest','commit':product_commit,'tree':product_tree},separators=(',',':'))) + (provenance/'product-role-graph.json').write_text(json.dumps({'schema':'fsbar.barc-product-source-role-graph/v1','roles':product_roles},separators=(',',':'))) + (provenance/'locked-build-inputs.json').write_text(json.dumps({'schema':'fsbar.barc-locked-build-inputs/v1','policyProjectSha256':hashlib.sha256((POLICY_SOURCE/'tests/Broker.NativeProof/RuntimeEvidence/RuntimeEvidence.fsproj').read_bytes()).hexdigest(),'policyLockSha256':hashlib.sha256((POLICY_SOURCE/'tests/Broker.NativeProof/RuntimeEvidence/RuntimeEvidence.packages.lock.json').read_bytes()).hexdigest(),'policyTree':policy_tree},separators=(',',':'))) + (provenance/'toolchain-receipt.json').write_text(json.dumps({'schema':'fsbar.barc-toolchain-receipt/v1','dotnetSdk':subprocess.check_output(['dotnet','--version'],text=True).strip(),'targetFramework':'net10.0'},separators=(',',':'))) + shutil.copyfile(pathlib.Path(__file__).with_name('source-manifest.json'),provenance/'helper-source-manifest.json') + helper_identity=json.loads((provenance/'helper-source-manifest.json').read_bytes()) + managed_rows=[row(managed/name,role) for role,name in [('apphost','RuntimeEvidence'),('managedDll','RuntimeEvidence.dll'),('depsJson','RuntimeEvidence.deps.json'),('runtimeConfigJson','RuntimeEvidence.runtimeconfig.json'),('fsharpCore','FSharp.Core.dll')]] + managed_hashes={item['role']:item['sha256'] for item in managed_rows} + receipt={'schema':'fsbar.barc-runtime-evidence-build-receipt/v2','policyCommit':policy_commit,'policyTree':policy_tree,'productCommit':product_commit,'productTree':product_tree,'helperCommit':helper_identity['publicHead'],'helperTree':helper_identity['publicTree'],'productSourceSetSha256':product_source_set,'productRoleGraphSha256':hashlib.sha256((provenance/'product-role-graph.json').read_bytes()).hexdigest(),'lockedBuildInputsSha256':hashlib.sha256((provenance/'locked-build-inputs.json').read_bytes()).hexdigest(),'toolchainReceiptSha256':hashlib.sha256((provenance/'toolchain-receipt.json').read_bytes()).hexdigest(),'managed':managed_hashes,'pdbSha256':hashlib.sha256((provenance/'RuntimeEvidence.pdb').read_bytes()).hexdigest(),'sourceLinkSha256':hashlib.sha256(source_link).hexdigest(),'helperManifestSha256':hashlib.sha256((provenance/'helper-source-manifest.json').read_bytes()).hexdigest()} + (provenance/'build-receipt.json').write_text(json.dumps(receipt,separators=(',',':'))) + for path in provenance.iterdir():os.chmod(path,0o444) + provenance_rows=[row(provenance/name,role) for role,name in [('pdb','RuntimeEvidence.pdb'),('sourceLink','RuntimeEvidence.sourcelink.json'),('buildReceipt','build-receipt.json'),('helperManifest','helper-source-manifest.json'),('policySourceManifest','policy-source.json'),('productSourceManifest','product-source.json'),('productRoleGraph','product-role-graph.json'),('lockedBuildInputs','locked-build-inputs.json'),('toolchainReceipt','toolchain-receipt.json')]] + source={'policyCommit':policy_commit,'policyTree':policy_tree,'productCommit':product_commit,'productTree':product_tree,'productSourceSetSha256':product_source_set,**{role+'Sha256':next(item['sha256'] for item in provenance_rows if item['role']==role) for role in ('policySourceManifest','productSourceManifest','productRoleGraph','lockedBuildInputs','toolchainReceipt','buildReceipt','pdb','sourceLink','helperManifest')}} + def directory(path): + info=path.stat();names=sorted(p.name for p in path.iterdir());return {'path':str(path),'ownerUid':info.st_uid,'mode':stat.S_IMODE(info.st_mode),'entriesSha256':hashlib.sha256('\n'.join(names).encode()).hexdigest()} + os.chmod(managed,0o555);os.chmod(provenance,0o555) + search_paths={managed,provenance,framework,fxr,framework.parent,fxr.parent,*[path.parent for path in runtime_paths]} + search=[directory(path) for path in sorted(search_paths)] + value={'schema':'fsbar.barc-runtime-evidence-policy-closure/v3','custodyRoot':str(root),'managedRoot':str(managed),'provenanceRoot':str(provenance),'runtimeRoots':[str(framework),str(fxr)],'searchLayout':search,'managed':managed_rows,'provenance':provenance_rows,'runtime':runtime,'runtimeRoles':roles,'source':source,'custody':{'ownerUid':os.geteuid(),'executablePath':str(managed/'RuntimeEvidence'),'fixedArgv':[str(managed/'RuntimeEvidence'),'--closure-manifest','--closure-sha256','--invocation-id']}} + cls.closure=root/'closure.json';cls.closure.write_text(json.dumps(value,separators=(',',':')));os.chmod(cls.closure,0o600) + cls.policy=managed/'RuntimeEvidence';cls.closure_sha=hashlib.sha256(cls.closure.read_bytes()).hexdigest() + @classmethod + def tearDownClass(cls): + for path in pathlib.Path(cls.fixture.name).rglob('*'): + try:os.chmod(path,0o700 if path.is_dir() else 0o600) + except FileNotFoundError:pass + cls.fixture.cleanup() + def setUp(self): + self.temp=tempfile.TemporaryDirectory(prefix='bar-growing-log-');self.root=pathlib.Path(self.temp.name);os.chmod(self.root,0o700) + self.write=self.root/'engine';self.data=self.root/'runtime-data';self.write.mkdir(mode=0o700);self.data.mkdir(mode=0o700);self.log=self.write/'infolog.txt';self.child=None;self.handle=None + def tearDown(self): + if self.handle: + try:self.handle.close() + except OSError:pass + if self.child and self.child.poll() is None: + self.child.kill();self.child.wait() + if self.child and self.child.stdin: + self.child.stdin.close() + self.temp.cleanup() + def text(self): + return (f'[DataDirLocater::Check] Isolation Mode!\n[DataDirLocater::FindWriteableDataDir] using writeable data-directory "{self.write}"\n[DataDirLocater::FilterUsableDataDirs] using read-write data directory: {self.write}/\n[DataDirLocater::FilterUsableDataDirs] using read-only data directory: {self.data}/\n').encode() + def spawn(self,initial=None): + initial=self.text() if initial is None else initial + self.child=subprocess.Popen([sys.executable,'-c','import base64\n'+WRITER,str(self.log),base64.b64encode(initial).decode()],stdin=subprocess.PIPE,stdout=subprocess.DEVNULL,stderr=subprocess.DEVNULL,start_new_session=True) + end=time.time()+3 + while not self.log.exists() and time.time() Date: Fri, 2 Oct 2026 12:54:49 +0200 Subject: [PATCH 06/12] Add hosted complete record source gate --- .github/workflows/complete-record-source.yml | 76 ++ .../RuntimeEvidence/README.md | 3 + .../tools/quint/package-lock.json | 880 ++++++++++++++++++ .../RuntimeEvidence/tools/quint/package.json | 8 + 4 files changed, 967 insertions(+) create mode 100644 .github/workflows/complete-record-source.yml create mode 100644 tests/Broker.NativeProof/RuntimeEvidence/tools/quint/package-lock.json create mode 100644 tests/Broker.NativeProof/RuntimeEvidence/tools/quint/package.json diff --git a/.github/workflows/complete-record-source.yml b/.github/workflows/complete-record-source.yml new file mode 100644 index 0000000..db3b291 --- /dev/null +++ b/.github/workflows/complete-record-source.yml @@ -0,0 +1,76 @@ +name: complete-record-source + +on: + pull_request: + paths: + - .github/workflows/complete-record-source.yml + - tests/Broker.NativeProof/RuntimeEvidence/** + workflow_dispatch: + +permissions: + contents: read + +concurrency: + group: complete-record-source-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +jobs: + complete-record-source: + name: complete-record-source + runs-on: ubuntu-24.04 + timeout-minutes: 10 + steps: + - name: Check out the exact candidate + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 + with: + ref: ${{ github.event.pull_request.head.sha || github.sha }} + fetch-depth: 2 + persist-credentials: false + + - name: Bind the checked-out candidate + shell: bash + env: + EXPECTED_SHA: ${{ github.event.pull_request.head.sha || github.sha }} + run: | + set -euo pipefail + test "$(git rev-parse HEAD)" = "$EXPECTED_SHA" + test -z "$(git status --porcelain --untracked-files=all)" + + - name: Set up the exact .NET SDK + uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6 + with: + dotnet-version: 10.0.401 + + - name: Set up the exact Node.js runtime + uses: actions/setup-node@249970729cb0ef3589644e2896645e5dc5ba9c38 # v6 + with: + node-version: 24.8.0 + cache: npm + cache-dependency-path: tests/Broker.NativeProof/RuntimeEvidence/tools/quint/package-lock.json + + - name: Install the integrity-locked Quint CLI + shell: bash + run: npm ci --ignore-scripts --prefix tests/Broker.NativeProof/RuntimeEvidence/tools/quint + + - name: Restore and build the typed evidence project + shell: bash + env: + CI: 'true' + DOTNET_PROCESSOR_COUNT: '1' + run: | + set -euo pipefail + project=tests/Broker.NativeProof/RuntimeEvidence/RuntimeEvidence.Tests.fsproj + dotnet restore "$project" --locked-mode + dotnet build "$project" --configuration Release --no-restore --maxcpucount:1 + + - name: Run the complete-record source gate + shell: bash + env: + CI: 'true' + DOTNET_PROCESSOR_COUNT: '1' + run: | + set -euo pipefail + export PATH="$PWD/tests/Broker.NativeProof/RuntimeEvidence/tools/quint/node_modules/.bin:$PATH" + dotnet test tests/Broker.NativeProof/RuntimeEvidence/RuntimeEvidence.Tests.fsproj \ + --configuration Release --no-restore --no-build \ + --logger 'console;verbosity=normal' diff --git a/tests/Broker.NativeProof/RuntimeEvidence/README.md b/tests/Broker.NativeProof/RuntimeEvidence/README.md index 4eff24a..5682285 100644 --- a/tests/Broker.NativeProof/RuntimeEvidence/README.md +++ b/tests/Broker.NativeProof/RuntimeEvidence/README.md @@ -33,6 +33,9 @@ external helper configured, the gate copies the committed sanitized mechanical f a temporary directory and creates its manifest from the checked-out `HEAD` and tree. It requires Quint 0.32.0, locked NuGet restore, all 27 named model scenarios, 14 ITFs, the compiled correspondence replay, and duplicate, reordered, and prior-state mutations. +The `complete-record-source` workflow checks out the exact pull-request head or manually +selected commit, installs Quint from its integrity-locked tool manifest, selects .NET SDK +10.0.401, and enters this same `CI=true` target with read-only repository permissions. Before it reads a request, the executable accepts only `--closure-manifest PATH --closure-sha256 HEX --invocation-id ID`. It verifies an exact diff --git a/tests/Broker.NativeProof/RuntimeEvidence/tools/quint/package-lock.json b/tests/Broker.NativeProof/RuntimeEvidence/tools/quint/package-lock.json new file mode 100644 index 0000000..618bd1b --- /dev/null +++ b/tests/Broker.NativeProof/RuntimeEvidence/tools/quint/package-lock.json @@ -0,0 +1,880 @@ +{ + "name": "@fsgg/runtime-evidence-quint-tools", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "@fsgg/runtime-evidence-quint-tools", + "version": "1.0.0", + "devDependencies": { + "@informalsystems/quint": "0.32.0" + } + }, + "node_modules/@grpc/grpc-js": { + "version": "1.14.5", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.14.5.tgz", + "integrity": "sha512-7VZM+SVdEcUUqSQeNI3zM8Qs/BhQKZndPo2h5VkYkAM8Iz0wJIa8mKV5ekQGqG8UUsnkQ0NMxIxwkIHYvj0qOw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@grpc/proto-loader": "^0.8.0", + "@js-sdsl/ordered-map": "^4.4.2" + }, + "engines": { + "node": ">=12.10.0" + } + }, + "node_modules/@grpc/grpc-js/node_modules/@grpc/proto-loader": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.8.1.tgz", + "integrity": "sha512-wtF6h+DY6M3YaDBPAmvuuA6jV8Sif9MjtOI5euKFWRgCDl5PeDpPsHR9u2l6St5ceY8AZgoNDww5+HvEsXFsGg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "lodash.camelcase": "^4.3.0", + "long": "^5.0.0", + "protobufjs": "^7.5.5", + "yargs": "^17.7.2" + }, + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@grpc/proto-loader": { + "version": "0.7.15", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.15.tgz", + "integrity": "sha512-tMXdRCfYVixjuFK+Hk0Q1s38gV9zDiDJfWL3h1rv4Qc39oILCu1TRTDt7+fGUI8K4G1Fj125Hx/ru3azECWTyQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "lodash.camelcase": "^4.3.0", + "long": "^5.0.0", + "protobufjs": "^7.2.5", + "yargs": "^17.7.2" + }, + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@informalsystems/quint": { + "version": "0.32.0", + "resolved": "https://registry.npmjs.org/@informalsystems/quint/-/quint-0.32.0.tgz", + "integrity": "sha512-9Yoji7DU6moRm1ofDaN+ftdxNcEGciiGbm7eN4MjlcCbfv7/Y/zchadcXXRmMZmN9oTPXUk9GmhjQOhADJsiSQ==", + "dev": true, + "license": "Apache 2.0", + "dependencies": { + "@grpc/grpc-js": "^1.11.1", + "@grpc/proto-loader": "^0.7.7", + "@octokit/request": "^8.1.1", + "@sweet-monads/either": "~3.2.0", + "@sweet-monads/maybe": "~3.2.0", + "@types/line-column": "^1.0.0", + "@types/lodash.clonedeep": "4.5.0", + "@types/seedrandom": "^3.0.4", + "adm-zip": "^0.5.16", + "antlr4ts": "^0.5.0-alpha.4", + "chalk": "^4.1.2", + "cli-progress": "^3.12.0", + "cross-spawn": "^7.0.6", + "eol": "^0.9.1", + "immutable": "^4.3.0", + "json-bigint": "^1.0.0", + "line-column": "^1.0.2", + "lodash": "^4.17.21", + "lodash.clonedeep": "4.5.0", + "seedrandom": "^3.0.5", + "tar": "^7.5.13", + "yargs": "^17.7.2" + }, + "bin": { + "quint": "dist/src/cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@js-sdsl/ordered-map": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz", + "integrity": "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, + "node_modules/@octokit/endpoint": { + "version": "9.0.6", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.6.tgz", + "integrity": "sha512-H1fNTMA57HbkFESSt3Y9+FBICv+0jFceJFPWDePYlR/iMGrwM5ph+Dd4XRQs+8X+PUFURLQgX9ChPfhJ/1uNQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/types": "^13.1.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/openapi-types": { + "version": "24.2.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz", + "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@octokit/request": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.4.1.tgz", + "integrity": "sha512-qnB2+SY3hkCmBxZsR/MPCybNmbJe4KAlfWErXq+rBKkQJlbjdJeS85VI9r8UqeLYLvnAenU8Q1okM/0MBsAGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/endpoint": "^9.0.6", + "@octokit/request-error": "^5.1.1", + "@octokit/types": "^13.1.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/request-error": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.1.1.tgz", + "integrity": "sha512-v9iyEQJH6ZntoENr9/yXxjuezh4My67CBSu9r6Ve/05Iu5gNgnisNWOsoJHTP6k0Rr0+HQIpnH+kyammu90q/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/types": "^13.1.0", + "deprecation": "^2.0.0", + "once": "^1.4.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/types": { + "version": "13.10.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz", + "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^24.2.0" + } + }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.5.tgz", + "integrity": "sha512-zgXFLzW3Ap33e6d0Wlj4MGIm6Ce8O89n/apUaGNB/jx+hw+ruWEp7EwGUshdLKVRCxZW12fp9r40E1mQrf/34g==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.1.tgz", + "integrity": "sha512-vW1GmwMZNnL+gMRaovlh9yZX74kc+TTU3FObkkurpMaRtBfLP3ldjS9KQWlwZgraRE0+dheEEoAxdzcJQ8eXZg==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.1.tgz", + "integrity": "sha512-GpptLrs57adMSuHi3VNj0mAF8dwh36LMaYF6XyJ6JMWlVsc+t42tm1HSEDmOs3A8fC9yyeisgLhsTVQokOZ0zw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.2.tgz", + "integrity": "sha512-b1UQwcEZ4yCnMCD8DAL1VlbvBJE9/IX4FTIp7BG1xYpf29SLazLSrqUkj4w7Y5y7cCVP6E5tcqqcI0xemPkHug==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@sweet-monads/either": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@sweet-monads/either/-/either-3.2.0.tgz", + "integrity": "sha512-n+nR0b60GRTKb+D76qhTf4NEBXU9zfpigYYEtKtSYbV+5+i5gxr9jFd64pYkY2O7hVsb/G7nspbAeFni/i1ltA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sweet-monads/interfaces": "^3.2.0" + } + }, + "node_modules/@sweet-monads/interfaces": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@sweet-monads/interfaces/-/interfaces-3.3.0.tgz", + "integrity": "sha512-66akGvjPD4lizQy+w4JSltJilc2w/QPdw8lPAniLJGHwyjmrw9xMJLx76Q/GDnbCU59Werses4aZJLWOlJrL5A==", + "dev": true, + "license": "MIT" + }, + "node_modules/@sweet-monads/maybe": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@sweet-monads/maybe/-/maybe-3.2.0.tgz", + "integrity": "sha512-/t+K0D/kBfkYOkZaePEsrK868at0M9UIEVgehcM0xscrCSZhKWGteE41vl2XJQqh8WyiFo/mZ5y7eAPSYzS+pg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sweet-monads/interfaces": "^3.2.0" + } + }, + "node_modules/@types/line-column": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/line-column/-/line-column-1.0.2.tgz", + "integrity": "sha512-099oFQmp/Tlf20xW5XI5R4F69N6lF/zQ09XDzc3R5BOLFlqIotgKoNIyj0HD4fQLWcGDreDJv8k/BkLJscrDrw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/lodash": { + "version": "4.17.25", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.25.tgz", + "integrity": "sha512-+K1NIO8I+F9/wNulfVvu23QYd0Pe9/OCqRrim4NoYIf1VoEDL90Ve4ClzpyqBLc7NpGGWRvYNCKZ1BE/Jpf8dQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/@types/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-IHijjFVPJTvzvrNPz+6nQy5lZQb7uh807RfTIEaQBrZXrIGjZy0L2dEb3hju34J0eqbXLCY6Hub/g81Jl4pGCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/lodash": "*" + } + }, + "node_modules/@types/node": { + "version": "26.6.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-26.6.4.tgz", + "integrity": "sha512-ldVPDCzj7fsaGZrLB0NuHuTvJcsNasysBAqMolr/cgxrLd1xbqxIr3XJiPnHHJUCxj5sNF1vnRj9aWnrVh5Jcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~8.9.0" + } + }, + "node_modules/@types/seedrandom": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@types/seedrandom/-/seedrandom-3.0.8.tgz", + "integrity": "sha512-TY1eezMU2zH2ozQoAFAQFOPpvP15g+ZgSfTZt31AUUH/Rxtnz3H+A/Sv1Snw2/amp//omibc+AEkTaA8KUeOLQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/adm-zip": { + "version": "0.5.18", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.18.tgz", + "integrity": "sha512-ufJnssQGbxzLNS1Ho9bCtX4rQKCCvoVuDLHoJyc3F9dOGDB4BkWs2Ci0kv53lqocAEQ/Cbi+I2XCsNYGqVYqng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/antlr4ts": { + "version": "0.5.0-alpha.4", + "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz", + "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/bignumber.js": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.1.tgz", + "integrity": "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/cli-progress": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.12.0.tgz", + "integrity": "sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "string-width": "^4.2.3" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/deprecation": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", + "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/eol": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/eol/-/eol-0.9.1.tgz", + "integrity": "sha512-Ds/TEoZjwggRoz/Q2O7SE3i4Jm66mqTDfmdHdq/7DKVk3bro9Q8h6WdXKdPqFLMoqxrDK5SVRzHVPOS6uuGtrg==", + "dev": true, + "license": "MIT" + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/immutable": { + "version": "4.3.9", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.9.tgz", + "integrity": "sha512-ObHy4YN7ycwZOUCLI1/6svfyAFu7vL8RhAvVu/bh/RZW9EPlOyDaQ9jDQWCtdqzaXUjgXZCW1migtHE7YI7UGQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", + "dev": true, + "license": "MIT", + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "bignumber.js": "^9.0.0" + } + }, + "node_modules/line-column": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/line-column/-/line-column-1.0.2.tgz", + "integrity": "sha512-Ktrjk5noGYlHsVnYWh62FLVs4hTb8A3e+vucNZMgPeAOITdshMSgv4cCZQeRDjm7+goqmo6+liZwTXo+U3sVww==", + "dev": true, + "license": "MIT", + "dependencies": { + "isarray": "^1.0.0", + "isobject": "^2.0.0" + } + }, + "node_modules/lodash": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/long": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", + "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/minipass": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minizlib": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", + "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/protobufjs": { + "version": "7.6.6", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.6.6.tgz", + "integrity": "sha512-dYDWdjSl5RNb7SgPxGQcRU+GtvP7s2fpkrY0r432PcOIaZ0/rBcxEZnQN67iJhFuQiVw754JDoPruPCNdGsbjg==", + "dev": true, + "hasInstallScript": true, + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.5", + "@protobufjs/eventemitter": "^1.1.1", + "@protobufjs/fetch": "^1.1.1", + "@protobufjs/float": "^1.0.2", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.1", + "@types/node": ">=13.7.0", + "long": "^5.3.2" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/seedrandom": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", + "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar": { + "version": "7.5.22", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.22.tgz", + "integrity": "sha512-MFO/QzvtAOmJbkhOaCTvbGcFN9L9b+JunIsDwaKljSOdcLMea3NJ1k9Usz/rjdfSXTq4dfzfeS7W4p4YOAAHeA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/undici-types": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-8.9.0.tgz", + "integrity": "sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg==", + "dev": true, + "license": "MIT" + }, + "node_modules/universal-user-agent": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz", + "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/yargs": { + "version": "17.7.3", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.3.tgz", + "integrity": "sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + } + } +} diff --git a/tests/Broker.NativeProof/RuntimeEvidence/tools/quint/package.json b/tests/Broker.NativeProof/RuntimeEvidence/tools/quint/package.json new file mode 100644 index 0000000..04f3eba --- /dev/null +++ b/tests/Broker.NativeProof/RuntimeEvidence/tools/quint/package.json @@ -0,0 +1,8 @@ +{ + "name": "@fsgg/runtime-evidence-quint-tools", + "private": true, + "version": "1.0.0", + "devDependencies": { + "@informalsystems/quint": "0.32.0" + } +} From a98166032aaab45a0d8445ac04ad66cf7ea1fdf6 Mon Sep 17 00:00:00 2001 From: EHotwagner Date: Fri, 2 Oct 2026 13:08:39 +0200 Subject: [PATCH 07/12] Make complete record gate host independent --- .../RuntimeEvidence/README.md | 4 +++ .../test_growing_log.py | 31 +++++++++++++++++-- .../tests/check-runtime-evidence.sh | 6 ++-- 3 files changed, 36 insertions(+), 5 deletions(-) diff --git a/tests/Broker.NativeProof/RuntimeEvidence/README.md b/tests/Broker.NativeProof/RuntimeEvidence/README.md index 5682285..4464f58 100644 --- a/tests/Broker.NativeProof/RuntimeEvidence/README.md +++ b/tests/Broker.NativeProof/RuntimeEvidence/README.md @@ -36,6 +36,10 @@ compiled correspondence replay, and duplicate, reordered, and prior-state mutati The `complete-record-source` workflow checks out the exact pull-request head or manually selected commit, installs Quint from its integrity-locked tool manifest, selects .NET SDK 10.0.401, and enters this same `CI=true` target with read-only repository permissions. +Model tests, simulations, and ITF generation select Quint's TypeScript backend explicitly, +so the gate does not download an evaluator. The public correspondence fixture copies the +selected host and framework into an owner-private, link-free runtime tree before pinning +its physical identities; writable-mode and same-bytes replacement controls must still fail. Before it reads a request, the executable accepts only `--closure-manifest PATH --closure-sha256 HEX --invocation-id ID`. It verifies an exact diff --git a/tests/Broker.NativeProof/RuntimeEvidence/fixtures/complete-record-helper/test_growing_log.py b/tests/Broker.NativeProof/RuntimeEvidence/fixtures/complete-record-helper/test_growing_log.py index 6298345..4e43834 100644 --- a/tests/Broker.NativeProof/RuntimeEvidence/fixtures/complete-record-helper/test_growing_log.py +++ b/tests/Broker.NativeProof/RuntimeEvidence/fixtures/complete-record-helper/test_growing_log.py @@ -174,9 +174,19 @@ def setUpClass(cls): for name in ('RuntimeEvidence','RuntimeEvidence.dll','RuntimeEvidence.deps.json','RuntimeEvidence.runtimeconfig.json','FSharp.Core.dll'): shutil.copyfile(POLICY_BUILD/name,managed/name);os.chmod(managed/name,0o555 if name=='RuntimeEvidence' else 0o444) shutil.copyfile(POLICY_BUILD/'RuntimeEvidence.pdb',provenance/'RuntimeEvidence.pdb') + system_dotnet=pathlib.Path(os.environ.get('DOTNET_ROOT','/usr/share/dotnet')).resolve() version=subprocess.check_output(['dotnet','--list-runtimes'],text=True).splitlines()[-1].split()[1] - framework=pathlib.Path('/usr/share/dotnet/shared/Microsoft.NETCore.App')/version - fxr=max(pathlib.Path('/usr/share/dotnet/host/fxr').iterdir(),key=lambda p:tuple(map(int,p.name.split('.')))) + system_framework=system_dotnet/'shared/Microsoft.NETCore.App'/version + system_fxr=max((system_dotnet/'host/fxr').iterdir(),key=lambda p:tuple(map(int,p.name.split('.')))) + cls.dotnet_root=root/'dotnet';framework=cls.dotnet_root/'shared/Microsoft.NETCore.App'/version;fxr=cls.dotnet_root/'host/fxr'/system_fxr.name + framework.parent.mkdir(parents=True);fxr.parent.mkdir(parents=True) + shutil.copytree(system_framework,framework);shutil.copytree(system_fxr,fxr) + shutil.copyfile(system_dotnet/'dotnet',cls.dotnet_root/'dotnet') + for base,directories,files in os.walk(cls.dotnet_root): + for name in directories:os.chmod(pathlib.Path(base)/name,0o555) + for name in files:os.chmod(pathlib.Path(base)/name,0o444) + os.chmod(cls.dotnet_root/'dotnet',0o555);os.chmod(cls.dotnet_root,0o555) + if any(path.is_symlink() for path in cls.dotnet_root.rglob('*')):raise AssertionError('private runtime staging retained a link') def row(path,role=None): info=path.stat();value={'path':str(path),'bytes':info.st_size,'sha256':hashlib.sha256(path.read_bytes()).hexdigest(),'device':f'{os.major(info.st_dev):x}:{os.minor(info.st_dev):x}','inode':info.st_ino,'ownerUid':info.st_uid,'mode':stat.S_IMODE(info.st_mode),'links':info.st_nlink} if role:value={'role':role,**value} @@ -231,7 +241,14 @@ def tearDownClass(cls): def setUp(self): self.temp=tempfile.TemporaryDirectory(prefix='bar-growing-log-');self.root=pathlib.Path(self.temp.name);os.chmod(self.root,0o700) self.write=self.root/'engine';self.data=self.root/'runtime-data';self.write.mkdir(mode=0o700);self.data.mkdir(mode=0o700);self.log=self.write/'infolog.txt';self.child=None;self.handle=None + real_popen=subprocess.Popen + def private_runtime_popen(argv,*args,**kwargs): + if argv and pathlib.Path(argv[0])==self.policy: + env=dict(kwargs.get('env') or {});env['DOTNET_ROOT']=str(self.dotnet_root);kwargs['env']=env + return real_popen(argv,*args,**kwargs) + self.popen_patch=mock.patch.object(growing_log.subprocess,'Popen',side_effect=private_runtime_popen);self.popen_patch.start() def tearDown(self): + self.popen_patch.stop() if self.handle: try:self.handle.close() except OSError:pass @@ -654,6 +671,16 @@ def grow_once(*args): def test_required_complete_record_correspondence_bundle(self): output=os.environ.get('BAR_SETTLEMENT_TRANSCRIPT') if not output:self.skipTest('combined correspondence output not requested') + selected=self.policy.parent/'RuntimeEvidence.dll' + os.chmod(selected,0o644) + try: + with self.assertRaisesRegex(Refused,'policy closure file custody'):GrowingLog._closure(str(self.closure),self.closure_sha,time.monotonic()+5) + finally:os.chmod(selected,0o444) + displaced=pathlib.Path(self.fixture.name)/'displaced-managed-dll';os.chmod(self.policy.parent,0o755);selected.rename(displaced);shutil.copyfile(displaced,selected);os.chmod(selected,0o444);os.chmod(self.policy.parent,0o555) + try: + with self.assertRaisesRegex(Refused,'policy closure file custody'):GrowingLog._closure(str(self.closure),self.closure_sha,time.monotonic()+5) + finally: + os.chmod(self.policy.parent,0o755);selected.unlink();displaced.rename(selected);os.chmod(self.policy.parent,0o555) scenarios=[] def reset(kind): if self.handle or self.child:self.tearDown();self.setUp() diff --git a/tests/Broker.NativeProof/RuntimeEvidence/tests/check-runtime-evidence.sh b/tests/Broker.NativeProof/RuntimeEvidence/tests/check-runtime-evidence.sh index 839c1a7..4c5c2cb 100755 --- a/tests/Broker.NativeProof/RuntimeEvidence/tests/check-runtime-evidence.sh +++ b/tests/Broker.NativeProof/RuntimeEvidence/tests/check-runtime-evidence.sh @@ -6,8 +6,8 @@ test "$(dotnet --version)" = "10.0.401" test "$(quint --version)" = "0.32.0" quint typecheck "$ROOT/GrowingLogEvidence.qnt" quint typecheck "$ROOT/GrowingLogEvidence_test.qnt" -quint test "$ROOT/GrowingLogEvidence_test.qnt" --main GrowingLogEvidence_test --match '^(healthyBoundaries|rewriteIsSticky|unavailableCannotGrant|unavailableAfterValidationRevokesCurrentAuthority|unavailableAfterConsumptionPreservesHistoryOnly|staleBoundaryCannotConsume|pendingTailHasNoAuthority|closeRevokesCurrentAuthority|truncateIsSticky|replacementIsSticky|wrongWriterIsSticky|wrongGenerationIsSticky|wrongSourceIsSticky|contradictorySuffixIsSticky|policyInvocationCompletesSameClosure|policyClosureDriftIsSticky|completeRecordWaitThenConsume|completeRecordWaitExhausted|completeRecordWaitDeadline|zeroBudgetCannotProbe|waitAfterConsumptionHasNoNewAuthority|pendingThenCompleteResample|sharedBudgetAcrossEvaluations|candidateCannotRenewBudget|terminalSettlementCannotConsume|retriesShareOneProbeBudget|lastProbeCandidateThenExhausted)$' --seed 424242 --max-samples 1 -quint run "$ROOT/GrowingLogEvidence.qnt" --seed 424242 --max-samples 500 --max-steps 16 --invariant invariant --verbosity 1 +quint test "$ROOT/GrowingLogEvidence_test.qnt" --backend=typescript --main GrowingLogEvidence_test --match '^(healthyBoundaries|rewriteIsSticky|unavailableCannotGrant|unavailableAfterValidationRevokesCurrentAuthority|unavailableAfterConsumptionPreservesHistoryOnly|staleBoundaryCannotConsume|pendingTailHasNoAuthority|closeRevokesCurrentAuthority|truncateIsSticky|replacementIsSticky|wrongWriterIsSticky|wrongGenerationIsSticky|wrongSourceIsSticky|contradictorySuffixIsSticky|policyInvocationCompletesSameClosure|policyClosureDriftIsSticky|completeRecordWaitThenConsume|completeRecordWaitExhausted|completeRecordWaitDeadline|zeroBudgetCannotProbe|waitAfterConsumptionHasNoNewAuthority|pendingThenCompleteResample|sharedBudgetAcrossEvaluations|candidateCannotRenewBudget|terminalSettlementCannotConsume|retriesShareOneProbeBudget|lastProbeCandidateThenExhausted)$' --seed 424242 --max-samples 1 +quint run "$ROOT/GrowingLogEvidence.qnt" --backend=typescript --seed 424242 --max-samples 500 --max-steps 16 --invariant invariant --verbosity 1 TMP=$(mktemp -d) trap 'python3 - "$TMP" <<'"'"'PY'"'"' import pathlib,shutil,sys @@ -34,7 +34,7 @@ PY fi export BAR_GROWING_LOG_HELPER while IFS='|' read -r scenario fixture; do - quint test "$ROOT/GrowingLogEvidence_test.qnt" --main GrowingLogEvidence_test \ + quint test "$ROOT/GrowingLogEvidence_test.qnt" --backend=typescript --main GrowingLogEvidence_test \ --match "^${scenario}$" --out-itf "$TMP/trace_{test}_{seq}.itf.json" \ --seed 424242 --max-samples 1 python3 - "$TMP/trace_${scenario}_0.itf.json" "$ROOT/$fixture" <<'PY' From b4a3cb8613e58445e23660ac8ed2fcfc1f4f470c Mon Sep 17 00:00:00 2001 From: EHotwagner Date: Fri, 2 Oct 2026 13:09:27 +0200 Subject: [PATCH 08/12] Normalize Quint backend status metadata --- .../RuntimeEvidence/tests/check-runtime-evidence.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/Broker.NativeProof/RuntimeEvidence/tests/check-runtime-evidence.sh b/tests/Broker.NativeProof/RuntimeEvidence/tests/check-runtime-evidence.sh index 4c5c2cb..07c91c1 100755 --- a/tests/Broker.NativeProof/RuntimeEvidence/tests/check-runtime-evidence.sh +++ b/tests/Broker.NativeProof/RuntimeEvidence/tests/check-runtime-evidence.sh @@ -41,6 +41,7 @@ while IFS='|' read -r scenario fixture; do import json,pathlib,sys value=json.loads(pathlib.Path(sys.argv[1]).read_text()) value['#meta'].pop('description',None);value['#meta'].pop('timestamp',None);value['#meta']['source']='GrowingLogEvidence_test.qnt' +value['#meta']['status']='ok' actual=json.dumps(value,separators=(',',':'),sort_keys=True)+'\n' expected=pathlib.Path(sys.argv[2]).read_text() if actual != expected:raise SystemExit('normalized Quint trace drift') From 9a15cf823f2d882a8863c288829ffd1de8213f2d Mon Sep 17 00:00:00 2001 From: EHotwagner Date: Fri, 2 Oct 2026 13:10:28 +0200 Subject: [PATCH 09/12] Retain runtime library execute modes --- .../fixtures/complete-record-helper/test_growing_log.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Broker.NativeProof/RuntimeEvidence/fixtures/complete-record-helper/test_growing_log.py b/tests/Broker.NativeProof/RuntimeEvidence/fixtures/complete-record-helper/test_growing_log.py index 4e43834..c49bfd5 100644 --- a/tests/Broker.NativeProof/RuntimeEvidence/fixtures/complete-record-helper/test_growing_log.py +++ b/tests/Broker.NativeProof/RuntimeEvidence/fixtures/complete-record-helper/test_growing_log.py @@ -184,7 +184,7 @@ def setUpClass(cls): shutil.copyfile(system_dotnet/'dotnet',cls.dotnet_root/'dotnet') for base,directories,files in os.walk(cls.dotnet_root): for name in directories:os.chmod(pathlib.Path(base)/name,0o555) - for name in files:os.chmod(pathlib.Path(base)/name,0o444) + for name in files:os.chmod(pathlib.Path(base)/name,0o555 if '.so' in name else 0o444) os.chmod(cls.dotnet_root/'dotnet',0o555);os.chmod(cls.dotnet_root,0o555) if any(path.is_symlink() for path in cls.dotnet_root.rglob('*')):raise AssertionError('private runtime staging retained a link') def row(path,role=None): From 86234889cfb769799e68eb22dbdd25bb6a203df6 Mon Sep 17 00:00:00 2001 From: EHotwagner Date: Fri, 2 Oct 2026 13:23:37 +0200 Subject: [PATCH 10/12] Preflight staged policy readiness --- .../test_growing_log.py | 30 ++++++++++++++++++- .../tests/check-runtime-evidence.sh | 14 +++++---- 2 files changed, 38 insertions(+), 6 deletions(-) diff --git a/tests/Broker.NativeProof/RuntimeEvidence/fixtures/complete-record-helper/test_growing_log.py b/tests/Broker.NativeProof/RuntimeEvidence/fixtures/complete-record-helper/test_growing_log.py index c49bfd5..a0a2657 100644 --- a/tests/Broker.NativeProof/RuntimeEvidence/fixtures/complete-record-helper/test_growing_log.py +++ b/tests/Broker.NativeProof/RuntimeEvidence/fixtures/complete-record-helper/test_growing_log.py @@ -244,7 +244,7 @@ def setUp(self): real_popen=subprocess.Popen def private_runtime_popen(argv,*args,**kwargs): if argv and pathlib.Path(argv[0])==self.policy: - env=dict(kwargs.get('env') or {});env['DOTNET_ROOT']=str(self.dotnet_root);kwargs['env']=env + env=dict(kwargs.get('env') or {});env['DOTNET_ROOT']=str(self.dotnet_root);env['DOTNET_ROOT_X64']=str(self.dotnet_root);env['DOTNET_MULTILEVEL_LOOKUP']='0';kwargs['env']=env return real_popen(argv,*args,**kwargs) self.popen_patch=mock.patch.object(growing_log.subprocess,'Popen',side_effect=private_runtime_popen);self.popen_patch.start() def tearDown(self): @@ -273,6 +273,34 @@ def config(self): return {'runId':'run','source':{'fsbarCommit':'2cd9f47dd120d43b6781b6edc7dbb1d571cc51a1','highbarCommit':'54e17084c35b90584f8f84efc468bcc8943e4ec0'},'artifacts':{'runtimeEvidencePolicy':{'path':str(executable),'sha256':sha},'runtimeEvidencePolicyClosure':{'path':str(self.closure),'sha256':self.closure_sha}},'commands':{'engine':engine}} def consume(self,boundary):return self.handle.consume(boundary,self.config(),time.monotonic()+5) def command(self,value):self.child.stdin.write((value+'\n').encode());self.child.stdin.flush();time.sleep(.03) + def test_staged_runtime_policy_readiness_preflight(self): + runtime_config=json.loads((self.policy.parent/'RuntimeEvidence.runtimeconfig.json').read_text()) + framework=runtime_config['runtimeOptions']['framework'] + host=subprocess.run([str(self.dotnet_root/'dotnet'),'--info'],env={'PATH':'/usr/bin:/bin','DOTNET_ROOT':str(self.dotnet_root),'DOTNET_ROOT_X64':str(self.dotnet_root),'DOTNET_MULTILEVEL_LOOKUP':'0'},stdout=subprocess.PIPE,stderr=subprocess.PIPE,timeout=2) + def stream(raw): + if not raw:return 'empty' + value=raw[:4096].decode('utf-8','replace').lower() + if 'you must install or update .net' in value:return 'framework-unavailable' + if 'hostfxr' in value:return 'hostfxr-unavailable' + if 'permission denied' in value:return 'permission-refused' + return 'bounded-nonempty' + diagnostic={'schema':'fsbar.public.runtime-evidence-startup-diagnostic/v1','dotnetHostExit':host.returncode,'dotnetStdout':stream(host.stdout),'dotnetStderr':stream(host.stderr),'runtimeFrameworkName':framework['name'],'runtimeFrameworkVersion':framework['version'],'selectedRuntimeVersion':self.dotnet_root.joinpath('shared/Microsoft.NETCore.App').iterdir().__next__().name,'selectedHostfxrVersion':self.dotnet_root.joinpath('host/fxr').iterdir().__next__().name,'runtimeFiles':sum(1 for path in self.dotnet_root.rglob('*') if path.is_file()),'runtimeLinks':sum(1 for path in self.dotnet_root.rglob('*') if path.is_symlink()),'policyDisposition':'not-started','policyCheck':None,'policyObservation':None} + self.assertEqual((host.returncode,diagnostic['runtimeLinks']),(0,0)) + runner=object.__new__(GrowingLog);runner.last_policy_observation=None + try: + runner._run_policy(str(self.policy),str(self.closure),self.closure_sha,b'{}',time.monotonic()+5) + diagnostic['policyDisposition']='ready-completed' + if runner.last_policy_observation:diagnostic['policyObservation']=runner.last_policy_observation['checkpoint']+':'+runner.last_policy_observation['kind'] + except BaseException as error: + fact=getattr(error,'_barc_failure_observation',None);diagnostic['policyDisposition']='refused' + if isinstance(fact,dict): + diagnostic['policyCheck']=fact.get('check') + observation=fact.get('policyObservation') + if isinstance(observation,dict):diagnostic['policyObservation']=observation.get('checkpoint','unknown')+':'+observation.get('kind','unknown') + print(json.dumps(diagnostic,separators=(',',':'),sort_keys=True),flush=True) + raise + print(json.dumps(diagnostic,separators=(',',':'),sort_keys=True),flush=True) + self.assertEqual(diagnostic['policyDisposition'],'ready-completed') @staticmethod def state_projection(value): if value is None:return None diff --git a/tests/Broker.NativeProof/RuntimeEvidence/tests/check-runtime-evidence.sh b/tests/Broker.NativeProof/RuntimeEvidence/tests/check-runtime-evidence.sh index 07c91c1..c572cbb 100755 --- a/tests/Broker.NativeProof/RuntimeEvidence/tests/check-runtime-evidence.sh +++ b/tests/Broker.NativeProof/RuntimeEvidence/tests/check-runtime-evidence.sh @@ -6,8 +6,6 @@ test "$(dotnet --version)" = "10.0.401" test "$(quint --version)" = "0.32.0" quint typecheck "$ROOT/GrowingLogEvidence.qnt" quint typecheck "$ROOT/GrowingLogEvidence_test.qnt" -quint test "$ROOT/GrowingLogEvidence_test.qnt" --backend=typescript --main GrowingLogEvidence_test --match '^(healthyBoundaries|rewriteIsSticky|unavailableCannotGrant|unavailableAfterValidationRevokesCurrentAuthority|unavailableAfterConsumptionPreservesHistoryOnly|staleBoundaryCannotConsume|pendingTailHasNoAuthority|closeRevokesCurrentAuthority|truncateIsSticky|replacementIsSticky|wrongWriterIsSticky|wrongGenerationIsSticky|wrongSourceIsSticky|contradictorySuffixIsSticky|policyInvocationCompletesSameClosure|policyClosureDriftIsSticky|completeRecordWaitThenConsume|completeRecordWaitExhausted|completeRecordWaitDeadline|zeroBudgetCannotProbe|waitAfterConsumptionHasNoNewAuthority|pendingThenCompleteResample|sharedBudgetAcrossEvaluations|candidateCannotRenewBudget|terminalSettlementCannotConsume|retriesShareOneProbeBudget|lastProbeCandidateThenExhausted)$' --seed 424242 --max-samples 1 -quint run "$ROOT/GrowingLogEvidence.qnt" --backend=typescript --seed 424242 --max-samples 500 --max-steps 16 --invariant invariant --verbosity 1 TMP=$(mktemp -d) trap 'python3 - "$TMP" <<'"'"'PY'"'"' import pathlib,shutil,sys @@ -33,6 +31,15 @@ manifest={'schema':'fsgg.private.barc-selected-framework-census-work-bound-helpe PY fi export BAR_GROWING_LOG_HELPER +dotnet restore "$ROOT/RuntimeEvidence.Tests.fsproj" --locked-mode +dotnet build "$ROOT/RuntimeEvidence.Tests.fsproj" -c Release --no-restore -m:1 +test -f "$BAR_GROWING_LOG_HELPER/growing_log.py" +(cd "$BAR_GROWING_LOG_HELPER" && \ + BAR_RUNTIME_EVIDENCE_BUILD="$ROOT/bin/RuntimeEvidence/Release/net10.0" \ + BAR_RUNTIME_EVIDENCE_SOURCE="$(cd "$ROOT/../../.." && pwd)" \ + python3 -m unittest -v test_growing_log.GrowingLogTests.test_staged_runtime_policy_readiness_preflight) +quint test "$ROOT/GrowingLogEvidence_test.qnt" --backend=typescript --main GrowingLogEvidence_test --match '^(healthyBoundaries|rewriteIsSticky|unavailableCannotGrant|unavailableAfterValidationRevokesCurrentAuthority|unavailableAfterConsumptionPreservesHistoryOnly|staleBoundaryCannotConsume|pendingTailHasNoAuthority|closeRevokesCurrentAuthority|truncateIsSticky|replacementIsSticky|wrongWriterIsSticky|wrongGenerationIsSticky|wrongSourceIsSticky|contradictorySuffixIsSticky|policyInvocationCompletesSameClosure|policyClosureDriftIsSticky|completeRecordWaitThenConsume|completeRecordWaitExhausted|completeRecordWaitDeadline|zeroBudgetCannotProbe|waitAfterConsumptionHasNoNewAuthority|pendingThenCompleteResample|sharedBudgetAcrossEvaluations|candidateCannotRenewBudget|terminalSettlementCannotConsume|retriesShareOneProbeBudget|lastProbeCandidateThenExhausted)$' --seed 424242 --max-samples 1 +quint run "$ROOT/GrowingLogEvidence.qnt" --backend=typescript --seed 424242 --max-samples 500 --max-steps 16 --invariant invariant --verbosity 1 while IFS='|' read -r scenario fixture; do quint test "$ROOT/GrowingLogEvidence_test.qnt" --backend=typescript --main GrowingLogEvidence_test \ --match "^${scenario}$" --out-itf "$TMP/trace_{test}_{seq}.itf.json" \ @@ -62,9 +69,6 @@ pendingThenCompleteResample|GrowingLogEvidence.pendingThenCompleteResample.itf.j sharedBudgetAcrossEvaluations|GrowingLogEvidence.sharedBudgetAcrossEvaluations.itf.json lastProbeCandidateThenExhausted|GrowingLogEvidence.lastProbeCandidateThenExhausted.itf.json EOF -dotnet restore "$ROOT/RuntimeEvidence.Tests.fsproj" --locked-mode -dotnet build "$ROOT/RuntimeEvidence.Tests.fsproj" -c Release --no-restore -m:1 -test -f "$BAR_GROWING_LOG_HELPER/growing_log.py" TRANSCRIPT="$TMP/complete-record-correspondence.json" (cd "$BAR_GROWING_LOG_HELPER" && \ BAR_RUNTIME_EVIDENCE_BUILD="$ROOT/bin/RuntimeEvidence/Release/net10.0" \ From ebf7238423adfdbefa8ead295513c5f28879403c Mon Sep 17 00:00:00 2001 From: EHotwagner Date: Fri, 2 Oct 2026 13:24:27 +0200 Subject: [PATCH 11/12] Accept post-readiness diagnostic refusal --- .../fixtures/complete-record-helper/test_growing_log.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tests/Broker.NativeProof/RuntimeEvidence/fixtures/complete-record-helper/test_growing_log.py b/tests/Broker.NativeProof/RuntimeEvidence/fixtures/complete-record-helper/test_growing_log.py index a0a2657..59d11d0 100644 --- a/tests/Broker.NativeProof/RuntimeEvidence/fixtures/complete-record-helper/test_growing_log.py +++ b/tests/Broker.NativeProof/RuntimeEvidence/fixtures/complete-record-helper/test_growing_log.py @@ -297,10 +297,11 @@ def stream(raw): diagnostic['policyCheck']=fact.get('check') observation=fact.get('policyObservation') if isinstance(observation,dict):diagnostic['policyObservation']=observation.get('checkpoint','unknown')+':'+observation.get('kind','unknown') - print(json.dumps(diagnostic,separators=(',',':'),sort_keys=True),flush=True) - raise + if (diagnostic['policyCheck'],diagnostic['policyObservation'])!=('policy-result-join','request-evaluation:exception'): + print(json.dumps(diagnostic,separators=(',',':'),sort_keys=True),flush=True);raise + diagnostic['policyDisposition']='ready-request-refused' print(json.dumps(diagnostic,separators=(',',':'),sort_keys=True),flush=True) - self.assertEqual(diagnostic['policyDisposition'],'ready-completed') + self.assertIn(diagnostic['policyDisposition'],('ready-completed','ready-request-refused')) @staticmethod def state_projection(value): if value is None:return None From 1734687a8ad10f2c05e08fbbe827ba7e04469193 Mon Sep 17 00:00:00 2001 From: EHotwagner Date: Fri, 2 Oct 2026 13:34:12 +0200 Subject: [PATCH 12/12] Census platform loader cache libraries --- .../test_growing_log.py | 30 ++++++++++++++++--- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/tests/Broker.NativeProof/RuntimeEvidence/fixtures/complete-record-helper/test_growing_log.py b/tests/Broker.NativeProof/RuntimeEvidence/fixtures/complete-record-helper/test_growing_log.py index 59d11d0..fea1cc1 100644 --- a/tests/Broker.NativeProof/RuntimeEvidence/fixtures/complete-record-helper/test_growing_log.py +++ b/tests/Broker.NativeProof/RuntimeEvidence/fixtures/complete-record-helper/test_growing_log.py @@ -1,4 +1,4 @@ -import base64,hashlib,json,os,pathlib,shutil,stat,subprocess,sys,tempfile,threading,time,unittest +import base64,fnmatch,hashlib,json,os,pathlib,shutil,stat,subprocess,sys,tempfile,threading,time,unittest from unittest import mock import growing_log from growing_log import GrowingLog @@ -198,8 +198,20 @@ def row(path,role=None): for line in output.splitlines(): fields=line.replace('=>',' ').split() runtime_paths.update(pathlib.Path(x).resolve() for x in fields if x.startswith('/') and pathlib.Path(x).is_file()) - for pattern in ('libicu*.so*','libcrypto.so*','libssl.so*','libbrotli*.so*','libz.so*','libzstd.so*'): - runtime_paths.update(path.resolve() for path in pathlib.Path('/usr/lib').glob(pattern) if path.is_file() and not path.is_symlink()) + dynamic_patterns={'icu':'libicu*.so*','crypto':'libcrypto.so*','ssl':'libssl.so*','brotli':'libbrotli*.so*','zlib':'libz.so*','zstd':'libzstd.so*'} + ldconfig=subprocess.run(['ldconfig','-p'],stdout=subprocess.PIPE,stderr=subprocess.PIPE,check=True) + if len(ldconfig.stdout)>1024*1024 or len(ldconfig.stderr)>4096:raise AssertionError('bounded loader cache census') + dynamic={name:set() for name in dynamic_patterns} + for line in ldconfig.stdout.decode('utf-8','strict').splitlines(): + if '=>' not in line:continue + raw=line.rsplit('=>',1)[1].strip();path=pathlib.Path(raw) + for name,pattern in dynamic_patterns.items(): + if fnmatch.fnmatchcase(path.name,pattern): + resolved=path.resolve(strict=True) + if resolved.is_file():dynamic[name].add(resolved) + if sum(map(len,dynamic.values()))>128:raise AssertionError('bounded dynamic runtime census') + cls.dynamic_libraries={name:sorted(paths) for name,paths in dynamic.items()} + runtime_paths.update(path for paths in cls.dynamic_libraries.values() for path in paths) runtime_paths.add(pathlib.Path('/etc/ld.so.cache')) runtime=[row(path) for path in sorted(runtime_paths)] roles={'hostfxr':str(fxr/'libhostfxr.so'),'hostpolicy':str(framework/'libhostpolicy.so'),'coreLib':str(framework/'System.Private.CoreLib.dll'),'coreClr':str(framework/'libcoreclr.so'),'jit':str(framework/'libclrjit.so')} @@ -284,7 +296,7 @@ def stream(raw): if 'hostfxr' in value:return 'hostfxr-unavailable' if 'permission denied' in value:return 'permission-refused' return 'bounded-nonempty' - diagnostic={'schema':'fsbar.public.runtime-evidence-startup-diagnostic/v1','dotnetHostExit':host.returncode,'dotnetStdout':stream(host.stdout),'dotnetStderr':stream(host.stderr),'runtimeFrameworkName':framework['name'],'runtimeFrameworkVersion':framework['version'],'selectedRuntimeVersion':self.dotnet_root.joinpath('shared/Microsoft.NETCore.App').iterdir().__next__().name,'selectedHostfxrVersion':self.dotnet_root.joinpath('host/fxr').iterdir().__next__().name,'runtimeFiles':sum(1 for path in self.dotnet_root.rglob('*') if path.is_file()),'runtimeLinks':sum(1 for path in self.dotnet_root.rglob('*') if path.is_symlink()),'policyDisposition':'not-started','policyCheck':None,'policyObservation':None} + diagnostic={'schema':'fsbar.public.runtime-evidence-startup-diagnostic/v1','dotnetHostExit':host.returncode,'dotnetStdout':stream(host.stdout),'dotnetStderr':stream(host.stderr),'runtimeFrameworkName':framework['name'],'runtimeFrameworkVersion':framework['version'],'selectedRuntimeVersion':self.dotnet_root.joinpath('shared/Microsoft.NETCore.App').iterdir().__next__().name,'selectedHostfxrVersion':self.dotnet_root.joinpath('host/fxr').iterdir().__next__().name,'runtimeFiles':sum(1 for path in self.dotnet_root.rglob('*') if path.is_file()),'runtimeLinks':sum(1 for path in self.dotnet_root.rglob('*') if path.is_symlink()),'dynamicLibraryCounts':{name:len(paths) for name,paths in self.dynamic_libraries.items()},'policyDisposition':'not-started','policyCheck':None,'policyObservation':None} self.assertEqual((host.returncode,diagnostic['runtimeLinks']),(0,0)) runner=object.__new__(GrowingLog);runner.last_policy_observation=None try: @@ -300,6 +312,16 @@ def stream(raw): if (diagnostic['policyCheck'],diagnostic['policyObservation'])!=('policy-result-join','request-evaluation:exception'): print(json.dumps(diagnostic,separators=(',',':'),sort_keys=True),flush=True);raise diagnostic['policyDisposition']='ready-request-refused' + icu={str(path) for path in self.dynamic_libraries['icu']};self.assertTrue(icu) + omitted=json.loads(self.closure.read_text());omitted['runtime']=[row for row in omitted['runtime'] if row['path'] not in icu] + omitted_path=pathlib.Path(self.fixture.name)/'current-process-omitted-icu.json';omitted_raw=json.dumps(omitted,separators=(',',':')).encode();omitted_path.write_bytes(omitted_raw);os.chmod(omitted_path,0o600) + omitted_runner=object.__new__(GrowingLog);omitted_runner.last_policy_observation=None + try: + with self.assertRaises(Refused) as caught:omitted_runner._run_policy(str(self.policy),str(omitted_path),hashlib.sha256(omitted_raw).hexdigest(),b'{}',time.monotonic()+5) + fact=caught.exception._barc_failure_observation;observation=fact['policyObservation'] + self.assertEqual((fact['check'],observation['checkpoint'],observation['kind']),('policy-artifact','current-process','exception')) + diagnostic['omittedIcuControl']='current-process-refused' + finally:omitted_path.unlink(missing_ok=True) print(json.dumps(diagnostic,separators=(',',':'),sort_keys=True),flush=True) self.assertIn(diagnostic['policyDisposition'],('ready-completed','ready-request-refused')) @staticmethod