From 96251bbe00685b62b13a7998599c2ee3f7b189dd Mon Sep 17 00:00:00 2001 From: EHotwagner Date: Sun, 18 Oct 2026 10:36:35 +0200 Subject: [PATCH 01/19] feat: capture partial native usage through existing telemetry spool --- src/FS.GG.Coord.Cli/SkillTelemetryAdapter.fs | 233 ++++++++++ src/FS.GG.Coord.Cli/SkillTelemetryAdapter.fsi | 7 + src/FS.GG.Coord.Cli/SkillTelemetryReaders.fs | 387 ++++++++++++----- src/FS.GG.Coord.Cli/SkillTelemetryReaders.fsi | 46 ++ src/FS.GG.Coord.Cli/TelemetryApplication.fs | 42 +- .../TelemetryStoreApplication.fs | 48 ++ .../TelemetryStoreApplication.fsi | 4 + .../WorkspaceTelemetryApplication.fs | 138 +++++- .../WorkspaceTelemetryApplication.fsi | 20 + src/FS.GG.Coord.Core/TelemetryStore.fs | 63 +++ src/FS.GG.Coord.Core/TelemetryStore.fsi | 22 + .../WorkspaceTelemetryApplicationTests.fs | 411 ++++++++++++++++++ .../TelemetryStoreTests.fs | 44 ++ 13 files changed, 1349 insertions(+), 116 deletions(-) diff --git a/src/FS.GG.Coord.Cli/SkillTelemetryAdapter.fs b/src/FS.GG.Coord.Cli/SkillTelemetryAdapter.fs index 1a7640055..17acbf762 100644 --- a/src/FS.GG.Coord.Cli/SkillTelemetryAdapter.fs +++ b/src/FS.GG.Coord.Cli/SkillTelemetryAdapter.fs @@ -1078,6 +1078,239 @@ module SkillTelemetryAdapter = publish config state "population-only" "applied" events jsonObject [ "schema", node "fsgg.telemetry.original-binding-result/1"; "status", node "applied" ] + // The passive producer reuses the private atomic writer and intent-before-effect discipline. + // It has no dispatch, admission, requested model, programme item or authority-service dependency. + [] + let private maximumPassiveIdentities = 256 + let private passiveStateSchema = "fsgg.telemetry.passive-producer-state/1" + + let private passiveStateDirectory root = Path.Combine(root, "orchestrator-passive") + + let private savePassive directory (state: JsonObject) = + let bytes = utf8.GetBytes(state.ToJsonString compact) + if bytes.Length >= maximumStateBytes then fail "passive-state-overload; cursor retained" + writePrivateBytes directory "producer" bytes |> ignore + + let private passiveState directory owner sourceIdentity = + let path = Path.Combine(directory, "producer.json") + if File.Exists path || FileInfo(path).LinkTarget <> null then + let state = readObject path "passive producer state is unavailable" + if requiredString "schema" state <> passiveStateSchema + || requiredString "owner" state <> owner + || requiredString "sourceIdentity" state <> sourceIdentity then + fail "passive producer stream already has a different serialized owner" + if state["sources"].AsObject().Count > NativeUsage.PassiveMaximumFiles + || state["responses"].AsObject().Count > maximumPassiveIdentities + || state["gaps"].AsArray().Count > 32 || requiredInt "sequence" state < 0 then + fail "passive producer state exceeds its finite profile" + state + else + jsonObject [ "schema", node passiveStateSchema; "owner", node owner + "sourceIdentity", node sourceIdentity; "generation", node (Guid.NewGuid().ToString("N")) + "sequence", node 0; "sources", JsonObject(); "responses", JsonObject() + "gaps", JsonArray(); "pending", nullNode ] + + let private passiveCursor (value: JsonNode) = + if isNull value then None + else + let value = value.AsObject() + Some { SourceInstance = requiredString "sourceInstance" value + Generation = requiredString "generation" value + Offset = value["offset"].GetValue() + AnchorDigest = requiredString "anchorDigest" value + SkippingOversized = boolValue "skippingOversized" value } + + let private cursorNode (cursor: PassiveCursor) = + jsonObject [ "sourceInstance", node cursor.SourceInstance; "generation", node cursor.Generation + "offset", node cursor.Offset; "anchorDigest", node cursor.AnchorDigest + "skippingOversized", node cursor.SkippingOversized ] + + let private passiveGap (state: JsonObject) code = + // One reserved bounded status slot; original distinct reasons survive subsequent passes. + let gaps = state["gaps"].AsArray() + if not (gaps |> Seq.exists (fun value -> value.GetValue() = code)) && gaps.Count < 32 then + gaps.Add(node code) + + let private passiveFact capturedAt (cursor: PassiveCursor) (record: PassiveNativeRecord) revision = + let optional value = value |> Option.map node |> Option.defaultValue nullNode + let counts = record.Usage + jsonObject [ "kind", node "provider-usage-observation/1" + "identity", node (NativeUsage.passiveIdentity record.ThreadId record.TurnId record.ResponseId) + "itemId", nullNode; "revision", node revision + "threadId", node (record.ThreadId.ToString("D")); "turnId", node (record.TurnId.ToString("D")) + "responseId", node record.ResponseId + "provider", optional record.Provider; "model", optional record.Model; "effort", optional record.Effort + "input", optional counts.Input; "cachedInput", optional counts.CachedInput; "cacheWriteInput", optional counts.CacheWriteInput + "output", optional counts.Output; "reasoning", optional counts.Reasoning; "total", optional counts.Total + "sourceInstance", node cursor.SourceInstance; "sourceGeneration", node cursor.Generation + "sourceDigest", node record.SourceDigest; "position", node record.Position + "capturedAt", node capturedAt; "occurredAt", optional record.OccurredAt + "provenance", node "codex-local-rollout/1"; "populationCoverage", node "partial" + "inventoryCoverage", node "unknown"; "terminalCoverage", node "unknown"; "attributionCoverage", node "unknown" ] + + let private passiveSnapshot (state: JsonObject) = + // Latest captured revisions, including when no receiver is reachable. Never item totals/cost. + let values = state["responses"].AsObject() + let observations = values |> Seq.map (fun pair -> pair.Value["fact"].DeepClone()) |> jsonArray + jsonObject [ "schema", node "fsgg.telemetry.passive-snapshot/1" + "capture", node (if values.Count = 0 then "no-counters-retained" else "locally-retained"); "attribution", node "unknown" + "delivery", node "unknown"; "populationCoverage", node "partial" + "pendingIntent", node (not (isNull state["pending"])) + "observations", observations; "gaps", state["gaps"].DeepClone() + "firstEnqueueFailure", (if isNull state["firstEnqueueFailure"] then nullNode else state["firstEnqueueFailure"].DeepClone()) + "lastEnqueueFailure", (if isNull state["lastEnqueueFailure"] then nullNode else state["lastEnqueueFailure"].DeepClone()) ] + + let private replayPassive directory (state: JsonObject) enqueue = + match state["pending"] with + | null -> true + | pending -> + let exact = Convert.FromBase64String(pending["batchBase64"].GetValue()) + if exact.Length > 65536 || sha256 exact <> pending["batchDigest"].GetValue() then + fail "passive pending intent is invalid; retained" + match enqueue exact with + | Error errors -> + let codes = errors |> List.truncate 4 |> List.map (fun code -> if code.Length <= 200 && not (code |> Seq.exists Char.IsControl) then code else "enqueue-failure") + if isNull state["firstEnqueueFailure"] then state["firstEnqueueFailure"] <- codes |> Seq.map node |> jsonArray + state["lastEnqueueFailure"] <- codes |> Seq.map node |> jsonArray + passiveGap state "enqueue-deferred-cursor-retained" + savePassive directory state + false + | Ok _ -> + // Only local enqueue/readback authorizes cursor/index commit. Remote acceptance is independent. + state["sources"] <- pending["sourcesAfter"].DeepClone() + state["responses"] <- pending["responsesAfter"].DeepClone() + state["sequence"] <- pending["sequenceAfter"].DeepClone() + state["pending"] <- nullNode + state["lastEnqueueFailure"] <- nullNode + savePassive directory state + true + + /// One bounded pass over explicit sources. The production caller always supplies its selected association root. + /// Same-owner state cloning/reinitialization/root migration requires original-state/fence reconciliation; + /// undeclared clones cannot be detected offline and are outside this supported first profile. + let capturePassive root owner sourceIdentity codexHome (paths: string list) enqueue = + try + if paths.IsEmpty || paths.Length > NativeUsage.PassiveMaximumFiles + || (paths |> List.exists (Path.IsPathFullyQualified >> not)) + || (paths |> List.distinct |> List.length) <> paths.Length then + fail "passive capture requires one to eight distinct explicit absolute source files" + if not (Path.IsPathFullyQualified root) then fail "passive state root must be the selected absolute association root" + let mutable ancestor = DirectoryInfo(Path.GetDirectoryName root) + while not (isNull ancestor) do + if ancestor.LinkTarget <> null then fail "passive state root has a linked ancestor" + ancestor <- ancestor.Parent + if not (Directory.Exists root) then + Directory.CreateDirectory root |> ignore + if not (OperatingSystem.IsWindows()) then File.SetUnixFileMode(root, enum 0o700) + if DirectoryInfo(root).LinkTarget <> null + || (not (OperatingSystem.IsWindows()) && (File.GetUnixFileMode root &&& enum 0o077) <> enum 0) then + fail "passive state root is unsafe" + let directory = passiveStateDirectory root + // Reuse the private writer's directory validation before acquiring the single producer lock. + if not (Directory.Exists directory) then + Directory.CreateDirectory directory |> ignore + if not (OperatingSystem.IsWindows()) then File.SetUnixFileMode(directory, enum 0o700) + let info = DirectoryInfo directory + if info.LinkTarget <> null || (not (OperatingSystem.IsWindows()) && (File.GetUnixFileMode directory &&& enum 0o077) <> enum 0) then + fail "passive producer directory is unsafe" + let lockPath = Path.Combine(directory, "producer.lock") + if FileInfo(lockPath).LinkTarget <> null then fail "passive producer lock is unsafe" + SkillPrivateDurability.withLock lockPath (fun () -> + let state = passiveState directory owner sourceIdentity + if replayPassive directory state enqueue then + let sources = state["sources"].DeepClone().AsObject() + let responses = state["responses"].DeepClone().AsObject() + let events = JsonArray() + let capturedAt = timestamp () + let mutable budget = NativeUsage.PassiveMaximumScanBytes + let mutable indexFull = false + // Rotate the finite caller-selected list; no recursive history discovery or starvation. + let sequence = requiredInt "sequence" state + let selected = paths |> List.sort + let shift = sequence % selected.Length + let ordered = (selected |> List.skip shift) @ (selected |> List.take shift) + for path in ordered do + if budget >= 16384 && events.Count < 24 && not indexFull then + let key = sha256(utf8.GetBytes(Path.GetFullPath path)) + if not (sources.ContainsKey key) && sources.Count >= NativeUsage.PassiveMaximumFiles then + passiveGap state "source-index-full-capture-deferred" + else + match NativeUsage.scanPassive codexHome path (passiveCursor sources[key]) budget (24 - events.Count) with + | Error _ -> passiveGap state "source-unavailable-cursor-retained" + | Ok scan -> + budget <- budget - scan.ScannedBytes + scan.Diagnostics |> List.iter (passiveGap state) + // Reserve all new response identities before advancing any source cursor. + let fresh = + scan.Records + |> List.map (fun row -> NativeUsage.passiveIdentity row.ThreadId row.TurnId row.ResponseId) + |> List.distinct + |> List.filter (responses.ContainsKey >> not) + let crossesCorrection = + scan.Records |> List.exists (fun row -> + let identity = NativeUsage.passiveIdentity row.ThreadId row.TurnId row.ResponseId + (events |> Seq.exists (fun fact -> fact["identity"].GetValue() = identity)) + && responses[identity]["digest"].GetValue() <> row.SourceDigest) + if responses.Count + fresh.Length > maximumPassiveIdentities then + indexFull <- true + passiveGap state "response-index-full-capture-deferred" + elif crossesCorrection then + passiveGap state "response-correction-boundary-deferred" + else + for record in scan.Records do + let identity = NativeUsage.passiveIdentity record.ThreadId record.TurnId record.ResponseId + let prior = responses[identity] + let unchanged = not (isNull prior) && prior["digest"].GetValue() = record.SourceDigest + if not unchanged then + let revision = if isNull prior then 1L else prior["revision"].GetValue() + 1L + let fact = passiveFact capturedAt scan.Cursor record revision + responses[identity] <- jsonObject [ "digest", node record.SourceDigest; "revision", node revision; "fact", fact.DeepClone() ] + events.Add fact + let previousCursor = passiveCursor sources[key] + if previousCursor |> Option.forall (fun previous -> previous.Generation <> scan.Cursor.Generation) then + let sourceKey = digest "passive-source-" [ scan.Cursor.SourceInstance; scan.Cursor.Generation ] + events.Add(event "source" sourceKey None + [ "sourceIdentity", node scan.Cursor.SourceInstance; "generation", node scan.Cursor.Generation + "cursor", node (string scan.Cursor.Offset) ]) + if previousCursor.IsSome then + events.Add(event "diagnostic" (sourceKey + "-gap") None + [ "code", node "passive-source-continuity-gap"; "severity", node "warning" ]) + sources[key] <- cursorNode scan.Cursor + if events.Count = 0 then + // No unretained counters exist: persist complete line boundaries and bounded gaps directly. + state["sources"] <- sources + state["sequence"] <- node (sequence + 1) + savePassive directory state + else + let batchId = "passive-" + requiredString "generation" state + "-" + string (sequence + 1) + let batch = jsonObject [ "schema", node batchSchema; "ingestId", node batchId + "sourceIdentity", node sourceIdentity; "generation", state["generation"].DeepClone() + "cursor", node (string (sequence + 1)); "eventCount", node events.Count; "events", events ] + let bytes = utf8.GetBytes(batch.ToJsonString compact) + if bytes.Length > 65536 then + passiveGap state "batch-size-overload-cursor-retained" + savePassive directory state + else + FS.GG.Coord.TelemetryStore.parseBatch bytes |> Result.defaultWith (fun _ -> fail "passive batch validation failed") |> ignore + state["pending"] <- jsonObject [ "batchBase64", node (Convert.ToBase64String bytes); "batchDigest", node (sha256 bytes) + "sourcesAfter", sources; "responsesAfter", responses; "sequenceAfter", node (sequence + 1) ] + // Intent is written before enqueue. A crash at either subsequent write replays identical bytes. + savePassive directory state + replayPassive directory state enqueue |> ignore + success (passiveSnapshot state)) + with + | AdapterError message -> result 1 "" $"fsgg passive telemetry: {message}\n" + | _ -> result 1 "" "fsgg passive telemetry: local capture outcome uncertain; inspect retained intent and state\n" + + let reportPassive root owner sourceIdentity = + try + let directory = passiveStateDirectory root + let state = passiveState directory owner sourceIdentity + success (passiveSnapshot state) + with + | AdapterError message -> result 1 "" $"fsgg passive telemetry: {message}\n" + | _ -> result 1 "" "fsgg passive telemetry: local report unavailable\n" + let private configured (config: HostConfig) command = match command with | Begin(feature, item, original, attempt, parentAttempt, parentToken, relation, producer, model, effort, lateAfter) -> beginDispatch config feature item original attempt parentAttempt parentToken relation producer model effort lateAfter diff --git a/src/FS.GG.Coord.Cli/SkillTelemetryAdapter.fsi b/src/FS.GG.Coord.Cli/SkillTelemetryAdapter.fsi index c4202c850..98f44ec21 100644 --- a/src/FS.GG.Coord.Cli/SkillTelemetryAdapter.fsi +++ b/src/FS.GG.Coord.Cli/SkillTelemetryAdapter.fsi @@ -25,5 +25,12 @@ module SkillTelemetryAdapter = val internal writePrivateBytes: directory: string -> name: string -> bytes: byte array -> string + /// Bounded partial local usage; enqueue is the existing immutable spool seam, never a remote call. + val capturePassive: + root: string -> owner: string -> sourceIdentity: string -> codexHome: string -> paths: string list -> + enqueue: (byte array -> Result) -> CommandResult + + val reportPassive: root: string -> owner: string -> sourceIdentity: string -> CommandResult + val run: SkillTelemetryReaders.HostConfig option -> TelemetryCommand -> CommandResult val acceptsStateSchema: string -> bool diff --git a/src/FS.GG.Coord.Cli/SkillTelemetryReaders.fs b/src/FS.GG.Coord.Cli/SkillTelemetryReaders.fs index 4185e207f..37d6d44e4 100644 --- a/src/FS.GG.Coord.Cli/SkillTelemetryReaders.fs +++ b/src/FS.GG.Coord.Cli/SkillTelemetryReaders.fs @@ -24,6 +24,27 @@ module internal SkillPrivateDurability = [] extern int private Close(int descriptor) + [] + extern int private OpenPrivate(string path, int flags, uint32 mode) + + [] + extern int private Flock(int descriptor, int operation) + + let withLock path action = + if OperatingSystem.IsLinux() then + let descriptor = OpenPrivate(path, 0x2 ||| 0x40 ||| 0x800 ||| 0x20000 ||| 0x80000, 0x180u) + if descriptor < 0 then raise (IOException "private producer lock is unavailable") + try + if Flock(descriptor, 2 ||| 4) <> 0 then raise (IOException "private producer is busy") + use handle = new SafeFileHandle(nativeint descriptor, false) + use stream = new FileStream(handle, FileAccess.ReadWrite) + if not stream.CanSeek then raise (IOException "private producer lock is not a regular file") + action () + finally Close descriptor |> ignore + else + use held = new FileStream(path, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None) + action () + let syncDirectory path = if not (OperatingSystem.IsWindows()) then let descriptor = Open(path, 0) @@ -68,6 +89,39 @@ module SkillTelemetryReaders = ProducerStream: string } + type ObservedCounters = + { Input: int64 option + CachedInput: int64 option + CacheWriteInput: int64 option + Output: int64 option + Reasoning: int64 option + Total: int64 option } + + type PassiveNativeRecord = + { ThreadId: Guid + TurnId: Guid + ResponseId: string + Usage: ObservedCounters + Provider: string option + Model: string option + Effort: string option + OccurredAt: string option + SourceDigest: string + Position: int64 } + + type PassiveCursor = + { SourceInstance: string + Generation: string + Offset: int64 + AnchorDigest: string + SkippingOversized: bool } + + type PassiveScan = + { Records: PassiveNativeRecord list + Cursor: PassiveCursor + ScannedBytes: int + Diagnostics: string list } + type NativeCounters = { Input: int64 @@ -873,26 +927,51 @@ module SkillTelemetryReaders = else None - let private counters value = - match - int64Field "input_tokens" value, - int64Field "cached_input_tokens" value, - int64Field "output_tokens" value, - int64Field "reasoning_output_tokens" value, - int64Field "total_tokens" value + let private observedCounters (value: JsonElement) : Result = + try + if value.ValueKind <> JsonValueKind.Object then invalidOp "native usage counters are malformed" + let count name = + match value.TryGetProperty name with + | false, _ -> None + | true, field when field.ValueKind = JsonValueKind.Null -> None + | true, _ -> + match int64Field name value with + | Some number -> Some number + | None -> invalidOp "native usage counters are malformed" + let input, cached, cacheWrite = count "input_tokens", count "cached_input_tokens", count "cache_write_input_tokens" + let output, reasoning, total = count "output_tokens", count "reasoning_output_tokens", count "total_tokens" + let subset part whole = match part, whole with Some p, Some w -> p <= w | _ -> true + if not (subset cached input && subset cacheWrite input && subset reasoning output) + || (match input, output, total with Some i, Some o, Some t -> i > Int64.MaxValue - o || i + o <> t | _ -> false) + || ([input; cached; cacheWrite; output; reasoning; total] |> List.forall Option.isNone) then + invalidOp "native usage counters are malformed" + Ok { Input = input; CachedInput = cached; CacheWriteInput = cacheWrite; Output = output; Reasoning = reasoning; Total = total } + with :? InvalidOperationException -> failure "native usage counters are malformed" + + let private counters value : Result = + observedCounters value + |> Result.bind (fun counts -> + match counts.Input, counts.CachedInput, counts.Output, counts.Reasoning, counts.Total with + | Some input, Some cached, Some output, Some reasoning, Some total -> + Ok { Input = input; CachedInput = cached; Output = output; Reasoning = reasoning; Total = total } + | _ -> failure "native usage counters are malformed") + + // Both complete accounting and passive capture use this decoder. It retains no raw text. + let private decodeUsageRecord (raw: byte array) = + try + use document = JsonDocument.Parse raw + let row = document.RootElement + if stringField "type" row <> Some "token_usage_record" then Ok None + else + let payload = row.GetProperty "payload" + match guidField "thread_id" payload, guidField "turn_id" payload, stringField "response_id" payload with + | Some thread, Some turn, Some response when thread <> Guid.Empty && turn <> Guid.Empty + && identityPattern.IsMatch response -> + observedCounters (payload.GetProperty "usage") + |> Result.map (fun usage -> Some(thread, turn, response, usage, payload.Clone(), row.Clone())) + | _ -> failure "native usage record identity is malformed" with - | Some input, Some cached, Some output, Some reasoning, Some total when - cached <= input && reasoning <= output && input + output = total - -> - Ok - { - Input = input - CachedInput = cached - Output = output - Reasoning = reasoning - Total = total - } - | _ -> failure "native usage counters are malformed" + | :? JsonException | :? InvalidOperationException | :? KeyNotFoundException -> failure "native usage record is malformed" type private AppServer(command: string, protectedHome: string option) = let start = ProcessStartInfo(command) @@ -1120,6 +1199,34 @@ module SkillTelemetryReaders = | None -> Ok(rows |> Seq.toList, pageNumber) module private NativeFile = + [] + type Stat = + struct + val mutable Device: uint64 + val mutable Inode: uint64 + val mutable Links: uint64 + val mutable Mode: uint32 + val mutable User: uint32 + val mutable Group: uint32 + val mutable Padding: int32 + val mutable Rdev: uint64 + val mutable Size: int64 + val mutable BlockSize: int64 + val mutable Blocks: int64 + val mutable AccessSeconds: int64 + val mutable AccessNanoseconds: int64 + val mutable ModifySeconds: int64 + val mutable ModifyNanoseconds: int64 + val mutable ChangeSeconds: int64 + val mutable ChangeNanoseconds: int64 + val mutable Reserved1: int64 + val mutable Reserved2: int64 + val mutable Reserved3: int64 + end + + [] + extern int fstat(int descriptor, Stat& value) + [] let ReadOnly = 0 @@ -1204,7 +1311,7 @@ module SkillTelemetryReaders = NativeFile.OpenAt( current, components[components.Length - 1], - NativeFile.ReadOnly ||| NativeFile.CloseOnExec ||| NativeFile.NoFollow + NativeFile.ReadOnly ||| NativeFile.CloseOnExec ||| NativeFile.NoFollow ||| 0x800 ) if fileDescriptor < 0 then @@ -1257,6 +1364,140 @@ module SkillTelemetryReaders = with _ -> failure "native usage rollout is unavailable or outside the private host" + [] + let PassiveMaximumFiles = 8 + [] + let PassiveMaximumScanBytes = 4 * 1024 * 1024 + [] + let PassiveMaximumObservations = 64 + + let passiveIdentity (thread: Guid) (turn: Guid) response = + "passive-" + sha256(Encoding.UTF8.GetBytes("codex-rollout/1\u001f" + thread.ToString("D") + "\u001f" + turn.ToString("D") + "\u001f" + response)) + + // Reads only selected files through the same no-follow opener as complete native accounting. + // The inode/device identity comes from the opened descriptor, never the pathname's metadata. + let scanPassive codexHome path (prior: PassiveCursor option) maximumBytes maximumRecords = + if maximumBytes < 16384 || maximumBytes > PassiveMaximumScanBytes + || maximumRecords < 1 || maximumRecords > PassiveMaximumObservations then + failure "passive native scan bounds are invalid" + elif not (OperatingSystem.IsLinux() && RuntimeInformation.ProcessArchitecture = Architecture.X64) then + failure "passive source identity is unsupported on this platform" + else + match openRollout codexHome path with + | Error error -> Error error + | Ok opened -> + use source = opened + try + let file = source :?> FileStream + let mutable stat = Unchecked.defaultof + if NativeFile.fstat(file.SafeFileHandle.DangerousGetHandle().ToInt32(), &stat) <> 0 + || (stat.Mode &&& 0xF000u) <> 0x8000u then invalidOp "passive source is not a regular file" + let instance = sha256(Encoding.UTF8.GetBytes($"codex-file/1:{stat.Device}:{stat.Inode}")) + let mutable scanned = 0 + let anchor offset = + use retained = new MemoryStream() + for start, length in [ 0L, min 4096L offset; max 0L (offset - 4096L), min 4096L offset ] do + source.Position <- start + let bytes = Array.zeroCreate (int length) + source.ReadExactly(bytes, 0, bytes.Length) + scanned <- scanned + bytes.Length + retained.Write(bytes, 0, bytes.Length) + sha256(retained.ToArray()) + let diagnostics = HashSet(StringComparer.Ordinal) + let continuous = + match prior with + | Some cursor when cursor.SourceInstance = instance && cursor.Offset >= 0L && cursor.Offset <= source.Length -> + anchor cursor.Offset = cursor.AnchorDigest + | _ -> false + let generation, initialOffset, initialSkip = + match prior with + | Some cursor when continuous -> cursor.Generation, cursor.Offset, cursor.SkippingOversized + | Some _ -> + diagnostics.Add "source-continuity-gap" |> ignore + Guid.NewGuid().ToString("N"), 0L, false + | None -> + diagnostics.Add "source-population-unknown" |> ignore + Guid.NewGuid().ToString("N"), 0L, false + source.Position <- initialOffset + let records = ResizeArray() + let identities = HashSet(StringComparer.Ordinal) + use line = new MemoryStream() + let buffer = Array.zeroCreate 8192 + let mutable position, committed, lineStart = initialOffset, initialOffset, initialOffset + let mutable skipping = initialSkip + let mutable doneReading = false + let mutable bytesSinceLine = 0 + // Reserve 8 KiB for the final continuity anchor within the global byte budget. + while not doneReading && scanned < maximumBytes - 8192 && records.Count < maximumRecords do + let count = source.Read(buffer, 0, min buffer.Length (maximumBytes - 8192 - scanned)) + scanned <- scanned + count + if count = 0 then doneReading <- true + else + let mutable index = 0 + while index < count && records.Count < maximumRecords && not doneReading do + let value = buffer[index] + position <- position + 1L + bytesSinceLine <- bytesSinceLine + 1 + if not skipping then + if line.Length >= int64 maximumLineBytes then + skipping <- true + line.SetLength 0L + diagnostics.Add "oversized-line-skipped" |> ignore + else line.WriteByte value + if value = byte '\n' then + if not skipping then + let bytes = line.ToArray() + match decodeUsageRecord bytes with + | Error _ -> diagnostics.Add "malformed-row-skipped" |> ignore + | Ok None -> () + | Ok(Some(thread, turn, response, usage, payload, row)) -> + let profile name = + stringField name payload + |> Option.filter (fun text -> not (String.IsNullOrWhiteSpace text) && text.Length <= 200 && not (text |> Seq.exists Char.IsControl)) + let occurred = + stringField "timestamp" row + |> Option.orElseWith (fun () -> stringField "timestamp" payload) + |> Option.bind (fun text -> + if not (Regex.IsMatch(text, "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}(?:\\.[0-9]+)?(?:Z|[+-][0-9]{2}:[0-9]{2})$")) then None + else + match DateTimeOffset.TryParse(text, CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind) with + | true, parsed -> Some(parsed.ToUniversalTime().ToString("O")) + | _ -> None) + // Digest only the allowlisted source projection; never hash/export transcript bodies. + let normalized = + JsonSerializer.SerializeToUtf8Bytes + {| threadId = thread; turnId = turn; responseId = response + input = usage.Input |> Option.toNullable; cachedInput = usage.CachedInput |> Option.toNullable + cacheWriteInput = usage.CacheWriteInput |> Option.toNullable; output = usage.Output |> Option.toNullable + reasoning = usage.Reasoning |> Option.toNullable; total = usage.Total |> Option.toNullable + provider = profile "provider" |> Option.toObj; model = profile "model" |> Option.toObj + effort = profile "effort" |> Option.toObj; occurredAt = occurred |> Option.toObj |} + if identities.Add(passiveIdentity thread turn response) then + records.Add { ThreadId = thread; TurnId = turn; ResponseId = response; Usage = usage + Provider = profile "provider"; Model = profile "model"; Effort = profile "effort" + OccurredAt = occurred; SourceDigest = sha256 normalized; Position = lineStart } + else + // Never collapse a correction before its prior revision has an intent. + doneReading <- true + diagnostics.Add "response-boundary-deferred" |> ignore + if not doneReading then + committed <- position + lineStart <- position + line.SetLength 0L + bytesSinceLine <- 0 + skipping <- false + elif skipping then committed <- position + index <- index + 1 + if records.Count = maximumRecords then diagnostics.Add "observation-pass-budget" |> ignore + if bytesSinceLine > 0 && not skipping then diagnostics.Add (if doneReading then "partial-tail-deferred" else "line-boundary-deferred") |> ignore + if not doneReading && records.Count < maximumRecords then diagnostics.Add "scan-pass-budget" |> ignore + let finalAnchor = anchor committed + Ok { Records = records |> Seq.toList + Cursor = { SourceInstance = instance; Generation = generation; Offset = committed; AnchorDigest = finalAnchor; SkippingOversized = skipping } + ScannedBytes = scanned + Diagnostics = diagnostics |> Seq.sort |> Seq.toList } + with _ -> failure "passive native source read failed; cursor retained" + type private UsageRecord = { Response: string @@ -1279,89 +1520,31 @@ module SkillTelemetryReaders = while next.IsSome && failed.IsNone do let bytes = next.Value if bytes.Length > 0 && isNativeUsageRecordPrefix bytes then - let line = decodedLine bytes - match Json.parse (Encoding.UTF8.GetBytes line) with - | Error _ -> - failed <- - Some - { - Message = "native usage record is malformed" - Coverage = Unknown - } - | Ok row -> - let mutable payload = Unchecked.defaultof - - if - stringField "type" row <> Some "token_usage_record" - || not (row.TryGetProperty("payload", &payload)) - || payload.ValueKind <> JsonValueKind.Object - then - failed <- - Some - { - Message = "native usage record is malformed" - Coverage = Unknown - } + match decodeUsageRecord bytes with + | Error error -> failed <- Some error + | Ok None -> () + | Ok(Some(recordThread, turnId, response, _, payload, _)) -> + if recordThread <> threadId || not (turnIds.Contains turnId) then + failed <- Some { Message = "native usage record belongs to another thread or turn"; Coverage = Unknown } else - match - guidField "thread_id" payload, - guidField "turn_id" payload, - stringField "response_id" payload - with - | Some recordThread, Some turnId, Some response when - recordThread = threadId - && turnIds.Contains turnId - && not (String.IsNullOrEmpty response) - -> - let mutable usage = Unchecked.defaultof - let mutable turnTotal = Unchecked.defaultof - - if - payload.TryGetProperty("usage", &usage) - && payload.TryGetProperty("turn_token_usage", &turnTotal) - then - match counters usage, counters turnTotal with - | Ok usageValue, Ok totalValue -> - let collection = - match records.TryGetValue turnId with - | true, value -> value - | _ -> - let value = ResizeArray() - records[turnId] <- value - value - - collection.Add - { - Response = response - Usage = usageValue - TurnTotal = totalValue - } - - evidence.Add bytes - - if evidence |> Seq.sumBy _.Length > maximumEvidenceBytes then - failed <- - Some - { - Message = "native rollout evidence exceeds the bound" - Coverage = Unknown - } - | Error error, _ - | _, Error error -> failed <- Some error - else - failed <- - Some - { - Message = "native usage record is malformed" - Coverage = Unknown - } - | _ -> - failed <- - Some - { - Message = "native usage record belongs to another thread or turn" - Coverage = Unknown - } + let mutable usage = Unchecked.defaultof + let mutable turnTotal = Unchecked.defaultof + if payload.TryGetProperty("usage", &usage) && payload.TryGetProperty("turn_token_usage", &turnTotal) then + match counters usage, counters turnTotal with + | Ok usageValue, Ok totalValue -> + let collection = + match records.TryGetValue turnId with + | true, value -> value + | _ -> + let value = ResizeArray() + records[turnId] <- value + value + collection.Add { Response = response; Usage = usageValue; TurnTotal = totalValue } + evidence.Add bytes + if evidence |> Seq.sumBy _.Length > maximumEvidenceBytes then + failed <- Some { Message = "native rollout evidence exceeds the bound"; Coverage = Unknown } + | Error error, _ | _, Error error -> failed <- Some error + else failed <- Some { Message = "native usage record is malformed"; Coverage = Unknown } if failed.IsNone then next <- lines.ReadLine(None, true) diff --git a/src/FS.GG.Coord.Cli/SkillTelemetryReaders.fsi b/src/FS.GG.Coord.Cli/SkillTelemetryReaders.fsi index 4f9a69070..0b4ac7d73 100644 --- a/src/FS.GG.Coord.Cli/SkillTelemetryReaders.fsi +++ b/src/FS.GG.Coord.Cli/SkillTelemetryReaders.fsi @@ -5,6 +5,7 @@ open System.Text.Json module internal SkillPrivateDurability = val syncDirectory: string -> unit + val withLock: string -> (unit -> 'a) -> 'a module SkillTelemetryReaders = type Coverage = @@ -67,6 +68,39 @@ module SkillTelemetryReaders = producer: string -> Result + type ObservedCounters = + { Input: int64 option + CachedInput: int64 option + CacheWriteInput: int64 option + Output: int64 option + Reasoning: int64 option + Total: int64 option } + + type PassiveNativeRecord = + { ThreadId: Guid + TurnId: Guid + ResponseId: string + Usage: ObservedCounters + Provider: string option + Model: string option + Effort: string option + OccurredAt: string option + SourceDigest: string + Position: int64 } + + type PassiveCursor = + { SourceInstance: string + Generation: string + Offset: int64 + AnchorDigest: string + SkippingOversized: bool } + + type PassiveScan = + { Records: PassiveNativeRecord list + Cursor: PassiveCursor + ScannedBytes: int + Diagnostics: string list } + type NativeCounters = { Input: int64 @@ -117,6 +151,18 @@ module SkillTelemetryReaders = } module NativeUsage = + [] + val PassiveMaximumFiles: int = 8 + [] + val PassiveMaximumScanBytes: int = 4194304 + [] + val PassiveMaximumObservations: int = 64 + + val passiveIdentity: thread: Guid -> turn: Guid -> response: string -> string + val scanPassive: + codexHome: string -> path: string -> prior: PassiveCursor option -> maximumBytes: int -> maximumRecords: int -> + Result + val coverageForParent: Guid option -> Coverage val collect: diff --git a/src/FS.GG.Coord.Cli/TelemetryApplication.fs b/src/FS.GG.Coord.Cli/TelemetryApplication.fs index 712e641b4..b75ef2c41 100644 --- a/src/FS.GG.Coord.Cli/TelemetryApplication.fs +++ b/src/FS.GG.Coord.Cli/TelemetryApplication.fs @@ -127,6 +127,8 @@ module TelemetryApplication = shape [ "--store-root"; "--item" ] [] args | "telemetry" :: "store" :: "export" :: args -> shape [ "--store-root"; "--item"; "--output" ] [ "--public" ] args + | "telemetry" :: "passive" :: "capture" :: args -> shape [ "--config"; "--repository"; "--input" ] [] args + | "telemetry" :: "passive" :: "report" :: args -> shape [ "--config"; "--repository" ] [] args | "telemetry" :: "workspace" :: action :: args when action = "status" || action = "binding" || action = "drain" -> shape [ "--config"; "--repository"; "--binding-digest" ] [] args | "telemetry" :: "workspace" :: "submit" :: args -> @@ -144,7 +146,7 @@ module TelemetryApplication = "--credential-reference" "--spool-root" ] - [] + (if action = "activate-remote" then [ "--capture-only" ] else []) args | "telemetry" :: "workspace" :: "associate-repository" :: args -> shape [ "--config"; "--workspace"; "--repository"; "--remove-repository" ] [] args @@ -1057,6 +1059,41 @@ module TelemetryApplication = with ex -> fail "roadmap unit revision" [ ex.Message ] + let private passive action args = + match option "--repository" args with + | None -> fail "telemetry passive" [ "--repository is required" ] + | Some repository -> + let config = option "--config" args + match WorkspaceTelemetryApplication.passiveProducer config (Some repository) with + | Error errors -> fail "telemetry passive" errors + | Ok(root, scope, binding) -> + let owner = scope.Workspace + ":" + scope.Producer + ":" + scope.Stream + ":" + binding + let completed = + if action = "report" then SkillTelemetryAdapter.reportPassive root owner scope.Stream + else + try + let path = option "--input" args |> Option.defaultWith (fun () -> invalidOp "--input is required") + let bytes = WorkspaceTelemetryApplication.readPassiveSelection path |> Result.defaultWith (fun _ -> invalidOp "passive selection unavailable") + use document = JsonDocument.Parse bytes + let selection = document.RootElement + let fields = selection.EnumerateObject() |> Seq.map _.Name |> Seq.toList + if fields.Length <> 3 || Set.ofList fields <> Set.ofList [ "schema"; "codexHome"; "sources" ] + || selection.GetProperty("schema").GetString() <> "fsgg.telemetry.passive-selection/1" then + invalidOp "passive source selection has an unsupported shape" + let home = selection.GetProperty("codexHome").GetString() + if not (Path.IsPathFullyQualified home) then invalidOp "passive source root must be absolute" + let paths = selection.GetProperty("sources").EnumerateArray() |> Seq.map _.GetString() |> Seq.toList + SkillTelemetryAdapter.capturePassive root owner scope.Stream home paths + (WorkspaceTelemetryApplication.tryEnqueueBound config (Some repository) (Some scope.Producer) (Some binding)) + with _ -> + { SkillTelemetryAdapter.CommandResult.ExitCode = 1; Stdout = Array.empty + Stderr = Encoding.UTF8.GetBytes "fsgg passive telemetry: source selection unavailable or invalid\n" } + use stdout = Console.OpenStandardOutput() + use stderr = Console.OpenStandardError() + stdout.Write(completed.Stdout, 0, completed.Stdout.Length) + stderr.Write(completed.Stderr, 0, completed.Stderr.Length) + completed.ExitCode + let tryRun argv = match argv with | "telemetry" :: "dashboard" :: "publisher-event" :: args -> @@ -1086,6 +1123,9 @@ module TelemetryApplication = args (TelemetryDashboardApplication.run "serve") ) + | "telemetry" :: "passive" :: action :: args when action = "capture" || action = "report" -> + let valueOptions = if action = "capture" then [ "--config"; "--repository"; "--input" ] else [ "--config"; "--repository" ] + Some(validated "telemetry passive" valueOptions [] args (passive action)) | "telemetry" :: "workspace" :: action :: args -> Some(WorkspaceTelemetryApplication.run action args) | "telemetry" :: "ci" :: action :: args -> Some(TelemetryCiApplication.run action args) | "telemetry" :: "budget" :: action :: args -> diff --git a/src/FS.GG.Coord.Cli/TelemetryStoreApplication.fs b/src/FS.GG.Coord.Cli/TelemetryStoreApplication.fs index 56a210532..8415ed7ed 100644 --- a/src/FS.GG.Coord.Cli/TelemetryStoreApplication.fs +++ b/src/FS.GG.Coord.Cli/TelemetryStoreApplication.fs @@ -1636,6 +1636,7 @@ WHERE f.identity=$resource AND f.revision=$sourceRevision AND f.content_digest=$ [ "$item", box rosterItem ] if assigned <> 0L then invalidOp $"shared allocation for %s{rosterItem} must be persisted before assignment" + | TelemetryStore.PassiveProviderUsage _ | TelemetryStore.RuntimeNativeInventory _ | TelemetryStore.RuntimeExecNativeInventory _ | TelemetryStore.RuntimeResponseNativeInventory _ @@ -3067,6 +3068,39 @@ ORDER BY f.identity LIMIT 413701; AuthenticatedFacts = facts } with error -> Error [ error.Message ] + /// Bounded, read-only partial observations from the existing current canonical ledger. + /// These unassigned facts never enter item usage, budget or efficiency projections. + let passiveObservations path assessment (scope: TelemetryReceipt.Scope) = + match validateRoot path assessment |> Result.bind (fun root -> connect root SqliteOpenMode.ReadOnly) with + | Error errors -> Error errors + | Ok(connection, _) -> + use connection = connection + try + use transaction = connection.BeginTransaction() + if Int32.Parse(scalarText connection "PRAGMA user_version;") <> currentSchemaVersion then + invalidOp "passive-receiver-capability-unavailable" + use command = connection.CreateCommand() + command.Transaction <- transaction + command.CommandText <- "SELECT f.canonical FROM current_ingest_facts f JOIN fact_admissions a ON a.identity=f.identity WHERE (SELECT value FROM store_metadata WHERE key='receiptWorkspace')=$workspace AND f.kind='provider-usage-observation/1' AND f.item_id IS NULL AND a.producer=$producer AND a.stream=$stream AND a.authority_role='generic' ORDER BY f.identity LIMIT 257;" + parameter command "$workspace" scope.Workspace + parameter command "$producer" scope.Producer + parameter command "$stream" scope.Stream + use reader = command.ExecuteReader() + let observations = JsonArray() + let mutable truncated = false + while reader.Read() do + if observations.Count < 256 then observations.Add(JsonNode.Parse(reader.GetString 0)) + else truncated <- true + let result = JsonObject() + result["schema"] <- "fsgg.telemetry.passive-snapshot/1" + result["capture"] <- "receiver-applied" + result["attribution"] <- "unknown" + result["populationCoverage"] <- "partial" + result["truncated"] <- JsonValue.Create truncated + result["observations"] <- observations + Ok(result.ToJsonString() + "\n") + with _ -> Error [ "passive-observation-projection-unavailable" ] + let private validateCiSuitePageOwner (connection: SqliteConnection) itemId producer stream (scope: TelemetryStore.CiSuiteProofScope) = use command = connection.CreateCommand() command.CommandText <- """ @@ -3493,6 +3527,8 @@ UNION ALL SELECT count(*) FROM runtime_turn_usage WHERE invocation_id=$invocatio "learn-native-delivery-source/1"; "learn-installed-origin/1" ] if batch.Facts |> List.exists (fun fact -> not (allowed.Contains fact.Kind)) then invalidOp "invalid-request" + | None when batch.Facts |> List.exists (fun fact -> fact.Kind = "provider-usage-observation/1") -> + invalidOp "passive-observation-authenticated-owner-required" | Some _ when batch.Facts |> List.exists (fun fact -> fact.Kind = "learn-installed-origin/1") -> invalidOp "invalid-request" | None when batch.Facts |> List.exists (fun fact -> fact.Kind = "learn-installed-origin/1") -> @@ -3596,6 +3632,18 @@ UNION ALL SELECT count(*) FROM runtime_turn_usage WHERE invocation_id=$invocatio || admission.Principal.Scope.Stream <> seal.Scope.ProducerStream then invalidOp "ci-suite-seal-authenticated-stream-or-item-mismatch" | _ -> () + match state with + | Some(oldKind, _, _) when oldKind = "provider-usage-observation/1" || fact.Kind = "provider-usage-observation/1" -> + if oldKind <> fact.Kind then invalidOp "passive-observation-kind-is-immutable" + let admission = factAdmission |> Option.defaultWith (fun () -> invalidOp "passive-observation-authenticated-owner-required") + use owner = connection.CreateCommand() + owner.CommandText <- "SELECT count(*) FROM fact_admissions WHERE identity=$identity AND producer=$producer AND stream=$stream AND authority_role='generic';" + parameter owner "$identity" fact.Identity + parameter owner "$producer" admission.Principal.Scope.Producer + parameter owner "$stream" admission.Principal.Scope.Stream + if Convert.ToInt64(owner.ExecuteScalar()) <> 1L then invalidOp "passive-observation-owner-mismatch" + | _ -> () + match state with | Some(oldKind, _, _) when oldKind.StartsWith("efficiency-", StringComparison.Ordinal) -> if oldKind <> fact.Kind then invalidOp "efficiency-record-kind-is-immutable" diff --git a/src/FS.GG.Coord.Cli/TelemetryStoreApplication.fsi b/src/FS.GG.Coord.Cli/TelemetryStoreApplication.fsi index db1eeb65c..d2e9ccc64 100644 --- a/src/FS.GG.Coord.Cli/TelemetryStoreApplication.fsi +++ b/src/FS.GG.Coord.Cli/TelemetryStoreApplication.fsi @@ -372,6 +372,10 @@ module TelemetryStoreApplication = outputPath: string -> Result + val passiveObservations: + path: string -> assessment: TelemetryStore.DurabilityAssessment -> scope: TelemetryReceipt.Scope -> + Result + val run: action: string -> args: string list -> int val runBudget: action: string -> args: string list -> int val runReview: action: string -> args: string list -> int diff --git a/src/FS.GG.Coord.Cli/WorkspaceTelemetryApplication.fs b/src/FS.GG.Coord.Cli/WorkspaceTelemetryApplication.fs index 7f2a53830..8eff2d218 100644 --- a/src/FS.GG.Coord.Cli/WorkspaceTelemetryApplication.fs +++ b/src/FS.GG.Coord.Cli/WorkspaceTelemetryApplication.fs @@ -107,6 +107,10 @@ module WorkspaceTelemetryApplication = Digest: string } + type RemoteOperations = + { Lookup: TelemetryReceipt.Scope -> string -> string -> CancellationToken -> System.Threading.Tasks.Task + Submit: TelemetryReceipt.Scope -> byte array -> CancellationToken -> System.Threading.Tasks.Task } + type LocalDashboardBinding = { ConfigPath: string @@ -197,7 +201,7 @@ module WorkspaceTelemetryApplication = else Ok() - let readEfficiencyClaimTemplate (path: string) = + let private readPrivateDescriptor maximumBytes (path: string) = let unsafeFile () = Error [ "efficiency-claim-template-unsafe" ] if not (OperatingSystem.IsLinux()) then Error [ "efficiency-claim-template-platform-unavailable" ] elif String.IsNullOrWhiteSpace path || not (Path.IsPathFullyQualified path) then unsafeFile () @@ -214,7 +218,7 @@ module WorkspaceTelemetryApplication = let mutable before = Unchecked.defaultof let valid (value: Native.Stat) = (value.Mode &&& 0xF000u)=0x8000u && (value.Mode &&& 0xFFFu)=0x180u - && value.User=Native.geteuid() && value.Size>0L && value.Size<=16384L + && value.User=Native.geteuid() && value.Size>0L && value.Size<=maximumBytes if Native.fstat(descriptor,&before)<>0 || not (valid before) then unsafeFile () else use stream = new FileStream(handle,FileAccess.Read) @@ -238,6 +242,11 @@ module WorkspaceTelemetryApplication = | :? UnauthorizedAccessException -> unsafeFile () | :? ArgumentException -> unsafeFile () + let readEfficiencyClaimTemplate path = readPrivateDescriptor 16384L path + + let readPassiveSelection path = + readPrivateDescriptor 32768L path |> Result.mapError (fun _ -> [ "passive-selection-unsafe" ]) + let private exactObject (node: JsonObject) names = node |> Seq.map _.Key |> Set.ofSeq = Set.ofList names @@ -602,7 +611,30 @@ module WorkspaceTelemetryApplication = |> Option.filter (String.IsNullOrWhiteSpace >> not) } - let private remoteOne + let private passiveBatch (batch: TelemetryStore.Batch) = + batch.Facts |> List.exists (fun fact -> fact.Kind = "provider-usage-observation/1" || (fact.Kind = "source" && fact.Identity.StartsWith("passive-source-", StringComparison.Ordinal))) + + let private passivePredecessor directory (current: TelemetryReceipt.Envelope) = + if not (passiveBatch current.Batch) then false + else + try + let cursor = Int64.Parse(current.Batch.Cursor, Globalization.CultureInfo.InvariantCulture) + let files = Directory.EnumerateFiles(directory, "*.ready") |> Seq.truncate 129 |> Seq.toArray + if files.Length > 128 then true + else + files |> Array.exists (fun file -> + let info = FileInfo file + if info.LinkTarget <> null || info.Length > int64 TelemetryReceipt.MaxEnvelopeBytes then true + else + match TelemetryReceipt.parse (File.ReadAllBytes file) with + | Error _ -> true + | Ok prior -> + prior.Scope = current.Scope && prior.Batch.SourceIdentity = current.Batch.SourceIdentity + && prior.Batch.Generation = current.Batch.Generation + && Int64.Parse(prior.Batch.Cursor, Globalization.CultureInfo.InvariantCulture) < cursor) + with _ -> true + + let private remoteOneWith (operations: RemoteOperations option) (a: Association) (endpoint: Uri) (reference: string) @@ -625,6 +657,8 @@ module WorkspaceTelemetryApplication = match TelemetryReceipt.parse bytes with | Error _ -> Error [ "spool-invalid" ] | Ok parsed when parsed.Scope <> (scope a) -> Error [ "spool-scope-conflict" ] + | Ok parsed when passivePredecessor (Path.GetDirectoryName file) parsed -> + Error [ "passive-prior-batch-pending" ] | Ok parsed -> let config: RemoteContract.ClientConfig = { @@ -632,20 +666,30 @@ module WorkspaceTelemetryApplication = CredentialReference = reference } - let resolve = credential - + let selected = + operations |> Option.defaultWith (fun () -> + { Lookup = RemoteClient.lookup config credential + Submit = RemoteClient.submit config credential }) let result = - (RemoteClient.lookup config resolve (scope a) parsed.BatchId parsed.Digest token) - .GetAwaiter() - .GetResult() + (selected.Lookup (scope a) parsed.BatchId parsed.Digest token).GetAwaiter().GetResult() let result = match result with | RemoteClient.Unacknowledged "receipt-unavailable" -> - (RemoteClient.submit config resolve (scope a) bytes token).GetAwaiter().GetResult() + (selected.Submit (scope a) bytes token).GetAwaiter().GetResult() | other -> other + let result = + match result with + | RemoteClient.Acknowledged receipt when receipt.Scope <> parsed.Scope || receipt.BatchId <> parsed.BatchId || receipt.Digest <> parsed.Digest -> + RemoteClient.Unacknowledged "receipt-unavailable" + | other -> other + let passive = passiveBatch parsed.Batch match result with + | RemoteClient.Acknowledged receipt when passive && (receipt.Status = "rejected" || receipt.Status = "expired") -> + Error [ "passive-receiver-capability-or-admission-refused:" + (receipt.Code |> Option.defaultValue "unknown") ] + | RemoteClient.Unacknowledged code when passive && (code = "unsupported-version" || code = "invalid-request") -> + Error [ "passive-receiver-capability-refused:" + code ] | RemoteClient.Acknowledged receipt when receipt.Status = "durably-received" || receipt.Status = "applied" @@ -715,6 +759,8 @@ module WorkspaceTelemetryApplication = Error [ "terminal:" + code ] | _ -> Error [ "unacknowledged-lossy" ] + let private remoteOne a endpoint reference token file = remoteOneWith None a endpoint reference token file + let private withLock config action = let lockPath = config + ".lock" @@ -940,13 +986,70 @@ module WorkspaceTelemetryApplication = with _ -> Error [ "publication-advisory-failure" ] + /// Capture-only persistence. This path never resolves credentials, probes health or calls remoteOne. + let tryEnqueueBound configArg repositoryArg expectedProducer expectedBinding payload = + let path = configPath configArg + try + withLock path (fun () -> + load (Some path) + |> Result.bind (fun config -> select repositoryArg config) + |> Result.bind (fun association -> + if expectedProducer <> Some association.Producer || expectedBinding <> Some(associationDigest association) then + Error [ "association-stale" ] + else + envelope association payload + |> Result.bind (fun (bytes, parsed) -> + match association.Destination with + | Local _ -> Error [ "capture-only-remote-spool-required" ] + | Remote(_, _, spool) -> + ensurePrivateDirectory spool + |> Result.bind (fun directory -> + let key = TelemetryReceipt.key association.Producer parsed.BatchId + let file = Path.Combine(directory, key + ".ready") + let outcomeFile = Path.Combine(directory, "outcomes", key + ".json") + let matchesOutcome () = + let info = FileInfo outcomeFile + if info.LinkTarget <> null || info.Length > 4096L then false + else + use doc = JsonDocument.Parse(File.ReadAllBytes outcomeFile) + doc.RootElement.GetProperty("digest").GetString() = parsed.Digest && doc.RootElement.GetProperty("status").GetString() = "applied" + if File.Exists outcomeFile then + if matchesOutcome () then Ok "already-settled" else Error [ "identity-conflict" ] + elif File.Exists file then + let info = FileInfo file + if info.LinkTarget <> null || info.Length > int64 TelemetryReceipt.MaxEnvelopeBytes + || (not (OperatingSystem.IsWindows()) && File.GetUnixFileMode(file) <> (UnixFileMode.UserRead ||| UnixFileMode.UserWrite)) then + Error [ "identity-conflict" ] + elif ReadOnlySpan(File.ReadAllBytes file).SequenceEqual(ReadOnlySpan(bytes)) then + Ok "locally-retained" + else Error [ "identity-conflict" ] + else + let files = Directory.EnumerateFiles(directory, "*.ready") |> Seq.truncate 129 |> Seq.map FileInfo |> Seq.toArray + if files.Length >= 128 || (files |> Array.sumBy _.Length) + int64 bytes.Length > 8L * 1024L * 1024L then + Error [ "spool-overload" ] + else + atomicWrite directory (key + ".ready") bytes |> ignore + if not (ReadOnlySpan(File.ReadAllBytes file).SequenceEqual(ReadOnlySpan(bytes))) then + Error [ "spool-readback-failed" ] + else Ok "locally-retained")))) + with _ -> Error [ "capture-advisory-failure" ] + + /// One serialized passive owner per existing private state root; another association must refuse. + let passiveProducer configArg repositoryArg = + load configArg + |> Result.bind (select repositoryArg) + |> Result.bind (fun association -> + match association.Destination with + | Local _ -> Error [ "capture-only-remote-spool-required" ] + | Remote(_, _, spool) -> Ok(spool, scope association, associationDigest association)) + let tryPublishExpected configArg repositoryArg expectedProducer payload = tryPublishBound configArg repositoryArg expectedProducer None payload let tryPublish configArg repositoryArg payload = tryPublishExpected configArg repositoryArg None payload - let private tryDrainBound configArg repositoryArg (expectedBinding: string option) = + let private tryDrainBoundWith operations configArg repositoryArg (expectedBinding: string option) = let path = configPath configArg if not (File.Exists path) then @@ -980,7 +1083,7 @@ module WorkspaceTelemetryApplication = Directory.EnumerateFiles(directory, "*.ready") |> Seq.truncate 16 |> Seq.toList let results = - files |> List.map (remoteOne association endpoint reference deadline.Token) + files |> List.map (remoteOneWith operations association endpoint reference deadline.Token) match results @@ -1009,6 +1112,11 @@ module WorkspaceTelemetryApplication = with _ -> Error [ "drain-advisory-failure" ] + let private tryDrainBound configArg repositoryArg expectedBinding = tryDrainBoundWith None configArg repositoryArg expectedBinding + + let tryDrainWithOperationsForTesting configArg repositoryArg operations = + tryDrainBoundWith (Some operations) configArg repositoryArg None + let tryDrain configArg repositoryArg = tryDrainBound configArg repositoryArg None @@ -1228,7 +1336,10 @@ module WorkspaceTelemetryApplication = }) | Some(Remote(_, reference, spool) as selected) -> let available = - (credential reference CancellationToken.None).GetAwaiter().GetResult().IsSome + // Local association/spool setup is useful before enrollment or credentials exist. + // Explicit capture-only setup makes no authenticated receiver/readiness claim. + List.contains "--capture-only" args + || (credential reference CancellationToken.None).GetAwaiter().GetResult().IsSome if not available then Error [ "credential-unavailable" ] @@ -1286,7 +1397,7 @@ module WorkspaceTelemetryApplication = Error [ "association-conflict" ] else serialize path (existing @ [ association ]) retired - Ok "activated")) + Ok(if List.contains "--capture-only" args then "capture-configured;receiver-unverified" else "activated"))) | _ -> Error [ "invalid activation" ] with error -> Error [ error.Message ] @@ -1575,6 +1686,7 @@ module WorkspaceTelemetryApplication = let run action args = let result = match action with + | ("activate-local" | "cutover") when List.contains "--capture-only" args -> Error [ "capture-only-remote-required" ] | "status" -> status args | "binding" -> bindingStatus args | "activate-local" -> activate "local" args diff --git a/src/FS.GG.Coord.Cli/WorkspaceTelemetryApplication.fsi b/src/FS.GG.Coord.Cli/WorkspaceTelemetryApplication.fsi index cc2055c91..8b3d355b6 100644 --- a/src/FS.GG.Coord.Cli/WorkspaceTelemetryApplication.fsi +++ b/src/FS.GG.Coord.Cli/WorkspaceTelemetryApplication.fsi @@ -3,6 +3,11 @@ namespace FS.GG.Coord.Cli module WorkspaceTelemetryApplication = type Binding + /// Inert transport injection for existing spool/receipt flow tests; production uses RemoteClient. + type RemoteOperations = + { Lookup: FS.GG.Coord.TelemetryReceipt.Scope -> string -> string -> System.Threading.CancellationToken -> System.Threading.Tasks.Task + Submit: FS.GG.Coord.TelemetryReceipt.Scope -> byte array -> System.Threading.CancellationToken -> System.Threading.Tasks.Task } + type LocalDashboardBinding = { ConfigPath: string @@ -17,6 +22,9 @@ module WorkspaceTelemetryApplication = /// accepting a device/FIFO. Both descriptor and named identity must stay fixed. val readEfficiencyClaimTemplate: path: string -> Result + /// Reuse the same bounded no-follow descriptor reader for explicit passive selections. + val readPassiveSelection: path: string -> Result + val resolveBinding: configArg: string option -> repositoryArg: string option -> Result val resolveLocalDashboard: @@ -34,6 +42,15 @@ module WorkspaceTelemetryApplication = val tryPublish: configArg: string option -> repositoryArg: string option -> payload: byte array -> Result + /// Enqueue immutable remote spool bytes only; no receiver/credential operations. + val tryEnqueueBound: + configArg: string option -> repositoryArg: string option -> expectedProducer: string option -> + expectedBinding: string option -> payload: byte array -> Result + + val passiveProducer: + configArg: string option -> repositoryArg: string option -> + Result + val tryPublishExpected: configArg: string option -> repositoryArg: string option -> @@ -41,6 +58,9 @@ module WorkspaceTelemetryApplication = payload: byte array -> Result + val tryDrainWithOperationsForTesting: + configArg: string option -> repositoryArg: string option -> operations: RemoteOperations -> Result + val tryDrain: configArg: string option -> repositoryArg: string option -> Result val tryDrainExpected: diff --git a/src/FS.GG.Coord.Core/TelemetryStore.fs b/src/FS.GG.Coord.Core/TelemetryStore.fs index ec776147d..56fd3a529 100644 --- a/src/FS.GG.Coord.Core/TelemetryStore.fs +++ b/src/FS.GG.Coord.Core/TelemetryStore.fs @@ -304,6 +304,27 @@ module TelemetryStore = |> Encoding.UTF8.GetBytes |> CanonicalJson.sha256 + /// A partial local response observation; never programme or terminal accounting. + type PassiveUsageObservation = + { ThreadId: string + TurnId: string + ResponseId: string + Provider: string option + Model: string option + Effort: string option + Input: int64 option + CachedInput: int64 option + CacheWriteInput: int64 option + Output: int64 option + Reasoning: int64 option + Total: int64 option + SourceInstance: string + SourceGeneration: string + SourceDigest: string + Position: int64 + CapturedAt: string + OccurredAt: string option } + type Payload = | CiSuitePage of CiSuitePageProof | CiSuiteSeal of CiSuiteSealProof @@ -352,6 +373,7 @@ module TelemetryStore = turnSequence: int64 option * processId: int64 * phase: string + | PassiveProviderUsage of observation: PassiveUsageObservation | RuntimeProviderObservation of observation: ProviderObservation | RuntimeResponseUsage of usage: ResponseUsage | RuntimeTurnUsage of @@ -1536,6 +1558,47 @@ module TelemetryStore = }) match kind with + | "provider-usage-observation/1" -> + try + let get result = Result.defaultWith invalidOp result + let text name = requiredBoundedText label 200 node name |> get + let optional name = optionalText label node name |> get + let count name = optionalInt label node name |> get + let thread, turn, response = text "threadId", text "turnId", text "responseId" + let guid (value: string) = match Guid.TryParseExact(value, "D") with true, parsed -> parsed <> Guid.Empty && parsed.ToString("D") = value | _ -> false + let input, cached, cacheWrite = count "input", count "cachedInput", count "cacheWriteInput" + let output, reasoning, total = count "output", count "reasoning", count "total" + let subset part whole = match part, whole with Some p, Some w -> p <= w | _ -> true + let digest name = + let value = text name + if not (Regex.IsMatch(value, "^[0-9a-f]{64}$")) then invalidOp "passive source digest is invalid" + value + let profile name = + let value = optional name + if value |> Option.exists (fun v -> v.Length > 200 || (v |> Seq.exists Char.IsControl)) then invalidOp "passive profile is invalid" + value + let expected = "passive-" + CanonicalJson.sha256(Encoding.UTF8.GetBytes("codex-rollout/1\u001f" + thread + "\u001f" + turn + "\u001f" + response)) + if itemId.IsSome || identity <> expected || revision < 1L || not (guid thread && guid turn) + || (response |> Seq.exists Char.IsControl) + || not (subset cached input && subset cacheWrite input && subset reasoning output) + || (match input, output, total with Some i, Some o, Some t -> i > Int64.MaxValue - o || i + o <> t | _ -> false) + || ([input; cached; cacheWrite; output; reasoning; total] |> List.forall Option.isNone) + || text "populationCoverage" <> "partial" || text "attributionCoverage" <> "unknown" + || text "inventoryCoverage" <> "unknown" || text "terminalCoverage" <> "unknown" + || text "provenance" <> "codex-local-rollout/1" then + invalidOp "passive observation must preserve native identity and unknown attribution/population" + let observation = + { ThreadId = thread; TurnId = turn; ResponseId = response + Provider = profile "provider"; Model = profile "model"; Effort = profile "effort" + Input = input; CachedInput = cached; CacheWriteInput = cacheWrite; Output = output; Reasoning = reasoning; Total = total + SourceInstance = digest "sourceInstance"; SourceGeneration = text "sourceGeneration"; SourceDigest = digest "sourceDigest" + Position = requiredInt label node "position" |> get + CapturedAt = requiredTimestamp label node "capturedAt" |> get + OccurredAt = optionalTimestamp label node "occurredAt" |> get } + make [ "threadId"; "turnId"; "responseId"; "provider"; "model"; "effort"; "input"; "cachedInput"; "cacheWriteInput" + "output"; "reasoning"; "total"; "sourceInstance"; "sourceGeneration"; "sourceDigest"; "position"; "capturedAt"; "occurredAt" + "populationCoverage"; "attributionCoverage"; "inventoryCoverage"; "terminalCoverage"; "provenance" ] (PassiveProviderUsage observation) + with :? InvalidOperationException as error -> Error error.Message | "ci-suite-page/1" -> parseSuitePage label node |> Result.bind (CiSuitePage >> make [ "scope"; "resourceKind"; "suiteId"; "page"; "nativeCount"; "nativeTotal"; "nextPage"; diff --git a/src/FS.GG.Coord.Core/TelemetryStore.fsi b/src/FS.GG.Coord.Core/TelemetryStore.fsi index 372b3d70f..b1cf136fb 100644 --- a/src/FS.GG.Coord.Core/TelemetryStore.fsi +++ b/src/FS.GG.Coord.Core/TelemetryStore.fsi @@ -230,6 +230,27 @@ module TelemetryStore = ObservedFrom: string ObservedThrough: string } + /// A partial local response observation; never programme or terminal accounting. + type PassiveUsageObservation = + { ThreadId: string + TurnId: string + ResponseId: string + Provider: string option + Model: string option + Effort: string option + Input: int64 option + CachedInput: int64 option + CacheWriteInput: int64 option + Output: int64 option + Reasoning: int64 option + Total: int64 option + SourceInstance: string + SourceGeneration: string + SourceDigest: string + Position: int64 + CapturedAt: string + OccurredAt: string option } + type Payload = | CiSuitePage of CiSuitePageProof | CiSuiteSeal of CiSuiteSealProof @@ -278,6 +299,7 @@ module TelemetryStore = turnSequence: int64 option * processId: int64 * phase: string + | PassiveProviderUsage of observation: PassiveUsageObservation | RuntimeProviderObservation of observation: ProviderObservation | RuntimeResponseUsage of usage: ResponseUsage | RuntimeTurnUsage of diff --git a/tests/FS.GG.Coord.Cli.Tests/WorkspaceTelemetryApplicationTests.fs b/tests/FS.GG.Coord.Cli.Tests/WorkspaceTelemetryApplicationTests.fs index 51d8be529..0c9a06d66 100644 --- a/tests/FS.GG.Coord.Cli.Tests/WorkspaceTelemetryApplicationTests.fs +++ b/tests/FS.GG.Coord.Cli.Tests/WorkspaceTelemetryApplicationTests.fs @@ -459,3 +459,414 @@ module WorkspaceTelemetryApplicationTests = ) finally Environment.SetEnvironmentVariable("FSGG_TELEMETRY_CREDENTIAL_MAIN", null) + let private passiveSource root name = + let home = Path.Combine(root, "codex") + let sessions = Path.Combine(home, "sessions") + Directory.CreateDirectory sessions |> ignore + home, Path.Combine(sessions, name + ".jsonl") + + // Inert native shape, using one real observed counter tuple with pseudonymous native IDs. + let private nativeRow response input cacheWrite = + $"""{{"timestamp":"2026-10-18T06:41:48.322Z","type":"token_usage_record","payload":{{"thread_id":"7f4b2770-a3ce-54b8-be37-7992c3c9091b","turn_id":"f8097483-03a3-5055-88a4-eb7e2ee32446","response_id":"{response}","usage":{{"input_tokens":{input},"cached_input_tokens":0,"cache_write_input_tokens":{cacheWrite},"output_tokens":72,"reasoning_output_tokens":0,"total_tokens":{input + 72L}}},"turn_token_usage":{{"input_tokens":999999,"cached_input_tokens":0,"cache_write_input_tokens":0,"output_tokens":1,"reasoning_output_tokens":0,"total_tokens":1000000}}}}}}""" + "\n" + + let private parseCapture (value: SkillTelemetryAdapter.CommandResult) = + Assert.True(value.ExitCode = 0, Encoding.UTF8.GetString value.Stderr) + System.Text.Json.Nodes.JsonNode.Parse value.Stdout + + [] + let ``passive modern reader defers tails rotation and oversized lines without provider calls`` () = + if OperatingSystem.IsLinux() && Runtime.InteropServices.RuntimeInformation.ProcessArchitecture = Runtime.InteropServices.Architecture.X64 then + let cleanup, root = temp () + use cleanup = cleanup + let home, path = passiveSource root "selected" + let row = nativeRow "response-a" 22810L 0L + File.WriteAllText(path, row.TrimEnd('\n')) + let scan cursor budget = SkillTelemetryReaders.NativeUsage.scanPassive home path cursor budget 64 |> Result.defaultWith (fun error -> failwith error.Message) + let tail = scan None 4194304 + Assert.Empty tail.Records + Assert.Equal(0L, tail.Cursor.Offset) + Assert.Contains("partial-tail-deferred", tail.Diagnostics) + File.AppendAllText(path, "\n") + let complete = scan (Some tail.Cursor) 4194304 + Assert.Single complete.Records |> ignore + Assert.Equal(Some 22810L, complete.Records.Head.Usage.Input) + Assert.Equal(Some 0L, complete.Records.Head.Usage.CacheWriteInput) + Assert.Equal(None, complete.Records.Head.Model) + Assert.Equal(0L, complete.Records.Head.Position) + Assert.Empty((scan (Some complete.Cursor) 4194304).Records) + File.Move(path, path + ".old") + File.WriteAllText(path, row) + let rotated = scan (Some complete.Cursor) 4194304 + Assert.Contains("source-continuity-gap", rotated.Diagnostics) + Assert.NotEqual(complete.Cursor.SourceInstance, rotated.Cursor.SourceInstance) + Assert.NotEqual(complete.Cursor.Generation, rotated.Cursor.Generation) + File.WriteAllText(path, String('x', 2 * 1024 * 1024) + "\n" + row) + let oversized = scan (Some rotated.Cursor) 1200000 + Assert.True(oversized.Cursor.SkippingOversized) + Assert.True(oversized.ScannedBytes <= 1200000) + Assert.Contains("oversized-line-skipped", oversized.Diagnostics) + let resumed = scan (Some oversized.Cursor) 4194304 + Assert.Single resumed.Records |> ignore + Assert.False(resumed.Cursor.SkippingOversized) + File.WriteAllText(path, row + row) + let boundary = scan (Some resumed.Cursor) 4194304 + Assert.Single boundary.Records |> ignore + Assert.Equal(int64(Encoding.UTF8.GetByteCount row), boundary.Cursor.Offset) + Assert.Contains("response-boundary-deferred", boundary.Diagnostics) + + [] + let ``passive capture persists intent before enqueue and replays exact identity after uncertain enqueue`` () = + if OperatingSystem.IsLinux() && Runtime.InteropServices.RuntimeInformation.ProcessArchitecture = Runtime.InteropServices.Architecture.X64 then + let cleanup, root = temp () + use cleanup = cleanup + let home, path = passiveSource root "selected" + File.WriteAllText(path, nativeRow "response-a" 22810L 0L) + let calls = ResizeArray() + let statePath = Path.Combine(root, "orchestrator-passive", "producer.json") + let mutable reject = true + let enqueue bytes = + let state = System.Text.Json.Nodes.JsonNode.Parse(File.ReadAllBytes statePath) + Assert.Equal(Convert.ToBase64String bytes, state["pending"]["batchBase64"].GetValue()) + Assert.Empty(state["sources"].AsObject()) + calls.Add(Array.copy bytes) + if reject then Error [ "spool-overload" ] else Ok "locally-retained" + let capture enqueue = SkillTelemetryAdapter.capturePassive root "owner" "passive-stream" home [path] enqueue |> parseCapture + let first = capture enqueue + Assert.Empty(first["observations"].AsArray()) + Assert.True(first["pendingIntent"].GetValue()) + let report = SkillTelemetryAdapter.reportPassive root "owner" "passive-stream" |> parseCapture + Assert.True(report["pendingIntent"].GetValue()) + reject <- false + let second = capture enqueue + Assert.Equal(calls[0], calls[1]) + let row = Assert.Single(second["observations"].AsArray()) + Assert.Equal(1L, row["revision"].GetValue()) + Assert.Null(row["itemId"]) + Assert.Null(row["model"]) + Assert.False(row.AsObject().ContainsKey "cost") + Assert.Equal(22882L, row["total"].GetValue()) + Assert.Equal("unknown", second["attribution"].GetValue()) + Assert.Equal("unknown", second["delivery"].GetValue()) + Assert.Equal(2, calls.Count) + let noNew = capture (fun _ -> failwith "duplicate observation was enqueued") + Assert.Single(noNew["observations"].AsArray()) |> ignore + File.AppendAllText(path, nativeRow "response-a" 23000L 50L) + let mutable correction = Array.empty + let corrected = capture (fun bytes -> correction <- bytes; Ok "locally-retained") + let current = Assert.Single(corrected["observations"].AsArray()) + Assert.Equal(2L, current["revision"].GetValue()) + Assert.Equal(23072L, current["total"].GetValue()) + Assert.Equal(50L, current["cacheWriteInput"].GetValue()) + let parsed = TelemetryStore.parseBatch correction |> Result.defaultWith (sprintf "%A" >> failwith) + Assert.Single parsed.Facts |> ignore + Assert.Equal(row["identity"].GetValue(), parsed.Facts.Head.Identity) + let before = File.ReadAllBytes statePath + let refused = SkillTelemetryAdapter.capturePassive root "different-owner" "passive-stream" home [path] (fun _ -> failwith "owner conflict invoked enqueue") + Assert.Equal(1, refused.ExitCode) + Assert.Equal(before, File.ReadAllBytes statePath) + + [] + let ``passive uncertain post-enqueue crash retains same intent and never replays workload`` () = + if OperatingSystem.IsLinux() && Runtime.InteropServices.RuntimeInformation.ProcessArchitecture = Runtime.InteropServices.Architecture.X64 then + let cleanup, root = temp () + use cleanup = cleanup + let home, path = passiveSource root "crash" + File.WriteAllText(path, nativeRow "response-a" 10L 0L) + let mutable retained = Array.empty + let interrupted = SkillTelemetryAdapter.capturePassive root "owner" "passive-stream" home [path] (fun bytes -> retained <- bytes; raise (IOException "crash after enqueue")) + Assert.Equal(1, interrupted.ExitCode) + File.Delete path // Recovery must reconcile intent before reopening a source that no longer exists. + let mutable replay = Array.empty + let recovered = SkillTelemetryAdapter.capturePassive root "owner" "passive-stream" home [path] (fun bytes -> replay <- bytes; Ok "locally-retained") |> parseCapture + Assert.Equal(retained, replay) + Assert.Single(recovered["observations"].AsArray()) |> ignore + Assert.Contains("source-unavailable-cursor-retained", recovered["gaps"].ToJsonString()) + + [] + let ``passive finite response index refuses additional identities without advancing their source`` () = + if OperatingSystem.IsLinux() && Runtime.InteropServices.RuntimeInformation.ProcessArchitecture = Runtime.InteropServices.Architecture.X64 then + let cleanup, root = temp () + use cleanup = cleanup + let home, path = passiveSource root "full-index" + File.WriteAllText(path, [0..255] |> List.map (fun index -> nativeRow ("response-" + string index) 10L 0L) |> String.concat "") + for _ in 1..11 do + SkillTelemetryAdapter.capturePassive root "owner" "passive-stream" home [path] (fun _ -> Ok "locally-retained") |> parseCapture |> ignore + let statePath = Path.Combine(root, "orchestrator-passive", "producer.json") + let before = System.Text.Json.Nodes.JsonNode.Parse(File.ReadAllBytes statePath) + Assert.Equal(256, before["responses"].AsObject().Count) + let cursor = before["sources"].ToJsonString() + File.AppendAllText(path, nativeRow "overflow" 10L 0L) + let after = SkillTelemetryAdapter.capturePassive root "owner" "passive-stream" home [path] (fun _ -> failwith "index overload enqueued") |> parseCapture + Assert.Equal(256, after["observations"].AsArray().Count) + Assert.Contains("response-index-full-capture-deferred", after["gaps"].ToJsonString()) + let state = System.Text.Json.Nodes.JsonNode.Parse(File.ReadAllBytes statePath) + Assert.Equal(cursor, state["sources"].ToJsonString()) + + let private passiveRemoteConfig root = + let config = Path.Combine(root, "passive-config.json") + let spool = Path.Combine(root, "spool") + let node = + System.Text.Json.Nodes.JsonNode.Parse + $"""{{"schema":"fsgg.telemetry.workspace-config/1","engine":"absent-fixture-engine","associations":[{{"workspaceId":"workspace-a","producerId":"passive-a","streamId":"native-observations","repositories":["FS-GG/.github"],"destination":{{"kind":"remote","endpoint":"https://127.0.0.1:1/","credentialReference":"absent-passive-fixture","spoolRoot":"unused"}}}}],"retiredAssociations":[]}}""" + node["associations"][0]["destination"]["spoolRoot"] <- System.Text.Json.Nodes.JsonValue.Create spool + File.WriteAllText(config, node.ToJsonString()) + if not (OperatingSystem.IsWindows()) then File.SetUnixFileMode(config, enum 0o600) + config, spool + + [] + let ``passive enqueue uses immutable existing spool offline and overload preserves intent`` () = + if OperatingSystem.IsLinux() && Runtime.InteropServices.RuntimeInformation.ProcessArchitecture = Runtime.InteropServices.Architecture.X64 then + let cleanup, root = temp () + use cleanup = cleanup + let config, spool = passiveRemoteConfig root + let stateRoot, scope, binding = WorkspaceTelemetryApplication.passiveProducer (Some config) (Some "FS-GG/.github") |> Result.defaultWith (sprintf "%A" >> failwith) + let home, path = passiveSource root "spool" + File.WriteAllText(path, nativeRow "response-a" 22810L 0L) + let enqueue = WorkspaceTelemetryApplication.tryEnqueueBound (Some config) (Some "FS-GG/.github") (Some scope.Producer) (Some binding) + let captured = SkillTelemetryAdapter.capturePassive stateRoot "owner" scope.Stream home [path] enqueue |> parseCapture + Assert.Single(captured["observations"].AsArray()) |> ignore + let file = Assert.Single(Directory.GetFiles(spool, "*.ready")) + let original = File.ReadAllBytes file + Assert.Equal("locally-retained", enqueue (Encoding.UTF8.GetBytes((System.Text.Json.Nodes.JsonNode.Parse original)["payload"].ToJsonString())) |> Result.defaultWith (sprintf "%A" >> failwith)) + Assert.Equal(original, File.ReadAllBytes file) + // Existing spool bound, including uncertain ready entries, refuses rather than overwrites. + for index in 1..127 do + File.WriteAllBytes(Path.Combine(spool, "retained-" + string index + ".ready"), [|0uy|]) + File.AppendAllText(path, nativeRow "response-b" 20L 0L) + let deferred = SkillTelemetryAdapter.capturePassive stateRoot "owner" scope.Stream home [path] enqueue |> parseCapture + Assert.Single(deferred["observations"].AsArray()) |> ignore + Assert.True(deferred["pendingIntent"].GetValue()) + Assert.Contains("spool-overload", deferred["firstEnqueueFailure"].ToJsonString()) + Assert.Equal(128, Directory.GetFiles(spool, "*.ready").Length) + Assert.Equal(original, File.ReadAllBytes file) + let before = File.ReadAllBytes(Path.Combine(spool, "orchestrator-passive", "producer.json")) + let again = SkillTelemetryAdapter.capturePassive stateRoot "owner" scope.Stream home [path] enqueue |> parseCapture + Assert.True(again["pendingIntent"].GetValue()) + Assert.Equal(before, File.ReadAllBytes(Path.Combine(spool, "orchestrator-passive", "producer.json"))) + + [] + let ``capture-only remote setup needs no credential and never asserts receiver readiness`` () = + if OperatingSystem.IsLinux() && Runtime.InteropServices.RuntimeInformation.ProcessArchitecture = Runtime.InteropServices.Architecture.X64 then + let cleanup, root = temp () + use cleanup = cleanup + let config = Path.Combine(root, "setup.json") + let spool = Path.Combine(root, "spool") + let args = [ "--config"; config; "--workspace"; "passive-workspace"; "--producer"; "passive-setup" + "--stream"; "native-observations"; "--repository"; "FS-GG/.github" + "--endpoint"; "https://127.0.0.1:1/"; "--credential-reference"; "absent-passive-fixture"; "--spool-root"; spool ] + let refused, _, defaultError = invoke "activate-remote" args + Assert.Equal(1, refused) + Assert.Contains("credential-unavailable", defaultError) + Assert.False(File.Exists config) + let code, configured, error = invoke "activate-remote" ("--capture-only" :: args) + Assert.True(code = 0, error) + Assert.Equal("capture-configured;receiver-unverified", configured) + let statusCode, status, _ = invoke "status" [ "--config"; config; "--repository"; "FS-GG/.github" ] + Assert.Equal(0, statusCode) + Assert.Contains("\"status\":\"configured\"", status) + Assert.DoesNotContain("authenticated", status) + Assert.DoesNotContain("healthy", status) + let before = File.ReadAllBytes config + let localCode, _, _ = invoke "activate-local" ("--capture-only" :: args) + Assert.Equal(1, localCode) + let cutoverCode, _, _ = invoke "cutover" ("--capture-only" :: args) + Assert.Equal(1, cutoverCode) + Assert.Equal(before, File.ReadAllBytes config) + + [] + let ``passive delivery serializes numeric corrections behind durable and uncertain predecessors`` () = + if OperatingSystem.IsLinux() && Runtime.InteropServices.RuntimeInformation.ProcessArchitecture = Runtime.InteropServices.Architecture.X64 then + let cleanup, root = temp () + use cleanup = cleanup + let config, spool = passiveRemoteConfig root + let stateRoot, scope, binding = WorkspaceTelemetryApplication.passiveProducer (Some config) (Some "FS-GG/.github") |> Result.defaultWith (sprintf "%A" >> failwith) + let home, path = passiveSource root "ordered" + File.WriteAllText(path, "") + let enqueue = WorkspaceTelemetryApplication.tryEnqueueBound (Some config) (Some "FS-GG/.github") (Some scope.Producer) (Some binding) + for index in 1..10 do + File.AppendAllText(path, nativeRow "response-a" (int64 index) 0L) + SkillTelemetryAdapter.capturePassive stateRoot "owner" scope.Stream home [path] enqueue |> parseCapture |> ignore + let envelopes = + Directory.GetFiles(spool, "*.ready") |> Array.map (fun file -> + let value = TelemetryReceipt.parse(File.ReadAllBytes file) |> Result.defaultWith (sprintf "%A" >> failwith) + value.BatchId, value) |> Map.ofArray + let submitted = ResizeArray() + let received = System.Collections.Generic.HashSet() + let mutable phase = "durable" + let receipt batchId status code : FS.GG.Telemetry.RemoteContract.Receipt = + { Scope = scope; BatchId = batchId; Digest = envelopes[batchId].Digest; Status = status; Code = code } + let operations: WorkspaceTelemetryApplication.RemoteOperations = + { Lookup = fun _ batchId _ _ -> + let outcome = + if phase = "uncertain" then FS.GG.Telemetry.RemoteClient.Unacknowledged "network-unavailable" + elif received.Contains batchId then FS.GG.Telemetry.RemoteClient.Acknowledged(receipt batchId (if phase = "durable" then "durably-received" else "applied") None) + else FS.GG.Telemetry.RemoteClient.Unacknowledged "receipt-unavailable" + System.Threading.Tasks.Task.FromResult outcome + Submit = fun _ bytes _ -> + let envelope = TelemetryReceipt.parse bytes |> Result.defaultWith (sprintf "%A" >> failwith) + submitted.Add(Int32.Parse envelope.Batch.Cursor) + received.Add envelope.BatchId |> ignore + System.Threading.Tasks.Task.FromResult(FS.GG.Telemetry.RemoteClient.Acknowledged(receipt envelope.BatchId (if phase = "durable" then "durably-received" else "applied") None)) } + let drain () = WorkspaceTelemetryApplication.tryDrainWithOperationsForTesting (Some config) (Some "FS-GG/.github") operations + drain () |> ignore + Assert.Equal([1], submitted) + Assert.Equal(10, Directory.GetFiles(spool, "*.ready").Length) + phase <- "uncertain" + drain () |> ignore + Assert.Equal([1], submitted) + Assert.Equal(10, Directory.GetFiles(spool, "*.ready").Length) + phase <- "applied" + for _ in 1..11 do drain () |> ignore + Assert.Empty(Directory.GetFiles(spool, "*.ready")) + Assert.Equal([1..10], submitted) + + [] + let ``unsupported and rejected passive receiver retains exact pending bytes without downgrade`` () = + if OperatingSystem.IsLinux() && Runtime.InteropServices.RuntimeInformation.ProcessArchitecture = Runtime.InteropServices.Architecture.X64 then + let cleanup, root = temp () + use cleanup = cleanup + let config, spool = passiveRemoteConfig root + let stateRoot, scope, binding = WorkspaceTelemetryApplication.passiveProducer (Some config) (Some "FS-GG/.github") |> Result.defaultWith (sprintf "%A" >> failwith) + let home, path = passiveSource root "unsupported" + File.WriteAllText(path, nativeRow "response-a" 10L 0L) + let enqueue = WorkspaceTelemetryApplication.tryEnqueueBound (Some config) (Some "FS-GG/.github") (Some scope.Producer) (Some binding) + SkillTelemetryAdapter.capturePassive stateRoot "owner" scope.Stream home [path] enqueue |> parseCapture |> ignore + let file = Assert.Single(Directory.GetFiles(spool, "*.ready")) + let before = File.ReadAllBytes file + let envelope = TelemetryReceipt.parse before |> Result.defaultWith (sprintf "%A" >> failwith) + let mutable reject = false + let operations: WorkspaceTelemetryApplication.RemoteOperations = + { Lookup = fun _ _ _ _ -> + System.Threading.Tasks.Task.FromResult(FS.GG.Telemetry.RemoteClient.Unacknowledged(if reject then "receipt-unavailable" else "unsupported-version")) + Submit = fun _ bytes _ -> + Assert.Equal(before, bytes) + System.Threading.Tasks.Task.FromResult(FS.GG.Telemetry.RemoteClient.Acknowledged + { Scope = scope; BatchId = envelope.BatchId; Digest = envelope.Digest; Status = "rejected"; Code = Some "invalid-request" }) } + let first = WorkspaceTelemetryApplication.tryDrainWithOperationsForTesting (Some config) (Some "FS-GG/.github") operations + Assert.Equal(Error [ "passive-receiver-capability-refused:unsupported-version" ], first) + Assert.Equal(before, File.ReadAllBytes file) + reject <- true + let second = WorkspaceTelemetryApplication.tryDrainWithOperationsForTesting (Some config) (Some "FS-GG/.github") operations + Assert.Equal(Error [ "passive-receiver-capability-or-admission-refused:invalid-request" ], second) + Assert.Equal(before, File.ReadAllBytes file) + Assert.False(Directory.Exists(Path.Combine(spool, "outcomes"))) + + [] + let ``passive root lock refuses competing capture during retained intent enqueue`` () = + if OperatingSystem.IsLinux() && Runtime.InteropServices.RuntimeInformation.ProcessArchitecture = Runtime.InteropServices.Architecture.X64 then + let cleanup, root = temp () + use cleanup = cleanup + let home, path = passiveSource root "concurrent" + File.WriteAllText(path, nativeRow "response-a" 10L 0L) + let enqueue _ = + let competitor = SkillTelemetryAdapter.capturePassive root "owner" "passive-stream" home [path] (fun _ -> failwith "competing capture passed stream lock") + Assert.Equal(1, competitor.ExitCode) + Ok "locally-retained" + let captured = SkillTelemetryAdapter.capturePassive root "owner" "passive-stream" home [path] enqueue |> parseCapture + Assert.Single(captured["observations"].AsArray()) |> ignore + + [] + let ``generic passive receipt stores canonical corrections without qualified item totals`` () = + if OperatingSystem.IsLinux() && Runtime.InteropServices.RuntimeInformation.ProcessArchitecture = Runtime.InteropServices.Architecture.X64 then + let cleanup, root = temp () + use cleanup = cleanup + let unwrap value = value |> Result.defaultWith (sprintf "%A" >> failwith) + let home, path = passiveSource root "receiver" + let store = Path.Combine(root, "store") + let approved = TelemetryStore.ApprovedLocalDurable + TelemetryStoreApplication.initialize store approved |> unwrap |> ignore + let scope: TelemetryReceipt.Scope = { Workspace = "passive-workspace"; Producer = "passive-owner"; Stream = "observations" } + TelemetryStoreApplication.enrollReceiptProducer store approved scope |> unwrap |> ignore + let batches = ResizeArray() + let capture () = + SkillTelemetryAdapter.capturePassive root "owner" scope.Stream home [path] (fun bytes -> batches.Add(Array.copy bytes); Ok "locally-retained") |> parseCapture + File.WriteAllText(path, nativeRow "response-a" 10L 0L) + capture () |> ignore + let envelope (who: TelemetryReceipt.Scope) batchId bytes = + let value = System.Text.Json.Nodes.JsonObject() + value["schema"] <- System.Text.Json.Nodes.JsonValue.Create TelemetryReceipt.Schema + value["workspaceId"] <- System.Text.Json.Nodes.JsonValue.Create who.Workspace + value["producerId"] <- System.Text.Json.Nodes.JsonValue.Create who.Producer + value["streamId"] <- System.Text.Json.Nodes.JsonValue.Create who.Stream + value["batchId"] <- System.Text.Json.Nodes.JsonValue.Create batchId + value["payload"] <- System.Text.Json.Nodes.JsonNode.Parse(bytes: byte array) + Encoding.UTF8.GetBytes(value.ToJsonString()) + let first = envelope scope "passive-first" batches[0] + TelemetryStoreApplication.submitReceipt store approved scope first |> unwrap |> ignore + TelemetryStoreApplication.drainReceipts store approved scope.Workspace |> unwrap |> ignore + let replay = TelemetryStoreApplication.submitReceipt store approved scope first |> unwrap + Assert.Contains("\"status\":\"applied\"", replay) + File.AppendAllText(path, nativeRow "response-a" 20L 5L) + capture () |> ignore + TelemetryStoreApplication.submitReceipt store approved scope (envelope scope "passive-correction" batches[1]) |> unwrap |> ignore + TelemetryStoreApplication.drainReceipts store approved scope.Workspace |> unwrap |> ignore + let snapshot = System.Text.Json.Nodes.JsonNode.Parse(TelemetryStoreApplication.passiveObservations store approved scope |> unwrap) + let current = Assert.Single(snapshot["observations"].AsArray()) + Assert.Equal(2L, current["revision"].GetValue()) + Assert.Equal(92L, current["total"].GetValue()) + Assert.Equal(5L, current["cacheWriteInput"].GetValue()) + Assert.Null(current["itemId"]) + Assert.Null(current["model"]) + Assert.False(current.AsObject().ContainsKey "cost") + Assert.Equal("partial", snapshot["populationCoverage"].GetValue()) + use connection = new Microsoft.Data.Sqlite.SqliteConnection($"Data Source={Path.Combine(store, TelemetryStoreApplication.databaseFileName)};Pooling=False") + connection.Open() + let scalar query = + use command = connection.CreateCommand() + command.CommandText <- query + command.ExecuteScalar() + Assert.Equal(1L, Convert.ToInt64(scalar "SELECT count(*) FROM corrections WHERE kind='provider-usage-observation/1';")) + Assert.Equal(1L, Convert.ToInt64(scalar "SELECT count(*) FROM ingest_facts WHERE kind='provider-usage-observation/1' AND item_id IS NULL;")) + Assert.Equal(0L, Convert.ToInt64(scalar "SELECT count(*) FROM usage_observations;")) + Assert.Equal(0L, Convert.ToInt64(scalar "SELECT count(*) FROM runtime_turn_usage;")) + Assert.Equal(0L, Convert.ToInt64(scalar "SELECT count(*) FROM budget_dirty_items;")) + Assert.Equal("generic", string(scalar "SELECT authority_role FROM fact_admissions;")) + let peer = { scope with Producer = "different-owner"; Stream = "different-stream" } + TelemetryStoreApplication.enrollReceiptProducer store approved peer |> unwrap |> ignore + let changed = System.Text.Json.Nodes.JsonNode.Parse batches[1] + changed["ingestId"] <- System.Text.Json.Nodes.JsonValue.Create "peer-correction" + changed["events"][0]["revision"] <- System.Text.Json.Nodes.JsonValue.Create 3L + let peerEnvelope = envelope peer "peer-correction" (Encoding.UTF8.GetBytes(changed.ToJsonString())) + TelemetryStoreApplication.submitReceipt store approved peer peerEnvelope |> unwrap |> ignore + TelemetryStoreApplication.drainReceipts store approved scope.Workspace |> unwrap |> ignore + Assert.Contains("\"status\":\"rejected\"", TelemetryStoreApplication.lookupReceipt store approved peer "peer-correction" |> unwrap) + let collector: TelemetryReceipt.Principal = + { Scope = { scope with Producer = "native-collector"; Stream = "inventory" } + Role = TelemetryReceipt.NativeCollector; GrantId = Some "native-grant"; GrantGeneration = Some 1L } + TelemetryStoreApplication.enrollReceiptPrincipal store approved collector |> unwrap |> ignore + TelemetryStoreApplication.submitReceiptPrincipal store approved collector (envelope collector.Scope "collector-passive" batches[0]) |> unwrap |> ignore + TelemetryStoreApplication.drainReceipts store approved scope.Workspace |> unwrap |> ignore + Assert.Contains("\"status\":\"rejected\"", TelemetryStoreApplication.lookupReceipt store approved collector.Scope "collector-passive" |> unwrap) + let final = System.Text.Json.Nodes.JsonNode.Parse(TelemetryStoreApplication.passiveObservations store approved scope |> unwrap) + Assert.Equal(snapshot["observations"].ToJsonString(), final["observations"].ToJsonString()) + Assert.True(TelemetryStoreApplication.ingest store approved batches[1] |> Result.isError) + + [] + let ``passive source keeps absent dimensions unknown and accounts for nonusage scan budgets`` () = + if OperatingSystem.IsLinux() && Runtime.InteropServices.RuntimeInformation.ProcessArchitecture = Runtime.InteropServices.Architecture.X64 then + let cleanup, root = temp () + use cleanup = cleanup + let home, path = passiveSource root "partial-counters" + let row = System.Text.Json.Nodes.JsonNode.Parse(nativeRow "partial-response" 10L 0L) + row["timestamp"] <- null + let usage = row["payload"]["usage"].AsObject() + for name in [ "input_tokens"; "cached_input_tokens"; "cache_write_input_tokens"; "reasoning_output_tokens"; "total_tokens" ] do + usage.Remove name |> ignore + File.WriteAllText(path, String.replicate 100000 "{\"type\":\"event_msg\"}\n" + row.ToJsonString() + "\n") + let scan cursor = SkillTelemetryReaders.NativeUsage.scanPassive home path cursor 200000 64 |> Result.defaultWith (fun error -> failwith error.Message) + let first = scan None + Assert.Empty first.Records + Assert.Contains("scan-pass-budget", first.Diagnostics) + Assert.True(first.ScannedBytes <= 200000) + let mutable current = first + for _ in 1..20 do + if current.Records.IsEmpty then current <- scan (Some current.Cursor) + let record = Assert.Single current.Records + Assert.Equal(None, record.Usage.Input) + Assert.Equal(None, record.Usage.CachedInput) + Assert.Equal(None, record.Usage.CacheWriteInput) + Assert.Equal(None, record.Usage.Reasoning) + Assert.Equal(None, record.Usage.Total) + Assert.Equal(Some 72L, record.Usage.Output) + Assert.Equal(None, record.OccurredAt) + Assert.Equal(None, record.Provider) diff --git a/tests/FS.GG.Coord.Core.Tests/TelemetryStoreTests.fs b/tests/FS.GG.Coord.Core.Tests/TelemetryStoreTests.fs index e483b09d1..6a09e9ef2 100644 --- a/tests/FS.GG.Coord.Core.Tests/TelemetryStoreTests.fs +++ b/tests/FS.GG.Coord.Core.Tests/TelemetryStoreTests.fs @@ -452,3 +452,47 @@ module TelemetryStoreTests = Assert.True(TelemetryStore.validateCiSuiteGraph "UTEL-06.3" mutated changed |> Result.isError) Assert.True(TelemetryStore.validateCiSuiteGraph "UTEL-06.3" { seal with SuiteCount = 2L } facts |> Result.isError) Assert.True(TelemetryStore.validateCiSuiteGraph "UTEL-06.3" { seal with FirstSweepDigest = String('e', 64) } facts |> Result.isError) + let private passiveEvent () = + let thread = "11111111-1111-1111-1111-111111111111" + let turn = "22222222-2222-2222-2222-222222222222" + let identity = "passive-" + CanonicalJson.sha256(bytes ("codex-rollout/1\u001f" + thread + "\u001f" + turn + "\u001fresponse-a")) + System.Text.Json.Nodes.JsonNode.Parse( + $"""{{"kind":"provider-usage-observation/1","identity":"{identity}","itemId":null,"revision":1,"threadId":"{thread}","turnId":"{turn}","responseId":"response-a","provider":null,"model":null,"effort":null,"input":10,"cachedInput":9,"cacheWriteInput":8,"output":5,"reasoning":2,"total":15,"sourceInstance":"{String('a',64)}","sourceGeneration":"source-1","sourceDigest":"{String('b',64)}","position":0,"capturedAt":"2026-10-18T07:00:00Z","occurredAt":null,"provenance":"codex-local-rollout/1","populationCoverage":"partial","attributionCoverage":"unknown","inventoryCoverage":"unknown","terminalCoverage":"unknown"}}""") + + [] + let ``passive response is partial unassigned and preserves independent cache counters`` () = + let event = passiveEvent () + let parsed = TelemetryStore.parseBatch(causalBatch (event.ToJsonString())) |> Result.defaultWith (sprintf "%A" >> failwith) + let fact = List.exactlyOne parsed.Facts + Assert.Equal(None, fact.ItemId) + match fact.Payload with + | TelemetryStore.PassiveProviderUsage value -> + Assert.Equal(Some 10L, value.Input) + Assert.Equal(Some 9L, value.CachedInput) + Assert.Equal(Some 8L, value.CacheWriteInput) + Assert.Equal(None, value.Model) + Assert.Equal(None, value.OccurredAt) + | _ -> Assert.Fail("passive counters impersonated another accounting kind") + event["input"] <- null + event["cachedInput"] <- null + event["cacheWriteInput"] <- null + Assert.True(TelemetryStore.parseBatch(causalBatch (event.ToJsonString())) |> Result.isOk) + + [] + let ``passive parser refuses manufactured attribution completeness and invalid dimensions`` () = + let reject name (value: System.Text.Json.Nodes.JsonNode) = + let event = passiveEvent () + event[name] <- value + Assert.True(TelemetryStore.parseBatch(causalBatch (event.ToJsonString())) |> Result.isError, name) + for name in [ "populationCoverage"; "attributionCoverage"; "inventoryCoverage"; "terminalCoverage" ] do + reject name (System.Text.Json.Nodes.JsonValue.Create "complete") + reject "itemId" (System.Text.Json.Nodes.JsonValue.Create "UTEL-06") + reject "provenance" (System.Text.Json.Nodes.JsonValue.Create "openai-responses/1") + reject "identity" (System.Text.Json.Nodes.JsonValue.Create "invented") + reject "revision" (System.Text.Json.Nodes.JsonValue.Create 0) + reject "cachedInput" (System.Text.Json.Nodes.JsonValue.Create 11) + reject "cacheWriteInput" (System.Text.Json.Nodes.JsonValue.Create 11) + reject "reasoning" (System.Text.Json.Nodes.JsonValue.Create 6) + reject "total" (System.Text.Json.Nodes.JsonValue.Create 16) + reject "input" (System.Text.Json.Nodes.JsonValue.Create -1) + reject "cost" (System.Text.Json.Nodes.JsonValue.Create 1) From eed171eac4c96b85d97c8bdd883f6e644c637614 Mon Sep 17 00:00:00 2001 From: EHotwagner Date: Sun, 18 Oct 2026 10:39:50 +0200 Subject: [PATCH 02/19] docs: record partial native telemetry source boundary and operating limits --- .agents/skills/atlas/assets/seed/catalog.json | 2 +- ...61794f27ea8d11e96bcb1ff25a97994a77d5c.json | 1 + .claude/skills/atlas/assets/seed/catalog.json | 2 +- ...61794f27ea8d11e96bcb1ff25a97994a77d5c.json | 1 + docs/atlas/catalog.json | 2 +- ...61794f27ea8d11e96bcb1ff25a97994a77d5c.json | 1 + .../roadmaps/utel-operational-completeness.md | 33 +++++++++++++++++++ registry/driver-skill-manifest.json | 9 +++-- 8 files changed, 46 insertions(+), 5 deletions(-) create mode 100644 .agents/skills/atlas/assets/seed/records/7aa52373f2721dd76fc8eeb3d6061794f27ea8d11e96bcb1ff25a97994a77d5c.json create mode 100644 .claude/skills/atlas/assets/seed/records/7aa52373f2721dd76fc8eeb3d6061794f27ea8d11e96bcb1ff25a97994a77d5c.json create mode 100644 docs/atlas/records/7aa52373f2721dd76fc8eeb3d6061794f27ea8d11e96bcb1ff25a97994a77d5c.json diff --git a/.agents/skills/atlas/assets/seed/catalog.json b/.agents/skills/atlas/assets/seed/catalog.json index edf79eef6..56a0d5fba 100644 --- a/.agents/skills/atlas/assets/seed/catalog.json +++ b/.agents/skills/atlas/assets/seed/catalog.json @@ -1 +1 @@ -{"records":["000ada42299601fba29016e5c0e0d4012876fb42670bb10fa0b1315477254ba4","00641d046d6869fdd0023ab3df99e0e67a6ea28f0dcb701f622b1cec8b3e07c6","026b08fb343aefe19177e95b759560d340d372def4b71acf613fefee3438ade2","0357495d23fac4fad210b6dd7ed7cc57dd33d107e1659a81f085cad78300797f","036c148f6d0e89858c9bf4cf380272ca6904bb4ca277a909fb71c47f5450cef7","04e404d89dca295564813149472b1de8e6c43357e2f6d91d169ded7600ed3a02","0509e5c6fdbd2dde0c0db8558647080560714804d00e4f9268342f2e84858a3d","06ad2c8aa0ff3b862edf3ba99e0e4e8801ee163709e66333cd06c3fc61232b05","0a6d7dc5b64970bfdadc9049ace95e8bc163fc421beea70129ff0eaa692c6d06","0ad4403c8f4078dbfa543310c69bd1dfc768e305987214ffc37d7b2600c4687c","0c22360d4653eb0f450e4d3d34564875f1660cfcb2d546095d98b3faa3967cbc","0da4d093b49c0a1f654b38008bb01195e816829279ca1989bd2448194e15361b","0e560af7d9dd2e0f2f588a74cd35512973747f20bdfe0bee0bc889105ea53dc9","0ea7107c2c8edaab3ff2bae32f63cfbef6903a51cdaff257278f757ed5ef429d","0eef4d717eb03f0906aa3be7336aa71f831726afabe8a56077b76f6e82fd08e1","11fe30832d93706c60efd836b09f35f049c4a715ad6144cf277ca240c5780704","1244d27db0cf5075353bcc622d0fb3b5ca6a7d08526e2c5754e8b745c250bf3f","155fe673b8ae12549c978e1bf1d5c43e360937fcf2135cdcd5aea6f6c771da44","1945f527afc3c2930ec4d7fa57ebb2ef7dd6321c0dd3ab9233c9963e9e613165","19d657b67672257ece127f3b957674b7fb4780843148db0a36a0b329c2a418ba","1a24f6ef0c08a898f309c1b925fc19b29526f913a61a1dfe4b1a4308ebdd97ac","1b5351b2dc647aba864e387168db5128435cb80da94fc42581cd60a05fc34b9a","1da011289116fe88fe92cb8f0e83ed7ccbbca251681d4e136c5a61c40364f8d3","1ec9445b242d2a2e149fe71c67bf13d8c0e4ebe5a6ed7b022656b9941973909d","1edc36731a9c76ad07d269d8b4fd84c8c956bb43d6f56de17d6208164856ffbe","20901b579f69cc97eb56b492938864667576e1c9bfacf13f8a529c4f6e543448","21338155cb4f52c49e5072c877771be67c75590d9b238ea025fba5209fd6e018","23af79bd1e7995fc8162ddc4d830318acb054bbfcc9c7d5cb141ec306da67386","24d4f2730d94d1b7f149771ef0e59192f4936d142b21f4a56b1a391e4514d38d","2591526ddabbea03fbdc38bf172bc54f42df9bc51eba7ad2b70d6e67215f08f1","26259abc7fe745f52e06f2aa2abb0e50f189bc7608065f04d5c669a0a99941cd","26290a0990d6dac0ce9448e05eb934210603356043dcf14a5d80585288e2aa92","26d6b31965013079d4db67a2c403e01f21e3c30ae65953400dbed92e289a0925","288daf614247c260cb673d8674e8b3874ccc4e269347836851f702d7ac8e2f7c","28abfaf6d50ca38af0b88aa50524200c17af9000da83ddbab3d8f9e06e020fa5","291d3db272eae084d34c04bc1305f2abb26a7e7acbc5515208469b46719a4ed1","2a38ddebfe3380232e35d5a24f9cb9f7c38abbc9c68add4ea5952c1e65d328d2","2c76ce93500601e281a41f5985fe4e3926fc8bc9d01ee687f14052cb553ad2d2","2d599c722a08306b98f2d833fb3e4a7acb9dea92e6a58820caa2f65c09803fb8","2ecd502add2d801eebed39411fadc9a80098ba9ce04a5f4b728a0e4e331232d6","2f7357367d921995f4c6fdaa693392adcd2df4860ef4d25c8dc47f7ddea8c755","2fb2ed7902a8e35dc36489a23245d963026d688008c92fed6fdc1f6bc27198a6","310bfb5b2d061bb733771e5cb7b3b7d25db43af5eda9f806169b7ef9330c2fe7","32f69a7b8997ae98b9305ee578145d795dbcd39ca4469bf2465e57a0295cda51","335683e33b94cb86b5e426b4faed200673bf850151191a08458136ceb164fd4e","3407ec53a884d3945d86a88d6b9a883419dd426e96b1108a8e6686f30397a629","34463778cf2d29e3896a65613cf9e3eb3e9f2d8946d17f12b609e70eec63d128","35da3938b72cf3520e126ad595157104b69ab748904c7b4e12f563d6b103172b","37c8908ea2a349cd3034018027160ad810b28ad1fc203a9a353971e1f7396b4c","37e39faee019bb041627510f1f02746ba9a85696417a083b438eb4974b72c2bf","38a75fd804821f4836f0a7ba8d41af3d3a3a5f5d7dcea68487009297824258d9","397476cf107b48e7a662264f8fea9f880231fd3d1e0401622650f214cfaa35c7","3ad8b0398ba6c354c9e31b7438b2515579fc0b1f17de4b35a914c862a3a11e3b","3b3c6cf083b12a840565e00458e2fd4ee8a61f97cda452703a6b13d7776b6c13","3b4af144afed3d52dd2e1f64e23bc25b3475eee5f7af3bde9886761b15c33dfd","3b5d82795e9f5d1992ab67e078fcf1108247ab9b6d1baeac944d3ec0294cec5d","3d0274f77576abdbdf442c8843e955e1bbc91e9f8cbfe3646b119337cdb13c96","3e2f66baa16c7ea936eba34720a55897438f60b343cbe8fda4eab1e5dde044eb","41c768ea17144c6ec225e9a65d4c3c127fdd7264dcba1a89aa17b20fd5d7e3ee","42aeb46fcc3d10b95e4067bc9cda875fa933b4102873f67c7bf1f8ca6799a598","4320b92712bc14dbe10b56f1cd3d1bdc093fc4be6016732839d0be4dd4d027d3","46cdf2c207f79d388001f6636dfb7a98bb2ba72b9d1c6df4938f0a27691e07a6","480f1ede18ae031b164d49d676feeb1090fb33932676ff52e1e2eb24e8d154cd","48797c44c92cb34fd9a57a08020b45c6920b2268dc8ad616c0f814a3710d5316","48d094622ada1806cb30335926007c1abc476b1f7b45a2e250c490afa25e847b","4a724a6a842a132c2185279513f341b79f9be93e42660f1255770eeae3b1323c","4c8c327dacf345e184042092e96ad3ea02ed4cece57dac5fa68ea52fbb5a6adf","4d5a44ba07fafeab823b54a21846269330ce35b4c190f3ddd5434bc8530d9b41","4da0a5be70e8af9c39623deac83822749482187f6a0fc3d186dcfddaa7111576","4f1e58fc658a4ceda181e2a7fa249305b09b573ffd68c2489f204f4957224957","4f2750b974c1404acb721ffc84cbd1d0756a24211dd6f6503c10ea74dbc45676","509ec9c08864b9dd0029f32ffeac85fbac863e2dad459994c65b7cb5264faffa","52049cc9cee43bb27229e6b3e983e02c6aa20dd7d153b13e3c74bc6d2b47cf92","5382c901d160ca2d79888d8acd7a690a5349826b5da486274b0800c9d7513f11","540879695d41205515aaabe5466971014cb43b960a26b8e5958e37fed63df762","5560616d1e72f0a539f9ebbfea3b7d195c1ef5622f97994af1963748d4f97533","556ee783d8e2e4ca50f656c095758be613983f904d998a6534fb155510114f21","55a4711e799294d06988ab4acf77eacd7d424123082bba3ec987dff0ae13999c","55ae095961d78a1514c4dd1e63d477c60179a8662571ab5a90abd3eb2b83eb10","56e7158313357bb145bd98c5f790e569be2203fb2601565a30091a597a7e7ff5","5962dd14d3923433cf723d698d1af19ac37a270b6e88445643fc56a646faab5b","5a2064cdf51026eed65457c05f34bec919b31d96d35c29498d298685965f0b5a","5b77bd6dfa81cc339e729e4195e258facbfeb64b9c680512f742e3fb1961fdd5","5c3527e43fe24c5aa171c6fa4a3de7fe5e78f2527aed0dd19cb21d154d43da21","5c79c77f00167ca140127b00f1a79e1ffac621e46fc461089594206a7df8d7cc","5d015880319af666943e68169ca906bf2f0c813d8bf2c5c0262aeb5a40366350","5f2a75b89983d1005a38afa2cabccc3a39f31989807120281d8505ffd564e0c6","5f4fa6dde5930fe1b42f805895f0f5fb135c2b3ff9830f2bd30ae7526a3295a1","630fdcff1f227b5baf5d10bd78ef0fde68791ac0cd8a15f65065f5cc4501b17b","63113617f2e4ee6b827a69bce6afb3949190a282f5feaaa9e2c9f82372623bb8","63544fa69b09916d52b305700eb9816305ff22b77162a44edd13897acea3a655","63a4394e689acf4a4762cfb4df691d05f923fdf592fd2f8ea41e6a54f98d1136","69ebfc7eb8427db3c5c59bdde652d0cb269426126f8540b1b58caa29ccf130e2","69edc4285578313d1dd2f914d69add075a7b354f7fba717606d1abe15292576b","6a34d9279cae58765d6ee4a980192c0e15f3ca217b9f1815861d472a281b3cf8","6c3c592efe9c684ada5661b8cc88a5c3f6e57c841db06b9e070687504cbf6236","6ce6d164c3e31463fb9e144fdf91413e55d077cfc4f25092bb02923fb538a84f","6e08a638e1e28020923effd4c65fc517dbe7b06100ff76cde74e427191503b84","6f3a7020233cd77cfe59eefec0a277f6dda323743c8d80e4e54a95cd3cbc23cf","6fccc6f0c5fa71c43211785dced8abd0f3295040eab56063f4e8d77f1c09b8ef","700cd21af9ed7e81900fad9d52de2fb11db48e64b038e4293168f85e5dd0e043","702d1dfa75e92a916a446429f474d4c296e6ea4e8c487995852d0525e8440659","704cf778db6086c3e282c81249fb0ef09c1d7c2043335ef74c7ecb69bb3e84ad","71ef1ed2d5e4bc7eebe7a73bb3e9423e5bc2f8319186380fe8b38334952d3b01","7256ba00af1cf759b95b7bf8ae3b9943f31349bd10a7652a26bb419b368d73a3","7369b339daca0fcf46ac7fe82d65ae95c75d7dbcaaae51209e6d90b6587a014e","73ec844fb3e2b9febd00ba37508b284fad141630f03cb9f74e36a195180f5054","7410de003c7b582e30470d1209eefc796a70c76fe8d61dd9ccfe01ecfa41310c","76bf5a9c126db6eb466287a7c0d823327ee9882a70eaaa6efb03d169b5dba808","781a64598efb2a11156f07271ba1c14c4f6b3d73aa2943b26eae02063df7af70","799abc1e8d381b8d97349479139985e383bb49179b5a80f39807cb35a3ee78ce","79faec494bdd6d098c9d2a9d8559f822938c6b2104188db95321d89e7a732979","7a032dbf0351aa32c77c8d187f7eb697500ff186c88c5946ecc15adc972246a6","7ad4ef4b8d3221758a9e7f9577750ee03f6cba11c8eae8bf25f74a3131bd21a2","7baa35131ece7ed9860607157d2531d4d70a061bdc9bb9876e20328f127cec53","7cbf970a11bdb91a40e248eee97ef789205910ebc913349698fc75ed35e82fdf","7d6133667f81aa66a98755d253ea43301b45ada338225df034d2ffdfc79829e7","7e89b59b456dde4bbbdbf8079665bd82c51d8e500018472981c15618b3893959","7ead0c68ffa0ced241af74dde58b3831343dff3f7eaab64bddb9954545b7ba12","7f8188b57ad3b0c28210c95954e5623376a4262dd5e75f002700c6094b8d6b6c","7f91dfc2ea1a3131c4090375db0f489c2a572e245ade6cda4ebd440446d6d60e","7fcb8cba3ed0ee9c342947aa88f0f699bb4f5c23244d21c6c739c9b66d7c6101","800060d7b4934508d0277f90a464e3112fd2fc99af4ef23825d09b0ff53f91c3","800a802a4ce9e597a102f0a566535c1f9f7adfc60c41af6bd2db4fb7fe3c0d0e","820c12fcbded9048a363b9e0ebbc48b24f85fd4a68131b5dfc1b19057bf09ddb","82c419e5de083e423330432c9d45c744043d1bccd8eeccb41e3014ce9ae3c32f","8343a4211a4d0ffdb320d5a4305174d85bb707d15dad978f6436297d022daa11","83a97b9ebb29f5cd014ef5e178970a601ee92c44678f05d1860b383c5f63b79d","85a962a7c23c14dff8d683e738b53f422221697b213cafeb616d3a172a6c4223","8629fddeb4f273b35df69d4d28923adc14eff59d919b1a495d1a68818137c561","872ab2b2d65fe685b91e355f5af051c85b79569ece16448160d01fef38039624","87f2b3634baa504f2ed9508c6cf6a47bbfb36214a177eb13d70d6a987706818c","88b615ef6a31bd9958e98b8ea522f49f0360ccac5d9fa8deb9e3ef3fe3147d9d","89cafbb20d6029656266d8cb0f85103fa519c8032598282fea58c94cc59c4125","89f2105745b3a7cfd30e7d7c598d6c8fdde0a599f30fd0db7382cba50412445e","8b3eec010d1eae43a28c88434f2410a751f790a9d6ec4a08e75e68c171629ab2","8cecfa09651c40be4d7c11c117c80e1911dc75bf6f1cc34be64706823cc024c3","8d250acd40c8a24ba0d51cc73e65bba6856509b5fbf4c7d7a435897a01c6e764","8df1420c27503370db9382f68a0af8d2b4d56f9dbc94b24ffae450a905083a79","8e7371228a726f381fb811d1d812c39917788a3df7e53dba1a3c364e755a0c03","8fae27ba5117e202afbd523b249fc454912571900fc909f5419b8ac96c773c44","902b958b4db7d8d8bf73a82a8aa86e5485b39477047c8ad60175d118fe31d987","91c9ced5e9ab8da897b7f69166a7d0bade5c58d511b42d60d5430d536da45d09","941f70c384905ab77cb9a88e2671301117e4df553da6fc7a09210710deb9b6ca","9442788fa51227044803f1d3efdfc1c2b2da372871a85f0f7a6bb3596a5c003f","947a1cdd43831936480167169d30334f818bb5d882650a3547827c05204af111","971f59cc197732d0c0b6b8aabbbefca4550fb8fb04f8522bdb4257c05a28848a","98a097d6ebb754334250dfd3ccc5f3dfaf5966524758cbfc9e10adf4a0229693","98c7e4bc2f05e9b4ca703db4a02347db7355a44f04e3a4003e26c46a56bded2c","9944d1a9674e555a41d31d069d136461eb06dd4052d40f2e4ea4368dd978e01b","9bbd03293bf53e9db51401d157b3eb2aa51e9c70449350e98b9a0a3fc9a684ce","9cf90b3aa59f3ca0e40fd9e1fec9703428752d63bded6b091d28f614c9ba99ae","9eb67ea41c5bcb9557ba51bbbd1b321a78f16335cadebbed848d8e6c1fc68bab","a0ff0d0bb3a3c801b637d091293f2eeaac68e934274e4116d298ba60ec3461cc","a1baa1f699fd4ce19e8ef6cdfe346e1b0be63e16d5c5cd5feddcccb16a62f269","a3c84d76be9d891812e795dd46470c2978dceeff928d729c0d5dd6def599923b","a64e8aee389ae696d0d4b045c0153092113fa522ed5a0fd9b5658b8418db4ded","a6c531ed9bbafabfdd649f3030daf2f24461163aaf99dc73bb24dddb77bbcb90","a7ff7302e668dcea1cd1db2241ff95c0d73534539bd03fdefebbfb57f60d3849","a8b4a33078335d2811bffb78eee49aab5fcb31597dae366d43e20c7f7800994b","a91a47fb4fa5c1b1a834fa602030e435ad641240e6ceeb99eeeab7341ca09dec","a91c8a1431a4120667cd523cf56bac004794fc5b8b24275ad2f9c8a15c75fba1","aa131e74e695292adab9f57b3ccc5a503a836dd4b95a3b2b107c69f35dba3637","acd7884bca46ea9422503cead985691da05cca25bd5ed52a199783cae7b8b01f","ae69fe306bf5db346ddfa4367cda24c95e44213baca27b0ee7d7167bcdd85af6","ae8c200dbcea29f43b29974cc247d70647c80d5d76385396f1c82ee9f669e2f1","aec13a075b84253397fb97e1c93a23e1aaee6d6bff2a9161bfd00a5b1d7611de","b09355a97e3aef396f681943b37a404a98fccc6bcb97781eddb2fc000d1d985d","b0ecfca0d114bae34ffa62ac3ea05159a4415fc6eb73ab1fcc4d79f657268f19","b25c41f19ba40e646fd9b6f82051ee4c38985539e445b26bd628eae98537df53","b262187aa66e8a97083bf7f79b91595bf7a4077abe7f8be5b00b4998f4579d20","b4091f93c3d96e36b0708f5dcd46e0e7a0a48f098036ccef6164e4a6429ed94c","b4093c67a9195ee7d28d2575e967ac80057b92339489c244243c7c504c669ff0","b44352445272089cf90967d4d413cf7009bed0ac19f3fa95cb831d5ebad081c3","b4ce73bea5219f1b27bffb36c6a9dee14447a710a8938db807770083db4552ac","b5102ef50e7d4ed1925af5a8b45192e737df02fafb75d7065995a2bb93d2e8e1","b5428b5775526a00645566822530fb969b82247ba83f2c80c06d34151e1f9061","b6cf3b02f36e0efa93b04667cdc5701340033a09e41a7196277cf6756999a666","b77c6669bcd54e0fa949faf2f7205f2631acfbc1ccf79f93f8dab5c5717f0e93","b7ffd6cddb12384224772e8de79aec89d8f4bca966a3c2a05763889f92a6db5c","b8abe10a2a92bf537a49e8dee92baf8de3ed591848a1b25151dab0d7ab3134e5","b96cea09313d481dfff1ed1a2c552ea29e8fe68f52139458996a4e36157748d2","b96f9beb6d6d8fbf88c4b8b2b807a362f2640479cab6173cf64c7710817785a0","b9ad2510d8249ec4c8e7fd8b2471727aa1bd0ce8f3dde78e545fb2f8f2985a1d","ba7d7464da8e13722232c8f86273774054693681becc450a68aea21a5a0e9b91","ba87e5d43ddb10937bb17941f055f80a223d0981fbba44107aeec8530e3a7774","bac3431138e986d6426c1e81bdfe0a968394896c0751cbbcc8f36002fd0ed069","bb230236c4ab6353afb4147014c93204d3d1eb8a6d18558075df5fe79ed7f392","bd714f38c881208f1190ad714bf8fa5aa63adf302bdaa8ad8810ff279e43459e","be75cc1ee935f783be39978de91ae196c16141d4096e16eb6d07f59583296b4b","be8c3cb2d8d67e63c8b069920b74c6272922febbc6a0a2c4a0072a7a213681d2","beed0f36d9b1b9a20bfbf89c96862482b8d5b9d4284bc89539efe9c9b11f000d","bfd21b5c8eb26e9d475868bb30d66ee08f20876e9df5cd06aa8fec01ffe666df","bfe97e65f2cbe6bcd0f14ff57ea4dc1dedb2e5f0db92d04d0982cf1932ac1c3e","c112d36ba38c362da1c022945db5b6bbdc3014685ca9bb7d940f5086f00a675c","c23cf45c1dcb748145d87f5c173dd3c8becaf9e3f6fdcb3e2ca91d6726b0842a","c29b8d250a7b5e73f4ef675329da2251b8de032501e4836445b6aafd90c645fa","c329c9df0dae8a036da9be440432d045be3ee13cf5664cfa6ccf11576ed11acb","c4600cd5358b5798a075beb54539d952f200def1c9a573bd237c795fd33ba36f","c6752cc3c7ad06d1e9f127365f078919ac46b77f8a8fe413650094d914838ec3","c6867ec30530fd3feca89a4e968522f783b636b165ef74f288c42dd50bd51a3d","c6bfbb004af355e96ed5b4c8c9b8b7a96d1c08d24bcde7c666728eb9497d6d71","c8bd340e6fc7fa3e97415f7ad4c22c51d88c6e77f782c12923e841c04d3f882b","cc24c3770587f2421514fa399d2617201752bdca145ac39058de91d45d3d19c1","cd2da00f6f1bad8fb7c1b87cff80e122eb017e44a471cdea769efc67db369038","ce887fb65b6977a2046e7583d704863624e55909ebcc9c3ed065b3d13079a410","cf9223c369b6fb7baa52f301f904352ba8e8d5e4c2a06f70de6ef1cf76fe1b84","cfc3b5044af37ae7485fba8067dcb22b2438bdaa6e3a30c22ce0f9e2c00aa597","d0481d9b6111ab4afba0462e88970b863284807ff44ca97364c84952e3f88583","d0973a1aca6a118375b466d6e91821f8450110fdf042ac848ee16912012d2b0f","d0df3068db679e24d9487ee09a6462ac5cf3df30f46ee466b66feb6dd5ff71e2","d227e0a73e3c5452bc5ab41ea2c695dfc0ff9b0c1c81e59ab3173f796a4157cf","d2cba4dbbfe3d026f825a8b470a2f6011f9b8e245cf042ae8889afbb17dac6b2","d2e4c515093f8a2aa824c8b542a016e5c321065f4525931b2fac4f8af2fe52c6","d31e8aa21d1498f2d4a07c4cc89ea6f5a6d3ce54d334dbff230e0f55db35c85e","d37de74aadd5916eeae243decf347821c4e946356b9f70471658638ac3092f91","d49d02cad8bbfeac607457b08aac6068916ef45d8f6c980279d6e654407cc7be","d4f51c31a454d9abac29457cbbc21e1b5767c0eac1b37c41ee787a3efb05c80f","d5c084e12da4a5111487c166b879042a21a056f761ee22d9237cb4f65f366341","d6077d547aa21ea10a9bdf6c752b8d1a0a6382b4b43a0fdf790f245e66a609fc","d67e8c1aaab1ce6ec1755599ecde153c47c6b90dd4c301663abe9057bc31af57","d6abcc1484c3df45bde915abf48324af1e995c3266a3c6c069e98e94c8d9a4d7","d8ca8e025e226ad6bdd32a6a9fceae2982b0413a0ad09314558b54bdc724bf99","d8d03142030c11a0aa1012102fce2b202baf88e424a1236832937e87450dc579","d9823dfddf6c507ec030fce4bd2d98fbda18e595c2ebc563574d9196cc7a5e33","d9b0972f3406075b860ba7cd2e71d4492c826960319b10389c2c2820e2981254","da37a61fab07ec8856b725854e4064f55a59149aa69cad1bcbf89ec478b9f578","dad01e5bfb13a6c4419f4d24fa8dbb424e93a1c4be656b0e5dd48ac546e0a0d9","db21a75b4fa6165f75268963474f3262124795d816ba80f685bab2c6eaedb028","dd97ab52fd89f42352c595ce137684cc519c473fa17969e8a6adcde7322a4748","dda0a34d6704887eb36bbc0173334b49d755cac8cea3bbd17bfa972f04183dd4","ddbda9408727a19a4a55d516bed99331edf67d8301de9c78564716465c949619","e0288c94ca9c16a6de217e6baeed720fcf83e401bec45bd15ca47ba8fc9b44dd","e1667469384ec775a3df665679cb3fef057dc84dcb18ed8db8b9c5723835968a","e16c328504278cfe520d6d99990f2a4370cc48159aba86694d0f7598fd4b0611","e24df071f5325bb3a5b20f355143556bc7712535ee8b6ce4c426598f06fd2448","e28d8e6b71264d0bfab853e63178f2c151367cce0dbd16125596ff3604b6658d","e2c734504d211580b4e6674eb1c7d31fb6fb730c037210c34c980a96f9098269","e3f19c383354cdf45311f92f00b90fed25dfba7e9892ab2f5f3aa4885876b75f","e409fbfe439455330c0fe003de860e30f7093cc3cc83a32f886c9b539a29f60b","e6300ee8e6c2c4ce6d7ab02b7b06fd1cabe3c5c52b99a6ea3ea8b5acd5092e0b","e734d068446591aba283d136c21b4fb0209f91352cb4fc6589bd651cdbfec163","e7a333109a7aaec2b71048868500c15e721900628eb48790dfeaa1fd4c2dabc3","e7c9175fbfd9fd84bed95d552bc0a439b07a233c3e91fb39ae2f23197ee53f1b","ea1b8a251ecc1fd96697d0c602d3e14ec46383d27bb9485a0326cea5576ffacb","ea311dca2ef14e02b9aae563bb28dc737b04b7f01c1ceb2be3d92007d2c74ac6","ea8e5b79bbe5329ae8437677c8316f2f9fd75bb1d40c88308c269140a7e564c7","eb996138bc91c0ee63bafe1ba10b130ff5a2fc82aa4918296222e0a831a569fe","eba6e8e5a12a86f17fade41bef365aa95491c469e18aa91aef64908a4263c905","edc160a11c07dda8072748b66db7f27b6cd8efbd1faa3f6c826a0fe445859c17","edfcbe4773eac1fe2964179a4ad21294efede89568f2efd8e283ac18bc5693b1","f0f90dee84db760cc1bb0f6e6983d4de0e3d5d9f4adf7b2b52f0d3dbe6d585a4","f1d4a6e98f41ab3f6cfd67cddeab9d0ed287b92cb3dbe575e3ce61925510a792","f21c3a9267110e469f224ac7eb76ca5bb084fc90df014f1ca6791d5770483944","f379a1b9e29aa7fc25c4c0c897eaa3c0e90d66a201a0ade8cbf523a5cdc8cf50","f3e04891c79b604f9235f438adfa49ee27db43d25c7be0d1cc06ae53b8f6d2d8","f46904e701174fe2850798d9e1b077bdac42fcac01dbc385298da01118c82aa6","f53265f53af0b0856911ab08b373736964d0c443e8ba61d7f1d45f5e5b04edf3","f686173d310f41e26e3fe8a7c1dbf4313e4d793323335348badbcf4633f5d699","f704c9c9e2cab1ed44578f48d161320b5fb4384ecdd8b40a5e22c4078a8594da","f89156489d35f9992d5971a52a6e03a7d7f095e15c2c782e85efb1408a2bd6be","f99ef6fa3c9c6bf572ec69eb6eeea9f88ce6590d3a5565bec62b001b6f2a376a","fa2dfc22b4fdbcf402a822e8dd376925655d997a0f96284a60f10665ba3581ba","fa3df5f8349aec4805bbcd279b88697def63f2462d8ada0b5fe1d9983d9a6daa","fa6b97cbca1d4f09662e706293b0aec1eb76b8e2277441f54ab6c548b5423236","faac0c3fa7cdf67b452d407e9a1db5cbe1e9140ecfe300200b0b0a6279c97c66","fbc8b53b5c6f3727c084e5e0429e410a3fed5a17e1a0144692fd196d9836a4bb","fd04d7588bb9e6ca0a8b65ed0c9635082a9ee5f46b2d1b5b25866a072236c1fc","fd60f2a432086c6fc4a4c39d8d2d6edf5794c763c05a6401db2bb5fa2c601775","ff532716738e2fc716c10797d9717f324cca3a1234320a84a73a0b89569f11ab","ffd0fe3449e449c7b9fcdcc7e2c1ffb677e57ad935a252de88a0122d437efa67","ffde5c700732beac27a9b5162213d387422ce199400e56d9cefe550005b6a542"],"schema":"fsgg.atlas/1"} +{"records":["000ada42299601fba29016e5c0e0d4012876fb42670bb10fa0b1315477254ba4","00641d046d6869fdd0023ab3df99e0e67a6ea28f0dcb701f622b1cec8b3e07c6","026b08fb343aefe19177e95b759560d340d372def4b71acf613fefee3438ade2","0357495d23fac4fad210b6dd7ed7cc57dd33d107e1659a81f085cad78300797f","036c148f6d0e89858c9bf4cf380272ca6904bb4ca277a909fb71c47f5450cef7","04e404d89dca295564813149472b1de8e6c43357e2f6d91d169ded7600ed3a02","0509e5c6fdbd2dde0c0db8558647080560714804d00e4f9268342f2e84858a3d","06ad2c8aa0ff3b862edf3ba99e0e4e8801ee163709e66333cd06c3fc61232b05","0a6d7dc5b64970bfdadc9049ace95e8bc163fc421beea70129ff0eaa692c6d06","0ad4403c8f4078dbfa543310c69bd1dfc768e305987214ffc37d7b2600c4687c","0c22360d4653eb0f450e4d3d34564875f1660cfcb2d546095d98b3faa3967cbc","0da4d093b49c0a1f654b38008bb01195e816829279ca1989bd2448194e15361b","0e560af7d9dd2e0f2f588a74cd35512973747f20bdfe0bee0bc889105ea53dc9","0ea7107c2c8edaab3ff2bae32f63cfbef6903a51cdaff257278f757ed5ef429d","0eef4d717eb03f0906aa3be7336aa71f831726afabe8a56077b76f6e82fd08e1","11fe30832d93706c60efd836b09f35f049c4a715ad6144cf277ca240c5780704","1244d27db0cf5075353bcc622d0fb3b5ca6a7d08526e2c5754e8b745c250bf3f","155fe673b8ae12549c978e1bf1d5c43e360937fcf2135cdcd5aea6f6c771da44","1945f527afc3c2930ec4d7fa57ebb2ef7dd6321c0dd3ab9233c9963e9e613165","19d657b67672257ece127f3b957674b7fb4780843148db0a36a0b329c2a418ba","1a24f6ef0c08a898f309c1b925fc19b29526f913a61a1dfe4b1a4308ebdd97ac","1b5351b2dc647aba864e387168db5128435cb80da94fc42581cd60a05fc34b9a","1da011289116fe88fe92cb8f0e83ed7ccbbca251681d4e136c5a61c40364f8d3","1ec9445b242d2a2e149fe71c67bf13d8c0e4ebe5a6ed7b022656b9941973909d","1edc36731a9c76ad07d269d8b4fd84c8c956bb43d6f56de17d6208164856ffbe","20901b579f69cc97eb56b492938864667576e1c9bfacf13f8a529c4f6e543448","21338155cb4f52c49e5072c877771be67c75590d9b238ea025fba5209fd6e018","23af79bd1e7995fc8162ddc4d830318acb054bbfcc9c7d5cb141ec306da67386","24d4f2730d94d1b7f149771ef0e59192f4936d142b21f4a56b1a391e4514d38d","2591526ddabbea03fbdc38bf172bc54f42df9bc51eba7ad2b70d6e67215f08f1","26259abc7fe745f52e06f2aa2abb0e50f189bc7608065f04d5c669a0a99941cd","26290a0990d6dac0ce9448e05eb934210603356043dcf14a5d80585288e2aa92","26d6b31965013079d4db67a2c403e01f21e3c30ae65953400dbed92e289a0925","288daf614247c260cb673d8674e8b3874ccc4e269347836851f702d7ac8e2f7c","28abfaf6d50ca38af0b88aa50524200c17af9000da83ddbab3d8f9e06e020fa5","291d3db272eae084d34c04bc1305f2abb26a7e7acbc5515208469b46719a4ed1","2a38ddebfe3380232e35d5a24f9cb9f7c38abbc9c68add4ea5952c1e65d328d2","2c76ce93500601e281a41f5985fe4e3926fc8bc9d01ee687f14052cb553ad2d2","2d599c722a08306b98f2d833fb3e4a7acb9dea92e6a58820caa2f65c09803fb8","2ecd502add2d801eebed39411fadc9a80098ba9ce04a5f4b728a0e4e331232d6","2f7357367d921995f4c6fdaa693392adcd2df4860ef4d25c8dc47f7ddea8c755","2fb2ed7902a8e35dc36489a23245d963026d688008c92fed6fdc1f6bc27198a6","310bfb5b2d061bb733771e5cb7b3b7d25db43af5eda9f806169b7ef9330c2fe7","32f69a7b8997ae98b9305ee578145d795dbcd39ca4469bf2465e57a0295cda51","335683e33b94cb86b5e426b4faed200673bf850151191a08458136ceb164fd4e","3407ec53a884d3945d86a88d6b9a883419dd426e96b1108a8e6686f30397a629","34463778cf2d29e3896a65613cf9e3eb3e9f2d8946d17f12b609e70eec63d128","35da3938b72cf3520e126ad595157104b69ab748904c7b4e12f563d6b103172b","37c8908ea2a349cd3034018027160ad810b28ad1fc203a9a353971e1f7396b4c","37e39faee019bb041627510f1f02746ba9a85696417a083b438eb4974b72c2bf","38a75fd804821f4836f0a7ba8d41af3d3a3a5f5d7dcea68487009297824258d9","397476cf107b48e7a662264f8fea9f880231fd3d1e0401622650f214cfaa35c7","3ad8b0398ba6c354c9e31b7438b2515579fc0b1f17de4b35a914c862a3a11e3b","3b3c6cf083b12a840565e00458e2fd4ee8a61f97cda452703a6b13d7776b6c13","3b4af144afed3d52dd2e1f64e23bc25b3475eee5f7af3bde9886761b15c33dfd","3b5d82795e9f5d1992ab67e078fcf1108247ab9b6d1baeac944d3ec0294cec5d","3d0274f77576abdbdf442c8843e955e1bbc91e9f8cbfe3646b119337cdb13c96","3e2f66baa16c7ea936eba34720a55897438f60b343cbe8fda4eab1e5dde044eb","41c768ea17144c6ec225e9a65d4c3c127fdd7264dcba1a89aa17b20fd5d7e3ee","42aeb46fcc3d10b95e4067bc9cda875fa933b4102873f67c7bf1f8ca6799a598","4320b92712bc14dbe10b56f1cd3d1bdc093fc4be6016732839d0be4dd4d027d3","46cdf2c207f79d388001f6636dfb7a98bb2ba72b9d1c6df4938f0a27691e07a6","480f1ede18ae031b164d49d676feeb1090fb33932676ff52e1e2eb24e8d154cd","48797c44c92cb34fd9a57a08020b45c6920b2268dc8ad616c0f814a3710d5316","48d094622ada1806cb30335926007c1abc476b1f7b45a2e250c490afa25e847b","4a724a6a842a132c2185279513f341b79f9be93e42660f1255770eeae3b1323c","4c8c327dacf345e184042092e96ad3ea02ed4cece57dac5fa68ea52fbb5a6adf","4d5a44ba07fafeab823b54a21846269330ce35b4c190f3ddd5434bc8530d9b41","4da0a5be70e8af9c39623deac83822749482187f6a0fc3d186dcfddaa7111576","4f1e58fc658a4ceda181e2a7fa249305b09b573ffd68c2489f204f4957224957","4f2750b974c1404acb721ffc84cbd1d0756a24211dd6f6503c10ea74dbc45676","509ec9c08864b9dd0029f32ffeac85fbac863e2dad459994c65b7cb5264faffa","52049cc9cee43bb27229e6b3e983e02c6aa20dd7d153b13e3c74bc6d2b47cf92","5382c901d160ca2d79888d8acd7a690a5349826b5da486274b0800c9d7513f11","540879695d41205515aaabe5466971014cb43b960a26b8e5958e37fed63df762","5560616d1e72f0a539f9ebbfea3b7d195c1ef5622f97994af1963748d4f97533","556ee783d8e2e4ca50f656c095758be613983f904d998a6534fb155510114f21","55a4711e799294d06988ab4acf77eacd7d424123082bba3ec987dff0ae13999c","55ae095961d78a1514c4dd1e63d477c60179a8662571ab5a90abd3eb2b83eb10","56e7158313357bb145bd98c5f790e569be2203fb2601565a30091a597a7e7ff5","5962dd14d3923433cf723d698d1af19ac37a270b6e88445643fc56a646faab5b","5a2064cdf51026eed65457c05f34bec919b31d96d35c29498d298685965f0b5a","5b77bd6dfa81cc339e729e4195e258facbfeb64b9c680512f742e3fb1961fdd5","5c3527e43fe24c5aa171c6fa4a3de7fe5e78f2527aed0dd19cb21d154d43da21","5c79c77f00167ca140127b00f1a79e1ffac621e46fc461089594206a7df8d7cc","5d015880319af666943e68169ca906bf2f0c813d8bf2c5c0262aeb5a40366350","5f2a75b89983d1005a38afa2cabccc3a39f31989807120281d8505ffd564e0c6","5f4fa6dde5930fe1b42f805895f0f5fb135c2b3ff9830f2bd30ae7526a3295a1","630fdcff1f227b5baf5d10bd78ef0fde68791ac0cd8a15f65065f5cc4501b17b","63113617f2e4ee6b827a69bce6afb3949190a282f5feaaa9e2c9f82372623bb8","63544fa69b09916d52b305700eb9816305ff22b77162a44edd13897acea3a655","63a4394e689acf4a4762cfb4df691d05f923fdf592fd2f8ea41e6a54f98d1136","69ebfc7eb8427db3c5c59bdde652d0cb269426126f8540b1b58caa29ccf130e2","69edc4285578313d1dd2f914d69add075a7b354f7fba717606d1abe15292576b","6a34d9279cae58765d6ee4a980192c0e15f3ca217b9f1815861d472a281b3cf8","6c3c592efe9c684ada5661b8cc88a5c3f6e57c841db06b9e070687504cbf6236","6ce6d164c3e31463fb9e144fdf91413e55d077cfc4f25092bb02923fb538a84f","6e08a638e1e28020923effd4c65fc517dbe7b06100ff76cde74e427191503b84","6f3a7020233cd77cfe59eefec0a277f6dda323743c8d80e4e54a95cd3cbc23cf","6fccc6f0c5fa71c43211785dced8abd0f3295040eab56063f4e8d77f1c09b8ef","700cd21af9ed7e81900fad9d52de2fb11db48e64b038e4293168f85e5dd0e043","702d1dfa75e92a916a446429f474d4c296e6ea4e8c487995852d0525e8440659","704cf778db6086c3e282c81249fb0ef09c1d7c2043335ef74c7ecb69bb3e84ad","71ef1ed2d5e4bc7eebe7a73bb3e9423e5bc2f8319186380fe8b38334952d3b01","7256ba00af1cf759b95b7bf8ae3b9943f31349bd10a7652a26bb419b368d73a3","7369b339daca0fcf46ac7fe82d65ae95c75d7dbcaaae51209e6d90b6587a014e","73ec844fb3e2b9febd00ba37508b284fad141630f03cb9f74e36a195180f5054","7410de003c7b582e30470d1209eefc796a70c76fe8d61dd9ccfe01ecfa41310c","76bf5a9c126db6eb466287a7c0d823327ee9882a70eaaa6efb03d169b5dba808","781a64598efb2a11156f07271ba1c14c4f6b3d73aa2943b26eae02063df7af70","799abc1e8d381b8d97349479139985e383bb49179b5a80f39807cb35a3ee78ce","79faec494bdd6d098c9d2a9d8559f822938c6b2104188db95321d89e7a732979","7a032dbf0351aa32c77c8d187f7eb697500ff186c88c5946ecc15adc972246a6","7aa52373f2721dd76fc8eeb3d6061794f27ea8d11e96bcb1ff25a97994a77d5c","7ad4ef4b8d3221758a9e7f9577750ee03f6cba11c8eae8bf25f74a3131bd21a2","7baa35131ece7ed9860607157d2531d4d70a061bdc9bb9876e20328f127cec53","7cbf970a11bdb91a40e248eee97ef789205910ebc913349698fc75ed35e82fdf","7d6133667f81aa66a98755d253ea43301b45ada338225df034d2ffdfc79829e7","7e89b59b456dde4bbbdbf8079665bd82c51d8e500018472981c15618b3893959","7ead0c68ffa0ced241af74dde58b3831343dff3f7eaab64bddb9954545b7ba12","7f8188b57ad3b0c28210c95954e5623376a4262dd5e75f002700c6094b8d6b6c","7f91dfc2ea1a3131c4090375db0f489c2a572e245ade6cda4ebd440446d6d60e","7fcb8cba3ed0ee9c342947aa88f0f699bb4f5c23244d21c6c739c9b66d7c6101","800060d7b4934508d0277f90a464e3112fd2fc99af4ef23825d09b0ff53f91c3","800a802a4ce9e597a102f0a566535c1f9f7adfc60c41af6bd2db4fb7fe3c0d0e","820c12fcbded9048a363b9e0ebbc48b24f85fd4a68131b5dfc1b19057bf09ddb","82c419e5de083e423330432c9d45c744043d1bccd8eeccb41e3014ce9ae3c32f","8343a4211a4d0ffdb320d5a4305174d85bb707d15dad978f6436297d022daa11","83a97b9ebb29f5cd014ef5e178970a601ee92c44678f05d1860b383c5f63b79d","85a962a7c23c14dff8d683e738b53f422221697b213cafeb616d3a172a6c4223","8629fddeb4f273b35df69d4d28923adc14eff59d919b1a495d1a68818137c561","872ab2b2d65fe685b91e355f5af051c85b79569ece16448160d01fef38039624","87f2b3634baa504f2ed9508c6cf6a47bbfb36214a177eb13d70d6a987706818c","88b615ef6a31bd9958e98b8ea522f49f0360ccac5d9fa8deb9e3ef3fe3147d9d","89cafbb20d6029656266d8cb0f85103fa519c8032598282fea58c94cc59c4125","89f2105745b3a7cfd30e7d7c598d6c8fdde0a599f30fd0db7382cba50412445e","8b3eec010d1eae43a28c88434f2410a751f790a9d6ec4a08e75e68c171629ab2","8cecfa09651c40be4d7c11c117c80e1911dc75bf6f1cc34be64706823cc024c3","8d250acd40c8a24ba0d51cc73e65bba6856509b5fbf4c7d7a435897a01c6e764","8df1420c27503370db9382f68a0af8d2b4d56f9dbc94b24ffae450a905083a79","8e7371228a726f381fb811d1d812c39917788a3df7e53dba1a3c364e755a0c03","8fae27ba5117e202afbd523b249fc454912571900fc909f5419b8ac96c773c44","902b958b4db7d8d8bf73a82a8aa86e5485b39477047c8ad60175d118fe31d987","91c9ced5e9ab8da897b7f69166a7d0bade5c58d511b42d60d5430d536da45d09","941f70c384905ab77cb9a88e2671301117e4df553da6fc7a09210710deb9b6ca","9442788fa51227044803f1d3efdfc1c2b2da372871a85f0f7a6bb3596a5c003f","947a1cdd43831936480167169d30334f818bb5d882650a3547827c05204af111","971f59cc197732d0c0b6b8aabbbefca4550fb8fb04f8522bdb4257c05a28848a","98a097d6ebb754334250dfd3ccc5f3dfaf5966524758cbfc9e10adf4a0229693","98c7e4bc2f05e9b4ca703db4a02347db7355a44f04e3a4003e26c46a56bded2c","9944d1a9674e555a41d31d069d136461eb06dd4052d40f2e4ea4368dd978e01b","9bbd03293bf53e9db51401d157b3eb2aa51e9c70449350e98b9a0a3fc9a684ce","9cf90b3aa59f3ca0e40fd9e1fec9703428752d63bded6b091d28f614c9ba99ae","9eb67ea41c5bcb9557ba51bbbd1b321a78f16335cadebbed848d8e6c1fc68bab","a0ff0d0bb3a3c801b637d091293f2eeaac68e934274e4116d298ba60ec3461cc","a1baa1f699fd4ce19e8ef6cdfe346e1b0be63e16d5c5cd5feddcccb16a62f269","a3c84d76be9d891812e795dd46470c2978dceeff928d729c0d5dd6def599923b","a64e8aee389ae696d0d4b045c0153092113fa522ed5a0fd9b5658b8418db4ded","a6c531ed9bbafabfdd649f3030daf2f24461163aaf99dc73bb24dddb77bbcb90","a7ff7302e668dcea1cd1db2241ff95c0d73534539bd03fdefebbfb57f60d3849","a8b4a33078335d2811bffb78eee49aab5fcb31597dae366d43e20c7f7800994b","a91a47fb4fa5c1b1a834fa602030e435ad641240e6ceeb99eeeab7341ca09dec","a91c8a1431a4120667cd523cf56bac004794fc5b8b24275ad2f9c8a15c75fba1","aa131e74e695292adab9f57b3ccc5a503a836dd4b95a3b2b107c69f35dba3637","acd7884bca46ea9422503cead985691da05cca25bd5ed52a199783cae7b8b01f","ae69fe306bf5db346ddfa4367cda24c95e44213baca27b0ee7d7167bcdd85af6","ae8c200dbcea29f43b29974cc247d70647c80d5d76385396f1c82ee9f669e2f1","aec13a075b84253397fb97e1c93a23e1aaee6d6bff2a9161bfd00a5b1d7611de","b09355a97e3aef396f681943b37a404a98fccc6bcb97781eddb2fc000d1d985d","b0ecfca0d114bae34ffa62ac3ea05159a4415fc6eb73ab1fcc4d79f657268f19","b25c41f19ba40e646fd9b6f82051ee4c38985539e445b26bd628eae98537df53","b262187aa66e8a97083bf7f79b91595bf7a4077abe7f8be5b00b4998f4579d20","b4091f93c3d96e36b0708f5dcd46e0e7a0a48f098036ccef6164e4a6429ed94c","b4093c67a9195ee7d28d2575e967ac80057b92339489c244243c7c504c669ff0","b44352445272089cf90967d4d413cf7009bed0ac19f3fa95cb831d5ebad081c3","b4ce73bea5219f1b27bffb36c6a9dee14447a710a8938db807770083db4552ac","b5102ef50e7d4ed1925af5a8b45192e737df02fafb75d7065995a2bb93d2e8e1","b5428b5775526a00645566822530fb969b82247ba83f2c80c06d34151e1f9061","b6cf3b02f36e0efa93b04667cdc5701340033a09e41a7196277cf6756999a666","b77c6669bcd54e0fa949faf2f7205f2631acfbc1ccf79f93f8dab5c5717f0e93","b7ffd6cddb12384224772e8de79aec89d8f4bca966a3c2a05763889f92a6db5c","b8abe10a2a92bf537a49e8dee92baf8de3ed591848a1b25151dab0d7ab3134e5","b96cea09313d481dfff1ed1a2c552ea29e8fe68f52139458996a4e36157748d2","b96f9beb6d6d8fbf88c4b8b2b807a362f2640479cab6173cf64c7710817785a0","b9ad2510d8249ec4c8e7fd8b2471727aa1bd0ce8f3dde78e545fb2f8f2985a1d","ba7d7464da8e13722232c8f86273774054693681becc450a68aea21a5a0e9b91","ba87e5d43ddb10937bb17941f055f80a223d0981fbba44107aeec8530e3a7774","bac3431138e986d6426c1e81bdfe0a968394896c0751cbbcc8f36002fd0ed069","bb230236c4ab6353afb4147014c93204d3d1eb8a6d18558075df5fe79ed7f392","bd714f38c881208f1190ad714bf8fa5aa63adf302bdaa8ad8810ff279e43459e","be75cc1ee935f783be39978de91ae196c16141d4096e16eb6d07f59583296b4b","be8c3cb2d8d67e63c8b069920b74c6272922febbc6a0a2c4a0072a7a213681d2","beed0f36d9b1b9a20bfbf89c96862482b8d5b9d4284bc89539efe9c9b11f000d","bfd21b5c8eb26e9d475868bb30d66ee08f20876e9df5cd06aa8fec01ffe666df","bfe97e65f2cbe6bcd0f14ff57ea4dc1dedb2e5f0db92d04d0982cf1932ac1c3e","c112d36ba38c362da1c022945db5b6bbdc3014685ca9bb7d940f5086f00a675c","c23cf45c1dcb748145d87f5c173dd3c8becaf9e3f6fdcb3e2ca91d6726b0842a","c29b8d250a7b5e73f4ef675329da2251b8de032501e4836445b6aafd90c645fa","c329c9df0dae8a036da9be440432d045be3ee13cf5664cfa6ccf11576ed11acb","c4600cd5358b5798a075beb54539d952f200def1c9a573bd237c795fd33ba36f","c6752cc3c7ad06d1e9f127365f078919ac46b77f8a8fe413650094d914838ec3","c6867ec30530fd3feca89a4e968522f783b636b165ef74f288c42dd50bd51a3d","c6bfbb004af355e96ed5b4c8c9b8b7a96d1c08d24bcde7c666728eb9497d6d71","c8bd340e6fc7fa3e97415f7ad4c22c51d88c6e77f782c12923e841c04d3f882b","cc24c3770587f2421514fa399d2617201752bdca145ac39058de91d45d3d19c1","cd2da00f6f1bad8fb7c1b87cff80e122eb017e44a471cdea769efc67db369038","ce887fb65b6977a2046e7583d704863624e55909ebcc9c3ed065b3d13079a410","cf9223c369b6fb7baa52f301f904352ba8e8d5e4c2a06f70de6ef1cf76fe1b84","cfc3b5044af37ae7485fba8067dcb22b2438bdaa6e3a30c22ce0f9e2c00aa597","d0481d9b6111ab4afba0462e88970b863284807ff44ca97364c84952e3f88583","d0973a1aca6a118375b466d6e91821f8450110fdf042ac848ee16912012d2b0f","d0df3068db679e24d9487ee09a6462ac5cf3df30f46ee466b66feb6dd5ff71e2","d227e0a73e3c5452bc5ab41ea2c695dfc0ff9b0c1c81e59ab3173f796a4157cf","d2cba4dbbfe3d026f825a8b470a2f6011f9b8e245cf042ae8889afbb17dac6b2","d2e4c515093f8a2aa824c8b542a016e5c321065f4525931b2fac4f8af2fe52c6","d31e8aa21d1498f2d4a07c4cc89ea6f5a6d3ce54d334dbff230e0f55db35c85e","d37de74aadd5916eeae243decf347821c4e946356b9f70471658638ac3092f91","d49d02cad8bbfeac607457b08aac6068916ef45d8f6c980279d6e654407cc7be","d4f51c31a454d9abac29457cbbc21e1b5767c0eac1b37c41ee787a3efb05c80f","d5c084e12da4a5111487c166b879042a21a056f761ee22d9237cb4f65f366341","d6077d547aa21ea10a9bdf6c752b8d1a0a6382b4b43a0fdf790f245e66a609fc","d67e8c1aaab1ce6ec1755599ecde153c47c6b90dd4c301663abe9057bc31af57","d6abcc1484c3df45bde915abf48324af1e995c3266a3c6c069e98e94c8d9a4d7","d8ca8e025e226ad6bdd32a6a9fceae2982b0413a0ad09314558b54bdc724bf99","d8d03142030c11a0aa1012102fce2b202baf88e424a1236832937e87450dc579","d9823dfddf6c507ec030fce4bd2d98fbda18e595c2ebc563574d9196cc7a5e33","d9b0972f3406075b860ba7cd2e71d4492c826960319b10389c2c2820e2981254","da37a61fab07ec8856b725854e4064f55a59149aa69cad1bcbf89ec478b9f578","dad01e5bfb13a6c4419f4d24fa8dbb424e93a1c4be656b0e5dd48ac546e0a0d9","db21a75b4fa6165f75268963474f3262124795d816ba80f685bab2c6eaedb028","dd97ab52fd89f42352c595ce137684cc519c473fa17969e8a6adcde7322a4748","dda0a34d6704887eb36bbc0173334b49d755cac8cea3bbd17bfa972f04183dd4","ddbda9408727a19a4a55d516bed99331edf67d8301de9c78564716465c949619","e0288c94ca9c16a6de217e6baeed720fcf83e401bec45bd15ca47ba8fc9b44dd","e1667469384ec775a3df665679cb3fef057dc84dcb18ed8db8b9c5723835968a","e16c328504278cfe520d6d99990f2a4370cc48159aba86694d0f7598fd4b0611","e24df071f5325bb3a5b20f355143556bc7712535ee8b6ce4c426598f06fd2448","e28d8e6b71264d0bfab853e63178f2c151367cce0dbd16125596ff3604b6658d","e2c734504d211580b4e6674eb1c7d31fb6fb730c037210c34c980a96f9098269","e3f19c383354cdf45311f92f00b90fed25dfba7e9892ab2f5f3aa4885876b75f","e409fbfe439455330c0fe003de860e30f7093cc3cc83a32f886c9b539a29f60b","e6300ee8e6c2c4ce6d7ab02b7b06fd1cabe3c5c52b99a6ea3ea8b5acd5092e0b","e734d068446591aba283d136c21b4fb0209f91352cb4fc6589bd651cdbfec163","e7a333109a7aaec2b71048868500c15e721900628eb48790dfeaa1fd4c2dabc3","e7c9175fbfd9fd84bed95d552bc0a439b07a233c3e91fb39ae2f23197ee53f1b","ea1b8a251ecc1fd96697d0c602d3e14ec46383d27bb9485a0326cea5576ffacb","ea311dca2ef14e02b9aae563bb28dc737b04b7f01c1ceb2be3d92007d2c74ac6","ea8e5b79bbe5329ae8437677c8316f2f9fd75bb1d40c88308c269140a7e564c7","eb996138bc91c0ee63bafe1ba10b130ff5a2fc82aa4918296222e0a831a569fe","eba6e8e5a12a86f17fade41bef365aa95491c469e18aa91aef64908a4263c905","edc160a11c07dda8072748b66db7f27b6cd8efbd1faa3f6c826a0fe445859c17","edfcbe4773eac1fe2964179a4ad21294efede89568f2efd8e283ac18bc5693b1","f0f90dee84db760cc1bb0f6e6983d4de0e3d5d9f4adf7b2b52f0d3dbe6d585a4","f1d4a6e98f41ab3f6cfd67cddeab9d0ed287b92cb3dbe575e3ce61925510a792","f21c3a9267110e469f224ac7eb76ca5bb084fc90df014f1ca6791d5770483944","f379a1b9e29aa7fc25c4c0c897eaa3c0e90d66a201a0ade8cbf523a5cdc8cf50","f3e04891c79b604f9235f438adfa49ee27db43d25c7be0d1cc06ae53b8f6d2d8","f46904e701174fe2850798d9e1b077bdac42fcac01dbc385298da01118c82aa6","f53265f53af0b0856911ab08b373736964d0c443e8ba61d7f1d45f5e5b04edf3","f686173d310f41e26e3fe8a7c1dbf4313e4d793323335348badbcf4633f5d699","f704c9c9e2cab1ed44578f48d161320b5fb4384ecdd8b40a5e22c4078a8594da","f89156489d35f9992d5971a52a6e03a7d7f095e15c2c782e85efb1408a2bd6be","f99ef6fa3c9c6bf572ec69eb6eeea9f88ce6590d3a5565bec62b001b6f2a376a","fa2dfc22b4fdbcf402a822e8dd376925655d997a0f96284a60f10665ba3581ba","fa3df5f8349aec4805bbcd279b88697def63f2462d8ada0b5fe1d9983d9a6daa","fa6b97cbca1d4f09662e706293b0aec1eb76b8e2277441f54ab6c548b5423236","faac0c3fa7cdf67b452d407e9a1db5cbe1e9140ecfe300200b0b0a6279c97c66","fbc8b53b5c6f3727c084e5e0429e410a3fed5a17e1a0144692fd196d9836a4bb","fd04d7588bb9e6ca0a8b65ed0c9635082a9ee5f46b2d1b5b25866a072236c1fc","fd60f2a432086c6fc4a4c39d8d2d6edf5794c763c05a6401db2bb5fa2c601775","ff532716738e2fc716c10797d9717f324cca3a1234320a84a73a0b89569f11ab","ffd0fe3449e449c7b9fcdcc7e2c1ffb677e57ad935a252de88a0122d437efa67","ffde5c700732beac27a9b5162213d387422ce199400e56d9cefe550005b6a542"],"schema":"fsgg.atlas/1"} diff --git a/.agents/skills/atlas/assets/seed/records/7aa52373f2721dd76fc8eeb3d6061794f27ea8d11e96bcb1ff25a97994a77d5c.json b/.agents/skills/atlas/assets/seed/records/7aa52373f2721dd76fc8eeb3d6061794f27ea8d11e96bcb1ff25a97994a77d5c.json new file mode 100644 index 000000000..b0de5caf2 --- /dev/null +++ b/.agents/skills/atlas/assets/seed/records/7aa52373f2721dd76fc8eeb3d6061794f27ea8d11e96bcb1ff25a97994a77d5c.json @@ -0,0 +1 @@ +{"citations":[{"path":"src/FS.GG.Coord.Core/TelemetryStore.fs","repository":"FS-GG/.github","revision":"96251bbe00685b62b13a7998599c2ee3f7b189dd","sha256":"964efe1ad5927a91c7ea164422d8217fb17a31a578ec7e5f26a8ef76bc320959"},{"path":"src/FS.GG.Coord.Cli/SkillTelemetryReaders.fs","repository":"FS-GG/.github","revision":"96251bbe00685b62b13a7998599c2ee3f7b189dd","sha256":"2da83e881c4d4a45f7502a6e2c9039eb322c207d66e58f0eb25940af01833102"},{"path":"src/FS.GG.Coord.Cli/SkillTelemetryAdapter.fs","repository":"FS-GG/.github","revision":"96251bbe00685b62b13a7998599c2ee3f7b189dd","sha256":"5b73ddfa9b95f81243f0c854e017092939bf3ec8aaa5534b4ce5f4e392f1f452"},{"path":"src/FS.GG.Coord.Cli/WorkspaceTelemetryApplication.fs","repository":"FS-GG/.github","revision":"96251bbe00685b62b13a7998599c2ee3f7b189dd","sha256":"67812f77da121ea0639e409bddb33ff390876f8bf3080f980e29d2fbd8050c20"},{"path":"src/FS.GG.Coord.Cli/TelemetryStoreApplication.fs","repository":"FS-GG/.github","revision":"96251bbe00685b62b13a7998599c2ee3f7b189dd","sha256":"4af499d349993e33609b25738e116f159431f9370275eca4ad08bea508e47397"},{"path":"src/FS.GG.Coord.Cli/TelemetryApplication.fs","repository":"FS-GG/.github","revision":"96251bbe00685b62b13a7998599c2ee3f7b189dd","sha256":"15e6d05562e0ff0d19a38129f39a6ad70d5eae8b071d2b92262dfbf877d8ac51"}],"conflictsWith":[],"id":"contract/passive-native-usage-observations","kind":"contract","recordedAt":"2026-10-18T08:39:36Z","repository":"FS-GG/.github","schema":"fsgg.atlas/1","status":"recorded","summary":"At the cited source candidate, explicit selected Codex rollout files share the maintained native decoder and project actual optional response counters through provider-usage-observation/1. Item, inventory and terminal attribution stay unknown/partial; these canonical-only facts never enter qualified item totals. Stable native thread/turn/response identities, a finite serialized producer index, private pending intent and existing immutable spool retain corrections and exact replay. Local enqueue/reporting make no receiver or App Server call. Existing remote setup has an explicit capture-only flag that skips only credential presence and reports receiver unverified. Same-owner state cloning/migration is unsupported without original state/fence reconciliation; the supported production route selects one association root. Receiver admission refuses cross-owner changes and numeric predecessor ordering holds later batches behind uncertain or durable-but-not-applied receipts; unsupported or rejected passive data remains pending. Source preparation alone establishes neither compiled qualification, installed producer capture, receiver compatibility nor restart/restore durability.","supersedes":[],"tags":["telemetry","passive","native","capture","attribution","delivery","corrections"],"title":"Passive native responses separate capture, attribution and delivery"} diff --git a/.claude/skills/atlas/assets/seed/catalog.json b/.claude/skills/atlas/assets/seed/catalog.json index edf79eef6..56a0d5fba 100644 --- a/.claude/skills/atlas/assets/seed/catalog.json +++ b/.claude/skills/atlas/assets/seed/catalog.json @@ -1 +1 @@ -{"records":["000ada42299601fba29016e5c0e0d4012876fb42670bb10fa0b1315477254ba4","00641d046d6869fdd0023ab3df99e0e67a6ea28f0dcb701f622b1cec8b3e07c6","026b08fb343aefe19177e95b759560d340d372def4b71acf613fefee3438ade2","0357495d23fac4fad210b6dd7ed7cc57dd33d107e1659a81f085cad78300797f","036c148f6d0e89858c9bf4cf380272ca6904bb4ca277a909fb71c47f5450cef7","04e404d89dca295564813149472b1de8e6c43357e2f6d91d169ded7600ed3a02","0509e5c6fdbd2dde0c0db8558647080560714804d00e4f9268342f2e84858a3d","06ad2c8aa0ff3b862edf3ba99e0e4e8801ee163709e66333cd06c3fc61232b05","0a6d7dc5b64970bfdadc9049ace95e8bc163fc421beea70129ff0eaa692c6d06","0ad4403c8f4078dbfa543310c69bd1dfc768e305987214ffc37d7b2600c4687c","0c22360d4653eb0f450e4d3d34564875f1660cfcb2d546095d98b3faa3967cbc","0da4d093b49c0a1f654b38008bb01195e816829279ca1989bd2448194e15361b","0e560af7d9dd2e0f2f588a74cd35512973747f20bdfe0bee0bc889105ea53dc9","0ea7107c2c8edaab3ff2bae32f63cfbef6903a51cdaff257278f757ed5ef429d","0eef4d717eb03f0906aa3be7336aa71f831726afabe8a56077b76f6e82fd08e1","11fe30832d93706c60efd836b09f35f049c4a715ad6144cf277ca240c5780704","1244d27db0cf5075353bcc622d0fb3b5ca6a7d08526e2c5754e8b745c250bf3f","155fe673b8ae12549c978e1bf1d5c43e360937fcf2135cdcd5aea6f6c771da44","1945f527afc3c2930ec4d7fa57ebb2ef7dd6321c0dd3ab9233c9963e9e613165","19d657b67672257ece127f3b957674b7fb4780843148db0a36a0b329c2a418ba","1a24f6ef0c08a898f309c1b925fc19b29526f913a61a1dfe4b1a4308ebdd97ac","1b5351b2dc647aba864e387168db5128435cb80da94fc42581cd60a05fc34b9a","1da011289116fe88fe92cb8f0e83ed7ccbbca251681d4e136c5a61c40364f8d3","1ec9445b242d2a2e149fe71c67bf13d8c0e4ebe5a6ed7b022656b9941973909d","1edc36731a9c76ad07d269d8b4fd84c8c956bb43d6f56de17d6208164856ffbe","20901b579f69cc97eb56b492938864667576e1c9bfacf13f8a529c4f6e543448","21338155cb4f52c49e5072c877771be67c75590d9b238ea025fba5209fd6e018","23af79bd1e7995fc8162ddc4d830318acb054bbfcc9c7d5cb141ec306da67386","24d4f2730d94d1b7f149771ef0e59192f4936d142b21f4a56b1a391e4514d38d","2591526ddabbea03fbdc38bf172bc54f42df9bc51eba7ad2b70d6e67215f08f1","26259abc7fe745f52e06f2aa2abb0e50f189bc7608065f04d5c669a0a99941cd","26290a0990d6dac0ce9448e05eb934210603356043dcf14a5d80585288e2aa92","26d6b31965013079d4db67a2c403e01f21e3c30ae65953400dbed92e289a0925","288daf614247c260cb673d8674e8b3874ccc4e269347836851f702d7ac8e2f7c","28abfaf6d50ca38af0b88aa50524200c17af9000da83ddbab3d8f9e06e020fa5","291d3db272eae084d34c04bc1305f2abb26a7e7acbc5515208469b46719a4ed1","2a38ddebfe3380232e35d5a24f9cb9f7c38abbc9c68add4ea5952c1e65d328d2","2c76ce93500601e281a41f5985fe4e3926fc8bc9d01ee687f14052cb553ad2d2","2d599c722a08306b98f2d833fb3e4a7acb9dea92e6a58820caa2f65c09803fb8","2ecd502add2d801eebed39411fadc9a80098ba9ce04a5f4b728a0e4e331232d6","2f7357367d921995f4c6fdaa693392adcd2df4860ef4d25c8dc47f7ddea8c755","2fb2ed7902a8e35dc36489a23245d963026d688008c92fed6fdc1f6bc27198a6","310bfb5b2d061bb733771e5cb7b3b7d25db43af5eda9f806169b7ef9330c2fe7","32f69a7b8997ae98b9305ee578145d795dbcd39ca4469bf2465e57a0295cda51","335683e33b94cb86b5e426b4faed200673bf850151191a08458136ceb164fd4e","3407ec53a884d3945d86a88d6b9a883419dd426e96b1108a8e6686f30397a629","34463778cf2d29e3896a65613cf9e3eb3e9f2d8946d17f12b609e70eec63d128","35da3938b72cf3520e126ad595157104b69ab748904c7b4e12f563d6b103172b","37c8908ea2a349cd3034018027160ad810b28ad1fc203a9a353971e1f7396b4c","37e39faee019bb041627510f1f02746ba9a85696417a083b438eb4974b72c2bf","38a75fd804821f4836f0a7ba8d41af3d3a3a5f5d7dcea68487009297824258d9","397476cf107b48e7a662264f8fea9f880231fd3d1e0401622650f214cfaa35c7","3ad8b0398ba6c354c9e31b7438b2515579fc0b1f17de4b35a914c862a3a11e3b","3b3c6cf083b12a840565e00458e2fd4ee8a61f97cda452703a6b13d7776b6c13","3b4af144afed3d52dd2e1f64e23bc25b3475eee5f7af3bde9886761b15c33dfd","3b5d82795e9f5d1992ab67e078fcf1108247ab9b6d1baeac944d3ec0294cec5d","3d0274f77576abdbdf442c8843e955e1bbc91e9f8cbfe3646b119337cdb13c96","3e2f66baa16c7ea936eba34720a55897438f60b343cbe8fda4eab1e5dde044eb","41c768ea17144c6ec225e9a65d4c3c127fdd7264dcba1a89aa17b20fd5d7e3ee","42aeb46fcc3d10b95e4067bc9cda875fa933b4102873f67c7bf1f8ca6799a598","4320b92712bc14dbe10b56f1cd3d1bdc093fc4be6016732839d0be4dd4d027d3","46cdf2c207f79d388001f6636dfb7a98bb2ba72b9d1c6df4938f0a27691e07a6","480f1ede18ae031b164d49d676feeb1090fb33932676ff52e1e2eb24e8d154cd","48797c44c92cb34fd9a57a08020b45c6920b2268dc8ad616c0f814a3710d5316","48d094622ada1806cb30335926007c1abc476b1f7b45a2e250c490afa25e847b","4a724a6a842a132c2185279513f341b79f9be93e42660f1255770eeae3b1323c","4c8c327dacf345e184042092e96ad3ea02ed4cece57dac5fa68ea52fbb5a6adf","4d5a44ba07fafeab823b54a21846269330ce35b4c190f3ddd5434bc8530d9b41","4da0a5be70e8af9c39623deac83822749482187f6a0fc3d186dcfddaa7111576","4f1e58fc658a4ceda181e2a7fa249305b09b573ffd68c2489f204f4957224957","4f2750b974c1404acb721ffc84cbd1d0756a24211dd6f6503c10ea74dbc45676","509ec9c08864b9dd0029f32ffeac85fbac863e2dad459994c65b7cb5264faffa","52049cc9cee43bb27229e6b3e983e02c6aa20dd7d153b13e3c74bc6d2b47cf92","5382c901d160ca2d79888d8acd7a690a5349826b5da486274b0800c9d7513f11","540879695d41205515aaabe5466971014cb43b960a26b8e5958e37fed63df762","5560616d1e72f0a539f9ebbfea3b7d195c1ef5622f97994af1963748d4f97533","556ee783d8e2e4ca50f656c095758be613983f904d998a6534fb155510114f21","55a4711e799294d06988ab4acf77eacd7d424123082bba3ec987dff0ae13999c","55ae095961d78a1514c4dd1e63d477c60179a8662571ab5a90abd3eb2b83eb10","56e7158313357bb145bd98c5f790e569be2203fb2601565a30091a597a7e7ff5","5962dd14d3923433cf723d698d1af19ac37a270b6e88445643fc56a646faab5b","5a2064cdf51026eed65457c05f34bec919b31d96d35c29498d298685965f0b5a","5b77bd6dfa81cc339e729e4195e258facbfeb64b9c680512f742e3fb1961fdd5","5c3527e43fe24c5aa171c6fa4a3de7fe5e78f2527aed0dd19cb21d154d43da21","5c79c77f00167ca140127b00f1a79e1ffac621e46fc461089594206a7df8d7cc","5d015880319af666943e68169ca906bf2f0c813d8bf2c5c0262aeb5a40366350","5f2a75b89983d1005a38afa2cabccc3a39f31989807120281d8505ffd564e0c6","5f4fa6dde5930fe1b42f805895f0f5fb135c2b3ff9830f2bd30ae7526a3295a1","630fdcff1f227b5baf5d10bd78ef0fde68791ac0cd8a15f65065f5cc4501b17b","63113617f2e4ee6b827a69bce6afb3949190a282f5feaaa9e2c9f82372623bb8","63544fa69b09916d52b305700eb9816305ff22b77162a44edd13897acea3a655","63a4394e689acf4a4762cfb4df691d05f923fdf592fd2f8ea41e6a54f98d1136","69ebfc7eb8427db3c5c59bdde652d0cb269426126f8540b1b58caa29ccf130e2","69edc4285578313d1dd2f914d69add075a7b354f7fba717606d1abe15292576b","6a34d9279cae58765d6ee4a980192c0e15f3ca217b9f1815861d472a281b3cf8","6c3c592efe9c684ada5661b8cc88a5c3f6e57c841db06b9e070687504cbf6236","6ce6d164c3e31463fb9e144fdf91413e55d077cfc4f25092bb02923fb538a84f","6e08a638e1e28020923effd4c65fc517dbe7b06100ff76cde74e427191503b84","6f3a7020233cd77cfe59eefec0a277f6dda323743c8d80e4e54a95cd3cbc23cf","6fccc6f0c5fa71c43211785dced8abd0f3295040eab56063f4e8d77f1c09b8ef","700cd21af9ed7e81900fad9d52de2fb11db48e64b038e4293168f85e5dd0e043","702d1dfa75e92a916a446429f474d4c296e6ea4e8c487995852d0525e8440659","704cf778db6086c3e282c81249fb0ef09c1d7c2043335ef74c7ecb69bb3e84ad","71ef1ed2d5e4bc7eebe7a73bb3e9423e5bc2f8319186380fe8b38334952d3b01","7256ba00af1cf759b95b7bf8ae3b9943f31349bd10a7652a26bb419b368d73a3","7369b339daca0fcf46ac7fe82d65ae95c75d7dbcaaae51209e6d90b6587a014e","73ec844fb3e2b9febd00ba37508b284fad141630f03cb9f74e36a195180f5054","7410de003c7b582e30470d1209eefc796a70c76fe8d61dd9ccfe01ecfa41310c","76bf5a9c126db6eb466287a7c0d823327ee9882a70eaaa6efb03d169b5dba808","781a64598efb2a11156f07271ba1c14c4f6b3d73aa2943b26eae02063df7af70","799abc1e8d381b8d97349479139985e383bb49179b5a80f39807cb35a3ee78ce","79faec494bdd6d098c9d2a9d8559f822938c6b2104188db95321d89e7a732979","7a032dbf0351aa32c77c8d187f7eb697500ff186c88c5946ecc15adc972246a6","7ad4ef4b8d3221758a9e7f9577750ee03f6cba11c8eae8bf25f74a3131bd21a2","7baa35131ece7ed9860607157d2531d4d70a061bdc9bb9876e20328f127cec53","7cbf970a11bdb91a40e248eee97ef789205910ebc913349698fc75ed35e82fdf","7d6133667f81aa66a98755d253ea43301b45ada338225df034d2ffdfc79829e7","7e89b59b456dde4bbbdbf8079665bd82c51d8e500018472981c15618b3893959","7ead0c68ffa0ced241af74dde58b3831343dff3f7eaab64bddb9954545b7ba12","7f8188b57ad3b0c28210c95954e5623376a4262dd5e75f002700c6094b8d6b6c","7f91dfc2ea1a3131c4090375db0f489c2a572e245ade6cda4ebd440446d6d60e","7fcb8cba3ed0ee9c342947aa88f0f699bb4f5c23244d21c6c739c9b66d7c6101","800060d7b4934508d0277f90a464e3112fd2fc99af4ef23825d09b0ff53f91c3","800a802a4ce9e597a102f0a566535c1f9f7adfc60c41af6bd2db4fb7fe3c0d0e","820c12fcbded9048a363b9e0ebbc48b24f85fd4a68131b5dfc1b19057bf09ddb","82c419e5de083e423330432c9d45c744043d1bccd8eeccb41e3014ce9ae3c32f","8343a4211a4d0ffdb320d5a4305174d85bb707d15dad978f6436297d022daa11","83a97b9ebb29f5cd014ef5e178970a601ee92c44678f05d1860b383c5f63b79d","85a962a7c23c14dff8d683e738b53f422221697b213cafeb616d3a172a6c4223","8629fddeb4f273b35df69d4d28923adc14eff59d919b1a495d1a68818137c561","872ab2b2d65fe685b91e355f5af051c85b79569ece16448160d01fef38039624","87f2b3634baa504f2ed9508c6cf6a47bbfb36214a177eb13d70d6a987706818c","88b615ef6a31bd9958e98b8ea522f49f0360ccac5d9fa8deb9e3ef3fe3147d9d","89cafbb20d6029656266d8cb0f85103fa519c8032598282fea58c94cc59c4125","89f2105745b3a7cfd30e7d7c598d6c8fdde0a599f30fd0db7382cba50412445e","8b3eec010d1eae43a28c88434f2410a751f790a9d6ec4a08e75e68c171629ab2","8cecfa09651c40be4d7c11c117c80e1911dc75bf6f1cc34be64706823cc024c3","8d250acd40c8a24ba0d51cc73e65bba6856509b5fbf4c7d7a435897a01c6e764","8df1420c27503370db9382f68a0af8d2b4d56f9dbc94b24ffae450a905083a79","8e7371228a726f381fb811d1d812c39917788a3df7e53dba1a3c364e755a0c03","8fae27ba5117e202afbd523b249fc454912571900fc909f5419b8ac96c773c44","902b958b4db7d8d8bf73a82a8aa86e5485b39477047c8ad60175d118fe31d987","91c9ced5e9ab8da897b7f69166a7d0bade5c58d511b42d60d5430d536da45d09","941f70c384905ab77cb9a88e2671301117e4df553da6fc7a09210710deb9b6ca","9442788fa51227044803f1d3efdfc1c2b2da372871a85f0f7a6bb3596a5c003f","947a1cdd43831936480167169d30334f818bb5d882650a3547827c05204af111","971f59cc197732d0c0b6b8aabbbefca4550fb8fb04f8522bdb4257c05a28848a","98a097d6ebb754334250dfd3ccc5f3dfaf5966524758cbfc9e10adf4a0229693","98c7e4bc2f05e9b4ca703db4a02347db7355a44f04e3a4003e26c46a56bded2c","9944d1a9674e555a41d31d069d136461eb06dd4052d40f2e4ea4368dd978e01b","9bbd03293bf53e9db51401d157b3eb2aa51e9c70449350e98b9a0a3fc9a684ce","9cf90b3aa59f3ca0e40fd9e1fec9703428752d63bded6b091d28f614c9ba99ae","9eb67ea41c5bcb9557ba51bbbd1b321a78f16335cadebbed848d8e6c1fc68bab","a0ff0d0bb3a3c801b637d091293f2eeaac68e934274e4116d298ba60ec3461cc","a1baa1f699fd4ce19e8ef6cdfe346e1b0be63e16d5c5cd5feddcccb16a62f269","a3c84d76be9d891812e795dd46470c2978dceeff928d729c0d5dd6def599923b","a64e8aee389ae696d0d4b045c0153092113fa522ed5a0fd9b5658b8418db4ded","a6c531ed9bbafabfdd649f3030daf2f24461163aaf99dc73bb24dddb77bbcb90","a7ff7302e668dcea1cd1db2241ff95c0d73534539bd03fdefebbfb57f60d3849","a8b4a33078335d2811bffb78eee49aab5fcb31597dae366d43e20c7f7800994b","a91a47fb4fa5c1b1a834fa602030e435ad641240e6ceeb99eeeab7341ca09dec","a91c8a1431a4120667cd523cf56bac004794fc5b8b24275ad2f9c8a15c75fba1","aa131e74e695292adab9f57b3ccc5a503a836dd4b95a3b2b107c69f35dba3637","acd7884bca46ea9422503cead985691da05cca25bd5ed52a199783cae7b8b01f","ae69fe306bf5db346ddfa4367cda24c95e44213baca27b0ee7d7167bcdd85af6","ae8c200dbcea29f43b29974cc247d70647c80d5d76385396f1c82ee9f669e2f1","aec13a075b84253397fb97e1c93a23e1aaee6d6bff2a9161bfd00a5b1d7611de","b09355a97e3aef396f681943b37a404a98fccc6bcb97781eddb2fc000d1d985d","b0ecfca0d114bae34ffa62ac3ea05159a4415fc6eb73ab1fcc4d79f657268f19","b25c41f19ba40e646fd9b6f82051ee4c38985539e445b26bd628eae98537df53","b262187aa66e8a97083bf7f79b91595bf7a4077abe7f8be5b00b4998f4579d20","b4091f93c3d96e36b0708f5dcd46e0e7a0a48f098036ccef6164e4a6429ed94c","b4093c67a9195ee7d28d2575e967ac80057b92339489c244243c7c504c669ff0","b44352445272089cf90967d4d413cf7009bed0ac19f3fa95cb831d5ebad081c3","b4ce73bea5219f1b27bffb36c6a9dee14447a710a8938db807770083db4552ac","b5102ef50e7d4ed1925af5a8b45192e737df02fafb75d7065995a2bb93d2e8e1","b5428b5775526a00645566822530fb969b82247ba83f2c80c06d34151e1f9061","b6cf3b02f36e0efa93b04667cdc5701340033a09e41a7196277cf6756999a666","b77c6669bcd54e0fa949faf2f7205f2631acfbc1ccf79f93f8dab5c5717f0e93","b7ffd6cddb12384224772e8de79aec89d8f4bca966a3c2a05763889f92a6db5c","b8abe10a2a92bf537a49e8dee92baf8de3ed591848a1b25151dab0d7ab3134e5","b96cea09313d481dfff1ed1a2c552ea29e8fe68f52139458996a4e36157748d2","b96f9beb6d6d8fbf88c4b8b2b807a362f2640479cab6173cf64c7710817785a0","b9ad2510d8249ec4c8e7fd8b2471727aa1bd0ce8f3dde78e545fb2f8f2985a1d","ba7d7464da8e13722232c8f86273774054693681becc450a68aea21a5a0e9b91","ba87e5d43ddb10937bb17941f055f80a223d0981fbba44107aeec8530e3a7774","bac3431138e986d6426c1e81bdfe0a968394896c0751cbbcc8f36002fd0ed069","bb230236c4ab6353afb4147014c93204d3d1eb8a6d18558075df5fe79ed7f392","bd714f38c881208f1190ad714bf8fa5aa63adf302bdaa8ad8810ff279e43459e","be75cc1ee935f783be39978de91ae196c16141d4096e16eb6d07f59583296b4b","be8c3cb2d8d67e63c8b069920b74c6272922febbc6a0a2c4a0072a7a213681d2","beed0f36d9b1b9a20bfbf89c96862482b8d5b9d4284bc89539efe9c9b11f000d","bfd21b5c8eb26e9d475868bb30d66ee08f20876e9df5cd06aa8fec01ffe666df","bfe97e65f2cbe6bcd0f14ff57ea4dc1dedb2e5f0db92d04d0982cf1932ac1c3e","c112d36ba38c362da1c022945db5b6bbdc3014685ca9bb7d940f5086f00a675c","c23cf45c1dcb748145d87f5c173dd3c8becaf9e3f6fdcb3e2ca91d6726b0842a","c29b8d250a7b5e73f4ef675329da2251b8de032501e4836445b6aafd90c645fa","c329c9df0dae8a036da9be440432d045be3ee13cf5664cfa6ccf11576ed11acb","c4600cd5358b5798a075beb54539d952f200def1c9a573bd237c795fd33ba36f","c6752cc3c7ad06d1e9f127365f078919ac46b77f8a8fe413650094d914838ec3","c6867ec30530fd3feca89a4e968522f783b636b165ef74f288c42dd50bd51a3d","c6bfbb004af355e96ed5b4c8c9b8b7a96d1c08d24bcde7c666728eb9497d6d71","c8bd340e6fc7fa3e97415f7ad4c22c51d88c6e77f782c12923e841c04d3f882b","cc24c3770587f2421514fa399d2617201752bdca145ac39058de91d45d3d19c1","cd2da00f6f1bad8fb7c1b87cff80e122eb017e44a471cdea769efc67db369038","ce887fb65b6977a2046e7583d704863624e55909ebcc9c3ed065b3d13079a410","cf9223c369b6fb7baa52f301f904352ba8e8d5e4c2a06f70de6ef1cf76fe1b84","cfc3b5044af37ae7485fba8067dcb22b2438bdaa6e3a30c22ce0f9e2c00aa597","d0481d9b6111ab4afba0462e88970b863284807ff44ca97364c84952e3f88583","d0973a1aca6a118375b466d6e91821f8450110fdf042ac848ee16912012d2b0f","d0df3068db679e24d9487ee09a6462ac5cf3df30f46ee466b66feb6dd5ff71e2","d227e0a73e3c5452bc5ab41ea2c695dfc0ff9b0c1c81e59ab3173f796a4157cf","d2cba4dbbfe3d026f825a8b470a2f6011f9b8e245cf042ae8889afbb17dac6b2","d2e4c515093f8a2aa824c8b542a016e5c321065f4525931b2fac4f8af2fe52c6","d31e8aa21d1498f2d4a07c4cc89ea6f5a6d3ce54d334dbff230e0f55db35c85e","d37de74aadd5916eeae243decf347821c4e946356b9f70471658638ac3092f91","d49d02cad8bbfeac607457b08aac6068916ef45d8f6c980279d6e654407cc7be","d4f51c31a454d9abac29457cbbc21e1b5767c0eac1b37c41ee787a3efb05c80f","d5c084e12da4a5111487c166b879042a21a056f761ee22d9237cb4f65f366341","d6077d547aa21ea10a9bdf6c752b8d1a0a6382b4b43a0fdf790f245e66a609fc","d67e8c1aaab1ce6ec1755599ecde153c47c6b90dd4c301663abe9057bc31af57","d6abcc1484c3df45bde915abf48324af1e995c3266a3c6c069e98e94c8d9a4d7","d8ca8e025e226ad6bdd32a6a9fceae2982b0413a0ad09314558b54bdc724bf99","d8d03142030c11a0aa1012102fce2b202baf88e424a1236832937e87450dc579","d9823dfddf6c507ec030fce4bd2d98fbda18e595c2ebc563574d9196cc7a5e33","d9b0972f3406075b860ba7cd2e71d4492c826960319b10389c2c2820e2981254","da37a61fab07ec8856b725854e4064f55a59149aa69cad1bcbf89ec478b9f578","dad01e5bfb13a6c4419f4d24fa8dbb424e93a1c4be656b0e5dd48ac546e0a0d9","db21a75b4fa6165f75268963474f3262124795d816ba80f685bab2c6eaedb028","dd97ab52fd89f42352c595ce137684cc519c473fa17969e8a6adcde7322a4748","dda0a34d6704887eb36bbc0173334b49d755cac8cea3bbd17bfa972f04183dd4","ddbda9408727a19a4a55d516bed99331edf67d8301de9c78564716465c949619","e0288c94ca9c16a6de217e6baeed720fcf83e401bec45bd15ca47ba8fc9b44dd","e1667469384ec775a3df665679cb3fef057dc84dcb18ed8db8b9c5723835968a","e16c328504278cfe520d6d99990f2a4370cc48159aba86694d0f7598fd4b0611","e24df071f5325bb3a5b20f355143556bc7712535ee8b6ce4c426598f06fd2448","e28d8e6b71264d0bfab853e63178f2c151367cce0dbd16125596ff3604b6658d","e2c734504d211580b4e6674eb1c7d31fb6fb730c037210c34c980a96f9098269","e3f19c383354cdf45311f92f00b90fed25dfba7e9892ab2f5f3aa4885876b75f","e409fbfe439455330c0fe003de860e30f7093cc3cc83a32f886c9b539a29f60b","e6300ee8e6c2c4ce6d7ab02b7b06fd1cabe3c5c52b99a6ea3ea8b5acd5092e0b","e734d068446591aba283d136c21b4fb0209f91352cb4fc6589bd651cdbfec163","e7a333109a7aaec2b71048868500c15e721900628eb48790dfeaa1fd4c2dabc3","e7c9175fbfd9fd84bed95d552bc0a439b07a233c3e91fb39ae2f23197ee53f1b","ea1b8a251ecc1fd96697d0c602d3e14ec46383d27bb9485a0326cea5576ffacb","ea311dca2ef14e02b9aae563bb28dc737b04b7f01c1ceb2be3d92007d2c74ac6","ea8e5b79bbe5329ae8437677c8316f2f9fd75bb1d40c88308c269140a7e564c7","eb996138bc91c0ee63bafe1ba10b130ff5a2fc82aa4918296222e0a831a569fe","eba6e8e5a12a86f17fade41bef365aa95491c469e18aa91aef64908a4263c905","edc160a11c07dda8072748b66db7f27b6cd8efbd1faa3f6c826a0fe445859c17","edfcbe4773eac1fe2964179a4ad21294efede89568f2efd8e283ac18bc5693b1","f0f90dee84db760cc1bb0f6e6983d4de0e3d5d9f4adf7b2b52f0d3dbe6d585a4","f1d4a6e98f41ab3f6cfd67cddeab9d0ed287b92cb3dbe575e3ce61925510a792","f21c3a9267110e469f224ac7eb76ca5bb084fc90df014f1ca6791d5770483944","f379a1b9e29aa7fc25c4c0c897eaa3c0e90d66a201a0ade8cbf523a5cdc8cf50","f3e04891c79b604f9235f438adfa49ee27db43d25c7be0d1cc06ae53b8f6d2d8","f46904e701174fe2850798d9e1b077bdac42fcac01dbc385298da01118c82aa6","f53265f53af0b0856911ab08b373736964d0c443e8ba61d7f1d45f5e5b04edf3","f686173d310f41e26e3fe8a7c1dbf4313e4d793323335348badbcf4633f5d699","f704c9c9e2cab1ed44578f48d161320b5fb4384ecdd8b40a5e22c4078a8594da","f89156489d35f9992d5971a52a6e03a7d7f095e15c2c782e85efb1408a2bd6be","f99ef6fa3c9c6bf572ec69eb6eeea9f88ce6590d3a5565bec62b001b6f2a376a","fa2dfc22b4fdbcf402a822e8dd376925655d997a0f96284a60f10665ba3581ba","fa3df5f8349aec4805bbcd279b88697def63f2462d8ada0b5fe1d9983d9a6daa","fa6b97cbca1d4f09662e706293b0aec1eb76b8e2277441f54ab6c548b5423236","faac0c3fa7cdf67b452d407e9a1db5cbe1e9140ecfe300200b0b0a6279c97c66","fbc8b53b5c6f3727c084e5e0429e410a3fed5a17e1a0144692fd196d9836a4bb","fd04d7588bb9e6ca0a8b65ed0c9635082a9ee5f46b2d1b5b25866a072236c1fc","fd60f2a432086c6fc4a4c39d8d2d6edf5794c763c05a6401db2bb5fa2c601775","ff532716738e2fc716c10797d9717f324cca3a1234320a84a73a0b89569f11ab","ffd0fe3449e449c7b9fcdcc7e2c1ffb677e57ad935a252de88a0122d437efa67","ffde5c700732beac27a9b5162213d387422ce199400e56d9cefe550005b6a542"],"schema":"fsgg.atlas/1"} +{"records":["000ada42299601fba29016e5c0e0d4012876fb42670bb10fa0b1315477254ba4","00641d046d6869fdd0023ab3df99e0e67a6ea28f0dcb701f622b1cec8b3e07c6","026b08fb343aefe19177e95b759560d340d372def4b71acf613fefee3438ade2","0357495d23fac4fad210b6dd7ed7cc57dd33d107e1659a81f085cad78300797f","036c148f6d0e89858c9bf4cf380272ca6904bb4ca277a909fb71c47f5450cef7","04e404d89dca295564813149472b1de8e6c43357e2f6d91d169ded7600ed3a02","0509e5c6fdbd2dde0c0db8558647080560714804d00e4f9268342f2e84858a3d","06ad2c8aa0ff3b862edf3ba99e0e4e8801ee163709e66333cd06c3fc61232b05","0a6d7dc5b64970bfdadc9049ace95e8bc163fc421beea70129ff0eaa692c6d06","0ad4403c8f4078dbfa543310c69bd1dfc768e305987214ffc37d7b2600c4687c","0c22360d4653eb0f450e4d3d34564875f1660cfcb2d546095d98b3faa3967cbc","0da4d093b49c0a1f654b38008bb01195e816829279ca1989bd2448194e15361b","0e560af7d9dd2e0f2f588a74cd35512973747f20bdfe0bee0bc889105ea53dc9","0ea7107c2c8edaab3ff2bae32f63cfbef6903a51cdaff257278f757ed5ef429d","0eef4d717eb03f0906aa3be7336aa71f831726afabe8a56077b76f6e82fd08e1","11fe30832d93706c60efd836b09f35f049c4a715ad6144cf277ca240c5780704","1244d27db0cf5075353bcc622d0fb3b5ca6a7d08526e2c5754e8b745c250bf3f","155fe673b8ae12549c978e1bf1d5c43e360937fcf2135cdcd5aea6f6c771da44","1945f527afc3c2930ec4d7fa57ebb2ef7dd6321c0dd3ab9233c9963e9e613165","19d657b67672257ece127f3b957674b7fb4780843148db0a36a0b329c2a418ba","1a24f6ef0c08a898f309c1b925fc19b29526f913a61a1dfe4b1a4308ebdd97ac","1b5351b2dc647aba864e387168db5128435cb80da94fc42581cd60a05fc34b9a","1da011289116fe88fe92cb8f0e83ed7ccbbca251681d4e136c5a61c40364f8d3","1ec9445b242d2a2e149fe71c67bf13d8c0e4ebe5a6ed7b022656b9941973909d","1edc36731a9c76ad07d269d8b4fd84c8c956bb43d6f56de17d6208164856ffbe","20901b579f69cc97eb56b492938864667576e1c9bfacf13f8a529c4f6e543448","21338155cb4f52c49e5072c877771be67c75590d9b238ea025fba5209fd6e018","23af79bd1e7995fc8162ddc4d830318acb054bbfcc9c7d5cb141ec306da67386","24d4f2730d94d1b7f149771ef0e59192f4936d142b21f4a56b1a391e4514d38d","2591526ddabbea03fbdc38bf172bc54f42df9bc51eba7ad2b70d6e67215f08f1","26259abc7fe745f52e06f2aa2abb0e50f189bc7608065f04d5c669a0a99941cd","26290a0990d6dac0ce9448e05eb934210603356043dcf14a5d80585288e2aa92","26d6b31965013079d4db67a2c403e01f21e3c30ae65953400dbed92e289a0925","288daf614247c260cb673d8674e8b3874ccc4e269347836851f702d7ac8e2f7c","28abfaf6d50ca38af0b88aa50524200c17af9000da83ddbab3d8f9e06e020fa5","291d3db272eae084d34c04bc1305f2abb26a7e7acbc5515208469b46719a4ed1","2a38ddebfe3380232e35d5a24f9cb9f7c38abbc9c68add4ea5952c1e65d328d2","2c76ce93500601e281a41f5985fe4e3926fc8bc9d01ee687f14052cb553ad2d2","2d599c722a08306b98f2d833fb3e4a7acb9dea92e6a58820caa2f65c09803fb8","2ecd502add2d801eebed39411fadc9a80098ba9ce04a5f4b728a0e4e331232d6","2f7357367d921995f4c6fdaa693392adcd2df4860ef4d25c8dc47f7ddea8c755","2fb2ed7902a8e35dc36489a23245d963026d688008c92fed6fdc1f6bc27198a6","310bfb5b2d061bb733771e5cb7b3b7d25db43af5eda9f806169b7ef9330c2fe7","32f69a7b8997ae98b9305ee578145d795dbcd39ca4469bf2465e57a0295cda51","335683e33b94cb86b5e426b4faed200673bf850151191a08458136ceb164fd4e","3407ec53a884d3945d86a88d6b9a883419dd426e96b1108a8e6686f30397a629","34463778cf2d29e3896a65613cf9e3eb3e9f2d8946d17f12b609e70eec63d128","35da3938b72cf3520e126ad595157104b69ab748904c7b4e12f563d6b103172b","37c8908ea2a349cd3034018027160ad810b28ad1fc203a9a353971e1f7396b4c","37e39faee019bb041627510f1f02746ba9a85696417a083b438eb4974b72c2bf","38a75fd804821f4836f0a7ba8d41af3d3a3a5f5d7dcea68487009297824258d9","397476cf107b48e7a662264f8fea9f880231fd3d1e0401622650f214cfaa35c7","3ad8b0398ba6c354c9e31b7438b2515579fc0b1f17de4b35a914c862a3a11e3b","3b3c6cf083b12a840565e00458e2fd4ee8a61f97cda452703a6b13d7776b6c13","3b4af144afed3d52dd2e1f64e23bc25b3475eee5f7af3bde9886761b15c33dfd","3b5d82795e9f5d1992ab67e078fcf1108247ab9b6d1baeac944d3ec0294cec5d","3d0274f77576abdbdf442c8843e955e1bbc91e9f8cbfe3646b119337cdb13c96","3e2f66baa16c7ea936eba34720a55897438f60b343cbe8fda4eab1e5dde044eb","41c768ea17144c6ec225e9a65d4c3c127fdd7264dcba1a89aa17b20fd5d7e3ee","42aeb46fcc3d10b95e4067bc9cda875fa933b4102873f67c7bf1f8ca6799a598","4320b92712bc14dbe10b56f1cd3d1bdc093fc4be6016732839d0be4dd4d027d3","46cdf2c207f79d388001f6636dfb7a98bb2ba72b9d1c6df4938f0a27691e07a6","480f1ede18ae031b164d49d676feeb1090fb33932676ff52e1e2eb24e8d154cd","48797c44c92cb34fd9a57a08020b45c6920b2268dc8ad616c0f814a3710d5316","48d094622ada1806cb30335926007c1abc476b1f7b45a2e250c490afa25e847b","4a724a6a842a132c2185279513f341b79f9be93e42660f1255770eeae3b1323c","4c8c327dacf345e184042092e96ad3ea02ed4cece57dac5fa68ea52fbb5a6adf","4d5a44ba07fafeab823b54a21846269330ce35b4c190f3ddd5434bc8530d9b41","4da0a5be70e8af9c39623deac83822749482187f6a0fc3d186dcfddaa7111576","4f1e58fc658a4ceda181e2a7fa249305b09b573ffd68c2489f204f4957224957","4f2750b974c1404acb721ffc84cbd1d0756a24211dd6f6503c10ea74dbc45676","509ec9c08864b9dd0029f32ffeac85fbac863e2dad459994c65b7cb5264faffa","52049cc9cee43bb27229e6b3e983e02c6aa20dd7d153b13e3c74bc6d2b47cf92","5382c901d160ca2d79888d8acd7a690a5349826b5da486274b0800c9d7513f11","540879695d41205515aaabe5466971014cb43b960a26b8e5958e37fed63df762","5560616d1e72f0a539f9ebbfea3b7d195c1ef5622f97994af1963748d4f97533","556ee783d8e2e4ca50f656c095758be613983f904d998a6534fb155510114f21","55a4711e799294d06988ab4acf77eacd7d424123082bba3ec987dff0ae13999c","55ae095961d78a1514c4dd1e63d477c60179a8662571ab5a90abd3eb2b83eb10","56e7158313357bb145bd98c5f790e569be2203fb2601565a30091a597a7e7ff5","5962dd14d3923433cf723d698d1af19ac37a270b6e88445643fc56a646faab5b","5a2064cdf51026eed65457c05f34bec919b31d96d35c29498d298685965f0b5a","5b77bd6dfa81cc339e729e4195e258facbfeb64b9c680512f742e3fb1961fdd5","5c3527e43fe24c5aa171c6fa4a3de7fe5e78f2527aed0dd19cb21d154d43da21","5c79c77f00167ca140127b00f1a79e1ffac621e46fc461089594206a7df8d7cc","5d015880319af666943e68169ca906bf2f0c813d8bf2c5c0262aeb5a40366350","5f2a75b89983d1005a38afa2cabccc3a39f31989807120281d8505ffd564e0c6","5f4fa6dde5930fe1b42f805895f0f5fb135c2b3ff9830f2bd30ae7526a3295a1","630fdcff1f227b5baf5d10bd78ef0fde68791ac0cd8a15f65065f5cc4501b17b","63113617f2e4ee6b827a69bce6afb3949190a282f5feaaa9e2c9f82372623bb8","63544fa69b09916d52b305700eb9816305ff22b77162a44edd13897acea3a655","63a4394e689acf4a4762cfb4df691d05f923fdf592fd2f8ea41e6a54f98d1136","69ebfc7eb8427db3c5c59bdde652d0cb269426126f8540b1b58caa29ccf130e2","69edc4285578313d1dd2f914d69add075a7b354f7fba717606d1abe15292576b","6a34d9279cae58765d6ee4a980192c0e15f3ca217b9f1815861d472a281b3cf8","6c3c592efe9c684ada5661b8cc88a5c3f6e57c841db06b9e070687504cbf6236","6ce6d164c3e31463fb9e144fdf91413e55d077cfc4f25092bb02923fb538a84f","6e08a638e1e28020923effd4c65fc517dbe7b06100ff76cde74e427191503b84","6f3a7020233cd77cfe59eefec0a277f6dda323743c8d80e4e54a95cd3cbc23cf","6fccc6f0c5fa71c43211785dced8abd0f3295040eab56063f4e8d77f1c09b8ef","700cd21af9ed7e81900fad9d52de2fb11db48e64b038e4293168f85e5dd0e043","702d1dfa75e92a916a446429f474d4c296e6ea4e8c487995852d0525e8440659","704cf778db6086c3e282c81249fb0ef09c1d7c2043335ef74c7ecb69bb3e84ad","71ef1ed2d5e4bc7eebe7a73bb3e9423e5bc2f8319186380fe8b38334952d3b01","7256ba00af1cf759b95b7bf8ae3b9943f31349bd10a7652a26bb419b368d73a3","7369b339daca0fcf46ac7fe82d65ae95c75d7dbcaaae51209e6d90b6587a014e","73ec844fb3e2b9febd00ba37508b284fad141630f03cb9f74e36a195180f5054","7410de003c7b582e30470d1209eefc796a70c76fe8d61dd9ccfe01ecfa41310c","76bf5a9c126db6eb466287a7c0d823327ee9882a70eaaa6efb03d169b5dba808","781a64598efb2a11156f07271ba1c14c4f6b3d73aa2943b26eae02063df7af70","799abc1e8d381b8d97349479139985e383bb49179b5a80f39807cb35a3ee78ce","79faec494bdd6d098c9d2a9d8559f822938c6b2104188db95321d89e7a732979","7a032dbf0351aa32c77c8d187f7eb697500ff186c88c5946ecc15adc972246a6","7aa52373f2721dd76fc8eeb3d6061794f27ea8d11e96bcb1ff25a97994a77d5c","7ad4ef4b8d3221758a9e7f9577750ee03f6cba11c8eae8bf25f74a3131bd21a2","7baa35131ece7ed9860607157d2531d4d70a061bdc9bb9876e20328f127cec53","7cbf970a11bdb91a40e248eee97ef789205910ebc913349698fc75ed35e82fdf","7d6133667f81aa66a98755d253ea43301b45ada338225df034d2ffdfc79829e7","7e89b59b456dde4bbbdbf8079665bd82c51d8e500018472981c15618b3893959","7ead0c68ffa0ced241af74dde58b3831343dff3f7eaab64bddb9954545b7ba12","7f8188b57ad3b0c28210c95954e5623376a4262dd5e75f002700c6094b8d6b6c","7f91dfc2ea1a3131c4090375db0f489c2a572e245ade6cda4ebd440446d6d60e","7fcb8cba3ed0ee9c342947aa88f0f699bb4f5c23244d21c6c739c9b66d7c6101","800060d7b4934508d0277f90a464e3112fd2fc99af4ef23825d09b0ff53f91c3","800a802a4ce9e597a102f0a566535c1f9f7adfc60c41af6bd2db4fb7fe3c0d0e","820c12fcbded9048a363b9e0ebbc48b24f85fd4a68131b5dfc1b19057bf09ddb","82c419e5de083e423330432c9d45c744043d1bccd8eeccb41e3014ce9ae3c32f","8343a4211a4d0ffdb320d5a4305174d85bb707d15dad978f6436297d022daa11","83a97b9ebb29f5cd014ef5e178970a601ee92c44678f05d1860b383c5f63b79d","85a962a7c23c14dff8d683e738b53f422221697b213cafeb616d3a172a6c4223","8629fddeb4f273b35df69d4d28923adc14eff59d919b1a495d1a68818137c561","872ab2b2d65fe685b91e355f5af051c85b79569ece16448160d01fef38039624","87f2b3634baa504f2ed9508c6cf6a47bbfb36214a177eb13d70d6a987706818c","88b615ef6a31bd9958e98b8ea522f49f0360ccac5d9fa8deb9e3ef3fe3147d9d","89cafbb20d6029656266d8cb0f85103fa519c8032598282fea58c94cc59c4125","89f2105745b3a7cfd30e7d7c598d6c8fdde0a599f30fd0db7382cba50412445e","8b3eec010d1eae43a28c88434f2410a751f790a9d6ec4a08e75e68c171629ab2","8cecfa09651c40be4d7c11c117c80e1911dc75bf6f1cc34be64706823cc024c3","8d250acd40c8a24ba0d51cc73e65bba6856509b5fbf4c7d7a435897a01c6e764","8df1420c27503370db9382f68a0af8d2b4d56f9dbc94b24ffae450a905083a79","8e7371228a726f381fb811d1d812c39917788a3df7e53dba1a3c364e755a0c03","8fae27ba5117e202afbd523b249fc454912571900fc909f5419b8ac96c773c44","902b958b4db7d8d8bf73a82a8aa86e5485b39477047c8ad60175d118fe31d987","91c9ced5e9ab8da897b7f69166a7d0bade5c58d511b42d60d5430d536da45d09","941f70c384905ab77cb9a88e2671301117e4df553da6fc7a09210710deb9b6ca","9442788fa51227044803f1d3efdfc1c2b2da372871a85f0f7a6bb3596a5c003f","947a1cdd43831936480167169d30334f818bb5d882650a3547827c05204af111","971f59cc197732d0c0b6b8aabbbefca4550fb8fb04f8522bdb4257c05a28848a","98a097d6ebb754334250dfd3ccc5f3dfaf5966524758cbfc9e10adf4a0229693","98c7e4bc2f05e9b4ca703db4a02347db7355a44f04e3a4003e26c46a56bded2c","9944d1a9674e555a41d31d069d136461eb06dd4052d40f2e4ea4368dd978e01b","9bbd03293bf53e9db51401d157b3eb2aa51e9c70449350e98b9a0a3fc9a684ce","9cf90b3aa59f3ca0e40fd9e1fec9703428752d63bded6b091d28f614c9ba99ae","9eb67ea41c5bcb9557ba51bbbd1b321a78f16335cadebbed848d8e6c1fc68bab","a0ff0d0bb3a3c801b637d091293f2eeaac68e934274e4116d298ba60ec3461cc","a1baa1f699fd4ce19e8ef6cdfe346e1b0be63e16d5c5cd5feddcccb16a62f269","a3c84d76be9d891812e795dd46470c2978dceeff928d729c0d5dd6def599923b","a64e8aee389ae696d0d4b045c0153092113fa522ed5a0fd9b5658b8418db4ded","a6c531ed9bbafabfdd649f3030daf2f24461163aaf99dc73bb24dddb77bbcb90","a7ff7302e668dcea1cd1db2241ff95c0d73534539bd03fdefebbfb57f60d3849","a8b4a33078335d2811bffb78eee49aab5fcb31597dae366d43e20c7f7800994b","a91a47fb4fa5c1b1a834fa602030e435ad641240e6ceeb99eeeab7341ca09dec","a91c8a1431a4120667cd523cf56bac004794fc5b8b24275ad2f9c8a15c75fba1","aa131e74e695292adab9f57b3ccc5a503a836dd4b95a3b2b107c69f35dba3637","acd7884bca46ea9422503cead985691da05cca25bd5ed52a199783cae7b8b01f","ae69fe306bf5db346ddfa4367cda24c95e44213baca27b0ee7d7167bcdd85af6","ae8c200dbcea29f43b29974cc247d70647c80d5d76385396f1c82ee9f669e2f1","aec13a075b84253397fb97e1c93a23e1aaee6d6bff2a9161bfd00a5b1d7611de","b09355a97e3aef396f681943b37a404a98fccc6bcb97781eddb2fc000d1d985d","b0ecfca0d114bae34ffa62ac3ea05159a4415fc6eb73ab1fcc4d79f657268f19","b25c41f19ba40e646fd9b6f82051ee4c38985539e445b26bd628eae98537df53","b262187aa66e8a97083bf7f79b91595bf7a4077abe7f8be5b00b4998f4579d20","b4091f93c3d96e36b0708f5dcd46e0e7a0a48f098036ccef6164e4a6429ed94c","b4093c67a9195ee7d28d2575e967ac80057b92339489c244243c7c504c669ff0","b44352445272089cf90967d4d413cf7009bed0ac19f3fa95cb831d5ebad081c3","b4ce73bea5219f1b27bffb36c6a9dee14447a710a8938db807770083db4552ac","b5102ef50e7d4ed1925af5a8b45192e737df02fafb75d7065995a2bb93d2e8e1","b5428b5775526a00645566822530fb969b82247ba83f2c80c06d34151e1f9061","b6cf3b02f36e0efa93b04667cdc5701340033a09e41a7196277cf6756999a666","b77c6669bcd54e0fa949faf2f7205f2631acfbc1ccf79f93f8dab5c5717f0e93","b7ffd6cddb12384224772e8de79aec89d8f4bca966a3c2a05763889f92a6db5c","b8abe10a2a92bf537a49e8dee92baf8de3ed591848a1b25151dab0d7ab3134e5","b96cea09313d481dfff1ed1a2c552ea29e8fe68f52139458996a4e36157748d2","b96f9beb6d6d8fbf88c4b8b2b807a362f2640479cab6173cf64c7710817785a0","b9ad2510d8249ec4c8e7fd8b2471727aa1bd0ce8f3dde78e545fb2f8f2985a1d","ba7d7464da8e13722232c8f86273774054693681becc450a68aea21a5a0e9b91","ba87e5d43ddb10937bb17941f055f80a223d0981fbba44107aeec8530e3a7774","bac3431138e986d6426c1e81bdfe0a968394896c0751cbbcc8f36002fd0ed069","bb230236c4ab6353afb4147014c93204d3d1eb8a6d18558075df5fe79ed7f392","bd714f38c881208f1190ad714bf8fa5aa63adf302bdaa8ad8810ff279e43459e","be75cc1ee935f783be39978de91ae196c16141d4096e16eb6d07f59583296b4b","be8c3cb2d8d67e63c8b069920b74c6272922febbc6a0a2c4a0072a7a213681d2","beed0f36d9b1b9a20bfbf89c96862482b8d5b9d4284bc89539efe9c9b11f000d","bfd21b5c8eb26e9d475868bb30d66ee08f20876e9df5cd06aa8fec01ffe666df","bfe97e65f2cbe6bcd0f14ff57ea4dc1dedb2e5f0db92d04d0982cf1932ac1c3e","c112d36ba38c362da1c022945db5b6bbdc3014685ca9bb7d940f5086f00a675c","c23cf45c1dcb748145d87f5c173dd3c8becaf9e3f6fdcb3e2ca91d6726b0842a","c29b8d250a7b5e73f4ef675329da2251b8de032501e4836445b6aafd90c645fa","c329c9df0dae8a036da9be440432d045be3ee13cf5664cfa6ccf11576ed11acb","c4600cd5358b5798a075beb54539d952f200def1c9a573bd237c795fd33ba36f","c6752cc3c7ad06d1e9f127365f078919ac46b77f8a8fe413650094d914838ec3","c6867ec30530fd3feca89a4e968522f783b636b165ef74f288c42dd50bd51a3d","c6bfbb004af355e96ed5b4c8c9b8b7a96d1c08d24bcde7c666728eb9497d6d71","c8bd340e6fc7fa3e97415f7ad4c22c51d88c6e77f782c12923e841c04d3f882b","cc24c3770587f2421514fa399d2617201752bdca145ac39058de91d45d3d19c1","cd2da00f6f1bad8fb7c1b87cff80e122eb017e44a471cdea769efc67db369038","ce887fb65b6977a2046e7583d704863624e55909ebcc9c3ed065b3d13079a410","cf9223c369b6fb7baa52f301f904352ba8e8d5e4c2a06f70de6ef1cf76fe1b84","cfc3b5044af37ae7485fba8067dcb22b2438bdaa6e3a30c22ce0f9e2c00aa597","d0481d9b6111ab4afba0462e88970b863284807ff44ca97364c84952e3f88583","d0973a1aca6a118375b466d6e91821f8450110fdf042ac848ee16912012d2b0f","d0df3068db679e24d9487ee09a6462ac5cf3df30f46ee466b66feb6dd5ff71e2","d227e0a73e3c5452bc5ab41ea2c695dfc0ff9b0c1c81e59ab3173f796a4157cf","d2cba4dbbfe3d026f825a8b470a2f6011f9b8e245cf042ae8889afbb17dac6b2","d2e4c515093f8a2aa824c8b542a016e5c321065f4525931b2fac4f8af2fe52c6","d31e8aa21d1498f2d4a07c4cc89ea6f5a6d3ce54d334dbff230e0f55db35c85e","d37de74aadd5916eeae243decf347821c4e946356b9f70471658638ac3092f91","d49d02cad8bbfeac607457b08aac6068916ef45d8f6c980279d6e654407cc7be","d4f51c31a454d9abac29457cbbc21e1b5767c0eac1b37c41ee787a3efb05c80f","d5c084e12da4a5111487c166b879042a21a056f761ee22d9237cb4f65f366341","d6077d547aa21ea10a9bdf6c752b8d1a0a6382b4b43a0fdf790f245e66a609fc","d67e8c1aaab1ce6ec1755599ecde153c47c6b90dd4c301663abe9057bc31af57","d6abcc1484c3df45bde915abf48324af1e995c3266a3c6c069e98e94c8d9a4d7","d8ca8e025e226ad6bdd32a6a9fceae2982b0413a0ad09314558b54bdc724bf99","d8d03142030c11a0aa1012102fce2b202baf88e424a1236832937e87450dc579","d9823dfddf6c507ec030fce4bd2d98fbda18e595c2ebc563574d9196cc7a5e33","d9b0972f3406075b860ba7cd2e71d4492c826960319b10389c2c2820e2981254","da37a61fab07ec8856b725854e4064f55a59149aa69cad1bcbf89ec478b9f578","dad01e5bfb13a6c4419f4d24fa8dbb424e93a1c4be656b0e5dd48ac546e0a0d9","db21a75b4fa6165f75268963474f3262124795d816ba80f685bab2c6eaedb028","dd97ab52fd89f42352c595ce137684cc519c473fa17969e8a6adcde7322a4748","dda0a34d6704887eb36bbc0173334b49d755cac8cea3bbd17bfa972f04183dd4","ddbda9408727a19a4a55d516bed99331edf67d8301de9c78564716465c949619","e0288c94ca9c16a6de217e6baeed720fcf83e401bec45bd15ca47ba8fc9b44dd","e1667469384ec775a3df665679cb3fef057dc84dcb18ed8db8b9c5723835968a","e16c328504278cfe520d6d99990f2a4370cc48159aba86694d0f7598fd4b0611","e24df071f5325bb3a5b20f355143556bc7712535ee8b6ce4c426598f06fd2448","e28d8e6b71264d0bfab853e63178f2c151367cce0dbd16125596ff3604b6658d","e2c734504d211580b4e6674eb1c7d31fb6fb730c037210c34c980a96f9098269","e3f19c383354cdf45311f92f00b90fed25dfba7e9892ab2f5f3aa4885876b75f","e409fbfe439455330c0fe003de860e30f7093cc3cc83a32f886c9b539a29f60b","e6300ee8e6c2c4ce6d7ab02b7b06fd1cabe3c5c52b99a6ea3ea8b5acd5092e0b","e734d068446591aba283d136c21b4fb0209f91352cb4fc6589bd651cdbfec163","e7a333109a7aaec2b71048868500c15e721900628eb48790dfeaa1fd4c2dabc3","e7c9175fbfd9fd84bed95d552bc0a439b07a233c3e91fb39ae2f23197ee53f1b","ea1b8a251ecc1fd96697d0c602d3e14ec46383d27bb9485a0326cea5576ffacb","ea311dca2ef14e02b9aae563bb28dc737b04b7f01c1ceb2be3d92007d2c74ac6","ea8e5b79bbe5329ae8437677c8316f2f9fd75bb1d40c88308c269140a7e564c7","eb996138bc91c0ee63bafe1ba10b130ff5a2fc82aa4918296222e0a831a569fe","eba6e8e5a12a86f17fade41bef365aa95491c469e18aa91aef64908a4263c905","edc160a11c07dda8072748b66db7f27b6cd8efbd1faa3f6c826a0fe445859c17","edfcbe4773eac1fe2964179a4ad21294efede89568f2efd8e283ac18bc5693b1","f0f90dee84db760cc1bb0f6e6983d4de0e3d5d9f4adf7b2b52f0d3dbe6d585a4","f1d4a6e98f41ab3f6cfd67cddeab9d0ed287b92cb3dbe575e3ce61925510a792","f21c3a9267110e469f224ac7eb76ca5bb084fc90df014f1ca6791d5770483944","f379a1b9e29aa7fc25c4c0c897eaa3c0e90d66a201a0ade8cbf523a5cdc8cf50","f3e04891c79b604f9235f438adfa49ee27db43d25c7be0d1cc06ae53b8f6d2d8","f46904e701174fe2850798d9e1b077bdac42fcac01dbc385298da01118c82aa6","f53265f53af0b0856911ab08b373736964d0c443e8ba61d7f1d45f5e5b04edf3","f686173d310f41e26e3fe8a7c1dbf4313e4d793323335348badbcf4633f5d699","f704c9c9e2cab1ed44578f48d161320b5fb4384ecdd8b40a5e22c4078a8594da","f89156489d35f9992d5971a52a6e03a7d7f095e15c2c782e85efb1408a2bd6be","f99ef6fa3c9c6bf572ec69eb6eeea9f88ce6590d3a5565bec62b001b6f2a376a","fa2dfc22b4fdbcf402a822e8dd376925655d997a0f96284a60f10665ba3581ba","fa3df5f8349aec4805bbcd279b88697def63f2462d8ada0b5fe1d9983d9a6daa","fa6b97cbca1d4f09662e706293b0aec1eb76b8e2277441f54ab6c548b5423236","faac0c3fa7cdf67b452d407e9a1db5cbe1e9140ecfe300200b0b0a6279c97c66","fbc8b53b5c6f3727c084e5e0429e410a3fed5a17e1a0144692fd196d9836a4bb","fd04d7588bb9e6ca0a8b65ed0c9635082a9ee5f46b2d1b5b25866a072236c1fc","fd60f2a432086c6fc4a4c39d8d2d6edf5794c763c05a6401db2bb5fa2c601775","ff532716738e2fc716c10797d9717f324cca3a1234320a84a73a0b89569f11ab","ffd0fe3449e449c7b9fcdcc7e2c1ffb677e57ad935a252de88a0122d437efa67","ffde5c700732beac27a9b5162213d387422ce199400e56d9cefe550005b6a542"],"schema":"fsgg.atlas/1"} diff --git a/.claude/skills/atlas/assets/seed/records/7aa52373f2721dd76fc8eeb3d6061794f27ea8d11e96bcb1ff25a97994a77d5c.json b/.claude/skills/atlas/assets/seed/records/7aa52373f2721dd76fc8eeb3d6061794f27ea8d11e96bcb1ff25a97994a77d5c.json new file mode 100644 index 000000000..b0de5caf2 --- /dev/null +++ b/.claude/skills/atlas/assets/seed/records/7aa52373f2721dd76fc8eeb3d6061794f27ea8d11e96bcb1ff25a97994a77d5c.json @@ -0,0 +1 @@ +{"citations":[{"path":"src/FS.GG.Coord.Core/TelemetryStore.fs","repository":"FS-GG/.github","revision":"96251bbe00685b62b13a7998599c2ee3f7b189dd","sha256":"964efe1ad5927a91c7ea164422d8217fb17a31a578ec7e5f26a8ef76bc320959"},{"path":"src/FS.GG.Coord.Cli/SkillTelemetryReaders.fs","repository":"FS-GG/.github","revision":"96251bbe00685b62b13a7998599c2ee3f7b189dd","sha256":"2da83e881c4d4a45f7502a6e2c9039eb322c207d66e58f0eb25940af01833102"},{"path":"src/FS.GG.Coord.Cli/SkillTelemetryAdapter.fs","repository":"FS-GG/.github","revision":"96251bbe00685b62b13a7998599c2ee3f7b189dd","sha256":"5b73ddfa9b95f81243f0c854e017092939bf3ec8aaa5534b4ce5f4e392f1f452"},{"path":"src/FS.GG.Coord.Cli/WorkspaceTelemetryApplication.fs","repository":"FS-GG/.github","revision":"96251bbe00685b62b13a7998599c2ee3f7b189dd","sha256":"67812f77da121ea0639e409bddb33ff390876f8bf3080f980e29d2fbd8050c20"},{"path":"src/FS.GG.Coord.Cli/TelemetryStoreApplication.fs","repository":"FS-GG/.github","revision":"96251bbe00685b62b13a7998599c2ee3f7b189dd","sha256":"4af499d349993e33609b25738e116f159431f9370275eca4ad08bea508e47397"},{"path":"src/FS.GG.Coord.Cli/TelemetryApplication.fs","repository":"FS-GG/.github","revision":"96251bbe00685b62b13a7998599c2ee3f7b189dd","sha256":"15e6d05562e0ff0d19a38129f39a6ad70d5eae8b071d2b92262dfbf877d8ac51"}],"conflictsWith":[],"id":"contract/passive-native-usage-observations","kind":"contract","recordedAt":"2026-10-18T08:39:36Z","repository":"FS-GG/.github","schema":"fsgg.atlas/1","status":"recorded","summary":"At the cited source candidate, explicit selected Codex rollout files share the maintained native decoder and project actual optional response counters through provider-usage-observation/1. Item, inventory and terminal attribution stay unknown/partial; these canonical-only facts never enter qualified item totals. Stable native thread/turn/response identities, a finite serialized producer index, private pending intent and existing immutable spool retain corrections and exact replay. Local enqueue/reporting make no receiver or App Server call. Existing remote setup has an explicit capture-only flag that skips only credential presence and reports receiver unverified. Same-owner state cloning/migration is unsupported without original state/fence reconciliation; the supported production route selects one association root. Receiver admission refuses cross-owner changes and numeric predecessor ordering holds later batches behind uncertain or durable-but-not-applied receipts; unsupported or rejected passive data remains pending. Source preparation alone establishes neither compiled qualification, installed producer capture, receiver compatibility nor restart/restore durability.","supersedes":[],"tags":["telemetry","passive","native","capture","attribution","delivery","corrections"],"title":"Passive native responses separate capture, attribution and delivery"} diff --git a/docs/atlas/catalog.json b/docs/atlas/catalog.json index edf79eef6..56a0d5fba 100644 --- a/docs/atlas/catalog.json +++ b/docs/atlas/catalog.json @@ -1 +1 @@ -{"records":["000ada42299601fba29016e5c0e0d4012876fb42670bb10fa0b1315477254ba4","00641d046d6869fdd0023ab3df99e0e67a6ea28f0dcb701f622b1cec8b3e07c6","026b08fb343aefe19177e95b759560d340d372def4b71acf613fefee3438ade2","0357495d23fac4fad210b6dd7ed7cc57dd33d107e1659a81f085cad78300797f","036c148f6d0e89858c9bf4cf380272ca6904bb4ca277a909fb71c47f5450cef7","04e404d89dca295564813149472b1de8e6c43357e2f6d91d169ded7600ed3a02","0509e5c6fdbd2dde0c0db8558647080560714804d00e4f9268342f2e84858a3d","06ad2c8aa0ff3b862edf3ba99e0e4e8801ee163709e66333cd06c3fc61232b05","0a6d7dc5b64970bfdadc9049ace95e8bc163fc421beea70129ff0eaa692c6d06","0ad4403c8f4078dbfa543310c69bd1dfc768e305987214ffc37d7b2600c4687c","0c22360d4653eb0f450e4d3d34564875f1660cfcb2d546095d98b3faa3967cbc","0da4d093b49c0a1f654b38008bb01195e816829279ca1989bd2448194e15361b","0e560af7d9dd2e0f2f588a74cd35512973747f20bdfe0bee0bc889105ea53dc9","0ea7107c2c8edaab3ff2bae32f63cfbef6903a51cdaff257278f757ed5ef429d","0eef4d717eb03f0906aa3be7336aa71f831726afabe8a56077b76f6e82fd08e1","11fe30832d93706c60efd836b09f35f049c4a715ad6144cf277ca240c5780704","1244d27db0cf5075353bcc622d0fb3b5ca6a7d08526e2c5754e8b745c250bf3f","155fe673b8ae12549c978e1bf1d5c43e360937fcf2135cdcd5aea6f6c771da44","1945f527afc3c2930ec4d7fa57ebb2ef7dd6321c0dd3ab9233c9963e9e613165","19d657b67672257ece127f3b957674b7fb4780843148db0a36a0b329c2a418ba","1a24f6ef0c08a898f309c1b925fc19b29526f913a61a1dfe4b1a4308ebdd97ac","1b5351b2dc647aba864e387168db5128435cb80da94fc42581cd60a05fc34b9a","1da011289116fe88fe92cb8f0e83ed7ccbbca251681d4e136c5a61c40364f8d3","1ec9445b242d2a2e149fe71c67bf13d8c0e4ebe5a6ed7b022656b9941973909d","1edc36731a9c76ad07d269d8b4fd84c8c956bb43d6f56de17d6208164856ffbe","20901b579f69cc97eb56b492938864667576e1c9bfacf13f8a529c4f6e543448","21338155cb4f52c49e5072c877771be67c75590d9b238ea025fba5209fd6e018","23af79bd1e7995fc8162ddc4d830318acb054bbfcc9c7d5cb141ec306da67386","24d4f2730d94d1b7f149771ef0e59192f4936d142b21f4a56b1a391e4514d38d","2591526ddabbea03fbdc38bf172bc54f42df9bc51eba7ad2b70d6e67215f08f1","26259abc7fe745f52e06f2aa2abb0e50f189bc7608065f04d5c669a0a99941cd","26290a0990d6dac0ce9448e05eb934210603356043dcf14a5d80585288e2aa92","26d6b31965013079d4db67a2c403e01f21e3c30ae65953400dbed92e289a0925","288daf614247c260cb673d8674e8b3874ccc4e269347836851f702d7ac8e2f7c","28abfaf6d50ca38af0b88aa50524200c17af9000da83ddbab3d8f9e06e020fa5","291d3db272eae084d34c04bc1305f2abb26a7e7acbc5515208469b46719a4ed1","2a38ddebfe3380232e35d5a24f9cb9f7c38abbc9c68add4ea5952c1e65d328d2","2c76ce93500601e281a41f5985fe4e3926fc8bc9d01ee687f14052cb553ad2d2","2d599c722a08306b98f2d833fb3e4a7acb9dea92e6a58820caa2f65c09803fb8","2ecd502add2d801eebed39411fadc9a80098ba9ce04a5f4b728a0e4e331232d6","2f7357367d921995f4c6fdaa693392adcd2df4860ef4d25c8dc47f7ddea8c755","2fb2ed7902a8e35dc36489a23245d963026d688008c92fed6fdc1f6bc27198a6","310bfb5b2d061bb733771e5cb7b3b7d25db43af5eda9f806169b7ef9330c2fe7","32f69a7b8997ae98b9305ee578145d795dbcd39ca4469bf2465e57a0295cda51","335683e33b94cb86b5e426b4faed200673bf850151191a08458136ceb164fd4e","3407ec53a884d3945d86a88d6b9a883419dd426e96b1108a8e6686f30397a629","34463778cf2d29e3896a65613cf9e3eb3e9f2d8946d17f12b609e70eec63d128","35da3938b72cf3520e126ad595157104b69ab748904c7b4e12f563d6b103172b","37c8908ea2a349cd3034018027160ad810b28ad1fc203a9a353971e1f7396b4c","37e39faee019bb041627510f1f02746ba9a85696417a083b438eb4974b72c2bf","38a75fd804821f4836f0a7ba8d41af3d3a3a5f5d7dcea68487009297824258d9","397476cf107b48e7a662264f8fea9f880231fd3d1e0401622650f214cfaa35c7","3ad8b0398ba6c354c9e31b7438b2515579fc0b1f17de4b35a914c862a3a11e3b","3b3c6cf083b12a840565e00458e2fd4ee8a61f97cda452703a6b13d7776b6c13","3b4af144afed3d52dd2e1f64e23bc25b3475eee5f7af3bde9886761b15c33dfd","3b5d82795e9f5d1992ab67e078fcf1108247ab9b6d1baeac944d3ec0294cec5d","3d0274f77576abdbdf442c8843e955e1bbc91e9f8cbfe3646b119337cdb13c96","3e2f66baa16c7ea936eba34720a55897438f60b343cbe8fda4eab1e5dde044eb","41c768ea17144c6ec225e9a65d4c3c127fdd7264dcba1a89aa17b20fd5d7e3ee","42aeb46fcc3d10b95e4067bc9cda875fa933b4102873f67c7bf1f8ca6799a598","4320b92712bc14dbe10b56f1cd3d1bdc093fc4be6016732839d0be4dd4d027d3","46cdf2c207f79d388001f6636dfb7a98bb2ba72b9d1c6df4938f0a27691e07a6","480f1ede18ae031b164d49d676feeb1090fb33932676ff52e1e2eb24e8d154cd","48797c44c92cb34fd9a57a08020b45c6920b2268dc8ad616c0f814a3710d5316","48d094622ada1806cb30335926007c1abc476b1f7b45a2e250c490afa25e847b","4a724a6a842a132c2185279513f341b79f9be93e42660f1255770eeae3b1323c","4c8c327dacf345e184042092e96ad3ea02ed4cece57dac5fa68ea52fbb5a6adf","4d5a44ba07fafeab823b54a21846269330ce35b4c190f3ddd5434bc8530d9b41","4da0a5be70e8af9c39623deac83822749482187f6a0fc3d186dcfddaa7111576","4f1e58fc658a4ceda181e2a7fa249305b09b573ffd68c2489f204f4957224957","4f2750b974c1404acb721ffc84cbd1d0756a24211dd6f6503c10ea74dbc45676","509ec9c08864b9dd0029f32ffeac85fbac863e2dad459994c65b7cb5264faffa","52049cc9cee43bb27229e6b3e983e02c6aa20dd7d153b13e3c74bc6d2b47cf92","5382c901d160ca2d79888d8acd7a690a5349826b5da486274b0800c9d7513f11","540879695d41205515aaabe5466971014cb43b960a26b8e5958e37fed63df762","5560616d1e72f0a539f9ebbfea3b7d195c1ef5622f97994af1963748d4f97533","556ee783d8e2e4ca50f656c095758be613983f904d998a6534fb155510114f21","55a4711e799294d06988ab4acf77eacd7d424123082bba3ec987dff0ae13999c","55ae095961d78a1514c4dd1e63d477c60179a8662571ab5a90abd3eb2b83eb10","56e7158313357bb145bd98c5f790e569be2203fb2601565a30091a597a7e7ff5","5962dd14d3923433cf723d698d1af19ac37a270b6e88445643fc56a646faab5b","5a2064cdf51026eed65457c05f34bec919b31d96d35c29498d298685965f0b5a","5b77bd6dfa81cc339e729e4195e258facbfeb64b9c680512f742e3fb1961fdd5","5c3527e43fe24c5aa171c6fa4a3de7fe5e78f2527aed0dd19cb21d154d43da21","5c79c77f00167ca140127b00f1a79e1ffac621e46fc461089594206a7df8d7cc","5d015880319af666943e68169ca906bf2f0c813d8bf2c5c0262aeb5a40366350","5f2a75b89983d1005a38afa2cabccc3a39f31989807120281d8505ffd564e0c6","5f4fa6dde5930fe1b42f805895f0f5fb135c2b3ff9830f2bd30ae7526a3295a1","630fdcff1f227b5baf5d10bd78ef0fde68791ac0cd8a15f65065f5cc4501b17b","63113617f2e4ee6b827a69bce6afb3949190a282f5feaaa9e2c9f82372623bb8","63544fa69b09916d52b305700eb9816305ff22b77162a44edd13897acea3a655","63a4394e689acf4a4762cfb4df691d05f923fdf592fd2f8ea41e6a54f98d1136","69ebfc7eb8427db3c5c59bdde652d0cb269426126f8540b1b58caa29ccf130e2","69edc4285578313d1dd2f914d69add075a7b354f7fba717606d1abe15292576b","6a34d9279cae58765d6ee4a980192c0e15f3ca217b9f1815861d472a281b3cf8","6c3c592efe9c684ada5661b8cc88a5c3f6e57c841db06b9e070687504cbf6236","6ce6d164c3e31463fb9e144fdf91413e55d077cfc4f25092bb02923fb538a84f","6e08a638e1e28020923effd4c65fc517dbe7b06100ff76cde74e427191503b84","6f3a7020233cd77cfe59eefec0a277f6dda323743c8d80e4e54a95cd3cbc23cf","6fccc6f0c5fa71c43211785dced8abd0f3295040eab56063f4e8d77f1c09b8ef","700cd21af9ed7e81900fad9d52de2fb11db48e64b038e4293168f85e5dd0e043","702d1dfa75e92a916a446429f474d4c296e6ea4e8c487995852d0525e8440659","704cf778db6086c3e282c81249fb0ef09c1d7c2043335ef74c7ecb69bb3e84ad","71ef1ed2d5e4bc7eebe7a73bb3e9423e5bc2f8319186380fe8b38334952d3b01","7256ba00af1cf759b95b7bf8ae3b9943f31349bd10a7652a26bb419b368d73a3","7369b339daca0fcf46ac7fe82d65ae95c75d7dbcaaae51209e6d90b6587a014e","73ec844fb3e2b9febd00ba37508b284fad141630f03cb9f74e36a195180f5054","7410de003c7b582e30470d1209eefc796a70c76fe8d61dd9ccfe01ecfa41310c","76bf5a9c126db6eb466287a7c0d823327ee9882a70eaaa6efb03d169b5dba808","781a64598efb2a11156f07271ba1c14c4f6b3d73aa2943b26eae02063df7af70","799abc1e8d381b8d97349479139985e383bb49179b5a80f39807cb35a3ee78ce","79faec494bdd6d098c9d2a9d8559f822938c6b2104188db95321d89e7a732979","7a032dbf0351aa32c77c8d187f7eb697500ff186c88c5946ecc15adc972246a6","7ad4ef4b8d3221758a9e7f9577750ee03f6cba11c8eae8bf25f74a3131bd21a2","7baa35131ece7ed9860607157d2531d4d70a061bdc9bb9876e20328f127cec53","7cbf970a11bdb91a40e248eee97ef789205910ebc913349698fc75ed35e82fdf","7d6133667f81aa66a98755d253ea43301b45ada338225df034d2ffdfc79829e7","7e89b59b456dde4bbbdbf8079665bd82c51d8e500018472981c15618b3893959","7ead0c68ffa0ced241af74dde58b3831343dff3f7eaab64bddb9954545b7ba12","7f8188b57ad3b0c28210c95954e5623376a4262dd5e75f002700c6094b8d6b6c","7f91dfc2ea1a3131c4090375db0f489c2a572e245ade6cda4ebd440446d6d60e","7fcb8cba3ed0ee9c342947aa88f0f699bb4f5c23244d21c6c739c9b66d7c6101","800060d7b4934508d0277f90a464e3112fd2fc99af4ef23825d09b0ff53f91c3","800a802a4ce9e597a102f0a566535c1f9f7adfc60c41af6bd2db4fb7fe3c0d0e","820c12fcbded9048a363b9e0ebbc48b24f85fd4a68131b5dfc1b19057bf09ddb","82c419e5de083e423330432c9d45c744043d1bccd8eeccb41e3014ce9ae3c32f","8343a4211a4d0ffdb320d5a4305174d85bb707d15dad978f6436297d022daa11","83a97b9ebb29f5cd014ef5e178970a601ee92c44678f05d1860b383c5f63b79d","85a962a7c23c14dff8d683e738b53f422221697b213cafeb616d3a172a6c4223","8629fddeb4f273b35df69d4d28923adc14eff59d919b1a495d1a68818137c561","872ab2b2d65fe685b91e355f5af051c85b79569ece16448160d01fef38039624","87f2b3634baa504f2ed9508c6cf6a47bbfb36214a177eb13d70d6a987706818c","88b615ef6a31bd9958e98b8ea522f49f0360ccac5d9fa8deb9e3ef3fe3147d9d","89cafbb20d6029656266d8cb0f85103fa519c8032598282fea58c94cc59c4125","89f2105745b3a7cfd30e7d7c598d6c8fdde0a599f30fd0db7382cba50412445e","8b3eec010d1eae43a28c88434f2410a751f790a9d6ec4a08e75e68c171629ab2","8cecfa09651c40be4d7c11c117c80e1911dc75bf6f1cc34be64706823cc024c3","8d250acd40c8a24ba0d51cc73e65bba6856509b5fbf4c7d7a435897a01c6e764","8df1420c27503370db9382f68a0af8d2b4d56f9dbc94b24ffae450a905083a79","8e7371228a726f381fb811d1d812c39917788a3df7e53dba1a3c364e755a0c03","8fae27ba5117e202afbd523b249fc454912571900fc909f5419b8ac96c773c44","902b958b4db7d8d8bf73a82a8aa86e5485b39477047c8ad60175d118fe31d987","91c9ced5e9ab8da897b7f69166a7d0bade5c58d511b42d60d5430d536da45d09","941f70c384905ab77cb9a88e2671301117e4df553da6fc7a09210710deb9b6ca","9442788fa51227044803f1d3efdfc1c2b2da372871a85f0f7a6bb3596a5c003f","947a1cdd43831936480167169d30334f818bb5d882650a3547827c05204af111","971f59cc197732d0c0b6b8aabbbefca4550fb8fb04f8522bdb4257c05a28848a","98a097d6ebb754334250dfd3ccc5f3dfaf5966524758cbfc9e10adf4a0229693","98c7e4bc2f05e9b4ca703db4a02347db7355a44f04e3a4003e26c46a56bded2c","9944d1a9674e555a41d31d069d136461eb06dd4052d40f2e4ea4368dd978e01b","9bbd03293bf53e9db51401d157b3eb2aa51e9c70449350e98b9a0a3fc9a684ce","9cf90b3aa59f3ca0e40fd9e1fec9703428752d63bded6b091d28f614c9ba99ae","9eb67ea41c5bcb9557ba51bbbd1b321a78f16335cadebbed848d8e6c1fc68bab","a0ff0d0bb3a3c801b637d091293f2eeaac68e934274e4116d298ba60ec3461cc","a1baa1f699fd4ce19e8ef6cdfe346e1b0be63e16d5c5cd5feddcccb16a62f269","a3c84d76be9d891812e795dd46470c2978dceeff928d729c0d5dd6def599923b","a64e8aee389ae696d0d4b045c0153092113fa522ed5a0fd9b5658b8418db4ded","a6c531ed9bbafabfdd649f3030daf2f24461163aaf99dc73bb24dddb77bbcb90","a7ff7302e668dcea1cd1db2241ff95c0d73534539bd03fdefebbfb57f60d3849","a8b4a33078335d2811bffb78eee49aab5fcb31597dae366d43e20c7f7800994b","a91a47fb4fa5c1b1a834fa602030e435ad641240e6ceeb99eeeab7341ca09dec","a91c8a1431a4120667cd523cf56bac004794fc5b8b24275ad2f9c8a15c75fba1","aa131e74e695292adab9f57b3ccc5a503a836dd4b95a3b2b107c69f35dba3637","acd7884bca46ea9422503cead985691da05cca25bd5ed52a199783cae7b8b01f","ae69fe306bf5db346ddfa4367cda24c95e44213baca27b0ee7d7167bcdd85af6","ae8c200dbcea29f43b29974cc247d70647c80d5d76385396f1c82ee9f669e2f1","aec13a075b84253397fb97e1c93a23e1aaee6d6bff2a9161bfd00a5b1d7611de","b09355a97e3aef396f681943b37a404a98fccc6bcb97781eddb2fc000d1d985d","b0ecfca0d114bae34ffa62ac3ea05159a4415fc6eb73ab1fcc4d79f657268f19","b25c41f19ba40e646fd9b6f82051ee4c38985539e445b26bd628eae98537df53","b262187aa66e8a97083bf7f79b91595bf7a4077abe7f8be5b00b4998f4579d20","b4091f93c3d96e36b0708f5dcd46e0e7a0a48f098036ccef6164e4a6429ed94c","b4093c67a9195ee7d28d2575e967ac80057b92339489c244243c7c504c669ff0","b44352445272089cf90967d4d413cf7009bed0ac19f3fa95cb831d5ebad081c3","b4ce73bea5219f1b27bffb36c6a9dee14447a710a8938db807770083db4552ac","b5102ef50e7d4ed1925af5a8b45192e737df02fafb75d7065995a2bb93d2e8e1","b5428b5775526a00645566822530fb969b82247ba83f2c80c06d34151e1f9061","b6cf3b02f36e0efa93b04667cdc5701340033a09e41a7196277cf6756999a666","b77c6669bcd54e0fa949faf2f7205f2631acfbc1ccf79f93f8dab5c5717f0e93","b7ffd6cddb12384224772e8de79aec89d8f4bca966a3c2a05763889f92a6db5c","b8abe10a2a92bf537a49e8dee92baf8de3ed591848a1b25151dab0d7ab3134e5","b96cea09313d481dfff1ed1a2c552ea29e8fe68f52139458996a4e36157748d2","b96f9beb6d6d8fbf88c4b8b2b807a362f2640479cab6173cf64c7710817785a0","b9ad2510d8249ec4c8e7fd8b2471727aa1bd0ce8f3dde78e545fb2f8f2985a1d","ba7d7464da8e13722232c8f86273774054693681becc450a68aea21a5a0e9b91","ba87e5d43ddb10937bb17941f055f80a223d0981fbba44107aeec8530e3a7774","bac3431138e986d6426c1e81bdfe0a968394896c0751cbbcc8f36002fd0ed069","bb230236c4ab6353afb4147014c93204d3d1eb8a6d18558075df5fe79ed7f392","bd714f38c881208f1190ad714bf8fa5aa63adf302bdaa8ad8810ff279e43459e","be75cc1ee935f783be39978de91ae196c16141d4096e16eb6d07f59583296b4b","be8c3cb2d8d67e63c8b069920b74c6272922febbc6a0a2c4a0072a7a213681d2","beed0f36d9b1b9a20bfbf89c96862482b8d5b9d4284bc89539efe9c9b11f000d","bfd21b5c8eb26e9d475868bb30d66ee08f20876e9df5cd06aa8fec01ffe666df","bfe97e65f2cbe6bcd0f14ff57ea4dc1dedb2e5f0db92d04d0982cf1932ac1c3e","c112d36ba38c362da1c022945db5b6bbdc3014685ca9bb7d940f5086f00a675c","c23cf45c1dcb748145d87f5c173dd3c8becaf9e3f6fdcb3e2ca91d6726b0842a","c29b8d250a7b5e73f4ef675329da2251b8de032501e4836445b6aafd90c645fa","c329c9df0dae8a036da9be440432d045be3ee13cf5664cfa6ccf11576ed11acb","c4600cd5358b5798a075beb54539d952f200def1c9a573bd237c795fd33ba36f","c6752cc3c7ad06d1e9f127365f078919ac46b77f8a8fe413650094d914838ec3","c6867ec30530fd3feca89a4e968522f783b636b165ef74f288c42dd50bd51a3d","c6bfbb004af355e96ed5b4c8c9b8b7a96d1c08d24bcde7c666728eb9497d6d71","c8bd340e6fc7fa3e97415f7ad4c22c51d88c6e77f782c12923e841c04d3f882b","cc24c3770587f2421514fa399d2617201752bdca145ac39058de91d45d3d19c1","cd2da00f6f1bad8fb7c1b87cff80e122eb017e44a471cdea769efc67db369038","ce887fb65b6977a2046e7583d704863624e55909ebcc9c3ed065b3d13079a410","cf9223c369b6fb7baa52f301f904352ba8e8d5e4c2a06f70de6ef1cf76fe1b84","cfc3b5044af37ae7485fba8067dcb22b2438bdaa6e3a30c22ce0f9e2c00aa597","d0481d9b6111ab4afba0462e88970b863284807ff44ca97364c84952e3f88583","d0973a1aca6a118375b466d6e91821f8450110fdf042ac848ee16912012d2b0f","d0df3068db679e24d9487ee09a6462ac5cf3df30f46ee466b66feb6dd5ff71e2","d227e0a73e3c5452bc5ab41ea2c695dfc0ff9b0c1c81e59ab3173f796a4157cf","d2cba4dbbfe3d026f825a8b470a2f6011f9b8e245cf042ae8889afbb17dac6b2","d2e4c515093f8a2aa824c8b542a016e5c321065f4525931b2fac4f8af2fe52c6","d31e8aa21d1498f2d4a07c4cc89ea6f5a6d3ce54d334dbff230e0f55db35c85e","d37de74aadd5916eeae243decf347821c4e946356b9f70471658638ac3092f91","d49d02cad8bbfeac607457b08aac6068916ef45d8f6c980279d6e654407cc7be","d4f51c31a454d9abac29457cbbc21e1b5767c0eac1b37c41ee787a3efb05c80f","d5c084e12da4a5111487c166b879042a21a056f761ee22d9237cb4f65f366341","d6077d547aa21ea10a9bdf6c752b8d1a0a6382b4b43a0fdf790f245e66a609fc","d67e8c1aaab1ce6ec1755599ecde153c47c6b90dd4c301663abe9057bc31af57","d6abcc1484c3df45bde915abf48324af1e995c3266a3c6c069e98e94c8d9a4d7","d8ca8e025e226ad6bdd32a6a9fceae2982b0413a0ad09314558b54bdc724bf99","d8d03142030c11a0aa1012102fce2b202baf88e424a1236832937e87450dc579","d9823dfddf6c507ec030fce4bd2d98fbda18e595c2ebc563574d9196cc7a5e33","d9b0972f3406075b860ba7cd2e71d4492c826960319b10389c2c2820e2981254","da37a61fab07ec8856b725854e4064f55a59149aa69cad1bcbf89ec478b9f578","dad01e5bfb13a6c4419f4d24fa8dbb424e93a1c4be656b0e5dd48ac546e0a0d9","db21a75b4fa6165f75268963474f3262124795d816ba80f685bab2c6eaedb028","dd97ab52fd89f42352c595ce137684cc519c473fa17969e8a6adcde7322a4748","dda0a34d6704887eb36bbc0173334b49d755cac8cea3bbd17bfa972f04183dd4","ddbda9408727a19a4a55d516bed99331edf67d8301de9c78564716465c949619","e0288c94ca9c16a6de217e6baeed720fcf83e401bec45bd15ca47ba8fc9b44dd","e1667469384ec775a3df665679cb3fef057dc84dcb18ed8db8b9c5723835968a","e16c328504278cfe520d6d99990f2a4370cc48159aba86694d0f7598fd4b0611","e24df071f5325bb3a5b20f355143556bc7712535ee8b6ce4c426598f06fd2448","e28d8e6b71264d0bfab853e63178f2c151367cce0dbd16125596ff3604b6658d","e2c734504d211580b4e6674eb1c7d31fb6fb730c037210c34c980a96f9098269","e3f19c383354cdf45311f92f00b90fed25dfba7e9892ab2f5f3aa4885876b75f","e409fbfe439455330c0fe003de860e30f7093cc3cc83a32f886c9b539a29f60b","e6300ee8e6c2c4ce6d7ab02b7b06fd1cabe3c5c52b99a6ea3ea8b5acd5092e0b","e734d068446591aba283d136c21b4fb0209f91352cb4fc6589bd651cdbfec163","e7a333109a7aaec2b71048868500c15e721900628eb48790dfeaa1fd4c2dabc3","e7c9175fbfd9fd84bed95d552bc0a439b07a233c3e91fb39ae2f23197ee53f1b","ea1b8a251ecc1fd96697d0c602d3e14ec46383d27bb9485a0326cea5576ffacb","ea311dca2ef14e02b9aae563bb28dc737b04b7f01c1ceb2be3d92007d2c74ac6","ea8e5b79bbe5329ae8437677c8316f2f9fd75bb1d40c88308c269140a7e564c7","eb996138bc91c0ee63bafe1ba10b130ff5a2fc82aa4918296222e0a831a569fe","eba6e8e5a12a86f17fade41bef365aa95491c469e18aa91aef64908a4263c905","edc160a11c07dda8072748b66db7f27b6cd8efbd1faa3f6c826a0fe445859c17","edfcbe4773eac1fe2964179a4ad21294efede89568f2efd8e283ac18bc5693b1","f0f90dee84db760cc1bb0f6e6983d4de0e3d5d9f4adf7b2b52f0d3dbe6d585a4","f1d4a6e98f41ab3f6cfd67cddeab9d0ed287b92cb3dbe575e3ce61925510a792","f21c3a9267110e469f224ac7eb76ca5bb084fc90df014f1ca6791d5770483944","f379a1b9e29aa7fc25c4c0c897eaa3c0e90d66a201a0ade8cbf523a5cdc8cf50","f3e04891c79b604f9235f438adfa49ee27db43d25c7be0d1cc06ae53b8f6d2d8","f46904e701174fe2850798d9e1b077bdac42fcac01dbc385298da01118c82aa6","f53265f53af0b0856911ab08b373736964d0c443e8ba61d7f1d45f5e5b04edf3","f686173d310f41e26e3fe8a7c1dbf4313e4d793323335348badbcf4633f5d699","f704c9c9e2cab1ed44578f48d161320b5fb4384ecdd8b40a5e22c4078a8594da","f89156489d35f9992d5971a52a6e03a7d7f095e15c2c782e85efb1408a2bd6be","f99ef6fa3c9c6bf572ec69eb6eeea9f88ce6590d3a5565bec62b001b6f2a376a","fa2dfc22b4fdbcf402a822e8dd376925655d997a0f96284a60f10665ba3581ba","fa3df5f8349aec4805bbcd279b88697def63f2462d8ada0b5fe1d9983d9a6daa","fa6b97cbca1d4f09662e706293b0aec1eb76b8e2277441f54ab6c548b5423236","faac0c3fa7cdf67b452d407e9a1db5cbe1e9140ecfe300200b0b0a6279c97c66","fbc8b53b5c6f3727c084e5e0429e410a3fed5a17e1a0144692fd196d9836a4bb","fd04d7588bb9e6ca0a8b65ed0c9635082a9ee5f46b2d1b5b25866a072236c1fc","fd60f2a432086c6fc4a4c39d8d2d6edf5794c763c05a6401db2bb5fa2c601775","ff532716738e2fc716c10797d9717f324cca3a1234320a84a73a0b89569f11ab","ffd0fe3449e449c7b9fcdcc7e2c1ffb677e57ad935a252de88a0122d437efa67","ffde5c700732beac27a9b5162213d387422ce199400e56d9cefe550005b6a542"],"schema":"fsgg.atlas/1"} +{"records":["000ada42299601fba29016e5c0e0d4012876fb42670bb10fa0b1315477254ba4","00641d046d6869fdd0023ab3df99e0e67a6ea28f0dcb701f622b1cec8b3e07c6","026b08fb343aefe19177e95b759560d340d372def4b71acf613fefee3438ade2","0357495d23fac4fad210b6dd7ed7cc57dd33d107e1659a81f085cad78300797f","036c148f6d0e89858c9bf4cf380272ca6904bb4ca277a909fb71c47f5450cef7","04e404d89dca295564813149472b1de8e6c43357e2f6d91d169ded7600ed3a02","0509e5c6fdbd2dde0c0db8558647080560714804d00e4f9268342f2e84858a3d","06ad2c8aa0ff3b862edf3ba99e0e4e8801ee163709e66333cd06c3fc61232b05","0a6d7dc5b64970bfdadc9049ace95e8bc163fc421beea70129ff0eaa692c6d06","0ad4403c8f4078dbfa543310c69bd1dfc768e305987214ffc37d7b2600c4687c","0c22360d4653eb0f450e4d3d34564875f1660cfcb2d546095d98b3faa3967cbc","0da4d093b49c0a1f654b38008bb01195e816829279ca1989bd2448194e15361b","0e560af7d9dd2e0f2f588a74cd35512973747f20bdfe0bee0bc889105ea53dc9","0ea7107c2c8edaab3ff2bae32f63cfbef6903a51cdaff257278f757ed5ef429d","0eef4d717eb03f0906aa3be7336aa71f831726afabe8a56077b76f6e82fd08e1","11fe30832d93706c60efd836b09f35f049c4a715ad6144cf277ca240c5780704","1244d27db0cf5075353bcc622d0fb3b5ca6a7d08526e2c5754e8b745c250bf3f","155fe673b8ae12549c978e1bf1d5c43e360937fcf2135cdcd5aea6f6c771da44","1945f527afc3c2930ec4d7fa57ebb2ef7dd6321c0dd3ab9233c9963e9e613165","19d657b67672257ece127f3b957674b7fb4780843148db0a36a0b329c2a418ba","1a24f6ef0c08a898f309c1b925fc19b29526f913a61a1dfe4b1a4308ebdd97ac","1b5351b2dc647aba864e387168db5128435cb80da94fc42581cd60a05fc34b9a","1da011289116fe88fe92cb8f0e83ed7ccbbca251681d4e136c5a61c40364f8d3","1ec9445b242d2a2e149fe71c67bf13d8c0e4ebe5a6ed7b022656b9941973909d","1edc36731a9c76ad07d269d8b4fd84c8c956bb43d6f56de17d6208164856ffbe","20901b579f69cc97eb56b492938864667576e1c9bfacf13f8a529c4f6e543448","21338155cb4f52c49e5072c877771be67c75590d9b238ea025fba5209fd6e018","23af79bd1e7995fc8162ddc4d830318acb054bbfcc9c7d5cb141ec306da67386","24d4f2730d94d1b7f149771ef0e59192f4936d142b21f4a56b1a391e4514d38d","2591526ddabbea03fbdc38bf172bc54f42df9bc51eba7ad2b70d6e67215f08f1","26259abc7fe745f52e06f2aa2abb0e50f189bc7608065f04d5c669a0a99941cd","26290a0990d6dac0ce9448e05eb934210603356043dcf14a5d80585288e2aa92","26d6b31965013079d4db67a2c403e01f21e3c30ae65953400dbed92e289a0925","288daf614247c260cb673d8674e8b3874ccc4e269347836851f702d7ac8e2f7c","28abfaf6d50ca38af0b88aa50524200c17af9000da83ddbab3d8f9e06e020fa5","291d3db272eae084d34c04bc1305f2abb26a7e7acbc5515208469b46719a4ed1","2a38ddebfe3380232e35d5a24f9cb9f7c38abbc9c68add4ea5952c1e65d328d2","2c76ce93500601e281a41f5985fe4e3926fc8bc9d01ee687f14052cb553ad2d2","2d599c722a08306b98f2d833fb3e4a7acb9dea92e6a58820caa2f65c09803fb8","2ecd502add2d801eebed39411fadc9a80098ba9ce04a5f4b728a0e4e331232d6","2f7357367d921995f4c6fdaa693392adcd2df4860ef4d25c8dc47f7ddea8c755","2fb2ed7902a8e35dc36489a23245d963026d688008c92fed6fdc1f6bc27198a6","310bfb5b2d061bb733771e5cb7b3b7d25db43af5eda9f806169b7ef9330c2fe7","32f69a7b8997ae98b9305ee578145d795dbcd39ca4469bf2465e57a0295cda51","335683e33b94cb86b5e426b4faed200673bf850151191a08458136ceb164fd4e","3407ec53a884d3945d86a88d6b9a883419dd426e96b1108a8e6686f30397a629","34463778cf2d29e3896a65613cf9e3eb3e9f2d8946d17f12b609e70eec63d128","35da3938b72cf3520e126ad595157104b69ab748904c7b4e12f563d6b103172b","37c8908ea2a349cd3034018027160ad810b28ad1fc203a9a353971e1f7396b4c","37e39faee019bb041627510f1f02746ba9a85696417a083b438eb4974b72c2bf","38a75fd804821f4836f0a7ba8d41af3d3a3a5f5d7dcea68487009297824258d9","397476cf107b48e7a662264f8fea9f880231fd3d1e0401622650f214cfaa35c7","3ad8b0398ba6c354c9e31b7438b2515579fc0b1f17de4b35a914c862a3a11e3b","3b3c6cf083b12a840565e00458e2fd4ee8a61f97cda452703a6b13d7776b6c13","3b4af144afed3d52dd2e1f64e23bc25b3475eee5f7af3bde9886761b15c33dfd","3b5d82795e9f5d1992ab67e078fcf1108247ab9b6d1baeac944d3ec0294cec5d","3d0274f77576abdbdf442c8843e955e1bbc91e9f8cbfe3646b119337cdb13c96","3e2f66baa16c7ea936eba34720a55897438f60b343cbe8fda4eab1e5dde044eb","41c768ea17144c6ec225e9a65d4c3c127fdd7264dcba1a89aa17b20fd5d7e3ee","42aeb46fcc3d10b95e4067bc9cda875fa933b4102873f67c7bf1f8ca6799a598","4320b92712bc14dbe10b56f1cd3d1bdc093fc4be6016732839d0be4dd4d027d3","46cdf2c207f79d388001f6636dfb7a98bb2ba72b9d1c6df4938f0a27691e07a6","480f1ede18ae031b164d49d676feeb1090fb33932676ff52e1e2eb24e8d154cd","48797c44c92cb34fd9a57a08020b45c6920b2268dc8ad616c0f814a3710d5316","48d094622ada1806cb30335926007c1abc476b1f7b45a2e250c490afa25e847b","4a724a6a842a132c2185279513f341b79f9be93e42660f1255770eeae3b1323c","4c8c327dacf345e184042092e96ad3ea02ed4cece57dac5fa68ea52fbb5a6adf","4d5a44ba07fafeab823b54a21846269330ce35b4c190f3ddd5434bc8530d9b41","4da0a5be70e8af9c39623deac83822749482187f6a0fc3d186dcfddaa7111576","4f1e58fc658a4ceda181e2a7fa249305b09b573ffd68c2489f204f4957224957","4f2750b974c1404acb721ffc84cbd1d0756a24211dd6f6503c10ea74dbc45676","509ec9c08864b9dd0029f32ffeac85fbac863e2dad459994c65b7cb5264faffa","52049cc9cee43bb27229e6b3e983e02c6aa20dd7d153b13e3c74bc6d2b47cf92","5382c901d160ca2d79888d8acd7a690a5349826b5da486274b0800c9d7513f11","540879695d41205515aaabe5466971014cb43b960a26b8e5958e37fed63df762","5560616d1e72f0a539f9ebbfea3b7d195c1ef5622f97994af1963748d4f97533","556ee783d8e2e4ca50f656c095758be613983f904d998a6534fb155510114f21","55a4711e799294d06988ab4acf77eacd7d424123082bba3ec987dff0ae13999c","55ae095961d78a1514c4dd1e63d477c60179a8662571ab5a90abd3eb2b83eb10","56e7158313357bb145bd98c5f790e569be2203fb2601565a30091a597a7e7ff5","5962dd14d3923433cf723d698d1af19ac37a270b6e88445643fc56a646faab5b","5a2064cdf51026eed65457c05f34bec919b31d96d35c29498d298685965f0b5a","5b77bd6dfa81cc339e729e4195e258facbfeb64b9c680512f742e3fb1961fdd5","5c3527e43fe24c5aa171c6fa4a3de7fe5e78f2527aed0dd19cb21d154d43da21","5c79c77f00167ca140127b00f1a79e1ffac621e46fc461089594206a7df8d7cc","5d015880319af666943e68169ca906bf2f0c813d8bf2c5c0262aeb5a40366350","5f2a75b89983d1005a38afa2cabccc3a39f31989807120281d8505ffd564e0c6","5f4fa6dde5930fe1b42f805895f0f5fb135c2b3ff9830f2bd30ae7526a3295a1","630fdcff1f227b5baf5d10bd78ef0fde68791ac0cd8a15f65065f5cc4501b17b","63113617f2e4ee6b827a69bce6afb3949190a282f5feaaa9e2c9f82372623bb8","63544fa69b09916d52b305700eb9816305ff22b77162a44edd13897acea3a655","63a4394e689acf4a4762cfb4df691d05f923fdf592fd2f8ea41e6a54f98d1136","69ebfc7eb8427db3c5c59bdde652d0cb269426126f8540b1b58caa29ccf130e2","69edc4285578313d1dd2f914d69add075a7b354f7fba717606d1abe15292576b","6a34d9279cae58765d6ee4a980192c0e15f3ca217b9f1815861d472a281b3cf8","6c3c592efe9c684ada5661b8cc88a5c3f6e57c841db06b9e070687504cbf6236","6ce6d164c3e31463fb9e144fdf91413e55d077cfc4f25092bb02923fb538a84f","6e08a638e1e28020923effd4c65fc517dbe7b06100ff76cde74e427191503b84","6f3a7020233cd77cfe59eefec0a277f6dda323743c8d80e4e54a95cd3cbc23cf","6fccc6f0c5fa71c43211785dced8abd0f3295040eab56063f4e8d77f1c09b8ef","700cd21af9ed7e81900fad9d52de2fb11db48e64b038e4293168f85e5dd0e043","702d1dfa75e92a916a446429f474d4c296e6ea4e8c487995852d0525e8440659","704cf778db6086c3e282c81249fb0ef09c1d7c2043335ef74c7ecb69bb3e84ad","71ef1ed2d5e4bc7eebe7a73bb3e9423e5bc2f8319186380fe8b38334952d3b01","7256ba00af1cf759b95b7bf8ae3b9943f31349bd10a7652a26bb419b368d73a3","7369b339daca0fcf46ac7fe82d65ae95c75d7dbcaaae51209e6d90b6587a014e","73ec844fb3e2b9febd00ba37508b284fad141630f03cb9f74e36a195180f5054","7410de003c7b582e30470d1209eefc796a70c76fe8d61dd9ccfe01ecfa41310c","76bf5a9c126db6eb466287a7c0d823327ee9882a70eaaa6efb03d169b5dba808","781a64598efb2a11156f07271ba1c14c4f6b3d73aa2943b26eae02063df7af70","799abc1e8d381b8d97349479139985e383bb49179b5a80f39807cb35a3ee78ce","79faec494bdd6d098c9d2a9d8559f822938c6b2104188db95321d89e7a732979","7a032dbf0351aa32c77c8d187f7eb697500ff186c88c5946ecc15adc972246a6","7aa52373f2721dd76fc8eeb3d6061794f27ea8d11e96bcb1ff25a97994a77d5c","7ad4ef4b8d3221758a9e7f9577750ee03f6cba11c8eae8bf25f74a3131bd21a2","7baa35131ece7ed9860607157d2531d4d70a061bdc9bb9876e20328f127cec53","7cbf970a11bdb91a40e248eee97ef789205910ebc913349698fc75ed35e82fdf","7d6133667f81aa66a98755d253ea43301b45ada338225df034d2ffdfc79829e7","7e89b59b456dde4bbbdbf8079665bd82c51d8e500018472981c15618b3893959","7ead0c68ffa0ced241af74dde58b3831343dff3f7eaab64bddb9954545b7ba12","7f8188b57ad3b0c28210c95954e5623376a4262dd5e75f002700c6094b8d6b6c","7f91dfc2ea1a3131c4090375db0f489c2a572e245ade6cda4ebd440446d6d60e","7fcb8cba3ed0ee9c342947aa88f0f699bb4f5c23244d21c6c739c9b66d7c6101","800060d7b4934508d0277f90a464e3112fd2fc99af4ef23825d09b0ff53f91c3","800a802a4ce9e597a102f0a566535c1f9f7adfc60c41af6bd2db4fb7fe3c0d0e","820c12fcbded9048a363b9e0ebbc48b24f85fd4a68131b5dfc1b19057bf09ddb","82c419e5de083e423330432c9d45c744043d1bccd8eeccb41e3014ce9ae3c32f","8343a4211a4d0ffdb320d5a4305174d85bb707d15dad978f6436297d022daa11","83a97b9ebb29f5cd014ef5e178970a601ee92c44678f05d1860b383c5f63b79d","85a962a7c23c14dff8d683e738b53f422221697b213cafeb616d3a172a6c4223","8629fddeb4f273b35df69d4d28923adc14eff59d919b1a495d1a68818137c561","872ab2b2d65fe685b91e355f5af051c85b79569ece16448160d01fef38039624","87f2b3634baa504f2ed9508c6cf6a47bbfb36214a177eb13d70d6a987706818c","88b615ef6a31bd9958e98b8ea522f49f0360ccac5d9fa8deb9e3ef3fe3147d9d","89cafbb20d6029656266d8cb0f85103fa519c8032598282fea58c94cc59c4125","89f2105745b3a7cfd30e7d7c598d6c8fdde0a599f30fd0db7382cba50412445e","8b3eec010d1eae43a28c88434f2410a751f790a9d6ec4a08e75e68c171629ab2","8cecfa09651c40be4d7c11c117c80e1911dc75bf6f1cc34be64706823cc024c3","8d250acd40c8a24ba0d51cc73e65bba6856509b5fbf4c7d7a435897a01c6e764","8df1420c27503370db9382f68a0af8d2b4d56f9dbc94b24ffae450a905083a79","8e7371228a726f381fb811d1d812c39917788a3df7e53dba1a3c364e755a0c03","8fae27ba5117e202afbd523b249fc454912571900fc909f5419b8ac96c773c44","902b958b4db7d8d8bf73a82a8aa86e5485b39477047c8ad60175d118fe31d987","91c9ced5e9ab8da897b7f69166a7d0bade5c58d511b42d60d5430d536da45d09","941f70c384905ab77cb9a88e2671301117e4df553da6fc7a09210710deb9b6ca","9442788fa51227044803f1d3efdfc1c2b2da372871a85f0f7a6bb3596a5c003f","947a1cdd43831936480167169d30334f818bb5d882650a3547827c05204af111","971f59cc197732d0c0b6b8aabbbefca4550fb8fb04f8522bdb4257c05a28848a","98a097d6ebb754334250dfd3ccc5f3dfaf5966524758cbfc9e10adf4a0229693","98c7e4bc2f05e9b4ca703db4a02347db7355a44f04e3a4003e26c46a56bded2c","9944d1a9674e555a41d31d069d136461eb06dd4052d40f2e4ea4368dd978e01b","9bbd03293bf53e9db51401d157b3eb2aa51e9c70449350e98b9a0a3fc9a684ce","9cf90b3aa59f3ca0e40fd9e1fec9703428752d63bded6b091d28f614c9ba99ae","9eb67ea41c5bcb9557ba51bbbd1b321a78f16335cadebbed848d8e6c1fc68bab","a0ff0d0bb3a3c801b637d091293f2eeaac68e934274e4116d298ba60ec3461cc","a1baa1f699fd4ce19e8ef6cdfe346e1b0be63e16d5c5cd5feddcccb16a62f269","a3c84d76be9d891812e795dd46470c2978dceeff928d729c0d5dd6def599923b","a64e8aee389ae696d0d4b045c0153092113fa522ed5a0fd9b5658b8418db4ded","a6c531ed9bbafabfdd649f3030daf2f24461163aaf99dc73bb24dddb77bbcb90","a7ff7302e668dcea1cd1db2241ff95c0d73534539bd03fdefebbfb57f60d3849","a8b4a33078335d2811bffb78eee49aab5fcb31597dae366d43e20c7f7800994b","a91a47fb4fa5c1b1a834fa602030e435ad641240e6ceeb99eeeab7341ca09dec","a91c8a1431a4120667cd523cf56bac004794fc5b8b24275ad2f9c8a15c75fba1","aa131e74e695292adab9f57b3ccc5a503a836dd4b95a3b2b107c69f35dba3637","acd7884bca46ea9422503cead985691da05cca25bd5ed52a199783cae7b8b01f","ae69fe306bf5db346ddfa4367cda24c95e44213baca27b0ee7d7167bcdd85af6","ae8c200dbcea29f43b29974cc247d70647c80d5d76385396f1c82ee9f669e2f1","aec13a075b84253397fb97e1c93a23e1aaee6d6bff2a9161bfd00a5b1d7611de","b09355a97e3aef396f681943b37a404a98fccc6bcb97781eddb2fc000d1d985d","b0ecfca0d114bae34ffa62ac3ea05159a4415fc6eb73ab1fcc4d79f657268f19","b25c41f19ba40e646fd9b6f82051ee4c38985539e445b26bd628eae98537df53","b262187aa66e8a97083bf7f79b91595bf7a4077abe7f8be5b00b4998f4579d20","b4091f93c3d96e36b0708f5dcd46e0e7a0a48f098036ccef6164e4a6429ed94c","b4093c67a9195ee7d28d2575e967ac80057b92339489c244243c7c504c669ff0","b44352445272089cf90967d4d413cf7009bed0ac19f3fa95cb831d5ebad081c3","b4ce73bea5219f1b27bffb36c6a9dee14447a710a8938db807770083db4552ac","b5102ef50e7d4ed1925af5a8b45192e737df02fafb75d7065995a2bb93d2e8e1","b5428b5775526a00645566822530fb969b82247ba83f2c80c06d34151e1f9061","b6cf3b02f36e0efa93b04667cdc5701340033a09e41a7196277cf6756999a666","b77c6669bcd54e0fa949faf2f7205f2631acfbc1ccf79f93f8dab5c5717f0e93","b7ffd6cddb12384224772e8de79aec89d8f4bca966a3c2a05763889f92a6db5c","b8abe10a2a92bf537a49e8dee92baf8de3ed591848a1b25151dab0d7ab3134e5","b96cea09313d481dfff1ed1a2c552ea29e8fe68f52139458996a4e36157748d2","b96f9beb6d6d8fbf88c4b8b2b807a362f2640479cab6173cf64c7710817785a0","b9ad2510d8249ec4c8e7fd8b2471727aa1bd0ce8f3dde78e545fb2f8f2985a1d","ba7d7464da8e13722232c8f86273774054693681becc450a68aea21a5a0e9b91","ba87e5d43ddb10937bb17941f055f80a223d0981fbba44107aeec8530e3a7774","bac3431138e986d6426c1e81bdfe0a968394896c0751cbbcc8f36002fd0ed069","bb230236c4ab6353afb4147014c93204d3d1eb8a6d18558075df5fe79ed7f392","bd714f38c881208f1190ad714bf8fa5aa63adf302bdaa8ad8810ff279e43459e","be75cc1ee935f783be39978de91ae196c16141d4096e16eb6d07f59583296b4b","be8c3cb2d8d67e63c8b069920b74c6272922febbc6a0a2c4a0072a7a213681d2","beed0f36d9b1b9a20bfbf89c96862482b8d5b9d4284bc89539efe9c9b11f000d","bfd21b5c8eb26e9d475868bb30d66ee08f20876e9df5cd06aa8fec01ffe666df","bfe97e65f2cbe6bcd0f14ff57ea4dc1dedb2e5f0db92d04d0982cf1932ac1c3e","c112d36ba38c362da1c022945db5b6bbdc3014685ca9bb7d940f5086f00a675c","c23cf45c1dcb748145d87f5c173dd3c8becaf9e3f6fdcb3e2ca91d6726b0842a","c29b8d250a7b5e73f4ef675329da2251b8de032501e4836445b6aafd90c645fa","c329c9df0dae8a036da9be440432d045be3ee13cf5664cfa6ccf11576ed11acb","c4600cd5358b5798a075beb54539d952f200def1c9a573bd237c795fd33ba36f","c6752cc3c7ad06d1e9f127365f078919ac46b77f8a8fe413650094d914838ec3","c6867ec30530fd3feca89a4e968522f783b636b165ef74f288c42dd50bd51a3d","c6bfbb004af355e96ed5b4c8c9b8b7a96d1c08d24bcde7c666728eb9497d6d71","c8bd340e6fc7fa3e97415f7ad4c22c51d88c6e77f782c12923e841c04d3f882b","cc24c3770587f2421514fa399d2617201752bdca145ac39058de91d45d3d19c1","cd2da00f6f1bad8fb7c1b87cff80e122eb017e44a471cdea769efc67db369038","ce887fb65b6977a2046e7583d704863624e55909ebcc9c3ed065b3d13079a410","cf9223c369b6fb7baa52f301f904352ba8e8d5e4c2a06f70de6ef1cf76fe1b84","cfc3b5044af37ae7485fba8067dcb22b2438bdaa6e3a30c22ce0f9e2c00aa597","d0481d9b6111ab4afba0462e88970b863284807ff44ca97364c84952e3f88583","d0973a1aca6a118375b466d6e91821f8450110fdf042ac848ee16912012d2b0f","d0df3068db679e24d9487ee09a6462ac5cf3df30f46ee466b66feb6dd5ff71e2","d227e0a73e3c5452bc5ab41ea2c695dfc0ff9b0c1c81e59ab3173f796a4157cf","d2cba4dbbfe3d026f825a8b470a2f6011f9b8e245cf042ae8889afbb17dac6b2","d2e4c515093f8a2aa824c8b542a016e5c321065f4525931b2fac4f8af2fe52c6","d31e8aa21d1498f2d4a07c4cc89ea6f5a6d3ce54d334dbff230e0f55db35c85e","d37de74aadd5916eeae243decf347821c4e946356b9f70471658638ac3092f91","d49d02cad8bbfeac607457b08aac6068916ef45d8f6c980279d6e654407cc7be","d4f51c31a454d9abac29457cbbc21e1b5767c0eac1b37c41ee787a3efb05c80f","d5c084e12da4a5111487c166b879042a21a056f761ee22d9237cb4f65f366341","d6077d547aa21ea10a9bdf6c752b8d1a0a6382b4b43a0fdf790f245e66a609fc","d67e8c1aaab1ce6ec1755599ecde153c47c6b90dd4c301663abe9057bc31af57","d6abcc1484c3df45bde915abf48324af1e995c3266a3c6c069e98e94c8d9a4d7","d8ca8e025e226ad6bdd32a6a9fceae2982b0413a0ad09314558b54bdc724bf99","d8d03142030c11a0aa1012102fce2b202baf88e424a1236832937e87450dc579","d9823dfddf6c507ec030fce4bd2d98fbda18e595c2ebc563574d9196cc7a5e33","d9b0972f3406075b860ba7cd2e71d4492c826960319b10389c2c2820e2981254","da37a61fab07ec8856b725854e4064f55a59149aa69cad1bcbf89ec478b9f578","dad01e5bfb13a6c4419f4d24fa8dbb424e93a1c4be656b0e5dd48ac546e0a0d9","db21a75b4fa6165f75268963474f3262124795d816ba80f685bab2c6eaedb028","dd97ab52fd89f42352c595ce137684cc519c473fa17969e8a6adcde7322a4748","dda0a34d6704887eb36bbc0173334b49d755cac8cea3bbd17bfa972f04183dd4","ddbda9408727a19a4a55d516bed99331edf67d8301de9c78564716465c949619","e0288c94ca9c16a6de217e6baeed720fcf83e401bec45bd15ca47ba8fc9b44dd","e1667469384ec775a3df665679cb3fef057dc84dcb18ed8db8b9c5723835968a","e16c328504278cfe520d6d99990f2a4370cc48159aba86694d0f7598fd4b0611","e24df071f5325bb3a5b20f355143556bc7712535ee8b6ce4c426598f06fd2448","e28d8e6b71264d0bfab853e63178f2c151367cce0dbd16125596ff3604b6658d","e2c734504d211580b4e6674eb1c7d31fb6fb730c037210c34c980a96f9098269","e3f19c383354cdf45311f92f00b90fed25dfba7e9892ab2f5f3aa4885876b75f","e409fbfe439455330c0fe003de860e30f7093cc3cc83a32f886c9b539a29f60b","e6300ee8e6c2c4ce6d7ab02b7b06fd1cabe3c5c52b99a6ea3ea8b5acd5092e0b","e734d068446591aba283d136c21b4fb0209f91352cb4fc6589bd651cdbfec163","e7a333109a7aaec2b71048868500c15e721900628eb48790dfeaa1fd4c2dabc3","e7c9175fbfd9fd84bed95d552bc0a439b07a233c3e91fb39ae2f23197ee53f1b","ea1b8a251ecc1fd96697d0c602d3e14ec46383d27bb9485a0326cea5576ffacb","ea311dca2ef14e02b9aae563bb28dc737b04b7f01c1ceb2be3d92007d2c74ac6","ea8e5b79bbe5329ae8437677c8316f2f9fd75bb1d40c88308c269140a7e564c7","eb996138bc91c0ee63bafe1ba10b130ff5a2fc82aa4918296222e0a831a569fe","eba6e8e5a12a86f17fade41bef365aa95491c469e18aa91aef64908a4263c905","edc160a11c07dda8072748b66db7f27b6cd8efbd1faa3f6c826a0fe445859c17","edfcbe4773eac1fe2964179a4ad21294efede89568f2efd8e283ac18bc5693b1","f0f90dee84db760cc1bb0f6e6983d4de0e3d5d9f4adf7b2b52f0d3dbe6d585a4","f1d4a6e98f41ab3f6cfd67cddeab9d0ed287b92cb3dbe575e3ce61925510a792","f21c3a9267110e469f224ac7eb76ca5bb084fc90df014f1ca6791d5770483944","f379a1b9e29aa7fc25c4c0c897eaa3c0e90d66a201a0ade8cbf523a5cdc8cf50","f3e04891c79b604f9235f438adfa49ee27db43d25c7be0d1cc06ae53b8f6d2d8","f46904e701174fe2850798d9e1b077bdac42fcac01dbc385298da01118c82aa6","f53265f53af0b0856911ab08b373736964d0c443e8ba61d7f1d45f5e5b04edf3","f686173d310f41e26e3fe8a7c1dbf4313e4d793323335348badbcf4633f5d699","f704c9c9e2cab1ed44578f48d161320b5fb4384ecdd8b40a5e22c4078a8594da","f89156489d35f9992d5971a52a6e03a7d7f095e15c2c782e85efb1408a2bd6be","f99ef6fa3c9c6bf572ec69eb6eeea9f88ce6590d3a5565bec62b001b6f2a376a","fa2dfc22b4fdbcf402a822e8dd376925655d997a0f96284a60f10665ba3581ba","fa3df5f8349aec4805bbcd279b88697def63f2462d8ada0b5fe1d9983d9a6daa","fa6b97cbca1d4f09662e706293b0aec1eb76b8e2277441f54ab6c548b5423236","faac0c3fa7cdf67b452d407e9a1db5cbe1e9140ecfe300200b0b0a6279c97c66","fbc8b53b5c6f3727c084e5e0429e410a3fed5a17e1a0144692fd196d9836a4bb","fd04d7588bb9e6ca0a8b65ed0c9635082a9ee5f46b2d1b5b25866a072236c1fc","fd60f2a432086c6fc4a4c39d8d2d6edf5794c763c05a6401db2bb5fa2c601775","ff532716738e2fc716c10797d9717f324cca3a1234320a84a73a0b89569f11ab","ffd0fe3449e449c7b9fcdcc7e2c1ffb677e57ad935a252de88a0122d437efa67","ffde5c700732beac27a9b5162213d387422ce199400e56d9cefe550005b6a542"],"schema":"fsgg.atlas/1"} diff --git a/docs/atlas/records/7aa52373f2721dd76fc8eeb3d6061794f27ea8d11e96bcb1ff25a97994a77d5c.json b/docs/atlas/records/7aa52373f2721dd76fc8eeb3d6061794f27ea8d11e96bcb1ff25a97994a77d5c.json new file mode 100644 index 000000000..b0de5caf2 --- /dev/null +++ b/docs/atlas/records/7aa52373f2721dd76fc8eeb3d6061794f27ea8d11e96bcb1ff25a97994a77d5c.json @@ -0,0 +1 @@ +{"citations":[{"path":"src/FS.GG.Coord.Core/TelemetryStore.fs","repository":"FS-GG/.github","revision":"96251bbe00685b62b13a7998599c2ee3f7b189dd","sha256":"964efe1ad5927a91c7ea164422d8217fb17a31a578ec7e5f26a8ef76bc320959"},{"path":"src/FS.GG.Coord.Cli/SkillTelemetryReaders.fs","repository":"FS-GG/.github","revision":"96251bbe00685b62b13a7998599c2ee3f7b189dd","sha256":"2da83e881c4d4a45f7502a6e2c9039eb322c207d66e58f0eb25940af01833102"},{"path":"src/FS.GG.Coord.Cli/SkillTelemetryAdapter.fs","repository":"FS-GG/.github","revision":"96251bbe00685b62b13a7998599c2ee3f7b189dd","sha256":"5b73ddfa9b95f81243f0c854e017092939bf3ec8aaa5534b4ce5f4e392f1f452"},{"path":"src/FS.GG.Coord.Cli/WorkspaceTelemetryApplication.fs","repository":"FS-GG/.github","revision":"96251bbe00685b62b13a7998599c2ee3f7b189dd","sha256":"67812f77da121ea0639e409bddb33ff390876f8bf3080f980e29d2fbd8050c20"},{"path":"src/FS.GG.Coord.Cli/TelemetryStoreApplication.fs","repository":"FS-GG/.github","revision":"96251bbe00685b62b13a7998599c2ee3f7b189dd","sha256":"4af499d349993e33609b25738e116f159431f9370275eca4ad08bea508e47397"},{"path":"src/FS.GG.Coord.Cli/TelemetryApplication.fs","repository":"FS-GG/.github","revision":"96251bbe00685b62b13a7998599c2ee3f7b189dd","sha256":"15e6d05562e0ff0d19a38129f39a6ad70d5eae8b071d2b92262dfbf877d8ac51"}],"conflictsWith":[],"id":"contract/passive-native-usage-observations","kind":"contract","recordedAt":"2026-10-18T08:39:36Z","repository":"FS-GG/.github","schema":"fsgg.atlas/1","status":"recorded","summary":"At the cited source candidate, explicit selected Codex rollout files share the maintained native decoder and project actual optional response counters through provider-usage-observation/1. Item, inventory and terminal attribution stay unknown/partial; these canonical-only facts never enter qualified item totals. Stable native thread/turn/response identities, a finite serialized producer index, private pending intent and existing immutable spool retain corrections and exact replay. Local enqueue/reporting make no receiver or App Server call. Existing remote setup has an explicit capture-only flag that skips only credential presence and reports receiver unverified. Same-owner state cloning/migration is unsupported without original state/fence reconciliation; the supported production route selects one association root. Receiver admission refuses cross-owner changes and numeric predecessor ordering holds later batches behind uncertain or durable-but-not-applied receipts; unsupported or rejected passive data remains pending. Source preparation alone establishes neither compiled qualification, installed producer capture, receiver compatibility nor restart/restore durability.","supersedes":[],"tags":["telemetry","passive","native","capture","attribution","delivery","corrections"],"title":"Passive native responses separate capture, attribution and delivery"} diff --git a/docs/roadmaps/utel-operational-completeness.md b/docs/roadmaps/utel-operational-completeness.md index f6249454e..dd2f51884 100644 --- a/docs/roadmaps/utel-operational-completeness.md +++ b/docs/roadmaps/utel-operational-completeness.md @@ -38,6 +38,39 @@ introduced. Existing uncertain publications remain under their original identiti supply no execution authority or reservation release. Required exact-source checks and operational receiver restart/restore readbacks remain distinct gates. +### Modern passive source candidate — 2026-10-18 + +The following candidate adds `telemetry passive capture --config CONFIG --repository REPOSITORY +--input PRIVATE_SELECTION` and `telemetry passive report --config CONFIG --repository REPOSITORY`. +It shares the maintained native decoder and retains partial `token_usage_record` responses as the +additive `provider-usage-observation/1` payload in the existing canonical fact ledger. Stable native +thread/turn/response identity, revisions, serialized pending intent, cursor and immutable spool retain +corrections and replay; passive facts remain excluded from qualified item totals. No item, model, +cost, complete inventory or terminal status is invented. Local capture/reporting calls neither +App Server nor the receiver. This is source preparation, not compiled, installed or operational acceptance. + +The explicit mode0600 no-follow regular selection uses `fsgg.telemetry.passive-selection/1`, an absolute +`codexHome` and explicit absolute `sources`. Initial bounds are eight source cursors, 4 MiB of reads +and 24 normalized response rows per pass, a 64-event/64 KiB batch, 128 MiB source files, 1 MiB lines, +a 256-response revision index and 1 MiB private state. Existing spool bounds remain 128 ready +envelopes/8 MiB with bounded outcome retention. Partial tails defer; truncation/replacement creates a +new source generation and continuity gap. Cumulative turn snapshots never become response spend. + +Existing `activate-remote --capture-only` is an explicit initial local setup option. It retains +configuration, permission, conflict and lock checks while skipping credential presence; its result is +capture-configured/receiver-unverified. Default activation and later credential/receipt checks remain +unchanged. Local-store capture-only is unsupported in this first profile. One canonical association +spool/state root owns the producer; undeclared same-principal cloned roots cannot be detected offline, +so cloning, migration or reinitialization still requires original state/fence reconciliation. Receiver +admission refuses cross-owner changes, and later numeric producer cursors wait behind uncertain or +durable-but-not-applied predecessors. Unsupported/rejected receiver data stays pending. + +The existing Core, CLI and Telemetry test suites and maintained `coord-engine`, `coord-core` and +semantic skill-quality workflows qualify this source. Source inclusion is not a passed test result; +actual hosted compilation and focused assertions remain required. Coherent publication, receiver +compatibility, installed producer capture and restart/restore durability remain separate gates. This +candidate does not replace the qualified installed 0.105 board executable or its accepted binding. + ## Capability boundary Instrument real repository-owned launch, dispatch, provider, check and delivery boundaries once. Guidance alone diff --git a/registry/driver-skill-manifest.json b/registry/driver-skill-manifest.json index 6bed4ee07..3f81ceb36 100644 --- a/registry/driver-skill-manifest.json +++ b/registry/driver-skill-manifest.json @@ -5,7 +5,7 @@ "id": "atlas", "scope": "driver", "sha256": "c18e56fcc56abf80903e2fc6829cd94b44f42947724a26318ebcbf1ac5e1b35b", - "tree-sha256": "9dd46214f50186b888da329ddcdab69814da1f8ac83aeb767e27694981a414b6", + "tree-sha256": "a1c74bf98ebf32b2e33780fb1973c2844617b4c74d90c2c63afe47546c009485", "files": [ { "path": "SKILL.md", @@ -24,7 +24,7 @@ }, { "path": "assets/seed/catalog.json", - "sha256": "58a9a7846781c5e7ed118998e50d5aab56eb3c4155d10f95740f9bb034997f97", + "sha256": "ec2e93ad50646d80c51e8d6d54447dabf752b09737c37f65b6445963d04c0877", "executable": false }, { @@ -592,6 +592,11 @@ "sha256": "7a032dbf0351aa32c77c8d187f7eb697500ff186c88c5946ecc15adc972246a6", "executable": false }, + { + "path": "assets/seed/records/7aa52373f2721dd76fc8eeb3d6061794f27ea8d11e96bcb1ff25a97994a77d5c.json", + "sha256": "7aa52373f2721dd76fc8eeb3d6061794f27ea8d11e96bcb1ff25a97994a77d5c", + "executable": false + }, { "path": "assets/seed/records/7ad4ef4b8d3221758a9e7f9577750ee03f6cba11c8eae8bf25f74a3131bd21a2.json", "sha256": "7ad4ef4b8d3221758a9e7f9577750ee03f6cba11c8eae8bf25f74a3131bd21a2", From 9e4f050d7327c77585b677235c45e36ba2bbe50b Mon Sep 17 00:00:00 2001 From: EHotwagner Date: Sun, 18 Oct 2026 10:40:51 +0200 Subject: [PATCH 03/19] fix: keep passive projection JSON node construction explicit --- src/FS.GG.Coord.Cli/TelemetryStoreApplication.fs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/FS.GG.Coord.Cli/TelemetryStoreApplication.fs b/src/FS.GG.Coord.Cli/TelemetryStoreApplication.fs index 8415ed7ed..77c811b38 100644 --- a/src/FS.GG.Coord.Cli/TelemetryStoreApplication.fs +++ b/src/FS.GG.Coord.Cli/TelemetryStoreApplication.fs @@ -3092,10 +3092,10 @@ ORDER BY f.identity LIMIT 413701; if observations.Count < 256 then observations.Add(JsonNode.Parse(reader.GetString 0)) else truncated <- true let result = JsonObject() - result["schema"] <- "fsgg.telemetry.passive-snapshot/1" - result["capture"] <- "receiver-applied" - result["attribution"] <- "unknown" - result["populationCoverage"] <- "partial" + result["schema"] <- JsonValue.Create "fsgg.telemetry.passive-snapshot/1" + result["capture"] <- JsonValue.Create "receiver-applied" + result["attribution"] <- JsonValue.Create "unknown" + result["populationCoverage"] <- JsonValue.Create "partial" result["truncated"] <- JsonValue.Create truncated result["observations"] <- observations Ok(result.ToJsonString() + "\n") From d4724b434ff32bd5723e6571273a81dd416ccd37 Mon Sep 17 00:00:00 2001 From: EHotwagner Date: Sun, 18 Oct 2026 10:45:20 +0200 Subject: [PATCH 04/19] fix: annotate passive decoder and fixture overload boundaries --- src/FS.GG.Coord.Cli/SkillTelemetryAdapter.fs | 2 +- src/FS.GG.Coord.Cli/SkillTelemetryReaders.fs | 2 +- .../WorkspaceTelemetryApplicationTests.fs | 4 ++-- tests/FS.GG.Coord.Core.Tests/TelemetryStoreTests.fs | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/FS.GG.Coord.Cli/SkillTelemetryAdapter.fs b/src/FS.GG.Coord.Cli/SkillTelemetryAdapter.fs index 17acbf762..35987acb9 100644 --- a/src/FS.GG.Coord.Cli/SkillTelemetryAdapter.fs +++ b/src/FS.GG.Coord.Cli/SkillTelemetryAdapter.fs @@ -1160,7 +1160,7 @@ module SkillTelemetryAdapter = "firstEnqueueFailure", (if isNull state["firstEnqueueFailure"] then nullNode else state["firstEnqueueFailure"].DeepClone()) "lastEnqueueFailure", (if isNull state["lastEnqueueFailure"] then nullNode else state["lastEnqueueFailure"].DeepClone()) ] - let private replayPassive directory (state: JsonObject) enqueue = + let private replayPassive directory (state: JsonObject) (enqueue: byte array -> Result) = match state["pending"] with | null -> true | pending -> diff --git a/src/FS.GG.Coord.Cli/SkillTelemetryReaders.fs b/src/FS.GG.Coord.Cli/SkillTelemetryReaders.fs index 37d6d44e4..34686180e 100644 --- a/src/FS.GG.Coord.Cli/SkillTelemetryReaders.fs +++ b/src/FS.GG.Coord.Cli/SkillTelemetryReaders.fs @@ -930,7 +930,7 @@ module SkillTelemetryReaders = let private observedCounters (value: JsonElement) : Result = try if value.ValueKind <> JsonValueKind.Object then invalidOp "native usage counters are malformed" - let count name = + let count (name: string) = match value.TryGetProperty name with | false, _ -> None | true, field when field.ValueKind = JsonValueKind.Null -> None diff --git a/tests/FS.GG.Coord.Cli.Tests/WorkspaceTelemetryApplicationTests.fs b/tests/FS.GG.Coord.Cli.Tests/WorkspaceTelemetryApplicationTests.fs index 0c9a06d66..6574250ba 100644 --- a/tests/FS.GG.Coord.Cli.Tests/WorkspaceTelemetryApplicationTests.fs +++ b/tests/FS.GG.Coord.Cli.Tests/WorkspaceTelemetryApplicationTests.fs @@ -524,7 +524,7 @@ module WorkspaceTelemetryApplicationTests = let calls = ResizeArray() let statePath = Path.Combine(root, "orchestrator-passive", "producer.json") let mutable reject = true - let enqueue bytes = + let enqueue (bytes: byte array) = let state = System.Text.Json.Nodes.JsonNode.Parse(File.ReadAllBytes statePath) Assert.Equal(Convert.ToBase64String bytes, state["pending"]["batchBase64"].GetValue()) Assert.Empty(state["sources"].AsObject()) @@ -782,7 +782,7 @@ module WorkspaceTelemetryApplicationTests = SkillTelemetryAdapter.capturePassive root "owner" scope.Stream home [path] (fun bytes -> batches.Add(Array.copy bytes); Ok "locally-retained") |> parseCapture File.WriteAllText(path, nativeRow "response-a" 10L 0L) capture () |> ignore - let envelope (who: TelemetryReceipt.Scope) batchId bytes = + let envelope (who: TelemetryReceipt.Scope) (batchId: string) (bytes: byte array) = let value = System.Text.Json.Nodes.JsonObject() value["schema"] <- System.Text.Json.Nodes.JsonValue.Create TelemetryReceipt.Schema value["workspaceId"] <- System.Text.Json.Nodes.JsonValue.Create who.Workspace diff --git a/tests/FS.GG.Coord.Core.Tests/TelemetryStoreTests.fs b/tests/FS.GG.Coord.Core.Tests/TelemetryStoreTests.fs index 6a09e9ef2..ebebb56e8 100644 --- a/tests/FS.GG.Coord.Core.Tests/TelemetryStoreTests.fs +++ b/tests/FS.GG.Coord.Core.Tests/TelemetryStoreTests.fs @@ -480,7 +480,7 @@ module TelemetryStoreTests = [] let ``passive parser refuses manufactured attribution completeness and invalid dimensions`` () = - let reject name (value: System.Text.Json.Nodes.JsonNode) = + let reject (name: string) (value: System.Text.Json.Nodes.JsonNode) = let event = passiveEvent () event[name] <- value Assert.True(TelemetryStore.parseBatch(causalBatch (event.ToJsonString())) |> Result.isError, name) From 8c899fe901d5cee7b96240c4a384d9c763af34e6 Mon Sep 17 00:00:00 2001 From: EHotwagner Date: Sun, 18 Oct 2026 10:50:37 +0200 Subject: [PATCH 05/19] test: cover passive persistence crash cuts and status failure --- src/FS.GG.Coord.Cli/SkillTelemetryAdapter.fs | 27 ++++++--- src/FS.GG.Coord.Cli/SkillTelemetryAdapter.fsi | 5 ++ .../TelemetryStoreApplication.fs | 4 +- .../WorkspaceTelemetryApplication.fs | 4 +- src/FS.GG.Coord.Core/TelemetryStore.fs | 2 +- .../WorkspaceTelemetryApplicationTests.fs | 55 ++++++++++++++++++- 6 files changed, 82 insertions(+), 15 deletions(-) diff --git a/src/FS.GG.Coord.Cli/SkillTelemetryAdapter.fs b/src/FS.GG.Coord.Cli/SkillTelemetryAdapter.fs index 35987acb9..292c3b29f 100644 --- a/src/FS.GG.Coord.Cli/SkillTelemetryAdapter.fs +++ b/src/FS.GG.Coord.Cli/SkillTelemetryAdapter.fs @@ -1160,35 +1160,40 @@ module SkillTelemetryAdapter = "firstEnqueueFailure", (if isNull state["firstEnqueueFailure"] then nullNode else state["firstEnqueueFailure"].DeepClone()) "lastEnqueueFailure", (if isNull state["lastEnqueueFailure"] then nullNode else state["lastEnqueueFailure"].DeepClone()) ] - let private replayPassive directory (state: JsonObject) (enqueue: byte array -> Result) = + let private replayPassive directory (state: JsonObject) (enqueue: byte array -> Result) hook = match state["pending"] with | null -> true | pending -> let exact = Convert.FromBase64String(pending["batchBase64"].GetValue()) if exact.Length > 65536 || sha256 exact <> pending["batchDigest"].GetValue() then fail "passive pending intent is invalid; retained" + hook "before-local-enqueue" match enqueue exact with | Error errors -> let codes = errors |> List.truncate 4 |> List.map (fun code -> if code.Length <= 200 && not (code |> Seq.exists Char.IsControl) then code else "enqueue-failure") if isNull state["firstEnqueueFailure"] then state["firstEnqueueFailure"] <- codes |> Seq.map node |> jsonArray state["lastEnqueueFailure"] <- codes |> Seq.map node |> jsonArray passiveGap state "enqueue-deferred-cursor-retained" + hook "before-status-write" savePassive directory state false | Ok _ -> + hook "after-local-enqueue" // Only local enqueue/readback authorizes cursor/index commit. Remote acceptance is independent. state["sources"] <- pending["sourcesAfter"].DeepClone() state["responses"] <- pending["responsesAfter"].DeepClone() state["sequence"] <- pending["sequenceAfter"].DeepClone() state["pending"] <- nullNode state["lastEnqueueFailure"] <- nullNode + hook "before-cursor-write" savePassive directory state + hook "after-cursor-write" true - /// One bounded pass over explicit sources. The production caller always supplies its selected association root. - /// Same-owner state cloning/reinitialization/root migration requires original-state/fence reconciliation; - /// undeclared clones cannot be detected offline and are outside this supported first profile. - let capturePassive root owner sourceIdentity codexHome (paths: string list) enqueue = + // One bounded pass over explicit sources. The production caller always supplies its selected association root. + // Same-owner state cloning/reinitialization/root migration requires original-state/fence reconciliation; + // undeclared clones cannot be detected offline and are outside this supported first profile. + let capturePassiveWithHook root owner sourceIdentity codexHome (paths: string list) enqueue hook = try if paths.IsEmpty || paths.Length > NativeUsage.PassiveMaximumFiles || (paths |> List.exists (Path.IsPathFullyQualified >> not)) @@ -1217,7 +1222,7 @@ module SkillTelemetryAdapter = if FileInfo(lockPath).LinkTarget <> null then fail "passive producer lock is unsafe" SkillPrivateDurability.withLock lockPath (fun () -> let state = passiveState directory owner sourceIdentity - if replayPassive directory state enqueue then + if replayPassive directory state enqueue hook then let sources = state["sources"].DeepClone().AsObject() let responses = state["responses"].DeepClone().AsObject() let events = JsonArray() @@ -1250,7 +1255,7 @@ module SkillTelemetryAdapter = scan.Records |> List.exists (fun row -> let identity = NativeUsage.passiveIdentity row.ThreadId row.TurnId row.ResponseId (events |> Seq.exists (fun fact -> fact["identity"].GetValue() = identity)) - && responses[identity]["digest"].GetValue() <> row.SourceDigest) + && (responses[identity]["digest"]).GetValue() <> row.SourceDigest) if responses.Count + fresh.Length > maximumPassiveIdentities then indexFull <- true passiveGap state "response-index-full-capture-deferred" @@ -1280,6 +1285,7 @@ module SkillTelemetryAdapter = // No unretained counters exist: persist complete line boundaries and bounded gaps directly. state["sources"] <- sources state["sequence"] <- node (sequence + 1) + hook "before-status-write" savePassive directory state else let batchId = "passive-" + requiredString "generation" state + "-" + string (sequence + 1) @@ -1295,13 +1301,18 @@ module SkillTelemetryAdapter = state["pending"] <- jsonObject [ "batchBase64", node (Convert.ToBase64String bytes); "batchDigest", node (sha256 bytes) "sourcesAfter", sources; "responsesAfter", responses; "sequenceAfter", node (sequence + 1) ] // Intent is written before enqueue. A crash at either subsequent write replays identical bytes. + hook "before-intent-write" savePassive directory state - replayPassive directory state enqueue |> ignore + hook "after-intent-write" + replayPassive directory state enqueue hook |> ignore success (passiveSnapshot state)) with | AdapterError message -> result 1 "" $"fsgg passive telemetry: {message}\n" | _ -> result 1 "" "fsgg passive telemetry: local capture outcome uncertain; inspect retained intent and state\n" + let capturePassive root owner sourceIdentity codexHome paths enqueue = + capturePassiveWithHook root owner sourceIdentity codexHome paths enqueue ignore + let reportPassive root owner sourceIdentity = try let directory = passiveStateDirectory root diff --git a/src/FS.GG.Coord.Cli/SkillTelemetryAdapter.fsi b/src/FS.GG.Coord.Cli/SkillTelemetryAdapter.fsi index 98f44ec21..edfdf68b0 100644 --- a/src/FS.GG.Coord.Cli/SkillTelemetryAdapter.fsi +++ b/src/FS.GG.Coord.Cli/SkillTelemetryAdapter.fsi @@ -30,6 +30,11 @@ module SkillTelemetryAdapter = root: string -> owner: string -> sourceIdentity: string -> codexHome: string -> paths: string list -> enqueue: (byte array -> Result) -> CommandResult + /// Deterministic persistence-cut injection following the existing receipt hook convention. + val capturePassiveWithHook: + root: string -> owner: string -> sourceIdentity: string -> codexHome: string -> paths: string list -> + enqueue: (byte array -> Result) -> hook: (string -> unit) -> CommandResult + val reportPassive: root: string -> owner: string -> sourceIdentity: string -> CommandResult val run: SkillTelemetryReaders.HostConfig option -> TelemetryCommand -> CommandResult diff --git a/src/FS.GG.Coord.Cli/TelemetryStoreApplication.fs b/src/FS.GG.Coord.Cli/TelemetryStoreApplication.fs index 77c811b38..a82141025 100644 --- a/src/FS.GG.Coord.Cli/TelemetryStoreApplication.fs +++ b/src/FS.GG.Coord.Cli/TelemetryStoreApplication.fs @@ -3068,8 +3068,8 @@ ORDER BY f.identity LIMIT 413701; AuthenticatedFacts = facts } with error -> Error [ error.Message ] - /// Bounded, read-only partial observations from the existing current canonical ledger. - /// These unassigned facts never enter item usage, budget or efficiency projections. + // Bounded, read-only partial observations from the existing current canonical ledger. + // These unassigned facts never enter item usage, budget or efficiency projections. let passiveObservations path assessment (scope: TelemetryReceipt.Scope) = match validateRoot path assessment |> Result.bind (fun root -> connect root SqliteOpenMode.ReadOnly) with | Error errors -> Error errors diff --git a/src/FS.GG.Coord.Cli/WorkspaceTelemetryApplication.fs b/src/FS.GG.Coord.Cli/WorkspaceTelemetryApplication.fs index 8eff2d218..d5fe58752 100644 --- a/src/FS.GG.Coord.Cli/WorkspaceTelemetryApplication.fs +++ b/src/FS.GG.Coord.Cli/WorkspaceTelemetryApplication.fs @@ -986,7 +986,7 @@ module WorkspaceTelemetryApplication = with _ -> Error [ "publication-advisory-failure" ] - /// Capture-only persistence. This path never resolves credentials, probes health or calls remoteOne. + // Capture-only persistence. This path never resolves credentials, probes health or calls remoteOne. let tryEnqueueBound configArg repositoryArg expectedProducer expectedBinding payload = let path = configPath configArg try @@ -1034,7 +1034,7 @@ module WorkspaceTelemetryApplication = else Ok "locally-retained")))) with _ -> Error [ "capture-advisory-failure" ] - /// One serialized passive owner per existing private state root; another association must refuse. + // One serialized passive owner per existing private state root; another association must refuse. let passiveProducer configArg repositoryArg = load configArg |> Result.bind (select repositoryArg) diff --git a/src/FS.GG.Coord.Core/TelemetryStore.fs b/src/FS.GG.Coord.Core/TelemetryStore.fs index 56fd3a529..f8b02e521 100644 --- a/src/FS.GG.Coord.Core/TelemetryStore.fs +++ b/src/FS.GG.Coord.Core/TelemetryStore.fs @@ -304,7 +304,7 @@ module TelemetryStore = |> Encoding.UTF8.GetBytes |> CanonicalJson.sha256 - /// A partial local response observation; never programme or terminal accounting. + // A partial local response observation; never programme or terminal accounting. type PassiveUsageObservation = { ThreadId: string TurnId: string diff --git a/tests/FS.GG.Coord.Cli.Tests/WorkspaceTelemetryApplicationTests.fs b/tests/FS.GG.Coord.Cli.Tests/WorkspaceTelemetryApplicationTests.fs index 6574250ba..0dbe1f128 100644 --- a/tests/FS.GG.Coord.Cli.Tests/WorkspaceTelemetryApplicationTests.fs +++ b/tests/FS.GG.Coord.Cli.Tests/WorkspaceTelemetryApplicationTests.fs @@ -526,7 +526,7 @@ module WorkspaceTelemetryApplicationTests = let mutable reject = true let enqueue (bytes: byte array) = let state = System.Text.Json.Nodes.JsonNode.Parse(File.ReadAllBytes statePath) - Assert.Equal(Convert.ToBase64String bytes, state["pending"]["batchBase64"].GetValue()) + Assert.Equal(Convert.ToBase64String bytes, (state["pending"]["batchBase64"]).GetValue()) Assert.Empty(state["sources"].AsObject()) calls.Add(Array.copy bytes) if reject then Error [ "spool-overload" ] else Ok "locally-retained" @@ -849,7 +849,7 @@ module WorkspaceTelemetryApplicationTests = let home, path = passiveSource root "partial-counters" let row = System.Text.Json.Nodes.JsonNode.Parse(nativeRow "partial-response" 10L 0L) row["timestamp"] <- null - let usage = row["payload"]["usage"].AsObject() + let usage = (row["payload"]["usage"]).AsObject() for name in [ "input_tokens"; "cached_input_tokens"; "cache_write_input_tokens"; "reasoning_output_tokens"; "total_tokens" ] do usage.Remove name |> ignore File.WriteAllText(path, String.replicate 100000 "{\"type\":\"event_msg\"}\n" + row.ToJsonString() + "\n") @@ -870,3 +870,54 @@ module WorkspaceTelemetryApplicationTests = Assert.Equal(Some 72L, record.Usage.Output) Assert.Equal(None, record.OccurredAt) Assert.Equal(None, record.Provider) + + [] + let ``passive every intent enqueue and cursor persistence cut preserves exact recovery`` () = + if OperatingSystem.IsLinux() && Runtime.InteropServices.RuntimeInformation.ProcessArchitecture = Runtime.InteropServices.Architecture.X64 then + for cut in [ "before-intent-write"; "after-intent-write"; "before-local-enqueue"; "after-local-enqueue"; "before-cursor-write"; "after-cursor-write" ] do + let cleanup, root = temp () + use cleanup = cleanup + let home, path = passiveSource root "cut" + File.WriteAllText(path, nativeRow "response-a" 10L 0L) + let enqueued = ResizeArray() + let enqueue (bytes: byte array) = enqueued.Add(Array.copy bytes); Ok "locally-retained" + let hook stage = if stage = cut then raise (IOException "inert crash cut") + let interrupted = SkillTelemetryAdapter.capturePassiveWithHook root "owner" "observations" home [path] enqueue hook + Assert.Equal(1, interrupted.ExitCode) + let statePath = Path.Combine(root, "orchestrator-passive", "producer.json") + let intent = + if not (File.Exists statePath) then None + else + let state = System.Text.Json.Nodes.JsonNode.Parse(File.ReadAllBytes statePath) + if isNull state["pending"] then None else Some(Convert.FromBase64String((state["pending"]["batchBase64"]).GetValue())) + let priorCalls = enqueued.Count + let recovered = SkillTelemetryAdapter.capturePassive root "owner" "observations" home [path] enqueue |> parseCapture + Assert.Single(recovered["observations"].AsArray()) |> ignore + Assert.False(recovered["pendingIntent"].GetValue()) + match intent with + | Some exact -> + Assert.Equal(priorCalls + 1, enqueued.Count) + Assert.Equal(exact, enqueued[enqueued.Count - 1]) + if priorCalls > 0 then Assert.Equal(exact, enqueued[0]) + | None when cut = "after-cursor-write" -> Assert.Equal(priorCalls, enqueued.Count) + | None -> Assert.Equal(1, enqueued.Count) + + [] + let ``passive status-slot failure claims no durable gap and retains original intent cursor`` () = + if OperatingSystem.IsLinux() && Runtime.InteropServices.RuntimeInformation.ProcessArchitecture = Runtime.InteropServices.Architecture.X64 then + let cleanup, root = temp () + use cleanup = cleanup + let home, path = passiveSource root "status-failure" + File.WriteAllText(path, nativeRow "response-a" 10L 0L) + let statePath = Path.Combine(root, "orchestrator-passive", "producer.json") + let mutable before = Array.empty + let enqueue _ = before <- File.ReadAllBytes statePath; Error [ "spool-overload" ] + let hook stage = if stage = "before-status-write" then raise (IOException "inert status slot failure") + let failure = SkillTelemetryAdapter.capturePassiveWithHook root "owner" "observations" home [path] enqueue hook + Assert.Equal(1, failure.ExitCode) + Assert.Equal(before, File.ReadAllBytes statePath) + let report = SkillTelemetryAdapter.reportPassive root "owner" "observations" |> parseCapture + Assert.True(report["pendingIntent"].GetValue()) + Assert.DoesNotContain("enqueue-deferred-cursor-retained", report["gaps"].ToJsonString()) + let recovered = SkillTelemetryAdapter.capturePassive root "owner" "observations" home [path] (fun _ -> Ok "locally-retained") |> parseCapture + Assert.Single(recovered["observations"].AsArray()) |> ignore From 536c1f9f5278893be84070ecc9d02bfaaf564fac Mon Sep 17 00:00:00 2001 From: EHotwagner Date: Sun, 18 Oct 2026 10:59:28 +0200 Subject: [PATCH 06/19] fix: preserve strict native decoding and order the complete passive spool --- src/FS.GG.Coord.Cli/SkillTelemetryAdapter.fs | 4 +- src/FS.GG.Coord.Cli/SkillTelemetryReaders.fs | 26 +++--- src/FS.GG.Coord.Cli/TelemetryApplication.fs | 6 +- .../WorkspaceTelemetryApplication.fs | 34 +++++++- .../WorkspaceTelemetryApplication.fsi | 3 + .../WorkspaceTelemetryApplicationTests.fs | 82 +++++++++++++++++-- tests/skill-fsharp/readers/run.py | 12 +++ 7 files changed, 138 insertions(+), 29 deletions(-) diff --git a/src/FS.GG.Coord.Cli/SkillTelemetryAdapter.fs b/src/FS.GG.Coord.Cli/SkillTelemetryAdapter.fs index 292c3b29f..66cf48eaf 100644 --- a/src/FS.GG.Coord.Cli/SkillTelemetryAdapter.fs +++ b/src/FS.GG.Coord.Cli/SkillTelemetryAdapter.fs @@ -1193,7 +1193,7 @@ module SkillTelemetryAdapter = // One bounded pass over explicit sources. The production caller always supplies its selected association root. // Same-owner state cloning/reinitialization/root migration requires original-state/fence reconciliation; // undeclared clones cannot be detected offline and are outside this supported first profile. - let capturePassiveWithHook root owner sourceIdentity codexHome (paths: string list) enqueue hook = + let capturePassiveWithHook (root: string) (owner: string) (sourceIdentity: string) (codexHome: string) (paths: string list) (enqueue: byte array -> Result) (hook: string -> unit) = try if paths.IsEmpty || paths.Length > NativeUsage.PassiveMaximumFiles || (paths |> List.exists (Path.IsPathFullyQualified >> not)) @@ -1298,7 +1298,7 @@ module SkillTelemetryAdapter = savePassive directory state else FS.GG.Coord.TelemetryStore.parseBatch bytes |> Result.defaultWith (fun _ -> fail "passive batch validation failed") |> ignore - state["pending"] <- jsonObject [ "batchBase64", node (Convert.ToBase64String bytes); "batchDigest", node (sha256 bytes) + state["pending"] <- jsonObject [ "batchBase64", node (Convert.ToBase64String bytes); "batchDigest", node (sha256 bytes); "sourcesAfter", sources; "responsesAfter", responses; "sequenceAfter", node (sequence + 1) ] // Intent is written before enqueue. A crash at either subsequent write replays identical bytes. hook "before-intent-write" diff --git a/src/FS.GG.Coord.Cli/SkillTelemetryReaders.fs b/src/FS.GG.Coord.Cli/SkillTelemetryReaders.fs index 34686180e..85997253a 100644 --- a/src/FS.GG.Coord.Cli/SkillTelemetryReaders.fs +++ b/src/FS.GG.Coord.Cli/SkillTelemetryReaders.fs @@ -959,19 +959,21 @@ module SkillTelemetryReaders = // Both complete accounting and passive capture use this decoder. It retains no raw text. let private decodeUsageRecord (raw: byte array) = try - use document = JsonDocument.Parse raw - let row = document.RootElement - if stringField "type" row <> Some "token_usage_record" then Ok None - else - let payload = row.GetProperty "payload" - match guidField "thread_id" payload, guidField "turn_id" payload, stringField "response_id" payload with - | Some thread, Some turn, Some response when thread <> Guid.Empty && turn <> Guid.Empty - && identityPattern.IsMatch response -> - observedCounters (payload.GetProperty "usage") - |> Result.map (fun usage -> Some(thread, turn, response, usage, payload.Clone(), row.Clone())) - | _ -> failure "native usage record identity is malformed" + // Retain the complete collector's strict UTF-8 and recursive duplicate-property refusal. + match Json.parse (Encoding.UTF8.GetBytes(decodedLine raw)) with + | Error _ -> failure "native usage record is malformed" + | Ok row -> + if stringField "type" row <> Some "token_usage_record" then Ok None + else + let payload = row.GetProperty "payload" + match guidField "thread_id" payload, guidField "turn_id" payload, stringField "response_id" payload with + | Some thread, Some turn, Some response when thread <> Guid.Empty && turn <> Guid.Empty + && identityPattern.IsMatch response -> + observedCounters (payload.GetProperty "usage") + |> Result.map (fun usage -> Some(thread, turn, response, usage, payload.Clone(), row.Clone())) + | _ -> failure "native usage record identity is malformed" with - | :? JsonException | :? InvalidOperationException | :? KeyNotFoundException -> failure "native usage record is malformed" + | :? JsonException | :? InvalidOperationException | :? KeyNotFoundException | :? DecoderFallbackException -> failure "native usage record is malformed" type private AppServer(command: string, protectedHome: string option) = let start = ProcessStartInfo(command) diff --git a/src/FS.GG.Coord.Cli/TelemetryApplication.fs b/src/FS.GG.Coord.Cli/TelemetryApplication.fs index b75ef2c41..d346b4406 100644 --- a/src/FS.GG.Coord.Cli/TelemetryApplication.fs +++ b/src/FS.GG.Coord.Cli/TelemetryApplication.fs @@ -1088,10 +1088,8 @@ module TelemetryApplication = with _ -> { SkillTelemetryAdapter.CommandResult.ExitCode = 1; Stdout = Array.empty Stderr = Encoding.UTF8.GetBytes "fsgg passive telemetry: source selection unavailable or invalid\n" } - use stdout = Console.OpenStandardOutput() - use stderr = Console.OpenStandardError() - stdout.Write(completed.Stdout, 0, completed.Stdout.Length) - stderr.Write(completed.Stderr, 0, completed.Stderr.Length) + Console.Out.Write(Encoding.UTF8.GetString completed.Stdout) + Console.Error.Write(Encoding.UTF8.GetString completed.Stderr) completed.ExitCode let tryRun argv = diff --git a/src/FS.GG.Coord.Cli/WorkspaceTelemetryApplication.fs b/src/FS.GG.Coord.Cli/WorkspaceTelemetryApplication.fs index d5fe58752..da63590d0 100644 --- a/src/FS.GG.Coord.Cli/WorkspaceTelemetryApplication.fs +++ b/src/FS.GG.Coord.Cli/WorkspaceTelemetryApplication.fs @@ -614,6 +614,31 @@ module WorkspaceTelemetryApplication = let private passiveBatch (batch: TelemetryStore.Batch) = batch.Facts |> List.exists (fun fact -> fact.Kind = "provider-usage-observation/1" || (fact.Kind = "source" && fact.Identity.StartsWith("passive-source-", StringComparison.Ordinal))) + // Validate the complete bounded inventory before selecting a drain quantum. Taking an + // arbitrary filesystem prefix first can permanently hide the earliest passive predecessor. + let private selectReadyFiles (files: string array) = + if files.Length > 128 then Error [ "spool-overload" ] + else + try + let ranked = + files |> Array.map (fun file -> + let info = FileInfo file + if info.LinkTarget <> null || info.Length > int64 TelemetryReceipt.MaxEnvelopeBytes + || (not (OperatingSystem.IsWindows()) && File.GetUnixFileMode(file) <> (UnixFileMode.UserRead ||| UnixFileMode.UserWrite)) then + invalidOp "spool-invalid" + let parsed = TelemetryReceipt.parse (File.ReadAllBytes file) |> Result.defaultWith (fun _ -> invalidOp "spool-invalid") + let rank = + if passiveBatch parsed.Batch then + let cursor = Int64.Parse(parsed.Batch.Cursor, Globalization.CultureInfo.InvariantCulture) + if cursor < 1L then invalidOp "passive-sequence-invalid" + 0, parsed.Scope.Producer + ":" + parsed.Scope.Stream + ":" + parsed.Batch.SourceIdentity + ":" + parsed.Batch.Generation, cursor, Path.GetFileName file + else 1, "", 0L, Path.GetFileName file + rank, file) + Ok(ranked |> Array.sortBy fst |> Array.truncate 16 |> Array.map snd |> Array.toList) + with _ -> Error [ "spool-invalid" ] + + let selectReadyFilesForTesting files = selectReadyFiles files + let private passivePredecessor directory (current: TelemetryReceipt.Envelope) = if not (passiveBatch current.Batch) then false else @@ -1079,11 +1104,12 @@ module WorkspaceTelemetryApplication = | Ok directory -> use deadline = new CancellationTokenSource(TimeSpan.FromSeconds 30.) - let files = - Directory.EnumerateFiles(directory, "*.ready") |> Seq.truncate 16 |> Seq.toList - + let inventory = Directory.EnumerateFiles(directory, "*.ready") |> Seq.truncate 129 |> Seq.toArray + let selection = selectReadyFiles inventory let results = - files |> List.map (remoteOneWith operations association endpoint reference deadline.Token) + match selection with + | Error errors -> [ Error errors ] + | Ok files -> files |> List.map (remoteOneWith operations association endpoint reference deadline.Token) match results diff --git a/src/FS.GG.Coord.Cli/WorkspaceTelemetryApplication.fsi b/src/FS.GG.Coord.Cli/WorkspaceTelemetryApplication.fsi index 8b3d355b6..e4df81953 100644 --- a/src/FS.GG.Coord.Cli/WorkspaceTelemetryApplication.fsi +++ b/src/FS.GG.Coord.Cli/WorkspaceTelemetryApplication.fsi @@ -58,6 +58,9 @@ module WorkspaceTelemetryApplication = payload: byte array -> Result + /// Same bounded complete-inventory selection used by the actual drain, before its 16-file quantum. + val selectReadyFilesForTesting: files: string array -> Result + val tryDrainWithOperationsForTesting: configArg: string option -> repositoryArg: string option -> operations: RemoteOperations -> Result diff --git a/tests/FS.GG.Coord.Cli.Tests/WorkspaceTelemetryApplicationTests.fs b/tests/FS.GG.Coord.Cli.Tests/WorkspaceTelemetryApplicationTests.fs index 0dbe1f128..f0a07448a 100644 --- a/tests/FS.GG.Coord.Cli.Tests/WorkspaceTelemetryApplicationTests.fs +++ b/tests/FS.GG.Coord.Cli.Tests/WorkspaceTelemetryApplicationTests.fs @@ -608,7 +608,7 @@ module WorkspaceTelemetryApplicationTests = let node = System.Text.Json.Nodes.JsonNode.Parse $"""{{"schema":"fsgg.telemetry.workspace-config/1","engine":"absent-fixture-engine","associations":[{{"workspaceId":"workspace-a","producerId":"passive-a","streamId":"native-observations","repositories":["FS-GG/.github"],"destination":{{"kind":"remote","endpoint":"https://127.0.0.1:1/","credentialReference":"absent-passive-fixture","spoolRoot":"unused"}}}}],"retiredAssociations":[]}}""" - node["associations"][0]["destination"]["spoolRoot"] <- System.Text.Json.Nodes.JsonValue.Create spool + node["associations"].[0].["destination"].["spoolRoot"] <- System.Text.Json.Nodes.JsonValue.Create spool File.WriteAllText(config, node.ToJsonString()) if not (OperatingSystem.IsWindows()) then File.SetUnixFileMode(config, enum 0o600) config, spool @@ -683,13 +683,20 @@ module WorkspaceTelemetryApplicationTests = let home, path = passiveSource root "ordered" File.WriteAllText(path, "") let enqueue = WorkspaceTelemetryApplication.tryEnqueueBound (Some config) (Some "FS-GG/.github") (Some scope.Producer) (Some binding) - for index in 1..10 do + for index in 1..32 do File.AppendAllText(path, nativeRow "response-a" (int64 index) 0L) SkillTelemetryAdapter.capturePassive stateRoot "owner" scope.Stream home [path] enqueue |> parseCapture |> ignore let envelopes = Directory.GetFiles(spool, "*.ready") |> Array.map (fun file -> let value = TelemetryReceipt.parse(File.ReadAllBytes file) |> Result.defaultWith (sprintf "%A" >> failwith) value.BatchId, value) |> Map.ofArray + // Force the earliest predecessor outside an arbitrary first-16 inventory prefix. + let scrambled = Directory.GetFiles(spool, "*.ready") |> Array.sortByDescending (fun file -> + (TelemetryReceipt.parse(File.ReadAllBytes file) |> Result.defaultWith (sprintf "%A" >> failwith)).Batch.Cursor |> Int32.Parse) + let selected = WorkspaceTelemetryApplication.selectReadyFilesForTesting scrambled |> Result.defaultWith (sprintf "%A" >> failwith) + let cursors = selected |> List.map (fun file -> + (TelemetryReceipt.parse(File.ReadAllBytes file) |> Result.defaultWith (sprintf "%A" >> failwith)).Batch.Cursor |> Int32.Parse) + Assert.Equal([1..16], cursors) let submitted = ResizeArray() let received = System.Collections.Generic.HashSet() let mutable phase = "durable" @@ -710,15 +717,15 @@ module WorkspaceTelemetryApplicationTests = let drain () = WorkspaceTelemetryApplication.tryDrainWithOperationsForTesting (Some config) (Some "FS-GG/.github") operations drain () |> ignore Assert.Equal([1], submitted) - Assert.Equal(10, Directory.GetFiles(spool, "*.ready").Length) + Assert.Equal(32, Directory.GetFiles(spool, "*.ready").Length) phase <- "uncertain" drain () |> ignore Assert.Equal([1], submitted) - Assert.Equal(10, Directory.GetFiles(spool, "*.ready").Length) + Assert.Equal(32, Directory.GetFiles(spool, "*.ready").Length) phase <- "applied" - for _ in 1..11 do drain () |> ignore + for _ in 1..4 do drain () |> ignore Assert.Empty(Directory.GetFiles(spool, "*.ready")) - Assert.Equal([1..10], submitted) + Assert.Equal([1..32], submitted) [] let ``unsupported and rejected passive receiver retains exact pending bytes without downgrade`` () = @@ -825,7 +832,7 @@ module WorkspaceTelemetryApplicationTests = TelemetryStoreApplication.enrollReceiptProducer store approved peer |> unwrap |> ignore let changed = System.Text.Json.Nodes.JsonNode.Parse batches[1] changed["ingestId"] <- System.Text.Json.Nodes.JsonValue.Create "peer-correction" - changed["events"][0]["revision"] <- System.Text.Json.Nodes.JsonValue.Create 3L + changed["events"].[0].["revision"] <- System.Text.Json.Nodes.JsonValue.Create 3L let peerEnvelope = envelope peer "peer-correction" (Encoding.UTF8.GetBytes(changed.ToJsonString())) TelemetryStoreApplication.submitReceipt store approved peer peerEnvelope |> unwrap |> ignore TelemetryStoreApplication.drainReceipts store approved scope.Workspace |> unwrap |> ignore @@ -921,3 +928,64 @@ module WorkspaceTelemetryApplicationTests = Assert.DoesNotContain("enqueue-deferred-cursor-retained", report["gaps"].ToJsonString()) let recovered = SkillTelemetryAdapter.capturePassive root "owner" "observations" home [path] (fun _ -> Ok "locally-retained") |> parseCapture Assert.Single(recovered["observations"].AsArray()) |> ignore + + [] + let ``shared passive decoder refuses duplicate counters identities and invalid UTF8`` () = + if OperatingSystem.IsLinux() && Runtime.InteropServices.RuntimeInformation.ProcessArchitecture = Runtime.InteropServices.Architecture.X64 then + let cleanup, root = temp () + use cleanup = cleanup + let home, path = passiveSource root "duplicate-fields" + let row = nativeRow "response-a" 10L 0L + for invalid in [ row.Replace("\"input_tokens\":10", "\"input_tokens\":999,\"input_tokens\":10") + row.Replace("\"thread_id\":", "\"thread_id\":\"99999999-9999-9999-9999-999999999999\",\"thread_id\":") ] do + File.WriteAllText(path, invalid) + let scan = SkillTelemetryReaders.NativeUsage.scanPassive home path None 4194304 64 |> Result.defaultWith (fun error -> failwith error.Message) + Assert.Empty scan.Records + Assert.Contains("malformed-row-skipped", scan.Diagnostics) + let invalidUtf8 = Encoding.UTF8.GetBytes row + invalidUtf8[row.IndexOf("response-a", StringComparison.Ordinal) + 9] <- 0xFFuy + File.WriteAllBytes(path, invalidUtf8) + let scan = SkillTelemetryReaders.NativeUsage.scanPassive home path None 4194304 64 |> Result.defaultWith (fun error -> failwith error.Message) + Assert.Empty scan.Records + Assert.Contains("malformed-row-skipped", scan.Diagnostics) + + [] + let ``passive command capture and report execute offline through actual application route`` () = + if OperatingSystem.IsLinux() && Runtime.InteropServices.RuntimeInformation.ProcessArchitecture = Runtime.InteropServices.Architecture.X64 then + let cleanup, root = temp () + use cleanup = cleanup + let config, spool = passiveRemoteConfig root + let home, path = passiveSource root "command" + File.WriteAllText(path, nativeRow "response-a" 10L 0L) + let selection = Path.Combine(root, "selected.json") + File.WriteAllText(selection, System.Text.Json.JsonSerializer.Serialize {| schema = "fsgg.telemetry.passive-selection/1"; codexHome = home; sources = [| path |] |}) + File.SetUnixFileMode(selection, enum 0o600) + let run arguments = + let priorOut, priorError = Console.Out, Console.Error + use stdout = new StringWriter() + use stderr = new StringWriter() + try + Console.SetOut stdout + Console.SetError stderr + let code = TelemetryApplication.tryRun ([ "telemetry"; "passive" ] @ arguments) |> Option.defaultValue 99 + code, stdout.ToString(), stderr.ToString() + finally + Console.SetOut priorOut + Console.SetError priorError + let args = [ "--config"; config; "--repository"; "FS-GG/.github" ] + let code, output, error = run ([ "capture" ] @ args @ [ "--input"; selection ]) + Assert.True(code = 0, error) + let captured = System.Text.Json.Nodes.JsonNode.Parse output + Assert.Single(captured["observations"].AsArray()) |> ignore + Assert.Equal("locally-retained", captured["capture"].GetValue()) + Assert.Equal("unknown", captured["attribution"].GetValue()) + Assert.Equal("unknown", captured["delivery"].GetValue()) + Assert.DoesNotContain(root, output) + Assert.Single(Directory.GetFiles(spool, "*.ready")) |> ignore + let reportCode, reportOutput, reportError = run ([ "report" ] @ args) + Assert.True(reportCode = 0, reportError) + let report = System.Text.Json.Nodes.JsonNode.Parse reportOutput + Assert.Equal(captured["observations"].ToJsonString(), report["observations"].ToJsonString()) + let invalidCode, _, _ = run ([ "capture" ] @ args @ [ "--input"; selection; "--item"; "invented" ]) + Assert.Equal(1, invalidCode) + Assert.Single(Directory.GetFiles(spool, "*.ready")) |> ignore diff --git a/tests/skill-fsharp/readers/run.py b/tests/skill-fsharp/readers/run.py index bdbb2754b..e8db6ed3b 100755 --- a/tests/skill-fsharp/readers/run.py +++ b/tests/skill-fsharp/readers/run.py @@ -309,6 +309,18 @@ def test_native(): environment["SKILL_FS_01_ROLLOUT"] = str(rollout) original_rollout = rollout.read_bytes() + for defect, raw in ( + ("duplicate-counter", original_rollout.replace(b'"input_tokens":10', b'"input_tokens":999,"input_tokens":10', 1)), + ("duplicate-thread", original_rollout.replace(b'"thread_id":', b'"thread_id":"99999999-9999-9999-9999-999999999999","thread_id":', 1)), + ("invalid-utf8", original_rollout.replace(b'"response-a"', b'"response-\xff"', 1)), + ): + malformed = sessions / f"{defect}.jsonl" + malformed.write_bytes(raw) + environment["SKILL_FS_01_ROLLOUT"] = str(malformed) + refused = probe("native", FAKE_CODEX, home, PARENT, "child_1", "root-1", + f"invocation-{defect}", 0, environment=environment) + require(not refused["ok"], f"complete native decoder accepted {defect}") + environment["SKILL_FS_01_ROLLOUT"] = str(rollout) for wire_mode in ("crlf", "eof-final"): exact_rollout = sessions / f"{wire_mode}.jsonl" raw = original_rollout.replace(b"\n", b"\r\n") if wire_mode == "crlf" else original_rollout.rstrip(b"\n") From 9b3c7178768fd4d15ad5bb0aca021a4dbd643b6e Mon Sep 17 00:00:00 2001 From: EHotwagner Date: Sun, 18 Oct 2026 11:08:03 +0200 Subject: [PATCH 07/19] fix: type passive capture boundaries and nested fixture access --- src/FS.GG.Coord.Cli/SkillTelemetryAdapter.fs | 14 +++++++------- src/FS.GG.Coord.Cli/SkillTelemetryReaders.fs | 12 ++++++------ src/FS.GG.Coord.Cli/TelemetryApplication.fs | 2 +- .../TelemetryStoreApplication.fs | 2 +- .../WorkspaceTelemetryApplication.fs | 12 ++++++------ src/FS.GG.Coord.Core/TelemetryStore.fs | 12 ++++++------ .../WorkspaceTelemetryApplicationTests.fs | 18 +++++++++--------- 7 files changed, 36 insertions(+), 36 deletions(-) diff --git a/src/FS.GG.Coord.Cli/SkillTelemetryAdapter.fs b/src/FS.GG.Coord.Cli/SkillTelemetryAdapter.fs index 66cf48eaf..48c391287 100644 --- a/src/FS.GG.Coord.Cli/SkillTelemetryAdapter.fs +++ b/src/FS.GG.Coord.Cli/SkillTelemetryAdapter.fs @@ -1084,14 +1084,14 @@ module SkillTelemetryAdapter = let private maximumPassiveIdentities = 256 let private passiveStateSchema = "fsgg.telemetry.passive-producer-state/1" - let private passiveStateDirectory root = Path.Combine(root, "orchestrator-passive") + let private passiveStateDirectory (root: string) = Path.Combine(root, "orchestrator-passive") - let private savePassive directory (state: JsonObject) = + let private savePassive (directory: string) (state: JsonObject) = let bytes = utf8.GetBytes(state.ToJsonString compact) if bytes.Length >= maximumStateBytes then fail "passive-state-overload; cursor retained" writePrivateBytes directory "producer" bytes |> ignore - let private passiveState directory owner sourceIdentity = + let private passiveState (directory: string) (owner: string) (sourceIdentity: string) = let path = Path.Combine(directory, "producer.json") if File.Exists path || FileInfo(path).LinkTarget <> null then let state = readObject path "passive producer state is unavailable" @@ -1125,13 +1125,13 @@ module SkillTelemetryAdapter = "offset", node cursor.Offset; "anchorDigest", node cursor.AnchorDigest "skippingOversized", node cursor.SkippingOversized ] - let private passiveGap (state: JsonObject) code = + let private passiveGap (state: JsonObject) (code: string) = // One reserved bounded status slot; original distinct reasons survive subsequent passes. let gaps = state["gaps"].AsArray() if not (gaps |> Seq.exists (fun value -> value.GetValue() = code)) && gaps.Count < 32 then gaps.Add(node code) - let private passiveFact capturedAt (cursor: PassiveCursor) (record: PassiveNativeRecord) revision = + let private passiveFact (capturedAt: string) (cursor: PassiveCursor) (record: PassiveNativeRecord) (revision: int64) = let optional value = value |> Option.map node |> Option.defaultValue nullNode let counts = record.Usage jsonObject [ "kind", node "provider-usage-observation/1" @@ -1160,7 +1160,7 @@ module SkillTelemetryAdapter = "firstEnqueueFailure", (if isNull state["firstEnqueueFailure"] then nullNode else state["firstEnqueueFailure"].DeepClone()) "lastEnqueueFailure", (if isNull state["lastEnqueueFailure"] then nullNode else state["lastEnqueueFailure"].DeepClone()) ] - let private replayPassive directory (state: JsonObject) (enqueue: byte array -> Result) hook = + let private replayPassive (directory: string) (state: JsonObject) (enqueue: byte array -> Result) (hook: string -> unit) = match state["pending"] with | null -> true | pending -> @@ -1313,7 +1313,7 @@ module SkillTelemetryAdapter = let capturePassive root owner sourceIdentity codexHome paths enqueue = capturePassiveWithHook root owner sourceIdentity codexHome paths enqueue ignore - let reportPassive root owner sourceIdentity = + let reportPassive (root: string) (owner: string) (sourceIdentity: string) = try let directory = passiveStateDirectory root let state = passiveState directory owner sourceIdentity diff --git a/src/FS.GG.Coord.Cli/SkillTelemetryReaders.fs b/src/FS.GG.Coord.Cli/SkillTelemetryReaders.fs index 85997253a..a7a7f34c7 100644 --- a/src/FS.GG.Coord.Cli/SkillTelemetryReaders.fs +++ b/src/FS.GG.Coord.Cli/SkillTelemetryReaders.fs @@ -30,7 +30,7 @@ module internal SkillPrivateDurability = [] extern int private Flock(int descriptor, int operation) - let withLock path action = + let withLock (path: string) (action: unit -> 'a) : 'a = if OperatingSystem.IsLinux() then let descriptor = OpenPrivate(path, 0x2 ||| 0x40 ||| 0x800 ||| 0x20000 ||| 0x80000, 0x180u) if descriptor < 0 then raise (IOException "private producer lock is unavailable") @@ -948,7 +948,7 @@ module SkillTelemetryReaders = Ok { Input = input; CachedInput = cached; CacheWriteInput = cacheWrite; Output = output; Reasoning = reasoning; Total = total } with :? InvalidOperationException -> failure "native usage counters are malformed" - let private counters value : Result = + let private counters (value: JsonElement) : Result = observedCounters value |> Result.bind (fun counts -> match counts.Input, counts.CachedInput, counts.Output, counts.Reasoning, counts.Total with @@ -1373,12 +1373,12 @@ module SkillTelemetryReaders = [] let PassiveMaximumObservations = 64 - let passiveIdentity (thread: Guid) (turn: Guid) response = + let passiveIdentity (thread: Guid) (turn: Guid) (response: string) = "passive-" + sha256(Encoding.UTF8.GetBytes("codex-rollout/1\u001f" + thread.ToString("D") + "\u001f" + turn.ToString("D") + "\u001f" + response)) // Reads only selected files through the same no-follow opener as complete native accounting. // The inode/device identity comes from the opened descriptor, never the pathname's metadata. - let scanPassive codexHome path (prior: PassiveCursor option) maximumBytes maximumRecords = + let scanPassive (codexHome: string) (path: string) (prior: PassiveCursor option) (maximumBytes: int) (maximumRecords: int) : Result = if maximumBytes < 16384 || maximumBytes > PassiveMaximumScanBytes || maximumRecords < 1 || maximumRecords > PassiveMaximumObservations then failure "passive native scan bounds are invalid" @@ -1396,7 +1396,7 @@ module SkillTelemetryReaders = || (stat.Mode &&& 0xF000u) <> 0x8000u then invalidOp "passive source is not a regular file" let instance = sha256(Encoding.UTF8.GetBytes($"codex-file/1:{stat.Device}:{stat.Inode}")) let mutable scanned = 0 - let anchor offset = + let anchor (offset: int64) = use retained = new MemoryStream() for start, length in [ 0L, min 4096L offset; max 0L (offset - 4096L), min 4096L offset ] do source.Position <- start @@ -1453,7 +1453,7 @@ module SkillTelemetryReaders = | Error _ -> diagnostics.Add "malformed-row-skipped" |> ignore | Ok None -> () | Ok(Some(thread, turn, response, usage, payload, row)) -> - let profile name = + let profile (name: string) = stringField name payload |> Option.filter (fun text -> not (String.IsNullOrWhiteSpace text) && text.Length <= 200 && not (text |> Seq.exists Char.IsControl)) let occurred = diff --git a/src/FS.GG.Coord.Cli/TelemetryApplication.fs b/src/FS.GG.Coord.Cli/TelemetryApplication.fs index d346b4406..ac44236d2 100644 --- a/src/FS.GG.Coord.Cli/TelemetryApplication.fs +++ b/src/FS.GG.Coord.Cli/TelemetryApplication.fs @@ -1059,7 +1059,7 @@ module TelemetryApplication = with ex -> fail "roadmap unit revision" [ ex.Message ] - let private passive action args = + let private passive (action: string) (args: string list) = match option "--repository" args with | None -> fail "telemetry passive" [ "--repository is required" ] | Some repository -> diff --git a/src/FS.GG.Coord.Cli/TelemetryStoreApplication.fs b/src/FS.GG.Coord.Cli/TelemetryStoreApplication.fs index a82141025..58a08ac0c 100644 --- a/src/FS.GG.Coord.Cli/TelemetryStoreApplication.fs +++ b/src/FS.GG.Coord.Cli/TelemetryStoreApplication.fs @@ -3070,7 +3070,7 @@ ORDER BY f.identity LIMIT 413701; // Bounded, read-only partial observations from the existing current canonical ledger. // These unassigned facts never enter item usage, budget or efficiency projections. - let passiveObservations path assessment (scope: TelemetryReceipt.Scope) = + let passiveObservations (path: string) (assessment: TelemetryStore.DurabilityAssessment) (scope: TelemetryReceipt.Scope) = match validateRoot path assessment |> Result.bind (fun root -> connect root SqliteOpenMode.ReadOnly) with | Error errors -> Error errors | Ok(connection, _) -> diff --git a/src/FS.GG.Coord.Cli/WorkspaceTelemetryApplication.fs b/src/FS.GG.Coord.Cli/WorkspaceTelemetryApplication.fs index da63590d0..845ce24a0 100644 --- a/src/FS.GG.Coord.Cli/WorkspaceTelemetryApplication.fs +++ b/src/FS.GG.Coord.Cli/WorkspaceTelemetryApplication.fs @@ -201,7 +201,7 @@ module WorkspaceTelemetryApplication = else Ok() - let private readPrivateDescriptor maximumBytes (path: string) = + let private readPrivateDescriptor (maximumBytes: int64) (path: string) = let unsafeFile () = Error [ "efficiency-claim-template-unsafe" ] if not (OperatingSystem.IsLinux()) then Error [ "efficiency-claim-template-platform-unavailable" ] elif String.IsNullOrWhiteSpace path || not (Path.IsPathFullyQualified path) then unsafeFile () @@ -244,7 +244,7 @@ module WorkspaceTelemetryApplication = let readEfficiencyClaimTemplate path = readPrivateDescriptor 16384L path - let readPassiveSelection path = + let readPassiveSelection (path: string) = readPrivateDescriptor 32768L path |> Result.mapError (fun _ -> [ "passive-selection-unsafe" ]) let private exactObject (node: JsonObject) names = @@ -639,7 +639,7 @@ module WorkspaceTelemetryApplication = let selectReadyFilesForTesting files = selectReadyFiles files - let private passivePredecessor directory (current: TelemetryReceipt.Envelope) = + let private passivePredecessor (directory: string) (current: TelemetryReceipt.Envelope) = if not (passiveBatch current.Batch) then false else try @@ -1012,7 +1012,7 @@ module WorkspaceTelemetryApplication = Error [ "publication-advisory-failure" ] // Capture-only persistence. This path never resolves credentials, probes health or calls remoteOne. - let tryEnqueueBound configArg repositoryArg expectedProducer expectedBinding payload = + let tryEnqueueBound (configArg: string option) (repositoryArg: string option) (expectedProducer: string option) (expectedBinding: string option) (payload: byte array) = let path = configPath configArg try withLock path (fun () -> @@ -1060,7 +1060,7 @@ module WorkspaceTelemetryApplication = with _ -> Error [ "capture-advisory-failure" ] // One serialized passive owner per existing private state root; another association must refuse. - let passiveProducer configArg repositoryArg = + let passiveProducer (configArg: string option) (repositoryArg: string option) = load configArg |> Result.bind (select repositoryArg) |> Result.bind (fun association -> @@ -1074,7 +1074,7 @@ module WorkspaceTelemetryApplication = let tryPublish configArg repositoryArg payload = tryPublishExpected configArg repositoryArg None payload - let private tryDrainBoundWith operations configArg repositoryArg (expectedBinding: string option) = + let private tryDrainBoundWith (operations: RemoteOperations option) (configArg: string option) (repositoryArg: string option) (expectedBinding: string option) = let path = configPath configArg if not (File.Exists path) then diff --git a/src/FS.GG.Coord.Core/TelemetryStore.fs b/src/FS.GG.Coord.Core/TelemetryStore.fs index f8b02e521..9c61cf9aa 100644 --- a/src/FS.GG.Coord.Core/TelemetryStore.fs +++ b/src/FS.GG.Coord.Core/TelemetryStore.fs @@ -1561,19 +1561,19 @@ module TelemetryStore = | "provider-usage-observation/1" -> try let get result = Result.defaultWith invalidOp result - let text name = requiredBoundedText label 200 node name |> get - let optional name = optionalText label node name |> get - let count name = optionalInt label node name |> get + let text (name: string) = requiredBoundedText label 200 node name |> get + let optional (name: string) = optionalText label node name |> get + let count (name: string) = optionalInt label node name |> get let thread, turn, response = text "threadId", text "turnId", text "responseId" let guid (value: string) = match Guid.TryParseExact(value, "D") with true, parsed -> parsed <> Guid.Empty && parsed.ToString("D") = value | _ -> false let input, cached, cacheWrite = count "input", count "cachedInput", count "cacheWriteInput" let output, reasoning, total = count "output", count "reasoning", count "total" - let subset part whole = match part, whole with Some p, Some w -> p <= w | _ -> true - let digest name = + let subset (part: int64 option) (whole: int64 option) = match part, whole with Some p, Some w -> p <= w | _ -> true + let digest (name: string) = let value = text name if not (Regex.IsMatch(value, "^[0-9a-f]{64}$")) then invalidOp "passive source digest is invalid" value - let profile name = + let profile (name: string) = let value = optional name if value |> Option.exists (fun v -> v.Length > 200 || (v |> Seq.exists Char.IsControl)) then invalidOp "passive profile is invalid" value diff --git a/tests/FS.GG.Coord.Cli.Tests/WorkspaceTelemetryApplicationTests.fs b/tests/FS.GG.Coord.Cli.Tests/WorkspaceTelemetryApplicationTests.fs index f0a07448a..814e32338 100644 --- a/tests/FS.GG.Coord.Cli.Tests/WorkspaceTelemetryApplicationTests.fs +++ b/tests/FS.GG.Coord.Cli.Tests/WorkspaceTelemetryApplicationTests.fs @@ -459,14 +459,14 @@ module WorkspaceTelemetryApplicationTests = ) finally Environment.SetEnvironmentVariable("FSGG_TELEMETRY_CREDENTIAL_MAIN", null) - let private passiveSource root name = + let private passiveSource (root: string) (name: string) = let home = Path.Combine(root, "codex") let sessions = Path.Combine(home, "sessions") Directory.CreateDirectory sessions |> ignore home, Path.Combine(sessions, name + ".jsonl") // Inert native shape, using one real observed counter tuple with pseudonymous native IDs. - let private nativeRow response input cacheWrite = + let private nativeRow (response: string) (input: int64) (cacheWrite: int64) = $"""{{"timestamp":"2026-10-18T06:41:48.322Z","type":"token_usage_record","payload":{{"thread_id":"7f4b2770-a3ce-54b8-be37-7992c3c9091b","turn_id":"f8097483-03a3-5055-88a4-eb7e2ee32446","response_id":"{response}","usage":{{"input_tokens":{input},"cached_input_tokens":0,"cache_write_input_tokens":{cacheWrite},"output_tokens":72,"reasoning_output_tokens":0,"total_tokens":{input + 72L}}},"turn_token_usage":{{"input_tokens":999999,"cached_input_tokens":0,"cache_write_input_tokens":0,"output_tokens":1,"reasoning_output_tokens":0,"total_tokens":1000000}}}}}}""" + "\n" let private parseCapture (value: SkillTelemetryAdapter.CommandResult) = @@ -602,7 +602,7 @@ module WorkspaceTelemetryApplicationTests = let state = System.Text.Json.Nodes.JsonNode.Parse(File.ReadAllBytes statePath) Assert.Equal(cursor, state["sources"].ToJsonString()) - let private passiveRemoteConfig root = + let private passiveRemoteConfig (root: string) = let config = Path.Combine(root, "passive-config.json") let spool = Path.Combine(root, "spool") let node = @@ -627,7 +627,7 @@ module WorkspaceTelemetryApplicationTests = Assert.Single(captured["observations"].AsArray()) |> ignore let file = Assert.Single(Directory.GetFiles(spool, "*.ready")) let original = File.ReadAllBytes file - Assert.Equal("locally-retained", enqueue (Encoding.UTF8.GetBytes((System.Text.Json.Nodes.JsonNode.Parse original)["payload"].ToJsonString())) |> Result.defaultWith (sprintf "%A" >> failwith)) + Assert.Equal("locally-retained", enqueue (Encoding.UTF8.GetBytes(((System.Text.Json.Nodes.JsonNode.Parse original)["payload"]).ToJsonString())) |> Result.defaultWith (sprintf "%A" >> failwith)) Assert.Equal(original, File.ReadAllBytes file) // Existing spool bound, including uncertain ready entries, refuses rather than overwrites. for index in 1..127 do @@ -700,7 +700,7 @@ module WorkspaceTelemetryApplicationTests = let submitted = ResizeArray() let received = System.Collections.Generic.HashSet() let mutable phase = "durable" - let receipt batchId status code : FS.GG.Telemetry.RemoteContract.Receipt = + let receipt (batchId: string) (status: string) (code: string option) : FS.GG.Telemetry.RemoteContract.Receipt = { Scope = scope; BatchId = batchId; Digest = envelopes[batchId].Digest; Status = status; Code = code } let operations: WorkspaceTelemetryApplication.RemoteOperations = { Lookup = fun _ batchId _ _ -> @@ -818,7 +818,7 @@ module WorkspaceTelemetryApplicationTests = Assert.Equal("partial", snapshot["populationCoverage"].GetValue()) use connection = new Microsoft.Data.Sqlite.SqliteConnection($"Data Source={Path.Combine(store, TelemetryStoreApplication.databaseFileName)};Pooling=False") connection.Open() - let scalar query = + let scalar (query: string) = use command = connection.CreateCommand() command.CommandText <- query command.ExecuteScalar() @@ -888,7 +888,7 @@ module WorkspaceTelemetryApplicationTests = File.WriteAllText(path, nativeRow "response-a" 10L 0L) let enqueued = ResizeArray() let enqueue (bytes: byte array) = enqueued.Add(Array.copy bytes); Ok "locally-retained" - let hook stage = if stage = cut then raise (IOException "inert crash cut") + let hook (stage: string) = if stage = cut then raise (IOException "inert crash cut") let interrupted = SkillTelemetryAdapter.capturePassiveWithHook root "owner" "observations" home [path] enqueue hook Assert.Equal(1, interrupted.ExitCode) let statePath = Path.Combine(root, "orchestrator-passive", "producer.json") @@ -919,7 +919,7 @@ module WorkspaceTelemetryApplicationTests = let statePath = Path.Combine(root, "orchestrator-passive", "producer.json") let mutable before = Array.empty let enqueue _ = before <- File.ReadAllBytes statePath; Error [ "spool-overload" ] - let hook stage = if stage = "before-status-write" then raise (IOException "inert status slot failure") + let hook (stage: string) = if stage = "before-status-write" then raise (IOException "inert status slot failure") let failure = SkillTelemetryAdapter.capturePassiveWithHook root "owner" "observations" home [path] enqueue hook Assert.Equal(1, failure.ExitCode) Assert.Equal(before, File.ReadAllBytes statePath) @@ -960,7 +960,7 @@ module WorkspaceTelemetryApplicationTests = let selection = Path.Combine(root, "selected.json") File.WriteAllText(selection, System.Text.Json.JsonSerializer.Serialize {| schema = "fsgg.telemetry.passive-selection/1"; codexHome = home; sources = [| path |] |}) File.SetUnixFileMode(selection, enum 0o600) - let run arguments = + let run (arguments: string list) = let priorOut, priorError = Console.Out, Console.Error use stdout = new StringWriter() use stderr = new StringWriter() From 112398e8c86b30cb4aef9e3f5bf09cd9bc6aefa2 Mon Sep 17 00:00:00 2001 From: EHotwagner Date: Sun, 18 Oct 2026 11:13:09 +0200 Subject: [PATCH 08/19] fix: disambiguate passive xUnit assertion arguments --- .../WorkspaceTelemetryApplicationTests.fs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/FS.GG.Coord.Cli.Tests/WorkspaceTelemetryApplicationTests.fs b/tests/FS.GG.Coord.Cli.Tests/WorkspaceTelemetryApplicationTests.fs index 814e32338..0b7738787 100644 --- a/tests/FS.GG.Coord.Cli.Tests/WorkspaceTelemetryApplicationTests.fs +++ b/tests/FS.GG.Coord.Cli.Tests/WorkspaceTelemetryApplicationTests.fs @@ -470,7 +470,7 @@ module WorkspaceTelemetryApplicationTests = $"""{{"timestamp":"2026-10-18T06:41:48.322Z","type":"token_usage_record","payload":{{"thread_id":"7f4b2770-a3ce-54b8-be37-7992c3c9091b","turn_id":"f8097483-03a3-5055-88a4-eb7e2ee32446","response_id":"{response}","usage":{{"input_tokens":{input},"cached_input_tokens":0,"cache_write_input_tokens":{cacheWrite},"output_tokens":72,"reasoning_output_tokens":0,"total_tokens":{input + 72L}}},"turn_token_usage":{{"input_tokens":999999,"cached_input_tokens":0,"cache_write_input_tokens":0,"output_tokens":1,"reasoning_output_tokens":0,"total_tokens":1000000}}}}}}""" + "\n" let private parseCapture (value: SkillTelemetryAdapter.CommandResult) = - Assert.True(value.ExitCode = 0, Encoding.UTF8.GetString value.Stderr) + Assert.True((value.ExitCode = 0), Encoding.UTF8.GetString value.Stderr) System.Text.Json.Nodes.JsonNode.Parse value.Stdout [] @@ -498,8 +498,8 @@ module WorkspaceTelemetryApplicationTests = File.WriteAllText(path, row) let rotated = scan (Some complete.Cursor) 4194304 Assert.Contains("source-continuity-gap", rotated.Diagnostics) - Assert.NotEqual(complete.Cursor.SourceInstance, rotated.Cursor.SourceInstance) - Assert.NotEqual(complete.Cursor.Generation, rotated.Cursor.Generation) + Assert.NotEqual(complete.Cursor.SourceInstance, rotated.Cursor.SourceInstance) + Assert.NotEqual(complete.Cursor.Generation, rotated.Cursor.Generation) File.WriteAllText(path, String('x', 2 * 1024 * 1024) + "\n" + row) let oversized = scan (Some rotated.Cursor) 1200000 Assert.True(oversized.Cursor.SkippingOversized) @@ -659,7 +659,7 @@ module WorkspaceTelemetryApplicationTests = Assert.Contains("credential-unavailable", defaultError) Assert.False(File.Exists config) let code, configured, error = invoke "activate-remote" ("--capture-only" :: args) - Assert.True(code = 0, error) + Assert.True((code = 0), error) Assert.Equal("capture-configured;receiver-unverified", configured) let statusCode, status, _ = invoke "status" [ "--config"; config; "--repository"; "FS-GG/.github" ] Assert.Equal(0, statusCode) @@ -974,7 +974,7 @@ module WorkspaceTelemetryApplicationTests = Console.SetError priorError let args = [ "--config"; config; "--repository"; "FS-GG/.github" ] let code, output, error = run ([ "capture" ] @ args @ [ "--input"; selection ]) - Assert.True(code = 0, error) + Assert.True((code = 0), error) let captured = System.Text.Json.Nodes.JsonNode.Parse output Assert.Single(captured["observations"].AsArray()) |> ignore Assert.Equal("locally-retained", captured["capture"].GetValue()) @@ -983,7 +983,7 @@ module WorkspaceTelemetryApplicationTests = Assert.DoesNotContain(root, output) Assert.Single(Directory.GetFiles(spool, "*.ready")) |> ignore let reportCode, reportOutput, reportError = run ([ "report" ] @ args) - Assert.True(reportCode = 0, reportError) + Assert.True((reportCode = 0), reportError) let report = System.Text.Json.Nodes.JsonNode.Parse reportOutput Assert.Equal(captured["observations"].ToJsonString(), report["observations"].ToJsonString()) let invalidCode, _, _ = run ([ "capture" ] @ args @ [ "--input"; selection; "--item"; "invented" ]) From 523badea91e69267d165398fc55a12bd2bf0342d Mon Sep 17 00:00:00 2001 From: EHotwagner Date: Sun, 18 Oct 2026 11:21:46 +0200 Subject: [PATCH 09/19] fix: rotate bounded passive heads without starving independent delivery --- .../WorkspaceTelemetryApplication.fs | 60 +++++++++++++------ .../WorkspaceTelemetryApplication.fsi | 2 +- .../WorkspaceTelemetryApplicationTests.fs | 56 ++++++++++++++++- 3 files changed, 98 insertions(+), 20 deletions(-) diff --git a/src/FS.GG.Coord.Cli/WorkspaceTelemetryApplication.fs b/src/FS.GG.Coord.Cli/WorkspaceTelemetryApplication.fs index 845ce24a0..ef829dcb6 100644 --- a/src/FS.GG.Coord.Cli/WorkspaceTelemetryApplication.fs +++ b/src/FS.GG.Coord.Cli/WorkspaceTelemetryApplication.fs @@ -576,7 +576,7 @@ module WorkspaceTelemetryApplication = finally Native.close descriptor |> ignore - let private atomicWrite directory name bytes = + let private atomicWriteWith (overwrite: bool) (directory: string) (name: string) (bytes: byte array) = let target = Path.Combine(directory, name) let temporary = Path.Combine(directory, "." + Guid.NewGuid().ToString("N") + ".tmp") @@ -596,10 +596,12 @@ module WorkspaceTelemetryApplication = output.Write bytes output.Flush true output.Close() - File.Move(temporary, target, false) + File.Move(temporary, target, overwrite) flushDirectory directory target + let private atomicWrite directory name bytes = atomicWriteWith false directory name bytes + let private credential (reference: string) (_: CancellationToken) = task { let name = @@ -614,30 +616,49 @@ module WorkspaceTelemetryApplication = let private passiveBatch (batch: TelemetryStore.Batch) = batch.Facts |> List.exists (fun fact -> fact.Kind = "provider-usage-observation/1" || (fact.Kind = "source" && fact.Identity.StartsWith("passive-source-", StringComparison.Ordinal))) - // Validate the complete bounded inventory before selecting a drain quantum. Taking an - // arbitrary filesystem prefix first can permanently hide the earliest passive predecessor. - let private selectReadyFiles (files: string array) = + // Only each passive correction chain's earliest pending head is eligible. Rotate the + // bounded eligible inventory with advisory metadata, never queued bytes or receipt state. + let private selectReadyFiles (after: string option) (files: string array) = if files.Length > 128 then Error [ "spool-overload" ] else try - let ranked = + let parsed = files |> Array.map (fun file -> let info = FileInfo file if info.LinkTarget <> null || info.Length > int64 TelemetryReceipt.MaxEnvelopeBytes || (not (OperatingSystem.IsWindows()) && File.GetUnixFileMode(file) <> (UnixFileMode.UserRead ||| UnixFileMode.UserWrite)) then invalidOp "spool-invalid" - let parsed = TelemetryReceipt.parse (File.ReadAllBytes file) |> Result.defaultWith (fun _ -> invalidOp "spool-invalid") - let rank = - if passiveBatch parsed.Batch then - let cursor = Int64.Parse(parsed.Batch.Cursor, Globalization.CultureInfo.InvariantCulture) + let envelope = TelemetryReceipt.parse (File.ReadAllBytes file) |> Result.defaultWith (fun _ -> invalidOp "spool-invalid") + let chain = + if passiveBatch envelope.Batch then + let cursor = Int64.Parse(envelope.Batch.Cursor, Globalization.CultureInfo.InvariantCulture) if cursor < 1L then invalidOp "passive-sequence-invalid" - 0, parsed.Scope.Producer + ":" + parsed.Scope.Stream + ":" + parsed.Batch.SourceIdentity + ":" + parsed.Batch.Generation, cursor, Path.GetFileName file - else 1, "", 0L, Path.GetFileName file - rank, file) - Ok(ranked |> Array.sortBy fst |> Array.truncate 16 |> Array.map snd |> Array.toList) + Some(envelope.Scope, envelope.Batch.SourceIdentity, envelope.Batch.Generation, cursor) + else None + file, chain) + let heads = + parsed |> Array.choose (fun (file, chain) -> + chain |> Option.map (fun (scope, source, generation, cursor) -> (scope, source, generation), (cursor, file))) + |> Array.groupBy fst + |> Array.map (fun (_, values) -> values |> Array.map snd |> Array.minBy fst |> snd) + |> Set.ofArray + let eligible = + parsed |> Array.choose (fun (file, chain) -> if chain.IsNone || heads.Contains file then Some file else None) + |> Array.sortWith (fun left right -> StringComparer.Ordinal.Compare(Path.GetFileName left, Path.GetFileName right)) + let later, earlier = + eligible |> Array.partition (fun file -> after |> Option.forall (fun previous -> StringComparer.Ordinal.Compare(Path.GetFileName file, previous) > 0)) + Ok(Array.append later earlier |> Array.truncate 16 |> Array.toList) with _ -> Error [ "spool-invalid" ] - let selectReadyFilesForTesting files = selectReadyFiles files + let selectReadyFilesForTesting files = selectReadyFiles None files + + let private readDrainCursor (directory: string) = + // Invalid/missing advisory state resets visit order deterministically. It grants no authority. + match readPrivateDescriptor 256L (Path.Combine(directory, "drain-cursor")) with + | Ok bytes -> + let value = Encoding.UTF8.GetString bytes + if System.Text.RegularExpressions.Regex.IsMatch(value, @"\A[0-9a-f]{64}\.ready\z") then Some value else None + | Error _ -> None let private passivePredecessor (directory: string) (current: TelemetryReceipt.Envelope) = if not (passiveBatch current.Batch) then false @@ -1105,11 +1126,16 @@ module WorkspaceTelemetryApplication = use deadline = new CancellationTokenSource(TimeSpan.FromSeconds 30.) let inventory = Directory.EnumerateFiles(directory, "*.ready") |> Seq.truncate 129 |> Seq.toArray - let selection = selectReadyFiles inventory + let selection = selectReadyFiles (readDrainCursor directory) inventory let results = match selection with | Error errors -> [ Error errors ] - | Ok files -> files |> List.map (remoteOneWith operations association endpoint reference deadline.Token) + | Ok files -> + // Advance before network: crashes/uncertain outcomes change visit order only. + match List.tryLast files with + | Some last -> atomicWriteWith true directory "drain-cursor" (Encoding.UTF8.GetBytes(Path.GetFileName last)) |> ignore + | None -> () + files |> List.map (remoteOneWith operations association endpoint reference deadline.Token) match results diff --git a/src/FS.GG.Coord.Cli/WorkspaceTelemetryApplication.fsi b/src/FS.GG.Coord.Cli/WorkspaceTelemetryApplication.fsi index e4df81953..3bc4335d2 100644 --- a/src/FS.GG.Coord.Cli/WorkspaceTelemetryApplication.fsi +++ b/src/FS.GG.Coord.Cli/WorkspaceTelemetryApplication.fsi @@ -58,7 +58,7 @@ module WorkspaceTelemetryApplication = payload: byte array -> Result - /// Same bounded complete-inventory selection used by the actual drain, before its 16-file quantum. + /// Same bounded eligible-head selection used by the actual drain, initially without its advisory cursor. val selectReadyFilesForTesting: files: string array -> Result val tryDrainWithOperationsForTesting: diff --git a/tests/FS.GG.Coord.Cli.Tests/WorkspaceTelemetryApplicationTests.fs b/tests/FS.GG.Coord.Cli.Tests/WorkspaceTelemetryApplicationTests.fs index 0b7738787..d7830d095 100644 --- a/tests/FS.GG.Coord.Cli.Tests/WorkspaceTelemetryApplicationTests.fs +++ b/tests/FS.GG.Coord.Cli.Tests/WorkspaceTelemetryApplicationTests.fs @@ -696,7 +696,7 @@ module WorkspaceTelemetryApplicationTests = let selected = WorkspaceTelemetryApplication.selectReadyFilesForTesting scrambled |> Result.defaultWith (sprintf "%A" >> failwith) let cursors = selected |> List.map (fun file -> (TelemetryReceipt.parse(File.ReadAllBytes file) |> Result.defaultWith (sprintf "%A" >> failwith)).Batch.Cursor |> Int32.Parse) - Assert.Equal([1..16], cursors) + Assert.Equal([1], cursors) let submitted = ResizeArray() let received = System.Collections.Generic.HashSet() let mutable phase = "durable" @@ -723,7 +723,7 @@ module WorkspaceTelemetryApplicationTests = Assert.Equal([1], submitted) Assert.Equal(32, Directory.GetFiles(spool, "*.ready").Length) phase <- "applied" - for _ in 1..4 do drain () |> ignore + for _ in 1..32 do drain () |> ignore Assert.Empty(Directory.GetFiles(spool, "*.ready")) Assert.Equal([1..32], submitted) @@ -989,3 +989,55 @@ module WorkspaceTelemetryApplicationTests = let invalidCode, _, _ = run ([ "capture" ] @ args @ [ "--input"; selection; "--item"; "invented" ]) Assert.Equal(1, invalidCode) Assert.Single(Directory.GetFiles(spool, "*.ready")) |> ignore + + [] + let ``passive blocked chains leave ordinary delivery fair across more than sixteen heads`` () = + if OperatingSystem.IsLinux() && Runtime.InteropServices.RuntimeInformation.ProcessArchitecture = Runtime.InteropServices.Architecture.X64 then + let cleanup, root = temp () + use cleanup = cleanup + let config, spool = passiveRemoteConfig root + let stateRoot, scope, binding = WorkspaceTelemetryApplication.passiveProducer (Some config) (Some "FS-GG/.github") |> Result.defaultWith (sprintf "%A" >> failwith) + let home, path = passiveSource root "fair" + File.WriteAllText(path, "") + let enqueue = WorkspaceTelemetryApplication.tryEnqueueBound (Some config) (Some "FS-GG/.github") (Some scope.Producer) (Some binding) + for index in 1..32 do + File.AppendAllText(path, nativeRow "response-a" (int64 index) 0L) + SkillTelemetryAdapter.capturePassive stateRoot "owner" scope.Stream home [path] enqueue |> parseCapture |> ignore + let inventory = Directory.GetFiles(spool, "*.ready") + let first = System.Text.Json.Nodes.JsonNode.Parse(File.ReadAllBytes inventory[0]) + let original = first["payload"].ToJsonString() + let queue (name: string) (ordinary: bool) = + let payload = System.Text.Json.Nodes.JsonNode.Parse original + payload["ingestId"] <- System.Text.Json.Nodes.JsonValue.Create name + payload["sourceIdentity"] <- System.Text.Json.Nodes.JsonValue.Create name + payload["cursor"] <- System.Text.Json.Nodes.JsonValue.Create "1" + if ordinary then + payload["eventCount"] <- System.Text.Json.Nodes.JsonValue.Create 1 + payload["events"] <- System.Text.Json.Nodes.JsonNode.Parse "[{\"kind\":\"diagnostic\",\"identity\":\"ordinary-status\",\"revision\":1,\"code\":\"fixture\",\"severity\":\"info\"}]" + enqueue (Encoding.UTF8.GetBytes(payload.ToJsonString())) |> Result.defaultWith (sprintf "%A" >> failwith) |> ignore + for index in 1..20 do queue ("independent-passive-" + string index) false + queue "ordinary-ready" true + let visited = System.Collections.Generic.HashSet() + let mutable ordinaryApplied = false + let operations: WorkspaceTelemetryApplication.RemoteOperations = + { Lookup = fun _ batchId digest _ -> + visited.Add batchId |> ignore + if batchId = "ordinary-ready" then ordinaryApplied <- true + System.Threading.Tasks.Task.FromResult(FS.GG.Telemetry.RemoteClient.Acknowledged + { Scope = scope; BatchId = batchId; Digest = digest; Status = (if batchId = "ordinary-ready" then "applied" else "durably-received"); Code = None }) + Submit = fun _ _ _ -> failwith "durable lookup must never resubmit blocked heads" } + // Corrupt advisory metadata resets safely; it is neither queued intent nor authority. + let cursor = Path.Combine(spool, "drain-cursor") + File.WriteAllText(cursor, "invalid") + File.SetUnixFileMode(cursor, enum 0o600) + let originals = Directory.GetFiles(spool, "*.ready") |> Array.map (fun file -> file, File.ReadAllBytes file) |> Map.ofArray + for _ in 1..8 do + WorkspaceTelemetryApplication.tryDrainWithOperationsForTesting (Some config) (Some "FS-GG/.github") operations |> ignore + Assert.True ordinaryApplied + Assert.Equal(22, visited.Count) + Assert.Equal(52, Directory.GetFiles(spool, "*.ready").Length) + for file in Directory.GetFiles(spool, "*.ready") do Assert.Equal(originals[file], File.ReadAllBytes file) + // Metadata reset/crash can alter visit order only; retained correction successors stay held. + File.Delete cursor + WorkspaceTelemetryApplication.tryDrainWithOperationsForTesting (Some config) (Some "FS-GG/.github") operations |> ignore + Assert.Equal(22, visited.Count) From 74bad72e6122e49157abc43ae7bec994247bc58c Mon Sep 17 00:00:00 2001 From: EHotwagner Date: Sun, 18 Oct 2026 11:26:32 +0200 Subject: [PATCH 10/19] fix: advance fair drain cursor only across attempted batches --- .../WorkspaceTelemetryApplication.fs | 32 +++++++++++++------ .../WorkspaceTelemetryApplication.fsi | 4 +++ .../WorkspaceTelemetryApplicationTests.fs | 32 +++++++++++++++++++ 3 files changed, 59 insertions(+), 9 deletions(-) diff --git a/src/FS.GG.Coord.Cli/WorkspaceTelemetryApplication.fs b/src/FS.GG.Coord.Cli/WorkspaceTelemetryApplication.fs index ef829dcb6..39f8748a7 100644 --- a/src/FS.GG.Coord.Cli/WorkspaceTelemetryApplication.fs +++ b/src/FS.GG.Coord.Cli/WorkspaceTelemetryApplication.fs @@ -721,6 +721,8 @@ module WorkspaceTelemetryApplication = let result = match result with + | RemoteClient.Unacknowledged "receipt-unavailable" when token.IsCancellationRequested -> + RemoteClient.Unacknowledged "network-unavailable" | RemoteClient.Unacknowledged "receipt-unavailable" -> (selected.Submit (scope a) bytes token).GetAwaiter().GetResult() | other -> other @@ -1095,7 +1097,7 @@ module WorkspaceTelemetryApplication = let tryPublish configArg repositoryArg payload = tryPublishExpected configArg repositoryArg None payload - let private tryDrainBoundWith (operations: RemoteOperations option) (configArg: string option) (repositoryArg: string option) (expectedBinding: string option) = + let private tryDrainBoundWith (operations: RemoteOperations option) (externalDeadline: CancellationToken option) (configArg: string option) (repositoryArg: string option) (expectedBinding: string option) = let path = configPath configArg if not (File.Exists path) then @@ -1123,7 +1125,8 @@ module WorkspaceTelemetryApplication = match ensurePrivateDirectory spool with | Error errors -> Error errors | Ok directory -> - use deadline = new CancellationTokenSource(TimeSpan.FromSeconds 30.) + use deadline = CancellationTokenSource.CreateLinkedTokenSource([| externalDeadline |> Option.defaultValue CancellationToken.None |]) + deadline.CancelAfter(TimeSpan.FromSeconds 30.) let inventory = Directory.EnumerateFiles(directory, "*.ready") |> Seq.truncate 129 |> Seq.toArray let selection = selectReadyFiles (readDrainCursor directory) inventory @@ -1131,11 +1134,19 @@ module WorkspaceTelemetryApplication = match selection with | Error errors -> [ Error errors ] | Ok files -> - // Advance before network: crashes/uncertain outcomes change visit order only. - match List.tryLast files with - | Some last -> atomicWriteWith true directory "drain-cursor" (Encoding.UTF8.GetBytes(Path.GetFileName last)) |> ignore - | None -> () - files |> List.map (remoteOneWith operations association endpoint reference deadline.Token) + let rec visit (remaining: string list) (completed: Result list) = + match remaining with + | [] -> List.rev completed + | _ when deadline.IsCancellationRequested -> List.rev (Error [ "drain-deadline-expired" ] :: completed) + | file :: tail -> + // Advance only over this attempted head. A slow predecessor must not + // skip the unattempted remainder when the shared deadline expires. + atomicWriteWith true directory "drain-cursor" (Encoding.UTF8.GetBytes(Path.GetFileName file)) |> ignore + let result = + try remoteOneWith operations association endpoint reference deadline.Token file + with :? OperationCanceledException -> Error [ "drain-deadline-expired" ] + visit tail (result :: completed) + visit files [] match results @@ -1164,10 +1175,13 @@ module WorkspaceTelemetryApplication = with _ -> Error [ "drain-advisory-failure" ] - let private tryDrainBound configArg repositoryArg expectedBinding = tryDrainBoundWith None configArg repositoryArg expectedBinding + let private tryDrainBound configArg repositoryArg expectedBinding = tryDrainBoundWith None None configArg repositoryArg expectedBinding let tryDrainWithOperationsForTesting configArg repositoryArg operations = - tryDrainBoundWith (Some operations) configArg repositoryArg None + tryDrainBoundWith (Some operations) None configArg repositoryArg None + + let tryDrainWithDeadlineForTesting configArg repositoryArg operations deadline = + tryDrainBoundWith (Some operations) (Some deadline) configArg repositoryArg None let tryDrain configArg repositoryArg = tryDrainBound configArg repositoryArg None diff --git a/src/FS.GG.Coord.Cli/WorkspaceTelemetryApplication.fsi b/src/FS.GG.Coord.Cli/WorkspaceTelemetryApplication.fsi index 3bc4335d2..40337600b 100644 --- a/src/FS.GG.Coord.Cli/WorkspaceTelemetryApplication.fsi +++ b/src/FS.GG.Coord.Cli/WorkspaceTelemetryApplication.fsi @@ -64,6 +64,10 @@ module WorkspaceTelemetryApplication = val tryDrainWithOperationsForTesting: configArg: string option -> repositoryArg: string option -> operations: RemoteOperations -> Result + /// Inject cancellation into the unchanged 30-second drain budget, without waiting on wall time. + val tryDrainWithDeadlineForTesting: + configArg: string option -> repositoryArg: string option -> operations: RemoteOperations -> deadline: System.Threading.CancellationToken -> Result + val tryDrain: configArg: string option -> repositoryArg: string option -> Result val tryDrainExpected: diff --git a/tests/FS.GG.Coord.Cli.Tests/WorkspaceTelemetryApplicationTests.fs b/tests/FS.GG.Coord.Cli.Tests/WorkspaceTelemetryApplicationTests.fs index d7830d095..f58386a7a 100644 --- a/tests/FS.GG.Coord.Cli.Tests/WorkspaceTelemetryApplicationTests.fs +++ b/tests/FS.GG.Coord.Cli.Tests/WorkspaceTelemetryApplicationTests.fs @@ -1041,3 +1041,35 @@ module WorkspaceTelemetryApplicationTests = File.Delete cursor WorkspaceTelemetryApplication.tryDrainWithOperationsForTesting (Some config) (Some "FS-GG/.github") operations |> ignore Assert.Equal(22, visited.Count) + + // Expire every drain immediately after its first usable lookup. Unattempted selected + // tails must resume next time rather than being skipped by a last-selected cursor. + queue "ordinary-after-cancellation" true + let serviced = System.Collections.Generic.HashSet() + let mutable ordinaryAfterCancellation = false + for _ in 1..23 do + use cutoff = new System.Threading.CancellationTokenSource() + let slow: WorkspaceTelemetryApplication.RemoteOperations = + { Lookup = fun _ batchId digest token -> + Assert.False token.IsCancellationRequested + serviced.Add batchId |> ignore + if batchId = "ordinary-after-cancellation" then ordinaryAfterCancellation <- true + cutoff.Cancel() + System.Threading.Tasks.Task.FromResult(FS.GG.Telemetry.RemoteClient.Acknowledged + { Scope = scope; BatchId = batchId; Digest = digest; Status = (if batchId = "ordinary-after-cancellation" then "applied" else "durably-received"); Code = None }) + Submit = fun _ _ _ -> failwith "expired budget must not start submit" } + WorkspaceTelemetryApplication.tryDrainWithDeadlineForTesting (Some config) (Some "FS-GG/.github") slow cutoff.Token |> ignore + Assert.True ordinaryAfterCancellation + Assert.Equal(22, serviced.Count) + Assert.Equal(52, Directory.GetFiles(spool, "*.ready").Length) + for file in Directory.GetFiles(spool, "*.ready") do Assert.Equal(originals[file], File.ReadAllBytes file) + + use submitCutoff = new System.Threading.CancellationTokenSource() + let canceledLookup: WorkspaceTelemetryApplication.RemoteOperations = + { Lookup = fun _ _ _ token -> + Assert.False token.IsCancellationRequested + submitCutoff.Cancel() + System.Threading.Tasks.Task.FromResult(FS.GG.Telemetry.RemoteClient.Unacknowledged "receipt-unavailable") + Submit = fun _ _ _ -> failwith "canceled lookup must not start a submit" } + WorkspaceTelemetryApplication.tryDrainWithDeadlineForTesting (Some config) (Some "FS-GG/.github") canceledLookup submitCutoff.Token |> ignore + Assert.Equal(52, Directory.GetFiles(spool, "*.ready").Length) From 1a83ebc6c33a08e4ba26802f3168eb01b89bf1de Mon Sep 17 00:00:00 2001 From: EHotwagner Date: Sun, 18 Oct 2026 11:31:35 +0200 Subject: [PATCH 11/19] test: observe forbidden passive callbacks outside application catches --- .../WorkspaceTelemetryApplicationTests.fs | 50 +++++++++++++++---- 1 file changed, 39 insertions(+), 11 deletions(-) diff --git a/tests/FS.GG.Coord.Cli.Tests/WorkspaceTelemetryApplicationTests.fs b/tests/FS.GG.Coord.Cli.Tests/WorkspaceTelemetryApplicationTests.fs index f58386a7a..246161e52 100644 --- a/tests/FS.GG.Coord.Cli.Tests/WorkspaceTelemetryApplicationTests.fs +++ b/tests/FS.GG.Coord.Cli.Tests/WorkspaceTelemetryApplicationTests.fs @@ -548,7 +548,9 @@ module WorkspaceTelemetryApplicationTests = Assert.Equal("unknown", second["attribution"].GetValue()) Assert.Equal("unknown", second["delivery"].GetValue()) Assert.Equal(2, calls.Count) - let noNew = capture (fun _ -> failwith "duplicate observation was enqueued") + let mutable duplicateEnqueues = 0 + let noNew = capture (fun _ -> duplicateEnqueues <- duplicateEnqueues + 1; Ok "locally-retained") + Assert.Equal(0, duplicateEnqueues) Assert.Single(noNew["observations"].AsArray()) |> ignore File.AppendAllText(path, nativeRow "response-a" 23000L 50L) let mutable correction = Array.empty @@ -561,7 +563,9 @@ module WorkspaceTelemetryApplicationTests = Assert.Single parsed.Facts |> ignore Assert.Equal(row["identity"].GetValue(), parsed.Facts.Head.Identity) let before = File.ReadAllBytes statePath - let refused = SkillTelemetryAdapter.capturePassive root "different-owner" "passive-stream" home [path] (fun _ -> failwith "owner conflict invoked enqueue") + let mutable ownerConflictEnqueues = 0 + let refused = SkillTelemetryAdapter.capturePassive root "different-owner" "passive-stream" home [path] (fun _ -> ownerConflictEnqueues <- ownerConflictEnqueues + 1; Ok "locally-retained") + Assert.Equal(0, ownerConflictEnqueues) Assert.Equal(1, refused.ExitCode) Assert.Equal(before, File.ReadAllBytes statePath) @@ -596,7 +600,9 @@ module WorkspaceTelemetryApplicationTests = Assert.Equal(256, before["responses"].AsObject().Count) let cursor = before["sources"].ToJsonString() File.AppendAllText(path, nativeRow "overflow" 10L 0L) - let after = SkillTelemetryAdapter.capturePassive root "owner" "passive-stream" home [path] (fun _ -> failwith "index overload enqueued") |> parseCapture + let mutable overflowEnqueues = 0 + let after = SkillTelemetryAdapter.capturePassive root "owner" "passive-stream" home [path] (fun _ -> overflowEnqueues <- overflowEnqueues + 1; Ok "locally-retained") |> parseCapture + Assert.Equal(0, overflowEnqueues) Assert.Equal(256, after["observations"].AsArray().Count) Assert.Contains("response-index-full-capture-deferred", after["gaps"].ToJsonString()) let state = System.Text.Json.Nodes.JsonNode.Parse(File.ReadAllBytes statePath) @@ -742,19 +748,22 @@ module WorkspaceTelemetryApplicationTests = let before = File.ReadAllBytes file let envelope = TelemetryReceipt.parse before |> Result.defaultWith (sprintf "%A" >> failwith) let mutable reject = false + let submittedBytes = ResizeArray() let operations: WorkspaceTelemetryApplication.RemoteOperations = { Lookup = fun _ _ _ _ -> System.Threading.Tasks.Task.FromResult(FS.GG.Telemetry.RemoteClient.Unacknowledged(if reject then "receipt-unavailable" else "unsupported-version")) Submit = fun _ bytes _ -> - Assert.Equal(before, bytes) + submittedBytes.Add(Array.copy bytes) System.Threading.Tasks.Task.FromResult(FS.GG.Telemetry.RemoteClient.Acknowledged { Scope = scope; BatchId = envelope.BatchId; Digest = envelope.Digest; Status = "rejected"; Code = Some "invalid-request" }) } let first = WorkspaceTelemetryApplication.tryDrainWithOperationsForTesting (Some config) (Some "FS-GG/.github") operations Assert.Equal(Error [ "passive-receiver-capability-refused:unsupported-version" ], first) + Assert.Empty submittedBytes Assert.Equal(before, File.ReadAllBytes file) reject <- true let second = WorkspaceTelemetryApplication.tryDrainWithOperationsForTesting (Some config) (Some "FS-GG/.github") operations Assert.Equal(Error [ "passive-receiver-capability-or-admission-refused:invalid-request" ], second) + Assert.Equal(before, Assert.Single submittedBytes) Assert.Equal(before, File.ReadAllBytes file) Assert.False(Directory.Exists(Path.Combine(spool, "outcomes"))) @@ -765,11 +774,13 @@ module WorkspaceTelemetryApplicationTests = use cleanup = cleanup let home, path = passiveSource root "concurrent" File.WriteAllText(path, nativeRow "response-a" 10L 0L) + let mutable competingEnqueues = 0 let enqueue _ = - let competitor = SkillTelemetryAdapter.capturePassive root "owner" "passive-stream" home [path] (fun _ -> failwith "competing capture passed stream lock") + let competitor = SkillTelemetryAdapter.capturePassive root "owner" "passive-stream" home [path] (fun _ -> competingEnqueues <- competingEnqueues + 1; Ok "locally-retained") Assert.Equal(1, competitor.ExitCode) Ok "locally-retained" let captured = SkillTelemetryAdapter.capturePassive root "owner" "passive-stream" home [path] enqueue |> parseCapture + Assert.Equal(0, competingEnqueues) Assert.Single(captured["observations"].AsArray()) |> ignore [] @@ -1019,13 +1030,17 @@ module WorkspaceTelemetryApplicationTests = queue "ordinary-ready" true let visited = System.Collections.Generic.HashSet() let mutable ordinaryApplied = false + let mutable unexpectedSubmits = 0 + let mutable canceledEntries = 0 let operations: WorkspaceTelemetryApplication.RemoteOperations = { Lookup = fun _ batchId digest _ -> visited.Add batchId |> ignore if batchId = "ordinary-ready" then ordinaryApplied <- true System.Threading.Tasks.Task.FromResult(FS.GG.Telemetry.RemoteClient.Acknowledged { Scope = scope; BatchId = batchId; Digest = digest; Status = (if batchId = "ordinary-ready" then "applied" else "durably-received"); Code = None }) - Submit = fun _ _ _ -> failwith "durable lookup must never resubmit blocked heads" } + Submit = fun _ _ _ -> + unexpectedSubmits <- unexpectedSubmits + 1 + System.Threading.Tasks.Task.FromResult(FS.GG.Telemetry.RemoteClient.Unacknowledged "unexpected-submit") } // Corrupt advisory metadata resets safely; it is neither queued intent nor authority. let cursor = Path.Combine(spool, "drain-cursor") File.WriteAllText(cursor, "invalid") @@ -1033,6 +1048,7 @@ module WorkspaceTelemetryApplicationTests = let originals = Directory.GetFiles(spool, "*.ready") |> Array.map (fun file -> file, File.ReadAllBytes file) |> Map.ofArray for _ in 1..8 do WorkspaceTelemetryApplication.tryDrainWithOperationsForTesting (Some config) (Some "FS-GG/.github") operations |> ignore + Assert.Equal(0, unexpectedSubmits) Assert.True ordinaryApplied Assert.Equal(22, visited.Count) Assert.Equal(52, Directory.GetFiles(spool, "*.ready").Length) @@ -1051,25 +1067,37 @@ module WorkspaceTelemetryApplicationTests = use cutoff = new System.Threading.CancellationTokenSource() let slow: WorkspaceTelemetryApplication.RemoteOperations = { Lookup = fun _ batchId digest token -> - Assert.False token.IsCancellationRequested + if token.IsCancellationRequested then canceledEntries <- canceledEntries + 1 serviced.Add batchId |> ignore if batchId = "ordinary-after-cancellation" then ordinaryAfterCancellation <- true cutoff.Cancel() System.Threading.Tasks.Task.FromResult(FS.GG.Telemetry.RemoteClient.Acknowledged { Scope = scope; BatchId = batchId; Digest = digest; Status = (if batchId = "ordinary-after-cancellation" then "applied" else "durably-received"); Code = None }) - Submit = fun _ _ _ -> failwith "expired budget must not start submit" } + Submit = fun _ _ _ -> + unexpectedSubmits <- unexpectedSubmits + 1 + System.Threading.Tasks.Task.FromResult(FS.GG.Telemetry.RemoteClient.Unacknowledged "unexpected-submit") } WorkspaceTelemetryApplication.tryDrainWithDeadlineForTesting (Some config) (Some "FS-GG/.github") slow cutoff.Token |> ignore + Assert.Equal(0, unexpectedSubmits) + Assert.Equal(0, canceledEntries) Assert.True ordinaryAfterCancellation Assert.Equal(22, serviced.Count) Assert.Equal(52, Directory.GetFiles(spool, "*.ready").Length) for file in Directory.GetFiles(spool, "*.ready") do Assert.Equal(originals[file], File.ReadAllBytes file) use submitCutoff = new System.Threading.CancellationTokenSource() + let mutable canceledLookupCalls = 0 let canceledLookup: WorkspaceTelemetryApplication.RemoteOperations = { Lookup = fun _ _ _ token -> - Assert.False token.IsCancellationRequested + canceledLookupCalls <- canceledLookupCalls + 1 + if token.IsCancellationRequested then canceledEntries <- canceledEntries + 1 submitCutoff.Cancel() System.Threading.Tasks.Task.FromResult(FS.GG.Telemetry.RemoteClient.Unacknowledged "receipt-unavailable") - Submit = fun _ _ _ -> failwith "canceled lookup must not start a submit" } - WorkspaceTelemetryApplication.tryDrainWithDeadlineForTesting (Some config) (Some "FS-GG/.github") canceledLookup submitCutoff.Token |> ignore + Submit = fun _ _ _ -> + unexpectedSubmits <- unexpectedSubmits + 1 + System.Threading.Tasks.Task.FromResult(FS.GG.Telemetry.RemoteClient.Unacknowledged "unexpected-submit") } + let canceledResult = WorkspaceTelemetryApplication.tryDrainWithDeadlineForTesting (Some config) (Some "FS-GG/.github") canceledLookup submitCutoff.Token + Assert.Equal(Error [ "unacknowledged-lossy" ], canceledResult) + Assert.Equal(1, canceledLookupCalls) + Assert.Equal(0, canceledEntries) + Assert.Equal(0, unexpectedSubmits) Assert.Equal(52, Directory.GetFiles(spool, "*.ready").Length) From b88c95a24f20e207c35971583fcffde50a312761 Mon Sep 17 00:00:00 2001 From: EHotwagner Date: Sun, 18 Oct 2026 11:29:59 +0200 Subject: [PATCH 12/19] build: prepare coherent 0.106 source against accepted 0.105 predecessor --- .../workflows/release-successor-candidate.yml | 22 +++++----- .../release-successor-feed-readiness.yml | 6 +-- .../workflows/release-successor-publish.yml | 6 +-- Directory.Build.props | 7 +++- docs/roadmaps/utel-release-successor.md | 42 ++++++++++++++++++- registry/CHANGELOG.md | 2 + registry/dependencies.yml | 2 +- scripts/release_successor_journal.py | 10 ++--- tests/release-successor-candidate/run.py | 18 ++++---- tests/release-successor-recovery/run.py | 38 ++++++++--------- 10 files changed, 100 insertions(+), 53 deletions(-) diff --git a/.github/workflows/release-successor-candidate.yml b/.github/workflows/release-successor-candidate.yml index 1616d55b3..3972c97b6 100644 --- a/.github/workflows/release-successor-candidate.yml +++ b/.github/workflows/release-successor-candidate.yml @@ -1,6 +1,6 @@ name: release-successor-candidate -# Source/byte qualification for coherent set 0.105.0 only. This route has no tag, release, +# Source/byte qualification for coherent set 0.106.0 only. This route has no tag, release, # journal, package-feed, OIDC or promotion write. Its retained Actions artifact # is an unpromoted candidate, not a published release or an admission receipt. on: @@ -43,7 +43,7 @@ jobs: test "$(git rev-parse HEAD)" = "$SOURCE_SHA" test "$(git ls-remote origin refs/heads/main | cut -f1)" = "$SOURCE_SHA" version="$(dotnet msbuild src/FS.GG.Coord.Cli/FS.GG.Coord.Cli.fsproj -getProperty:Version | tr -d '[:space:]')" - test "$version" = 0.105.0 + test "$version" = 0.106.0 echo "version=$version" >> "$GITHUB_OUTPUT" - name: Verify the stable predecessor and unused package version env: @@ -53,24 +53,24 @@ jobs: run: | set -euo pipefail mkdir -p artifacts/predecessor artifacts/packages - gh release download coherent-set/v0.104.0 --repo "$GITHUB_REPOSITORY" \ + gh release download coherent-set/v0.105.0 --repo "$GITHUB_REPOSITORY" \ --pattern stable-channel.json --dir artifacts/predecessor python3 scripts/release-saga.py predecessor \ --channel artifacts/predecessor/stable-channel.json \ - --release-tag coherent-set/v0.104.0 \ - --tag-source 912eba8bbd707dabcbc5011d508c479109010b71 \ + --release-tag coherent-set/v0.105.0 \ + --tag-source e54a59885580c894c8fbc67b0b27af3571ea9883 \ > artifacts/predecessor/identity.json - test "$(jq -r .version artifacts/predecessor/identity.json)" = 0.104.0 + test "$(jq -r .version artifacts/predecessor/identity.json)" = 0.105.0 python3 scripts/check-release-candidate-uniqueness.py \ - --version "$VERSION" --predecessor 0.104.0 + --version "$VERSION" --predecessor 0.105.0 release_status="$(curl --silent --show-error --location -o /dev/null -w '%{http_code}' \ -H "Authorization: Bearer $GH_TOKEN" \ -H 'Accept: application/vnd.github+json' \ - "https://api.github.com/repos/$GITHUB_REPOSITORY/releases/tags/coherent-set/v0.105.0")" + "https://api.github.com/repos/$GITHUB_REPOSITORY/releases/tags/coherent-set/v0.106.0")" test "$release_status" = 404 test -z "$(git ls-remote --tags origin \ - 'refs/tags/coherent-set/v0.105.0' 'refs/tags/kit/v0.105.0' \ - 'refs/tags/drivers/v0.105.0' 'refs/tags/coord-engine/v0.105.0')" + 'refs/tags/coherent-set/v0.106.0' 'refs/tags/kit/v0.106.0' \ + 'refs/tags/drivers/v0.106.0' 'refs/tags/coord-engine/v0.106.0')" - name: Test the telemetry producer and prepare the browser fixture run: | set -euo pipefail @@ -183,7 +183,7 @@ jobs: set -euo pipefail test "$(git ls-remote origin refs/heads/main | cut -f1)" = "$SOURCE_SHA" python3 scripts/check-release-candidate-uniqueness.py \ - --version "$VERSION" --predecessor 0.104.0 + --version "$VERSION" --predecessor 0.105.0 - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: name: release-successor-candidate-${{ github.sha }}-${{ github.run_id }} diff --git a/.github/workflows/release-successor-feed-readiness.yml b/.github/workflows/release-successor-feed-readiness.yml index 0905291d9..1b8a7eae5 100644 --- a/.github/workflows/release-successor-feed-readiness.yml +++ b/.github/workflows/release-successor-feed-readiness.yml @@ -1,6 +1,6 @@ name: release-successor-feed-readiness -# Informational freshness observation for a prospective 0.105.0 coherent set. +# Informational freshness observation for a prospective 0.106.0 coherent set. # This does not select a release, qualify source bytes, or authorize publication. on: workflow_dispatch: @@ -35,10 +35,10 @@ jobs: test "$(git rev-parse HEAD)" = "$SOURCE_SHA" test "$(git ls-remote origin refs/heads/main | cut -f1)" = "$SOURCE_SHA" python3 tests/release-successor-candidate/run.py - - name: Observe both feeds for 0.105.0 against published 0.104.0 + - name: Observe both feeds for 0.106.0 against published 0.105.0 env: GITHUB_TOKEN: ${{ github.token }} run: | set -euo pipefail python3 scripts/check-release-candidate-uniqueness.py \ - --version 0.105.0 --predecessor 0.104.0 + --version 0.106.0 --predecessor 0.105.0 diff --git a/.github/workflows/release-successor-publish.yml b/.github/workflows/release-successor-publish.yml index 1700afd65..40d32d5c3 100644 --- a/.github/workflows/release-successor-publish.yml +++ b/.github/workflows/release-successor-publish.yml @@ -1,8 +1,8 @@ name: release-successor-publish -# Single-operator publication for the one literal 0.104.0 successor, with a separate -# install-only suspension route. Fixed journal19 recovery remains bound to the original -# 0.101.0 candidate; the five GS2-08.9 sealed workflows retain their distinct selection. +# Single-operator publication for the selected current coherent source, with separate +# fixed historical recovery/install-only routes. Their original version/journal bindings +# remain unchanged; current source preparation grants no publication effect. on: workflow_dispatch: inputs: diff --git a/Directory.Build.props b/Directory.Build.props index 16d582e2a..c724423e3 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -608,8 +608,13 @@ + - 0.105.0 + 0.106.0 diff --git a/docs/roadmaps/utel-release-successor.md b/docs/roadmaps/utel-release-successor.md index b0929ad31..9ad3a1e89 100644 --- a/docs/roadmaps/utel-release-successor.md +++ b/docs/roadmaps/utel-release-successor.md @@ -2,7 +2,47 @@ Owner: `FS-GG/.github` release and telemetry producer. Main/SystemAdmin owns installed-host adoption. This item is a separate, additive publication route; it does not reopen the accepted GS2-08.9 legacy routes or authorize `OpenV2`. -## Selected current source: 0.105 after accepted 0.104 — 2026-10-18 +## Selected prospective source: 0.106 over accepted 0.105 — 2026-10-18 + +Root selected coherent **0.106.0** source preparation for passive modern native observations through +PR #4672 and its existing application/reader/store composition. The accepted predecessor is +**0.105.0**, source `e54a59885580c894c8fbc67b0b27af3571ea9883`, content identity +`sha256:52b3e36be8e985097934377478a0f7359f0f65efd9c37e0438b8ee4c10022f3f`, promoted in +[release 416229635](https://github.com/FS-GG/.github/releases/tag/coherent-set/v0.105.0). +The fresh prospective journal is `refs/heads/fsgg/v2/journal/release/utel-rel-24`; no journal is initialized +by this selection. Published registry fields, canonical installed-tool pin, active 0.105 executable +and accepted board binding remain unchanged. + +Advance the existing candidate and current publisher tuple together. The normal first-attempt, +exact-main candidate retains its seven original archive members and separate V2 refusal evidence; +source preparation grants no dispatch. Public NuGet and exact tag reads found no 0.106 at the +preparation cutoff, but local authenticated org-feed reads were denied. The existing hosted +`packages: read` six-coordinate guard must freshly establish complete uniqueness and the exact +0.105 predecessor before qualification/retention, and again beside publication. Read-only journal +collision preparation never replaces the entry-time native absence and ownership checks. + +After final exact-source qualification and separate candidate admission, authenticate the downloaded +archive and use the candidate workflow's existing local-only package source/exclusive tool-path +pattern for an isolated offline capture trial. Invoke the absolute candidate entry; never replace the +active board selector or binding. Fresh capture-only association metadata is local setup, not receiver +enrollment or readiness; receiver credentials are unnecessary for local capture/reporting. Actual +local runtime, output custody, resource bounds and safe explicit native sources remain separately +admitted. This is not published/installed fleet or receiver durability acceptance. + +The compatible receiver Host/store remains a separate adoption requirement: the shared store payload +changed, but `FS.GG.Telemetry.Host` is independently versioned and is not a fourth coherent-set +package. Keep its current published/source inventory unchanged in this preparation. Existing +receivers may reject the new payload while exact pending bytes remain retained. The first useful +isolated local capture does not wait for Home access, Host deployment or receiver enrollment. + +Publication remains the existing same-source candidate, no-effect preflight, separately selected +publisher, all sixteen durable effects, both feeds and promotion/readback route. A new source or +successful candidate cannot repack, replay, release or settle an earlier uncertain effect. Original +0.103/0.104 journals, all 439 inherited holds and forty-six prior originals remain retained. Main +stays fixed through the later admitted candidate/preflight/first publication window. No publication, +installation, activation or original-operation retry is selected by this source update. + +## Historical 0.105 source selection after accepted 0.104 — 2026-10-18 The selected source composition is **0.105.0**, with predecessor **0.104.0** and the closed journal reference `refs/heads/fsgg/v2/journal/release/utel-rel-23`. This joins the diff --git a/registry/CHANGELOG.md b/registry/CHANGELOG.md index 428dd6b84..6a76721da 100644 --- a/registry/CHANGELOG.md +++ b/registry/CHANGELOG.md @@ -31,6 +31,8 @@ Record [original installed qualification39091471055/attempt1](https://github.com Record original publisher39085989107/attempt1 at producer8a5e63ba50d4b3cb7b5a66bb4136990d5589ee9e, release416167085/tagwasm/v0.6.0 and its exact manifest/SDK/promotion transaction. Both feeds and all four served assets were independently verified and accepted. Installed0.6 remains unqualified; the last accepted installed0.5 P8054/Qc938 and every prior immutable receipt remain separate. Consumers stay empty. This publication-only projection establishes no SC2/BAR/FourD adoption, product timing or native authority. +- **2026-10-18** — Prospective passive native telemetry coherent 0.106 source (github; UTEL-REL-01, #4672): select source 0.106.0 over authentic published 0.105.0 through the existing candidate/current publisher rails and a fresh journal. Published package-version/tag, canonical installed pin and qualified board binding remain 0.105.0; no candidate, publication or installation effect is selected. Both-feed uniqueness and exact-source qualification remain gates. + - **2026-10-18** — Prepare `coord-engine` **0.105.0 source only** (owner github; [release plan](../docs/roadmaps/utel-release-successor.md)). The closed current binding is0.105/accepted predecessor0.104/journal23, with complete V2 migration visibility and bounded pending-only publisher observation plus fresh full transition guards. Predecessor source remains immutable candidate `912eba8bbd707dabcbc5011d508c479109010b71`, not its continuation controller. Published package-version/tag and the canonical installed-tool pin remain **0.104.0**; no105 publication, installation, migration replay or consumer acceptance is claimed. Original .103 Unknown, consumed .104 continuation and inherited reservations remain unchanged. diff --git a/registry/dependencies.yml b/registry/dependencies.yml index 151e2cbbf..5c96af551 100644 --- a/registry/dependencies.yml +++ b/registry/dependencies.yml @@ -956,7 +956,7 @@ contracts: # verified all three members with identical normalized payload hashes; the org archives are the # prepared bytes. This is retained introduction history, not the current frontier; the # package-version inline history below names the current release and retains older frontiers. - version: "0.105.0" # CURRENT SOURCE/PUBLISHED: coherent-set/v0.105.0, exact candidate e54a59885580c894c8fbc67b0b27af3571ea9883; original candidate39095711219/a1 and publisher resume39098313280/a1 accepted; initial39096861301 remains an incomplete generation14 checkpoint. Maintained developer update and exact82-member installed105 payload correspondence accepted; board migration, binding and consumer acceptance remain separately scoped. PRIOR source0.104.0 is published from immutable candidate 912eba8bbd707dabcbc5011d508c479109010b71; executor 5a2d13d0 is the continuation controller only. HISTORICAL SOURCE PREPARATION: SOURCE PREPARATION ONLY: current programme migration and prospective release-specific .103 suspension; literal utel-rel-22 selection grants no allocation/publication/installed authority. Original .103 tag:intent remains Unknown with all reservations preserved. Published package-version/tag stay0.102.0. PRIOR 0.103 SOURCE PREPARATION ONLY: receiver-first bounded CI continuation and authenticated suite graphs; original utel-rel-21 effects remain unresolved, original0.102/utel-rel-20 recovery is frozen. PRIOR SOURCE/PUBLISHED: coherent-set/v0.101.0 source79051e56b025dadfc6fcaabd58b79e33f2854928, original publisher38094091013/a1; canonical generation33/all16 effects and independent both-feed CLI/Kit/Drivers payloads accepted. Installed adoption, current channel, collector activation and adapter SDK pairing remain separate. PRIOR SOURCE PREPARATION ONLY: exact CI attribution/native association and additive immutable causal receiver; selected utel-rel-19 source rail, packed receiver qualification/publication/adoption pending. Published package-version/tag remain0.100.0; current14 and local receiver-first boundary, no Host dependency. PRIOR SOURCE/PUBLISHED: coherent-set/v0.100.0 at 3ed8ad419a64253ca6f665e9779e5e4d110f50a5; retained original manifest and both-feed payload readbacks verified, stable channel promoted. Installed payload identity82/82 matches; global collector activation and genuine usage unverified, original UTEL19 custody unknown. PRIOR SOURCE ONLY: breaking current receipt ABI, current14 init/restore, explicit13 maintenance and scoped14 dashboard; prospective utel-rel-18, collision/qualification/publication pending. PRIOR SOURCE PREPARATION: 0.99.1 compatible bounded private dispatch-state IO; proposed utel-rel-17. Published frontier0.99.0; no new publication/adoption. PRIOR SOURCE ONLY: EFF schema14, prospective assessment gate and closed Drivers helper inputs. Not published/installed; package frontier remains0.98.0 and immutable utel-rel-15. Independent Host0.5 required for Store14 collection; native pilot/package qualification pending. PRIOR SOURCE/PUBLISHED: verified coherent 0.98.0 at producer 3d4f7e9c6337fb020e269e632653de0faeef6d72, journal utel-rel-15 and publisher 37434982959. PRIOR SOURCE SELECTION: additive schema 13 CI attribution correction and native compact/3 report contract; exact-source integration/qualification remains required. Published frontier remains accepted0.97.1 from99ea75286f5c3cea2a261fef4e5b45cd70378185; consumedutel-rel-13 and historical0.97.2/utel-rel-14 source are preserved. SOURCE/PUBLISHED: compatible equal feature/item telemetry fact identity and native agent binding repairs (PRs 4242/4243/4245); accepted coherent-set/v0.97.1 producer 99ea75286f5c3cea2a261fef4e5b45cd70378185 has both-feed verification. Installed root adoption and the fresh two-fact local cycle are scoped acceptance; historical and unsupported usage remain unknown. PRIOR 0.97.0 SOURCE/PUBLISHED: COORD-BOARD-V2-01.5 product adapter and guidance; publisher 37235030417 promoted exact source 2ab0c0ff9f37bdec9a11ba3604ebdc230711934f with all 16 journal effects verified and both-feed payload readback. Installed product adoption remains separate. PRIOR 0.96.0 SOURCE/PUBLISHED: UTEL-H3 coherent successor carries telemetry CI legacy-default selection repair from PR #4152 (a0044731f432b9f3f7dffa4f9d0a0c85eebb8a1b); publisher 37161212706 promoted exact source f891b5b0723070c67e08d1a87b7d12b0b4d8bebe; installed selections and receiver adoption remain separate. PRIOR 0.95.0 SOURCE/PUBLISHED — MINOR coherent successor for bounded read-only board-v2 inspection and gated organization guidance; publisher 37071597534 promoted exact source 3b5de3367f8647cea0cd9366b8cb11eddf53feae with all 16 protected-journal effects verified; installed qualification and four-target Board adoption remain pending. PRIOR 0.94.0 SOURCE/PUBLISHED — MINOR, Drivers removes the retired Python skill-helper implementations from both mirrored skill roots and the compatibility wrapper after supported callers moved to packaged F# commands; installed-package verification rejects reintroduction; includes protected native learning capture and export accumulated since 0.93.0; immutable coherent-set/v0.94.0 was promoted from source 337b6a1d53571b07ca8e1417e18e52546ad319a7 after exact both-feed readback; receiver adoption remains separate. PRIOR 0.93.0 SOURCE/PUBLISHED — MINOR, supported skill callers use packaged F# telemetry and preflight commands; includes protected native telemetry collection provenance accumulated since 0.92.0; immutable coherent release github:0.93.0 was promoted from source d53d5c4fa0a54894da87e96ae2999288fb280ea5 after protected both-feed readback; no receiver adoption is claimed. PRIOR 0.92.0 SOURCE/PUBLISHED — MINOR, additive bounded read-only `skill telemetry-config discover` for installed workflows; immutable coherent release github:0.92.0 was promoted from source eb0f73186a07daf26e0f7bb5d4c1ee2054a8adaf after exact both-feed readback; no receiver adoption is claimed. PRIOR 0.91.5 SOURCE PREPARED — FSharp.Core 10.1.401 and compatible telemetry/driver updates; package-version remains published 0.91.4 until both-feed promotion. PRIOR 0.91.4 SOURCE/PUBLISHED — coherent telemetry-capable set from f0b1bb8748cbb7b27aeaf7346b8690c82ed03343; PRIOR 0.89.0 SOURCE/PUBLISHED — MINOR, FS.GG.Drivers adds the content-addressed installed routine policy, helper and native-check closure; immutable coherent release github:0.89.0 was promoted from source 535970a06055dfcdbb96aad8726b4d7d981a5b72 after exact both-feed readback. PRIOR 0.88.0 SOURCE/PUBLISHED — MINOR, independently activated private telemetry, source-free scoped dashboard, durable receipt transport, release qualification, and intake-audit hardening. Immutable tags `coord-engine/v0.88.0` and `coherent-set/v0.88.0` resolve the accepted source d77fe195bc4e133ace8763c2158834410ca72bc0. PRIOR 0.87.0 SOURCE PREPARED — MINOR, prospective private SQLite telemetry, repository-owned Codex lifecycle observation, exact-head CI reconciliation, native outcomes, and derived whole-item budget inputs (UTEL-06.1–06.4, .github#3360–#3363). Published from exact source bffc370933ec4f35af2af4acf5f72b5888844365 and promoted after both-feed verification. PRIOR 0.86.1 SOURCE/PUBLISHED — PATCH, routed board drivers reserve the three-round fresh implementer/critic repair chain for strict items so admitted routine work remains reduced through repair (.github#3338); immutable coherent release github:0.86.1 is promoted from source ce6edfd8e3f569867e6809ca3933c6ae65769a1d with content sha256:ccea15d2acd633188f34bdaa9761137538dd834fafa43cda185dbf90c473307c. PRIOR 0.86.0 SOURCE/PUBLISHED — MINOR, reduced one-owner routine route; immutable coherent release github:0.86.0 is promoted from source beb3456ecb2c4b4cadb6bc8dc268598246449aaf with content sha256:01d0c921ab23b6807e1d6da1a9c623cd0cfb5a595bf790b51662746a0681b974. PRIOR 0.85.2 SOURCE/PUBLISHED — PATCH, guarded two-phase implementation landing accepts a missing closing keyword only under an exact typed positive acceptance-receipt obligation and fresh same-item authority, while terminal completion remains reserved for the canonically closing receipt PR (.github#3286); immutable coherent release github:0.85.2 is promoted from source e94f7da34e2c3792a2c532a4969123fd26fd601b with content sha256:3fb04e68d9b90dff5d37f3ad9d0533346cf753444effdb6de5721191557d58fa. PRIOR 0.85.1 SOURCE/PUBLISHED — PATCH, acceptance survives a forward-only, complete, path-disjoint base advance while changed candidates, conflicts, relevant overlap, and unverifiable equivalence remain fail-closed (.github#3274); immutable coherent release github:0.85.1 is promoted from source 503a07d24a6087c549bc47b5322d6f05cce2a6c5 with content sha256:f0f3706c755c767c9f761c993bb01f7a9c52c08cd74d504c1de7322aadaf471c. PRIOR 0.85.0 SOURCE/PUBLISHED — MINOR, human-authorized scope-bound synthetic lifecycle checkpoint with mandatory functional verification and strict post-anchor resumption (.github#3263); immutable coherent release github:0.85.0 is promoted from source 9307b85458b326019415f8bcf6a1d13d0139eb6a with content sha256:95892fd5d1765ec3020168f71b103a1849ae645e00de77f8fcb549ddbd510081. PRIOR 0.84.0 SOURCE/PUBLISHED — MINOR, durable content-addressed private telemetry receipts, automatic digest resolution, and separately reviewed non-counting legacy recovery (.github#3259); immutable coherent release github:0.84.0 is promoted from source 17f400d70db2cdd28efd8d7ce14327f1495411d2 with content sha256:ec226689bf12f9ede6aebab4f1f045cc1bcb24e0c8208a9fcae031387cf776d5. PRIOR 0.83.5 SOURCE/PUBLISHED — PATCH, roadmap acceptance recognizes native FS.GG.SDD.Artifacts/1.5.0 verify and ship stage schemas while retaining exact revision, work, and evidence identity (.github#3255); immutable coherent release github:0.83.5 is promoted from source 97666e7f0193b71fde5642d5950093490fbabbdb with content sha256:3519327ac384e1549a2fed7fc431f47047c63f335341ce3d8eaf8b1b63aa3a9a. PRIOR 0.83.4 SOURCE/PUBLISHED — PATCH, roadmap unit acceptance now permits a single immutable implementation/acceptance PR only under equal identities, derives the repository from applied unit authority, and proves exact one-commit canonical critique ancestry (.github#3251); immutable coherent release github:0.83.4 is promoted from source a3641ca0827187fa4ff693f627f5024dab4093b0 with content sha256:aea555a3e8a6acf9d319b42cf714b605067be23ce2c8b39647780db4a96930bf. PRIOR 0.83.3 SOURCE/PUBLISHED — PATCH, roadmap acceptance uses separately authorable structured-review and immutable-envelope identities and binds SDD observation to the current structured route work ID (.github#3247); immutable coherent release github:0.83.3 is promoted from source 5e4c23790c714b892b0c5efa25b515ae4eaf252e with content sha256:aa95e6038bd0630eb163b0001c2f5628bc0daf71d0da8170f9e6fb6e44697ec2. PRIOR 0.83.2 SOURCE/PUBLISHED — PATCH, live acceptance relies on independently regenerated ignored SDD artifacts while retaining exact-revision observation and canonical comparison (.github#3242); immutable coherent release github:0.83.2 is promoted from source 0697e72f0f5b0d6bcc9728da3589f71d24dde420 with content sha256:40072e5998da0476a0bb7ad177d5c68129268b120d2cf3a2d554dbc7490dc7ed. PRIOR 0.83.1 SOURCE/PUBLISHED — PATCH, ordered partial roadmap catalog acceptance (.github#3233); immutable coherent release github:0.83.1 is promoted from source 2237ab8282433234e0d1af3f4716ef099422e282 with content sha256:43f9d6a386ce2988e1825d0439642e2965c937ee264bec3dca107dcd78ee2c1d. PRIOR 0.83.0 SOURCE/PUBLISHED — MINOR, additive typed roadmap work-unit preparation and atomic acceptance transaction (.github#3210); immutable coherent release github:0.83.0 is promoted from source fe13bf08d82091a3d024583e0315c50d30c59376 with content sha256:0e0df10f52fdd68747739aa6083f7d5b34cdaffd35e6d16976bcfdfa1106ebaa. PRIOR 0.82.0 SOURCE/PUBLISHED — MINOR, deterministic qualification/evidence runner; immutable coherent release github:0.82.0 is promoted from source 3c53e4600110974bb1b22d3522a7d794fd24e3fd with content sha256:20cd31e6a90658237571d37874f6885789217db329ca613d4a5e819432223a0d. PRIOR 0.81.1 SOURCE/PUBLISHED — PATCH, publish-before-adopt completion; packed callers use compiled telemetry and compatibility helpers are removed. PRIOR 0.78.1 SOURCE/PUBLISHED — PATCH, stable. Documentation-only orchestration visualization design plus the auto-publish frontier repair; no engine wire change. PRIOR 0.78.0 SOURCE/PUBLISHED — MINOR, stable. Intake derives Class from the shared board vocabulary and recovers only enumerated legacy drafts after a partial create; the exact predecessor body and authoritative post-PATCH read gate receipt advancement. Packed filing skills remove the unprojectable capability example. package-version is 0.78.0 after immutable dual-feed promotion. PRIOR 0.77.0 SOURCE/PUBLISHED — MINOR. ADR-0079 makes one Accountable Delivery Owner the sole routine authorization boundary; packed pnext-item retains exact-head critique/repair/acceptance evidence under distinct phase identities but requires no external person, account, agent, or approval quorum. PRIOR 0.76.0 SOURCE/PUBLISHED — MINOR. The coherent Kit adds initialize-sdd-workspace as a new receiver-visible member; Drivers and Coord.Cli advance on the shared scalar with no engine wire change. PRIOR 0.75.5 SOURCE/PUBLISHED — PATCH, stable (.github#2983, source PR #2990, merge 34b1fd8b). Three compatible lifecycle repairs ship: successful completed post-merge runs classify correctly, completion provenance preserves the full GraphQL merge OID, and closed delivery reads authoritative issue Paths while retaining unread-versus-undeclared state. Protocol.fs has zero wire commits across the span. PRIOR 0.75.4 SOURCE/PUBLISHED — PATCH, stable (.github#2941, source PR #2967, merge 8d720471). Nine accumulated non-wire engine commits ship with corrected cumulative release notes; Protocol.fs has zero wire commits across the release span. PRIOR 0.75.3 SOURCE/PUBLISHED — PATCH, stable, source 264725f374e3f05da46d7c3089462076a1f9bf7a; the immutable release predates this correction and its embedded notes misdescribe the accumulated changes. PRIOR: 0.74.0 SOURCE/PUBLISHED — MINOR, stable (.github#2876, source PR #2879). Five pre-existing non-wire engine-path commits plus the release-preparation commit are shipped from d4458d8fdfff0c332c80d920202ab0230bd9de0f; Protocol.fs is unchanged across the release span. PRIOR: 0.71.0 SOURCE/PUBLISHED — MINOR, stable (.github#2813, source PR #2814). Forward recovery ships the live stable-predecessor authority from source 3890c8f6b20fcd2c1fdd5b2a9a5356877c217397 while poisoned 0.70.0 remains unpromoted. Previous coherent registry frontier: 0.68.0. PRIOR 0.68.0 SOURCE/PUBLISHED — MINOR, stable (.github#2794, source PR #2803). Four additive exhausted-review/forced-claim commits are shipped with zero Protocol.fs wire commits. Previous coherent registry frontier: 0.67.0. PRIOR 0.67.0 SOURCE/PUBLISHED — MINOR, stable (.github#2756, PR #2792). Durable bounded review-wait receipts and the ordinary full fresh-successor review route are additive receiver-visible semantics. Previous coherent registry frontier: 0.66.0. PRIOR 0.66.0 SOURCE/PUBLISHED — MINOR, stable (.github#2757, PR #2789). The packaged findings-and-filing contract adds the named `disclosed residual` terminal state: measured bound, caller-facing disclosure, executable red pin, and durable authorized decision are conjunctive; a #266 check that cannot fail is explicitly excluded. Previous coherent registry frontier: 0.65.0. PRIOR 0.61.0 SOURCE/PUBLISHED — MINOR, stable. Two receiver-observable legs, either of which carries the line on the criterion the 0.56.0, 0.57.0, 0.59.0 and 0.60.0 entries used (.github#2712, PR #2745, engine commit 73024dc3): the board gains a `Kind:` body-line sentinel with a CLOSED four-value vocabulary — work|anchor|register|directive — in the same grammar as `Paths:`/`Class:`/`Blocked on:`, and a row declaring a NON-`work` kind is EXEMPT FROM THE LIFECYCLE REDUCER ENTIRELY (no projected Status, no persisted watermark, no park, no promotion, no Done), which the scheduler reports through a NEW verdict `not-a-unit-of-work` naming the kind rather than the row's column; and `ready --json` plus the board reads gain two per-row fields, `kind` (null until an operator creates the field) and `commentCount` (observable REGISTER DEPTH, riding the existing board page query as a connection totalCount and selecting no nodes, so the board read costs what it did before). AN ABSENT `Kind:` LINE MEANS `work`, so every row that existed at 0.60.0 behaves exactly as it did — the opposite default from an absent `Class:` line, deliberately. THE WIRE SURFACE DID MOVE HERE, AND ADDITIVELY, which is the honest difference from the 0.59.0 and 0.60.0 entries and is measured rather than asserted: src/FS.GG.Coord.Core/Protocol.fs is 214 insertions/254 deletions across coord-engine/v0.60.0..v0.61.0, but classifying that diff line by line finds ZERO removed type/DU/let/member definitions and exactly ONE added case, `Schedulability.NotAUnitOfWork` — the churn is the projected rule PROSE, not surface removal, so this is a MINOR BY ADDITION and not a MAJOR. THE SPAN IS 32 commits, of which 15 touch the engine paths under `git rev-list --full-history` and only 12 under default history simplification; BOTH numbers are stated because the smaller one is what a reader gets by default, and .github#2743 — the row that ordered this cut — records exactly that merge-vs-squash sensitivity as a real gate defect. Cut under per-cut operator authorisation (.github#2743 Sequencing; the 0.60.0 authorisation explicitly did not extend forward). PRIOR 0.60.0 SOURCE/PUBLISHED — MINOR, stable. Two receiver-visible legs, either of which carries the line on the criterion the 0.56.0, 0.57.0 and 0.59.0 entries used (.github#2645, PR #2650, engine commit aea56a4a): `claim --json` reports differently — `statusWrite` gains a FIFTH value `withheld`, distinct from `failed` (asserts a mutation was sent) and `deferred` (promises `flush`), and `converged` now means agreement with the DERIVED destination rather than with the literal column `In progress` — and the packed kit retires a start-gate `jq` predicate asserting `.status == "In progress"` that receivers copy verbatim. THE WIRE SURFACE IS UNCHANGED and that is measured, not assumed: check-engine-freshness reported 0 of the 2 unreleased engine commits touching src/FS.GG.Coord.Core/Protocol.fs, so `withheld` is a new INHABITANT of an existing reported field, not a new verb, flag, help entry, render name, result name or exit code. Cut by .github#2409's MANUAL path (.github#2713) because nothing automatic can cut it: kit-auto-publish.py:99-100 refuses this candidate `candidate-not-next-patch` — 0.60.0 opens a NEW minor line against a 0.59.0 frontier, failing the first clause and short-circuiting before the sibling-tag block at :101 — which is the rail working by design (.github#2442), verified here by driving decide() over the live facts with a 0.59.1 control that clears that same rail. PRIOR 0.59.0 SOURCE/PUBLISHED — MINOR, stable. Five receiver-visible engine defect fixes (.github#2575/#2662/#2683/#2678/#2694) plus a new reviewer protocol boundary in the packed pnext-item skill (finding-packet contract + independent-review consolidation), which is the 0.57.0 entry's shape. The 290 lines of new .fsi surface are corroboration only: FS.GG.Coord.Core.Operation is IsPackable=false and unreferenced by the CLI, so it reaches no receiver, and Protocol.fs is byte-identical across the span (.github#2648, PR #2706, round-1 finding by critic heron-d444). This cut ABANDONS 0.58.1, whose three tags at a415652f published nothing on either feed (.github#2654); those tags are immutable and are deliberately left alone (.github#1772). PRIOR 0.58.0 — 0.58.1 was never published and must not be read as a prior. + version: "0.106.0" # SOURCE PREPARATION ONLY: prospective coherent 0.106.0 over published 0.105.0 for passive native observation; candidate/publication/installation unselected, both-feed collision guards remain required. Published package-version/tag and active board pin stay 0.105.0. PRIOR CURRENT SOURCE/PUBLISHED: coherent-set/v0.105.0, exact candidate e54a59885580c894c8fbc67b0b27af3571ea9883; original candidate39095711219/a1 and publisher resume39098313280/a1 accepted; initial39096861301 remains an incomplete generation14 checkpoint. Maintained developer update and exact82-member installed105 payload correspondence accepted; board migration, binding and consumer acceptance remain separately scoped. PRIOR source0.104.0 is published from immutable candidate 912eba8bbd707dabcbc5011d508c479109010b71; executor 5a2d13d0 is the continuation controller only. HISTORICAL SOURCE PREPARATION: SOURCE PREPARATION ONLY: current programme migration and prospective release-specific .103 suspension; literal utel-rel-22 selection grants no allocation/publication/installed authority. Original .103 tag:intent remains Unknown with all reservations preserved. Published package-version/tag stay0.102.0. PRIOR 0.103 SOURCE PREPARATION ONLY: receiver-first bounded CI continuation and authenticated suite graphs; original utel-rel-21 effects remain unresolved, original0.102/utel-rel-20 recovery is frozen. PRIOR SOURCE/PUBLISHED: coherent-set/v0.101.0 source79051e56b025dadfc6fcaabd58b79e33f2854928, original publisher38094091013/a1; canonical generation33/all16 effects and independent both-feed CLI/Kit/Drivers payloads accepted. Installed adoption, current channel, collector activation and adapter SDK pairing remain separate. PRIOR SOURCE PREPARATION ONLY: exact CI attribution/native association and additive immutable causal receiver; selected utel-rel-19 source rail, packed receiver qualification/publication/adoption pending. Published package-version/tag remain0.100.0; current14 and local receiver-first boundary, no Host dependency. PRIOR SOURCE/PUBLISHED: coherent-set/v0.100.0 at 3ed8ad419a64253ca6f665e9779e5e4d110f50a5; retained original manifest and both-feed payload readbacks verified, stable channel promoted. Installed payload identity82/82 matches; global collector activation and genuine usage unverified, original UTEL19 custody unknown. PRIOR SOURCE ONLY: breaking current receipt ABI, current14 init/restore, explicit13 maintenance and scoped14 dashboard; prospective utel-rel-18, collision/qualification/publication pending. PRIOR SOURCE PREPARATION: 0.99.1 compatible bounded private dispatch-state IO; proposed utel-rel-17. Published frontier0.99.0; no new publication/adoption. PRIOR SOURCE ONLY: EFF schema14, prospective assessment gate and closed Drivers helper inputs. Not published/installed; package frontier remains0.98.0 and immutable utel-rel-15. Independent Host0.5 required for Store14 collection; native pilot/package qualification pending. PRIOR SOURCE/PUBLISHED: verified coherent 0.98.0 at producer 3d4f7e9c6337fb020e269e632653de0faeef6d72, journal utel-rel-15 and publisher 37434982959. PRIOR SOURCE SELECTION: additive schema 13 CI attribution correction and native compact/3 report contract; exact-source integration/qualification remains required. Published frontier remains accepted0.97.1 from99ea75286f5c3cea2a261fef4e5b45cd70378185; consumedutel-rel-13 and historical0.97.2/utel-rel-14 source are preserved. SOURCE/PUBLISHED: compatible equal feature/item telemetry fact identity and native agent binding repairs (PRs 4242/4243/4245); accepted coherent-set/v0.97.1 producer 99ea75286f5c3cea2a261fef4e5b45cd70378185 has both-feed verification. Installed root adoption and the fresh two-fact local cycle are scoped acceptance; historical and unsupported usage remain unknown. PRIOR 0.97.0 SOURCE/PUBLISHED: COORD-BOARD-V2-01.5 product adapter and guidance; publisher 37235030417 promoted exact source 2ab0c0ff9f37bdec9a11ba3604ebdc230711934f with all 16 journal effects verified and both-feed payload readback. Installed product adoption remains separate. PRIOR 0.96.0 SOURCE/PUBLISHED: UTEL-H3 coherent successor carries telemetry CI legacy-default selection repair from PR #4152 (a0044731f432b9f3f7dffa4f9d0a0c85eebb8a1b); publisher 37161212706 promoted exact source f891b5b0723070c67e08d1a87b7d12b0b4d8bebe; installed selections and receiver adoption remain separate. PRIOR 0.95.0 SOURCE/PUBLISHED — MINOR coherent successor for bounded read-only board-v2 inspection and gated organization guidance; publisher 37071597534 promoted exact source 3b5de3367f8647cea0cd9366b8cb11eddf53feae with all 16 protected-journal effects verified; installed qualification and four-target Board adoption remain pending. PRIOR 0.94.0 SOURCE/PUBLISHED — MINOR, Drivers removes the retired Python skill-helper implementations from both mirrored skill roots and the compatibility wrapper after supported callers moved to packaged F# commands; installed-package verification rejects reintroduction; includes protected native learning capture and export accumulated since 0.93.0; immutable coherent-set/v0.94.0 was promoted from source 337b6a1d53571b07ca8e1417e18e52546ad319a7 after exact both-feed readback; receiver adoption remains separate. PRIOR 0.93.0 SOURCE/PUBLISHED — MINOR, supported skill callers use packaged F# telemetry and preflight commands; includes protected native telemetry collection provenance accumulated since 0.92.0; immutable coherent release github:0.93.0 was promoted from source d53d5c4fa0a54894da87e96ae2999288fb280ea5 after protected both-feed readback; no receiver adoption is claimed. PRIOR 0.92.0 SOURCE/PUBLISHED — MINOR, additive bounded read-only `skill telemetry-config discover` for installed workflows; immutable coherent release github:0.92.0 was promoted from source eb0f73186a07daf26e0f7bb5d4c1ee2054a8adaf after exact both-feed readback; no receiver adoption is claimed. PRIOR 0.91.5 SOURCE PREPARED — FSharp.Core 10.1.401 and compatible telemetry/driver updates; package-version remains published 0.91.4 until both-feed promotion. PRIOR 0.91.4 SOURCE/PUBLISHED — coherent telemetry-capable set from f0b1bb8748cbb7b27aeaf7346b8690c82ed03343; PRIOR 0.89.0 SOURCE/PUBLISHED — MINOR, FS.GG.Drivers adds the content-addressed installed routine policy, helper and native-check closure; immutable coherent release github:0.89.0 was promoted from source 535970a06055dfcdbb96aad8726b4d7d981a5b72 after exact both-feed readback. PRIOR 0.88.0 SOURCE/PUBLISHED — MINOR, independently activated private telemetry, source-free scoped dashboard, durable receipt transport, release qualification, and intake-audit hardening. Immutable tags `coord-engine/v0.88.0` and `coherent-set/v0.88.0` resolve the accepted source d77fe195bc4e133ace8763c2158834410ca72bc0. PRIOR 0.87.0 SOURCE PREPARED — MINOR, prospective private SQLite telemetry, repository-owned Codex lifecycle observation, exact-head CI reconciliation, native outcomes, and derived whole-item budget inputs (UTEL-06.1–06.4, .github#3360–#3363). Published from exact source bffc370933ec4f35af2af4acf5f72b5888844365 and promoted after both-feed verification. PRIOR 0.86.1 SOURCE/PUBLISHED — PATCH, routed board drivers reserve the three-round fresh implementer/critic repair chain for strict items so admitted routine work remains reduced through repair (.github#3338); immutable coherent release github:0.86.1 is promoted from source ce6edfd8e3f569867e6809ca3933c6ae65769a1d with content sha256:ccea15d2acd633188f34bdaa9761137538dd834fafa43cda185dbf90c473307c. PRIOR 0.86.0 SOURCE/PUBLISHED — MINOR, reduced one-owner routine route; immutable coherent release github:0.86.0 is promoted from source beb3456ecb2c4b4cadb6bc8dc268598246449aaf with content sha256:01d0c921ab23b6807e1d6da1a9c623cd0cfb5a595bf790b51662746a0681b974. PRIOR 0.85.2 SOURCE/PUBLISHED — PATCH, guarded two-phase implementation landing accepts a missing closing keyword only under an exact typed positive acceptance-receipt obligation and fresh same-item authority, while terminal completion remains reserved for the canonically closing receipt PR (.github#3286); immutable coherent release github:0.85.2 is promoted from source e94f7da34e2c3792a2c532a4969123fd26fd601b with content sha256:3fb04e68d9b90dff5d37f3ad9d0533346cf753444effdb6de5721191557d58fa. PRIOR 0.85.1 SOURCE/PUBLISHED — PATCH, acceptance survives a forward-only, complete, path-disjoint base advance while changed candidates, conflicts, relevant overlap, and unverifiable equivalence remain fail-closed (.github#3274); immutable coherent release github:0.85.1 is promoted from source 503a07d24a6087c549bc47b5322d6f05cce2a6c5 with content sha256:f0f3706c755c767c9f761c993bb01f7a9c52c08cd74d504c1de7322aadaf471c. PRIOR 0.85.0 SOURCE/PUBLISHED — MINOR, human-authorized scope-bound synthetic lifecycle checkpoint with mandatory functional verification and strict post-anchor resumption (.github#3263); immutable coherent release github:0.85.0 is promoted from source 9307b85458b326019415f8bcf6a1d13d0139eb6a with content sha256:95892fd5d1765ec3020168f71b103a1849ae645e00de77f8fcb549ddbd510081. PRIOR 0.84.0 SOURCE/PUBLISHED — MINOR, durable content-addressed private telemetry receipts, automatic digest resolution, and separately reviewed non-counting legacy recovery (.github#3259); immutable coherent release github:0.84.0 is promoted from source 17f400d70db2cdd28efd8d7ce14327f1495411d2 with content sha256:ec226689bf12f9ede6aebab4f1f045cc1bcb24e0c8208a9fcae031387cf776d5. PRIOR 0.83.5 SOURCE/PUBLISHED — PATCH, roadmap acceptance recognizes native FS.GG.SDD.Artifacts/1.5.0 verify and ship stage schemas while retaining exact revision, work, and evidence identity (.github#3255); immutable coherent release github:0.83.5 is promoted from source 97666e7f0193b71fde5642d5950093490fbabbdb with content sha256:3519327ac384e1549a2fed7fc431f47047c63f335341ce3d8eaf8b1b63aa3a9a. PRIOR 0.83.4 SOURCE/PUBLISHED — PATCH, roadmap unit acceptance now permits a single immutable implementation/acceptance PR only under equal identities, derives the repository from applied unit authority, and proves exact one-commit canonical critique ancestry (.github#3251); immutable coherent release github:0.83.4 is promoted from source a3641ca0827187fa4ff693f627f5024dab4093b0 with content sha256:aea555a3e8a6acf9d319b42cf714b605067be23ce2c8b39647780db4a96930bf. PRIOR 0.83.3 SOURCE/PUBLISHED — PATCH, roadmap acceptance uses separately authorable structured-review and immutable-envelope identities and binds SDD observation to the current structured route work ID (.github#3247); immutable coherent release github:0.83.3 is promoted from source 5e4c23790c714b892b0c5efa25b515ae4eaf252e with content sha256:aa95e6038bd0630eb163b0001c2f5628bc0daf71d0da8170f9e6fb6e44697ec2. PRIOR 0.83.2 SOURCE/PUBLISHED — PATCH, live acceptance relies on independently regenerated ignored SDD artifacts while retaining exact-revision observation and canonical comparison (.github#3242); immutable coherent release github:0.83.2 is promoted from source 0697e72f0f5b0d6bcc9728da3589f71d24dde420 with content sha256:40072e5998da0476a0bb7ad177d5c68129268b120d2cf3a2d554dbc7490dc7ed. PRIOR 0.83.1 SOURCE/PUBLISHED — PATCH, ordered partial roadmap catalog acceptance (.github#3233); immutable coherent release github:0.83.1 is promoted from source 2237ab8282433234e0d1af3f4716ef099422e282 with content sha256:43f9d6a386ce2988e1825d0439642e2965c937ee264bec3dca107dcd78ee2c1d. PRIOR 0.83.0 SOURCE/PUBLISHED — MINOR, additive typed roadmap work-unit preparation and atomic acceptance transaction (.github#3210); immutable coherent release github:0.83.0 is promoted from source fe13bf08d82091a3d024583e0315c50d30c59376 with content sha256:0e0df10f52fdd68747739aa6083f7d5b34cdaffd35e6d16976bcfdfa1106ebaa. PRIOR 0.82.0 SOURCE/PUBLISHED — MINOR, deterministic qualification/evidence runner; immutable coherent release github:0.82.0 is promoted from source 3c53e4600110974bb1b22d3522a7d794fd24e3fd with content sha256:20cd31e6a90658237571d37874f6885789217db329ca613d4a5e819432223a0d. PRIOR 0.81.1 SOURCE/PUBLISHED — PATCH, publish-before-adopt completion; packed callers use compiled telemetry and compatibility helpers are removed. PRIOR 0.78.1 SOURCE/PUBLISHED — PATCH, stable. Documentation-only orchestration visualization design plus the auto-publish frontier repair; no engine wire change. PRIOR 0.78.0 SOURCE/PUBLISHED — MINOR, stable. Intake derives Class from the shared board vocabulary and recovers only enumerated legacy drafts after a partial create; the exact predecessor body and authoritative post-PATCH read gate receipt advancement. Packed filing skills remove the unprojectable capability example. package-version is 0.78.0 after immutable dual-feed promotion. PRIOR 0.77.0 SOURCE/PUBLISHED — MINOR. ADR-0079 makes one Accountable Delivery Owner the sole routine authorization boundary; packed pnext-item retains exact-head critique/repair/acceptance evidence under distinct phase identities but requires no external person, account, agent, or approval quorum. PRIOR 0.76.0 SOURCE/PUBLISHED — MINOR. The coherent Kit adds initialize-sdd-workspace as a new receiver-visible member; Drivers and Coord.Cli advance on the shared scalar with no engine wire change. PRIOR 0.75.5 SOURCE/PUBLISHED — PATCH, stable (.github#2983, source PR #2990, merge 34b1fd8b). Three compatible lifecycle repairs ship: successful completed post-merge runs classify correctly, completion provenance preserves the full GraphQL merge OID, and closed delivery reads authoritative issue Paths while retaining unread-versus-undeclared state. Protocol.fs has zero wire commits across the span. PRIOR 0.75.4 SOURCE/PUBLISHED — PATCH, stable (.github#2941, source PR #2967, merge 8d720471). Nine accumulated non-wire engine commits ship with corrected cumulative release notes; Protocol.fs has zero wire commits across the release span. PRIOR 0.75.3 SOURCE/PUBLISHED — PATCH, stable, source 264725f374e3f05da46d7c3089462076a1f9bf7a; the immutable release predates this correction and its embedded notes misdescribe the accumulated changes. PRIOR: 0.74.0 SOURCE/PUBLISHED — MINOR, stable (.github#2876, source PR #2879). Five pre-existing non-wire engine-path commits plus the release-preparation commit are shipped from d4458d8fdfff0c332c80d920202ab0230bd9de0f; Protocol.fs is unchanged across the release span. PRIOR: 0.71.0 SOURCE/PUBLISHED — MINOR, stable (.github#2813, source PR #2814). Forward recovery ships the live stable-predecessor authority from source 3890c8f6b20fcd2c1fdd5b2a9a5356877c217397 while poisoned 0.70.0 remains unpromoted. Previous coherent registry frontier: 0.68.0. PRIOR 0.68.0 SOURCE/PUBLISHED — MINOR, stable (.github#2794, source PR #2803). Four additive exhausted-review/forced-claim commits are shipped with zero Protocol.fs wire commits. Previous coherent registry frontier: 0.67.0. PRIOR 0.67.0 SOURCE/PUBLISHED — MINOR, stable (.github#2756, PR #2792). Durable bounded review-wait receipts and the ordinary full fresh-successor review route are additive receiver-visible semantics. Previous coherent registry frontier: 0.66.0. PRIOR 0.66.0 SOURCE/PUBLISHED — MINOR, stable (.github#2757, PR #2789). The packaged findings-and-filing contract adds the named `disclosed residual` terminal state: measured bound, caller-facing disclosure, executable red pin, and durable authorized decision are conjunctive; a #266 check that cannot fail is explicitly excluded. Previous coherent registry frontier: 0.65.0. PRIOR 0.61.0 SOURCE/PUBLISHED — MINOR, stable. Two receiver-observable legs, either of which carries the line on the criterion the 0.56.0, 0.57.0, 0.59.0 and 0.60.0 entries used (.github#2712, PR #2745, engine commit 73024dc3): the board gains a `Kind:` body-line sentinel with a CLOSED four-value vocabulary — work|anchor|register|directive — in the same grammar as `Paths:`/`Class:`/`Blocked on:`, and a row declaring a NON-`work` kind is EXEMPT FROM THE LIFECYCLE REDUCER ENTIRELY (no projected Status, no persisted watermark, no park, no promotion, no Done), which the scheduler reports through a NEW verdict `not-a-unit-of-work` naming the kind rather than the row's column; and `ready --json` plus the board reads gain two per-row fields, `kind` (null until an operator creates the field) and `commentCount` (observable REGISTER DEPTH, riding the existing board page query as a connection totalCount and selecting no nodes, so the board read costs what it did before). AN ABSENT `Kind:` LINE MEANS `work`, so every row that existed at 0.60.0 behaves exactly as it did — the opposite default from an absent `Class:` line, deliberately. THE WIRE SURFACE DID MOVE HERE, AND ADDITIVELY, which is the honest difference from the 0.59.0 and 0.60.0 entries and is measured rather than asserted: src/FS.GG.Coord.Core/Protocol.fs is 214 insertions/254 deletions across coord-engine/v0.60.0..v0.61.0, but classifying that diff line by line finds ZERO removed type/DU/let/member definitions and exactly ONE added case, `Schedulability.NotAUnitOfWork` — the churn is the projected rule PROSE, not surface removal, so this is a MINOR BY ADDITION and not a MAJOR. THE SPAN IS 32 commits, of which 15 touch the engine paths under `git rev-list --full-history` and only 12 under default history simplification; BOTH numbers are stated because the smaller one is what a reader gets by default, and .github#2743 — the row that ordered this cut — records exactly that merge-vs-squash sensitivity as a real gate defect. Cut under per-cut operator authorisation (.github#2743 Sequencing; the 0.60.0 authorisation explicitly did not extend forward). PRIOR 0.60.0 SOURCE/PUBLISHED — MINOR, stable. Two receiver-visible legs, either of which carries the line on the criterion the 0.56.0, 0.57.0 and 0.59.0 entries used (.github#2645, PR #2650, engine commit aea56a4a): `claim --json` reports differently — `statusWrite` gains a FIFTH value `withheld`, distinct from `failed` (asserts a mutation was sent) and `deferred` (promises `flush`), and `converged` now means agreement with the DERIVED destination rather than with the literal column `In progress` — and the packed kit retires a start-gate `jq` predicate asserting `.status == "In progress"` that receivers copy verbatim. THE WIRE SURFACE IS UNCHANGED and that is measured, not assumed: check-engine-freshness reported 0 of the 2 unreleased engine commits touching src/FS.GG.Coord.Core/Protocol.fs, so `withheld` is a new INHABITANT of an existing reported field, not a new verb, flag, help entry, render name, result name or exit code. Cut by .github#2409's MANUAL path (.github#2713) because nothing automatic can cut it: kit-auto-publish.py:99-100 refuses this candidate `candidate-not-next-patch` — 0.60.0 opens a NEW minor line against a 0.59.0 frontier, failing the first clause and short-circuiting before the sibling-tag block at :101 — which is the rail working by design (.github#2442), verified here by driving decide() over the live facts with a 0.59.1 control that clears that same rail. PRIOR 0.59.0 SOURCE/PUBLISHED — MINOR, stable. Five receiver-visible engine defect fixes (.github#2575/#2662/#2683/#2678/#2694) plus a new reviewer protocol boundary in the packed pnext-item skill (finding-packet contract + independent-review consolidation), which is the 0.57.0 entry's shape. The 290 lines of new .fsi surface are corroboration only: FS.GG.Coord.Core.Operation is IsPackable=false and unreferenced by the CLI, so it reaches no receiver, and Protocol.fs is byte-identical across the span (.github#2648, PR #2706, round-1 finding by critic heron-d444). This cut ABANDONS 0.58.1, whose three tags at a415652f published nothing on either feed (.github#2654); those tags are immutable and are deliberately left alone (.github#1772). PRIOR 0.58.0 — 0.58.1 was never published and must not be read as a prior. # HISTORICAL PACKAGE: 0.91.2, immutable coherent-set/v0.91.2 from source fc64f351a6c7733c3df6520ad1e1671bfcc1714b; content sha256:a3073f2b92d64048e1b8ee08e76263a1b5d6d56b6c75dd930505aa9eb3fcecd6. Publisher run 35506239965 and protected journal fsgg/v2/journal/release/utel-rel-03 verified all three members on both feeds and promotion. Manifest SHA-256 1f98d1f970810ecd357252663ad0582c97b0dd42008bb3b55b9b585bfa4f4cfa; stable-channel SHA-256 317ff8d08f484ecec5063ce7495da63bc33b18e40707ecb0ae9c46bd158d6984. PRIOR 0.91.1 from source 05e3feadcce3d546a05b2a4e0b1780e8a642a228; content sha256:3a87727ed7178b79e00f904457f19abcff1e7b00b0a93cc593568735eb28aefc. Both feeds verified all three members; producer CLI 0.91.1 adopted on both dev containers. PRIOR 0.91.0 from source 85c356b2c44cfea4b83659b14b6946d64bbd9a22; content sha256:c8b03938aa6357f696ff9ca257315e02f79e0a23ef8b6d87d37430139f2e600c. Prior package-version: 0.90.0. package-version: "0.105.0" # PUBLISHED: coherent-set/v0.105.0, candidate e54a59885580c894c8fbc67b0b27af3571ea9883, initial39096861301 stopped at generation14; separately selected39098313280/a1 completed all16/final33 without resending the settled Kit intent, release416229635 promoted/latest; final coherent channel and installed82-file correspondence remain bounded to their original evidence. PRIOR immutable0.104.0: coherent-set/v0.104.0, release416097241, candidate912eba8bbd707dabcbc5011d508c479109010b71/content sha256:86a776fe591b5b98bf189fdf2c47148b1b417551c44f091146a1d6ce1acfd987; continuation39080633461/a1 at controller5a2d13d0 accepted final journal22 generation34/all16 effects. Original39073648848/a1 remains an incomplete checkpoint; original .103 Unknown and all inherited reservations remain. Installed update and private-caller/consumer acceptance are separate. PRIOR 0.102: PUBLISHED: fixed candidate6e9be17bacd288ece103b67ecd5842d37a9c8e50, content sha256:fc16321e011ea616648ccc1dafda00bfc06fa34210fd49ddb008bb56c9ceecf5; original publisher38133108945/a1, continuation38156868958/a1 accepted generation33/all16effects including both feeds and promotion. Installed selector custody and C3 provider acceptance remain separate. PRIOR Published coherent-set/v0.101.0, release408709919; candidate content sha256:e8ed439047f663dfcb34aba1152ffd4c6966a0c3a27be0ebb48eebcf47e26996, source79051e56b025dadfc6fcaabd58b79e33f2854928; all three normalized candidate payloads match both feeds. No installed-adoption or current-channel claim. PRIOR Published coherent-set/v0.100.0, source3ed8ad419a64253ca6f665e9779e5e4d110f50a5; original manifest0b31c416 and both-feed normalized payloads verified, fresh tag/release/feed metadata confirmed2026-10-09. Original operation custody remains unknown. PRIOR Accepted coherent-set/v0.99.0 publisher37566865635, source64e95ebec1a8294e16edaafdb27e6aa96f32c6f7, release405346080; both-feed readbacks accepted by root. PRIOR Verified coherent-set/v0.98.0 publication 37434982959, journal utel-rel-15, producer 3d4f7e9c6337fb020e269e632653de0faeef6d72, content sha256:15a3bc4c133216cde77d1fef5b639d1842588a5754802eaa11b098e7b62c2a06. PRIOR Both-feed publication accepted for coherent-set/v0.97.1 at source 99ea75286f5c3cea2a261fef4e5b45cd70378185; exact-head hosted feed readback also confirms both feeds. PRIOR0.97.0 publication: run 37235030417; coherent-set/v0.97.0, release 403211100, content sha256:b78fd7bdff1251e32c07ffb181c31b8c2009e3174cfe305b0761f5ca8b4e245d. Prior 0.96.0 receipts remain immutable. package-tag: "coherent-set/v0.105.0" # Prior coherent-set/v0.104.0, coherent-set/v0.102.0 and all earlier release identities remain immutable. diff --git a/scripts/release_successor_journal.py b/scripts/release_successor_journal.py index bc4b4e1a6..9e0ea60a3 100644 --- a/scripts/release_successor_journal.py +++ b/scripts/release_successor_journal.py @@ -30,10 +30,10 @@ SCHEMA = "fsgg.release-successor-journal/1" # One selected current source composition, independent of frozen original cuts. -CURRENT_RELEASE = {"version": "0.105.0", "predecessor": "0.104.0", - "logicalRef": "refs/heads/fsgg/v2/journal/release/utel-rel-23", - "predecessorSource": "912eba8bbd707dabcbc5011d508c479109010b71", - "predecessorContentId": "sha256:86a776fe591b5b98bf189fdf2c47148b1b417551c44f091146a1d6ce1acfd987"} +CURRENT_RELEASE = {"version": "0.106.0", "predecessor": "0.105.0", + "logicalRef": "refs/heads/fsgg/v2/journal/release/utel-rel-24", + "predecessorSource": "e54a59885580c894c8fbc67b0b27af3571ea9883", + "predecessorContentId": "sha256:52b3e36be8e985097934377478a0f7359f0f65efd9c37e0438b8ee4c10022f3f"} @@ -650,7 +650,7 @@ def guard_current_intent(self, expected, effect, content_id, source, version): observed = self._observed if (self.ref != CURRENT_RELEASE["logicalRef"] or not self.main_directory or self._ordinary_binding_cache is None or self.api is not self._ordinary_api - or self.directory != "state/releases/utel-rel-23" or self.continuation_owner is not None + or self.directory != "state/releases/utel-rel-24" or self.continuation_owner is not None or observed is None or expected != (observed.head, canonical(observed.state)) or version != CURRENT_RELEASE["version"] or observed.state.get("version") != version or observed.state.get("contentId") != content_id or observed.state.get("sourceSha") != source diff --git a/tests/release-successor-candidate/run.py b/tests/release-successor-candidate/run.py index a333bcc31..6ab5ce7f9 100644 --- a/tests/release-successor-candidate/run.py +++ b/tests/release-successor-candidate/run.py @@ -222,7 +222,7 @@ def test_prospective_feed_probe_has_only_main_read_permissions_and_no_release_ef self.assertIn('test "$(git ls-remote origin refs/heads/main | cut -f1)" = "$SOURCE_SHA"', workflow) self.assertIn("python3 tests/release-successor-candidate/run.py", workflow) self.assertIn("python3 scripts/check-release-candidate-uniqueness.py", workflow) - self.assertIn("--version 0.105.0 --predecessor 0.104.0", workflow) + self.assertIn("--version 0.106.0 --predecessor 0.105.0", workflow) for forbidden in ( "packages: write", "contents: write", "id-token:", "environment:", "secrets.", "release-successor-publish.py", "release-saga.py", "dotnet pack", @@ -233,21 +233,21 @@ def test_prospective_feed_probe_has_only_main_read_permissions_and_no_release_ef def test_candidate_binds_the_next_version_and_exact_predecessor(self) -> None: workflow = (ROOT / ".github/workflows/release-successor-candidate.yml").read_text() - self.assertIn('test "$version" = 0.105.0', workflow) - self.assertIn("gh release download coherent-set/v0.104.0", workflow) - self.assertIn("--tag-source 912eba8bbd707dabcbc5011d508c479109010b71", workflow) - self.assertEqual(workflow.count("--predecessor 0.104.0"), 2) - self.assertIn("--release-tag coherent-set/v0.104.0", workflow) + self.assertIn('test "$version" = 0.106.0', workflow) + self.assertIn("gh release download coherent-set/v0.105.0", workflow) + self.assertIn("--tag-source e54a59885580c894c8fbc67b0b27af3571ea9883", workflow) + self.assertEqual(workflow.count("--predecessor 0.105.0"), 2) + self.assertIn("--release-tag coherent-set/v0.105.0", workflow) for namespace in ("coherent-set", "kit", "drivers", "coord-engine"): - self.assertIn(f"refs/tags/{namespace}/v0.105.0", workflow) + self.assertIn(f"refs/tags/{namespace}/v0.106.0", workflow) for project in ("FS.GG.Coord.Cli", "FS.GG.Kit", "FS.GG.Drivers"): self.assertEqual(workflow.count(f"dotnet pack src/{project}/"), 1) initial=workflow.split(' - name: Verify the stable predecessor and unused package version',1)[1].split(' - name: Test the telemetry producer',1)[0] retention=workflow.split(' - name: Refuse a changed main or newly occupied version before retention',1)[1].split(' - uses: actions/upload-artifact',1)[0] - self.assertIn('releases/tags/coherent-set/v0.105.0',initial) + self.assertIn('releases/tags/coherent-set/v0.106.0',initial) self.assertIn('git ls-remote',initial) self.assertIn('refs/heads/main',retention) - self.assertIn('--predecessor 0.104.0',retention) + self.assertIn('--predecessor 0.105.0',retention) self.assertNotIn('releases/tags/',retention) self.assertNotIn('refs/tags/',retention) self.assertIn('timeout-minutes: 45',workflow) diff --git a/tests/release-successor-recovery/run.py b/tests/release-successor-recovery/run.py index dba00df11..15f4b2d2d 100644 --- a/tests/release-successor-recovery/run.py +++ b/tests/release-successor-recovery/run.py @@ -1609,11 +1609,11 @@ def test_primary_upload_uncertainty_survives_report_failure(self): class SelectedReleaseBindingTests(unittest.TestCase): - def test_current_default_has_105_104_and_distinct23(self): + def test_current_default_has_106_105_and_distinct24(self): args = types.SimpleNamespace(recovery_checkpoint=False, repeat_original_nuget_kit_intent=False, recover_original_runtime_intent=False) self.assertEqual(publisher.selected_release_binding(args), - ("0.105.0", "0.104.0", "refs/heads/fsgg/v2/journal/release/utel-rel-23")) + ("0.106.0", "0.105.0", "refs/heads/fsgg/v2/journal/release/utel-rel-24")) def test_explicit_original103_selectors_do_not_follow_current_default(self): for flag in ('original_0103_candidate','recover_original_0103_tag_intent'): @@ -1938,10 +1938,10 @@ class Literal104ProviderFixture(MemoryPublisher): """ def __init__(self, root, suspension, *, version="0.104.0"): super().__init__() - assert version in {'0.104.0','0.105.0'} + assert version in {'0.104.0', publisher.CURRENT_RELEASE['version']} self.version=version - current=version=='0.105.0' - previous={'version':'0.104.0','contentId':publisher.CURRENT_RELEASE['predecessorContentId'], + current=version==publisher.CURRENT_RELEASE['version'] + previous={'version':publisher.CURRENT_RELEASE['predecessor'],'contentId':publisher.CURRENT_RELEASE['predecessorContentId'], 'sourceSha':publisher.CURRENT_RELEASE['predecessorSource']} if current else { 'version':'0.102.0','contentId':'sha256:'+'c'*64,'sourceSha':'d'*40} self.root=root; self.tag=None; self.release=None; self.assets={}; self.feeds=set() @@ -2391,7 +2391,7 @@ def test_precredential_workflow_order_and_candidate_binding(self): self.assertLess(fence,workflow.index(name)) self.assertNotIn('disposition_json:',workflow) candidate = (ROOT/'.github/workflows/release-successor-candidate.yml').read_text() - self.assertIn('test "$version" = 0.105.0',candidate) + self.assertIn('test "$version" = 0.106.0',candidate) self.assertNotIn('-p:Version=',candidate) self.assertIn('name: release-successor-candidate-${{ github.sha }}-${{ github.run_id }}',candidate) self.assertIn('Separate evidence: never add a member to the exact seven-member publisher archive.',candidate) @@ -2402,8 +2402,8 @@ class LiteralForwardControls(SuspensionFixture): def context(self): if not hasattr(self,'_forward_base'):self._forward_base=copy.deepcopy(self.authority) self.authority=copy.deepcopy(self._forward_base) - self.install();self.authority.logical_ref=publisher.CURRENT_RELEASE['logicalRef'];self.authority.directory_suffix='utel-rel-23';self.authority.calls.clear() - candidate=manifest();candidate['descriptor'].update(version='0.105.0',previousStableVersion='0.104.0') + self.install();self.authority.logical_ref=publisher.CURRENT_RELEASE['logicalRef'];self.authority.directory_suffix='utel-rel-24';self.authority.calls.clear() + candidate=manifest();candidate['descriptor'].update(version='0.106.0',previousStableVersion='0.105.0') candidate['contentId']='sha256:'+hashlib.sha256(json.dumps(candidate['descriptor'],sort_keys=True,separators=(',',':')).encode()).hexdigest() counted=publisher.CountedAuthorityAPI(self.authority,ceiling=1500,quota_floor=1800);counted.admit_quota() shared=self.mod.ReleaseSuspension(counted);rows=report();native=MemoryPublisher() @@ -2420,7 +2420,7 @@ def visibility(effect): if observation.state=='matched' and observation.observed_digest==effect.target_digest:return 'potential' raise publisher.Refused('inert pending witness '+observation.state) provider.ordinary_visibility=visibility - intent={'contentId':candidate['contentId'],'sourceSha':'b'*40,'version':'0.105.0','candidateArchiveSha256':'c'*64,'operator':'EHotwagner'} + intent={'contentId':candidate['contentId'],'sourceSha':'b'*40,'version':'0.106.0','candidateArchiveSha256':'c'*64,'operator':'EHotwagner'} publisher.prepare_release_journal(journal,counted,admission,provider,native,candidate,intent,'b'*40,'b'*40,False,lambda:None) journal.capture();ticks=[0];sleeps=[] def sleep(seconds):sleeps.append(seconds);ticks[0]+=seconds @@ -2488,7 +2488,7 @@ def get(path): if '/actions/runs/' in path:row['status']='cancelled' return row native.get=get - elif mode=='suspension':self.add_file('state/releases/utel-rel-23/release-state.json',canonical(journal._observed.state)+b' ') + elif mode=='suspension':self.add_file('state/releases/utel-rel-24/release-state.json',canonical(journal._observed.state)+b' ') else:next(iter(self.authority.controls.values()))['enforcement']='disabled' with self.assertRaises(RuntimeError):run(sleep=sleep) self.assertEqual(provider.dispatched,['tag']);self.assertEqual(sleeps,[5]) @@ -3479,12 +3479,12 @@ def prepare_caller(self, *, history=0, delays=0, target='channel-asset', ceiling self.assertTrue(self.mod._claimed_state(state));self.claimed104=canonical(state);self.claimed104_head=(head+'\n').encode() physical=old_journal._overlay(self.authority.head,head,state) self.authority.patch(PREFIX+'/git/refs/heads/main',{'sha':physical,'force':False}) - self.authority.directory_suffix='utel-rel-23';self.authority.logical_ref=publisher.CURRENT_RELEASE['logicalRef'] + self.authority.directory_suffix='utel-rel-24';self.authority.logical_ref=publisher.CURRENT_RELEASE['logicalRef'] for n in range(history):self.add_file('state/ordinary/cold-history.json',canonical({'generation':n})) - self.native=Literal104ProviderFixture(self.root,None,version="0.105.0") + self.native=Literal104ProviderFixture(self.root,None,version="0.106.0") stream=io.BytesIO() with zipfile.ZipFile(stream,'w') as archive: - for name in [*(f'{package}.0.105.0.nupkg' for package in PACKAGES), + for name in [*(f'{package}.0.106.0.nupkg' for package in PACKAGES), 'release-manifest.json','previous-stable-channel.json', 'standalone-telemetry-evidence.json','standalone-telemetry-runtime-evidence.json']: archive.writestr(name,(self.root/name).read_bytes()) @@ -3521,7 +3521,7 @@ def get(path,_original_get=original): if '/releases?' in path:return [] if hidden=='promote' and '/releases/tags/' in path:value['draft']=True if hidden and '/assets?per_page=100' in path: - name={**{f'archive-asset:{package}':f'{package}.0.105.0.nupkg' for package in PACKAGES}, + name={**{f'archive-asset:{package}':f'{package}.0.106.0.nupkg' for package in PACKAGES}, 'qualification-asset:evidence':'standalone-telemetry-evidence.json', 'qualification-asset:runtime':'standalone-telemetry-runtime-evidence.json', 'channel-asset':'stable-channel.json','manifest-asset':'release-manifest.json'}.get(hidden) @@ -3591,7 +3591,7 @@ def process(argv,**kwargs): return types.SimpleNamespace(returncode=0) if len(argv)>1 and argv[1].endswith('check-release-candidate-uniqueness.py'): self.local_ports.append('uniqueness-external-port') - self.assertEqual(argv[2:],['--version','0.105.0','--predecessor','0.104.0']) + self.assertEqual(argv[2:],['--version','0.106.0','--predecessor','0.105.0']) self.assertFalse(self.native.feeds);self.assertIsNone(self.native.release) return types.SimpleNamespace(returncode=0) self.local_ports.append('inert-nuget-send' if argv[:3]==['dotnet','nuget','push'] else 'saga:'+argv[2]) @@ -3681,7 +3681,7 @@ def change(candidate): path=candidate/'previous-stable-channel.json';value=json.loads(path.read_bytes());value['sourceSha']='e'*40 else: path=candidate/'release-manifest.json';value=json.loads(path.read_bytes()) - value['descriptor']['version' if mode=='version' else 'previousStableVersion']='0.106.0' + value['descriptor']['version' if mode=='version' else 'previousStableVersion']='0.107.0' path.write_bytes(canonical(value)) self.after_verifier=change with self.assertRaisesRegex(RuntimeError,'publisher version|publisher predecessor|accepted predecessor'):self.invoke_caller() @@ -3712,7 +3712,7 @@ def prepare(effect): target=self.providers[0] if mode=='reader':target._ordinary_journal.api=MemoryAuthority(publisher.CURRENT_RELEASE['logicalRef']) elif mode=='ref':target.logical_ref=self.allowed['logicalRef'] - elif mode=='version':target.version='0.106.0' + elif mode=='version':target.version='0.107.0' elif mode=='source':target.source='e'*40 elif mode=='content':target.content_id='sha256:'+'e'*64 else: @@ -3779,7 +3779,7 @@ def get(path): return row self.native.get=get elif mode=='protection':next(iter(self.authority.controls.values()))['enforcement']='disabled' - else:self.external_file('state/releases/utel-rel-23/release-state.json',canonical(self.rows['lastObservedJournal'])+b' ') + else:self.external_file('state/releases/utel-rel-24/release-state.json',canonical(self.rows['lastObservedJournal'])+b' ') self.on_sleep=change with self.assertRaises(RuntimeError):self.invoke_caller() self.assertEqual(self.dispatches,['tag']) @@ -3873,7 +3873,7 @@ def prepare(effect): name='release-state.json' if mode=='state' else 'release-head.txt' expected=self.providers[0]._ordinary_expected_journal raw=expected[1]+b' ' if mode=='state' else ('e'*40+'\n').encode() - self.external_file('state/releases/utel-rel-23/'+name,raw) + self.external_file('state/releases/utel-rel-24/'+name,raw) self.on_prepare=prepare with self.assertRaises(RuntimeError):self.invoke_caller() self.assertIsNone(self.native.tag);self.assertEqual(self.publisher_ports.count('post'),0) From 2530ffc1e401da111b5b32a4f93c211bcc2c193e Mon Sep 17 00:00:00 2001 From: EHotwagner Date: Sun, 18 Oct 2026 11:34:32 +0200 Subject: [PATCH 13/19] fix: verify assertion execution and assemble final qualification --- .agents/skills/work-programme/SKILL.md | 14 ++++++++++++++ .claude/skills/work-programme/SKILL.md | 14 ++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/.agents/skills/work-programme/SKILL.md b/.agents/skills/work-programme/SKILL.md index 122998e30..ef6290ddd 100644 --- a/.agents/skills/work-programme/SKILL.md +++ b/.agents/skills/work-programme/SKILL.md @@ -347,6 +347,13 @@ resolved diagnostics for semantic review. After two failures of the same class, expression or generation path and make one coherent repair before another qualification. A cheap parse check must inspect diagnostics as well as exit status and never replaces compilation or required tests. +Early in the existing edit/compile/focused-test loop, verify that the maintained runner actually invokes +the changed assertion and reports its result. Compilation, discovery or an uncalled fixture is not +execution evidence. Exercise the negative control through that same runner: the intended invariant +violation must fail, and a swallowed exception, ignored result or earlier setup failure must not make +the control appear effective. Use the admitted execution profile; repair missing test wiring before +full qualification rather than adding a separate runner or review layer. + Record observed capacity, live and unknown reservations, storage evidence and the first workload peaks in the existing owner artifact before increasing local concurrency. Follow the [capacity window and assembled test candidate](references/context.md#capacity-window-and-assembled-test-candidate) @@ -444,6 +451,13 @@ The designated integrator (parent or delegated lane owner) admits remote PRs thr including other campaigns. The lock covers participating local callers only. Read the live check queue; prepare locally when CI limits progress and repair existing PRs. One integrator owns shared-file joins. +Before costly qualification, that integrator assembles compatible source, version, Atlas and closure +edits for the selected delivery and reconciles the current base. Coordinate disjoint reporting or +closure merges with the owner before its final base reconciliation, or defer them until delivery when +needed to avoid invalidating that qualification. Do not freeze unrelated main-branch work by default +or wait for unready unrelated edits. A changed final candidate still needs its applicable required +checks and coherent validation; batching does not authorize publication or other protected effects. + For hosted waits use `tools/routine-delivery.py --watch-checks --watch-seconds N` with repo, PR and exact head (N 1–600). Retain raw records privately; consume material changes or terminal/deadline summaries. Unchanged polls need no model turn or polling agent. Watchers never deliver and own only direct query children; diff --git a/.claude/skills/work-programme/SKILL.md b/.claude/skills/work-programme/SKILL.md index 122998e30..ef6290ddd 100644 --- a/.claude/skills/work-programme/SKILL.md +++ b/.claude/skills/work-programme/SKILL.md @@ -347,6 +347,13 @@ resolved diagnostics for semantic review. After two failures of the same class, expression or generation path and make one coherent repair before another qualification. A cheap parse check must inspect diagnostics as well as exit status and never replaces compilation or required tests. +Early in the existing edit/compile/focused-test loop, verify that the maintained runner actually invokes +the changed assertion and reports its result. Compilation, discovery or an uncalled fixture is not +execution evidence. Exercise the negative control through that same runner: the intended invariant +violation must fail, and a swallowed exception, ignored result or earlier setup failure must not make +the control appear effective. Use the admitted execution profile; repair missing test wiring before +full qualification rather than adding a separate runner or review layer. + Record observed capacity, live and unknown reservations, storage evidence and the first workload peaks in the existing owner artifact before increasing local concurrency. Follow the [capacity window and assembled test candidate](references/context.md#capacity-window-and-assembled-test-candidate) @@ -444,6 +451,13 @@ The designated integrator (parent or delegated lane owner) admits remote PRs thr including other campaigns. The lock covers participating local callers only. Read the live check queue; prepare locally when CI limits progress and repair existing PRs. One integrator owns shared-file joins. +Before costly qualification, that integrator assembles compatible source, version, Atlas and closure +edits for the selected delivery and reconciles the current base. Coordinate disjoint reporting or +closure merges with the owner before its final base reconciliation, or defer them until delivery when +needed to avoid invalidating that qualification. Do not freeze unrelated main-branch work by default +or wait for unready unrelated edits. A changed final candidate still needs its applicable required +checks and coherent validation; batching does not authorize publication or other protected effects. + For hosted waits use `tools/routine-delivery.py --watch-checks --watch-seconds N` with repo, PR and exact head (N 1–600). Retain raw records privately; consume material changes or terminal/deadline summaries. Unchanged polls need no model turn or polling agent. Watchers never deliver and own only direct query children; From cba6fb16cdc4a184373c252446a08d336014a13f Mon Sep 17 00:00:00 2001 From: EHotwagner Date: Sun, 18 Oct 2026 11:36:37 +0200 Subject: [PATCH 14/19] docs: reconcile passive capture knowledge and coherent 0.106 projections --- .agents/skills/atlas/assets/seed/catalog.json | 2 +- ...71539350feaaf92612761210cfc3ccdc55870.json | 1 + ...1f9dec047f8c384097cee01dd2e2db39e539f.json | 1 + .../skills/publishing-and-deployment/SKILL.md | 2 +- .claude/skills/atlas/assets/seed/catalog.json | 2 +- ...71539350feaaf92612761210cfc3ccdc55870.json | 1 + ...1f9dec047f8c384097cee01dd2e2db39e539f.json | 1 + .../skills/publishing-and-deployment/SKILL.md | 2 +- docs/architecture.md | 2 +- docs/atlas/catalog.json | 2 +- ...71539350feaaf92612761210cfc3ccdc55870.json | 1 + ...1f9dec047f8c384097cee01dd2e2db39e539f.json | 1 + docs/registry/compatibility.md | 2 +- .../roadmaps/utel-operational-completeness.md | 11 ++++++++-- registry/driver-skill-manifest.json | 20 ++++++++++++++----- registry/skills.yml | 2 +- 16 files changed, 38 insertions(+), 15 deletions(-) create mode 100644 .agents/skills/atlas/assets/seed/records/7a134e7f1822183ed1c0ded720971539350feaaf92612761210cfc3ccdc55870.json create mode 100644 .agents/skills/atlas/assets/seed/records/cad13b6653fd9f811e67d13c5f01f9dec047f8c384097cee01dd2e2db39e539f.json create mode 100644 .claude/skills/atlas/assets/seed/records/7a134e7f1822183ed1c0ded720971539350feaaf92612761210cfc3ccdc55870.json create mode 100644 .claude/skills/atlas/assets/seed/records/cad13b6653fd9f811e67d13c5f01f9dec047f8c384097cee01dd2e2db39e539f.json create mode 100644 docs/atlas/records/7a134e7f1822183ed1c0ded720971539350feaaf92612761210cfc3ccdc55870.json create mode 100644 docs/atlas/records/cad13b6653fd9f811e67d13c5f01f9dec047f8c384097cee01dd2e2db39e539f.json diff --git a/.agents/skills/atlas/assets/seed/catalog.json b/.agents/skills/atlas/assets/seed/catalog.json index 56a0d5fba..c63bdfe39 100644 --- a/.agents/skills/atlas/assets/seed/catalog.json +++ b/.agents/skills/atlas/assets/seed/catalog.json @@ -1 +1 @@ -{"records":["000ada42299601fba29016e5c0e0d4012876fb42670bb10fa0b1315477254ba4","00641d046d6869fdd0023ab3df99e0e67a6ea28f0dcb701f622b1cec8b3e07c6","026b08fb343aefe19177e95b759560d340d372def4b71acf613fefee3438ade2","0357495d23fac4fad210b6dd7ed7cc57dd33d107e1659a81f085cad78300797f","036c148f6d0e89858c9bf4cf380272ca6904bb4ca277a909fb71c47f5450cef7","04e404d89dca295564813149472b1de8e6c43357e2f6d91d169ded7600ed3a02","0509e5c6fdbd2dde0c0db8558647080560714804d00e4f9268342f2e84858a3d","06ad2c8aa0ff3b862edf3ba99e0e4e8801ee163709e66333cd06c3fc61232b05","0a6d7dc5b64970bfdadc9049ace95e8bc163fc421beea70129ff0eaa692c6d06","0ad4403c8f4078dbfa543310c69bd1dfc768e305987214ffc37d7b2600c4687c","0c22360d4653eb0f450e4d3d34564875f1660cfcb2d546095d98b3faa3967cbc","0da4d093b49c0a1f654b38008bb01195e816829279ca1989bd2448194e15361b","0e560af7d9dd2e0f2f588a74cd35512973747f20bdfe0bee0bc889105ea53dc9","0ea7107c2c8edaab3ff2bae32f63cfbef6903a51cdaff257278f757ed5ef429d","0eef4d717eb03f0906aa3be7336aa71f831726afabe8a56077b76f6e82fd08e1","11fe30832d93706c60efd836b09f35f049c4a715ad6144cf277ca240c5780704","1244d27db0cf5075353bcc622d0fb3b5ca6a7d08526e2c5754e8b745c250bf3f","155fe673b8ae12549c978e1bf1d5c43e360937fcf2135cdcd5aea6f6c771da44","1945f527afc3c2930ec4d7fa57ebb2ef7dd6321c0dd3ab9233c9963e9e613165","19d657b67672257ece127f3b957674b7fb4780843148db0a36a0b329c2a418ba","1a24f6ef0c08a898f309c1b925fc19b29526f913a61a1dfe4b1a4308ebdd97ac","1b5351b2dc647aba864e387168db5128435cb80da94fc42581cd60a05fc34b9a","1da011289116fe88fe92cb8f0e83ed7ccbbca251681d4e136c5a61c40364f8d3","1ec9445b242d2a2e149fe71c67bf13d8c0e4ebe5a6ed7b022656b9941973909d","1edc36731a9c76ad07d269d8b4fd84c8c956bb43d6f56de17d6208164856ffbe","20901b579f69cc97eb56b492938864667576e1c9bfacf13f8a529c4f6e543448","21338155cb4f52c49e5072c877771be67c75590d9b238ea025fba5209fd6e018","23af79bd1e7995fc8162ddc4d830318acb054bbfcc9c7d5cb141ec306da67386","24d4f2730d94d1b7f149771ef0e59192f4936d142b21f4a56b1a391e4514d38d","2591526ddabbea03fbdc38bf172bc54f42df9bc51eba7ad2b70d6e67215f08f1","26259abc7fe745f52e06f2aa2abb0e50f189bc7608065f04d5c669a0a99941cd","26290a0990d6dac0ce9448e05eb934210603356043dcf14a5d80585288e2aa92","26d6b31965013079d4db67a2c403e01f21e3c30ae65953400dbed92e289a0925","288daf614247c260cb673d8674e8b3874ccc4e269347836851f702d7ac8e2f7c","28abfaf6d50ca38af0b88aa50524200c17af9000da83ddbab3d8f9e06e020fa5","291d3db272eae084d34c04bc1305f2abb26a7e7acbc5515208469b46719a4ed1","2a38ddebfe3380232e35d5a24f9cb9f7c38abbc9c68add4ea5952c1e65d328d2","2c76ce93500601e281a41f5985fe4e3926fc8bc9d01ee687f14052cb553ad2d2","2d599c722a08306b98f2d833fb3e4a7acb9dea92e6a58820caa2f65c09803fb8","2ecd502add2d801eebed39411fadc9a80098ba9ce04a5f4b728a0e4e331232d6","2f7357367d921995f4c6fdaa693392adcd2df4860ef4d25c8dc47f7ddea8c755","2fb2ed7902a8e35dc36489a23245d963026d688008c92fed6fdc1f6bc27198a6","310bfb5b2d061bb733771e5cb7b3b7d25db43af5eda9f806169b7ef9330c2fe7","32f69a7b8997ae98b9305ee578145d795dbcd39ca4469bf2465e57a0295cda51","335683e33b94cb86b5e426b4faed200673bf850151191a08458136ceb164fd4e","3407ec53a884d3945d86a88d6b9a883419dd426e96b1108a8e6686f30397a629","34463778cf2d29e3896a65613cf9e3eb3e9f2d8946d17f12b609e70eec63d128","35da3938b72cf3520e126ad595157104b69ab748904c7b4e12f563d6b103172b","37c8908ea2a349cd3034018027160ad810b28ad1fc203a9a353971e1f7396b4c","37e39faee019bb041627510f1f02746ba9a85696417a083b438eb4974b72c2bf","38a75fd804821f4836f0a7ba8d41af3d3a3a5f5d7dcea68487009297824258d9","397476cf107b48e7a662264f8fea9f880231fd3d1e0401622650f214cfaa35c7","3ad8b0398ba6c354c9e31b7438b2515579fc0b1f17de4b35a914c862a3a11e3b","3b3c6cf083b12a840565e00458e2fd4ee8a61f97cda452703a6b13d7776b6c13","3b4af144afed3d52dd2e1f64e23bc25b3475eee5f7af3bde9886761b15c33dfd","3b5d82795e9f5d1992ab67e078fcf1108247ab9b6d1baeac944d3ec0294cec5d","3d0274f77576abdbdf442c8843e955e1bbc91e9f8cbfe3646b119337cdb13c96","3e2f66baa16c7ea936eba34720a55897438f60b343cbe8fda4eab1e5dde044eb","41c768ea17144c6ec225e9a65d4c3c127fdd7264dcba1a89aa17b20fd5d7e3ee","42aeb46fcc3d10b95e4067bc9cda875fa933b4102873f67c7bf1f8ca6799a598","4320b92712bc14dbe10b56f1cd3d1bdc093fc4be6016732839d0be4dd4d027d3","46cdf2c207f79d388001f6636dfb7a98bb2ba72b9d1c6df4938f0a27691e07a6","480f1ede18ae031b164d49d676feeb1090fb33932676ff52e1e2eb24e8d154cd","48797c44c92cb34fd9a57a08020b45c6920b2268dc8ad616c0f814a3710d5316","48d094622ada1806cb30335926007c1abc476b1f7b45a2e250c490afa25e847b","4a724a6a842a132c2185279513f341b79f9be93e42660f1255770eeae3b1323c","4c8c327dacf345e184042092e96ad3ea02ed4cece57dac5fa68ea52fbb5a6adf","4d5a44ba07fafeab823b54a21846269330ce35b4c190f3ddd5434bc8530d9b41","4da0a5be70e8af9c39623deac83822749482187f6a0fc3d186dcfddaa7111576","4f1e58fc658a4ceda181e2a7fa249305b09b573ffd68c2489f204f4957224957","4f2750b974c1404acb721ffc84cbd1d0756a24211dd6f6503c10ea74dbc45676","509ec9c08864b9dd0029f32ffeac85fbac863e2dad459994c65b7cb5264faffa","52049cc9cee43bb27229e6b3e983e02c6aa20dd7d153b13e3c74bc6d2b47cf92","5382c901d160ca2d79888d8acd7a690a5349826b5da486274b0800c9d7513f11","540879695d41205515aaabe5466971014cb43b960a26b8e5958e37fed63df762","5560616d1e72f0a539f9ebbfea3b7d195c1ef5622f97994af1963748d4f97533","556ee783d8e2e4ca50f656c095758be613983f904d998a6534fb155510114f21","55a4711e799294d06988ab4acf77eacd7d424123082bba3ec987dff0ae13999c","55ae095961d78a1514c4dd1e63d477c60179a8662571ab5a90abd3eb2b83eb10","56e7158313357bb145bd98c5f790e569be2203fb2601565a30091a597a7e7ff5","5962dd14d3923433cf723d698d1af19ac37a270b6e88445643fc56a646faab5b","5a2064cdf51026eed65457c05f34bec919b31d96d35c29498d298685965f0b5a","5b77bd6dfa81cc339e729e4195e258facbfeb64b9c680512f742e3fb1961fdd5","5c3527e43fe24c5aa171c6fa4a3de7fe5e78f2527aed0dd19cb21d154d43da21","5c79c77f00167ca140127b00f1a79e1ffac621e46fc461089594206a7df8d7cc","5d015880319af666943e68169ca906bf2f0c813d8bf2c5c0262aeb5a40366350","5f2a75b89983d1005a38afa2cabccc3a39f31989807120281d8505ffd564e0c6","5f4fa6dde5930fe1b42f805895f0f5fb135c2b3ff9830f2bd30ae7526a3295a1","630fdcff1f227b5baf5d10bd78ef0fde68791ac0cd8a15f65065f5cc4501b17b","63113617f2e4ee6b827a69bce6afb3949190a282f5feaaa9e2c9f82372623bb8","63544fa69b09916d52b305700eb9816305ff22b77162a44edd13897acea3a655","63a4394e689acf4a4762cfb4df691d05f923fdf592fd2f8ea41e6a54f98d1136","69ebfc7eb8427db3c5c59bdde652d0cb269426126f8540b1b58caa29ccf130e2","69edc4285578313d1dd2f914d69add075a7b354f7fba717606d1abe15292576b","6a34d9279cae58765d6ee4a980192c0e15f3ca217b9f1815861d472a281b3cf8","6c3c592efe9c684ada5661b8cc88a5c3f6e57c841db06b9e070687504cbf6236","6ce6d164c3e31463fb9e144fdf91413e55d077cfc4f25092bb02923fb538a84f","6e08a638e1e28020923effd4c65fc517dbe7b06100ff76cde74e427191503b84","6f3a7020233cd77cfe59eefec0a277f6dda323743c8d80e4e54a95cd3cbc23cf","6fccc6f0c5fa71c43211785dced8abd0f3295040eab56063f4e8d77f1c09b8ef","700cd21af9ed7e81900fad9d52de2fb11db48e64b038e4293168f85e5dd0e043","702d1dfa75e92a916a446429f474d4c296e6ea4e8c487995852d0525e8440659","704cf778db6086c3e282c81249fb0ef09c1d7c2043335ef74c7ecb69bb3e84ad","71ef1ed2d5e4bc7eebe7a73bb3e9423e5bc2f8319186380fe8b38334952d3b01","7256ba00af1cf759b95b7bf8ae3b9943f31349bd10a7652a26bb419b368d73a3","7369b339daca0fcf46ac7fe82d65ae95c75d7dbcaaae51209e6d90b6587a014e","73ec844fb3e2b9febd00ba37508b284fad141630f03cb9f74e36a195180f5054","7410de003c7b582e30470d1209eefc796a70c76fe8d61dd9ccfe01ecfa41310c","76bf5a9c126db6eb466287a7c0d823327ee9882a70eaaa6efb03d169b5dba808","781a64598efb2a11156f07271ba1c14c4f6b3d73aa2943b26eae02063df7af70","799abc1e8d381b8d97349479139985e383bb49179b5a80f39807cb35a3ee78ce","79faec494bdd6d098c9d2a9d8559f822938c6b2104188db95321d89e7a732979","7a032dbf0351aa32c77c8d187f7eb697500ff186c88c5946ecc15adc972246a6","7aa52373f2721dd76fc8eeb3d6061794f27ea8d11e96bcb1ff25a97994a77d5c","7ad4ef4b8d3221758a9e7f9577750ee03f6cba11c8eae8bf25f74a3131bd21a2","7baa35131ece7ed9860607157d2531d4d70a061bdc9bb9876e20328f127cec53","7cbf970a11bdb91a40e248eee97ef789205910ebc913349698fc75ed35e82fdf","7d6133667f81aa66a98755d253ea43301b45ada338225df034d2ffdfc79829e7","7e89b59b456dde4bbbdbf8079665bd82c51d8e500018472981c15618b3893959","7ead0c68ffa0ced241af74dde58b3831343dff3f7eaab64bddb9954545b7ba12","7f8188b57ad3b0c28210c95954e5623376a4262dd5e75f002700c6094b8d6b6c","7f91dfc2ea1a3131c4090375db0f489c2a572e245ade6cda4ebd440446d6d60e","7fcb8cba3ed0ee9c342947aa88f0f699bb4f5c23244d21c6c739c9b66d7c6101","800060d7b4934508d0277f90a464e3112fd2fc99af4ef23825d09b0ff53f91c3","800a802a4ce9e597a102f0a566535c1f9f7adfc60c41af6bd2db4fb7fe3c0d0e","820c12fcbded9048a363b9e0ebbc48b24f85fd4a68131b5dfc1b19057bf09ddb","82c419e5de083e423330432c9d45c744043d1bccd8eeccb41e3014ce9ae3c32f","8343a4211a4d0ffdb320d5a4305174d85bb707d15dad978f6436297d022daa11","83a97b9ebb29f5cd014ef5e178970a601ee92c44678f05d1860b383c5f63b79d","85a962a7c23c14dff8d683e738b53f422221697b213cafeb616d3a172a6c4223","8629fddeb4f273b35df69d4d28923adc14eff59d919b1a495d1a68818137c561","872ab2b2d65fe685b91e355f5af051c85b79569ece16448160d01fef38039624","87f2b3634baa504f2ed9508c6cf6a47bbfb36214a177eb13d70d6a987706818c","88b615ef6a31bd9958e98b8ea522f49f0360ccac5d9fa8deb9e3ef3fe3147d9d","89cafbb20d6029656266d8cb0f85103fa519c8032598282fea58c94cc59c4125","89f2105745b3a7cfd30e7d7c598d6c8fdde0a599f30fd0db7382cba50412445e","8b3eec010d1eae43a28c88434f2410a751f790a9d6ec4a08e75e68c171629ab2","8cecfa09651c40be4d7c11c117c80e1911dc75bf6f1cc34be64706823cc024c3","8d250acd40c8a24ba0d51cc73e65bba6856509b5fbf4c7d7a435897a01c6e764","8df1420c27503370db9382f68a0af8d2b4d56f9dbc94b24ffae450a905083a79","8e7371228a726f381fb811d1d812c39917788a3df7e53dba1a3c364e755a0c03","8fae27ba5117e202afbd523b249fc454912571900fc909f5419b8ac96c773c44","902b958b4db7d8d8bf73a82a8aa86e5485b39477047c8ad60175d118fe31d987","91c9ced5e9ab8da897b7f69166a7d0bade5c58d511b42d60d5430d536da45d09","941f70c384905ab77cb9a88e2671301117e4df553da6fc7a09210710deb9b6ca","9442788fa51227044803f1d3efdfc1c2b2da372871a85f0f7a6bb3596a5c003f","947a1cdd43831936480167169d30334f818bb5d882650a3547827c05204af111","971f59cc197732d0c0b6b8aabbbefca4550fb8fb04f8522bdb4257c05a28848a","98a097d6ebb754334250dfd3ccc5f3dfaf5966524758cbfc9e10adf4a0229693","98c7e4bc2f05e9b4ca703db4a02347db7355a44f04e3a4003e26c46a56bded2c","9944d1a9674e555a41d31d069d136461eb06dd4052d40f2e4ea4368dd978e01b","9bbd03293bf53e9db51401d157b3eb2aa51e9c70449350e98b9a0a3fc9a684ce","9cf90b3aa59f3ca0e40fd9e1fec9703428752d63bded6b091d28f614c9ba99ae","9eb67ea41c5bcb9557ba51bbbd1b321a78f16335cadebbed848d8e6c1fc68bab","a0ff0d0bb3a3c801b637d091293f2eeaac68e934274e4116d298ba60ec3461cc","a1baa1f699fd4ce19e8ef6cdfe346e1b0be63e16d5c5cd5feddcccb16a62f269","a3c84d76be9d891812e795dd46470c2978dceeff928d729c0d5dd6def599923b","a64e8aee389ae696d0d4b045c0153092113fa522ed5a0fd9b5658b8418db4ded","a6c531ed9bbafabfdd649f3030daf2f24461163aaf99dc73bb24dddb77bbcb90","a7ff7302e668dcea1cd1db2241ff95c0d73534539bd03fdefebbfb57f60d3849","a8b4a33078335d2811bffb78eee49aab5fcb31597dae366d43e20c7f7800994b","a91a47fb4fa5c1b1a834fa602030e435ad641240e6ceeb99eeeab7341ca09dec","a91c8a1431a4120667cd523cf56bac004794fc5b8b24275ad2f9c8a15c75fba1","aa131e74e695292adab9f57b3ccc5a503a836dd4b95a3b2b107c69f35dba3637","acd7884bca46ea9422503cead985691da05cca25bd5ed52a199783cae7b8b01f","ae69fe306bf5db346ddfa4367cda24c95e44213baca27b0ee7d7167bcdd85af6","ae8c200dbcea29f43b29974cc247d70647c80d5d76385396f1c82ee9f669e2f1","aec13a075b84253397fb97e1c93a23e1aaee6d6bff2a9161bfd00a5b1d7611de","b09355a97e3aef396f681943b37a404a98fccc6bcb97781eddb2fc000d1d985d","b0ecfca0d114bae34ffa62ac3ea05159a4415fc6eb73ab1fcc4d79f657268f19","b25c41f19ba40e646fd9b6f82051ee4c38985539e445b26bd628eae98537df53","b262187aa66e8a97083bf7f79b91595bf7a4077abe7f8be5b00b4998f4579d20","b4091f93c3d96e36b0708f5dcd46e0e7a0a48f098036ccef6164e4a6429ed94c","b4093c67a9195ee7d28d2575e967ac80057b92339489c244243c7c504c669ff0","b44352445272089cf90967d4d413cf7009bed0ac19f3fa95cb831d5ebad081c3","b4ce73bea5219f1b27bffb36c6a9dee14447a710a8938db807770083db4552ac","b5102ef50e7d4ed1925af5a8b45192e737df02fafb75d7065995a2bb93d2e8e1","b5428b5775526a00645566822530fb969b82247ba83f2c80c06d34151e1f9061","b6cf3b02f36e0efa93b04667cdc5701340033a09e41a7196277cf6756999a666","b77c6669bcd54e0fa949faf2f7205f2631acfbc1ccf79f93f8dab5c5717f0e93","b7ffd6cddb12384224772e8de79aec89d8f4bca966a3c2a05763889f92a6db5c","b8abe10a2a92bf537a49e8dee92baf8de3ed591848a1b25151dab0d7ab3134e5","b96cea09313d481dfff1ed1a2c552ea29e8fe68f52139458996a4e36157748d2","b96f9beb6d6d8fbf88c4b8b2b807a362f2640479cab6173cf64c7710817785a0","b9ad2510d8249ec4c8e7fd8b2471727aa1bd0ce8f3dde78e545fb2f8f2985a1d","ba7d7464da8e13722232c8f86273774054693681becc450a68aea21a5a0e9b91","ba87e5d43ddb10937bb17941f055f80a223d0981fbba44107aeec8530e3a7774","bac3431138e986d6426c1e81bdfe0a968394896c0751cbbcc8f36002fd0ed069","bb230236c4ab6353afb4147014c93204d3d1eb8a6d18558075df5fe79ed7f392","bd714f38c881208f1190ad714bf8fa5aa63adf302bdaa8ad8810ff279e43459e","be75cc1ee935f783be39978de91ae196c16141d4096e16eb6d07f59583296b4b","be8c3cb2d8d67e63c8b069920b74c6272922febbc6a0a2c4a0072a7a213681d2","beed0f36d9b1b9a20bfbf89c96862482b8d5b9d4284bc89539efe9c9b11f000d","bfd21b5c8eb26e9d475868bb30d66ee08f20876e9df5cd06aa8fec01ffe666df","bfe97e65f2cbe6bcd0f14ff57ea4dc1dedb2e5f0db92d04d0982cf1932ac1c3e","c112d36ba38c362da1c022945db5b6bbdc3014685ca9bb7d940f5086f00a675c","c23cf45c1dcb748145d87f5c173dd3c8becaf9e3f6fdcb3e2ca91d6726b0842a","c29b8d250a7b5e73f4ef675329da2251b8de032501e4836445b6aafd90c645fa","c329c9df0dae8a036da9be440432d045be3ee13cf5664cfa6ccf11576ed11acb","c4600cd5358b5798a075beb54539d952f200def1c9a573bd237c795fd33ba36f","c6752cc3c7ad06d1e9f127365f078919ac46b77f8a8fe413650094d914838ec3","c6867ec30530fd3feca89a4e968522f783b636b165ef74f288c42dd50bd51a3d","c6bfbb004af355e96ed5b4c8c9b8b7a96d1c08d24bcde7c666728eb9497d6d71","c8bd340e6fc7fa3e97415f7ad4c22c51d88c6e77f782c12923e841c04d3f882b","cc24c3770587f2421514fa399d2617201752bdca145ac39058de91d45d3d19c1","cd2da00f6f1bad8fb7c1b87cff80e122eb017e44a471cdea769efc67db369038","ce887fb65b6977a2046e7583d704863624e55909ebcc9c3ed065b3d13079a410","cf9223c369b6fb7baa52f301f904352ba8e8d5e4c2a06f70de6ef1cf76fe1b84","cfc3b5044af37ae7485fba8067dcb22b2438bdaa6e3a30c22ce0f9e2c00aa597","d0481d9b6111ab4afba0462e88970b863284807ff44ca97364c84952e3f88583","d0973a1aca6a118375b466d6e91821f8450110fdf042ac848ee16912012d2b0f","d0df3068db679e24d9487ee09a6462ac5cf3df30f46ee466b66feb6dd5ff71e2","d227e0a73e3c5452bc5ab41ea2c695dfc0ff9b0c1c81e59ab3173f796a4157cf","d2cba4dbbfe3d026f825a8b470a2f6011f9b8e245cf042ae8889afbb17dac6b2","d2e4c515093f8a2aa824c8b542a016e5c321065f4525931b2fac4f8af2fe52c6","d31e8aa21d1498f2d4a07c4cc89ea6f5a6d3ce54d334dbff230e0f55db35c85e","d37de74aadd5916eeae243decf347821c4e946356b9f70471658638ac3092f91","d49d02cad8bbfeac607457b08aac6068916ef45d8f6c980279d6e654407cc7be","d4f51c31a454d9abac29457cbbc21e1b5767c0eac1b37c41ee787a3efb05c80f","d5c084e12da4a5111487c166b879042a21a056f761ee22d9237cb4f65f366341","d6077d547aa21ea10a9bdf6c752b8d1a0a6382b4b43a0fdf790f245e66a609fc","d67e8c1aaab1ce6ec1755599ecde153c47c6b90dd4c301663abe9057bc31af57","d6abcc1484c3df45bde915abf48324af1e995c3266a3c6c069e98e94c8d9a4d7","d8ca8e025e226ad6bdd32a6a9fceae2982b0413a0ad09314558b54bdc724bf99","d8d03142030c11a0aa1012102fce2b202baf88e424a1236832937e87450dc579","d9823dfddf6c507ec030fce4bd2d98fbda18e595c2ebc563574d9196cc7a5e33","d9b0972f3406075b860ba7cd2e71d4492c826960319b10389c2c2820e2981254","da37a61fab07ec8856b725854e4064f55a59149aa69cad1bcbf89ec478b9f578","dad01e5bfb13a6c4419f4d24fa8dbb424e93a1c4be656b0e5dd48ac546e0a0d9","db21a75b4fa6165f75268963474f3262124795d816ba80f685bab2c6eaedb028","dd97ab52fd89f42352c595ce137684cc519c473fa17969e8a6adcde7322a4748","dda0a34d6704887eb36bbc0173334b49d755cac8cea3bbd17bfa972f04183dd4","ddbda9408727a19a4a55d516bed99331edf67d8301de9c78564716465c949619","e0288c94ca9c16a6de217e6baeed720fcf83e401bec45bd15ca47ba8fc9b44dd","e1667469384ec775a3df665679cb3fef057dc84dcb18ed8db8b9c5723835968a","e16c328504278cfe520d6d99990f2a4370cc48159aba86694d0f7598fd4b0611","e24df071f5325bb3a5b20f355143556bc7712535ee8b6ce4c426598f06fd2448","e28d8e6b71264d0bfab853e63178f2c151367cce0dbd16125596ff3604b6658d","e2c734504d211580b4e6674eb1c7d31fb6fb730c037210c34c980a96f9098269","e3f19c383354cdf45311f92f00b90fed25dfba7e9892ab2f5f3aa4885876b75f","e409fbfe439455330c0fe003de860e30f7093cc3cc83a32f886c9b539a29f60b","e6300ee8e6c2c4ce6d7ab02b7b06fd1cabe3c5c52b99a6ea3ea8b5acd5092e0b","e734d068446591aba283d136c21b4fb0209f91352cb4fc6589bd651cdbfec163","e7a333109a7aaec2b71048868500c15e721900628eb48790dfeaa1fd4c2dabc3","e7c9175fbfd9fd84bed95d552bc0a439b07a233c3e91fb39ae2f23197ee53f1b","ea1b8a251ecc1fd96697d0c602d3e14ec46383d27bb9485a0326cea5576ffacb","ea311dca2ef14e02b9aae563bb28dc737b04b7f01c1ceb2be3d92007d2c74ac6","ea8e5b79bbe5329ae8437677c8316f2f9fd75bb1d40c88308c269140a7e564c7","eb996138bc91c0ee63bafe1ba10b130ff5a2fc82aa4918296222e0a831a569fe","eba6e8e5a12a86f17fade41bef365aa95491c469e18aa91aef64908a4263c905","edc160a11c07dda8072748b66db7f27b6cd8efbd1faa3f6c826a0fe445859c17","edfcbe4773eac1fe2964179a4ad21294efede89568f2efd8e283ac18bc5693b1","f0f90dee84db760cc1bb0f6e6983d4de0e3d5d9f4adf7b2b52f0d3dbe6d585a4","f1d4a6e98f41ab3f6cfd67cddeab9d0ed287b92cb3dbe575e3ce61925510a792","f21c3a9267110e469f224ac7eb76ca5bb084fc90df014f1ca6791d5770483944","f379a1b9e29aa7fc25c4c0c897eaa3c0e90d66a201a0ade8cbf523a5cdc8cf50","f3e04891c79b604f9235f438adfa49ee27db43d25c7be0d1cc06ae53b8f6d2d8","f46904e701174fe2850798d9e1b077bdac42fcac01dbc385298da01118c82aa6","f53265f53af0b0856911ab08b373736964d0c443e8ba61d7f1d45f5e5b04edf3","f686173d310f41e26e3fe8a7c1dbf4313e4d793323335348badbcf4633f5d699","f704c9c9e2cab1ed44578f48d161320b5fb4384ecdd8b40a5e22c4078a8594da","f89156489d35f9992d5971a52a6e03a7d7f095e15c2c782e85efb1408a2bd6be","f99ef6fa3c9c6bf572ec69eb6eeea9f88ce6590d3a5565bec62b001b6f2a376a","fa2dfc22b4fdbcf402a822e8dd376925655d997a0f96284a60f10665ba3581ba","fa3df5f8349aec4805bbcd279b88697def63f2462d8ada0b5fe1d9983d9a6daa","fa6b97cbca1d4f09662e706293b0aec1eb76b8e2277441f54ab6c548b5423236","faac0c3fa7cdf67b452d407e9a1db5cbe1e9140ecfe300200b0b0a6279c97c66","fbc8b53b5c6f3727c084e5e0429e410a3fed5a17e1a0144692fd196d9836a4bb","fd04d7588bb9e6ca0a8b65ed0c9635082a9ee5f46b2d1b5b25866a072236c1fc","fd60f2a432086c6fc4a4c39d8d2d6edf5794c763c05a6401db2bb5fa2c601775","ff532716738e2fc716c10797d9717f324cca3a1234320a84a73a0b89569f11ab","ffd0fe3449e449c7b9fcdcc7e2c1ffb677e57ad935a252de88a0122d437efa67","ffde5c700732beac27a9b5162213d387422ce199400e56d9cefe550005b6a542"],"schema":"fsgg.atlas/1"} +{"records":["000ada42299601fba29016e5c0e0d4012876fb42670bb10fa0b1315477254ba4","00641d046d6869fdd0023ab3df99e0e67a6ea28f0dcb701f622b1cec8b3e07c6","026b08fb343aefe19177e95b759560d340d372def4b71acf613fefee3438ade2","0357495d23fac4fad210b6dd7ed7cc57dd33d107e1659a81f085cad78300797f","036c148f6d0e89858c9bf4cf380272ca6904bb4ca277a909fb71c47f5450cef7","04e404d89dca295564813149472b1de8e6c43357e2f6d91d169ded7600ed3a02","0509e5c6fdbd2dde0c0db8558647080560714804d00e4f9268342f2e84858a3d","06ad2c8aa0ff3b862edf3ba99e0e4e8801ee163709e66333cd06c3fc61232b05","0a6d7dc5b64970bfdadc9049ace95e8bc163fc421beea70129ff0eaa692c6d06","0ad4403c8f4078dbfa543310c69bd1dfc768e305987214ffc37d7b2600c4687c","0c22360d4653eb0f450e4d3d34564875f1660cfcb2d546095d98b3faa3967cbc","0da4d093b49c0a1f654b38008bb01195e816829279ca1989bd2448194e15361b","0e560af7d9dd2e0f2f588a74cd35512973747f20bdfe0bee0bc889105ea53dc9","0ea7107c2c8edaab3ff2bae32f63cfbef6903a51cdaff257278f757ed5ef429d","0eef4d717eb03f0906aa3be7336aa71f831726afabe8a56077b76f6e82fd08e1","11fe30832d93706c60efd836b09f35f049c4a715ad6144cf277ca240c5780704","1244d27db0cf5075353bcc622d0fb3b5ca6a7d08526e2c5754e8b745c250bf3f","155fe673b8ae12549c978e1bf1d5c43e360937fcf2135cdcd5aea6f6c771da44","1945f527afc3c2930ec4d7fa57ebb2ef7dd6321c0dd3ab9233c9963e9e613165","19d657b67672257ece127f3b957674b7fb4780843148db0a36a0b329c2a418ba","1a24f6ef0c08a898f309c1b925fc19b29526f913a61a1dfe4b1a4308ebdd97ac","1b5351b2dc647aba864e387168db5128435cb80da94fc42581cd60a05fc34b9a","1da011289116fe88fe92cb8f0e83ed7ccbbca251681d4e136c5a61c40364f8d3","1ec9445b242d2a2e149fe71c67bf13d8c0e4ebe5a6ed7b022656b9941973909d","1edc36731a9c76ad07d269d8b4fd84c8c956bb43d6f56de17d6208164856ffbe","20901b579f69cc97eb56b492938864667576e1c9bfacf13f8a529c4f6e543448","21338155cb4f52c49e5072c877771be67c75590d9b238ea025fba5209fd6e018","23af79bd1e7995fc8162ddc4d830318acb054bbfcc9c7d5cb141ec306da67386","24d4f2730d94d1b7f149771ef0e59192f4936d142b21f4a56b1a391e4514d38d","2591526ddabbea03fbdc38bf172bc54f42df9bc51eba7ad2b70d6e67215f08f1","26259abc7fe745f52e06f2aa2abb0e50f189bc7608065f04d5c669a0a99941cd","26290a0990d6dac0ce9448e05eb934210603356043dcf14a5d80585288e2aa92","26d6b31965013079d4db67a2c403e01f21e3c30ae65953400dbed92e289a0925","288daf614247c260cb673d8674e8b3874ccc4e269347836851f702d7ac8e2f7c","28abfaf6d50ca38af0b88aa50524200c17af9000da83ddbab3d8f9e06e020fa5","291d3db272eae084d34c04bc1305f2abb26a7e7acbc5515208469b46719a4ed1","2a38ddebfe3380232e35d5a24f9cb9f7c38abbc9c68add4ea5952c1e65d328d2","2c76ce93500601e281a41f5985fe4e3926fc8bc9d01ee687f14052cb553ad2d2","2d599c722a08306b98f2d833fb3e4a7acb9dea92e6a58820caa2f65c09803fb8","2ecd502add2d801eebed39411fadc9a80098ba9ce04a5f4b728a0e4e331232d6","2f7357367d921995f4c6fdaa693392adcd2df4860ef4d25c8dc47f7ddea8c755","2fb2ed7902a8e35dc36489a23245d963026d688008c92fed6fdc1f6bc27198a6","310bfb5b2d061bb733771e5cb7b3b7d25db43af5eda9f806169b7ef9330c2fe7","32f69a7b8997ae98b9305ee578145d795dbcd39ca4469bf2465e57a0295cda51","335683e33b94cb86b5e426b4faed200673bf850151191a08458136ceb164fd4e","3407ec53a884d3945d86a88d6b9a883419dd426e96b1108a8e6686f30397a629","34463778cf2d29e3896a65613cf9e3eb3e9f2d8946d17f12b609e70eec63d128","35da3938b72cf3520e126ad595157104b69ab748904c7b4e12f563d6b103172b","37c8908ea2a349cd3034018027160ad810b28ad1fc203a9a353971e1f7396b4c","37e39faee019bb041627510f1f02746ba9a85696417a083b438eb4974b72c2bf","38a75fd804821f4836f0a7ba8d41af3d3a3a5f5d7dcea68487009297824258d9","397476cf107b48e7a662264f8fea9f880231fd3d1e0401622650f214cfaa35c7","3ad8b0398ba6c354c9e31b7438b2515579fc0b1f17de4b35a914c862a3a11e3b","3b3c6cf083b12a840565e00458e2fd4ee8a61f97cda452703a6b13d7776b6c13","3b4af144afed3d52dd2e1f64e23bc25b3475eee5f7af3bde9886761b15c33dfd","3b5d82795e9f5d1992ab67e078fcf1108247ab9b6d1baeac944d3ec0294cec5d","3d0274f77576abdbdf442c8843e955e1bbc91e9f8cbfe3646b119337cdb13c96","3e2f66baa16c7ea936eba34720a55897438f60b343cbe8fda4eab1e5dde044eb","41c768ea17144c6ec225e9a65d4c3c127fdd7264dcba1a89aa17b20fd5d7e3ee","42aeb46fcc3d10b95e4067bc9cda875fa933b4102873f67c7bf1f8ca6799a598","4320b92712bc14dbe10b56f1cd3d1bdc093fc4be6016732839d0be4dd4d027d3","46cdf2c207f79d388001f6636dfb7a98bb2ba72b9d1c6df4938f0a27691e07a6","480f1ede18ae031b164d49d676feeb1090fb33932676ff52e1e2eb24e8d154cd","48797c44c92cb34fd9a57a08020b45c6920b2268dc8ad616c0f814a3710d5316","48d094622ada1806cb30335926007c1abc476b1f7b45a2e250c490afa25e847b","4a724a6a842a132c2185279513f341b79f9be93e42660f1255770eeae3b1323c","4c8c327dacf345e184042092e96ad3ea02ed4cece57dac5fa68ea52fbb5a6adf","4d5a44ba07fafeab823b54a21846269330ce35b4c190f3ddd5434bc8530d9b41","4da0a5be70e8af9c39623deac83822749482187f6a0fc3d186dcfddaa7111576","4f1e58fc658a4ceda181e2a7fa249305b09b573ffd68c2489f204f4957224957","4f2750b974c1404acb721ffc84cbd1d0756a24211dd6f6503c10ea74dbc45676","509ec9c08864b9dd0029f32ffeac85fbac863e2dad459994c65b7cb5264faffa","52049cc9cee43bb27229e6b3e983e02c6aa20dd7d153b13e3c74bc6d2b47cf92","5382c901d160ca2d79888d8acd7a690a5349826b5da486274b0800c9d7513f11","540879695d41205515aaabe5466971014cb43b960a26b8e5958e37fed63df762","5560616d1e72f0a539f9ebbfea3b7d195c1ef5622f97994af1963748d4f97533","556ee783d8e2e4ca50f656c095758be613983f904d998a6534fb155510114f21","55a4711e799294d06988ab4acf77eacd7d424123082bba3ec987dff0ae13999c","55ae095961d78a1514c4dd1e63d477c60179a8662571ab5a90abd3eb2b83eb10","56e7158313357bb145bd98c5f790e569be2203fb2601565a30091a597a7e7ff5","5962dd14d3923433cf723d698d1af19ac37a270b6e88445643fc56a646faab5b","5a2064cdf51026eed65457c05f34bec919b31d96d35c29498d298685965f0b5a","5b77bd6dfa81cc339e729e4195e258facbfeb64b9c680512f742e3fb1961fdd5","5c3527e43fe24c5aa171c6fa4a3de7fe5e78f2527aed0dd19cb21d154d43da21","5c79c77f00167ca140127b00f1a79e1ffac621e46fc461089594206a7df8d7cc","5d015880319af666943e68169ca906bf2f0c813d8bf2c5c0262aeb5a40366350","5f2a75b89983d1005a38afa2cabccc3a39f31989807120281d8505ffd564e0c6","5f4fa6dde5930fe1b42f805895f0f5fb135c2b3ff9830f2bd30ae7526a3295a1","630fdcff1f227b5baf5d10bd78ef0fde68791ac0cd8a15f65065f5cc4501b17b","63113617f2e4ee6b827a69bce6afb3949190a282f5feaaa9e2c9f82372623bb8","63544fa69b09916d52b305700eb9816305ff22b77162a44edd13897acea3a655","63a4394e689acf4a4762cfb4df691d05f923fdf592fd2f8ea41e6a54f98d1136","69ebfc7eb8427db3c5c59bdde652d0cb269426126f8540b1b58caa29ccf130e2","69edc4285578313d1dd2f914d69add075a7b354f7fba717606d1abe15292576b","6a34d9279cae58765d6ee4a980192c0e15f3ca217b9f1815861d472a281b3cf8","6c3c592efe9c684ada5661b8cc88a5c3f6e57c841db06b9e070687504cbf6236","6ce6d164c3e31463fb9e144fdf91413e55d077cfc4f25092bb02923fb538a84f","6e08a638e1e28020923effd4c65fc517dbe7b06100ff76cde74e427191503b84","6f3a7020233cd77cfe59eefec0a277f6dda323743c8d80e4e54a95cd3cbc23cf","6fccc6f0c5fa71c43211785dced8abd0f3295040eab56063f4e8d77f1c09b8ef","700cd21af9ed7e81900fad9d52de2fb11db48e64b038e4293168f85e5dd0e043","702d1dfa75e92a916a446429f474d4c296e6ea4e8c487995852d0525e8440659","704cf778db6086c3e282c81249fb0ef09c1d7c2043335ef74c7ecb69bb3e84ad","71ef1ed2d5e4bc7eebe7a73bb3e9423e5bc2f8319186380fe8b38334952d3b01","7256ba00af1cf759b95b7bf8ae3b9943f31349bd10a7652a26bb419b368d73a3","7369b339daca0fcf46ac7fe82d65ae95c75d7dbcaaae51209e6d90b6587a014e","73ec844fb3e2b9febd00ba37508b284fad141630f03cb9f74e36a195180f5054","7410de003c7b582e30470d1209eefc796a70c76fe8d61dd9ccfe01ecfa41310c","76bf5a9c126db6eb466287a7c0d823327ee9882a70eaaa6efb03d169b5dba808","781a64598efb2a11156f07271ba1c14c4f6b3d73aa2943b26eae02063df7af70","799abc1e8d381b8d97349479139985e383bb49179b5a80f39807cb35a3ee78ce","79faec494bdd6d098c9d2a9d8559f822938c6b2104188db95321d89e7a732979","7a032dbf0351aa32c77c8d187f7eb697500ff186c88c5946ecc15adc972246a6","7a134e7f1822183ed1c0ded720971539350feaaf92612761210cfc3ccdc55870","7aa52373f2721dd76fc8eeb3d6061794f27ea8d11e96bcb1ff25a97994a77d5c","7ad4ef4b8d3221758a9e7f9577750ee03f6cba11c8eae8bf25f74a3131bd21a2","7baa35131ece7ed9860607157d2531d4d70a061bdc9bb9876e20328f127cec53","7cbf970a11bdb91a40e248eee97ef789205910ebc913349698fc75ed35e82fdf","7d6133667f81aa66a98755d253ea43301b45ada338225df034d2ffdfc79829e7","7e89b59b456dde4bbbdbf8079665bd82c51d8e500018472981c15618b3893959","7ead0c68ffa0ced241af74dde58b3831343dff3f7eaab64bddb9954545b7ba12","7f8188b57ad3b0c28210c95954e5623376a4262dd5e75f002700c6094b8d6b6c","7f91dfc2ea1a3131c4090375db0f489c2a572e245ade6cda4ebd440446d6d60e","7fcb8cba3ed0ee9c342947aa88f0f699bb4f5c23244d21c6c739c9b66d7c6101","800060d7b4934508d0277f90a464e3112fd2fc99af4ef23825d09b0ff53f91c3","800a802a4ce9e597a102f0a566535c1f9f7adfc60c41af6bd2db4fb7fe3c0d0e","820c12fcbded9048a363b9e0ebbc48b24f85fd4a68131b5dfc1b19057bf09ddb","82c419e5de083e423330432c9d45c744043d1bccd8eeccb41e3014ce9ae3c32f","8343a4211a4d0ffdb320d5a4305174d85bb707d15dad978f6436297d022daa11","83a97b9ebb29f5cd014ef5e178970a601ee92c44678f05d1860b383c5f63b79d","85a962a7c23c14dff8d683e738b53f422221697b213cafeb616d3a172a6c4223","8629fddeb4f273b35df69d4d28923adc14eff59d919b1a495d1a68818137c561","872ab2b2d65fe685b91e355f5af051c85b79569ece16448160d01fef38039624","87f2b3634baa504f2ed9508c6cf6a47bbfb36214a177eb13d70d6a987706818c","88b615ef6a31bd9958e98b8ea522f49f0360ccac5d9fa8deb9e3ef3fe3147d9d","89cafbb20d6029656266d8cb0f85103fa519c8032598282fea58c94cc59c4125","89f2105745b3a7cfd30e7d7c598d6c8fdde0a599f30fd0db7382cba50412445e","8b3eec010d1eae43a28c88434f2410a751f790a9d6ec4a08e75e68c171629ab2","8cecfa09651c40be4d7c11c117c80e1911dc75bf6f1cc34be64706823cc024c3","8d250acd40c8a24ba0d51cc73e65bba6856509b5fbf4c7d7a435897a01c6e764","8df1420c27503370db9382f68a0af8d2b4d56f9dbc94b24ffae450a905083a79","8e7371228a726f381fb811d1d812c39917788a3df7e53dba1a3c364e755a0c03","8fae27ba5117e202afbd523b249fc454912571900fc909f5419b8ac96c773c44","902b958b4db7d8d8bf73a82a8aa86e5485b39477047c8ad60175d118fe31d987","91c9ced5e9ab8da897b7f69166a7d0bade5c58d511b42d60d5430d536da45d09","941f70c384905ab77cb9a88e2671301117e4df553da6fc7a09210710deb9b6ca","9442788fa51227044803f1d3efdfc1c2b2da372871a85f0f7a6bb3596a5c003f","947a1cdd43831936480167169d30334f818bb5d882650a3547827c05204af111","971f59cc197732d0c0b6b8aabbbefca4550fb8fb04f8522bdb4257c05a28848a","98a097d6ebb754334250dfd3ccc5f3dfaf5966524758cbfc9e10adf4a0229693","98c7e4bc2f05e9b4ca703db4a02347db7355a44f04e3a4003e26c46a56bded2c","9944d1a9674e555a41d31d069d136461eb06dd4052d40f2e4ea4368dd978e01b","9bbd03293bf53e9db51401d157b3eb2aa51e9c70449350e98b9a0a3fc9a684ce","9cf90b3aa59f3ca0e40fd9e1fec9703428752d63bded6b091d28f614c9ba99ae","9eb67ea41c5bcb9557ba51bbbd1b321a78f16335cadebbed848d8e6c1fc68bab","a0ff0d0bb3a3c801b637d091293f2eeaac68e934274e4116d298ba60ec3461cc","a1baa1f699fd4ce19e8ef6cdfe346e1b0be63e16d5c5cd5feddcccb16a62f269","a3c84d76be9d891812e795dd46470c2978dceeff928d729c0d5dd6def599923b","a64e8aee389ae696d0d4b045c0153092113fa522ed5a0fd9b5658b8418db4ded","a6c531ed9bbafabfdd649f3030daf2f24461163aaf99dc73bb24dddb77bbcb90","a7ff7302e668dcea1cd1db2241ff95c0d73534539bd03fdefebbfb57f60d3849","a8b4a33078335d2811bffb78eee49aab5fcb31597dae366d43e20c7f7800994b","a91a47fb4fa5c1b1a834fa602030e435ad641240e6ceeb99eeeab7341ca09dec","a91c8a1431a4120667cd523cf56bac004794fc5b8b24275ad2f9c8a15c75fba1","aa131e74e695292adab9f57b3ccc5a503a836dd4b95a3b2b107c69f35dba3637","acd7884bca46ea9422503cead985691da05cca25bd5ed52a199783cae7b8b01f","ae69fe306bf5db346ddfa4367cda24c95e44213baca27b0ee7d7167bcdd85af6","ae8c200dbcea29f43b29974cc247d70647c80d5d76385396f1c82ee9f669e2f1","aec13a075b84253397fb97e1c93a23e1aaee6d6bff2a9161bfd00a5b1d7611de","b09355a97e3aef396f681943b37a404a98fccc6bcb97781eddb2fc000d1d985d","b0ecfca0d114bae34ffa62ac3ea05159a4415fc6eb73ab1fcc4d79f657268f19","b25c41f19ba40e646fd9b6f82051ee4c38985539e445b26bd628eae98537df53","b262187aa66e8a97083bf7f79b91595bf7a4077abe7f8be5b00b4998f4579d20","b4091f93c3d96e36b0708f5dcd46e0e7a0a48f098036ccef6164e4a6429ed94c","b4093c67a9195ee7d28d2575e967ac80057b92339489c244243c7c504c669ff0","b44352445272089cf90967d4d413cf7009bed0ac19f3fa95cb831d5ebad081c3","b4ce73bea5219f1b27bffb36c6a9dee14447a710a8938db807770083db4552ac","b5102ef50e7d4ed1925af5a8b45192e737df02fafb75d7065995a2bb93d2e8e1","b5428b5775526a00645566822530fb969b82247ba83f2c80c06d34151e1f9061","b6cf3b02f36e0efa93b04667cdc5701340033a09e41a7196277cf6756999a666","b77c6669bcd54e0fa949faf2f7205f2631acfbc1ccf79f93f8dab5c5717f0e93","b7ffd6cddb12384224772e8de79aec89d8f4bca966a3c2a05763889f92a6db5c","b8abe10a2a92bf537a49e8dee92baf8de3ed591848a1b25151dab0d7ab3134e5","b96cea09313d481dfff1ed1a2c552ea29e8fe68f52139458996a4e36157748d2","b96f9beb6d6d8fbf88c4b8b2b807a362f2640479cab6173cf64c7710817785a0","b9ad2510d8249ec4c8e7fd8b2471727aa1bd0ce8f3dde78e545fb2f8f2985a1d","ba7d7464da8e13722232c8f86273774054693681becc450a68aea21a5a0e9b91","ba87e5d43ddb10937bb17941f055f80a223d0981fbba44107aeec8530e3a7774","bac3431138e986d6426c1e81bdfe0a968394896c0751cbbcc8f36002fd0ed069","bb230236c4ab6353afb4147014c93204d3d1eb8a6d18558075df5fe79ed7f392","bd714f38c881208f1190ad714bf8fa5aa63adf302bdaa8ad8810ff279e43459e","be75cc1ee935f783be39978de91ae196c16141d4096e16eb6d07f59583296b4b","be8c3cb2d8d67e63c8b069920b74c6272922febbc6a0a2c4a0072a7a213681d2","beed0f36d9b1b9a20bfbf89c96862482b8d5b9d4284bc89539efe9c9b11f000d","bfd21b5c8eb26e9d475868bb30d66ee08f20876e9df5cd06aa8fec01ffe666df","bfe97e65f2cbe6bcd0f14ff57ea4dc1dedb2e5f0db92d04d0982cf1932ac1c3e","c112d36ba38c362da1c022945db5b6bbdc3014685ca9bb7d940f5086f00a675c","c23cf45c1dcb748145d87f5c173dd3c8becaf9e3f6fdcb3e2ca91d6726b0842a","c29b8d250a7b5e73f4ef675329da2251b8de032501e4836445b6aafd90c645fa","c329c9df0dae8a036da9be440432d045be3ee13cf5664cfa6ccf11576ed11acb","c4600cd5358b5798a075beb54539d952f200def1c9a573bd237c795fd33ba36f","c6752cc3c7ad06d1e9f127365f078919ac46b77f8a8fe413650094d914838ec3","c6867ec30530fd3feca89a4e968522f783b636b165ef74f288c42dd50bd51a3d","c6bfbb004af355e96ed5b4c8c9b8b7a96d1c08d24bcde7c666728eb9497d6d71","c8bd340e6fc7fa3e97415f7ad4c22c51d88c6e77f782c12923e841c04d3f882b","cad13b6653fd9f811e67d13c5f01f9dec047f8c384097cee01dd2e2db39e539f","cc24c3770587f2421514fa399d2617201752bdca145ac39058de91d45d3d19c1","cd2da00f6f1bad8fb7c1b87cff80e122eb017e44a471cdea769efc67db369038","ce887fb65b6977a2046e7583d704863624e55909ebcc9c3ed065b3d13079a410","cf9223c369b6fb7baa52f301f904352ba8e8d5e4c2a06f70de6ef1cf76fe1b84","cfc3b5044af37ae7485fba8067dcb22b2438bdaa6e3a30c22ce0f9e2c00aa597","d0481d9b6111ab4afba0462e88970b863284807ff44ca97364c84952e3f88583","d0973a1aca6a118375b466d6e91821f8450110fdf042ac848ee16912012d2b0f","d0df3068db679e24d9487ee09a6462ac5cf3df30f46ee466b66feb6dd5ff71e2","d227e0a73e3c5452bc5ab41ea2c695dfc0ff9b0c1c81e59ab3173f796a4157cf","d2cba4dbbfe3d026f825a8b470a2f6011f9b8e245cf042ae8889afbb17dac6b2","d2e4c515093f8a2aa824c8b542a016e5c321065f4525931b2fac4f8af2fe52c6","d31e8aa21d1498f2d4a07c4cc89ea6f5a6d3ce54d334dbff230e0f55db35c85e","d37de74aadd5916eeae243decf347821c4e946356b9f70471658638ac3092f91","d49d02cad8bbfeac607457b08aac6068916ef45d8f6c980279d6e654407cc7be","d4f51c31a454d9abac29457cbbc21e1b5767c0eac1b37c41ee787a3efb05c80f","d5c084e12da4a5111487c166b879042a21a056f761ee22d9237cb4f65f366341","d6077d547aa21ea10a9bdf6c752b8d1a0a6382b4b43a0fdf790f245e66a609fc","d67e8c1aaab1ce6ec1755599ecde153c47c6b90dd4c301663abe9057bc31af57","d6abcc1484c3df45bde915abf48324af1e995c3266a3c6c069e98e94c8d9a4d7","d8ca8e025e226ad6bdd32a6a9fceae2982b0413a0ad09314558b54bdc724bf99","d8d03142030c11a0aa1012102fce2b202baf88e424a1236832937e87450dc579","d9823dfddf6c507ec030fce4bd2d98fbda18e595c2ebc563574d9196cc7a5e33","d9b0972f3406075b860ba7cd2e71d4492c826960319b10389c2c2820e2981254","da37a61fab07ec8856b725854e4064f55a59149aa69cad1bcbf89ec478b9f578","dad01e5bfb13a6c4419f4d24fa8dbb424e93a1c4be656b0e5dd48ac546e0a0d9","db21a75b4fa6165f75268963474f3262124795d816ba80f685bab2c6eaedb028","dd97ab52fd89f42352c595ce137684cc519c473fa17969e8a6adcde7322a4748","dda0a34d6704887eb36bbc0173334b49d755cac8cea3bbd17bfa972f04183dd4","ddbda9408727a19a4a55d516bed99331edf67d8301de9c78564716465c949619","e0288c94ca9c16a6de217e6baeed720fcf83e401bec45bd15ca47ba8fc9b44dd","e1667469384ec775a3df665679cb3fef057dc84dcb18ed8db8b9c5723835968a","e16c328504278cfe520d6d99990f2a4370cc48159aba86694d0f7598fd4b0611","e24df071f5325bb3a5b20f355143556bc7712535ee8b6ce4c426598f06fd2448","e28d8e6b71264d0bfab853e63178f2c151367cce0dbd16125596ff3604b6658d","e2c734504d211580b4e6674eb1c7d31fb6fb730c037210c34c980a96f9098269","e3f19c383354cdf45311f92f00b90fed25dfba7e9892ab2f5f3aa4885876b75f","e409fbfe439455330c0fe003de860e30f7093cc3cc83a32f886c9b539a29f60b","e6300ee8e6c2c4ce6d7ab02b7b06fd1cabe3c5c52b99a6ea3ea8b5acd5092e0b","e734d068446591aba283d136c21b4fb0209f91352cb4fc6589bd651cdbfec163","e7a333109a7aaec2b71048868500c15e721900628eb48790dfeaa1fd4c2dabc3","e7c9175fbfd9fd84bed95d552bc0a439b07a233c3e91fb39ae2f23197ee53f1b","ea1b8a251ecc1fd96697d0c602d3e14ec46383d27bb9485a0326cea5576ffacb","ea311dca2ef14e02b9aae563bb28dc737b04b7f01c1ceb2be3d92007d2c74ac6","ea8e5b79bbe5329ae8437677c8316f2f9fd75bb1d40c88308c269140a7e564c7","eb996138bc91c0ee63bafe1ba10b130ff5a2fc82aa4918296222e0a831a569fe","eba6e8e5a12a86f17fade41bef365aa95491c469e18aa91aef64908a4263c905","edc160a11c07dda8072748b66db7f27b6cd8efbd1faa3f6c826a0fe445859c17","edfcbe4773eac1fe2964179a4ad21294efede89568f2efd8e283ac18bc5693b1","f0f90dee84db760cc1bb0f6e6983d4de0e3d5d9f4adf7b2b52f0d3dbe6d585a4","f1d4a6e98f41ab3f6cfd67cddeab9d0ed287b92cb3dbe575e3ce61925510a792","f21c3a9267110e469f224ac7eb76ca5bb084fc90df014f1ca6791d5770483944","f379a1b9e29aa7fc25c4c0c897eaa3c0e90d66a201a0ade8cbf523a5cdc8cf50","f3e04891c79b604f9235f438adfa49ee27db43d25c7be0d1cc06ae53b8f6d2d8","f46904e701174fe2850798d9e1b077bdac42fcac01dbc385298da01118c82aa6","f53265f53af0b0856911ab08b373736964d0c443e8ba61d7f1d45f5e5b04edf3","f686173d310f41e26e3fe8a7c1dbf4313e4d793323335348badbcf4633f5d699","f704c9c9e2cab1ed44578f48d161320b5fb4384ecdd8b40a5e22c4078a8594da","f89156489d35f9992d5971a52a6e03a7d7f095e15c2c782e85efb1408a2bd6be","f99ef6fa3c9c6bf572ec69eb6eeea9f88ce6590d3a5565bec62b001b6f2a376a","fa2dfc22b4fdbcf402a822e8dd376925655d997a0f96284a60f10665ba3581ba","fa3df5f8349aec4805bbcd279b88697def63f2462d8ada0b5fe1d9983d9a6daa","fa6b97cbca1d4f09662e706293b0aec1eb76b8e2277441f54ab6c548b5423236","faac0c3fa7cdf67b452d407e9a1db5cbe1e9140ecfe300200b0b0a6279c97c66","fbc8b53b5c6f3727c084e5e0429e410a3fed5a17e1a0144692fd196d9836a4bb","fd04d7588bb9e6ca0a8b65ed0c9635082a9ee5f46b2d1b5b25866a072236c1fc","fd60f2a432086c6fc4a4c39d8d2d6edf5794c763c05a6401db2bb5fa2c601775","ff532716738e2fc716c10797d9717f324cca3a1234320a84a73a0b89569f11ab","ffd0fe3449e449c7b9fcdcc7e2c1ffb677e57ad935a252de88a0122d437efa67","ffde5c700732beac27a9b5162213d387422ce199400e56d9cefe550005b6a542"],"schema":"fsgg.atlas/1"} diff --git a/.agents/skills/atlas/assets/seed/records/7a134e7f1822183ed1c0ded720971539350feaaf92612761210cfc3ccdc55870.json b/.agents/skills/atlas/assets/seed/records/7a134e7f1822183ed1c0ded720971539350feaaf92612761210cfc3ccdc55870.json new file mode 100644 index 000000000..865c2a94e --- /dev/null +++ b/.agents/skills/atlas/assets/seed/records/7a134e7f1822183ed1c0ded720971539350feaaf92612761210cfc3ccdc55870.json @@ -0,0 +1 @@ +{"citations":[{"path":"src/FS.GG.Coord.Core/TelemetryStore.fs","repository":"FS-GG/.github","revision":"b88c95a24f20e207c35971583fcffde50a312761","sha256":"8032321c251a03662111e9965845360eb8fd92cda0ce9e220116a81cf4a7e4e2"},{"path":"src/FS.GG.Coord.Cli/SkillTelemetryReaders.fs","repository":"FS-GG/.github","revision":"b88c95a24f20e207c35971583fcffde50a312761","sha256":"a510716436479424894fbd4787ee545c9b37e4090644066310b55b3ada439b7d"},{"path":"src/FS.GG.Coord.Cli/SkillTelemetryAdapter.fs","repository":"FS-GG/.github","revision":"b88c95a24f20e207c35971583fcffde50a312761","sha256":"74d61ae2ce23b4e6fafd940ccd924374d4a8060db0c65693b2b69e69d840b857"},{"path":"src/FS.GG.Coord.Cli/WorkspaceTelemetryApplication.fs","repository":"FS-GG/.github","revision":"b88c95a24f20e207c35971583fcffde50a312761","sha256":"7c1c889ceb8022f66650623016e6e71493b0eba6dc755272a62800095c8ef150"},{"path":"src/FS.GG.Coord.Cli/TelemetryStoreApplication.fs","repository":"FS-GG/.github","revision":"b88c95a24f20e207c35971583fcffde50a312761","sha256":"a5f58e3f9b1abe519642fb906c47fd04a1bf50481b49876680a87f208ab1ac86"},{"path":"src/FS.GG.Coord.Cli/TelemetryApplication.fs","repository":"FS-GG/.github","revision":"b88c95a24f20e207c35971583fcffde50a312761","sha256":"fdfa123c0175440004e239ebd49046684c687538cd02269504ac60c84245ff8b"}],"conflictsWith":[],"id":"contract/passive-native-usage-observations","kind":"contract","recordedAt":"2026-10-18T09:33:18Z","repository":"FS-GG/.github","schema":"fsgg.atlas/1","status":"recorded","summary":"At the cited prospective 0.106 source candidate, explicit selected Codex rollout files share the maintained strict native decoder, including recursive duplicate-property and strict UTF8 refusal, and project actual optional response counters through provider-usage-observation/1. Item, inventory and terminal attribution stay unknown/partial; these canonical-only facts never enter qualified item totals. Stable native thread/turn/response identities, a finite serialized producer index, private pending intent and existing immutable spool retain corrections and exact replay. Local enqueue/reporting make no receiver or App Server call. Initial capture-only setup skips credential presence and reports receiver unverified. Same-owner state cloning/migration is unsupported without original state/fence reconciliation; one selected association root is the supported ownership boundary.\n\nReceiver admission refuses cross-owner changes. A complete bounded drain census retains the earliest pending head for each structural scope/source/generation, fencing numeric successors behind uncertain or durable-but-not-applied receipts. Candidate scheduling rotates eligible independent heads and ordinary traffic through the existing sixteen-envelope quantum with one private advisory cursor of at most 256 bytes. The cursor advances under the configuration lock immediately before each actual head attempt, rather than skipping a whole selected quantum. Expired shared deadline/cancellation stops new head attempts; canceled lookup cannot proceed to Submit. Missing/invalid cursor state resets deterministic order. Cursor crashes affect ordering only; queued bytes, receipts and authority remain unchanged. No fixed elapsed-time or eight-pass service guarantee follows; transport timeouts and exact-source tests remain separate.\n\nUnsupported/rejected passive data remains pending. Full qualification of this unified source, publication, installed producer capture, compatible receiver Host/store and restart/restore durability remain unaccepted here. Host is independently versioned; first useful isolated candidate capture does not wait on Home access or Host deployment. Published/installed 0.105 and the accepted board binding stay unchanged. Earlier records and original failures/Unknown operations remain retained with no replay or reservation release.","supersedes":["7aa52373f2721dd76fc8eeb3d6061794f27ea8d11e96bcb1ff25a97994a77d5c"],"tags":["telemetry","passive","native","capture","attribution","delivery","corrections"],"title":"Passive native responses separate capture, attribution and delivery"} diff --git a/.agents/skills/atlas/assets/seed/records/cad13b6653fd9f811e67d13c5f01f9dec047f8c384097cee01dd2e2db39e539f.json b/.agents/skills/atlas/assets/seed/records/cad13b6653fd9f811e67d13c5f01f9dec047f8c384097cee01dd2e2db39e539f.json new file mode 100644 index 000000000..e9b74e3b1 --- /dev/null +++ b/.agents/skills/atlas/assets/seed/records/cad13b6653fd9f811e67d13c5f01f9dec047f8c384097cee01dd2e2db39e539f.json @@ -0,0 +1 @@ +{"citations":[{"path":".agents/skills/work-programme/SKILL.md","repository":"FS-GG/.github","revision":"2530ffc1e401da111b5b32a4f93c211bcc2c193e","sha256":"f5562f5010d96a74fe03fecd965f743a523cedd8fbfb0491482f84acba662230"}],"conflictsWith":[],"id":"platform/executable-qualification-and-final-assembly","kind":"lesson","recordedAt":"2026-10-18T09:36:18Z","repository":"FS-GG/.github","schema":"fsgg.atlas/1","status":"recorded","summary":"Before costly qualification, verify that the maintained runner actually invokes the changed assertions and that negative controls fail through that same route; compile success or a zero-test invocation does not establish executable coverage. Assemble compatible source, version, Atlas and delivery-closure changes and reconcile the intended final base before the expensive full run. Defer reporting-only followups when they would invalidate that qualification; this is not a blanket main freeze or permission to bypass required checks. Existing forward recovery retains unavailable original outcomes and reservations as Unknown without repeated unavailable-history searches. Source guidance delivery remains distinct from installed skill adoption and measured process benefit.","supersedes":[],"tags":["qualification","coverage","delivery","process","recovery"],"title":"Verify executable coverage early and assemble compatible changes before costly qualification"} diff --git a/.agents/skills/publishing-and-deployment/SKILL.md b/.agents/skills/publishing-and-deployment/SKILL.md index f1a6830df..46ca8d704 100644 --- a/.agents/skills/publishing-and-deployment/SKILL.md +++ b/.agents/skills/publishing-and-deployment/SKILL.md @@ -34,7 +34,7 @@ Registry release inventory: 18 package-bearing contracts across 9 producers; 16 | `game` | `game-scene-adapter` | `0.17.0` | `0.17.0` | `game:0.17.0` | FS.GG.Game.Render package — Adapter (sim-state -> FS.GG.UI.Scene drawables) | | `audio` | `fs-gg-audio` | `0.6.0` | `0.6.0` | `audio:0.6.0` | FS.GG.Audio.Core/.Host/.Engine/.Elmish/.WebBrowser public .fsi surfaces — AudioEffect vocabulary + IAudioBackend/IMixingBackend seam + mixing Engine + Audio.Cmd Elmish bridge + browser Web Audio host | | `net` | `fs-gg-net` | `0.6.0` | `0.6.0` | `net:0.6.0` | FS.GG.Net.Core/.WebSocket/.WebSocket.Server/.Protobuf/.Grpc/.Elmish public .fsi surfaces — ITransport/IMessageChannel seam + Sequential/Multiplexed correlation + serve/ServerEcho + WebSocket client/server transport + Google.Protobuf/protobuf-net codecs + gRPC lifecycle bridge + Elmish Cmd/Sub | -| `github` | `coord-engine` | `0.105.0` | `0.105.0` | `github:0.105.0` | the `fsgg-coord-engine` CLI verb surface (claim/take/batch/who/widen/set-paths/say/landable/done/release/flush/…) + its exit-code contract, emitted from src/FS.GG.Coord.Core/Protocol.fs; shipped as the FS.GG.Coord.Cli dotnet tool | +| `github` | `coord-engine` | `0.106.0` | `0.105.0` | `github:0.105.0` | the `fsgg-coord-engine` CLI verb surface (claim/take/batch/who/widen/set-paths/say/landable/done/release/flush/…) + its exit-code contract, emitted from src/FS.GG.Coord.Core/Protocol.fs; shipped as the FS.GG.Coord.Cli dotnet tool | | `github` | `telemetry-host` | `0.5.0` | `0.5.0` | `github:0.5.0` | optional Linux x64 FS.GG.Telemetry.Host dotnet tool — authenticated workspace-scoped ingestion, private dashboard, protected native capture and bounded learning export; independently versioned from the github coordination coherent set | | `github` | `new-sdd-workspace` | `0.16.0` | `0.16.0` | `github:0.16.0` | the `new-sdd-workspace` scaffolder CLI (package FS.GG.NewSddWorkspace) — one-command full-stack SDD workspace creation, wrapping the FS.GG.Templates `rendering` provider (ADR-0016); shipped as a dotnet tool | | `templates` | `fs-gg-workspace-template` | `0.19.0` | `0.19.0` | `templates:0.19.0` | FS.GG.Workspace.Template package, eight template configurations and seven `dotnet new` selectors: workspace-provider identities — `fs-gg-console` (provider `console` — minimal F# executable, no npm lane, ADR-0072 §2); `fs-gg-web` (provider `web` — F# ASP.NET Core + plain TypeScript/Vite website, ADR-0071 §3); `fs-gg-fable-game` (provider `fable-game` — F# ASP.NET Core + Fable/Elmish game client, SignalR for connection-oriented real-time traffic + plain HTTP endpoints with explicit versioned DTOs for typed request/response per ADR-0073, consuming the published `fs-gg-game-core-fable-lockstep-v1` profile per ADR-0069); `fs-gg-fable-bindings` (provider `fable-bindings` — Fable interop library over an exactly pinned npm package/declaration closure, ADR-0072 §3, first proved by the unreleased EHotwagner/babylonjsBindings reference) — plus `fs-gg-governance`, the separately registered pre-existing governance overlay template folded into this package at the same rename; `fs-gg-project-knowledge` and `fs-gg-python` are also already packaged. The current and legacy fable-game configurations share one selector. | diff --git a/.claude/skills/atlas/assets/seed/catalog.json b/.claude/skills/atlas/assets/seed/catalog.json index 56a0d5fba..c63bdfe39 100644 --- a/.claude/skills/atlas/assets/seed/catalog.json +++ b/.claude/skills/atlas/assets/seed/catalog.json @@ -1 +1 @@ -{"records":["000ada42299601fba29016e5c0e0d4012876fb42670bb10fa0b1315477254ba4","00641d046d6869fdd0023ab3df99e0e67a6ea28f0dcb701f622b1cec8b3e07c6","026b08fb343aefe19177e95b759560d340d372def4b71acf613fefee3438ade2","0357495d23fac4fad210b6dd7ed7cc57dd33d107e1659a81f085cad78300797f","036c148f6d0e89858c9bf4cf380272ca6904bb4ca277a909fb71c47f5450cef7","04e404d89dca295564813149472b1de8e6c43357e2f6d91d169ded7600ed3a02","0509e5c6fdbd2dde0c0db8558647080560714804d00e4f9268342f2e84858a3d","06ad2c8aa0ff3b862edf3ba99e0e4e8801ee163709e66333cd06c3fc61232b05","0a6d7dc5b64970bfdadc9049ace95e8bc163fc421beea70129ff0eaa692c6d06","0ad4403c8f4078dbfa543310c69bd1dfc768e305987214ffc37d7b2600c4687c","0c22360d4653eb0f450e4d3d34564875f1660cfcb2d546095d98b3faa3967cbc","0da4d093b49c0a1f654b38008bb01195e816829279ca1989bd2448194e15361b","0e560af7d9dd2e0f2f588a74cd35512973747f20bdfe0bee0bc889105ea53dc9","0ea7107c2c8edaab3ff2bae32f63cfbef6903a51cdaff257278f757ed5ef429d","0eef4d717eb03f0906aa3be7336aa71f831726afabe8a56077b76f6e82fd08e1","11fe30832d93706c60efd836b09f35f049c4a715ad6144cf277ca240c5780704","1244d27db0cf5075353bcc622d0fb3b5ca6a7d08526e2c5754e8b745c250bf3f","155fe673b8ae12549c978e1bf1d5c43e360937fcf2135cdcd5aea6f6c771da44","1945f527afc3c2930ec4d7fa57ebb2ef7dd6321c0dd3ab9233c9963e9e613165","19d657b67672257ece127f3b957674b7fb4780843148db0a36a0b329c2a418ba","1a24f6ef0c08a898f309c1b925fc19b29526f913a61a1dfe4b1a4308ebdd97ac","1b5351b2dc647aba864e387168db5128435cb80da94fc42581cd60a05fc34b9a","1da011289116fe88fe92cb8f0e83ed7ccbbca251681d4e136c5a61c40364f8d3","1ec9445b242d2a2e149fe71c67bf13d8c0e4ebe5a6ed7b022656b9941973909d","1edc36731a9c76ad07d269d8b4fd84c8c956bb43d6f56de17d6208164856ffbe","20901b579f69cc97eb56b492938864667576e1c9bfacf13f8a529c4f6e543448","21338155cb4f52c49e5072c877771be67c75590d9b238ea025fba5209fd6e018","23af79bd1e7995fc8162ddc4d830318acb054bbfcc9c7d5cb141ec306da67386","24d4f2730d94d1b7f149771ef0e59192f4936d142b21f4a56b1a391e4514d38d","2591526ddabbea03fbdc38bf172bc54f42df9bc51eba7ad2b70d6e67215f08f1","26259abc7fe745f52e06f2aa2abb0e50f189bc7608065f04d5c669a0a99941cd","26290a0990d6dac0ce9448e05eb934210603356043dcf14a5d80585288e2aa92","26d6b31965013079d4db67a2c403e01f21e3c30ae65953400dbed92e289a0925","288daf614247c260cb673d8674e8b3874ccc4e269347836851f702d7ac8e2f7c","28abfaf6d50ca38af0b88aa50524200c17af9000da83ddbab3d8f9e06e020fa5","291d3db272eae084d34c04bc1305f2abb26a7e7acbc5515208469b46719a4ed1","2a38ddebfe3380232e35d5a24f9cb9f7c38abbc9c68add4ea5952c1e65d328d2","2c76ce93500601e281a41f5985fe4e3926fc8bc9d01ee687f14052cb553ad2d2","2d599c722a08306b98f2d833fb3e4a7acb9dea92e6a58820caa2f65c09803fb8","2ecd502add2d801eebed39411fadc9a80098ba9ce04a5f4b728a0e4e331232d6","2f7357367d921995f4c6fdaa693392adcd2df4860ef4d25c8dc47f7ddea8c755","2fb2ed7902a8e35dc36489a23245d963026d688008c92fed6fdc1f6bc27198a6","310bfb5b2d061bb733771e5cb7b3b7d25db43af5eda9f806169b7ef9330c2fe7","32f69a7b8997ae98b9305ee578145d795dbcd39ca4469bf2465e57a0295cda51","335683e33b94cb86b5e426b4faed200673bf850151191a08458136ceb164fd4e","3407ec53a884d3945d86a88d6b9a883419dd426e96b1108a8e6686f30397a629","34463778cf2d29e3896a65613cf9e3eb3e9f2d8946d17f12b609e70eec63d128","35da3938b72cf3520e126ad595157104b69ab748904c7b4e12f563d6b103172b","37c8908ea2a349cd3034018027160ad810b28ad1fc203a9a353971e1f7396b4c","37e39faee019bb041627510f1f02746ba9a85696417a083b438eb4974b72c2bf","38a75fd804821f4836f0a7ba8d41af3d3a3a5f5d7dcea68487009297824258d9","397476cf107b48e7a662264f8fea9f880231fd3d1e0401622650f214cfaa35c7","3ad8b0398ba6c354c9e31b7438b2515579fc0b1f17de4b35a914c862a3a11e3b","3b3c6cf083b12a840565e00458e2fd4ee8a61f97cda452703a6b13d7776b6c13","3b4af144afed3d52dd2e1f64e23bc25b3475eee5f7af3bde9886761b15c33dfd","3b5d82795e9f5d1992ab67e078fcf1108247ab9b6d1baeac944d3ec0294cec5d","3d0274f77576abdbdf442c8843e955e1bbc91e9f8cbfe3646b119337cdb13c96","3e2f66baa16c7ea936eba34720a55897438f60b343cbe8fda4eab1e5dde044eb","41c768ea17144c6ec225e9a65d4c3c127fdd7264dcba1a89aa17b20fd5d7e3ee","42aeb46fcc3d10b95e4067bc9cda875fa933b4102873f67c7bf1f8ca6799a598","4320b92712bc14dbe10b56f1cd3d1bdc093fc4be6016732839d0be4dd4d027d3","46cdf2c207f79d388001f6636dfb7a98bb2ba72b9d1c6df4938f0a27691e07a6","480f1ede18ae031b164d49d676feeb1090fb33932676ff52e1e2eb24e8d154cd","48797c44c92cb34fd9a57a08020b45c6920b2268dc8ad616c0f814a3710d5316","48d094622ada1806cb30335926007c1abc476b1f7b45a2e250c490afa25e847b","4a724a6a842a132c2185279513f341b79f9be93e42660f1255770eeae3b1323c","4c8c327dacf345e184042092e96ad3ea02ed4cece57dac5fa68ea52fbb5a6adf","4d5a44ba07fafeab823b54a21846269330ce35b4c190f3ddd5434bc8530d9b41","4da0a5be70e8af9c39623deac83822749482187f6a0fc3d186dcfddaa7111576","4f1e58fc658a4ceda181e2a7fa249305b09b573ffd68c2489f204f4957224957","4f2750b974c1404acb721ffc84cbd1d0756a24211dd6f6503c10ea74dbc45676","509ec9c08864b9dd0029f32ffeac85fbac863e2dad459994c65b7cb5264faffa","52049cc9cee43bb27229e6b3e983e02c6aa20dd7d153b13e3c74bc6d2b47cf92","5382c901d160ca2d79888d8acd7a690a5349826b5da486274b0800c9d7513f11","540879695d41205515aaabe5466971014cb43b960a26b8e5958e37fed63df762","5560616d1e72f0a539f9ebbfea3b7d195c1ef5622f97994af1963748d4f97533","556ee783d8e2e4ca50f656c095758be613983f904d998a6534fb155510114f21","55a4711e799294d06988ab4acf77eacd7d424123082bba3ec987dff0ae13999c","55ae095961d78a1514c4dd1e63d477c60179a8662571ab5a90abd3eb2b83eb10","56e7158313357bb145bd98c5f790e569be2203fb2601565a30091a597a7e7ff5","5962dd14d3923433cf723d698d1af19ac37a270b6e88445643fc56a646faab5b","5a2064cdf51026eed65457c05f34bec919b31d96d35c29498d298685965f0b5a","5b77bd6dfa81cc339e729e4195e258facbfeb64b9c680512f742e3fb1961fdd5","5c3527e43fe24c5aa171c6fa4a3de7fe5e78f2527aed0dd19cb21d154d43da21","5c79c77f00167ca140127b00f1a79e1ffac621e46fc461089594206a7df8d7cc","5d015880319af666943e68169ca906bf2f0c813d8bf2c5c0262aeb5a40366350","5f2a75b89983d1005a38afa2cabccc3a39f31989807120281d8505ffd564e0c6","5f4fa6dde5930fe1b42f805895f0f5fb135c2b3ff9830f2bd30ae7526a3295a1","630fdcff1f227b5baf5d10bd78ef0fde68791ac0cd8a15f65065f5cc4501b17b","63113617f2e4ee6b827a69bce6afb3949190a282f5feaaa9e2c9f82372623bb8","63544fa69b09916d52b305700eb9816305ff22b77162a44edd13897acea3a655","63a4394e689acf4a4762cfb4df691d05f923fdf592fd2f8ea41e6a54f98d1136","69ebfc7eb8427db3c5c59bdde652d0cb269426126f8540b1b58caa29ccf130e2","69edc4285578313d1dd2f914d69add075a7b354f7fba717606d1abe15292576b","6a34d9279cae58765d6ee4a980192c0e15f3ca217b9f1815861d472a281b3cf8","6c3c592efe9c684ada5661b8cc88a5c3f6e57c841db06b9e070687504cbf6236","6ce6d164c3e31463fb9e144fdf91413e55d077cfc4f25092bb02923fb538a84f","6e08a638e1e28020923effd4c65fc517dbe7b06100ff76cde74e427191503b84","6f3a7020233cd77cfe59eefec0a277f6dda323743c8d80e4e54a95cd3cbc23cf","6fccc6f0c5fa71c43211785dced8abd0f3295040eab56063f4e8d77f1c09b8ef","700cd21af9ed7e81900fad9d52de2fb11db48e64b038e4293168f85e5dd0e043","702d1dfa75e92a916a446429f474d4c296e6ea4e8c487995852d0525e8440659","704cf778db6086c3e282c81249fb0ef09c1d7c2043335ef74c7ecb69bb3e84ad","71ef1ed2d5e4bc7eebe7a73bb3e9423e5bc2f8319186380fe8b38334952d3b01","7256ba00af1cf759b95b7bf8ae3b9943f31349bd10a7652a26bb419b368d73a3","7369b339daca0fcf46ac7fe82d65ae95c75d7dbcaaae51209e6d90b6587a014e","73ec844fb3e2b9febd00ba37508b284fad141630f03cb9f74e36a195180f5054","7410de003c7b582e30470d1209eefc796a70c76fe8d61dd9ccfe01ecfa41310c","76bf5a9c126db6eb466287a7c0d823327ee9882a70eaaa6efb03d169b5dba808","781a64598efb2a11156f07271ba1c14c4f6b3d73aa2943b26eae02063df7af70","799abc1e8d381b8d97349479139985e383bb49179b5a80f39807cb35a3ee78ce","79faec494bdd6d098c9d2a9d8559f822938c6b2104188db95321d89e7a732979","7a032dbf0351aa32c77c8d187f7eb697500ff186c88c5946ecc15adc972246a6","7aa52373f2721dd76fc8eeb3d6061794f27ea8d11e96bcb1ff25a97994a77d5c","7ad4ef4b8d3221758a9e7f9577750ee03f6cba11c8eae8bf25f74a3131bd21a2","7baa35131ece7ed9860607157d2531d4d70a061bdc9bb9876e20328f127cec53","7cbf970a11bdb91a40e248eee97ef789205910ebc913349698fc75ed35e82fdf","7d6133667f81aa66a98755d253ea43301b45ada338225df034d2ffdfc79829e7","7e89b59b456dde4bbbdbf8079665bd82c51d8e500018472981c15618b3893959","7ead0c68ffa0ced241af74dde58b3831343dff3f7eaab64bddb9954545b7ba12","7f8188b57ad3b0c28210c95954e5623376a4262dd5e75f002700c6094b8d6b6c","7f91dfc2ea1a3131c4090375db0f489c2a572e245ade6cda4ebd440446d6d60e","7fcb8cba3ed0ee9c342947aa88f0f699bb4f5c23244d21c6c739c9b66d7c6101","800060d7b4934508d0277f90a464e3112fd2fc99af4ef23825d09b0ff53f91c3","800a802a4ce9e597a102f0a566535c1f9f7adfc60c41af6bd2db4fb7fe3c0d0e","820c12fcbded9048a363b9e0ebbc48b24f85fd4a68131b5dfc1b19057bf09ddb","82c419e5de083e423330432c9d45c744043d1bccd8eeccb41e3014ce9ae3c32f","8343a4211a4d0ffdb320d5a4305174d85bb707d15dad978f6436297d022daa11","83a97b9ebb29f5cd014ef5e178970a601ee92c44678f05d1860b383c5f63b79d","85a962a7c23c14dff8d683e738b53f422221697b213cafeb616d3a172a6c4223","8629fddeb4f273b35df69d4d28923adc14eff59d919b1a495d1a68818137c561","872ab2b2d65fe685b91e355f5af051c85b79569ece16448160d01fef38039624","87f2b3634baa504f2ed9508c6cf6a47bbfb36214a177eb13d70d6a987706818c","88b615ef6a31bd9958e98b8ea522f49f0360ccac5d9fa8deb9e3ef3fe3147d9d","89cafbb20d6029656266d8cb0f85103fa519c8032598282fea58c94cc59c4125","89f2105745b3a7cfd30e7d7c598d6c8fdde0a599f30fd0db7382cba50412445e","8b3eec010d1eae43a28c88434f2410a751f790a9d6ec4a08e75e68c171629ab2","8cecfa09651c40be4d7c11c117c80e1911dc75bf6f1cc34be64706823cc024c3","8d250acd40c8a24ba0d51cc73e65bba6856509b5fbf4c7d7a435897a01c6e764","8df1420c27503370db9382f68a0af8d2b4d56f9dbc94b24ffae450a905083a79","8e7371228a726f381fb811d1d812c39917788a3df7e53dba1a3c364e755a0c03","8fae27ba5117e202afbd523b249fc454912571900fc909f5419b8ac96c773c44","902b958b4db7d8d8bf73a82a8aa86e5485b39477047c8ad60175d118fe31d987","91c9ced5e9ab8da897b7f69166a7d0bade5c58d511b42d60d5430d536da45d09","941f70c384905ab77cb9a88e2671301117e4df553da6fc7a09210710deb9b6ca","9442788fa51227044803f1d3efdfc1c2b2da372871a85f0f7a6bb3596a5c003f","947a1cdd43831936480167169d30334f818bb5d882650a3547827c05204af111","971f59cc197732d0c0b6b8aabbbefca4550fb8fb04f8522bdb4257c05a28848a","98a097d6ebb754334250dfd3ccc5f3dfaf5966524758cbfc9e10adf4a0229693","98c7e4bc2f05e9b4ca703db4a02347db7355a44f04e3a4003e26c46a56bded2c","9944d1a9674e555a41d31d069d136461eb06dd4052d40f2e4ea4368dd978e01b","9bbd03293bf53e9db51401d157b3eb2aa51e9c70449350e98b9a0a3fc9a684ce","9cf90b3aa59f3ca0e40fd9e1fec9703428752d63bded6b091d28f614c9ba99ae","9eb67ea41c5bcb9557ba51bbbd1b321a78f16335cadebbed848d8e6c1fc68bab","a0ff0d0bb3a3c801b637d091293f2eeaac68e934274e4116d298ba60ec3461cc","a1baa1f699fd4ce19e8ef6cdfe346e1b0be63e16d5c5cd5feddcccb16a62f269","a3c84d76be9d891812e795dd46470c2978dceeff928d729c0d5dd6def599923b","a64e8aee389ae696d0d4b045c0153092113fa522ed5a0fd9b5658b8418db4ded","a6c531ed9bbafabfdd649f3030daf2f24461163aaf99dc73bb24dddb77bbcb90","a7ff7302e668dcea1cd1db2241ff95c0d73534539bd03fdefebbfb57f60d3849","a8b4a33078335d2811bffb78eee49aab5fcb31597dae366d43e20c7f7800994b","a91a47fb4fa5c1b1a834fa602030e435ad641240e6ceeb99eeeab7341ca09dec","a91c8a1431a4120667cd523cf56bac004794fc5b8b24275ad2f9c8a15c75fba1","aa131e74e695292adab9f57b3ccc5a503a836dd4b95a3b2b107c69f35dba3637","acd7884bca46ea9422503cead985691da05cca25bd5ed52a199783cae7b8b01f","ae69fe306bf5db346ddfa4367cda24c95e44213baca27b0ee7d7167bcdd85af6","ae8c200dbcea29f43b29974cc247d70647c80d5d76385396f1c82ee9f669e2f1","aec13a075b84253397fb97e1c93a23e1aaee6d6bff2a9161bfd00a5b1d7611de","b09355a97e3aef396f681943b37a404a98fccc6bcb97781eddb2fc000d1d985d","b0ecfca0d114bae34ffa62ac3ea05159a4415fc6eb73ab1fcc4d79f657268f19","b25c41f19ba40e646fd9b6f82051ee4c38985539e445b26bd628eae98537df53","b262187aa66e8a97083bf7f79b91595bf7a4077abe7f8be5b00b4998f4579d20","b4091f93c3d96e36b0708f5dcd46e0e7a0a48f098036ccef6164e4a6429ed94c","b4093c67a9195ee7d28d2575e967ac80057b92339489c244243c7c504c669ff0","b44352445272089cf90967d4d413cf7009bed0ac19f3fa95cb831d5ebad081c3","b4ce73bea5219f1b27bffb36c6a9dee14447a710a8938db807770083db4552ac","b5102ef50e7d4ed1925af5a8b45192e737df02fafb75d7065995a2bb93d2e8e1","b5428b5775526a00645566822530fb969b82247ba83f2c80c06d34151e1f9061","b6cf3b02f36e0efa93b04667cdc5701340033a09e41a7196277cf6756999a666","b77c6669bcd54e0fa949faf2f7205f2631acfbc1ccf79f93f8dab5c5717f0e93","b7ffd6cddb12384224772e8de79aec89d8f4bca966a3c2a05763889f92a6db5c","b8abe10a2a92bf537a49e8dee92baf8de3ed591848a1b25151dab0d7ab3134e5","b96cea09313d481dfff1ed1a2c552ea29e8fe68f52139458996a4e36157748d2","b96f9beb6d6d8fbf88c4b8b2b807a362f2640479cab6173cf64c7710817785a0","b9ad2510d8249ec4c8e7fd8b2471727aa1bd0ce8f3dde78e545fb2f8f2985a1d","ba7d7464da8e13722232c8f86273774054693681becc450a68aea21a5a0e9b91","ba87e5d43ddb10937bb17941f055f80a223d0981fbba44107aeec8530e3a7774","bac3431138e986d6426c1e81bdfe0a968394896c0751cbbcc8f36002fd0ed069","bb230236c4ab6353afb4147014c93204d3d1eb8a6d18558075df5fe79ed7f392","bd714f38c881208f1190ad714bf8fa5aa63adf302bdaa8ad8810ff279e43459e","be75cc1ee935f783be39978de91ae196c16141d4096e16eb6d07f59583296b4b","be8c3cb2d8d67e63c8b069920b74c6272922febbc6a0a2c4a0072a7a213681d2","beed0f36d9b1b9a20bfbf89c96862482b8d5b9d4284bc89539efe9c9b11f000d","bfd21b5c8eb26e9d475868bb30d66ee08f20876e9df5cd06aa8fec01ffe666df","bfe97e65f2cbe6bcd0f14ff57ea4dc1dedb2e5f0db92d04d0982cf1932ac1c3e","c112d36ba38c362da1c022945db5b6bbdc3014685ca9bb7d940f5086f00a675c","c23cf45c1dcb748145d87f5c173dd3c8becaf9e3f6fdcb3e2ca91d6726b0842a","c29b8d250a7b5e73f4ef675329da2251b8de032501e4836445b6aafd90c645fa","c329c9df0dae8a036da9be440432d045be3ee13cf5664cfa6ccf11576ed11acb","c4600cd5358b5798a075beb54539d952f200def1c9a573bd237c795fd33ba36f","c6752cc3c7ad06d1e9f127365f078919ac46b77f8a8fe413650094d914838ec3","c6867ec30530fd3feca89a4e968522f783b636b165ef74f288c42dd50bd51a3d","c6bfbb004af355e96ed5b4c8c9b8b7a96d1c08d24bcde7c666728eb9497d6d71","c8bd340e6fc7fa3e97415f7ad4c22c51d88c6e77f782c12923e841c04d3f882b","cc24c3770587f2421514fa399d2617201752bdca145ac39058de91d45d3d19c1","cd2da00f6f1bad8fb7c1b87cff80e122eb017e44a471cdea769efc67db369038","ce887fb65b6977a2046e7583d704863624e55909ebcc9c3ed065b3d13079a410","cf9223c369b6fb7baa52f301f904352ba8e8d5e4c2a06f70de6ef1cf76fe1b84","cfc3b5044af37ae7485fba8067dcb22b2438bdaa6e3a30c22ce0f9e2c00aa597","d0481d9b6111ab4afba0462e88970b863284807ff44ca97364c84952e3f88583","d0973a1aca6a118375b466d6e91821f8450110fdf042ac848ee16912012d2b0f","d0df3068db679e24d9487ee09a6462ac5cf3df30f46ee466b66feb6dd5ff71e2","d227e0a73e3c5452bc5ab41ea2c695dfc0ff9b0c1c81e59ab3173f796a4157cf","d2cba4dbbfe3d026f825a8b470a2f6011f9b8e245cf042ae8889afbb17dac6b2","d2e4c515093f8a2aa824c8b542a016e5c321065f4525931b2fac4f8af2fe52c6","d31e8aa21d1498f2d4a07c4cc89ea6f5a6d3ce54d334dbff230e0f55db35c85e","d37de74aadd5916eeae243decf347821c4e946356b9f70471658638ac3092f91","d49d02cad8bbfeac607457b08aac6068916ef45d8f6c980279d6e654407cc7be","d4f51c31a454d9abac29457cbbc21e1b5767c0eac1b37c41ee787a3efb05c80f","d5c084e12da4a5111487c166b879042a21a056f761ee22d9237cb4f65f366341","d6077d547aa21ea10a9bdf6c752b8d1a0a6382b4b43a0fdf790f245e66a609fc","d67e8c1aaab1ce6ec1755599ecde153c47c6b90dd4c301663abe9057bc31af57","d6abcc1484c3df45bde915abf48324af1e995c3266a3c6c069e98e94c8d9a4d7","d8ca8e025e226ad6bdd32a6a9fceae2982b0413a0ad09314558b54bdc724bf99","d8d03142030c11a0aa1012102fce2b202baf88e424a1236832937e87450dc579","d9823dfddf6c507ec030fce4bd2d98fbda18e595c2ebc563574d9196cc7a5e33","d9b0972f3406075b860ba7cd2e71d4492c826960319b10389c2c2820e2981254","da37a61fab07ec8856b725854e4064f55a59149aa69cad1bcbf89ec478b9f578","dad01e5bfb13a6c4419f4d24fa8dbb424e93a1c4be656b0e5dd48ac546e0a0d9","db21a75b4fa6165f75268963474f3262124795d816ba80f685bab2c6eaedb028","dd97ab52fd89f42352c595ce137684cc519c473fa17969e8a6adcde7322a4748","dda0a34d6704887eb36bbc0173334b49d755cac8cea3bbd17bfa972f04183dd4","ddbda9408727a19a4a55d516bed99331edf67d8301de9c78564716465c949619","e0288c94ca9c16a6de217e6baeed720fcf83e401bec45bd15ca47ba8fc9b44dd","e1667469384ec775a3df665679cb3fef057dc84dcb18ed8db8b9c5723835968a","e16c328504278cfe520d6d99990f2a4370cc48159aba86694d0f7598fd4b0611","e24df071f5325bb3a5b20f355143556bc7712535ee8b6ce4c426598f06fd2448","e28d8e6b71264d0bfab853e63178f2c151367cce0dbd16125596ff3604b6658d","e2c734504d211580b4e6674eb1c7d31fb6fb730c037210c34c980a96f9098269","e3f19c383354cdf45311f92f00b90fed25dfba7e9892ab2f5f3aa4885876b75f","e409fbfe439455330c0fe003de860e30f7093cc3cc83a32f886c9b539a29f60b","e6300ee8e6c2c4ce6d7ab02b7b06fd1cabe3c5c52b99a6ea3ea8b5acd5092e0b","e734d068446591aba283d136c21b4fb0209f91352cb4fc6589bd651cdbfec163","e7a333109a7aaec2b71048868500c15e721900628eb48790dfeaa1fd4c2dabc3","e7c9175fbfd9fd84bed95d552bc0a439b07a233c3e91fb39ae2f23197ee53f1b","ea1b8a251ecc1fd96697d0c602d3e14ec46383d27bb9485a0326cea5576ffacb","ea311dca2ef14e02b9aae563bb28dc737b04b7f01c1ceb2be3d92007d2c74ac6","ea8e5b79bbe5329ae8437677c8316f2f9fd75bb1d40c88308c269140a7e564c7","eb996138bc91c0ee63bafe1ba10b130ff5a2fc82aa4918296222e0a831a569fe","eba6e8e5a12a86f17fade41bef365aa95491c469e18aa91aef64908a4263c905","edc160a11c07dda8072748b66db7f27b6cd8efbd1faa3f6c826a0fe445859c17","edfcbe4773eac1fe2964179a4ad21294efede89568f2efd8e283ac18bc5693b1","f0f90dee84db760cc1bb0f6e6983d4de0e3d5d9f4adf7b2b52f0d3dbe6d585a4","f1d4a6e98f41ab3f6cfd67cddeab9d0ed287b92cb3dbe575e3ce61925510a792","f21c3a9267110e469f224ac7eb76ca5bb084fc90df014f1ca6791d5770483944","f379a1b9e29aa7fc25c4c0c897eaa3c0e90d66a201a0ade8cbf523a5cdc8cf50","f3e04891c79b604f9235f438adfa49ee27db43d25c7be0d1cc06ae53b8f6d2d8","f46904e701174fe2850798d9e1b077bdac42fcac01dbc385298da01118c82aa6","f53265f53af0b0856911ab08b373736964d0c443e8ba61d7f1d45f5e5b04edf3","f686173d310f41e26e3fe8a7c1dbf4313e4d793323335348badbcf4633f5d699","f704c9c9e2cab1ed44578f48d161320b5fb4384ecdd8b40a5e22c4078a8594da","f89156489d35f9992d5971a52a6e03a7d7f095e15c2c782e85efb1408a2bd6be","f99ef6fa3c9c6bf572ec69eb6eeea9f88ce6590d3a5565bec62b001b6f2a376a","fa2dfc22b4fdbcf402a822e8dd376925655d997a0f96284a60f10665ba3581ba","fa3df5f8349aec4805bbcd279b88697def63f2462d8ada0b5fe1d9983d9a6daa","fa6b97cbca1d4f09662e706293b0aec1eb76b8e2277441f54ab6c548b5423236","faac0c3fa7cdf67b452d407e9a1db5cbe1e9140ecfe300200b0b0a6279c97c66","fbc8b53b5c6f3727c084e5e0429e410a3fed5a17e1a0144692fd196d9836a4bb","fd04d7588bb9e6ca0a8b65ed0c9635082a9ee5f46b2d1b5b25866a072236c1fc","fd60f2a432086c6fc4a4c39d8d2d6edf5794c763c05a6401db2bb5fa2c601775","ff532716738e2fc716c10797d9717f324cca3a1234320a84a73a0b89569f11ab","ffd0fe3449e449c7b9fcdcc7e2c1ffb677e57ad935a252de88a0122d437efa67","ffde5c700732beac27a9b5162213d387422ce199400e56d9cefe550005b6a542"],"schema":"fsgg.atlas/1"} +{"records":["000ada42299601fba29016e5c0e0d4012876fb42670bb10fa0b1315477254ba4","00641d046d6869fdd0023ab3df99e0e67a6ea28f0dcb701f622b1cec8b3e07c6","026b08fb343aefe19177e95b759560d340d372def4b71acf613fefee3438ade2","0357495d23fac4fad210b6dd7ed7cc57dd33d107e1659a81f085cad78300797f","036c148f6d0e89858c9bf4cf380272ca6904bb4ca277a909fb71c47f5450cef7","04e404d89dca295564813149472b1de8e6c43357e2f6d91d169ded7600ed3a02","0509e5c6fdbd2dde0c0db8558647080560714804d00e4f9268342f2e84858a3d","06ad2c8aa0ff3b862edf3ba99e0e4e8801ee163709e66333cd06c3fc61232b05","0a6d7dc5b64970bfdadc9049ace95e8bc163fc421beea70129ff0eaa692c6d06","0ad4403c8f4078dbfa543310c69bd1dfc768e305987214ffc37d7b2600c4687c","0c22360d4653eb0f450e4d3d34564875f1660cfcb2d546095d98b3faa3967cbc","0da4d093b49c0a1f654b38008bb01195e816829279ca1989bd2448194e15361b","0e560af7d9dd2e0f2f588a74cd35512973747f20bdfe0bee0bc889105ea53dc9","0ea7107c2c8edaab3ff2bae32f63cfbef6903a51cdaff257278f757ed5ef429d","0eef4d717eb03f0906aa3be7336aa71f831726afabe8a56077b76f6e82fd08e1","11fe30832d93706c60efd836b09f35f049c4a715ad6144cf277ca240c5780704","1244d27db0cf5075353bcc622d0fb3b5ca6a7d08526e2c5754e8b745c250bf3f","155fe673b8ae12549c978e1bf1d5c43e360937fcf2135cdcd5aea6f6c771da44","1945f527afc3c2930ec4d7fa57ebb2ef7dd6321c0dd3ab9233c9963e9e613165","19d657b67672257ece127f3b957674b7fb4780843148db0a36a0b329c2a418ba","1a24f6ef0c08a898f309c1b925fc19b29526f913a61a1dfe4b1a4308ebdd97ac","1b5351b2dc647aba864e387168db5128435cb80da94fc42581cd60a05fc34b9a","1da011289116fe88fe92cb8f0e83ed7ccbbca251681d4e136c5a61c40364f8d3","1ec9445b242d2a2e149fe71c67bf13d8c0e4ebe5a6ed7b022656b9941973909d","1edc36731a9c76ad07d269d8b4fd84c8c956bb43d6f56de17d6208164856ffbe","20901b579f69cc97eb56b492938864667576e1c9bfacf13f8a529c4f6e543448","21338155cb4f52c49e5072c877771be67c75590d9b238ea025fba5209fd6e018","23af79bd1e7995fc8162ddc4d830318acb054bbfcc9c7d5cb141ec306da67386","24d4f2730d94d1b7f149771ef0e59192f4936d142b21f4a56b1a391e4514d38d","2591526ddabbea03fbdc38bf172bc54f42df9bc51eba7ad2b70d6e67215f08f1","26259abc7fe745f52e06f2aa2abb0e50f189bc7608065f04d5c669a0a99941cd","26290a0990d6dac0ce9448e05eb934210603356043dcf14a5d80585288e2aa92","26d6b31965013079d4db67a2c403e01f21e3c30ae65953400dbed92e289a0925","288daf614247c260cb673d8674e8b3874ccc4e269347836851f702d7ac8e2f7c","28abfaf6d50ca38af0b88aa50524200c17af9000da83ddbab3d8f9e06e020fa5","291d3db272eae084d34c04bc1305f2abb26a7e7acbc5515208469b46719a4ed1","2a38ddebfe3380232e35d5a24f9cb9f7c38abbc9c68add4ea5952c1e65d328d2","2c76ce93500601e281a41f5985fe4e3926fc8bc9d01ee687f14052cb553ad2d2","2d599c722a08306b98f2d833fb3e4a7acb9dea92e6a58820caa2f65c09803fb8","2ecd502add2d801eebed39411fadc9a80098ba9ce04a5f4b728a0e4e331232d6","2f7357367d921995f4c6fdaa693392adcd2df4860ef4d25c8dc47f7ddea8c755","2fb2ed7902a8e35dc36489a23245d963026d688008c92fed6fdc1f6bc27198a6","310bfb5b2d061bb733771e5cb7b3b7d25db43af5eda9f806169b7ef9330c2fe7","32f69a7b8997ae98b9305ee578145d795dbcd39ca4469bf2465e57a0295cda51","335683e33b94cb86b5e426b4faed200673bf850151191a08458136ceb164fd4e","3407ec53a884d3945d86a88d6b9a883419dd426e96b1108a8e6686f30397a629","34463778cf2d29e3896a65613cf9e3eb3e9f2d8946d17f12b609e70eec63d128","35da3938b72cf3520e126ad595157104b69ab748904c7b4e12f563d6b103172b","37c8908ea2a349cd3034018027160ad810b28ad1fc203a9a353971e1f7396b4c","37e39faee019bb041627510f1f02746ba9a85696417a083b438eb4974b72c2bf","38a75fd804821f4836f0a7ba8d41af3d3a3a5f5d7dcea68487009297824258d9","397476cf107b48e7a662264f8fea9f880231fd3d1e0401622650f214cfaa35c7","3ad8b0398ba6c354c9e31b7438b2515579fc0b1f17de4b35a914c862a3a11e3b","3b3c6cf083b12a840565e00458e2fd4ee8a61f97cda452703a6b13d7776b6c13","3b4af144afed3d52dd2e1f64e23bc25b3475eee5f7af3bde9886761b15c33dfd","3b5d82795e9f5d1992ab67e078fcf1108247ab9b6d1baeac944d3ec0294cec5d","3d0274f77576abdbdf442c8843e955e1bbc91e9f8cbfe3646b119337cdb13c96","3e2f66baa16c7ea936eba34720a55897438f60b343cbe8fda4eab1e5dde044eb","41c768ea17144c6ec225e9a65d4c3c127fdd7264dcba1a89aa17b20fd5d7e3ee","42aeb46fcc3d10b95e4067bc9cda875fa933b4102873f67c7bf1f8ca6799a598","4320b92712bc14dbe10b56f1cd3d1bdc093fc4be6016732839d0be4dd4d027d3","46cdf2c207f79d388001f6636dfb7a98bb2ba72b9d1c6df4938f0a27691e07a6","480f1ede18ae031b164d49d676feeb1090fb33932676ff52e1e2eb24e8d154cd","48797c44c92cb34fd9a57a08020b45c6920b2268dc8ad616c0f814a3710d5316","48d094622ada1806cb30335926007c1abc476b1f7b45a2e250c490afa25e847b","4a724a6a842a132c2185279513f341b79f9be93e42660f1255770eeae3b1323c","4c8c327dacf345e184042092e96ad3ea02ed4cece57dac5fa68ea52fbb5a6adf","4d5a44ba07fafeab823b54a21846269330ce35b4c190f3ddd5434bc8530d9b41","4da0a5be70e8af9c39623deac83822749482187f6a0fc3d186dcfddaa7111576","4f1e58fc658a4ceda181e2a7fa249305b09b573ffd68c2489f204f4957224957","4f2750b974c1404acb721ffc84cbd1d0756a24211dd6f6503c10ea74dbc45676","509ec9c08864b9dd0029f32ffeac85fbac863e2dad459994c65b7cb5264faffa","52049cc9cee43bb27229e6b3e983e02c6aa20dd7d153b13e3c74bc6d2b47cf92","5382c901d160ca2d79888d8acd7a690a5349826b5da486274b0800c9d7513f11","540879695d41205515aaabe5466971014cb43b960a26b8e5958e37fed63df762","5560616d1e72f0a539f9ebbfea3b7d195c1ef5622f97994af1963748d4f97533","556ee783d8e2e4ca50f656c095758be613983f904d998a6534fb155510114f21","55a4711e799294d06988ab4acf77eacd7d424123082bba3ec987dff0ae13999c","55ae095961d78a1514c4dd1e63d477c60179a8662571ab5a90abd3eb2b83eb10","56e7158313357bb145bd98c5f790e569be2203fb2601565a30091a597a7e7ff5","5962dd14d3923433cf723d698d1af19ac37a270b6e88445643fc56a646faab5b","5a2064cdf51026eed65457c05f34bec919b31d96d35c29498d298685965f0b5a","5b77bd6dfa81cc339e729e4195e258facbfeb64b9c680512f742e3fb1961fdd5","5c3527e43fe24c5aa171c6fa4a3de7fe5e78f2527aed0dd19cb21d154d43da21","5c79c77f00167ca140127b00f1a79e1ffac621e46fc461089594206a7df8d7cc","5d015880319af666943e68169ca906bf2f0c813d8bf2c5c0262aeb5a40366350","5f2a75b89983d1005a38afa2cabccc3a39f31989807120281d8505ffd564e0c6","5f4fa6dde5930fe1b42f805895f0f5fb135c2b3ff9830f2bd30ae7526a3295a1","630fdcff1f227b5baf5d10bd78ef0fde68791ac0cd8a15f65065f5cc4501b17b","63113617f2e4ee6b827a69bce6afb3949190a282f5feaaa9e2c9f82372623bb8","63544fa69b09916d52b305700eb9816305ff22b77162a44edd13897acea3a655","63a4394e689acf4a4762cfb4df691d05f923fdf592fd2f8ea41e6a54f98d1136","69ebfc7eb8427db3c5c59bdde652d0cb269426126f8540b1b58caa29ccf130e2","69edc4285578313d1dd2f914d69add075a7b354f7fba717606d1abe15292576b","6a34d9279cae58765d6ee4a980192c0e15f3ca217b9f1815861d472a281b3cf8","6c3c592efe9c684ada5661b8cc88a5c3f6e57c841db06b9e070687504cbf6236","6ce6d164c3e31463fb9e144fdf91413e55d077cfc4f25092bb02923fb538a84f","6e08a638e1e28020923effd4c65fc517dbe7b06100ff76cde74e427191503b84","6f3a7020233cd77cfe59eefec0a277f6dda323743c8d80e4e54a95cd3cbc23cf","6fccc6f0c5fa71c43211785dced8abd0f3295040eab56063f4e8d77f1c09b8ef","700cd21af9ed7e81900fad9d52de2fb11db48e64b038e4293168f85e5dd0e043","702d1dfa75e92a916a446429f474d4c296e6ea4e8c487995852d0525e8440659","704cf778db6086c3e282c81249fb0ef09c1d7c2043335ef74c7ecb69bb3e84ad","71ef1ed2d5e4bc7eebe7a73bb3e9423e5bc2f8319186380fe8b38334952d3b01","7256ba00af1cf759b95b7bf8ae3b9943f31349bd10a7652a26bb419b368d73a3","7369b339daca0fcf46ac7fe82d65ae95c75d7dbcaaae51209e6d90b6587a014e","73ec844fb3e2b9febd00ba37508b284fad141630f03cb9f74e36a195180f5054","7410de003c7b582e30470d1209eefc796a70c76fe8d61dd9ccfe01ecfa41310c","76bf5a9c126db6eb466287a7c0d823327ee9882a70eaaa6efb03d169b5dba808","781a64598efb2a11156f07271ba1c14c4f6b3d73aa2943b26eae02063df7af70","799abc1e8d381b8d97349479139985e383bb49179b5a80f39807cb35a3ee78ce","79faec494bdd6d098c9d2a9d8559f822938c6b2104188db95321d89e7a732979","7a032dbf0351aa32c77c8d187f7eb697500ff186c88c5946ecc15adc972246a6","7a134e7f1822183ed1c0ded720971539350feaaf92612761210cfc3ccdc55870","7aa52373f2721dd76fc8eeb3d6061794f27ea8d11e96bcb1ff25a97994a77d5c","7ad4ef4b8d3221758a9e7f9577750ee03f6cba11c8eae8bf25f74a3131bd21a2","7baa35131ece7ed9860607157d2531d4d70a061bdc9bb9876e20328f127cec53","7cbf970a11bdb91a40e248eee97ef789205910ebc913349698fc75ed35e82fdf","7d6133667f81aa66a98755d253ea43301b45ada338225df034d2ffdfc79829e7","7e89b59b456dde4bbbdbf8079665bd82c51d8e500018472981c15618b3893959","7ead0c68ffa0ced241af74dde58b3831343dff3f7eaab64bddb9954545b7ba12","7f8188b57ad3b0c28210c95954e5623376a4262dd5e75f002700c6094b8d6b6c","7f91dfc2ea1a3131c4090375db0f489c2a572e245ade6cda4ebd440446d6d60e","7fcb8cba3ed0ee9c342947aa88f0f699bb4f5c23244d21c6c739c9b66d7c6101","800060d7b4934508d0277f90a464e3112fd2fc99af4ef23825d09b0ff53f91c3","800a802a4ce9e597a102f0a566535c1f9f7adfc60c41af6bd2db4fb7fe3c0d0e","820c12fcbded9048a363b9e0ebbc48b24f85fd4a68131b5dfc1b19057bf09ddb","82c419e5de083e423330432c9d45c744043d1bccd8eeccb41e3014ce9ae3c32f","8343a4211a4d0ffdb320d5a4305174d85bb707d15dad978f6436297d022daa11","83a97b9ebb29f5cd014ef5e178970a601ee92c44678f05d1860b383c5f63b79d","85a962a7c23c14dff8d683e738b53f422221697b213cafeb616d3a172a6c4223","8629fddeb4f273b35df69d4d28923adc14eff59d919b1a495d1a68818137c561","872ab2b2d65fe685b91e355f5af051c85b79569ece16448160d01fef38039624","87f2b3634baa504f2ed9508c6cf6a47bbfb36214a177eb13d70d6a987706818c","88b615ef6a31bd9958e98b8ea522f49f0360ccac5d9fa8deb9e3ef3fe3147d9d","89cafbb20d6029656266d8cb0f85103fa519c8032598282fea58c94cc59c4125","89f2105745b3a7cfd30e7d7c598d6c8fdde0a599f30fd0db7382cba50412445e","8b3eec010d1eae43a28c88434f2410a751f790a9d6ec4a08e75e68c171629ab2","8cecfa09651c40be4d7c11c117c80e1911dc75bf6f1cc34be64706823cc024c3","8d250acd40c8a24ba0d51cc73e65bba6856509b5fbf4c7d7a435897a01c6e764","8df1420c27503370db9382f68a0af8d2b4d56f9dbc94b24ffae450a905083a79","8e7371228a726f381fb811d1d812c39917788a3df7e53dba1a3c364e755a0c03","8fae27ba5117e202afbd523b249fc454912571900fc909f5419b8ac96c773c44","902b958b4db7d8d8bf73a82a8aa86e5485b39477047c8ad60175d118fe31d987","91c9ced5e9ab8da897b7f69166a7d0bade5c58d511b42d60d5430d536da45d09","941f70c384905ab77cb9a88e2671301117e4df553da6fc7a09210710deb9b6ca","9442788fa51227044803f1d3efdfc1c2b2da372871a85f0f7a6bb3596a5c003f","947a1cdd43831936480167169d30334f818bb5d882650a3547827c05204af111","971f59cc197732d0c0b6b8aabbbefca4550fb8fb04f8522bdb4257c05a28848a","98a097d6ebb754334250dfd3ccc5f3dfaf5966524758cbfc9e10adf4a0229693","98c7e4bc2f05e9b4ca703db4a02347db7355a44f04e3a4003e26c46a56bded2c","9944d1a9674e555a41d31d069d136461eb06dd4052d40f2e4ea4368dd978e01b","9bbd03293bf53e9db51401d157b3eb2aa51e9c70449350e98b9a0a3fc9a684ce","9cf90b3aa59f3ca0e40fd9e1fec9703428752d63bded6b091d28f614c9ba99ae","9eb67ea41c5bcb9557ba51bbbd1b321a78f16335cadebbed848d8e6c1fc68bab","a0ff0d0bb3a3c801b637d091293f2eeaac68e934274e4116d298ba60ec3461cc","a1baa1f699fd4ce19e8ef6cdfe346e1b0be63e16d5c5cd5feddcccb16a62f269","a3c84d76be9d891812e795dd46470c2978dceeff928d729c0d5dd6def599923b","a64e8aee389ae696d0d4b045c0153092113fa522ed5a0fd9b5658b8418db4ded","a6c531ed9bbafabfdd649f3030daf2f24461163aaf99dc73bb24dddb77bbcb90","a7ff7302e668dcea1cd1db2241ff95c0d73534539bd03fdefebbfb57f60d3849","a8b4a33078335d2811bffb78eee49aab5fcb31597dae366d43e20c7f7800994b","a91a47fb4fa5c1b1a834fa602030e435ad641240e6ceeb99eeeab7341ca09dec","a91c8a1431a4120667cd523cf56bac004794fc5b8b24275ad2f9c8a15c75fba1","aa131e74e695292adab9f57b3ccc5a503a836dd4b95a3b2b107c69f35dba3637","acd7884bca46ea9422503cead985691da05cca25bd5ed52a199783cae7b8b01f","ae69fe306bf5db346ddfa4367cda24c95e44213baca27b0ee7d7167bcdd85af6","ae8c200dbcea29f43b29974cc247d70647c80d5d76385396f1c82ee9f669e2f1","aec13a075b84253397fb97e1c93a23e1aaee6d6bff2a9161bfd00a5b1d7611de","b09355a97e3aef396f681943b37a404a98fccc6bcb97781eddb2fc000d1d985d","b0ecfca0d114bae34ffa62ac3ea05159a4415fc6eb73ab1fcc4d79f657268f19","b25c41f19ba40e646fd9b6f82051ee4c38985539e445b26bd628eae98537df53","b262187aa66e8a97083bf7f79b91595bf7a4077abe7f8be5b00b4998f4579d20","b4091f93c3d96e36b0708f5dcd46e0e7a0a48f098036ccef6164e4a6429ed94c","b4093c67a9195ee7d28d2575e967ac80057b92339489c244243c7c504c669ff0","b44352445272089cf90967d4d413cf7009bed0ac19f3fa95cb831d5ebad081c3","b4ce73bea5219f1b27bffb36c6a9dee14447a710a8938db807770083db4552ac","b5102ef50e7d4ed1925af5a8b45192e737df02fafb75d7065995a2bb93d2e8e1","b5428b5775526a00645566822530fb969b82247ba83f2c80c06d34151e1f9061","b6cf3b02f36e0efa93b04667cdc5701340033a09e41a7196277cf6756999a666","b77c6669bcd54e0fa949faf2f7205f2631acfbc1ccf79f93f8dab5c5717f0e93","b7ffd6cddb12384224772e8de79aec89d8f4bca966a3c2a05763889f92a6db5c","b8abe10a2a92bf537a49e8dee92baf8de3ed591848a1b25151dab0d7ab3134e5","b96cea09313d481dfff1ed1a2c552ea29e8fe68f52139458996a4e36157748d2","b96f9beb6d6d8fbf88c4b8b2b807a362f2640479cab6173cf64c7710817785a0","b9ad2510d8249ec4c8e7fd8b2471727aa1bd0ce8f3dde78e545fb2f8f2985a1d","ba7d7464da8e13722232c8f86273774054693681becc450a68aea21a5a0e9b91","ba87e5d43ddb10937bb17941f055f80a223d0981fbba44107aeec8530e3a7774","bac3431138e986d6426c1e81bdfe0a968394896c0751cbbcc8f36002fd0ed069","bb230236c4ab6353afb4147014c93204d3d1eb8a6d18558075df5fe79ed7f392","bd714f38c881208f1190ad714bf8fa5aa63adf302bdaa8ad8810ff279e43459e","be75cc1ee935f783be39978de91ae196c16141d4096e16eb6d07f59583296b4b","be8c3cb2d8d67e63c8b069920b74c6272922febbc6a0a2c4a0072a7a213681d2","beed0f36d9b1b9a20bfbf89c96862482b8d5b9d4284bc89539efe9c9b11f000d","bfd21b5c8eb26e9d475868bb30d66ee08f20876e9df5cd06aa8fec01ffe666df","bfe97e65f2cbe6bcd0f14ff57ea4dc1dedb2e5f0db92d04d0982cf1932ac1c3e","c112d36ba38c362da1c022945db5b6bbdc3014685ca9bb7d940f5086f00a675c","c23cf45c1dcb748145d87f5c173dd3c8becaf9e3f6fdcb3e2ca91d6726b0842a","c29b8d250a7b5e73f4ef675329da2251b8de032501e4836445b6aafd90c645fa","c329c9df0dae8a036da9be440432d045be3ee13cf5664cfa6ccf11576ed11acb","c4600cd5358b5798a075beb54539d952f200def1c9a573bd237c795fd33ba36f","c6752cc3c7ad06d1e9f127365f078919ac46b77f8a8fe413650094d914838ec3","c6867ec30530fd3feca89a4e968522f783b636b165ef74f288c42dd50bd51a3d","c6bfbb004af355e96ed5b4c8c9b8b7a96d1c08d24bcde7c666728eb9497d6d71","c8bd340e6fc7fa3e97415f7ad4c22c51d88c6e77f782c12923e841c04d3f882b","cad13b6653fd9f811e67d13c5f01f9dec047f8c384097cee01dd2e2db39e539f","cc24c3770587f2421514fa399d2617201752bdca145ac39058de91d45d3d19c1","cd2da00f6f1bad8fb7c1b87cff80e122eb017e44a471cdea769efc67db369038","ce887fb65b6977a2046e7583d704863624e55909ebcc9c3ed065b3d13079a410","cf9223c369b6fb7baa52f301f904352ba8e8d5e4c2a06f70de6ef1cf76fe1b84","cfc3b5044af37ae7485fba8067dcb22b2438bdaa6e3a30c22ce0f9e2c00aa597","d0481d9b6111ab4afba0462e88970b863284807ff44ca97364c84952e3f88583","d0973a1aca6a118375b466d6e91821f8450110fdf042ac848ee16912012d2b0f","d0df3068db679e24d9487ee09a6462ac5cf3df30f46ee466b66feb6dd5ff71e2","d227e0a73e3c5452bc5ab41ea2c695dfc0ff9b0c1c81e59ab3173f796a4157cf","d2cba4dbbfe3d026f825a8b470a2f6011f9b8e245cf042ae8889afbb17dac6b2","d2e4c515093f8a2aa824c8b542a016e5c321065f4525931b2fac4f8af2fe52c6","d31e8aa21d1498f2d4a07c4cc89ea6f5a6d3ce54d334dbff230e0f55db35c85e","d37de74aadd5916eeae243decf347821c4e946356b9f70471658638ac3092f91","d49d02cad8bbfeac607457b08aac6068916ef45d8f6c980279d6e654407cc7be","d4f51c31a454d9abac29457cbbc21e1b5767c0eac1b37c41ee787a3efb05c80f","d5c084e12da4a5111487c166b879042a21a056f761ee22d9237cb4f65f366341","d6077d547aa21ea10a9bdf6c752b8d1a0a6382b4b43a0fdf790f245e66a609fc","d67e8c1aaab1ce6ec1755599ecde153c47c6b90dd4c301663abe9057bc31af57","d6abcc1484c3df45bde915abf48324af1e995c3266a3c6c069e98e94c8d9a4d7","d8ca8e025e226ad6bdd32a6a9fceae2982b0413a0ad09314558b54bdc724bf99","d8d03142030c11a0aa1012102fce2b202baf88e424a1236832937e87450dc579","d9823dfddf6c507ec030fce4bd2d98fbda18e595c2ebc563574d9196cc7a5e33","d9b0972f3406075b860ba7cd2e71d4492c826960319b10389c2c2820e2981254","da37a61fab07ec8856b725854e4064f55a59149aa69cad1bcbf89ec478b9f578","dad01e5bfb13a6c4419f4d24fa8dbb424e93a1c4be656b0e5dd48ac546e0a0d9","db21a75b4fa6165f75268963474f3262124795d816ba80f685bab2c6eaedb028","dd97ab52fd89f42352c595ce137684cc519c473fa17969e8a6adcde7322a4748","dda0a34d6704887eb36bbc0173334b49d755cac8cea3bbd17bfa972f04183dd4","ddbda9408727a19a4a55d516bed99331edf67d8301de9c78564716465c949619","e0288c94ca9c16a6de217e6baeed720fcf83e401bec45bd15ca47ba8fc9b44dd","e1667469384ec775a3df665679cb3fef057dc84dcb18ed8db8b9c5723835968a","e16c328504278cfe520d6d99990f2a4370cc48159aba86694d0f7598fd4b0611","e24df071f5325bb3a5b20f355143556bc7712535ee8b6ce4c426598f06fd2448","e28d8e6b71264d0bfab853e63178f2c151367cce0dbd16125596ff3604b6658d","e2c734504d211580b4e6674eb1c7d31fb6fb730c037210c34c980a96f9098269","e3f19c383354cdf45311f92f00b90fed25dfba7e9892ab2f5f3aa4885876b75f","e409fbfe439455330c0fe003de860e30f7093cc3cc83a32f886c9b539a29f60b","e6300ee8e6c2c4ce6d7ab02b7b06fd1cabe3c5c52b99a6ea3ea8b5acd5092e0b","e734d068446591aba283d136c21b4fb0209f91352cb4fc6589bd651cdbfec163","e7a333109a7aaec2b71048868500c15e721900628eb48790dfeaa1fd4c2dabc3","e7c9175fbfd9fd84bed95d552bc0a439b07a233c3e91fb39ae2f23197ee53f1b","ea1b8a251ecc1fd96697d0c602d3e14ec46383d27bb9485a0326cea5576ffacb","ea311dca2ef14e02b9aae563bb28dc737b04b7f01c1ceb2be3d92007d2c74ac6","ea8e5b79bbe5329ae8437677c8316f2f9fd75bb1d40c88308c269140a7e564c7","eb996138bc91c0ee63bafe1ba10b130ff5a2fc82aa4918296222e0a831a569fe","eba6e8e5a12a86f17fade41bef365aa95491c469e18aa91aef64908a4263c905","edc160a11c07dda8072748b66db7f27b6cd8efbd1faa3f6c826a0fe445859c17","edfcbe4773eac1fe2964179a4ad21294efede89568f2efd8e283ac18bc5693b1","f0f90dee84db760cc1bb0f6e6983d4de0e3d5d9f4adf7b2b52f0d3dbe6d585a4","f1d4a6e98f41ab3f6cfd67cddeab9d0ed287b92cb3dbe575e3ce61925510a792","f21c3a9267110e469f224ac7eb76ca5bb084fc90df014f1ca6791d5770483944","f379a1b9e29aa7fc25c4c0c897eaa3c0e90d66a201a0ade8cbf523a5cdc8cf50","f3e04891c79b604f9235f438adfa49ee27db43d25c7be0d1cc06ae53b8f6d2d8","f46904e701174fe2850798d9e1b077bdac42fcac01dbc385298da01118c82aa6","f53265f53af0b0856911ab08b373736964d0c443e8ba61d7f1d45f5e5b04edf3","f686173d310f41e26e3fe8a7c1dbf4313e4d793323335348badbcf4633f5d699","f704c9c9e2cab1ed44578f48d161320b5fb4384ecdd8b40a5e22c4078a8594da","f89156489d35f9992d5971a52a6e03a7d7f095e15c2c782e85efb1408a2bd6be","f99ef6fa3c9c6bf572ec69eb6eeea9f88ce6590d3a5565bec62b001b6f2a376a","fa2dfc22b4fdbcf402a822e8dd376925655d997a0f96284a60f10665ba3581ba","fa3df5f8349aec4805bbcd279b88697def63f2462d8ada0b5fe1d9983d9a6daa","fa6b97cbca1d4f09662e706293b0aec1eb76b8e2277441f54ab6c548b5423236","faac0c3fa7cdf67b452d407e9a1db5cbe1e9140ecfe300200b0b0a6279c97c66","fbc8b53b5c6f3727c084e5e0429e410a3fed5a17e1a0144692fd196d9836a4bb","fd04d7588bb9e6ca0a8b65ed0c9635082a9ee5f46b2d1b5b25866a072236c1fc","fd60f2a432086c6fc4a4c39d8d2d6edf5794c763c05a6401db2bb5fa2c601775","ff532716738e2fc716c10797d9717f324cca3a1234320a84a73a0b89569f11ab","ffd0fe3449e449c7b9fcdcc7e2c1ffb677e57ad935a252de88a0122d437efa67","ffde5c700732beac27a9b5162213d387422ce199400e56d9cefe550005b6a542"],"schema":"fsgg.atlas/1"} diff --git a/.claude/skills/atlas/assets/seed/records/7a134e7f1822183ed1c0ded720971539350feaaf92612761210cfc3ccdc55870.json b/.claude/skills/atlas/assets/seed/records/7a134e7f1822183ed1c0ded720971539350feaaf92612761210cfc3ccdc55870.json new file mode 100644 index 000000000..865c2a94e --- /dev/null +++ b/.claude/skills/atlas/assets/seed/records/7a134e7f1822183ed1c0ded720971539350feaaf92612761210cfc3ccdc55870.json @@ -0,0 +1 @@ +{"citations":[{"path":"src/FS.GG.Coord.Core/TelemetryStore.fs","repository":"FS-GG/.github","revision":"b88c95a24f20e207c35971583fcffde50a312761","sha256":"8032321c251a03662111e9965845360eb8fd92cda0ce9e220116a81cf4a7e4e2"},{"path":"src/FS.GG.Coord.Cli/SkillTelemetryReaders.fs","repository":"FS-GG/.github","revision":"b88c95a24f20e207c35971583fcffde50a312761","sha256":"a510716436479424894fbd4787ee545c9b37e4090644066310b55b3ada439b7d"},{"path":"src/FS.GG.Coord.Cli/SkillTelemetryAdapter.fs","repository":"FS-GG/.github","revision":"b88c95a24f20e207c35971583fcffde50a312761","sha256":"74d61ae2ce23b4e6fafd940ccd924374d4a8060db0c65693b2b69e69d840b857"},{"path":"src/FS.GG.Coord.Cli/WorkspaceTelemetryApplication.fs","repository":"FS-GG/.github","revision":"b88c95a24f20e207c35971583fcffde50a312761","sha256":"7c1c889ceb8022f66650623016e6e71493b0eba6dc755272a62800095c8ef150"},{"path":"src/FS.GG.Coord.Cli/TelemetryStoreApplication.fs","repository":"FS-GG/.github","revision":"b88c95a24f20e207c35971583fcffde50a312761","sha256":"a5f58e3f9b1abe519642fb906c47fd04a1bf50481b49876680a87f208ab1ac86"},{"path":"src/FS.GG.Coord.Cli/TelemetryApplication.fs","repository":"FS-GG/.github","revision":"b88c95a24f20e207c35971583fcffde50a312761","sha256":"fdfa123c0175440004e239ebd49046684c687538cd02269504ac60c84245ff8b"}],"conflictsWith":[],"id":"contract/passive-native-usage-observations","kind":"contract","recordedAt":"2026-10-18T09:33:18Z","repository":"FS-GG/.github","schema":"fsgg.atlas/1","status":"recorded","summary":"At the cited prospective 0.106 source candidate, explicit selected Codex rollout files share the maintained strict native decoder, including recursive duplicate-property and strict UTF8 refusal, and project actual optional response counters through provider-usage-observation/1. Item, inventory and terminal attribution stay unknown/partial; these canonical-only facts never enter qualified item totals. Stable native thread/turn/response identities, a finite serialized producer index, private pending intent and existing immutable spool retain corrections and exact replay. Local enqueue/reporting make no receiver or App Server call. Initial capture-only setup skips credential presence and reports receiver unverified. Same-owner state cloning/migration is unsupported without original state/fence reconciliation; one selected association root is the supported ownership boundary.\n\nReceiver admission refuses cross-owner changes. A complete bounded drain census retains the earliest pending head for each structural scope/source/generation, fencing numeric successors behind uncertain or durable-but-not-applied receipts. Candidate scheduling rotates eligible independent heads and ordinary traffic through the existing sixteen-envelope quantum with one private advisory cursor of at most 256 bytes. The cursor advances under the configuration lock immediately before each actual head attempt, rather than skipping a whole selected quantum. Expired shared deadline/cancellation stops new head attempts; canceled lookup cannot proceed to Submit. Missing/invalid cursor state resets deterministic order. Cursor crashes affect ordering only; queued bytes, receipts and authority remain unchanged. No fixed elapsed-time or eight-pass service guarantee follows; transport timeouts and exact-source tests remain separate.\n\nUnsupported/rejected passive data remains pending. Full qualification of this unified source, publication, installed producer capture, compatible receiver Host/store and restart/restore durability remain unaccepted here. Host is independently versioned; first useful isolated candidate capture does not wait on Home access or Host deployment. Published/installed 0.105 and the accepted board binding stay unchanged. Earlier records and original failures/Unknown operations remain retained with no replay or reservation release.","supersedes":["7aa52373f2721dd76fc8eeb3d6061794f27ea8d11e96bcb1ff25a97994a77d5c"],"tags":["telemetry","passive","native","capture","attribution","delivery","corrections"],"title":"Passive native responses separate capture, attribution and delivery"} diff --git a/.claude/skills/atlas/assets/seed/records/cad13b6653fd9f811e67d13c5f01f9dec047f8c384097cee01dd2e2db39e539f.json b/.claude/skills/atlas/assets/seed/records/cad13b6653fd9f811e67d13c5f01f9dec047f8c384097cee01dd2e2db39e539f.json new file mode 100644 index 000000000..e9b74e3b1 --- /dev/null +++ b/.claude/skills/atlas/assets/seed/records/cad13b6653fd9f811e67d13c5f01f9dec047f8c384097cee01dd2e2db39e539f.json @@ -0,0 +1 @@ +{"citations":[{"path":".agents/skills/work-programme/SKILL.md","repository":"FS-GG/.github","revision":"2530ffc1e401da111b5b32a4f93c211bcc2c193e","sha256":"f5562f5010d96a74fe03fecd965f743a523cedd8fbfb0491482f84acba662230"}],"conflictsWith":[],"id":"platform/executable-qualification-and-final-assembly","kind":"lesson","recordedAt":"2026-10-18T09:36:18Z","repository":"FS-GG/.github","schema":"fsgg.atlas/1","status":"recorded","summary":"Before costly qualification, verify that the maintained runner actually invokes the changed assertions and that negative controls fail through that same route; compile success or a zero-test invocation does not establish executable coverage. Assemble compatible source, version, Atlas and delivery-closure changes and reconcile the intended final base before the expensive full run. Defer reporting-only followups when they would invalidate that qualification; this is not a blanket main freeze or permission to bypass required checks. Existing forward recovery retains unavailable original outcomes and reservations as Unknown without repeated unavailable-history searches. Source guidance delivery remains distinct from installed skill adoption and measured process benefit.","supersedes":[],"tags":["qualification","coverage","delivery","process","recovery"],"title":"Verify executable coverage early and assemble compatible changes before costly qualification"} diff --git a/.claude/skills/publishing-and-deployment/SKILL.md b/.claude/skills/publishing-and-deployment/SKILL.md index f1a6830df..46ca8d704 100644 --- a/.claude/skills/publishing-and-deployment/SKILL.md +++ b/.claude/skills/publishing-and-deployment/SKILL.md @@ -34,7 +34,7 @@ Registry release inventory: 18 package-bearing contracts across 9 producers; 16 | `game` | `game-scene-adapter` | `0.17.0` | `0.17.0` | `game:0.17.0` | FS.GG.Game.Render package — Adapter (sim-state -> FS.GG.UI.Scene drawables) | | `audio` | `fs-gg-audio` | `0.6.0` | `0.6.0` | `audio:0.6.0` | FS.GG.Audio.Core/.Host/.Engine/.Elmish/.WebBrowser public .fsi surfaces — AudioEffect vocabulary + IAudioBackend/IMixingBackend seam + mixing Engine + Audio.Cmd Elmish bridge + browser Web Audio host | | `net` | `fs-gg-net` | `0.6.0` | `0.6.0` | `net:0.6.0` | FS.GG.Net.Core/.WebSocket/.WebSocket.Server/.Protobuf/.Grpc/.Elmish public .fsi surfaces — ITransport/IMessageChannel seam + Sequential/Multiplexed correlation + serve/ServerEcho + WebSocket client/server transport + Google.Protobuf/protobuf-net codecs + gRPC lifecycle bridge + Elmish Cmd/Sub | -| `github` | `coord-engine` | `0.105.0` | `0.105.0` | `github:0.105.0` | the `fsgg-coord-engine` CLI verb surface (claim/take/batch/who/widen/set-paths/say/landable/done/release/flush/…) + its exit-code contract, emitted from src/FS.GG.Coord.Core/Protocol.fs; shipped as the FS.GG.Coord.Cli dotnet tool | +| `github` | `coord-engine` | `0.106.0` | `0.105.0` | `github:0.105.0` | the `fsgg-coord-engine` CLI verb surface (claim/take/batch/who/widen/set-paths/say/landable/done/release/flush/…) + its exit-code contract, emitted from src/FS.GG.Coord.Core/Protocol.fs; shipped as the FS.GG.Coord.Cli dotnet tool | | `github` | `telemetry-host` | `0.5.0` | `0.5.0` | `github:0.5.0` | optional Linux x64 FS.GG.Telemetry.Host dotnet tool — authenticated workspace-scoped ingestion, private dashboard, protected native capture and bounded learning export; independently versioned from the github coordination coherent set | | `github` | `new-sdd-workspace` | `0.16.0` | `0.16.0` | `github:0.16.0` | the `new-sdd-workspace` scaffolder CLI (package FS.GG.NewSddWorkspace) — one-command full-stack SDD workspace creation, wrapping the FS.GG.Templates `rendering` provider (ADR-0016); shipped as a dotnet tool | | `templates` | `fs-gg-workspace-template` | `0.19.0` | `0.19.0` | `templates:0.19.0` | FS.GG.Workspace.Template package, eight template configurations and seven `dotnet new` selectors: workspace-provider identities — `fs-gg-console` (provider `console` — minimal F# executable, no npm lane, ADR-0072 §2); `fs-gg-web` (provider `web` — F# ASP.NET Core + plain TypeScript/Vite website, ADR-0071 §3); `fs-gg-fable-game` (provider `fable-game` — F# ASP.NET Core + Fable/Elmish game client, SignalR for connection-oriented real-time traffic + plain HTTP endpoints with explicit versioned DTOs for typed request/response per ADR-0073, consuming the published `fs-gg-game-core-fable-lockstep-v1` profile per ADR-0069); `fs-gg-fable-bindings` (provider `fable-bindings` — Fable interop library over an exactly pinned npm package/declaration closure, ADR-0072 §3, first proved by the unreleased EHotwagner/babylonjsBindings reference) — plus `fs-gg-governance`, the separately registered pre-existing governance overlay template folded into this package at the same rename; `fs-gg-project-knowledge` and `fs-gg-python` are also already packaged. The current and legacy fable-game configurations share one selector. | diff --git a/docs/architecture.md b/docs/architecture.md index 0ec472fb4..4822b6312 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -653,7 +653,7 @@ product's `FS.GG.UI.*` pin), which is a different axis from the template package | `game-scene-adapter` | FS.GG.Game | `0.17.0` | `0.17.0` | | `fs-gg-audio` | FS.GG.Audio | `0.6.0` | `0.6.0` | | `fs-gg-net` | FS.GG.Net | `0.6.0` | `0.6.0` | -| `coord-engine` | FS-GG/.github | `0.105.0` | `0.105.0` | +| `coord-engine` | FS-GG/.github | `0.106.0` | `0.105.0` | | `telemetry-host` | FS-GG/.github | `0.5.0` | `0.5.0` | | `new-sdd-workspace` | FS-GG/.github | `0.16.0` | `0.16.0` | | `fs-gg-workspace-template` | FS.GG.Templates | `0.19.0` | `0.19.0` | diff --git a/docs/atlas/catalog.json b/docs/atlas/catalog.json index 56a0d5fba..c63bdfe39 100644 --- a/docs/atlas/catalog.json +++ b/docs/atlas/catalog.json @@ -1 +1 @@ -{"records":["000ada42299601fba29016e5c0e0d4012876fb42670bb10fa0b1315477254ba4","00641d046d6869fdd0023ab3df99e0e67a6ea28f0dcb701f622b1cec8b3e07c6","026b08fb343aefe19177e95b759560d340d372def4b71acf613fefee3438ade2","0357495d23fac4fad210b6dd7ed7cc57dd33d107e1659a81f085cad78300797f","036c148f6d0e89858c9bf4cf380272ca6904bb4ca277a909fb71c47f5450cef7","04e404d89dca295564813149472b1de8e6c43357e2f6d91d169ded7600ed3a02","0509e5c6fdbd2dde0c0db8558647080560714804d00e4f9268342f2e84858a3d","06ad2c8aa0ff3b862edf3ba99e0e4e8801ee163709e66333cd06c3fc61232b05","0a6d7dc5b64970bfdadc9049ace95e8bc163fc421beea70129ff0eaa692c6d06","0ad4403c8f4078dbfa543310c69bd1dfc768e305987214ffc37d7b2600c4687c","0c22360d4653eb0f450e4d3d34564875f1660cfcb2d546095d98b3faa3967cbc","0da4d093b49c0a1f654b38008bb01195e816829279ca1989bd2448194e15361b","0e560af7d9dd2e0f2f588a74cd35512973747f20bdfe0bee0bc889105ea53dc9","0ea7107c2c8edaab3ff2bae32f63cfbef6903a51cdaff257278f757ed5ef429d","0eef4d717eb03f0906aa3be7336aa71f831726afabe8a56077b76f6e82fd08e1","11fe30832d93706c60efd836b09f35f049c4a715ad6144cf277ca240c5780704","1244d27db0cf5075353bcc622d0fb3b5ca6a7d08526e2c5754e8b745c250bf3f","155fe673b8ae12549c978e1bf1d5c43e360937fcf2135cdcd5aea6f6c771da44","1945f527afc3c2930ec4d7fa57ebb2ef7dd6321c0dd3ab9233c9963e9e613165","19d657b67672257ece127f3b957674b7fb4780843148db0a36a0b329c2a418ba","1a24f6ef0c08a898f309c1b925fc19b29526f913a61a1dfe4b1a4308ebdd97ac","1b5351b2dc647aba864e387168db5128435cb80da94fc42581cd60a05fc34b9a","1da011289116fe88fe92cb8f0e83ed7ccbbca251681d4e136c5a61c40364f8d3","1ec9445b242d2a2e149fe71c67bf13d8c0e4ebe5a6ed7b022656b9941973909d","1edc36731a9c76ad07d269d8b4fd84c8c956bb43d6f56de17d6208164856ffbe","20901b579f69cc97eb56b492938864667576e1c9bfacf13f8a529c4f6e543448","21338155cb4f52c49e5072c877771be67c75590d9b238ea025fba5209fd6e018","23af79bd1e7995fc8162ddc4d830318acb054bbfcc9c7d5cb141ec306da67386","24d4f2730d94d1b7f149771ef0e59192f4936d142b21f4a56b1a391e4514d38d","2591526ddabbea03fbdc38bf172bc54f42df9bc51eba7ad2b70d6e67215f08f1","26259abc7fe745f52e06f2aa2abb0e50f189bc7608065f04d5c669a0a99941cd","26290a0990d6dac0ce9448e05eb934210603356043dcf14a5d80585288e2aa92","26d6b31965013079d4db67a2c403e01f21e3c30ae65953400dbed92e289a0925","288daf614247c260cb673d8674e8b3874ccc4e269347836851f702d7ac8e2f7c","28abfaf6d50ca38af0b88aa50524200c17af9000da83ddbab3d8f9e06e020fa5","291d3db272eae084d34c04bc1305f2abb26a7e7acbc5515208469b46719a4ed1","2a38ddebfe3380232e35d5a24f9cb9f7c38abbc9c68add4ea5952c1e65d328d2","2c76ce93500601e281a41f5985fe4e3926fc8bc9d01ee687f14052cb553ad2d2","2d599c722a08306b98f2d833fb3e4a7acb9dea92e6a58820caa2f65c09803fb8","2ecd502add2d801eebed39411fadc9a80098ba9ce04a5f4b728a0e4e331232d6","2f7357367d921995f4c6fdaa693392adcd2df4860ef4d25c8dc47f7ddea8c755","2fb2ed7902a8e35dc36489a23245d963026d688008c92fed6fdc1f6bc27198a6","310bfb5b2d061bb733771e5cb7b3b7d25db43af5eda9f806169b7ef9330c2fe7","32f69a7b8997ae98b9305ee578145d795dbcd39ca4469bf2465e57a0295cda51","335683e33b94cb86b5e426b4faed200673bf850151191a08458136ceb164fd4e","3407ec53a884d3945d86a88d6b9a883419dd426e96b1108a8e6686f30397a629","34463778cf2d29e3896a65613cf9e3eb3e9f2d8946d17f12b609e70eec63d128","35da3938b72cf3520e126ad595157104b69ab748904c7b4e12f563d6b103172b","37c8908ea2a349cd3034018027160ad810b28ad1fc203a9a353971e1f7396b4c","37e39faee019bb041627510f1f02746ba9a85696417a083b438eb4974b72c2bf","38a75fd804821f4836f0a7ba8d41af3d3a3a5f5d7dcea68487009297824258d9","397476cf107b48e7a662264f8fea9f880231fd3d1e0401622650f214cfaa35c7","3ad8b0398ba6c354c9e31b7438b2515579fc0b1f17de4b35a914c862a3a11e3b","3b3c6cf083b12a840565e00458e2fd4ee8a61f97cda452703a6b13d7776b6c13","3b4af144afed3d52dd2e1f64e23bc25b3475eee5f7af3bde9886761b15c33dfd","3b5d82795e9f5d1992ab67e078fcf1108247ab9b6d1baeac944d3ec0294cec5d","3d0274f77576abdbdf442c8843e955e1bbc91e9f8cbfe3646b119337cdb13c96","3e2f66baa16c7ea936eba34720a55897438f60b343cbe8fda4eab1e5dde044eb","41c768ea17144c6ec225e9a65d4c3c127fdd7264dcba1a89aa17b20fd5d7e3ee","42aeb46fcc3d10b95e4067bc9cda875fa933b4102873f67c7bf1f8ca6799a598","4320b92712bc14dbe10b56f1cd3d1bdc093fc4be6016732839d0be4dd4d027d3","46cdf2c207f79d388001f6636dfb7a98bb2ba72b9d1c6df4938f0a27691e07a6","480f1ede18ae031b164d49d676feeb1090fb33932676ff52e1e2eb24e8d154cd","48797c44c92cb34fd9a57a08020b45c6920b2268dc8ad616c0f814a3710d5316","48d094622ada1806cb30335926007c1abc476b1f7b45a2e250c490afa25e847b","4a724a6a842a132c2185279513f341b79f9be93e42660f1255770eeae3b1323c","4c8c327dacf345e184042092e96ad3ea02ed4cece57dac5fa68ea52fbb5a6adf","4d5a44ba07fafeab823b54a21846269330ce35b4c190f3ddd5434bc8530d9b41","4da0a5be70e8af9c39623deac83822749482187f6a0fc3d186dcfddaa7111576","4f1e58fc658a4ceda181e2a7fa249305b09b573ffd68c2489f204f4957224957","4f2750b974c1404acb721ffc84cbd1d0756a24211dd6f6503c10ea74dbc45676","509ec9c08864b9dd0029f32ffeac85fbac863e2dad459994c65b7cb5264faffa","52049cc9cee43bb27229e6b3e983e02c6aa20dd7d153b13e3c74bc6d2b47cf92","5382c901d160ca2d79888d8acd7a690a5349826b5da486274b0800c9d7513f11","540879695d41205515aaabe5466971014cb43b960a26b8e5958e37fed63df762","5560616d1e72f0a539f9ebbfea3b7d195c1ef5622f97994af1963748d4f97533","556ee783d8e2e4ca50f656c095758be613983f904d998a6534fb155510114f21","55a4711e799294d06988ab4acf77eacd7d424123082bba3ec987dff0ae13999c","55ae095961d78a1514c4dd1e63d477c60179a8662571ab5a90abd3eb2b83eb10","56e7158313357bb145bd98c5f790e569be2203fb2601565a30091a597a7e7ff5","5962dd14d3923433cf723d698d1af19ac37a270b6e88445643fc56a646faab5b","5a2064cdf51026eed65457c05f34bec919b31d96d35c29498d298685965f0b5a","5b77bd6dfa81cc339e729e4195e258facbfeb64b9c680512f742e3fb1961fdd5","5c3527e43fe24c5aa171c6fa4a3de7fe5e78f2527aed0dd19cb21d154d43da21","5c79c77f00167ca140127b00f1a79e1ffac621e46fc461089594206a7df8d7cc","5d015880319af666943e68169ca906bf2f0c813d8bf2c5c0262aeb5a40366350","5f2a75b89983d1005a38afa2cabccc3a39f31989807120281d8505ffd564e0c6","5f4fa6dde5930fe1b42f805895f0f5fb135c2b3ff9830f2bd30ae7526a3295a1","630fdcff1f227b5baf5d10bd78ef0fde68791ac0cd8a15f65065f5cc4501b17b","63113617f2e4ee6b827a69bce6afb3949190a282f5feaaa9e2c9f82372623bb8","63544fa69b09916d52b305700eb9816305ff22b77162a44edd13897acea3a655","63a4394e689acf4a4762cfb4df691d05f923fdf592fd2f8ea41e6a54f98d1136","69ebfc7eb8427db3c5c59bdde652d0cb269426126f8540b1b58caa29ccf130e2","69edc4285578313d1dd2f914d69add075a7b354f7fba717606d1abe15292576b","6a34d9279cae58765d6ee4a980192c0e15f3ca217b9f1815861d472a281b3cf8","6c3c592efe9c684ada5661b8cc88a5c3f6e57c841db06b9e070687504cbf6236","6ce6d164c3e31463fb9e144fdf91413e55d077cfc4f25092bb02923fb538a84f","6e08a638e1e28020923effd4c65fc517dbe7b06100ff76cde74e427191503b84","6f3a7020233cd77cfe59eefec0a277f6dda323743c8d80e4e54a95cd3cbc23cf","6fccc6f0c5fa71c43211785dced8abd0f3295040eab56063f4e8d77f1c09b8ef","700cd21af9ed7e81900fad9d52de2fb11db48e64b038e4293168f85e5dd0e043","702d1dfa75e92a916a446429f474d4c296e6ea4e8c487995852d0525e8440659","704cf778db6086c3e282c81249fb0ef09c1d7c2043335ef74c7ecb69bb3e84ad","71ef1ed2d5e4bc7eebe7a73bb3e9423e5bc2f8319186380fe8b38334952d3b01","7256ba00af1cf759b95b7bf8ae3b9943f31349bd10a7652a26bb419b368d73a3","7369b339daca0fcf46ac7fe82d65ae95c75d7dbcaaae51209e6d90b6587a014e","73ec844fb3e2b9febd00ba37508b284fad141630f03cb9f74e36a195180f5054","7410de003c7b582e30470d1209eefc796a70c76fe8d61dd9ccfe01ecfa41310c","76bf5a9c126db6eb466287a7c0d823327ee9882a70eaaa6efb03d169b5dba808","781a64598efb2a11156f07271ba1c14c4f6b3d73aa2943b26eae02063df7af70","799abc1e8d381b8d97349479139985e383bb49179b5a80f39807cb35a3ee78ce","79faec494bdd6d098c9d2a9d8559f822938c6b2104188db95321d89e7a732979","7a032dbf0351aa32c77c8d187f7eb697500ff186c88c5946ecc15adc972246a6","7aa52373f2721dd76fc8eeb3d6061794f27ea8d11e96bcb1ff25a97994a77d5c","7ad4ef4b8d3221758a9e7f9577750ee03f6cba11c8eae8bf25f74a3131bd21a2","7baa35131ece7ed9860607157d2531d4d70a061bdc9bb9876e20328f127cec53","7cbf970a11bdb91a40e248eee97ef789205910ebc913349698fc75ed35e82fdf","7d6133667f81aa66a98755d253ea43301b45ada338225df034d2ffdfc79829e7","7e89b59b456dde4bbbdbf8079665bd82c51d8e500018472981c15618b3893959","7ead0c68ffa0ced241af74dde58b3831343dff3f7eaab64bddb9954545b7ba12","7f8188b57ad3b0c28210c95954e5623376a4262dd5e75f002700c6094b8d6b6c","7f91dfc2ea1a3131c4090375db0f489c2a572e245ade6cda4ebd440446d6d60e","7fcb8cba3ed0ee9c342947aa88f0f699bb4f5c23244d21c6c739c9b66d7c6101","800060d7b4934508d0277f90a464e3112fd2fc99af4ef23825d09b0ff53f91c3","800a802a4ce9e597a102f0a566535c1f9f7adfc60c41af6bd2db4fb7fe3c0d0e","820c12fcbded9048a363b9e0ebbc48b24f85fd4a68131b5dfc1b19057bf09ddb","82c419e5de083e423330432c9d45c744043d1bccd8eeccb41e3014ce9ae3c32f","8343a4211a4d0ffdb320d5a4305174d85bb707d15dad978f6436297d022daa11","83a97b9ebb29f5cd014ef5e178970a601ee92c44678f05d1860b383c5f63b79d","85a962a7c23c14dff8d683e738b53f422221697b213cafeb616d3a172a6c4223","8629fddeb4f273b35df69d4d28923adc14eff59d919b1a495d1a68818137c561","872ab2b2d65fe685b91e355f5af051c85b79569ece16448160d01fef38039624","87f2b3634baa504f2ed9508c6cf6a47bbfb36214a177eb13d70d6a987706818c","88b615ef6a31bd9958e98b8ea522f49f0360ccac5d9fa8deb9e3ef3fe3147d9d","89cafbb20d6029656266d8cb0f85103fa519c8032598282fea58c94cc59c4125","89f2105745b3a7cfd30e7d7c598d6c8fdde0a599f30fd0db7382cba50412445e","8b3eec010d1eae43a28c88434f2410a751f790a9d6ec4a08e75e68c171629ab2","8cecfa09651c40be4d7c11c117c80e1911dc75bf6f1cc34be64706823cc024c3","8d250acd40c8a24ba0d51cc73e65bba6856509b5fbf4c7d7a435897a01c6e764","8df1420c27503370db9382f68a0af8d2b4d56f9dbc94b24ffae450a905083a79","8e7371228a726f381fb811d1d812c39917788a3df7e53dba1a3c364e755a0c03","8fae27ba5117e202afbd523b249fc454912571900fc909f5419b8ac96c773c44","902b958b4db7d8d8bf73a82a8aa86e5485b39477047c8ad60175d118fe31d987","91c9ced5e9ab8da897b7f69166a7d0bade5c58d511b42d60d5430d536da45d09","941f70c384905ab77cb9a88e2671301117e4df553da6fc7a09210710deb9b6ca","9442788fa51227044803f1d3efdfc1c2b2da372871a85f0f7a6bb3596a5c003f","947a1cdd43831936480167169d30334f818bb5d882650a3547827c05204af111","971f59cc197732d0c0b6b8aabbbefca4550fb8fb04f8522bdb4257c05a28848a","98a097d6ebb754334250dfd3ccc5f3dfaf5966524758cbfc9e10adf4a0229693","98c7e4bc2f05e9b4ca703db4a02347db7355a44f04e3a4003e26c46a56bded2c","9944d1a9674e555a41d31d069d136461eb06dd4052d40f2e4ea4368dd978e01b","9bbd03293bf53e9db51401d157b3eb2aa51e9c70449350e98b9a0a3fc9a684ce","9cf90b3aa59f3ca0e40fd9e1fec9703428752d63bded6b091d28f614c9ba99ae","9eb67ea41c5bcb9557ba51bbbd1b321a78f16335cadebbed848d8e6c1fc68bab","a0ff0d0bb3a3c801b637d091293f2eeaac68e934274e4116d298ba60ec3461cc","a1baa1f699fd4ce19e8ef6cdfe346e1b0be63e16d5c5cd5feddcccb16a62f269","a3c84d76be9d891812e795dd46470c2978dceeff928d729c0d5dd6def599923b","a64e8aee389ae696d0d4b045c0153092113fa522ed5a0fd9b5658b8418db4ded","a6c531ed9bbafabfdd649f3030daf2f24461163aaf99dc73bb24dddb77bbcb90","a7ff7302e668dcea1cd1db2241ff95c0d73534539bd03fdefebbfb57f60d3849","a8b4a33078335d2811bffb78eee49aab5fcb31597dae366d43e20c7f7800994b","a91a47fb4fa5c1b1a834fa602030e435ad641240e6ceeb99eeeab7341ca09dec","a91c8a1431a4120667cd523cf56bac004794fc5b8b24275ad2f9c8a15c75fba1","aa131e74e695292adab9f57b3ccc5a503a836dd4b95a3b2b107c69f35dba3637","acd7884bca46ea9422503cead985691da05cca25bd5ed52a199783cae7b8b01f","ae69fe306bf5db346ddfa4367cda24c95e44213baca27b0ee7d7167bcdd85af6","ae8c200dbcea29f43b29974cc247d70647c80d5d76385396f1c82ee9f669e2f1","aec13a075b84253397fb97e1c93a23e1aaee6d6bff2a9161bfd00a5b1d7611de","b09355a97e3aef396f681943b37a404a98fccc6bcb97781eddb2fc000d1d985d","b0ecfca0d114bae34ffa62ac3ea05159a4415fc6eb73ab1fcc4d79f657268f19","b25c41f19ba40e646fd9b6f82051ee4c38985539e445b26bd628eae98537df53","b262187aa66e8a97083bf7f79b91595bf7a4077abe7f8be5b00b4998f4579d20","b4091f93c3d96e36b0708f5dcd46e0e7a0a48f098036ccef6164e4a6429ed94c","b4093c67a9195ee7d28d2575e967ac80057b92339489c244243c7c504c669ff0","b44352445272089cf90967d4d413cf7009bed0ac19f3fa95cb831d5ebad081c3","b4ce73bea5219f1b27bffb36c6a9dee14447a710a8938db807770083db4552ac","b5102ef50e7d4ed1925af5a8b45192e737df02fafb75d7065995a2bb93d2e8e1","b5428b5775526a00645566822530fb969b82247ba83f2c80c06d34151e1f9061","b6cf3b02f36e0efa93b04667cdc5701340033a09e41a7196277cf6756999a666","b77c6669bcd54e0fa949faf2f7205f2631acfbc1ccf79f93f8dab5c5717f0e93","b7ffd6cddb12384224772e8de79aec89d8f4bca966a3c2a05763889f92a6db5c","b8abe10a2a92bf537a49e8dee92baf8de3ed591848a1b25151dab0d7ab3134e5","b96cea09313d481dfff1ed1a2c552ea29e8fe68f52139458996a4e36157748d2","b96f9beb6d6d8fbf88c4b8b2b807a362f2640479cab6173cf64c7710817785a0","b9ad2510d8249ec4c8e7fd8b2471727aa1bd0ce8f3dde78e545fb2f8f2985a1d","ba7d7464da8e13722232c8f86273774054693681becc450a68aea21a5a0e9b91","ba87e5d43ddb10937bb17941f055f80a223d0981fbba44107aeec8530e3a7774","bac3431138e986d6426c1e81bdfe0a968394896c0751cbbcc8f36002fd0ed069","bb230236c4ab6353afb4147014c93204d3d1eb8a6d18558075df5fe79ed7f392","bd714f38c881208f1190ad714bf8fa5aa63adf302bdaa8ad8810ff279e43459e","be75cc1ee935f783be39978de91ae196c16141d4096e16eb6d07f59583296b4b","be8c3cb2d8d67e63c8b069920b74c6272922febbc6a0a2c4a0072a7a213681d2","beed0f36d9b1b9a20bfbf89c96862482b8d5b9d4284bc89539efe9c9b11f000d","bfd21b5c8eb26e9d475868bb30d66ee08f20876e9df5cd06aa8fec01ffe666df","bfe97e65f2cbe6bcd0f14ff57ea4dc1dedb2e5f0db92d04d0982cf1932ac1c3e","c112d36ba38c362da1c022945db5b6bbdc3014685ca9bb7d940f5086f00a675c","c23cf45c1dcb748145d87f5c173dd3c8becaf9e3f6fdcb3e2ca91d6726b0842a","c29b8d250a7b5e73f4ef675329da2251b8de032501e4836445b6aafd90c645fa","c329c9df0dae8a036da9be440432d045be3ee13cf5664cfa6ccf11576ed11acb","c4600cd5358b5798a075beb54539d952f200def1c9a573bd237c795fd33ba36f","c6752cc3c7ad06d1e9f127365f078919ac46b77f8a8fe413650094d914838ec3","c6867ec30530fd3feca89a4e968522f783b636b165ef74f288c42dd50bd51a3d","c6bfbb004af355e96ed5b4c8c9b8b7a96d1c08d24bcde7c666728eb9497d6d71","c8bd340e6fc7fa3e97415f7ad4c22c51d88c6e77f782c12923e841c04d3f882b","cc24c3770587f2421514fa399d2617201752bdca145ac39058de91d45d3d19c1","cd2da00f6f1bad8fb7c1b87cff80e122eb017e44a471cdea769efc67db369038","ce887fb65b6977a2046e7583d704863624e55909ebcc9c3ed065b3d13079a410","cf9223c369b6fb7baa52f301f904352ba8e8d5e4c2a06f70de6ef1cf76fe1b84","cfc3b5044af37ae7485fba8067dcb22b2438bdaa6e3a30c22ce0f9e2c00aa597","d0481d9b6111ab4afba0462e88970b863284807ff44ca97364c84952e3f88583","d0973a1aca6a118375b466d6e91821f8450110fdf042ac848ee16912012d2b0f","d0df3068db679e24d9487ee09a6462ac5cf3df30f46ee466b66feb6dd5ff71e2","d227e0a73e3c5452bc5ab41ea2c695dfc0ff9b0c1c81e59ab3173f796a4157cf","d2cba4dbbfe3d026f825a8b470a2f6011f9b8e245cf042ae8889afbb17dac6b2","d2e4c515093f8a2aa824c8b542a016e5c321065f4525931b2fac4f8af2fe52c6","d31e8aa21d1498f2d4a07c4cc89ea6f5a6d3ce54d334dbff230e0f55db35c85e","d37de74aadd5916eeae243decf347821c4e946356b9f70471658638ac3092f91","d49d02cad8bbfeac607457b08aac6068916ef45d8f6c980279d6e654407cc7be","d4f51c31a454d9abac29457cbbc21e1b5767c0eac1b37c41ee787a3efb05c80f","d5c084e12da4a5111487c166b879042a21a056f761ee22d9237cb4f65f366341","d6077d547aa21ea10a9bdf6c752b8d1a0a6382b4b43a0fdf790f245e66a609fc","d67e8c1aaab1ce6ec1755599ecde153c47c6b90dd4c301663abe9057bc31af57","d6abcc1484c3df45bde915abf48324af1e995c3266a3c6c069e98e94c8d9a4d7","d8ca8e025e226ad6bdd32a6a9fceae2982b0413a0ad09314558b54bdc724bf99","d8d03142030c11a0aa1012102fce2b202baf88e424a1236832937e87450dc579","d9823dfddf6c507ec030fce4bd2d98fbda18e595c2ebc563574d9196cc7a5e33","d9b0972f3406075b860ba7cd2e71d4492c826960319b10389c2c2820e2981254","da37a61fab07ec8856b725854e4064f55a59149aa69cad1bcbf89ec478b9f578","dad01e5bfb13a6c4419f4d24fa8dbb424e93a1c4be656b0e5dd48ac546e0a0d9","db21a75b4fa6165f75268963474f3262124795d816ba80f685bab2c6eaedb028","dd97ab52fd89f42352c595ce137684cc519c473fa17969e8a6adcde7322a4748","dda0a34d6704887eb36bbc0173334b49d755cac8cea3bbd17bfa972f04183dd4","ddbda9408727a19a4a55d516bed99331edf67d8301de9c78564716465c949619","e0288c94ca9c16a6de217e6baeed720fcf83e401bec45bd15ca47ba8fc9b44dd","e1667469384ec775a3df665679cb3fef057dc84dcb18ed8db8b9c5723835968a","e16c328504278cfe520d6d99990f2a4370cc48159aba86694d0f7598fd4b0611","e24df071f5325bb3a5b20f355143556bc7712535ee8b6ce4c426598f06fd2448","e28d8e6b71264d0bfab853e63178f2c151367cce0dbd16125596ff3604b6658d","e2c734504d211580b4e6674eb1c7d31fb6fb730c037210c34c980a96f9098269","e3f19c383354cdf45311f92f00b90fed25dfba7e9892ab2f5f3aa4885876b75f","e409fbfe439455330c0fe003de860e30f7093cc3cc83a32f886c9b539a29f60b","e6300ee8e6c2c4ce6d7ab02b7b06fd1cabe3c5c52b99a6ea3ea8b5acd5092e0b","e734d068446591aba283d136c21b4fb0209f91352cb4fc6589bd651cdbfec163","e7a333109a7aaec2b71048868500c15e721900628eb48790dfeaa1fd4c2dabc3","e7c9175fbfd9fd84bed95d552bc0a439b07a233c3e91fb39ae2f23197ee53f1b","ea1b8a251ecc1fd96697d0c602d3e14ec46383d27bb9485a0326cea5576ffacb","ea311dca2ef14e02b9aae563bb28dc737b04b7f01c1ceb2be3d92007d2c74ac6","ea8e5b79bbe5329ae8437677c8316f2f9fd75bb1d40c88308c269140a7e564c7","eb996138bc91c0ee63bafe1ba10b130ff5a2fc82aa4918296222e0a831a569fe","eba6e8e5a12a86f17fade41bef365aa95491c469e18aa91aef64908a4263c905","edc160a11c07dda8072748b66db7f27b6cd8efbd1faa3f6c826a0fe445859c17","edfcbe4773eac1fe2964179a4ad21294efede89568f2efd8e283ac18bc5693b1","f0f90dee84db760cc1bb0f6e6983d4de0e3d5d9f4adf7b2b52f0d3dbe6d585a4","f1d4a6e98f41ab3f6cfd67cddeab9d0ed287b92cb3dbe575e3ce61925510a792","f21c3a9267110e469f224ac7eb76ca5bb084fc90df014f1ca6791d5770483944","f379a1b9e29aa7fc25c4c0c897eaa3c0e90d66a201a0ade8cbf523a5cdc8cf50","f3e04891c79b604f9235f438adfa49ee27db43d25c7be0d1cc06ae53b8f6d2d8","f46904e701174fe2850798d9e1b077bdac42fcac01dbc385298da01118c82aa6","f53265f53af0b0856911ab08b373736964d0c443e8ba61d7f1d45f5e5b04edf3","f686173d310f41e26e3fe8a7c1dbf4313e4d793323335348badbcf4633f5d699","f704c9c9e2cab1ed44578f48d161320b5fb4384ecdd8b40a5e22c4078a8594da","f89156489d35f9992d5971a52a6e03a7d7f095e15c2c782e85efb1408a2bd6be","f99ef6fa3c9c6bf572ec69eb6eeea9f88ce6590d3a5565bec62b001b6f2a376a","fa2dfc22b4fdbcf402a822e8dd376925655d997a0f96284a60f10665ba3581ba","fa3df5f8349aec4805bbcd279b88697def63f2462d8ada0b5fe1d9983d9a6daa","fa6b97cbca1d4f09662e706293b0aec1eb76b8e2277441f54ab6c548b5423236","faac0c3fa7cdf67b452d407e9a1db5cbe1e9140ecfe300200b0b0a6279c97c66","fbc8b53b5c6f3727c084e5e0429e410a3fed5a17e1a0144692fd196d9836a4bb","fd04d7588bb9e6ca0a8b65ed0c9635082a9ee5f46b2d1b5b25866a072236c1fc","fd60f2a432086c6fc4a4c39d8d2d6edf5794c763c05a6401db2bb5fa2c601775","ff532716738e2fc716c10797d9717f324cca3a1234320a84a73a0b89569f11ab","ffd0fe3449e449c7b9fcdcc7e2c1ffb677e57ad935a252de88a0122d437efa67","ffde5c700732beac27a9b5162213d387422ce199400e56d9cefe550005b6a542"],"schema":"fsgg.atlas/1"} +{"records":["000ada42299601fba29016e5c0e0d4012876fb42670bb10fa0b1315477254ba4","00641d046d6869fdd0023ab3df99e0e67a6ea28f0dcb701f622b1cec8b3e07c6","026b08fb343aefe19177e95b759560d340d372def4b71acf613fefee3438ade2","0357495d23fac4fad210b6dd7ed7cc57dd33d107e1659a81f085cad78300797f","036c148f6d0e89858c9bf4cf380272ca6904bb4ca277a909fb71c47f5450cef7","04e404d89dca295564813149472b1de8e6c43357e2f6d91d169ded7600ed3a02","0509e5c6fdbd2dde0c0db8558647080560714804d00e4f9268342f2e84858a3d","06ad2c8aa0ff3b862edf3ba99e0e4e8801ee163709e66333cd06c3fc61232b05","0a6d7dc5b64970bfdadc9049ace95e8bc163fc421beea70129ff0eaa692c6d06","0ad4403c8f4078dbfa543310c69bd1dfc768e305987214ffc37d7b2600c4687c","0c22360d4653eb0f450e4d3d34564875f1660cfcb2d546095d98b3faa3967cbc","0da4d093b49c0a1f654b38008bb01195e816829279ca1989bd2448194e15361b","0e560af7d9dd2e0f2f588a74cd35512973747f20bdfe0bee0bc889105ea53dc9","0ea7107c2c8edaab3ff2bae32f63cfbef6903a51cdaff257278f757ed5ef429d","0eef4d717eb03f0906aa3be7336aa71f831726afabe8a56077b76f6e82fd08e1","11fe30832d93706c60efd836b09f35f049c4a715ad6144cf277ca240c5780704","1244d27db0cf5075353bcc622d0fb3b5ca6a7d08526e2c5754e8b745c250bf3f","155fe673b8ae12549c978e1bf1d5c43e360937fcf2135cdcd5aea6f6c771da44","1945f527afc3c2930ec4d7fa57ebb2ef7dd6321c0dd3ab9233c9963e9e613165","19d657b67672257ece127f3b957674b7fb4780843148db0a36a0b329c2a418ba","1a24f6ef0c08a898f309c1b925fc19b29526f913a61a1dfe4b1a4308ebdd97ac","1b5351b2dc647aba864e387168db5128435cb80da94fc42581cd60a05fc34b9a","1da011289116fe88fe92cb8f0e83ed7ccbbca251681d4e136c5a61c40364f8d3","1ec9445b242d2a2e149fe71c67bf13d8c0e4ebe5a6ed7b022656b9941973909d","1edc36731a9c76ad07d269d8b4fd84c8c956bb43d6f56de17d6208164856ffbe","20901b579f69cc97eb56b492938864667576e1c9bfacf13f8a529c4f6e543448","21338155cb4f52c49e5072c877771be67c75590d9b238ea025fba5209fd6e018","23af79bd1e7995fc8162ddc4d830318acb054bbfcc9c7d5cb141ec306da67386","24d4f2730d94d1b7f149771ef0e59192f4936d142b21f4a56b1a391e4514d38d","2591526ddabbea03fbdc38bf172bc54f42df9bc51eba7ad2b70d6e67215f08f1","26259abc7fe745f52e06f2aa2abb0e50f189bc7608065f04d5c669a0a99941cd","26290a0990d6dac0ce9448e05eb934210603356043dcf14a5d80585288e2aa92","26d6b31965013079d4db67a2c403e01f21e3c30ae65953400dbed92e289a0925","288daf614247c260cb673d8674e8b3874ccc4e269347836851f702d7ac8e2f7c","28abfaf6d50ca38af0b88aa50524200c17af9000da83ddbab3d8f9e06e020fa5","291d3db272eae084d34c04bc1305f2abb26a7e7acbc5515208469b46719a4ed1","2a38ddebfe3380232e35d5a24f9cb9f7c38abbc9c68add4ea5952c1e65d328d2","2c76ce93500601e281a41f5985fe4e3926fc8bc9d01ee687f14052cb553ad2d2","2d599c722a08306b98f2d833fb3e4a7acb9dea92e6a58820caa2f65c09803fb8","2ecd502add2d801eebed39411fadc9a80098ba9ce04a5f4b728a0e4e331232d6","2f7357367d921995f4c6fdaa693392adcd2df4860ef4d25c8dc47f7ddea8c755","2fb2ed7902a8e35dc36489a23245d963026d688008c92fed6fdc1f6bc27198a6","310bfb5b2d061bb733771e5cb7b3b7d25db43af5eda9f806169b7ef9330c2fe7","32f69a7b8997ae98b9305ee578145d795dbcd39ca4469bf2465e57a0295cda51","335683e33b94cb86b5e426b4faed200673bf850151191a08458136ceb164fd4e","3407ec53a884d3945d86a88d6b9a883419dd426e96b1108a8e6686f30397a629","34463778cf2d29e3896a65613cf9e3eb3e9f2d8946d17f12b609e70eec63d128","35da3938b72cf3520e126ad595157104b69ab748904c7b4e12f563d6b103172b","37c8908ea2a349cd3034018027160ad810b28ad1fc203a9a353971e1f7396b4c","37e39faee019bb041627510f1f02746ba9a85696417a083b438eb4974b72c2bf","38a75fd804821f4836f0a7ba8d41af3d3a3a5f5d7dcea68487009297824258d9","397476cf107b48e7a662264f8fea9f880231fd3d1e0401622650f214cfaa35c7","3ad8b0398ba6c354c9e31b7438b2515579fc0b1f17de4b35a914c862a3a11e3b","3b3c6cf083b12a840565e00458e2fd4ee8a61f97cda452703a6b13d7776b6c13","3b4af144afed3d52dd2e1f64e23bc25b3475eee5f7af3bde9886761b15c33dfd","3b5d82795e9f5d1992ab67e078fcf1108247ab9b6d1baeac944d3ec0294cec5d","3d0274f77576abdbdf442c8843e955e1bbc91e9f8cbfe3646b119337cdb13c96","3e2f66baa16c7ea936eba34720a55897438f60b343cbe8fda4eab1e5dde044eb","41c768ea17144c6ec225e9a65d4c3c127fdd7264dcba1a89aa17b20fd5d7e3ee","42aeb46fcc3d10b95e4067bc9cda875fa933b4102873f67c7bf1f8ca6799a598","4320b92712bc14dbe10b56f1cd3d1bdc093fc4be6016732839d0be4dd4d027d3","46cdf2c207f79d388001f6636dfb7a98bb2ba72b9d1c6df4938f0a27691e07a6","480f1ede18ae031b164d49d676feeb1090fb33932676ff52e1e2eb24e8d154cd","48797c44c92cb34fd9a57a08020b45c6920b2268dc8ad616c0f814a3710d5316","48d094622ada1806cb30335926007c1abc476b1f7b45a2e250c490afa25e847b","4a724a6a842a132c2185279513f341b79f9be93e42660f1255770eeae3b1323c","4c8c327dacf345e184042092e96ad3ea02ed4cece57dac5fa68ea52fbb5a6adf","4d5a44ba07fafeab823b54a21846269330ce35b4c190f3ddd5434bc8530d9b41","4da0a5be70e8af9c39623deac83822749482187f6a0fc3d186dcfddaa7111576","4f1e58fc658a4ceda181e2a7fa249305b09b573ffd68c2489f204f4957224957","4f2750b974c1404acb721ffc84cbd1d0756a24211dd6f6503c10ea74dbc45676","509ec9c08864b9dd0029f32ffeac85fbac863e2dad459994c65b7cb5264faffa","52049cc9cee43bb27229e6b3e983e02c6aa20dd7d153b13e3c74bc6d2b47cf92","5382c901d160ca2d79888d8acd7a690a5349826b5da486274b0800c9d7513f11","540879695d41205515aaabe5466971014cb43b960a26b8e5958e37fed63df762","5560616d1e72f0a539f9ebbfea3b7d195c1ef5622f97994af1963748d4f97533","556ee783d8e2e4ca50f656c095758be613983f904d998a6534fb155510114f21","55a4711e799294d06988ab4acf77eacd7d424123082bba3ec987dff0ae13999c","55ae095961d78a1514c4dd1e63d477c60179a8662571ab5a90abd3eb2b83eb10","56e7158313357bb145bd98c5f790e569be2203fb2601565a30091a597a7e7ff5","5962dd14d3923433cf723d698d1af19ac37a270b6e88445643fc56a646faab5b","5a2064cdf51026eed65457c05f34bec919b31d96d35c29498d298685965f0b5a","5b77bd6dfa81cc339e729e4195e258facbfeb64b9c680512f742e3fb1961fdd5","5c3527e43fe24c5aa171c6fa4a3de7fe5e78f2527aed0dd19cb21d154d43da21","5c79c77f00167ca140127b00f1a79e1ffac621e46fc461089594206a7df8d7cc","5d015880319af666943e68169ca906bf2f0c813d8bf2c5c0262aeb5a40366350","5f2a75b89983d1005a38afa2cabccc3a39f31989807120281d8505ffd564e0c6","5f4fa6dde5930fe1b42f805895f0f5fb135c2b3ff9830f2bd30ae7526a3295a1","630fdcff1f227b5baf5d10bd78ef0fde68791ac0cd8a15f65065f5cc4501b17b","63113617f2e4ee6b827a69bce6afb3949190a282f5feaaa9e2c9f82372623bb8","63544fa69b09916d52b305700eb9816305ff22b77162a44edd13897acea3a655","63a4394e689acf4a4762cfb4df691d05f923fdf592fd2f8ea41e6a54f98d1136","69ebfc7eb8427db3c5c59bdde652d0cb269426126f8540b1b58caa29ccf130e2","69edc4285578313d1dd2f914d69add075a7b354f7fba717606d1abe15292576b","6a34d9279cae58765d6ee4a980192c0e15f3ca217b9f1815861d472a281b3cf8","6c3c592efe9c684ada5661b8cc88a5c3f6e57c841db06b9e070687504cbf6236","6ce6d164c3e31463fb9e144fdf91413e55d077cfc4f25092bb02923fb538a84f","6e08a638e1e28020923effd4c65fc517dbe7b06100ff76cde74e427191503b84","6f3a7020233cd77cfe59eefec0a277f6dda323743c8d80e4e54a95cd3cbc23cf","6fccc6f0c5fa71c43211785dced8abd0f3295040eab56063f4e8d77f1c09b8ef","700cd21af9ed7e81900fad9d52de2fb11db48e64b038e4293168f85e5dd0e043","702d1dfa75e92a916a446429f474d4c296e6ea4e8c487995852d0525e8440659","704cf778db6086c3e282c81249fb0ef09c1d7c2043335ef74c7ecb69bb3e84ad","71ef1ed2d5e4bc7eebe7a73bb3e9423e5bc2f8319186380fe8b38334952d3b01","7256ba00af1cf759b95b7bf8ae3b9943f31349bd10a7652a26bb419b368d73a3","7369b339daca0fcf46ac7fe82d65ae95c75d7dbcaaae51209e6d90b6587a014e","73ec844fb3e2b9febd00ba37508b284fad141630f03cb9f74e36a195180f5054","7410de003c7b582e30470d1209eefc796a70c76fe8d61dd9ccfe01ecfa41310c","76bf5a9c126db6eb466287a7c0d823327ee9882a70eaaa6efb03d169b5dba808","781a64598efb2a11156f07271ba1c14c4f6b3d73aa2943b26eae02063df7af70","799abc1e8d381b8d97349479139985e383bb49179b5a80f39807cb35a3ee78ce","79faec494bdd6d098c9d2a9d8559f822938c6b2104188db95321d89e7a732979","7a032dbf0351aa32c77c8d187f7eb697500ff186c88c5946ecc15adc972246a6","7a134e7f1822183ed1c0ded720971539350feaaf92612761210cfc3ccdc55870","7aa52373f2721dd76fc8eeb3d6061794f27ea8d11e96bcb1ff25a97994a77d5c","7ad4ef4b8d3221758a9e7f9577750ee03f6cba11c8eae8bf25f74a3131bd21a2","7baa35131ece7ed9860607157d2531d4d70a061bdc9bb9876e20328f127cec53","7cbf970a11bdb91a40e248eee97ef789205910ebc913349698fc75ed35e82fdf","7d6133667f81aa66a98755d253ea43301b45ada338225df034d2ffdfc79829e7","7e89b59b456dde4bbbdbf8079665bd82c51d8e500018472981c15618b3893959","7ead0c68ffa0ced241af74dde58b3831343dff3f7eaab64bddb9954545b7ba12","7f8188b57ad3b0c28210c95954e5623376a4262dd5e75f002700c6094b8d6b6c","7f91dfc2ea1a3131c4090375db0f489c2a572e245ade6cda4ebd440446d6d60e","7fcb8cba3ed0ee9c342947aa88f0f699bb4f5c23244d21c6c739c9b66d7c6101","800060d7b4934508d0277f90a464e3112fd2fc99af4ef23825d09b0ff53f91c3","800a802a4ce9e597a102f0a566535c1f9f7adfc60c41af6bd2db4fb7fe3c0d0e","820c12fcbded9048a363b9e0ebbc48b24f85fd4a68131b5dfc1b19057bf09ddb","82c419e5de083e423330432c9d45c744043d1bccd8eeccb41e3014ce9ae3c32f","8343a4211a4d0ffdb320d5a4305174d85bb707d15dad978f6436297d022daa11","83a97b9ebb29f5cd014ef5e178970a601ee92c44678f05d1860b383c5f63b79d","85a962a7c23c14dff8d683e738b53f422221697b213cafeb616d3a172a6c4223","8629fddeb4f273b35df69d4d28923adc14eff59d919b1a495d1a68818137c561","872ab2b2d65fe685b91e355f5af051c85b79569ece16448160d01fef38039624","87f2b3634baa504f2ed9508c6cf6a47bbfb36214a177eb13d70d6a987706818c","88b615ef6a31bd9958e98b8ea522f49f0360ccac5d9fa8deb9e3ef3fe3147d9d","89cafbb20d6029656266d8cb0f85103fa519c8032598282fea58c94cc59c4125","89f2105745b3a7cfd30e7d7c598d6c8fdde0a599f30fd0db7382cba50412445e","8b3eec010d1eae43a28c88434f2410a751f790a9d6ec4a08e75e68c171629ab2","8cecfa09651c40be4d7c11c117c80e1911dc75bf6f1cc34be64706823cc024c3","8d250acd40c8a24ba0d51cc73e65bba6856509b5fbf4c7d7a435897a01c6e764","8df1420c27503370db9382f68a0af8d2b4d56f9dbc94b24ffae450a905083a79","8e7371228a726f381fb811d1d812c39917788a3df7e53dba1a3c364e755a0c03","8fae27ba5117e202afbd523b249fc454912571900fc909f5419b8ac96c773c44","902b958b4db7d8d8bf73a82a8aa86e5485b39477047c8ad60175d118fe31d987","91c9ced5e9ab8da897b7f69166a7d0bade5c58d511b42d60d5430d536da45d09","941f70c384905ab77cb9a88e2671301117e4df553da6fc7a09210710deb9b6ca","9442788fa51227044803f1d3efdfc1c2b2da372871a85f0f7a6bb3596a5c003f","947a1cdd43831936480167169d30334f818bb5d882650a3547827c05204af111","971f59cc197732d0c0b6b8aabbbefca4550fb8fb04f8522bdb4257c05a28848a","98a097d6ebb754334250dfd3ccc5f3dfaf5966524758cbfc9e10adf4a0229693","98c7e4bc2f05e9b4ca703db4a02347db7355a44f04e3a4003e26c46a56bded2c","9944d1a9674e555a41d31d069d136461eb06dd4052d40f2e4ea4368dd978e01b","9bbd03293bf53e9db51401d157b3eb2aa51e9c70449350e98b9a0a3fc9a684ce","9cf90b3aa59f3ca0e40fd9e1fec9703428752d63bded6b091d28f614c9ba99ae","9eb67ea41c5bcb9557ba51bbbd1b321a78f16335cadebbed848d8e6c1fc68bab","a0ff0d0bb3a3c801b637d091293f2eeaac68e934274e4116d298ba60ec3461cc","a1baa1f699fd4ce19e8ef6cdfe346e1b0be63e16d5c5cd5feddcccb16a62f269","a3c84d76be9d891812e795dd46470c2978dceeff928d729c0d5dd6def599923b","a64e8aee389ae696d0d4b045c0153092113fa522ed5a0fd9b5658b8418db4ded","a6c531ed9bbafabfdd649f3030daf2f24461163aaf99dc73bb24dddb77bbcb90","a7ff7302e668dcea1cd1db2241ff95c0d73534539bd03fdefebbfb57f60d3849","a8b4a33078335d2811bffb78eee49aab5fcb31597dae366d43e20c7f7800994b","a91a47fb4fa5c1b1a834fa602030e435ad641240e6ceeb99eeeab7341ca09dec","a91c8a1431a4120667cd523cf56bac004794fc5b8b24275ad2f9c8a15c75fba1","aa131e74e695292adab9f57b3ccc5a503a836dd4b95a3b2b107c69f35dba3637","acd7884bca46ea9422503cead985691da05cca25bd5ed52a199783cae7b8b01f","ae69fe306bf5db346ddfa4367cda24c95e44213baca27b0ee7d7167bcdd85af6","ae8c200dbcea29f43b29974cc247d70647c80d5d76385396f1c82ee9f669e2f1","aec13a075b84253397fb97e1c93a23e1aaee6d6bff2a9161bfd00a5b1d7611de","b09355a97e3aef396f681943b37a404a98fccc6bcb97781eddb2fc000d1d985d","b0ecfca0d114bae34ffa62ac3ea05159a4415fc6eb73ab1fcc4d79f657268f19","b25c41f19ba40e646fd9b6f82051ee4c38985539e445b26bd628eae98537df53","b262187aa66e8a97083bf7f79b91595bf7a4077abe7f8be5b00b4998f4579d20","b4091f93c3d96e36b0708f5dcd46e0e7a0a48f098036ccef6164e4a6429ed94c","b4093c67a9195ee7d28d2575e967ac80057b92339489c244243c7c504c669ff0","b44352445272089cf90967d4d413cf7009bed0ac19f3fa95cb831d5ebad081c3","b4ce73bea5219f1b27bffb36c6a9dee14447a710a8938db807770083db4552ac","b5102ef50e7d4ed1925af5a8b45192e737df02fafb75d7065995a2bb93d2e8e1","b5428b5775526a00645566822530fb969b82247ba83f2c80c06d34151e1f9061","b6cf3b02f36e0efa93b04667cdc5701340033a09e41a7196277cf6756999a666","b77c6669bcd54e0fa949faf2f7205f2631acfbc1ccf79f93f8dab5c5717f0e93","b7ffd6cddb12384224772e8de79aec89d8f4bca966a3c2a05763889f92a6db5c","b8abe10a2a92bf537a49e8dee92baf8de3ed591848a1b25151dab0d7ab3134e5","b96cea09313d481dfff1ed1a2c552ea29e8fe68f52139458996a4e36157748d2","b96f9beb6d6d8fbf88c4b8b2b807a362f2640479cab6173cf64c7710817785a0","b9ad2510d8249ec4c8e7fd8b2471727aa1bd0ce8f3dde78e545fb2f8f2985a1d","ba7d7464da8e13722232c8f86273774054693681becc450a68aea21a5a0e9b91","ba87e5d43ddb10937bb17941f055f80a223d0981fbba44107aeec8530e3a7774","bac3431138e986d6426c1e81bdfe0a968394896c0751cbbcc8f36002fd0ed069","bb230236c4ab6353afb4147014c93204d3d1eb8a6d18558075df5fe79ed7f392","bd714f38c881208f1190ad714bf8fa5aa63adf302bdaa8ad8810ff279e43459e","be75cc1ee935f783be39978de91ae196c16141d4096e16eb6d07f59583296b4b","be8c3cb2d8d67e63c8b069920b74c6272922febbc6a0a2c4a0072a7a213681d2","beed0f36d9b1b9a20bfbf89c96862482b8d5b9d4284bc89539efe9c9b11f000d","bfd21b5c8eb26e9d475868bb30d66ee08f20876e9df5cd06aa8fec01ffe666df","bfe97e65f2cbe6bcd0f14ff57ea4dc1dedb2e5f0db92d04d0982cf1932ac1c3e","c112d36ba38c362da1c022945db5b6bbdc3014685ca9bb7d940f5086f00a675c","c23cf45c1dcb748145d87f5c173dd3c8becaf9e3f6fdcb3e2ca91d6726b0842a","c29b8d250a7b5e73f4ef675329da2251b8de032501e4836445b6aafd90c645fa","c329c9df0dae8a036da9be440432d045be3ee13cf5664cfa6ccf11576ed11acb","c4600cd5358b5798a075beb54539d952f200def1c9a573bd237c795fd33ba36f","c6752cc3c7ad06d1e9f127365f078919ac46b77f8a8fe413650094d914838ec3","c6867ec30530fd3feca89a4e968522f783b636b165ef74f288c42dd50bd51a3d","c6bfbb004af355e96ed5b4c8c9b8b7a96d1c08d24bcde7c666728eb9497d6d71","c8bd340e6fc7fa3e97415f7ad4c22c51d88c6e77f782c12923e841c04d3f882b","cad13b6653fd9f811e67d13c5f01f9dec047f8c384097cee01dd2e2db39e539f","cc24c3770587f2421514fa399d2617201752bdca145ac39058de91d45d3d19c1","cd2da00f6f1bad8fb7c1b87cff80e122eb017e44a471cdea769efc67db369038","ce887fb65b6977a2046e7583d704863624e55909ebcc9c3ed065b3d13079a410","cf9223c369b6fb7baa52f301f904352ba8e8d5e4c2a06f70de6ef1cf76fe1b84","cfc3b5044af37ae7485fba8067dcb22b2438bdaa6e3a30c22ce0f9e2c00aa597","d0481d9b6111ab4afba0462e88970b863284807ff44ca97364c84952e3f88583","d0973a1aca6a118375b466d6e91821f8450110fdf042ac848ee16912012d2b0f","d0df3068db679e24d9487ee09a6462ac5cf3df30f46ee466b66feb6dd5ff71e2","d227e0a73e3c5452bc5ab41ea2c695dfc0ff9b0c1c81e59ab3173f796a4157cf","d2cba4dbbfe3d026f825a8b470a2f6011f9b8e245cf042ae8889afbb17dac6b2","d2e4c515093f8a2aa824c8b542a016e5c321065f4525931b2fac4f8af2fe52c6","d31e8aa21d1498f2d4a07c4cc89ea6f5a6d3ce54d334dbff230e0f55db35c85e","d37de74aadd5916eeae243decf347821c4e946356b9f70471658638ac3092f91","d49d02cad8bbfeac607457b08aac6068916ef45d8f6c980279d6e654407cc7be","d4f51c31a454d9abac29457cbbc21e1b5767c0eac1b37c41ee787a3efb05c80f","d5c084e12da4a5111487c166b879042a21a056f761ee22d9237cb4f65f366341","d6077d547aa21ea10a9bdf6c752b8d1a0a6382b4b43a0fdf790f245e66a609fc","d67e8c1aaab1ce6ec1755599ecde153c47c6b90dd4c301663abe9057bc31af57","d6abcc1484c3df45bde915abf48324af1e995c3266a3c6c069e98e94c8d9a4d7","d8ca8e025e226ad6bdd32a6a9fceae2982b0413a0ad09314558b54bdc724bf99","d8d03142030c11a0aa1012102fce2b202baf88e424a1236832937e87450dc579","d9823dfddf6c507ec030fce4bd2d98fbda18e595c2ebc563574d9196cc7a5e33","d9b0972f3406075b860ba7cd2e71d4492c826960319b10389c2c2820e2981254","da37a61fab07ec8856b725854e4064f55a59149aa69cad1bcbf89ec478b9f578","dad01e5bfb13a6c4419f4d24fa8dbb424e93a1c4be656b0e5dd48ac546e0a0d9","db21a75b4fa6165f75268963474f3262124795d816ba80f685bab2c6eaedb028","dd97ab52fd89f42352c595ce137684cc519c473fa17969e8a6adcde7322a4748","dda0a34d6704887eb36bbc0173334b49d755cac8cea3bbd17bfa972f04183dd4","ddbda9408727a19a4a55d516bed99331edf67d8301de9c78564716465c949619","e0288c94ca9c16a6de217e6baeed720fcf83e401bec45bd15ca47ba8fc9b44dd","e1667469384ec775a3df665679cb3fef057dc84dcb18ed8db8b9c5723835968a","e16c328504278cfe520d6d99990f2a4370cc48159aba86694d0f7598fd4b0611","e24df071f5325bb3a5b20f355143556bc7712535ee8b6ce4c426598f06fd2448","e28d8e6b71264d0bfab853e63178f2c151367cce0dbd16125596ff3604b6658d","e2c734504d211580b4e6674eb1c7d31fb6fb730c037210c34c980a96f9098269","e3f19c383354cdf45311f92f00b90fed25dfba7e9892ab2f5f3aa4885876b75f","e409fbfe439455330c0fe003de860e30f7093cc3cc83a32f886c9b539a29f60b","e6300ee8e6c2c4ce6d7ab02b7b06fd1cabe3c5c52b99a6ea3ea8b5acd5092e0b","e734d068446591aba283d136c21b4fb0209f91352cb4fc6589bd651cdbfec163","e7a333109a7aaec2b71048868500c15e721900628eb48790dfeaa1fd4c2dabc3","e7c9175fbfd9fd84bed95d552bc0a439b07a233c3e91fb39ae2f23197ee53f1b","ea1b8a251ecc1fd96697d0c602d3e14ec46383d27bb9485a0326cea5576ffacb","ea311dca2ef14e02b9aae563bb28dc737b04b7f01c1ceb2be3d92007d2c74ac6","ea8e5b79bbe5329ae8437677c8316f2f9fd75bb1d40c88308c269140a7e564c7","eb996138bc91c0ee63bafe1ba10b130ff5a2fc82aa4918296222e0a831a569fe","eba6e8e5a12a86f17fade41bef365aa95491c469e18aa91aef64908a4263c905","edc160a11c07dda8072748b66db7f27b6cd8efbd1faa3f6c826a0fe445859c17","edfcbe4773eac1fe2964179a4ad21294efede89568f2efd8e283ac18bc5693b1","f0f90dee84db760cc1bb0f6e6983d4de0e3d5d9f4adf7b2b52f0d3dbe6d585a4","f1d4a6e98f41ab3f6cfd67cddeab9d0ed287b92cb3dbe575e3ce61925510a792","f21c3a9267110e469f224ac7eb76ca5bb084fc90df014f1ca6791d5770483944","f379a1b9e29aa7fc25c4c0c897eaa3c0e90d66a201a0ade8cbf523a5cdc8cf50","f3e04891c79b604f9235f438adfa49ee27db43d25c7be0d1cc06ae53b8f6d2d8","f46904e701174fe2850798d9e1b077bdac42fcac01dbc385298da01118c82aa6","f53265f53af0b0856911ab08b373736964d0c443e8ba61d7f1d45f5e5b04edf3","f686173d310f41e26e3fe8a7c1dbf4313e4d793323335348badbcf4633f5d699","f704c9c9e2cab1ed44578f48d161320b5fb4384ecdd8b40a5e22c4078a8594da","f89156489d35f9992d5971a52a6e03a7d7f095e15c2c782e85efb1408a2bd6be","f99ef6fa3c9c6bf572ec69eb6eeea9f88ce6590d3a5565bec62b001b6f2a376a","fa2dfc22b4fdbcf402a822e8dd376925655d997a0f96284a60f10665ba3581ba","fa3df5f8349aec4805bbcd279b88697def63f2462d8ada0b5fe1d9983d9a6daa","fa6b97cbca1d4f09662e706293b0aec1eb76b8e2277441f54ab6c548b5423236","faac0c3fa7cdf67b452d407e9a1db5cbe1e9140ecfe300200b0b0a6279c97c66","fbc8b53b5c6f3727c084e5e0429e410a3fed5a17e1a0144692fd196d9836a4bb","fd04d7588bb9e6ca0a8b65ed0c9635082a9ee5f46b2d1b5b25866a072236c1fc","fd60f2a432086c6fc4a4c39d8d2d6edf5794c763c05a6401db2bb5fa2c601775","ff532716738e2fc716c10797d9717f324cca3a1234320a84a73a0b89569f11ab","ffd0fe3449e449c7b9fcdcc7e2c1ffb677e57ad935a252de88a0122d437efa67","ffde5c700732beac27a9b5162213d387422ce199400e56d9cefe550005b6a542"],"schema":"fsgg.atlas/1"} diff --git a/docs/atlas/records/7a134e7f1822183ed1c0ded720971539350feaaf92612761210cfc3ccdc55870.json b/docs/atlas/records/7a134e7f1822183ed1c0ded720971539350feaaf92612761210cfc3ccdc55870.json new file mode 100644 index 000000000..865c2a94e --- /dev/null +++ b/docs/atlas/records/7a134e7f1822183ed1c0ded720971539350feaaf92612761210cfc3ccdc55870.json @@ -0,0 +1 @@ +{"citations":[{"path":"src/FS.GG.Coord.Core/TelemetryStore.fs","repository":"FS-GG/.github","revision":"b88c95a24f20e207c35971583fcffde50a312761","sha256":"8032321c251a03662111e9965845360eb8fd92cda0ce9e220116a81cf4a7e4e2"},{"path":"src/FS.GG.Coord.Cli/SkillTelemetryReaders.fs","repository":"FS-GG/.github","revision":"b88c95a24f20e207c35971583fcffde50a312761","sha256":"a510716436479424894fbd4787ee545c9b37e4090644066310b55b3ada439b7d"},{"path":"src/FS.GG.Coord.Cli/SkillTelemetryAdapter.fs","repository":"FS-GG/.github","revision":"b88c95a24f20e207c35971583fcffde50a312761","sha256":"74d61ae2ce23b4e6fafd940ccd924374d4a8060db0c65693b2b69e69d840b857"},{"path":"src/FS.GG.Coord.Cli/WorkspaceTelemetryApplication.fs","repository":"FS-GG/.github","revision":"b88c95a24f20e207c35971583fcffde50a312761","sha256":"7c1c889ceb8022f66650623016e6e71493b0eba6dc755272a62800095c8ef150"},{"path":"src/FS.GG.Coord.Cli/TelemetryStoreApplication.fs","repository":"FS-GG/.github","revision":"b88c95a24f20e207c35971583fcffde50a312761","sha256":"a5f58e3f9b1abe519642fb906c47fd04a1bf50481b49876680a87f208ab1ac86"},{"path":"src/FS.GG.Coord.Cli/TelemetryApplication.fs","repository":"FS-GG/.github","revision":"b88c95a24f20e207c35971583fcffde50a312761","sha256":"fdfa123c0175440004e239ebd49046684c687538cd02269504ac60c84245ff8b"}],"conflictsWith":[],"id":"contract/passive-native-usage-observations","kind":"contract","recordedAt":"2026-10-18T09:33:18Z","repository":"FS-GG/.github","schema":"fsgg.atlas/1","status":"recorded","summary":"At the cited prospective 0.106 source candidate, explicit selected Codex rollout files share the maintained strict native decoder, including recursive duplicate-property and strict UTF8 refusal, and project actual optional response counters through provider-usage-observation/1. Item, inventory and terminal attribution stay unknown/partial; these canonical-only facts never enter qualified item totals. Stable native thread/turn/response identities, a finite serialized producer index, private pending intent and existing immutable spool retain corrections and exact replay. Local enqueue/reporting make no receiver or App Server call. Initial capture-only setup skips credential presence and reports receiver unverified. Same-owner state cloning/migration is unsupported without original state/fence reconciliation; one selected association root is the supported ownership boundary.\n\nReceiver admission refuses cross-owner changes. A complete bounded drain census retains the earliest pending head for each structural scope/source/generation, fencing numeric successors behind uncertain or durable-but-not-applied receipts. Candidate scheduling rotates eligible independent heads and ordinary traffic through the existing sixteen-envelope quantum with one private advisory cursor of at most 256 bytes. The cursor advances under the configuration lock immediately before each actual head attempt, rather than skipping a whole selected quantum. Expired shared deadline/cancellation stops new head attempts; canceled lookup cannot proceed to Submit. Missing/invalid cursor state resets deterministic order. Cursor crashes affect ordering only; queued bytes, receipts and authority remain unchanged. No fixed elapsed-time or eight-pass service guarantee follows; transport timeouts and exact-source tests remain separate.\n\nUnsupported/rejected passive data remains pending. Full qualification of this unified source, publication, installed producer capture, compatible receiver Host/store and restart/restore durability remain unaccepted here. Host is independently versioned; first useful isolated candidate capture does not wait on Home access or Host deployment. Published/installed 0.105 and the accepted board binding stay unchanged. Earlier records and original failures/Unknown operations remain retained with no replay or reservation release.","supersedes":["7aa52373f2721dd76fc8eeb3d6061794f27ea8d11e96bcb1ff25a97994a77d5c"],"tags":["telemetry","passive","native","capture","attribution","delivery","corrections"],"title":"Passive native responses separate capture, attribution and delivery"} diff --git a/docs/atlas/records/cad13b6653fd9f811e67d13c5f01f9dec047f8c384097cee01dd2e2db39e539f.json b/docs/atlas/records/cad13b6653fd9f811e67d13c5f01f9dec047f8c384097cee01dd2e2db39e539f.json new file mode 100644 index 000000000..e9b74e3b1 --- /dev/null +++ b/docs/atlas/records/cad13b6653fd9f811e67d13c5f01f9dec047f8c384097cee01dd2e2db39e539f.json @@ -0,0 +1 @@ +{"citations":[{"path":".agents/skills/work-programme/SKILL.md","repository":"FS-GG/.github","revision":"2530ffc1e401da111b5b32a4f93c211bcc2c193e","sha256":"f5562f5010d96a74fe03fecd965f743a523cedd8fbfb0491482f84acba662230"}],"conflictsWith":[],"id":"platform/executable-qualification-and-final-assembly","kind":"lesson","recordedAt":"2026-10-18T09:36:18Z","repository":"FS-GG/.github","schema":"fsgg.atlas/1","status":"recorded","summary":"Before costly qualification, verify that the maintained runner actually invokes the changed assertions and that negative controls fail through that same route; compile success or a zero-test invocation does not establish executable coverage. Assemble compatible source, version, Atlas and delivery-closure changes and reconcile the intended final base before the expensive full run. Defer reporting-only followups when they would invalidate that qualification; this is not a blanket main freeze or permission to bypass required checks. Existing forward recovery retains unavailable original outcomes and reservations as Unknown without repeated unavailable-history searches. Source guidance delivery remains distinct from installed skill adoption and measured process benefit.","supersedes":[],"tags":["qualification","coverage","delivery","process","recovery"],"title":"Verify executable coverage early and assemble compatible changes before costly qualification"} diff --git a/docs/registry/compatibility.md b/docs/registry/compatibility.md index bfd1a5e65..b6c733887 100644 --- a/docs/registry/compatibility.md +++ b/docs/registry/compatibility.md @@ -179,7 +179,7 @@ authored `Version` cells of the Versioned contracts table (#748).* | `fs-gg-audio` | FS.GG.Audio | `0.6.0` | `0.6.0` | | `fs-gg-net` | FS.GG.Net | `0.6.0` | `0.6.0` | | `keyboard-input` | FS.GG.Rendering | `0.5.0` | — | -| `coord-engine` | FS-GG/.github | `0.105.0` | `0.105.0` | +| `coord-engine` | FS-GG/.github | `0.106.0` | `0.105.0` | | `telemetry-host` | FS-GG/.github | `0.5.0` | `0.5.0` | | `new-sdd-workspace` | FS-GG/.github | `0.16.0` | `0.16.0` | | `fs-gg-workspace-template` | FS.GG.Templates | `0.19.0` | `0.19.0` | diff --git a/docs/roadmaps/utel-operational-completeness.md b/docs/roadmaps/utel-operational-completeness.md index dd2f51884..2293c46d2 100644 --- a/docs/roadmaps/utel-operational-completeness.md +++ b/docs/roadmaps/utel-operational-completeness.md @@ -62,8 +62,15 @@ capture-configured/receiver-unverified. Default activation and later credential/ unchanged. Local-store capture-only is unsupported in this first profile. One canonical association spool/state root owns the producer; undeclared same-principal cloned roots cannot be detected offline, so cloning, migration or reinitialization still requires original state/fence reconciliation. Receiver -admission refuses cross-owner changes, and later numeric producer cursors wait behind uncertain or -durable-but-not-applied predecessors. Unsupported/rejected receiver data stays pending. +admission refuses cross-owner changes. A complete bounded census retains each structural +scope/source/generation's earliest pending head; numeric successors wait behind uncertain or +durable-but-not-applied predecessors. Independent eligible heads and ordinary traffic rotate through +the existing sixteen-envelope quantum with one private advisory cursor of at most 256 bytes. The +cursor advances under the configuration lock immediately before each actual head attempt. Expired +shared deadline/cancellation stops new attempts, and canceled lookup cannot Submit. Missing/invalid +cursor state resets deterministic order; crashes affect order only, not queued bytes, receipts or +authority. No fixed elapsed-time or eight-pass service guarantee follows. Exact-source tests and +review remain required. Unsupported/rejected receiver data stays pending. The existing Core, CLI and Telemetry test suites and maintained `coord-engine`, `coord-core` and semantic skill-quality workflows qualify this source. Source inclusion is not a passed test result; diff --git a/registry/driver-skill-manifest.json b/registry/driver-skill-manifest.json index 3f81ceb36..2f791c815 100644 --- a/registry/driver-skill-manifest.json +++ b/registry/driver-skill-manifest.json @@ -5,7 +5,7 @@ "id": "atlas", "scope": "driver", "sha256": "c18e56fcc56abf80903e2fc6829cd94b44f42947724a26318ebcbf1ac5e1b35b", - "tree-sha256": "a1c74bf98ebf32b2e33780fb1973c2844617b4c74d90c2c63afe47546c009485", + "tree-sha256": "aa6ab4eb97ca1d61e192144997fb0f21cf2481a31edc44c066e2bc1c7bd7de49", "files": [ { "path": "SKILL.md", @@ -24,7 +24,7 @@ }, { "path": "assets/seed/catalog.json", - "sha256": "ec2e93ad50646d80c51e8d6d54447dabf752b09737c37f65b6445963d04c0877", + "sha256": "1a1fe671a5e1fcceccd9fcd6ab11f554254b8b8af0d104276d2dc3d237854f69", "executable": false }, { @@ -592,6 +592,11 @@ "sha256": "7a032dbf0351aa32c77c8d187f7eb697500ff186c88c5946ecc15adc972246a6", "executable": false }, + { + "path": "assets/seed/records/7a134e7f1822183ed1c0ded720971539350feaaf92612761210cfc3ccdc55870.json", + "sha256": "7a134e7f1822183ed1c0ded720971539350feaaf92612761210cfc3ccdc55870", + "executable": false + }, { "path": "assets/seed/records/7aa52373f2721dd76fc8eeb3d6061794f27ea8d11e96bcb1ff25a97994a77d5c.json", "sha256": "7aa52373f2721dd76fc8eeb3d6061794f27ea8d11e96bcb1ff25a97994a77d5c", @@ -1047,6 +1052,11 @@ "sha256": "c8bd340e6fc7fa3e97415f7ad4c22c51d88c6e77f782c12923e841c04d3f882b", "executable": false }, + { + "path": "assets/seed/records/cad13b6653fd9f811e67d13c5f01f9dec047f8c384097cee01dd2e2db39e539f.json", + "sha256": "cad13b6653fd9f811e67d13c5f01f9dec047f8c384097cee01dd2e2db39e539f", + "executable": false + }, { "path": "assets/seed/records/cc24c3770587f2421514fa399d2617201752bdca145ac39058de91d45d3d19c1.json", "sha256": "cc24c3770587f2421514fa399d2617201752bdca145ac39058de91d45d3d19c1", @@ -1769,12 +1779,12 @@ { "id": "publishing-and-deployment", "scope": "operator", - "sha256": "c95141302cb5b90baaa0a2bc102774b75b128b15a0dd20bd4a9d20035497b11a", - "tree-sha256": "fcf7450771a12a7ad66775dd5a8e8f6b7de5a6b08b88e5e368d7a7f8e6e92618", + "sha256": "d9c2996dc8600e8850b3a0aa69a5c4ed1e0297f6d16a3d20c332135ba1edbc4b", + "tree-sha256": "0e134aecffef4c7e85069499de2a938d878074e0a2b346c6e099fca89ece0dcf", "files": [ { "path": "SKILL.md", - "sha256": "c95141302cb5b90baaa0a2bc102774b75b128b15a0dd20bd4a9d20035497b11a", + "sha256": "d9c2996dc8600e8850b3a0aa69a5c4ed1e0297f6d16a3d20c332135ba1edbc4b", "executable": false }, { diff --git a/registry/skills.yml b/registry/skills.yml index 3c60c60e4..eb5c6c53f 100644 --- a/registry/skills.yml +++ b/registry/skills.yml @@ -391,7 +391,7 @@ skills: # publishing-and-deployment — homed beside its owner+predicate siblings and reconciled verbatim from # .github's producer manifest by `--write` (.github#299/.github#1200). The position # and this annotation are generated; the row's bytes are the manifest's. - - { id: publishing-and-deployment,scope: operator,owner: .github, source: .github/.claude/skills/publishing-and-deployment/SKILL.md, sha256: c95141302cb5b90baaa0a2bc102774b75b128b15a0dd20bd4a9d20035497b11a, materializes-when: "false" } + - { id: publishing-and-deployment,scope: operator,owner: .github, source: .github/.claude/skills/publishing-and-deployment/SKILL.md, sha256: d9c2996dc8600e8850b3a0aa69a5c4ed1e0297f6d16a3d20c332135ba1edbc4b, materializes-when: "false" } # drive-board-best — homed beside its owner+predicate siblings and reconciled verbatim from # .github's producer manifest by `--write` (.github#299/.github#1200). The position # and this annotation are generated; the row's bytes are the manifest's. From 91bca104c4ae3ae81fb8cc0ca6ad109e6d7038bd Mon Sep 17 00:00:00 2001 From: EHotwagner Date: Sun, 18 Oct 2026 11:49:29 +0200 Subject: [PATCH 15/19] fix: align current release notes and artifact identity controls --- .agents/skills/work-programme/SKILL.md | 5 +++-- .claude/skills/work-programme/SKILL.md | 5 +++-- src/FS.GG.Coord.Cli/FS.GG.Coord.Cli.fsproj | 25 +++++++++++---------- tests/release-successor-artifact/run.py | 26 ++++++++++++++-------- 4 files changed, 36 insertions(+), 25 deletions(-) diff --git a/.agents/skills/work-programme/SKILL.md b/.agents/skills/work-programme/SKILL.md index ef6290ddd..e77ca81ea 100644 --- a/.agents/skills/work-programme/SKILL.md +++ b/.agents/skills/work-programme/SKILL.md @@ -103,8 +103,9 @@ operational acceptance, custody, enrollment and recovery. One owner carries ordi repair, PR updates and delivery through existing admission in an isolated worktree; one integrator owns shared surfaces. Existing authorization persists. Escalate changed scope/authority, unresolved user choices, conflicts and uncertain effects. Ordinary milestones require no extra parent approval or -repeated parent file-by-file review. Explicitly activate an idle designated reviewer when the exact -candidate is ready, supplying its head and review obligations; an assignment alone is not a review. +repeated parent file-by-file review. Explicitly activate an idle or completed designated owner or +reviewer when work is ready, supplying its head and obligations. Where messages do not start turns, use a turn-starting follow-up +and confirm active status; a sent assignment alone establishes neither ongoing work nor a review. Preserve PR-body admission metadata through the canonical delivery tooling whenever the body changes; until automatic preservation is qualified, verify the native metadata and repair through that route before delivery. Keep one active implementation PR per coherent change. Open a lane diff --git a/.claude/skills/work-programme/SKILL.md b/.claude/skills/work-programme/SKILL.md index ef6290ddd..e77ca81ea 100644 --- a/.claude/skills/work-programme/SKILL.md +++ b/.claude/skills/work-programme/SKILL.md @@ -103,8 +103,9 @@ operational acceptance, custody, enrollment and recovery. One owner carries ordi repair, PR updates and delivery through existing admission in an isolated worktree; one integrator owns shared surfaces. Existing authorization persists. Escalate changed scope/authority, unresolved user choices, conflicts and uncertain effects. Ordinary milestones require no extra parent approval or -repeated parent file-by-file review. Explicitly activate an idle designated reviewer when the exact -candidate is ready, supplying its head and review obligations; an assignment alone is not a review. +repeated parent file-by-file review. Explicitly activate an idle or completed designated owner or +reviewer when work is ready, supplying its head and obligations. Where messages do not start turns, use a turn-starting follow-up +and confirm active status; a sent assignment alone establishes neither ongoing work nor a review. Preserve PR-body admission metadata through the canonical delivery tooling whenever the body changes; until automatic preservation is qualified, verify the native metadata and repair through that route before delivery. Keep one active implementation PR per coherent change. Open a lane diff --git a/src/FS.GG.Coord.Cli/FS.GG.Coord.Cli.fsproj b/src/FS.GG.Coord.Cli/FS.GG.Coord.Cli.fsproj index 2d7692c8f..fbea4a432 100644 --- a/src/FS.GG.Coord.Cli/FS.GG.Coord.Cli.fsproj +++ b/src/FS.GG.Coord.Cli/FS.GG.Coord.Cli.fsproj @@ -130,18 +130,19 @@ bytes under 0.52.0 would make the same version identify different artifacts. Ado coherent set cut from corrected source. All three partial sets are recorded in `registry/dependencies.yml`. - 0.105.0 — Complete V2 migration visibility and bounded ordinary publication. - -The packaged V2 migration route reads complete owned memberships and reconciles the selected -state through inspect, refresh and selection. Programme enrollment authenticates a salted public -commitment to a bounded private payload; offline pair preparation preserves private identities. -Current work retains non-PR deliverables and requires fresh action-specific reconciliation. -The ordinary publisher separates pending-only -visibility probes from full semantic transitions, freezes generated asset bytes, and refreshes -native, source, protection and journal guards before effects and final completion. Current source -selects one 0.105/0.104/journal23 composition. Original .103 Unknown, consumed .104 continuation -and all inherited reservations remain unchanged. Publication, installed update and Project3 -migration recovery or consumer acceptance require their separate qualification and admission. + 0.106.0 — Capture partial native usage independently of receiver readiness. + +Capture-only workspace setup and bounded passive capture/report retain available native usage +observations without inventing complete token attribution, dispatch identity or receiver health. +Strict native decoding, correction lineage and bounded pending storage preserve unknowns; later +upload still requires the existing credential, enrollment and durable receiver acceptance gates. +Independent pending heads use an advisory per-attempt drain cursor while numeric successors remain +behind unresolved predecessors. Compatible Telemetry Host publication and adoption remain separate. + +The coherent source selects one 0.106/0.105/journal24 composition through the existing candidate +and publisher rails. This source version does not claim package publication, installed adoption, +receiver deployment or a new Project3 binding. Published and installed 0.105 identities, original +.103 Unknown, consumed .104 continuation and all inherited reservations remain unchanged. $(FsggStandingAdvisories) diff --git a/tests/release-successor-artifact/run.py b/tests/release-successor-artifact/run.py index 2c7630af4..88de0db0e 100644 --- a/tests/release-successor-artifact/run.py +++ b/tests/release-successor-artifact/run.py @@ -192,18 +192,26 @@ def test_selected_literal_refuses_changed_version_or_predecessor(self): self.assertFalse(self.output.exists()) -class Current105ArtifactTests(CandidateArtifactTests): - VERSION = "0.105.0" - PREVIOUS = "0.104.0" +class CurrentReleaseArtifactTests(CandidateArtifactTests): + VERSION = gate.CURRENT_RELEASE["version"] + PREVIOUS = gate.CURRENT_RELEASE["predecessor"] PREVIOUS_SOURCE = gate.CURRENT_RELEASE['predecessorSource'] PREVIOUS_CONTENT = gate.CURRENT_RELEASE['predecessorContentId'] - def test_current_predecessor_source_is_checked_by_the_actual_artifact_reader(self): - path=self.candidate/'previous-stable-channel.json' - value=json.loads(path.read_bytes());value['sourceSha']='e'*40 - path.write_text(json.dumps(value));self.repack() - self.artifact['digest']='sha256:'+hashlib.sha256(self.archive.read_bytes()).hexdigest() - with self.assertRaisesRegex(ValueError,'current candidate predecessor identity'):self.verify() + def test_current_predecessor_identity_is_checked_by_the_actual_artifact_reader(self): + path = self.candidate / 'previous-stable-channel.json' + original = path.read_bytes() + for field, value in (('sourceSha', 'e' * 40), ('version', '0.0.1'), + ('contentId', 'sha256:' + 'e' * 64)): + with self.subTest(field=field): + predecessor = json.loads(original) + predecessor[field] = value + path.write_text(json.dumps(predecessor)) + self.repack() + self.artifact['digest'] = 'sha256:' + hashlib.sha256(self.archive.read_bytes()).hexdigest() + with self.assertRaisesRegex(ValueError, 'current candidate predecessor identity'): + self.verify() + self.assertFalse(self.output.exists()) From a91d94bc07a5696c0c80fb89a6171fbd85d771d4 Mon Sep 17 00:00:00 2001 From: EHotwagner Date: Sun, 18 Oct 2026 12:27:53 +0200 Subject: [PATCH 16/19] ci: execute telemetry assertions before expensive qualification and retain failures --- .github/workflows/coord-engine.yml | 48 +++++++++++++++++-------- tests/ci-runtime-optimization/run.sh | 52 ++++++++++++++++++++++++++++ 2 files changed, 86 insertions(+), 14 deletions(-) diff --git a/.github/workflows/coord-engine.yml b/.github/workflows/coord-engine.yml index 216b4b87b..ba1e63a66 100644 --- a/.github/workflows/coord-engine.yml +++ b/.github/workflows/coord-engine.yml @@ -177,6 +177,40 @@ jobs: - name: Build the engine run: dotnet build src/FS.GG.Coord.Cli/FS.GG.Coord.Cli.fsproj --no-restore -c Release + # Core is a separate test assembly; the CLI suite cannot discover its store and parser controls. + - name: Test — core telemetry contracts and source binding + run: dotnet test tests/FS.GG.Coord.Core.Tests/FS.GG.Coord.Core.Tests.fsproj -c Release --no-restore --logger "console;verbosity=normal" --logger "trx;LogFileName=core.trx" --results-directory "$RUNNER_TEMP/coord-engine/core" + + - name: Non-vacuity — the Core run must have executed tests + run: python3 scripts/read-trx-count.py "$RUNNER_TEMP/coord-engine/core/core.trx" --minimum 20 --label "coord-engine (Core)" --summary-file "$GITHUB_STEP_SUMMARY" + + # Execute the changed telemetry command boundary before browser/package/parity costs. + # The full CLI suite below remains mandatory; this is early feedback, not reused coverage. + - name: Test — workspace telemetry routes before expensive qualification + timeout-minutes: 5 + run: dotnet test tests/FS.GG.Coord.Cli.Tests/FS.GG.Coord.Cli.Tests.fsproj -c Release --no-restore --filter "FullyQualifiedName~WorkspaceTelemetryApplicationTests" --blame --logger "console;verbosity=normal" --logger "trx;LogFileName=workspace.trx" --results-directory "$RUNNER_TEMP/coord-engine/workspace" + + - name: Non-vacuity — the focused workspace routes executed + run: python3 scripts/read-trx-count.py "$RUNNER_TEMP/coord-engine/workspace/workspace.trx" --minimum 20 --label "workspace telemetry routes" --summary-file "$GITHUB_STEP_SUMMARY" + + - name: Test — the wire contract, and the residue rule + run: dotnet test tests/FS.GG.Coord.Cli.Tests/FS.GG.Coord.Cli.Tests.fsproj -c Release --logger "console;verbosity=normal" --blame --logger "trx;LogFileName=cli.trx" --results-directory "$RUNNER_TEMP/coord-engine/cli" + + # A SUITE THAT CANNOT FAIL IS NOT A SUITE (#266, #436). A runner that discovers nothing exits 0. + - name: Non-vacuity — the run must have executed tests + run: python3 scripts/read-trx-count.py "$RUNNER_TEMP/coord-engine/cli/cli.trx" --minimum 20 --label "coord-engine" --summary-file "$GITHUB_STEP_SUMMARY" + + # --blame records bounded test sequence evidence only; no memory dump is enabled. + # Retain normal result files even when an assertion/process fails before later gates. + - name: Retain early executable test diagnostics + if: ${{ always() }} + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 + with: + name: coord-engine-early-tests-${{ github.sha }} + path: ${{ runner.temp }}/coord-engine/ + if-no-files-found: warn + retention-days: 7 + - name: Test the shared projection and real loopback browser run: | set -euo pipefail @@ -317,16 +351,6 @@ jobs: - name: Critic succession's refusals can still say NO — measured, one mutant per refusal run: bash tests/review-critic-succession-wire/run.sh - # Core is a separate test assembly; the CLI suite cannot discover its store and parser controls. - - name: Test — core telemetry contracts and source binding - run: dotnet test tests/FS.GG.Coord.Core.Tests/FS.GG.Coord.Core.Tests.fsproj -c Release --no-restore --logger "console;verbosity=normal" --logger "trx;LogFileName=core.trx" --results-directory "$RUNNER_TEMP/coord-engine/core" - - - name: Non-vacuity — the Core run must have executed tests - run: python3 scripts/read-trx-count.py "$RUNNER_TEMP/coord-engine/core/core.trx" --minimum 20 --label "coord-engine (Core)" --summary-file "$GITHUB_STEP_SUMMARY" - - - name: Test — the wire contract, and the residue rule - run: dotnet test tests/FS.GG.Coord.Cli.Tests/FS.GG.Coord.Cli.Tests.fsproj -c Release --logger "console;verbosity=normal" --logger "trx;LogFileName=cli.trx" --results-directory "$RUNNER_TEMP/coord-engine/cli" - - name: Test — standalone telemetry HTTPS contracts and host boundaries run: dotnet test tests/FS.GG.Telemetry.Tests/FS.GG.Telemetry.Tests.fsproj -c Release --no-restore --logger "console;verbosity=normal" --logger "trx;LogFileName=telemetry-host.trx" --results-directory "$RUNNER_TEMP/coord-engine/telemetry-host" @@ -362,7 +386,3 @@ jobs: # honest test deletion. - name: Non-vacuity — the kernel run must have executed tests run: python3 scripts/read-trx-count.py "$RUNNER_TEMP/coord-engine/kernel/kernel.trx" --minimum 20 --label "coord-engine (kernel)" --summary-file "$GITHUB_STEP_SUMMARY" - - # A SUITE THAT CANNOT FAIL IS NOT A SUITE (#266, #436). A runner that discovers nothing exits 0. - - name: Non-vacuity — the run must have executed tests - run: python3 scripts/read-trx-count.py "$RUNNER_TEMP/coord-engine/cli/cli.trx" --minimum 20 --label "coord-engine" --summary-file "$GITHUB_STEP_SUMMARY" diff --git a/tests/ci-runtime-optimization/run.sh b/tests/ci-runtime-optimization/run.sh index 91bbb00ef..2ffde001c 100644 --- a/tests/ci-runtime-optimization/run.sh +++ b/tests/ci-runtime-optimization/run.sh @@ -142,5 +142,57 @@ else bad "coord-engine still has $duplicate_runs duplicate test executions" fi +# Inspect actual literal steps, then prove the same check rejects late execution and lost evidence. +if python3 - "$ROOT/.github/workflows/coord-engine.yml" <<'PY_EARLY' +import pathlib, re, sys +source = pathlib.Path(sys.argv[1]).read_text() +def early(value): + parts = re.split(r"(?m)^ - name: ", value.split(" engine:\n",1)[1]) + steps = [(part.split("\n",1)[0],part) for part in parts[1:]] + names = [name for name,_ in steps] + required = ["Build the engine", "Test — core telemetry contracts and source binding", + "Test — workspace telemetry routes before expensive qualification", + "Test — the wire contract, and the residue rule", + "Test the shared projection and real loopback browser"] + positions = [names.index(name) for name in required] + assert positions == sorted(positions), "test assertions must execute before expensive qualification" + by_name = dict(steps) + focus = by_name[required[2]] + full = by_name[required[3]] + assert 'FullyQualifiedName~WorkspaceTelemetryApplicationTests' in focus and 'timeout-minutes: 5' in focus + assert '--filter' not in full and 'FS.GG.Coord.Cli.Tests.fsproj' in full, "full CLI coverage must remain" + for step in (focus,full): + assert '--blame' in step and '--blame-hang' not in step and '--blame-crash' not in step + assert 'coord-engine/workspace/workspace.trx" --minimum 20' in value + evidence = by_name['Retain early executable test diagnostics'] + assert 'if: ${{ always() }}' in evidence and 'coord-engine/' in evidence and 'retention-days: 7' in evidence + assert 'timeout-minutes: 40' in value and 'continue-on-error:' not in value + for name in ['Pack and qualify the standalone telemetry workspace', + "Parity — the engine matches the corpus's certified batch answer", + 'Test — standalone telemetry HTTPS contracts and host boundaries', + 'Test — lifecycle handlers and typed completion dependency', + 'Test — BoardOps handlers and production registration agreement', + "Test — the kernel's argument grammar, identity, and ref parsing"]: + assert name in names, "existing coherent coverage lost: " + name +early(source) +start = source.index(' - name: Test — workspace telemetry routes before expensive qualification') +end = source.index(' - name: Non-vacuity — the focused workspace routes executed',start) +focus_block = source[start:end] +late = source[:start] + source[end:] + focus_block +for bad in [late,source.replace('Test — workspace telemetry routes before expensive qualification','late workspace test'), + source.replace('--filter "FullyQualifiedName~WorkspaceTelemetryApplicationTests"','--filter "unrelated"'), + source.replace('--blame ',''), + source.replace('if: ${{ always() }}','if: success()'), + source.replace('Test — the wire contract, and the residue rule','missing full suite')]: + try: early(bad) + except (AssertionError,ValueError,KeyError): pass + else: raise AssertionError('late/missing executable coverage mutation survived') +PY_EARLY +then + ok 'actual engine runs focused and full assertions early and retains failure diagnostics' +else + bad 'engine executable ordering/diagnostic preservation regressed' +fi + printf '\nci-runtime-optimization: %d passed, %d failed\n' "$pass" "$fail" [ "$fail" -eq 0 ] From ef8eb92f4e8444cf3bf0888d44336c53e229a26a Mon Sep 17 00:00:00 2001 From: EHotwagner Date: Sun, 18 Oct 2026 12:41:13 +0200 Subject: [PATCH 17/19] fix: classify passive admission refusals without masking storage faults --- .../TelemetryStoreApplication.fs | 3 ++ .../WorkspaceTelemetryApplicationTests.fs | 44 ++++++++++++++++++- 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/src/FS.GG.Coord.Cli/TelemetryStoreApplication.fs b/src/FS.GG.Coord.Cli/TelemetryStoreApplication.fs index 58a08ac0c..2114ccc34 100644 --- a/src/FS.GG.Coord.Cli/TelemetryStoreApplication.fs +++ b/src/FS.GG.Coord.Cli/TelemetryStoreApplication.fs @@ -5576,6 +5576,9 @@ WHERE f.kind='learn-installed-origin/1' AND a.producer=$producer AND a.stream=$s || error.Contains("constraint", StringComparison.OrdinalIgnoreCase) || error = "invalid-request" // These exact receiver admission refusals are semantic, not storage faults. + || error = "passive-observation-authenticated-owner-required" + || error = "passive-observation-owner-mismatch" + || error = "passive-observation-kind-is-immutable" || error = "responses-native-receipt-required" || error = "responses-current-installed-origin-required" || error = "activity usage attribution requires known source counters" diff --git a/tests/FS.GG.Coord.Cli.Tests/WorkspaceTelemetryApplicationTests.fs b/tests/FS.GG.Coord.Cli.Tests/WorkspaceTelemetryApplicationTests.fs index 246161e52..93b4fc6c5 100644 --- a/tests/FS.GG.Coord.Cli.Tests/WorkspaceTelemetryApplicationTests.fs +++ b/tests/FS.GG.Coord.Cli.Tests/WorkspaceTelemetryApplicationTests.fs @@ -848,6 +848,48 @@ module WorkspaceTelemetryApplicationTests = TelemetryStoreApplication.submitReceipt store approved peer peerEnvelope |> unwrap |> ignore TelemetryStoreApplication.drainReceipts store approved scope.Workspace |> unwrap |> ignore Assert.Contains("\"status\":\"rejected\"", TelemetryStoreApplication.lookupReceipt store approved peer "peer-correction" |> unwrap) + let replacement = System.Text.Json.Nodes.JsonNode.Parse batches[1] + replacement["ingestId"] <- System.Text.Json.Nodes.JsonValue.Create "kind-replacement" + replacement["eventCount"] <- System.Text.Json.Nodes.JsonValue.Create 1 + replacement["events"] <- System.Text.Json.Nodes.JsonNode.Parse(System.Text.Json.JsonSerializer.Serialize + [| {| kind = "diagnostic"; identity = current["identity"].GetValue(); revision = 3L; code = "fixture"; severity = "info" |} |]) + TelemetryStoreApplication.submitReceipt store approved scope (envelope scope "kind-replacement" (Encoding.UTF8.GetBytes(replacement.ToJsonString()))) |> unwrap |> ignore + TelemetryStoreApplication.drainReceipts store approved scope.Workspace |> unwrap |> ignore + Assert.Contains("\"status\":\"rejected\"", TelemetryStoreApplication.lookupReceipt store approved scope "kind-replacement" |> unwrap) + let afterReplacement = System.Text.Json.Nodes.JsonNode.Parse(TelemetryStoreApplication.passiveObservations store approved scope |> unwrap) + Assert.Equal(snapshot["observations"].ToJsonString(), afterReplacement["observations"].ToJsonString()) + // Exercise the existing application error boundary, including the owner-required + // refusal whose normal unauthenticated route is direct ingest rather than a receipt. + let cases = [ "passive-observation-authenticated-owner-required", true + "passive-observation-owner-mismatch", true + "passive-observation-kind-is-immutable", true + "passive-observation-projection-unavailable", false + "inert-storage-fault", false ] + for index, (code, semantic) in List.indexed cases do + let batchId = "application-boundary-" + string index + let replayPayload = System.Text.Json.Nodes.JsonNode.Parse batches[1] + replayPayload["ingestId"] <- System.Text.Json.Nodes.JsonValue.Create batchId + TelemetryStoreApplication.submitReceipt store approved scope (envelope scope batchId (Encoding.UTF8.GetBytes(replayPayload.ToJsonString()))) |> unwrap |> ignore + let retainedFile = Assert.Single(Directory.GetFiles(Path.Combine(store, "receipt-inbox"), "*.ready")) + let retainedBytes = File.ReadAllBytes retainedFile + let mutable hookCalls = 0 + let hook (stage: string) = + if stage = "before-application-commit" then + hookCalls <- hookCalls + 1 + raise (InvalidOperationException code) + let outcome = TelemetryStoreApplication.drainReceiptsWithHook store approved scope.Workspace hook + Assert.Equal(1, hookCalls) + if semantic then + Assert.Contains("\"rejected\":1", outcome |> unwrap) + Assert.Contains("\"status\":\"rejected\"", TelemetryStoreApplication.lookupReceipt store approved scope batchId |> unwrap) + Assert.False(File.Exists retainedFile) + else + Assert.Equal(Error [ "storage-unavailable" ], outcome) + Assert.Contains("\"status\":\"durably-received\"", TelemetryStoreApplication.lookupReceipt store approved scope batchId |> unwrap) + Assert.Equal(retainedBytes, File.ReadAllBytes retainedFile) + TelemetryStoreApplication.drainReceipts store approved scope.Workspace |> unwrap |> ignore + let unchanged = System.Text.Json.Nodes.JsonNode.Parse(TelemetryStoreApplication.passiveObservations store approved scope |> unwrap) + Assert.Equal(snapshot["observations"].ToJsonString(), unchanged["observations"].ToJsonString()) let collector: TelemetryReceipt.Principal = { Scope = { scope with Producer = "native-collector"; Stream = "inventory" } Role = TelemetryReceipt.NativeCollector; GrantId = Some "native-grant"; GrantGeneration = Some 1L } @@ -857,7 +899,7 @@ module WorkspaceTelemetryApplicationTests = Assert.Contains("\"status\":\"rejected\"", TelemetryStoreApplication.lookupReceipt store approved collector.Scope "collector-passive" |> unwrap) let final = System.Text.Json.Nodes.JsonNode.Parse(TelemetryStoreApplication.passiveObservations store approved scope |> unwrap) Assert.Equal(snapshot["observations"].ToJsonString(), final["observations"].ToJsonString()) - Assert.True(TelemetryStoreApplication.ingest store approved batches[1] |> Result.isError) + Assert.Equal(Error [ "passive-observation-authenticated-owner-required" ], TelemetryStoreApplication.ingest store approved batches[1]) [] let ``passive source keeps absent dimensions unknown and accounts for nonusage scan budgets`` () = From 5d4edebbffdd058fa69c60514e4d56fc9ac2ad78 Mon Sep 17 00:00:00 2001 From: EHotwagner Date: Sun, 18 Oct 2026 12:44:05 +0200 Subject: [PATCH 18/19] docs: bind repaired passive admission and early qualification evidence --- .agents/skills/atlas/assets/seed/catalog.json | 2 +- ...afac09e012db446d528dad0e4301404fd693b9bed3.json | 1 + ...b45e7af10b098fa34714bd32e9bc77941cf58fdaaa.json | 1 + .claude/skills/atlas/assets/seed/catalog.json | 2 +- ...afac09e012db446d528dad0e4301404fd693b9bed3.json | 1 + ...b45e7af10b098fa34714bd32e9bc77941cf58fdaaa.json | 1 + docs/atlas/catalog.json | 2 +- ...afac09e012db446d528dad0e4301404fd693b9bed3.json | 1 + ...b45e7af10b098fa34714bd32e9bc77941cf58fdaaa.json | 1 + registry/driver-skill-manifest.json | 14 ++++++++++++-- 10 files changed, 21 insertions(+), 5 deletions(-) create mode 100644 .agents/skills/atlas/assets/seed/records/14156f1c6bf0fa8dfcb5cfafac09e012db446d528dad0e4301404fd693b9bed3.json create mode 100644 .agents/skills/atlas/assets/seed/records/4855e1947afc954cb1b20bb45e7af10b098fa34714bd32e9bc77941cf58fdaaa.json create mode 100644 .claude/skills/atlas/assets/seed/records/14156f1c6bf0fa8dfcb5cfafac09e012db446d528dad0e4301404fd693b9bed3.json create mode 100644 .claude/skills/atlas/assets/seed/records/4855e1947afc954cb1b20bb45e7af10b098fa34714bd32e9bc77941cf58fdaaa.json create mode 100644 docs/atlas/records/14156f1c6bf0fa8dfcb5cfafac09e012db446d528dad0e4301404fd693b9bed3.json create mode 100644 docs/atlas/records/4855e1947afc954cb1b20bb45e7af10b098fa34714bd32e9bc77941cf58fdaaa.json diff --git a/.agents/skills/atlas/assets/seed/catalog.json b/.agents/skills/atlas/assets/seed/catalog.json index c63bdfe39..3676f31fc 100644 --- a/.agents/skills/atlas/assets/seed/catalog.json +++ b/.agents/skills/atlas/assets/seed/catalog.json @@ -1 +1 @@ -{"records":["000ada42299601fba29016e5c0e0d4012876fb42670bb10fa0b1315477254ba4","00641d046d6869fdd0023ab3df99e0e67a6ea28f0dcb701f622b1cec8b3e07c6","026b08fb343aefe19177e95b759560d340d372def4b71acf613fefee3438ade2","0357495d23fac4fad210b6dd7ed7cc57dd33d107e1659a81f085cad78300797f","036c148f6d0e89858c9bf4cf380272ca6904bb4ca277a909fb71c47f5450cef7","04e404d89dca295564813149472b1de8e6c43357e2f6d91d169ded7600ed3a02","0509e5c6fdbd2dde0c0db8558647080560714804d00e4f9268342f2e84858a3d","06ad2c8aa0ff3b862edf3ba99e0e4e8801ee163709e66333cd06c3fc61232b05","0a6d7dc5b64970bfdadc9049ace95e8bc163fc421beea70129ff0eaa692c6d06","0ad4403c8f4078dbfa543310c69bd1dfc768e305987214ffc37d7b2600c4687c","0c22360d4653eb0f450e4d3d34564875f1660cfcb2d546095d98b3faa3967cbc","0da4d093b49c0a1f654b38008bb01195e816829279ca1989bd2448194e15361b","0e560af7d9dd2e0f2f588a74cd35512973747f20bdfe0bee0bc889105ea53dc9","0ea7107c2c8edaab3ff2bae32f63cfbef6903a51cdaff257278f757ed5ef429d","0eef4d717eb03f0906aa3be7336aa71f831726afabe8a56077b76f6e82fd08e1","11fe30832d93706c60efd836b09f35f049c4a715ad6144cf277ca240c5780704","1244d27db0cf5075353bcc622d0fb3b5ca6a7d08526e2c5754e8b745c250bf3f","155fe673b8ae12549c978e1bf1d5c43e360937fcf2135cdcd5aea6f6c771da44","1945f527afc3c2930ec4d7fa57ebb2ef7dd6321c0dd3ab9233c9963e9e613165","19d657b67672257ece127f3b957674b7fb4780843148db0a36a0b329c2a418ba","1a24f6ef0c08a898f309c1b925fc19b29526f913a61a1dfe4b1a4308ebdd97ac","1b5351b2dc647aba864e387168db5128435cb80da94fc42581cd60a05fc34b9a","1da011289116fe88fe92cb8f0e83ed7ccbbca251681d4e136c5a61c40364f8d3","1ec9445b242d2a2e149fe71c67bf13d8c0e4ebe5a6ed7b022656b9941973909d","1edc36731a9c76ad07d269d8b4fd84c8c956bb43d6f56de17d6208164856ffbe","20901b579f69cc97eb56b492938864667576e1c9bfacf13f8a529c4f6e543448","21338155cb4f52c49e5072c877771be67c75590d9b238ea025fba5209fd6e018","23af79bd1e7995fc8162ddc4d830318acb054bbfcc9c7d5cb141ec306da67386","24d4f2730d94d1b7f149771ef0e59192f4936d142b21f4a56b1a391e4514d38d","2591526ddabbea03fbdc38bf172bc54f42df9bc51eba7ad2b70d6e67215f08f1","26259abc7fe745f52e06f2aa2abb0e50f189bc7608065f04d5c669a0a99941cd","26290a0990d6dac0ce9448e05eb934210603356043dcf14a5d80585288e2aa92","26d6b31965013079d4db67a2c403e01f21e3c30ae65953400dbed92e289a0925","288daf614247c260cb673d8674e8b3874ccc4e269347836851f702d7ac8e2f7c","28abfaf6d50ca38af0b88aa50524200c17af9000da83ddbab3d8f9e06e020fa5","291d3db272eae084d34c04bc1305f2abb26a7e7acbc5515208469b46719a4ed1","2a38ddebfe3380232e35d5a24f9cb9f7c38abbc9c68add4ea5952c1e65d328d2","2c76ce93500601e281a41f5985fe4e3926fc8bc9d01ee687f14052cb553ad2d2","2d599c722a08306b98f2d833fb3e4a7acb9dea92e6a58820caa2f65c09803fb8","2ecd502add2d801eebed39411fadc9a80098ba9ce04a5f4b728a0e4e331232d6","2f7357367d921995f4c6fdaa693392adcd2df4860ef4d25c8dc47f7ddea8c755","2fb2ed7902a8e35dc36489a23245d963026d688008c92fed6fdc1f6bc27198a6","310bfb5b2d061bb733771e5cb7b3b7d25db43af5eda9f806169b7ef9330c2fe7","32f69a7b8997ae98b9305ee578145d795dbcd39ca4469bf2465e57a0295cda51","335683e33b94cb86b5e426b4faed200673bf850151191a08458136ceb164fd4e","3407ec53a884d3945d86a88d6b9a883419dd426e96b1108a8e6686f30397a629","34463778cf2d29e3896a65613cf9e3eb3e9f2d8946d17f12b609e70eec63d128","35da3938b72cf3520e126ad595157104b69ab748904c7b4e12f563d6b103172b","37c8908ea2a349cd3034018027160ad810b28ad1fc203a9a353971e1f7396b4c","37e39faee019bb041627510f1f02746ba9a85696417a083b438eb4974b72c2bf","38a75fd804821f4836f0a7ba8d41af3d3a3a5f5d7dcea68487009297824258d9","397476cf107b48e7a662264f8fea9f880231fd3d1e0401622650f214cfaa35c7","3ad8b0398ba6c354c9e31b7438b2515579fc0b1f17de4b35a914c862a3a11e3b","3b3c6cf083b12a840565e00458e2fd4ee8a61f97cda452703a6b13d7776b6c13","3b4af144afed3d52dd2e1f64e23bc25b3475eee5f7af3bde9886761b15c33dfd","3b5d82795e9f5d1992ab67e078fcf1108247ab9b6d1baeac944d3ec0294cec5d","3d0274f77576abdbdf442c8843e955e1bbc91e9f8cbfe3646b119337cdb13c96","3e2f66baa16c7ea936eba34720a55897438f60b343cbe8fda4eab1e5dde044eb","41c768ea17144c6ec225e9a65d4c3c127fdd7264dcba1a89aa17b20fd5d7e3ee","42aeb46fcc3d10b95e4067bc9cda875fa933b4102873f67c7bf1f8ca6799a598","4320b92712bc14dbe10b56f1cd3d1bdc093fc4be6016732839d0be4dd4d027d3","46cdf2c207f79d388001f6636dfb7a98bb2ba72b9d1c6df4938f0a27691e07a6","480f1ede18ae031b164d49d676feeb1090fb33932676ff52e1e2eb24e8d154cd","48797c44c92cb34fd9a57a08020b45c6920b2268dc8ad616c0f814a3710d5316","48d094622ada1806cb30335926007c1abc476b1f7b45a2e250c490afa25e847b","4a724a6a842a132c2185279513f341b79f9be93e42660f1255770eeae3b1323c","4c8c327dacf345e184042092e96ad3ea02ed4cece57dac5fa68ea52fbb5a6adf","4d5a44ba07fafeab823b54a21846269330ce35b4c190f3ddd5434bc8530d9b41","4da0a5be70e8af9c39623deac83822749482187f6a0fc3d186dcfddaa7111576","4f1e58fc658a4ceda181e2a7fa249305b09b573ffd68c2489f204f4957224957","4f2750b974c1404acb721ffc84cbd1d0756a24211dd6f6503c10ea74dbc45676","509ec9c08864b9dd0029f32ffeac85fbac863e2dad459994c65b7cb5264faffa","52049cc9cee43bb27229e6b3e983e02c6aa20dd7d153b13e3c74bc6d2b47cf92","5382c901d160ca2d79888d8acd7a690a5349826b5da486274b0800c9d7513f11","540879695d41205515aaabe5466971014cb43b960a26b8e5958e37fed63df762","5560616d1e72f0a539f9ebbfea3b7d195c1ef5622f97994af1963748d4f97533","556ee783d8e2e4ca50f656c095758be613983f904d998a6534fb155510114f21","55a4711e799294d06988ab4acf77eacd7d424123082bba3ec987dff0ae13999c","55ae095961d78a1514c4dd1e63d477c60179a8662571ab5a90abd3eb2b83eb10","56e7158313357bb145bd98c5f790e569be2203fb2601565a30091a597a7e7ff5","5962dd14d3923433cf723d698d1af19ac37a270b6e88445643fc56a646faab5b","5a2064cdf51026eed65457c05f34bec919b31d96d35c29498d298685965f0b5a","5b77bd6dfa81cc339e729e4195e258facbfeb64b9c680512f742e3fb1961fdd5","5c3527e43fe24c5aa171c6fa4a3de7fe5e78f2527aed0dd19cb21d154d43da21","5c79c77f00167ca140127b00f1a79e1ffac621e46fc461089594206a7df8d7cc","5d015880319af666943e68169ca906bf2f0c813d8bf2c5c0262aeb5a40366350","5f2a75b89983d1005a38afa2cabccc3a39f31989807120281d8505ffd564e0c6","5f4fa6dde5930fe1b42f805895f0f5fb135c2b3ff9830f2bd30ae7526a3295a1","630fdcff1f227b5baf5d10bd78ef0fde68791ac0cd8a15f65065f5cc4501b17b","63113617f2e4ee6b827a69bce6afb3949190a282f5feaaa9e2c9f82372623bb8","63544fa69b09916d52b305700eb9816305ff22b77162a44edd13897acea3a655","63a4394e689acf4a4762cfb4df691d05f923fdf592fd2f8ea41e6a54f98d1136","69ebfc7eb8427db3c5c59bdde652d0cb269426126f8540b1b58caa29ccf130e2","69edc4285578313d1dd2f914d69add075a7b354f7fba717606d1abe15292576b","6a34d9279cae58765d6ee4a980192c0e15f3ca217b9f1815861d472a281b3cf8","6c3c592efe9c684ada5661b8cc88a5c3f6e57c841db06b9e070687504cbf6236","6ce6d164c3e31463fb9e144fdf91413e55d077cfc4f25092bb02923fb538a84f","6e08a638e1e28020923effd4c65fc517dbe7b06100ff76cde74e427191503b84","6f3a7020233cd77cfe59eefec0a277f6dda323743c8d80e4e54a95cd3cbc23cf","6fccc6f0c5fa71c43211785dced8abd0f3295040eab56063f4e8d77f1c09b8ef","700cd21af9ed7e81900fad9d52de2fb11db48e64b038e4293168f85e5dd0e043","702d1dfa75e92a916a446429f474d4c296e6ea4e8c487995852d0525e8440659","704cf778db6086c3e282c81249fb0ef09c1d7c2043335ef74c7ecb69bb3e84ad","71ef1ed2d5e4bc7eebe7a73bb3e9423e5bc2f8319186380fe8b38334952d3b01","7256ba00af1cf759b95b7bf8ae3b9943f31349bd10a7652a26bb419b368d73a3","7369b339daca0fcf46ac7fe82d65ae95c75d7dbcaaae51209e6d90b6587a014e","73ec844fb3e2b9febd00ba37508b284fad141630f03cb9f74e36a195180f5054","7410de003c7b582e30470d1209eefc796a70c76fe8d61dd9ccfe01ecfa41310c","76bf5a9c126db6eb466287a7c0d823327ee9882a70eaaa6efb03d169b5dba808","781a64598efb2a11156f07271ba1c14c4f6b3d73aa2943b26eae02063df7af70","799abc1e8d381b8d97349479139985e383bb49179b5a80f39807cb35a3ee78ce","79faec494bdd6d098c9d2a9d8559f822938c6b2104188db95321d89e7a732979","7a032dbf0351aa32c77c8d187f7eb697500ff186c88c5946ecc15adc972246a6","7a134e7f1822183ed1c0ded720971539350feaaf92612761210cfc3ccdc55870","7aa52373f2721dd76fc8eeb3d6061794f27ea8d11e96bcb1ff25a97994a77d5c","7ad4ef4b8d3221758a9e7f9577750ee03f6cba11c8eae8bf25f74a3131bd21a2","7baa35131ece7ed9860607157d2531d4d70a061bdc9bb9876e20328f127cec53","7cbf970a11bdb91a40e248eee97ef789205910ebc913349698fc75ed35e82fdf","7d6133667f81aa66a98755d253ea43301b45ada338225df034d2ffdfc79829e7","7e89b59b456dde4bbbdbf8079665bd82c51d8e500018472981c15618b3893959","7ead0c68ffa0ced241af74dde58b3831343dff3f7eaab64bddb9954545b7ba12","7f8188b57ad3b0c28210c95954e5623376a4262dd5e75f002700c6094b8d6b6c","7f91dfc2ea1a3131c4090375db0f489c2a572e245ade6cda4ebd440446d6d60e","7fcb8cba3ed0ee9c342947aa88f0f699bb4f5c23244d21c6c739c9b66d7c6101","800060d7b4934508d0277f90a464e3112fd2fc99af4ef23825d09b0ff53f91c3","800a802a4ce9e597a102f0a566535c1f9f7adfc60c41af6bd2db4fb7fe3c0d0e","820c12fcbded9048a363b9e0ebbc48b24f85fd4a68131b5dfc1b19057bf09ddb","82c419e5de083e423330432c9d45c744043d1bccd8eeccb41e3014ce9ae3c32f","8343a4211a4d0ffdb320d5a4305174d85bb707d15dad978f6436297d022daa11","83a97b9ebb29f5cd014ef5e178970a601ee92c44678f05d1860b383c5f63b79d","85a962a7c23c14dff8d683e738b53f422221697b213cafeb616d3a172a6c4223","8629fddeb4f273b35df69d4d28923adc14eff59d919b1a495d1a68818137c561","872ab2b2d65fe685b91e355f5af051c85b79569ece16448160d01fef38039624","87f2b3634baa504f2ed9508c6cf6a47bbfb36214a177eb13d70d6a987706818c","88b615ef6a31bd9958e98b8ea522f49f0360ccac5d9fa8deb9e3ef3fe3147d9d","89cafbb20d6029656266d8cb0f85103fa519c8032598282fea58c94cc59c4125","89f2105745b3a7cfd30e7d7c598d6c8fdde0a599f30fd0db7382cba50412445e","8b3eec010d1eae43a28c88434f2410a751f790a9d6ec4a08e75e68c171629ab2","8cecfa09651c40be4d7c11c117c80e1911dc75bf6f1cc34be64706823cc024c3","8d250acd40c8a24ba0d51cc73e65bba6856509b5fbf4c7d7a435897a01c6e764","8df1420c27503370db9382f68a0af8d2b4d56f9dbc94b24ffae450a905083a79","8e7371228a726f381fb811d1d812c39917788a3df7e53dba1a3c364e755a0c03","8fae27ba5117e202afbd523b249fc454912571900fc909f5419b8ac96c773c44","902b958b4db7d8d8bf73a82a8aa86e5485b39477047c8ad60175d118fe31d987","91c9ced5e9ab8da897b7f69166a7d0bade5c58d511b42d60d5430d536da45d09","941f70c384905ab77cb9a88e2671301117e4df553da6fc7a09210710deb9b6ca","9442788fa51227044803f1d3efdfc1c2b2da372871a85f0f7a6bb3596a5c003f","947a1cdd43831936480167169d30334f818bb5d882650a3547827c05204af111","971f59cc197732d0c0b6b8aabbbefca4550fb8fb04f8522bdb4257c05a28848a","98a097d6ebb754334250dfd3ccc5f3dfaf5966524758cbfc9e10adf4a0229693","98c7e4bc2f05e9b4ca703db4a02347db7355a44f04e3a4003e26c46a56bded2c","9944d1a9674e555a41d31d069d136461eb06dd4052d40f2e4ea4368dd978e01b","9bbd03293bf53e9db51401d157b3eb2aa51e9c70449350e98b9a0a3fc9a684ce","9cf90b3aa59f3ca0e40fd9e1fec9703428752d63bded6b091d28f614c9ba99ae","9eb67ea41c5bcb9557ba51bbbd1b321a78f16335cadebbed848d8e6c1fc68bab","a0ff0d0bb3a3c801b637d091293f2eeaac68e934274e4116d298ba60ec3461cc","a1baa1f699fd4ce19e8ef6cdfe346e1b0be63e16d5c5cd5feddcccb16a62f269","a3c84d76be9d891812e795dd46470c2978dceeff928d729c0d5dd6def599923b","a64e8aee389ae696d0d4b045c0153092113fa522ed5a0fd9b5658b8418db4ded","a6c531ed9bbafabfdd649f3030daf2f24461163aaf99dc73bb24dddb77bbcb90","a7ff7302e668dcea1cd1db2241ff95c0d73534539bd03fdefebbfb57f60d3849","a8b4a33078335d2811bffb78eee49aab5fcb31597dae366d43e20c7f7800994b","a91a47fb4fa5c1b1a834fa602030e435ad641240e6ceeb99eeeab7341ca09dec","a91c8a1431a4120667cd523cf56bac004794fc5b8b24275ad2f9c8a15c75fba1","aa131e74e695292adab9f57b3ccc5a503a836dd4b95a3b2b107c69f35dba3637","acd7884bca46ea9422503cead985691da05cca25bd5ed52a199783cae7b8b01f","ae69fe306bf5db346ddfa4367cda24c95e44213baca27b0ee7d7167bcdd85af6","ae8c200dbcea29f43b29974cc247d70647c80d5d76385396f1c82ee9f669e2f1","aec13a075b84253397fb97e1c93a23e1aaee6d6bff2a9161bfd00a5b1d7611de","b09355a97e3aef396f681943b37a404a98fccc6bcb97781eddb2fc000d1d985d","b0ecfca0d114bae34ffa62ac3ea05159a4415fc6eb73ab1fcc4d79f657268f19","b25c41f19ba40e646fd9b6f82051ee4c38985539e445b26bd628eae98537df53","b262187aa66e8a97083bf7f79b91595bf7a4077abe7f8be5b00b4998f4579d20","b4091f93c3d96e36b0708f5dcd46e0e7a0a48f098036ccef6164e4a6429ed94c","b4093c67a9195ee7d28d2575e967ac80057b92339489c244243c7c504c669ff0","b44352445272089cf90967d4d413cf7009bed0ac19f3fa95cb831d5ebad081c3","b4ce73bea5219f1b27bffb36c6a9dee14447a710a8938db807770083db4552ac","b5102ef50e7d4ed1925af5a8b45192e737df02fafb75d7065995a2bb93d2e8e1","b5428b5775526a00645566822530fb969b82247ba83f2c80c06d34151e1f9061","b6cf3b02f36e0efa93b04667cdc5701340033a09e41a7196277cf6756999a666","b77c6669bcd54e0fa949faf2f7205f2631acfbc1ccf79f93f8dab5c5717f0e93","b7ffd6cddb12384224772e8de79aec89d8f4bca966a3c2a05763889f92a6db5c","b8abe10a2a92bf537a49e8dee92baf8de3ed591848a1b25151dab0d7ab3134e5","b96cea09313d481dfff1ed1a2c552ea29e8fe68f52139458996a4e36157748d2","b96f9beb6d6d8fbf88c4b8b2b807a362f2640479cab6173cf64c7710817785a0","b9ad2510d8249ec4c8e7fd8b2471727aa1bd0ce8f3dde78e545fb2f8f2985a1d","ba7d7464da8e13722232c8f86273774054693681becc450a68aea21a5a0e9b91","ba87e5d43ddb10937bb17941f055f80a223d0981fbba44107aeec8530e3a7774","bac3431138e986d6426c1e81bdfe0a968394896c0751cbbcc8f36002fd0ed069","bb230236c4ab6353afb4147014c93204d3d1eb8a6d18558075df5fe79ed7f392","bd714f38c881208f1190ad714bf8fa5aa63adf302bdaa8ad8810ff279e43459e","be75cc1ee935f783be39978de91ae196c16141d4096e16eb6d07f59583296b4b","be8c3cb2d8d67e63c8b069920b74c6272922febbc6a0a2c4a0072a7a213681d2","beed0f36d9b1b9a20bfbf89c96862482b8d5b9d4284bc89539efe9c9b11f000d","bfd21b5c8eb26e9d475868bb30d66ee08f20876e9df5cd06aa8fec01ffe666df","bfe97e65f2cbe6bcd0f14ff57ea4dc1dedb2e5f0db92d04d0982cf1932ac1c3e","c112d36ba38c362da1c022945db5b6bbdc3014685ca9bb7d940f5086f00a675c","c23cf45c1dcb748145d87f5c173dd3c8becaf9e3f6fdcb3e2ca91d6726b0842a","c29b8d250a7b5e73f4ef675329da2251b8de032501e4836445b6aafd90c645fa","c329c9df0dae8a036da9be440432d045be3ee13cf5664cfa6ccf11576ed11acb","c4600cd5358b5798a075beb54539d952f200def1c9a573bd237c795fd33ba36f","c6752cc3c7ad06d1e9f127365f078919ac46b77f8a8fe413650094d914838ec3","c6867ec30530fd3feca89a4e968522f783b636b165ef74f288c42dd50bd51a3d","c6bfbb004af355e96ed5b4c8c9b8b7a96d1c08d24bcde7c666728eb9497d6d71","c8bd340e6fc7fa3e97415f7ad4c22c51d88c6e77f782c12923e841c04d3f882b","cad13b6653fd9f811e67d13c5f01f9dec047f8c384097cee01dd2e2db39e539f","cc24c3770587f2421514fa399d2617201752bdca145ac39058de91d45d3d19c1","cd2da00f6f1bad8fb7c1b87cff80e122eb017e44a471cdea769efc67db369038","ce887fb65b6977a2046e7583d704863624e55909ebcc9c3ed065b3d13079a410","cf9223c369b6fb7baa52f301f904352ba8e8d5e4c2a06f70de6ef1cf76fe1b84","cfc3b5044af37ae7485fba8067dcb22b2438bdaa6e3a30c22ce0f9e2c00aa597","d0481d9b6111ab4afba0462e88970b863284807ff44ca97364c84952e3f88583","d0973a1aca6a118375b466d6e91821f8450110fdf042ac848ee16912012d2b0f","d0df3068db679e24d9487ee09a6462ac5cf3df30f46ee466b66feb6dd5ff71e2","d227e0a73e3c5452bc5ab41ea2c695dfc0ff9b0c1c81e59ab3173f796a4157cf","d2cba4dbbfe3d026f825a8b470a2f6011f9b8e245cf042ae8889afbb17dac6b2","d2e4c515093f8a2aa824c8b542a016e5c321065f4525931b2fac4f8af2fe52c6","d31e8aa21d1498f2d4a07c4cc89ea6f5a6d3ce54d334dbff230e0f55db35c85e","d37de74aadd5916eeae243decf347821c4e946356b9f70471658638ac3092f91","d49d02cad8bbfeac607457b08aac6068916ef45d8f6c980279d6e654407cc7be","d4f51c31a454d9abac29457cbbc21e1b5767c0eac1b37c41ee787a3efb05c80f","d5c084e12da4a5111487c166b879042a21a056f761ee22d9237cb4f65f366341","d6077d547aa21ea10a9bdf6c752b8d1a0a6382b4b43a0fdf790f245e66a609fc","d67e8c1aaab1ce6ec1755599ecde153c47c6b90dd4c301663abe9057bc31af57","d6abcc1484c3df45bde915abf48324af1e995c3266a3c6c069e98e94c8d9a4d7","d8ca8e025e226ad6bdd32a6a9fceae2982b0413a0ad09314558b54bdc724bf99","d8d03142030c11a0aa1012102fce2b202baf88e424a1236832937e87450dc579","d9823dfddf6c507ec030fce4bd2d98fbda18e595c2ebc563574d9196cc7a5e33","d9b0972f3406075b860ba7cd2e71d4492c826960319b10389c2c2820e2981254","da37a61fab07ec8856b725854e4064f55a59149aa69cad1bcbf89ec478b9f578","dad01e5bfb13a6c4419f4d24fa8dbb424e93a1c4be656b0e5dd48ac546e0a0d9","db21a75b4fa6165f75268963474f3262124795d816ba80f685bab2c6eaedb028","dd97ab52fd89f42352c595ce137684cc519c473fa17969e8a6adcde7322a4748","dda0a34d6704887eb36bbc0173334b49d755cac8cea3bbd17bfa972f04183dd4","ddbda9408727a19a4a55d516bed99331edf67d8301de9c78564716465c949619","e0288c94ca9c16a6de217e6baeed720fcf83e401bec45bd15ca47ba8fc9b44dd","e1667469384ec775a3df665679cb3fef057dc84dcb18ed8db8b9c5723835968a","e16c328504278cfe520d6d99990f2a4370cc48159aba86694d0f7598fd4b0611","e24df071f5325bb3a5b20f355143556bc7712535ee8b6ce4c426598f06fd2448","e28d8e6b71264d0bfab853e63178f2c151367cce0dbd16125596ff3604b6658d","e2c734504d211580b4e6674eb1c7d31fb6fb730c037210c34c980a96f9098269","e3f19c383354cdf45311f92f00b90fed25dfba7e9892ab2f5f3aa4885876b75f","e409fbfe439455330c0fe003de860e30f7093cc3cc83a32f886c9b539a29f60b","e6300ee8e6c2c4ce6d7ab02b7b06fd1cabe3c5c52b99a6ea3ea8b5acd5092e0b","e734d068446591aba283d136c21b4fb0209f91352cb4fc6589bd651cdbfec163","e7a333109a7aaec2b71048868500c15e721900628eb48790dfeaa1fd4c2dabc3","e7c9175fbfd9fd84bed95d552bc0a439b07a233c3e91fb39ae2f23197ee53f1b","ea1b8a251ecc1fd96697d0c602d3e14ec46383d27bb9485a0326cea5576ffacb","ea311dca2ef14e02b9aae563bb28dc737b04b7f01c1ceb2be3d92007d2c74ac6","ea8e5b79bbe5329ae8437677c8316f2f9fd75bb1d40c88308c269140a7e564c7","eb996138bc91c0ee63bafe1ba10b130ff5a2fc82aa4918296222e0a831a569fe","eba6e8e5a12a86f17fade41bef365aa95491c469e18aa91aef64908a4263c905","edc160a11c07dda8072748b66db7f27b6cd8efbd1faa3f6c826a0fe445859c17","edfcbe4773eac1fe2964179a4ad21294efede89568f2efd8e283ac18bc5693b1","f0f90dee84db760cc1bb0f6e6983d4de0e3d5d9f4adf7b2b52f0d3dbe6d585a4","f1d4a6e98f41ab3f6cfd67cddeab9d0ed287b92cb3dbe575e3ce61925510a792","f21c3a9267110e469f224ac7eb76ca5bb084fc90df014f1ca6791d5770483944","f379a1b9e29aa7fc25c4c0c897eaa3c0e90d66a201a0ade8cbf523a5cdc8cf50","f3e04891c79b604f9235f438adfa49ee27db43d25c7be0d1cc06ae53b8f6d2d8","f46904e701174fe2850798d9e1b077bdac42fcac01dbc385298da01118c82aa6","f53265f53af0b0856911ab08b373736964d0c443e8ba61d7f1d45f5e5b04edf3","f686173d310f41e26e3fe8a7c1dbf4313e4d793323335348badbcf4633f5d699","f704c9c9e2cab1ed44578f48d161320b5fb4384ecdd8b40a5e22c4078a8594da","f89156489d35f9992d5971a52a6e03a7d7f095e15c2c782e85efb1408a2bd6be","f99ef6fa3c9c6bf572ec69eb6eeea9f88ce6590d3a5565bec62b001b6f2a376a","fa2dfc22b4fdbcf402a822e8dd376925655d997a0f96284a60f10665ba3581ba","fa3df5f8349aec4805bbcd279b88697def63f2462d8ada0b5fe1d9983d9a6daa","fa6b97cbca1d4f09662e706293b0aec1eb76b8e2277441f54ab6c548b5423236","faac0c3fa7cdf67b452d407e9a1db5cbe1e9140ecfe300200b0b0a6279c97c66","fbc8b53b5c6f3727c084e5e0429e410a3fed5a17e1a0144692fd196d9836a4bb","fd04d7588bb9e6ca0a8b65ed0c9635082a9ee5f46b2d1b5b25866a072236c1fc","fd60f2a432086c6fc4a4c39d8d2d6edf5794c763c05a6401db2bb5fa2c601775","ff532716738e2fc716c10797d9717f324cca3a1234320a84a73a0b89569f11ab","ffd0fe3449e449c7b9fcdcc7e2c1ffb677e57ad935a252de88a0122d437efa67","ffde5c700732beac27a9b5162213d387422ce199400e56d9cefe550005b6a542"],"schema":"fsgg.atlas/1"} +{"records":["000ada42299601fba29016e5c0e0d4012876fb42670bb10fa0b1315477254ba4","00641d046d6869fdd0023ab3df99e0e67a6ea28f0dcb701f622b1cec8b3e07c6","026b08fb343aefe19177e95b759560d340d372def4b71acf613fefee3438ade2","0357495d23fac4fad210b6dd7ed7cc57dd33d107e1659a81f085cad78300797f","036c148f6d0e89858c9bf4cf380272ca6904bb4ca277a909fb71c47f5450cef7","04e404d89dca295564813149472b1de8e6c43357e2f6d91d169ded7600ed3a02","0509e5c6fdbd2dde0c0db8558647080560714804d00e4f9268342f2e84858a3d","06ad2c8aa0ff3b862edf3ba99e0e4e8801ee163709e66333cd06c3fc61232b05","0a6d7dc5b64970bfdadc9049ace95e8bc163fc421beea70129ff0eaa692c6d06","0ad4403c8f4078dbfa543310c69bd1dfc768e305987214ffc37d7b2600c4687c","0c22360d4653eb0f450e4d3d34564875f1660cfcb2d546095d98b3faa3967cbc","0da4d093b49c0a1f654b38008bb01195e816829279ca1989bd2448194e15361b","0e560af7d9dd2e0f2f588a74cd35512973747f20bdfe0bee0bc889105ea53dc9","0ea7107c2c8edaab3ff2bae32f63cfbef6903a51cdaff257278f757ed5ef429d","0eef4d717eb03f0906aa3be7336aa71f831726afabe8a56077b76f6e82fd08e1","11fe30832d93706c60efd836b09f35f049c4a715ad6144cf277ca240c5780704","1244d27db0cf5075353bcc622d0fb3b5ca6a7d08526e2c5754e8b745c250bf3f","14156f1c6bf0fa8dfcb5cfafac09e012db446d528dad0e4301404fd693b9bed3","155fe673b8ae12549c978e1bf1d5c43e360937fcf2135cdcd5aea6f6c771da44","1945f527afc3c2930ec4d7fa57ebb2ef7dd6321c0dd3ab9233c9963e9e613165","19d657b67672257ece127f3b957674b7fb4780843148db0a36a0b329c2a418ba","1a24f6ef0c08a898f309c1b925fc19b29526f913a61a1dfe4b1a4308ebdd97ac","1b5351b2dc647aba864e387168db5128435cb80da94fc42581cd60a05fc34b9a","1da011289116fe88fe92cb8f0e83ed7ccbbca251681d4e136c5a61c40364f8d3","1ec9445b242d2a2e149fe71c67bf13d8c0e4ebe5a6ed7b022656b9941973909d","1edc36731a9c76ad07d269d8b4fd84c8c956bb43d6f56de17d6208164856ffbe","20901b579f69cc97eb56b492938864667576e1c9bfacf13f8a529c4f6e543448","21338155cb4f52c49e5072c877771be67c75590d9b238ea025fba5209fd6e018","23af79bd1e7995fc8162ddc4d830318acb054bbfcc9c7d5cb141ec306da67386","24d4f2730d94d1b7f149771ef0e59192f4936d142b21f4a56b1a391e4514d38d","2591526ddabbea03fbdc38bf172bc54f42df9bc51eba7ad2b70d6e67215f08f1","26259abc7fe745f52e06f2aa2abb0e50f189bc7608065f04d5c669a0a99941cd","26290a0990d6dac0ce9448e05eb934210603356043dcf14a5d80585288e2aa92","26d6b31965013079d4db67a2c403e01f21e3c30ae65953400dbed92e289a0925","288daf614247c260cb673d8674e8b3874ccc4e269347836851f702d7ac8e2f7c","28abfaf6d50ca38af0b88aa50524200c17af9000da83ddbab3d8f9e06e020fa5","291d3db272eae084d34c04bc1305f2abb26a7e7acbc5515208469b46719a4ed1","2a38ddebfe3380232e35d5a24f9cb9f7c38abbc9c68add4ea5952c1e65d328d2","2c76ce93500601e281a41f5985fe4e3926fc8bc9d01ee687f14052cb553ad2d2","2d599c722a08306b98f2d833fb3e4a7acb9dea92e6a58820caa2f65c09803fb8","2ecd502add2d801eebed39411fadc9a80098ba9ce04a5f4b728a0e4e331232d6","2f7357367d921995f4c6fdaa693392adcd2df4860ef4d25c8dc47f7ddea8c755","2fb2ed7902a8e35dc36489a23245d963026d688008c92fed6fdc1f6bc27198a6","310bfb5b2d061bb733771e5cb7b3b7d25db43af5eda9f806169b7ef9330c2fe7","32f69a7b8997ae98b9305ee578145d795dbcd39ca4469bf2465e57a0295cda51","335683e33b94cb86b5e426b4faed200673bf850151191a08458136ceb164fd4e","3407ec53a884d3945d86a88d6b9a883419dd426e96b1108a8e6686f30397a629","34463778cf2d29e3896a65613cf9e3eb3e9f2d8946d17f12b609e70eec63d128","35da3938b72cf3520e126ad595157104b69ab748904c7b4e12f563d6b103172b","37c8908ea2a349cd3034018027160ad810b28ad1fc203a9a353971e1f7396b4c","37e39faee019bb041627510f1f02746ba9a85696417a083b438eb4974b72c2bf","38a75fd804821f4836f0a7ba8d41af3d3a3a5f5d7dcea68487009297824258d9","397476cf107b48e7a662264f8fea9f880231fd3d1e0401622650f214cfaa35c7","3ad8b0398ba6c354c9e31b7438b2515579fc0b1f17de4b35a914c862a3a11e3b","3b3c6cf083b12a840565e00458e2fd4ee8a61f97cda452703a6b13d7776b6c13","3b4af144afed3d52dd2e1f64e23bc25b3475eee5f7af3bde9886761b15c33dfd","3b5d82795e9f5d1992ab67e078fcf1108247ab9b6d1baeac944d3ec0294cec5d","3d0274f77576abdbdf442c8843e955e1bbc91e9f8cbfe3646b119337cdb13c96","3e2f66baa16c7ea936eba34720a55897438f60b343cbe8fda4eab1e5dde044eb","41c768ea17144c6ec225e9a65d4c3c127fdd7264dcba1a89aa17b20fd5d7e3ee","42aeb46fcc3d10b95e4067bc9cda875fa933b4102873f67c7bf1f8ca6799a598","4320b92712bc14dbe10b56f1cd3d1bdc093fc4be6016732839d0be4dd4d027d3","46cdf2c207f79d388001f6636dfb7a98bb2ba72b9d1c6df4938f0a27691e07a6","480f1ede18ae031b164d49d676feeb1090fb33932676ff52e1e2eb24e8d154cd","4855e1947afc954cb1b20bb45e7af10b098fa34714bd32e9bc77941cf58fdaaa","48797c44c92cb34fd9a57a08020b45c6920b2268dc8ad616c0f814a3710d5316","48d094622ada1806cb30335926007c1abc476b1f7b45a2e250c490afa25e847b","4a724a6a842a132c2185279513f341b79f9be93e42660f1255770eeae3b1323c","4c8c327dacf345e184042092e96ad3ea02ed4cece57dac5fa68ea52fbb5a6adf","4d5a44ba07fafeab823b54a21846269330ce35b4c190f3ddd5434bc8530d9b41","4da0a5be70e8af9c39623deac83822749482187f6a0fc3d186dcfddaa7111576","4f1e58fc658a4ceda181e2a7fa249305b09b573ffd68c2489f204f4957224957","4f2750b974c1404acb721ffc84cbd1d0756a24211dd6f6503c10ea74dbc45676","509ec9c08864b9dd0029f32ffeac85fbac863e2dad459994c65b7cb5264faffa","52049cc9cee43bb27229e6b3e983e02c6aa20dd7d153b13e3c74bc6d2b47cf92","5382c901d160ca2d79888d8acd7a690a5349826b5da486274b0800c9d7513f11","540879695d41205515aaabe5466971014cb43b960a26b8e5958e37fed63df762","5560616d1e72f0a539f9ebbfea3b7d195c1ef5622f97994af1963748d4f97533","556ee783d8e2e4ca50f656c095758be613983f904d998a6534fb155510114f21","55a4711e799294d06988ab4acf77eacd7d424123082bba3ec987dff0ae13999c","55ae095961d78a1514c4dd1e63d477c60179a8662571ab5a90abd3eb2b83eb10","56e7158313357bb145bd98c5f790e569be2203fb2601565a30091a597a7e7ff5","5962dd14d3923433cf723d698d1af19ac37a270b6e88445643fc56a646faab5b","5a2064cdf51026eed65457c05f34bec919b31d96d35c29498d298685965f0b5a","5b77bd6dfa81cc339e729e4195e258facbfeb64b9c680512f742e3fb1961fdd5","5c3527e43fe24c5aa171c6fa4a3de7fe5e78f2527aed0dd19cb21d154d43da21","5c79c77f00167ca140127b00f1a79e1ffac621e46fc461089594206a7df8d7cc","5d015880319af666943e68169ca906bf2f0c813d8bf2c5c0262aeb5a40366350","5f2a75b89983d1005a38afa2cabccc3a39f31989807120281d8505ffd564e0c6","5f4fa6dde5930fe1b42f805895f0f5fb135c2b3ff9830f2bd30ae7526a3295a1","630fdcff1f227b5baf5d10bd78ef0fde68791ac0cd8a15f65065f5cc4501b17b","63113617f2e4ee6b827a69bce6afb3949190a282f5feaaa9e2c9f82372623bb8","63544fa69b09916d52b305700eb9816305ff22b77162a44edd13897acea3a655","63a4394e689acf4a4762cfb4df691d05f923fdf592fd2f8ea41e6a54f98d1136","69ebfc7eb8427db3c5c59bdde652d0cb269426126f8540b1b58caa29ccf130e2","69edc4285578313d1dd2f914d69add075a7b354f7fba717606d1abe15292576b","6a34d9279cae58765d6ee4a980192c0e15f3ca217b9f1815861d472a281b3cf8","6c3c592efe9c684ada5661b8cc88a5c3f6e57c841db06b9e070687504cbf6236","6ce6d164c3e31463fb9e144fdf91413e55d077cfc4f25092bb02923fb538a84f","6e08a638e1e28020923effd4c65fc517dbe7b06100ff76cde74e427191503b84","6f3a7020233cd77cfe59eefec0a277f6dda323743c8d80e4e54a95cd3cbc23cf","6fccc6f0c5fa71c43211785dced8abd0f3295040eab56063f4e8d77f1c09b8ef","700cd21af9ed7e81900fad9d52de2fb11db48e64b038e4293168f85e5dd0e043","702d1dfa75e92a916a446429f474d4c296e6ea4e8c487995852d0525e8440659","704cf778db6086c3e282c81249fb0ef09c1d7c2043335ef74c7ecb69bb3e84ad","71ef1ed2d5e4bc7eebe7a73bb3e9423e5bc2f8319186380fe8b38334952d3b01","7256ba00af1cf759b95b7bf8ae3b9943f31349bd10a7652a26bb419b368d73a3","7369b339daca0fcf46ac7fe82d65ae95c75d7dbcaaae51209e6d90b6587a014e","73ec844fb3e2b9febd00ba37508b284fad141630f03cb9f74e36a195180f5054","7410de003c7b582e30470d1209eefc796a70c76fe8d61dd9ccfe01ecfa41310c","76bf5a9c126db6eb466287a7c0d823327ee9882a70eaaa6efb03d169b5dba808","781a64598efb2a11156f07271ba1c14c4f6b3d73aa2943b26eae02063df7af70","799abc1e8d381b8d97349479139985e383bb49179b5a80f39807cb35a3ee78ce","79faec494bdd6d098c9d2a9d8559f822938c6b2104188db95321d89e7a732979","7a032dbf0351aa32c77c8d187f7eb697500ff186c88c5946ecc15adc972246a6","7a134e7f1822183ed1c0ded720971539350feaaf92612761210cfc3ccdc55870","7aa52373f2721dd76fc8eeb3d6061794f27ea8d11e96bcb1ff25a97994a77d5c","7ad4ef4b8d3221758a9e7f9577750ee03f6cba11c8eae8bf25f74a3131bd21a2","7baa35131ece7ed9860607157d2531d4d70a061bdc9bb9876e20328f127cec53","7cbf970a11bdb91a40e248eee97ef789205910ebc913349698fc75ed35e82fdf","7d6133667f81aa66a98755d253ea43301b45ada338225df034d2ffdfc79829e7","7e89b59b456dde4bbbdbf8079665bd82c51d8e500018472981c15618b3893959","7ead0c68ffa0ced241af74dde58b3831343dff3f7eaab64bddb9954545b7ba12","7f8188b57ad3b0c28210c95954e5623376a4262dd5e75f002700c6094b8d6b6c","7f91dfc2ea1a3131c4090375db0f489c2a572e245ade6cda4ebd440446d6d60e","7fcb8cba3ed0ee9c342947aa88f0f699bb4f5c23244d21c6c739c9b66d7c6101","800060d7b4934508d0277f90a464e3112fd2fc99af4ef23825d09b0ff53f91c3","800a802a4ce9e597a102f0a566535c1f9f7adfc60c41af6bd2db4fb7fe3c0d0e","820c12fcbded9048a363b9e0ebbc48b24f85fd4a68131b5dfc1b19057bf09ddb","82c419e5de083e423330432c9d45c744043d1bccd8eeccb41e3014ce9ae3c32f","8343a4211a4d0ffdb320d5a4305174d85bb707d15dad978f6436297d022daa11","83a97b9ebb29f5cd014ef5e178970a601ee92c44678f05d1860b383c5f63b79d","85a962a7c23c14dff8d683e738b53f422221697b213cafeb616d3a172a6c4223","8629fddeb4f273b35df69d4d28923adc14eff59d919b1a495d1a68818137c561","872ab2b2d65fe685b91e355f5af051c85b79569ece16448160d01fef38039624","87f2b3634baa504f2ed9508c6cf6a47bbfb36214a177eb13d70d6a987706818c","88b615ef6a31bd9958e98b8ea522f49f0360ccac5d9fa8deb9e3ef3fe3147d9d","89cafbb20d6029656266d8cb0f85103fa519c8032598282fea58c94cc59c4125","89f2105745b3a7cfd30e7d7c598d6c8fdde0a599f30fd0db7382cba50412445e","8b3eec010d1eae43a28c88434f2410a751f790a9d6ec4a08e75e68c171629ab2","8cecfa09651c40be4d7c11c117c80e1911dc75bf6f1cc34be64706823cc024c3","8d250acd40c8a24ba0d51cc73e65bba6856509b5fbf4c7d7a435897a01c6e764","8df1420c27503370db9382f68a0af8d2b4d56f9dbc94b24ffae450a905083a79","8e7371228a726f381fb811d1d812c39917788a3df7e53dba1a3c364e755a0c03","8fae27ba5117e202afbd523b249fc454912571900fc909f5419b8ac96c773c44","902b958b4db7d8d8bf73a82a8aa86e5485b39477047c8ad60175d118fe31d987","91c9ced5e9ab8da897b7f69166a7d0bade5c58d511b42d60d5430d536da45d09","941f70c384905ab77cb9a88e2671301117e4df553da6fc7a09210710deb9b6ca","9442788fa51227044803f1d3efdfc1c2b2da372871a85f0f7a6bb3596a5c003f","947a1cdd43831936480167169d30334f818bb5d882650a3547827c05204af111","971f59cc197732d0c0b6b8aabbbefca4550fb8fb04f8522bdb4257c05a28848a","98a097d6ebb754334250dfd3ccc5f3dfaf5966524758cbfc9e10adf4a0229693","98c7e4bc2f05e9b4ca703db4a02347db7355a44f04e3a4003e26c46a56bded2c","9944d1a9674e555a41d31d069d136461eb06dd4052d40f2e4ea4368dd978e01b","9bbd03293bf53e9db51401d157b3eb2aa51e9c70449350e98b9a0a3fc9a684ce","9cf90b3aa59f3ca0e40fd9e1fec9703428752d63bded6b091d28f614c9ba99ae","9eb67ea41c5bcb9557ba51bbbd1b321a78f16335cadebbed848d8e6c1fc68bab","a0ff0d0bb3a3c801b637d091293f2eeaac68e934274e4116d298ba60ec3461cc","a1baa1f699fd4ce19e8ef6cdfe346e1b0be63e16d5c5cd5feddcccb16a62f269","a3c84d76be9d891812e795dd46470c2978dceeff928d729c0d5dd6def599923b","a64e8aee389ae696d0d4b045c0153092113fa522ed5a0fd9b5658b8418db4ded","a6c531ed9bbafabfdd649f3030daf2f24461163aaf99dc73bb24dddb77bbcb90","a7ff7302e668dcea1cd1db2241ff95c0d73534539bd03fdefebbfb57f60d3849","a8b4a33078335d2811bffb78eee49aab5fcb31597dae366d43e20c7f7800994b","a91a47fb4fa5c1b1a834fa602030e435ad641240e6ceeb99eeeab7341ca09dec","a91c8a1431a4120667cd523cf56bac004794fc5b8b24275ad2f9c8a15c75fba1","aa131e74e695292adab9f57b3ccc5a503a836dd4b95a3b2b107c69f35dba3637","acd7884bca46ea9422503cead985691da05cca25bd5ed52a199783cae7b8b01f","ae69fe306bf5db346ddfa4367cda24c95e44213baca27b0ee7d7167bcdd85af6","ae8c200dbcea29f43b29974cc247d70647c80d5d76385396f1c82ee9f669e2f1","aec13a075b84253397fb97e1c93a23e1aaee6d6bff2a9161bfd00a5b1d7611de","b09355a97e3aef396f681943b37a404a98fccc6bcb97781eddb2fc000d1d985d","b0ecfca0d114bae34ffa62ac3ea05159a4415fc6eb73ab1fcc4d79f657268f19","b25c41f19ba40e646fd9b6f82051ee4c38985539e445b26bd628eae98537df53","b262187aa66e8a97083bf7f79b91595bf7a4077abe7f8be5b00b4998f4579d20","b4091f93c3d96e36b0708f5dcd46e0e7a0a48f098036ccef6164e4a6429ed94c","b4093c67a9195ee7d28d2575e967ac80057b92339489c244243c7c504c669ff0","b44352445272089cf90967d4d413cf7009bed0ac19f3fa95cb831d5ebad081c3","b4ce73bea5219f1b27bffb36c6a9dee14447a710a8938db807770083db4552ac","b5102ef50e7d4ed1925af5a8b45192e737df02fafb75d7065995a2bb93d2e8e1","b5428b5775526a00645566822530fb969b82247ba83f2c80c06d34151e1f9061","b6cf3b02f36e0efa93b04667cdc5701340033a09e41a7196277cf6756999a666","b77c6669bcd54e0fa949faf2f7205f2631acfbc1ccf79f93f8dab5c5717f0e93","b7ffd6cddb12384224772e8de79aec89d8f4bca966a3c2a05763889f92a6db5c","b8abe10a2a92bf537a49e8dee92baf8de3ed591848a1b25151dab0d7ab3134e5","b96cea09313d481dfff1ed1a2c552ea29e8fe68f52139458996a4e36157748d2","b96f9beb6d6d8fbf88c4b8b2b807a362f2640479cab6173cf64c7710817785a0","b9ad2510d8249ec4c8e7fd8b2471727aa1bd0ce8f3dde78e545fb2f8f2985a1d","ba7d7464da8e13722232c8f86273774054693681becc450a68aea21a5a0e9b91","ba87e5d43ddb10937bb17941f055f80a223d0981fbba44107aeec8530e3a7774","bac3431138e986d6426c1e81bdfe0a968394896c0751cbbcc8f36002fd0ed069","bb230236c4ab6353afb4147014c93204d3d1eb8a6d18558075df5fe79ed7f392","bd714f38c881208f1190ad714bf8fa5aa63adf302bdaa8ad8810ff279e43459e","be75cc1ee935f783be39978de91ae196c16141d4096e16eb6d07f59583296b4b","be8c3cb2d8d67e63c8b069920b74c6272922febbc6a0a2c4a0072a7a213681d2","beed0f36d9b1b9a20bfbf89c96862482b8d5b9d4284bc89539efe9c9b11f000d","bfd21b5c8eb26e9d475868bb30d66ee08f20876e9df5cd06aa8fec01ffe666df","bfe97e65f2cbe6bcd0f14ff57ea4dc1dedb2e5f0db92d04d0982cf1932ac1c3e","c112d36ba38c362da1c022945db5b6bbdc3014685ca9bb7d940f5086f00a675c","c23cf45c1dcb748145d87f5c173dd3c8becaf9e3f6fdcb3e2ca91d6726b0842a","c29b8d250a7b5e73f4ef675329da2251b8de032501e4836445b6aafd90c645fa","c329c9df0dae8a036da9be440432d045be3ee13cf5664cfa6ccf11576ed11acb","c4600cd5358b5798a075beb54539d952f200def1c9a573bd237c795fd33ba36f","c6752cc3c7ad06d1e9f127365f078919ac46b77f8a8fe413650094d914838ec3","c6867ec30530fd3feca89a4e968522f783b636b165ef74f288c42dd50bd51a3d","c6bfbb004af355e96ed5b4c8c9b8b7a96d1c08d24bcde7c666728eb9497d6d71","c8bd340e6fc7fa3e97415f7ad4c22c51d88c6e77f782c12923e841c04d3f882b","cad13b6653fd9f811e67d13c5f01f9dec047f8c384097cee01dd2e2db39e539f","cc24c3770587f2421514fa399d2617201752bdca145ac39058de91d45d3d19c1","cd2da00f6f1bad8fb7c1b87cff80e122eb017e44a471cdea769efc67db369038","ce887fb65b6977a2046e7583d704863624e55909ebcc9c3ed065b3d13079a410","cf9223c369b6fb7baa52f301f904352ba8e8d5e4c2a06f70de6ef1cf76fe1b84","cfc3b5044af37ae7485fba8067dcb22b2438bdaa6e3a30c22ce0f9e2c00aa597","d0481d9b6111ab4afba0462e88970b863284807ff44ca97364c84952e3f88583","d0973a1aca6a118375b466d6e91821f8450110fdf042ac848ee16912012d2b0f","d0df3068db679e24d9487ee09a6462ac5cf3df30f46ee466b66feb6dd5ff71e2","d227e0a73e3c5452bc5ab41ea2c695dfc0ff9b0c1c81e59ab3173f796a4157cf","d2cba4dbbfe3d026f825a8b470a2f6011f9b8e245cf042ae8889afbb17dac6b2","d2e4c515093f8a2aa824c8b542a016e5c321065f4525931b2fac4f8af2fe52c6","d31e8aa21d1498f2d4a07c4cc89ea6f5a6d3ce54d334dbff230e0f55db35c85e","d37de74aadd5916eeae243decf347821c4e946356b9f70471658638ac3092f91","d49d02cad8bbfeac607457b08aac6068916ef45d8f6c980279d6e654407cc7be","d4f51c31a454d9abac29457cbbc21e1b5767c0eac1b37c41ee787a3efb05c80f","d5c084e12da4a5111487c166b879042a21a056f761ee22d9237cb4f65f366341","d6077d547aa21ea10a9bdf6c752b8d1a0a6382b4b43a0fdf790f245e66a609fc","d67e8c1aaab1ce6ec1755599ecde153c47c6b90dd4c301663abe9057bc31af57","d6abcc1484c3df45bde915abf48324af1e995c3266a3c6c069e98e94c8d9a4d7","d8ca8e025e226ad6bdd32a6a9fceae2982b0413a0ad09314558b54bdc724bf99","d8d03142030c11a0aa1012102fce2b202baf88e424a1236832937e87450dc579","d9823dfddf6c507ec030fce4bd2d98fbda18e595c2ebc563574d9196cc7a5e33","d9b0972f3406075b860ba7cd2e71d4492c826960319b10389c2c2820e2981254","da37a61fab07ec8856b725854e4064f55a59149aa69cad1bcbf89ec478b9f578","dad01e5bfb13a6c4419f4d24fa8dbb424e93a1c4be656b0e5dd48ac546e0a0d9","db21a75b4fa6165f75268963474f3262124795d816ba80f685bab2c6eaedb028","dd97ab52fd89f42352c595ce137684cc519c473fa17969e8a6adcde7322a4748","dda0a34d6704887eb36bbc0173334b49d755cac8cea3bbd17bfa972f04183dd4","ddbda9408727a19a4a55d516bed99331edf67d8301de9c78564716465c949619","e0288c94ca9c16a6de217e6baeed720fcf83e401bec45bd15ca47ba8fc9b44dd","e1667469384ec775a3df665679cb3fef057dc84dcb18ed8db8b9c5723835968a","e16c328504278cfe520d6d99990f2a4370cc48159aba86694d0f7598fd4b0611","e24df071f5325bb3a5b20f355143556bc7712535ee8b6ce4c426598f06fd2448","e28d8e6b71264d0bfab853e63178f2c151367cce0dbd16125596ff3604b6658d","e2c734504d211580b4e6674eb1c7d31fb6fb730c037210c34c980a96f9098269","e3f19c383354cdf45311f92f00b90fed25dfba7e9892ab2f5f3aa4885876b75f","e409fbfe439455330c0fe003de860e30f7093cc3cc83a32f886c9b539a29f60b","e6300ee8e6c2c4ce6d7ab02b7b06fd1cabe3c5c52b99a6ea3ea8b5acd5092e0b","e734d068446591aba283d136c21b4fb0209f91352cb4fc6589bd651cdbfec163","e7a333109a7aaec2b71048868500c15e721900628eb48790dfeaa1fd4c2dabc3","e7c9175fbfd9fd84bed95d552bc0a439b07a233c3e91fb39ae2f23197ee53f1b","ea1b8a251ecc1fd96697d0c602d3e14ec46383d27bb9485a0326cea5576ffacb","ea311dca2ef14e02b9aae563bb28dc737b04b7f01c1ceb2be3d92007d2c74ac6","ea8e5b79bbe5329ae8437677c8316f2f9fd75bb1d40c88308c269140a7e564c7","eb996138bc91c0ee63bafe1ba10b130ff5a2fc82aa4918296222e0a831a569fe","eba6e8e5a12a86f17fade41bef365aa95491c469e18aa91aef64908a4263c905","edc160a11c07dda8072748b66db7f27b6cd8efbd1faa3f6c826a0fe445859c17","edfcbe4773eac1fe2964179a4ad21294efede89568f2efd8e283ac18bc5693b1","f0f90dee84db760cc1bb0f6e6983d4de0e3d5d9f4adf7b2b52f0d3dbe6d585a4","f1d4a6e98f41ab3f6cfd67cddeab9d0ed287b92cb3dbe575e3ce61925510a792","f21c3a9267110e469f224ac7eb76ca5bb084fc90df014f1ca6791d5770483944","f379a1b9e29aa7fc25c4c0c897eaa3c0e90d66a201a0ade8cbf523a5cdc8cf50","f3e04891c79b604f9235f438adfa49ee27db43d25c7be0d1cc06ae53b8f6d2d8","f46904e701174fe2850798d9e1b077bdac42fcac01dbc385298da01118c82aa6","f53265f53af0b0856911ab08b373736964d0c443e8ba61d7f1d45f5e5b04edf3","f686173d310f41e26e3fe8a7c1dbf4313e4d793323335348badbcf4633f5d699","f704c9c9e2cab1ed44578f48d161320b5fb4384ecdd8b40a5e22c4078a8594da","f89156489d35f9992d5971a52a6e03a7d7f095e15c2c782e85efb1408a2bd6be","f99ef6fa3c9c6bf572ec69eb6eeea9f88ce6590d3a5565bec62b001b6f2a376a","fa2dfc22b4fdbcf402a822e8dd376925655d997a0f96284a60f10665ba3581ba","fa3df5f8349aec4805bbcd279b88697def63f2462d8ada0b5fe1d9983d9a6daa","fa6b97cbca1d4f09662e706293b0aec1eb76b8e2277441f54ab6c548b5423236","faac0c3fa7cdf67b452d407e9a1db5cbe1e9140ecfe300200b0b0a6279c97c66","fbc8b53b5c6f3727c084e5e0429e410a3fed5a17e1a0144692fd196d9836a4bb","fd04d7588bb9e6ca0a8b65ed0c9635082a9ee5f46b2d1b5b25866a072236c1fc","fd60f2a432086c6fc4a4c39d8d2d6edf5794c763c05a6401db2bb5fa2c601775","ff532716738e2fc716c10797d9717f324cca3a1234320a84a73a0b89569f11ab","ffd0fe3449e449c7b9fcdcc7e2c1ffb677e57ad935a252de88a0122d437efa67","ffde5c700732beac27a9b5162213d387422ce199400e56d9cefe550005b6a542"],"schema":"fsgg.atlas/1"} diff --git a/.agents/skills/atlas/assets/seed/records/14156f1c6bf0fa8dfcb5cfafac09e012db446d528dad0e4301404fd693b9bed3.json b/.agents/skills/atlas/assets/seed/records/14156f1c6bf0fa8dfcb5cfafac09e012db446d528dad0e4301404fd693b9bed3.json new file mode 100644 index 000000000..9bebaa794 --- /dev/null +++ b/.agents/skills/atlas/assets/seed/records/14156f1c6bf0fa8dfcb5cfafac09e012db446d528dad0e4301404fd693b9bed3.json @@ -0,0 +1 @@ +{"citations":[{"path":".agents/skills/work-programme/SKILL.md","repository":"FS-GG/.github","revision":"ef8eb92f4e8444cf3bf0888d44336c53e229a26a","sha256":"7545dc7f8228b63f531edf087d0fd6535de7e4f620e20a5aa1cebcbef04ffb62"},{"path":".github/workflows/coord-engine.yml","repository":"FS-GG/.github","revision":"a91d94bc07a5696c0c80fb89a6171fbd85d771d4","sha256":"406e5b64320fd58ccb448e6da742d1abbf53efca6369543ab7a88781345c600d"}],"conflictsWith":[],"id":"platform/executable-qualification-and-final-assembly","kind":"lesson","recordedAt":"2026-10-18T10:43:19Z","repository":"FS-GG/.github","schema":"fsgg.atlas/1","status":"recorded","summary":"Before costly qualification, verify that the maintained runner actually invokes the changed assertions and that negative controls fail through that same route; compile success or a zero-test invocation does not establish executable coverage. Assemble compatible source, version, Atlas and delivery-closure changes and reconcile the intended final base before the expensive full run. Defer reporting-only followups when they would invalidate that qualification; this is not a blanket main freeze or permission to bypass required checks. Existing forward recovery retains unavailable original outcomes and reservations as Unknown without repeated unavailable-history searches. Source guidance delivery remains distinct from installed skill adoption and measured process benefit.\n\nThe maintained coord-engine workflow implements early executable feedback after build: Core tests and non-vacuity, focused workspace telemetry tests with a five-minute step bound and non-vacuity, then the full mandatory CLI tests and non-vacuity before browser/package/parity qualification. The original forty-minute job bound remains unchanged. Normal TRX and --blame test-sequence artifacts are retained by an always step; no memory dump is enabled. Focused execution is diagnostic evidence, not full qualification or permission to skip the later suite. Earlier opaque failures and later concrete assertion failures retain their own evidence; a repair does not explain an unobserved original or establish timing savings, installed adoption or current runtime acceptance.","supersedes":["cad13b6653fd9f811e67d13c5f01f9dec047f8c384097cee01dd2e2db39e539f"],"tags":["qualification","coverage","delivery","process","recovery"],"title":"Verify executable coverage early and assemble compatible changes before costly qualification"} diff --git a/.agents/skills/atlas/assets/seed/records/4855e1947afc954cb1b20bb45e7af10b098fa34714bd32e9bc77941cf58fdaaa.json b/.agents/skills/atlas/assets/seed/records/4855e1947afc954cb1b20bb45e7af10b098fa34714bd32e9bc77941cf58fdaaa.json new file mode 100644 index 000000000..d8565dbbb --- /dev/null +++ b/.agents/skills/atlas/assets/seed/records/4855e1947afc954cb1b20bb45e7af10b098fa34714bd32e9bc77941cf58fdaaa.json @@ -0,0 +1 @@ +{"citations":[{"path":"src/FS.GG.Coord.Core/TelemetryStore.fs","repository":"FS-GG/.github","revision":"ef8eb92f4e8444cf3bf0888d44336c53e229a26a","sha256":"8032321c251a03662111e9965845360eb8fd92cda0ce9e220116a81cf4a7e4e2"},{"path":"src/FS.GG.Coord.Cli/SkillTelemetryReaders.fs","repository":"FS-GG/.github","revision":"ef8eb92f4e8444cf3bf0888d44336c53e229a26a","sha256":"a510716436479424894fbd4787ee545c9b37e4090644066310b55b3ada439b7d"},{"path":"src/FS.GG.Coord.Cli/SkillTelemetryAdapter.fs","repository":"FS-GG/.github","revision":"ef8eb92f4e8444cf3bf0888d44336c53e229a26a","sha256":"74d61ae2ce23b4e6fafd940ccd924374d4a8060db0c65693b2b69e69d840b857"},{"path":"src/FS.GG.Coord.Cli/WorkspaceTelemetryApplication.fs","repository":"FS-GG/.github","revision":"ef8eb92f4e8444cf3bf0888d44336c53e229a26a","sha256":"7c1c889ceb8022f66650623016e6e71493b0eba6dc755272a62800095c8ef150"},{"path":"src/FS.GG.Coord.Cli/TelemetryStoreApplication.fs","repository":"FS-GG/.github","revision":"ef8eb92f4e8444cf3bf0888d44336c53e229a26a","sha256":"04fa2aeda375b1bb5f5e1e9a4c8b9983146c8fda6c7388933077e67d1805f025"},{"path":"src/FS.GG.Coord.Cli/TelemetryApplication.fs","repository":"FS-GG/.github","revision":"ef8eb92f4e8444cf3bf0888d44336c53e229a26a","sha256":"fdfa123c0175440004e239ebd49046684c687538cd02269504ac60c84245ff8b"}],"conflictsWith":[],"id":"contract/passive-native-usage-observations","kind":"contract","recordedAt":"2026-10-18T10:43:19Z","repository":"FS-GG/.github","schema":"fsgg.atlas/1","status":"recorded","summary":"At the cited prospective 0.106 source candidate, explicit selected Codex rollout files share the maintained strict native decoder, including recursive duplicate-property and strict UTF8 refusal, and project actual optional response counters through provider-usage-observation/1. Item, inventory and terminal attribution stay unknown/partial; these canonical-only facts never enter qualified item totals. Stable native thread/turn/response identities, a finite serialized producer index, private pending intent and existing immutable spool retain corrections and exact replay. Local enqueue/reporting make no receiver or App Server call. Initial capture-only setup skips credential presence and reports receiver unverified. Same-owner state cloning/migration is unsupported without original state/fence reconciliation; one selected association root is the supported ownership boundary.\n\nReceiver admission refuses cross-owner changes. A complete bounded drain census retains the earliest pending head for each structural scope/source/generation, fencing numeric successors behind uncertain or durable-but-not-applied receipts. Candidate scheduling rotates eligible independent heads and ordinary traffic through the existing sixteen-envelope quantum with one private advisory cursor of at most 256 bytes. The cursor advances under the configuration lock immediately before each actual head attempt, rather than skipping a whole selected quantum. Expired shared deadline/cancellation stops new head attempts; canceled lookup cannot proceed to Submit. Missing/invalid cursor state resets deterministic order. Cursor crashes affect ordering only; queued bytes, receipts and authority remain unchanged. No fixed elapsed-time or eight-pass service guarantee follows; transport timeouts and exact-source tests remain separate.\n\nThe receiver application classifies exactly passive-observation-authenticated-owner-required, passive-observation-owner-mismatch and passive-observation-kind-is-immutable as semantic admission refusals. Their terminal rejected result is distinct from a genuine storage/unknown failure, which keeps the original ready bytes for reconciliation; no broad passive-error prefix turns storage failure into successful cleanup. Unsupported receiver data remains retained at the producer according to its original delivery state. Earlier opaque failures remain Unknown where no determining evidence exists; a newly identified admission-classification defect does not retroactively explain them. Original focused failures remain retained separately from this reviewed source correction, whose runtime result is not claimed here. Full qualification of this unified source, publication, installed producer capture, compatible receiver Host/store and restart/restore durability remain unaccepted here. Host is independently versioned; first useful isolated candidate capture does not wait on Home access or Host deployment. Published/installed 0.105 and the accepted board binding stay unchanged. Earlier records and original failures/Unknown operations remain retained with no replay or reservation release.","supersedes":["7a134e7f1822183ed1c0ded720971539350feaaf92612761210cfc3ccdc55870"],"tags":["telemetry","passive","native","capture","attribution","delivery","corrections"],"title":"Passive native responses separate capture, attribution and delivery"} diff --git a/.claude/skills/atlas/assets/seed/catalog.json b/.claude/skills/atlas/assets/seed/catalog.json index c63bdfe39..3676f31fc 100644 --- a/.claude/skills/atlas/assets/seed/catalog.json +++ b/.claude/skills/atlas/assets/seed/catalog.json @@ -1 +1 @@ -{"records":["000ada42299601fba29016e5c0e0d4012876fb42670bb10fa0b1315477254ba4","00641d046d6869fdd0023ab3df99e0e67a6ea28f0dcb701f622b1cec8b3e07c6","026b08fb343aefe19177e95b759560d340d372def4b71acf613fefee3438ade2","0357495d23fac4fad210b6dd7ed7cc57dd33d107e1659a81f085cad78300797f","036c148f6d0e89858c9bf4cf380272ca6904bb4ca277a909fb71c47f5450cef7","04e404d89dca295564813149472b1de8e6c43357e2f6d91d169ded7600ed3a02","0509e5c6fdbd2dde0c0db8558647080560714804d00e4f9268342f2e84858a3d","06ad2c8aa0ff3b862edf3ba99e0e4e8801ee163709e66333cd06c3fc61232b05","0a6d7dc5b64970bfdadc9049ace95e8bc163fc421beea70129ff0eaa692c6d06","0ad4403c8f4078dbfa543310c69bd1dfc768e305987214ffc37d7b2600c4687c","0c22360d4653eb0f450e4d3d34564875f1660cfcb2d546095d98b3faa3967cbc","0da4d093b49c0a1f654b38008bb01195e816829279ca1989bd2448194e15361b","0e560af7d9dd2e0f2f588a74cd35512973747f20bdfe0bee0bc889105ea53dc9","0ea7107c2c8edaab3ff2bae32f63cfbef6903a51cdaff257278f757ed5ef429d","0eef4d717eb03f0906aa3be7336aa71f831726afabe8a56077b76f6e82fd08e1","11fe30832d93706c60efd836b09f35f049c4a715ad6144cf277ca240c5780704","1244d27db0cf5075353bcc622d0fb3b5ca6a7d08526e2c5754e8b745c250bf3f","155fe673b8ae12549c978e1bf1d5c43e360937fcf2135cdcd5aea6f6c771da44","1945f527afc3c2930ec4d7fa57ebb2ef7dd6321c0dd3ab9233c9963e9e613165","19d657b67672257ece127f3b957674b7fb4780843148db0a36a0b329c2a418ba","1a24f6ef0c08a898f309c1b925fc19b29526f913a61a1dfe4b1a4308ebdd97ac","1b5351b2dc647aba864e387168db5128435cb80da94fc42581cd60a05fc34b9a","1da011289116fe88fe92cb8f0e83ed7ccbbca251681d4e136c5a61c40364f8d3","1ec9445b242d2a2e149fe71c67bf13d8c0e4ebe5a6ed7b022656b9941973909d","1edc36731a9c76ad07d269d8b4fd84c8c956bb43d6f56de17d6208164856ffbe","20901b579f69cc97eb56b492938864667576e1c9bfacf13f8a529c4f6e543448","21338155cb4f52c49e5072c877771be67c75590d9b238ea025fba5209fd6e018","23af79bd1e7995fc8162ddc4d830318acb054bbfcc9c7d5cb141ec306da67386","24d4f2730d94d1b7f149771ef0e59192f4936d142b21f4a56b1a391e4514d38d","2591526ddabbea03fbdc38bf172bc54f42df9bc51eba7ad2b70d6e67215f08f1","26259abc7fe745f52e06f2aa2abb0e50f189bc7608065f04d5c669a0a99941cd","26290a0990d6dac0ce9448e05eb934210603356043dcf14a5d80585288e2aa92","26d6b31965013079d4db67a2c403e01f21e3c30ae65953400dbed92e289a0925","288daf614247c260cb673d8674e8b3874ccc4e269347836851f702d7ac8e2f7c","28abfaf6d50ca38af0b88aa50524200c17af9000da83ddbab3d8f9e06e020fa5","291d3db272eae084d34c04bc1305f2abb26a7e7acbc5515208469b46719a4ed1","2a38ddebfe3380232e35d5a24f9cb9f7c38abbc9c68add4ea5952c1e65d328d2","2c76ce93500601e281a41f5985fe4e3926fc8bc9d01ee687f14052cb553ad2d2","2d599c722a08306b98f2d833fb3e4a7acb9dea92e6a58820caa2f65c09803fb8","2ecd502add2d801eebed39411fadc9a80098ba9ce04a5f4b728a0e4e331232d6","2f7357367d921995f4c6fdaa693392adcd2df4860ef4d25c8dc47f7ddea8c755","2fb2ed7902a8e35dc36489a23245d963026d688008c92fed6fdc1f6bc27198a6","310bfb5b2d061bb733771e5cb7b3b7d25db43af5eda9f806169b7ef9330c2fe7","32f69a7b8997ae98b9305ee578145d795dbcd39ca4469bf2465e57a0295cda51","335683e33b94cb86b5e426b4faed200673bf850151191a08458136ceb164fd4e","3407ec53a884d3945d86a88d6b9a883419dd426e96b1108a8e6686f30397a629","34463778cf2d29e3896a65613cf9e3eb3e9f2d8946d17f12b609e70eec63d128","35da3938b72cf3520e126ad595157104b69ab748904c7b4e12f563d6b103172b","37c8908ea2a349cd3034018027160ad810b28ad1fc203a9a353971e1f7396b4c","37e39faee019bb041627510f1f02746ba9a85696417a083b438eb4974b72c2bf","38a75fd804821f4836f0a7ba8d41af3d3a3a5f5d7dcea68487009297824258d9","397476cf107b48e7a662264f8fea9f880231fd3d1e0401622650f214cfaa35c7","3ad8b0398ba6c354c9e31b7438b2515579fc0b1f17de4b35a914c862a3a11e3b","3b3c6cf083b12a840565e00458e2fd4ee8a61f97cda452703a6b13d7776b6c13","3b4af144afed3d52dd2e1f64e23bc25b3475eee5f7af3bde9886761b15c33dfd","3b5d82795e9f5d1992ab67e078fcf1108247ab9b6d1baeac944d3ec0294cec5d","3d0274f77576abdbdf442c8843e955e1bbc91e9f8cbfe3646b119337cdb13c96","3e2f66baa16c7ea936eba34720a55897438f60b343cbe8fda4eab1e5dde044eb","41c768ea17144c6ec225e9a65d4c3c127fdd7264dcba1a89aa17b20fd5d7e3ee","42aeb46fcc3d10b95e4067bc9cda875fa933b4102873f67c7bf1f8ca6799a598","4320b92712bc14dbe10b56f1cd3d1bdc093fc4be6016732839d0be4dd4d027d3","46cdf2c207f79d388001f6636dfb7a98bb2ba72b9d1c6df4938f0a27691e07a6","480f1ede18ae031b164d49d676feeb1090fb33932676ff52e1e2eb24e8d154cd","48797c44c92cb34fd9a57a08020b45c6920b2268dc8ad616c0f814a3710d5316","48d094622ada1806cb30335926007c1abc476b1f7b45a2e250c490afa25e847b","4a724a6a842a132c2185279513f341b79f9be93e42660f1255770eeae3b1323c","4c8c327dacf345e184042092e96ad3ea02ed4cece57dac5fa68ea52fbb5a6adf","4d5a44ba07fafeab823b54a21846269330ce35b4c190f3ddd5434bc8530d9b41","4da0a5be70e8af9c39623deac83822749482187f6a0fc3d186dcfddaa7111576","4f1e58fc658a4ceda181e2a7fa249305b09b573ffd68c2489f204f4957224957","4f2750b974c1404acb721ffc84cbd1d0756a24211dd6f6503c10ea74dbc45676","509ec9c08864b9dd0029f32ffeac85fbac863e2dad459994c65b7cb5264faffa","52049cc9cee43bb27229e6b3e983e02c6aa20dd7d153b13e3c74bc6d2b47cf92","5382c901d160ca2d79888d8acd7a690a5349826b5da486274b0800c9d7513f11","540879695d41205515aaabe5466971014cb43b960a26b8e5958e37fed63df762","5560616d1e72f0a539f9ebbfea3b7d195c1ef5622f97994af1963748d4f97533","556ee783d8e2e4ca50f656c095758be613983f904d998a6534fb155510114f21","55a4711e799294d06988ab4acf77eacd7d424123082bba3ec987dff0ae13999c","55ae095961d78a1514c4dd1e63d477c60179a8662571ab5a90abd3eb2b83eb10","56e7158313357bb145bd98c5f790e569be2203fb2601565a30091a597a7e7ff5","5962dd14d3923433cf723d698d1af19ac37a270b6e88445643fc56a646faab5b","5a2064cdf51026eed65457c05f34bec919b31d96d35c29498d298685965f0b5a","5b77bd6dfa81cc339e729e4195e258facbfeb64b9c680512f742e3fb1961fdd5","5c3527e43fe24c5aa171c6fa4a3de7fe5e78f2527aed0dd19cb21d154d43da21","5c79c77f00167ca140127b00f1a79e1ffac621e46fc461089594206a7df8d7cc","5d015880319af666943e68169ca906bf2f0c813d8bf2c5c0262aeb5a40366350","5f2a75b89983d1005a38afa2cabccc3a39f31989807120281d8505ffd564e0c6","5f4fa6dde5930fe1b42f805895f0f5fb135c2b3ff9830f2bd30ae7526a3295a1","630fdcff1f227b5baf5d10bd78ef0fde68791ac0cd8a15f65065f5cc4501b17b","63113617f2e4ee6b827a69bce6afb3949190a282f5feaaa9e2c9f82372623bb8","63544fa69b09916d52b305700eb9816305ff22b77162a44edd13897acea3a655","63a4394e689acf4a4762cfb4df691d05f923fdf592fd2f8ea41e6a54f98d1136","69ebfc7eb8427db3c5c59bdde652d0cb269426126f8540b1b58caa29ccf130e2","69edc4285578313d1dd2f914d69add075a7b354f7fba717606d1abe15292576b","6a34d9279cae58765d6ee4a980192c0e15f3ca217b9f1815861d472a281b3cf8","6c3c592efe9c684ada5661b8cc88a5c3f6e57c841db06b9e070687504cbf6236","6ce6d164c3e31463fb9e144fdf91413e55d077cfc4f25092bb02923fb538a84f","6e08a638e1e28020923effd4c65fc517dbe7b06100ff76cde74e427191503b84","6f3a7020233cd77cfe59eefec0a277f6dda323743c8d80e4e54a95cd3cbc23cf","6fccc6f0c5fa71c43211785dced8abd0f3295040eab56063f4e8d77f1c09b8ef","700cd21af9ed7e81900fad9d52de2fb11db48e64b038e4293168f85e5dd0e043","702d1dfa75e92a916a446429f474d4c296e6ea4e8c487995852d0525e8440659","704cf778db6086c3e282c81249fb0ef09c1d7c2043335ef74c7ecb69bb3e84ad","71ef1ed2d5e4bc7eebe7a73bb3e9423e5bc2f8319186380fe8b38334952d3b01","7256ba00af1cf759b95b7bf8ae3b9943f31349bd10a7652a26bb419b368d73a3","7369b339daca0fcf46ac7fe82d65ae95c75d7dbcaaae51209e6d90b6587a014e","73ec844fb3e2b9febd00ba37508b284fad141630f03cb9f74e36a195180f5054","7410de003c7b582e30470d1209eefc796a70c76fe8d61dd9ccfe01ecfa41310c","76bf5a9c126db6eb466287a7c0d823327ee9882a70eaaa6efb03d169b5dba808","781a64598efb2a11156f07271ba1c14c4f6b3d73aa2943b26eae02063df7af70","799abc1e8d381b8d97349479139985e383bb49179b5a80f39807cb35a3ee78ce","79faec494bdd6d098c9d2a9d8559f822938c6b2104188db95321d89e7a732979","7a032dbf0351aa32c77c8d187f7eb697500ff186c88c5946ecc15adc972246a6","7a134e7f1822183ed1c0ded720971539350feaaf92612761210cfc3ccdc55870","7aa52373f2721dd76fc8eeb3d6061794f27ea8d11e96bcb1ff25a97994a77d5c","7ad4ef4b8d3221758a9e7f9577750ee03f6cba11c8eae8bf25f74a3131bd21a2","7baa35131ece7ed9860607157d2531d4d70a061bdc9bb9876e20328f127cec53","7cbf970a11bdb91a40e248eee97ef789205910ebc913349698fc75ed35e82fdf","7d6133667f81aa66a98755d253ea43301b45ada338225df034d2ffdfc79829e7","7e89b59b456dde4bbbdbf8079665bd82c51d8e500018472981c15618b3893959","7ead0c68ffa0ced241af74dde58b3831343dff3f7eaab64bddb9954545b7ba12","7f8188b57ad3b0c28210c95954e5623376a4262dd5e75f002700c6094b8d6b6c","7f91dfc2ea1a3131c4090375db0f489c2a572e245ade6cda4ebd440446d6d60e","7fcb8cba3ed0ee9c342947aa88f0f699bb4f5c23244d21c6c739c9b66d7c6101","800060d7b4934508d0277f90a464e3112fd2fc99af4ef23825d09b0ff53f91c3","800a802a4ce9e597a102f0a566535c1f9f7adfc60c41af6bd2db4fb7fe3c0d0e","820c12fcbded9048a363b9e0ebbc48b24f85fd4a68131b5dfc1b19057bf09ddb","82c419e5de083e423330432c9d45c744043d1bccd8eeccb41e3014ce9ae3c32f","8343a4211a4d0ffdb320d5a4305174d85bb707d15dad978f6436297d022daa11","83a97b9ebb29f5cd014ef5e178970a601ee92c44678f05d1860b383c5f63b79d","85a962a7c23c14dff8d683e738b53f422221697b213cafeb616d3a172a6c4223","8629fddeb4f273b35df69d4d28923adc14eff59d919b1a495d1a68818137c561","872ab2b2d65fe685b91e355f5af051c85b79569ece16448160d01fef38039624","87f2b3634baa504f2ed9508c6cf6a47bbfb36214a177eb13d70d6a987706818c","88b615ef6a31bd9958e98b8ea522f49f0360ccac5d9fa8deb9e3ef3fe3147d9d","89cafbb20d6029656266d8cb0f85103fa519c8032598282fea58c94cc59c4125","89f2105745b3a7cfd30e7d7c598d6c8fdde0a599f30fd0db7382cba50412445e","8b3eec010d1eae43a28c88434f2410a751f790a9d6ec4a08e75e68c171629ab2","8cecfa09651c40be4d7c11c117c80e1911dc75bf6f1cc34be64706823cc024c3","8d250acd40c8a24ba0d51cc73e65bba6856509b5fbf4c7d7a435897a01c6e764","8df1420c27503370db9382f68a0af8d2b4d56f9dbc94b24ffae450a905083a79","8e7371228a726f381fb811d1d812c39917788a3df7e53dba1a3c364e755a0c03","8fae27ba5117e202afbd523b249fc454912571900fc909f5419b8ac96c773c44","902b958b4db7d8d8bf73a82a8aa86e5485b39477047c8ad60175d118fe31d987","91c9ced5e9ab8da897b7f69166a7d0bade5c58d511b42d60d5430d536da45d09","941f70c384905ab77cb9a88e2671301117e4df553da6fc7a09210710deb9b6ca","9442788fa51227044803f1d3efdfc1c2b2da372871a85f0f7a6bb3596a5c003f","947a1cdd43831936480167169d30334f818bb5d882650a3547827c05204af111","971f59cc197732d0c0b6b8aabbbefca4550fb8fb04f8522bdb4257c05a28848a","98a097d6ebb754334250dfd3ccc5f3dfaf5966524758cbfc9e10adf4a0229693","98c7e4bc2f05e9b4ca703db4a02347db7355a44f04e3a4003e26c46a56bded2c","9944d1a9674e555a41d31d069d136461eb06dd4052d40f2e4ea4368dd978e01b","9bbd03293bf53e9db51401d157b3eb2aa51e9c70449350e98b9a0a3fc9a684ce","9cf90b3aa59f3ca0e40fd9e1fec9703428752d63bded6b091d28f614c9ba99ae","9eb67ea41c5bcb9557ba51bbbd1b321a78f16335cadebbed848d8e6c1fc68bab","a0ff0d0bb3a3c801b637d091293f2eeaac68e934274e4116d298ba60ec3461cc","a1baa1f699fd4ce19e8ef6cdfe346e1b0be63e16d5c5cd5feddcccb16a62f269","a3c84d76be9d891812e795dd46470c2978dceeff928d729c0d5dd6def599923b","a64e8aee389ae696d0d4b045c0153092113fa522ed5a0fd9b5658b8418db4ded","a6c531ed9bbafabfdd649f3030daf2f24461163aaf99dc73bb24dddb77bbcb90","a7ff7302e668dcea1cd1db2241ff95c0d73534539bd03fdefebbfb57f60d3849","a8b4a33078335d2811bffb78eee49aab5fcb31597dae366d43e20c7f7800994b","a91a47fb4fa5c1b1a834fa602030e435ad641240e6ceeb99eeeab7341ca09dec","a91c8a1431a4120667cd523cf56bac004794fc5b8b24275ad2f9c8a15c75fba1","aa131e74e695292adab9f57b3ccc5a503a836dd4b95a3b2b107c69f35dba3637","acd7884bca46ea9422503cead985691da05cca25bd5ed52a199783cae7b8b01f","ae69fe306bf5db346ddfa4367cda24c95e44213baca27b0ee7d7167bcdd85af6","ae8c200dbcea29f43b29974cc247d70647c80d5d76385396f1c82ee9f669e2f1","aec13a075b84253397fb97e1c93a23e1aaee6d6bff2a9161bfd00a5b1d7611de","b09355a97e3aef396f681943b37a404a98fccc6bcb97781eddb2fc000d1d985d","b0ecfca0d114bae34ffa62ac3ea05159a4415fc6eb73ab1fcc4d79f657268f19","b25c41f19ba40e646fd9b6f82051ee4c38985539e445b26bd628eae98537df53","b262187aa66e8a97083bf7f79b91595bf7a4077abe7f8be5b00b4998f4579d20","b4091f93c3d96e36b0708f5dcd46e0e7a0a48f098036ccef6164e4a6429ed94c","b4093c67a9195ee7d28d2575e967ac80057b92339489c244243c7c504c669ff0","b44352445272089cf90967d4d413cf7009bed0ac19f3fa95cb831d5ebad081c3","b4ce73bea5219f1b27bffb36c6a9dee14447a710a8938db807770083db4552ac","b5102ef50e7d4ed1925af5a8b45192e737df02fafb75d7065995a2bb93d2e8e1","b5428b5775526a00645566822530fb969b82247ba83f2c80c06d34151e1f9061","b6cf3b02f36e0efa93b04667cdc5701340033a09e41a7196277cf6756999a666","b77c6669bcd54e0fa949faf2f7205f2631acfbc1ccf79f93f8dab5c5717f0e93","b7ffd6cddb12384224772e8de79aec89d8f4bca966a3c2a05763889f92a6db5c","b8abe10a2a92bf537a49e8dee92baf8de3ed591848a1b25151dab0d7ab3134e5","b96cea09313d481dfff1ed1a2c552ea29e8fe68f52139458996a4e36157748d2","b96f9beb6d6d8fbf88c4b8b2b807a362f2640479cab6173cf64c7710817785a0","b9ad2510d8249ec4c8e7fd8b2471727aa1bd0ce8f3dde78e545fb2f8f2985a1d","ba7d7464da8e13722232c8f86273774054693681becc450a68aea21a5a0e9b91","ba87e5d43ddb10937bb17941f055f80a223d0981fbba44107aeec8530e3a7774","bac3431138e986d6426c1e81bdfe0a968394896c0751cbbcc8f36002fd0ed069","bb230236c4ab6353afb4147014c93204d3d1eb8a6d18558075df5fe79ed7f392","bd714f38c881208f1190ad714bf8fa5aa63adf302bdaa8ad8810ff279e43459e","be75cc1ee935f783be39978de91ae196c16141d4096e16eb6d07f59583296b4b","be8c3cb2d8d67e63c8b069920b74c6272922febbc6a0a2c4a0072a7a213681d2","beed0f36d9b1b9a20bfbf89c96862482b8d5b9d4284bc89539efe9c9b11f000d","bfd21b5c8eb26e9d475868bb30d66ee08f20876e9df5cd06aa8fec01ffe666df","bfe97e65f2cbe6bcd0f14ff57ea4dc1dedb2e5f0db92d04d0982cf1932ac1c3e","c112d36ba38c362da1c022945db5b6bbdc3014685ca9bb7d940f5086f00a675c","c23cf45c1dcb748145d87f5c173dd3c8becaf9e3f6fdcb3e2ca91d6726b0842a","c29b8d250a7b5e73f4ef675329da2251b8de032501e4836445b6aafd90c645fa","c329c9df0dae8a036da9be440432d045be3ee13cf5664cfa6ccf11576ed11acb","c4600cd5358b5798a075beb54539d952f200def1c9a573bd237c795fd33ba36f","c6752cc3c7ad06d1e9f127365f078919ac46b77f8a8fe413650094d914838ec3","c6867ec30530fd3feca89a4e968522f783b636b165ef74f288c42dd50bd51a3d","c6bfbb004af355e96ed5b4c8c9b8b7a96d1c08d24bcde7c666728eb9497d6d71","c8bd340e6fc7fa3e97415f7ad4c22c51d88c6e77f782c12923e841c04d3f882b","cad13b6653fd9f811e67d13c5f01f9dec047f8c384097cee01dd2e2db39e539f","cc24c3770587f2421514fa399d2617201752bdca145ac39058de91d45d3d19c1","cd2da00f6f1bad8fb7c1b87cff80e122eb017e44a471cdea769efc67db369038","ce887fb65b6977a2046e7583d704863624e55909ebcc9c3ed065b3d13079a410","cf9223c369b6fb7baa52f301f904352ba8e8d5e4c2a06f70de6ef1cf76fe1b84","cfc3b5044af37ae7485fba8067dcb22b2438bdaa6e3a30c22ce0f9e2c00aa597","d0481d9b6111ab4afba0462e88970b863284807ff44ca97364c84952e3f88583","d0973a1aca6a118375b466d6e91821f8450110fdf042ac848ee16912012d2b0f","d0df3068db679e24d9487ee09a6462ac5cf3df30f46ee466b66feb6dd5ff71e2","d227e0a73e3c5452bc5ab41ea2c695dfc0ff9b0c1c81e59ab3173f796a4157cf","d2cba4dbbfe3d026f825a8b470a2f6011f9b8e245cf042ae8889afbb17dac6b2","d2e4c515093f8a2aa824c8b542a016e5c321065f4525931b2fac4f8af2fe52c6","d31e8aa21d1498f2d4a07c4cc89ea6f5a6d3ce54d334dbff230e0f55db35c85e","d37de74aadd5916eeae243decf347821c4e946356b9f70471658638ac3092f91","d49d02cad8bbfeac607457b08aac6068916ef45d8f6c980279d6e654407cc7be","d4f51c31a454d9abac29457cbbc21e1b5767c0eac1b37c41ee787a3efb05c80f","d5c084e12da4a5111487c166b879042a21a056f761ee22d9237cb4f65f366341","d6077d547aa21ea10a9bdf6c752b8d1a0a6382b4b43a0fdf790f245e66a609fc","d67e8c1aaab1ce6ec1755599ecde153c47c6b90dd4c301663abe9057bc31af57","d6abcc1484c3df45bde915abf48324af1e995c3266a3c6c069e98e94c8d9a4d7","d8ca8e025e226ad6bdd32a6a9fceae2982b0413a0ad09314558b54bdc724bf99","d8d03142030c11a0aa1012102fce2b202baf88e424a1236832937e87450dc579","d9823dfddf6c507ec030fce4bd2d98fbda18e595c2ebc563574d9196cc7a5e33","d9b0972f3406075b860ba7cd2e71d4492c826960319b10389c2c2820e2981254","da37a61fab07ec8856b725854e4064f55a59149aa69cad1bcbf89ec478b9f578","dad01e5bfb13a6c4419f4d24fa8dbb424e93a1c4be656b0e5dd48ac546e0a0d9","db21a75b4fa6165f75268963474f3262124795d816ba80f685bab2c6eaedb028","dd97ab52fd89f42352c595ce137684cc519c473fa17969e8a6adcde7322a4748","dda0a34d6704887eb36bbc0173334b49d755cac8cea3bbd17bfa972f04183dd4","ddbda9408727a19a4a55d516bed99331edf67d8301de9c78564716465c949619","e0288c94ca9c16a6de217e6baeed720fcf83e401bec45bd15ca47ba8fc9b44dd","e1667469384ec775a3df665679cb3fef057dc84dcb18ed8db8b9c5723835968a","e16c328504278cfe520d6d99990f2a4370cc48159aba86694d0f7598fd4b0611","e24df071f5325bb3a5b20f355143556bc7712535ee8b6ce4c426598f06fd2448","e28d8e6b71264d0bfab853e63178f2c151367cce0dbd16125596ff3604b6658d","e2c734504d211580b4e6674eb1c7d31fb6fb730c037210c34c980a96f9098269","e3f19c383354cdf45311f92f00b90fed25dfba7e9892ab2f5f3aa4885876b75f","e409fbfe439455330c0fe003de860e30f7093cc3cc83a32f886c9b539a29f60b","e6300ee8e6c2c4ce6d7ab02b7b06fd1cabe3c5c52b99a6ea3ea8b5acd5092e0b","e734d068446591aba283d136c21b4fb0209f91352cb4fc6589bd651cdbfec163","e7a333109a7aaec2b71048868500c15e721900628eb48790dfeaa1fd4c2dabc3","e7c9175fbfd9fd84bed95d552bc0a439b07a233c3e91fb39ae2f23197ee53f1b","ea1b8a251ecc1fd96697d0c602d3e14ec46383d27bb9485a0326cea5576ffacb","ea311dca2ef14e02b9aae563bb28dc737b04b7f01c1ceb2be3d92007d2c74ac6","ea8e5b79bbe5329ae8437677c8316f2f9fd75bb1d40c88308c269140a7e564c7","eb996138bc91c0ee63bafe1ba10b130ff5a2fc82aa4918296222e0a831a569fe","eba6e8e5a12a86f17fade41bef365aa95491c469e18aa91aef64908a4263c905","edc160a11c07dda8072748b66db7f27b6cd8efbd1faa3f6c826a0fe445859c17","edfcbe4773eac1fe2964179a4ad21294efede89568f2efd8e283ac18bc5693b1","f0f90dee84db760cc1bb0f6e6983d4de0e3d5d9f4adf7b2b52f0d3dbe6d585a4","f1d4a6e98f41ab3f6cfd67cddeab9d0ed287b92cb3dbe575e3ce61925510a792","f21c3a9267110e469f224ac7eb76ca5bb084fc90df014f1ca6791d5770483944","f379a1b9e29aa7fc25c4c0c897eaa3c0e90d66a201a0ade8cbf523a5cdc8cf50","f3e04891c79b604f9235f438adfa49ee27db43d25c7be0d1cc06ae53b8f6d2d8","f46904e701174fe2850798d9e1b077bdac42fcac01dbc385298da01118c82aa6","f53265f53af0b0856911ab08b373736964d0c443e8ba61d7f1d45f5e5b04edf3","f686173d310f41e26e3fe8a7c1dbf4313e4d793323335348badbcf4633f5d699","f704c9c9e2cab1ed44578f48d161320b5fb4384ecdd8b40a5e22c4078a8594da","f89156489d35f9992d5971a52a6e03a7d7f095e15c2c782e85efb1408a2bd6be","f99ef6fa3c9c6bf572ec69eb6eeea9f88ce6590d3a5565bec62b001b6f2a376a","fa2dfc22b4fdbcf402a822e8dd376925655d997a0f96284a60f10665ba3581ba","fa3df5f8349aec4805bbcd279b88697def63f2462d8ada0b5fe1d9983d9a6daa","fa6b97cbca1d4f09662e706293b0aec1eb76b8e2277441f54ab6c548b5423236","faac0c3fa7cdf67b452d407e9a1db5cbe1e9140ecfe300200b0b0a6279c97c66","fbc8b53b5c6f3727c084e5e0429e410a3fed5a17e1a0144692fd196d9836a4bb","fd04d7588bb9e6ca0a8b65ed0c9635082a9ee5f46b2d1b5b25866a072236c1fc","fd60f2a432086c6fc4a4c39d8d2d6edf5794c763c05a6401db2bb5fa2c601775","ff532716738e2fc716c10797d9717f324cca3a1234320a84a73a0b89569f11ab","ffd0fe3449e449c7b9fcdcc7e2c1ffb677e57ad935a252de88a0122d437efa67","ffde5c700732beac27a9b5162213d387422ce199400e56d9cefe550005b6a542"],"schema":"fsgg.atlas/1"} +{"records":["000ada42299601fba29016e5c0e0d4012876fb42670bb10fa0b1315477254ba4","00641d046d6869fdd0023ab3df99e0e67a6ea28f0dcb701f622b1cec8b3e07c6","026b08fb343aefe19177e95b759560d340d372def4b71acf613fefee3438ade2","0357495d23fac4fad210b6dd7ed7cc57dd33d107e1659a81f085cad78300797f","036c148f6d0e89858c9bf4cf380272ca6904bb4ca277a909fb71c47f5450cef7","04e404d89dca295564813149472b1de8e6c43357e2f6d91d169ded7600ed3a02","0509e5c6fdbd2dde0c0db8558647080560714804d00e4f9268342f2e84858a3d","06ad2c8aa0ff3b862edf3ba99e0e4e8801ee163709e66333cd06c3fc61232b05","0a6d7dc5b64970bfdadc9049ace95e8bc163fc421beea70129ff0eaa692c6d06","0ad4403c8f4078dbfa543310c69bd1dfc768e305987214ffc37d7b2600c4687c","0c22360d4653eb0f450e4d3d34564875f1660cfcb2d546095d98b3faa3967cbc","0da4d093b49c0a1f654b38008bb01195e816829279ca1989bd2448194e15361b","0e560af7d9dd2e0f2f588a74cd35512973747f20bdfe0bee0bc889105ea53dc9","0ea7107c2c8edaab3ff2bae32f63cfbef6903a51cdaff257278f757ed5ef429d","0eef4d717eb03f0906aa3be7336aa71f831726afabe8a56077b76f6e82fd08e1","11fe30832d93706c60efd836b09f35f049c4a715ad6144cf277ca240c5780704","1244d27db0cf5075353bcc622d0fb3b5ca6a7d08526e2c5754e8b745c250bf3f","14156f1c6bf0fa8dfcb5cfafac09e012db446d528dad0e4301404fd693b9bed3","155fe673b8ae12549c978e1bf1d5c43e360937fcf2135cdcd5aea6f6c771da44","1945f527afc3c2930ec4d7fa57ebb2ef7dd6321c0dd3ab9233c9963e9e613165","19d657b67672257ece127f3b957674b7fb4780843148db0a36a0b329c2a418ba","1a24f6ef0c08a898f309c1b925fc19b29526f913a61a1dfe4b1a4308ebdd97ac","1b5351b2dc647aba864e387168db5128435cb80da94fc42581cd60a05fc34b9a","1da011289116fe88fe92cb8f0e83ed7ccbbca251681d4e136c5a61c40364f8d3","1ec9445b242d2a2e149fe71c67bf13d8c0e4ebe5a6ed7b022656b9941973909d","1edc36731a9c76ad07d269d8b4fd84c8c956bb43d6f56de17d6208164856ffbe","20901b579f69cc97eb56b492938864667576e1c9bfacf13f8a529c4f6e543448","21338155cb4f52c49e5072c877771be67c75590d9b238ea025fba5209fd6e018","23af79bd1e7995fc8162ddc4d830318acb054bbfcc9c7d5cb141ec306da67386","24d4f2730d94d1b7f149771ef0e59192f4936d142b21f4a56b1a391e4514d38d","2591526ddabbea03fbdc38bf172bc54f42df9bc51eba7ad2b70d6e67215f08f1","26259abc7fe745f52e06f2aa2abb0e50f189bc7608065f04d5c669a0a99941cd","26290a0990d6dac0ce9448e05eb934210603356043dcf14a5d80585288e2aa92","26d6b31965013079d4db67a2c403e01f21e3c30ae65953400dbed92e289a0925","288daf614247c260cb673d8674e8b3874ccc4e269347836851f702d7ac8e2f7c","28abfaf6d50ca38af0b88aa50524200c17af9000da83ddbab3d8f9e06e020fa5","291d3db272eae084d34c04bc1305f2abb26a7e7acbc5515208469b46719a4ed1","2a38ddebfe3380232e35d5a24f9cb9f7c38abbc9c68add4ea5952c1e65d328d2","2c76ce93500601e281a41f5985fe4e3926fc8bc9d01ee687f14052cb553ad2d2","2d599c722a08306b98f2d833fb3e4a7acb9dea92e6a58820caa2f65c09803fb8","2ecd502add2d801eebed39411fadc9a80098ba9ce04a5f4b728a0e4e331232d6","2f7357367d921995f4c6fdaa693392adcd2df4860ef4d25c8dc47f7ddea8c755","2fb2ed7902a8e35dc36489a23245d963026d688008c92fed6fdc1f6bc27198a6","310bfb5b2d061bb733771e5cb7b3b7d25db43af5eda9f806169b7ef9330c2fe7","32f69a7b8997ae98b9305ee578145d795dbcd39ca4469bf2465e57a0295cda51","335683e33b94cb86b5e426b4faed200673bf850151191a08458136ceb164fd4e","3407ec53a884d3945d86a88d6b9a883419dd426e96b1108a8e6686f30397a629","34463778cf2d29e3896a65613cf9e3eb3e9f2d8946d17f12b609e70eec63d128","35da3938b72cf3520e126ad595157104b69ab748904c7b4e12f563d6b103172b","37c8908ea2a349cd3034018027160ad810b28ad1fc203a9a353971e1f7396b4c","37e39faee019bb041627510f1f02746ba9a85696417a083b438eb4974b72c2bf","38a75fd804821f4836f0a7ba8d41af3d3a3a5f5d7dcea68487009297824258d9","397476cf107b48e7a662264f8fea9f880231fd3d1e0401622650f214cfaa35c7","3ad8b0398ba6c354c9e31b7438b2515579fc0b1f17de4b35a914c862a3a11e3b","3b3c6cf083b12a840565e00458e2fd4ee8a61f97cda452703a6b13d7776b6c13","3b4af144afed3d52dd2e1f64e23bc25b3475eee5f7af3bde9886761b15c33dfd","3b5d82795e9f5d1992ab67e078fcf1108247ab9b6d1baeac944d3ec0294cec5d","3d0274f77576abdbdf442c8843e955e1bbc91e9f8cbfe3646b119337cdb13c96","3e2f66baa16c7ea936eba34720a55897438f60b343cbe8fda4eab1e5dde044eb","41c768ea17144c6ec225e9a65d4c3c127fdd7264dcba1a89aa17b20fd5d7e3ee","42aeb46fcc3d10b95e4067bc9cda875fa933b4102873f67c7bf1f8ca6799a598","4320b92712bc14dbe10b56f1cd3d1bdc093fc4be6016732839d0be4dd4d027d3","46cdf2c207f79d388001f6636dfb7a98bb2ba72b9d1c6df4938f0a27691e07a6","480f1ede18ae031b164d49d676feeb1090fb33932676ff52e1e2eb24e8d154cd","4855e1947afc954cb1b20bb45e7af10b098fa34714bd32e9bc77941cf58fdaaa","48797c44c92cb34fd9a57a08020b45c6920b2268dc8ad616c0f814a3710d5316","48d094622ada1806cb30335926007c1abc476b1f7b45a2e250c490afa25e847b","4a724a6a842a132c2185279513f341b79f9be93e42660f1255770eeae3b1323c","4c8c327dacf345e184042092e96ad3ea02ed4cece57dac5fa68ea52fbb5a6adf","4d5a44ba07fafeab823b54a21846269330ce35b4c190f3ddd5434bc8530d9b41","4da0a5be70e8af9c39623deac83822749482187f6a0fc3d186dcfddaa7111576","4f1e58fc658a4ceda181e2a7fa249305b09b573ffd68c2489f204f4957224957","4f2750b974c1404acb721ffc84cbd1d0756a24211dd6f6503c10ea74dbc45676","509ec9c08864b9dd0029f32ffeac85fbac863e2dad459994c65b7cb5264faffa","52049cc9cee43bb27229e6b3e983e02c6aa20dd7d153b13e3c74bc6d2b47cf92","5382c901d160ca2d79888d8acd7a690a5349826b5da486274b0800c9d7513f11","540879695d41205515aaabe5466971014cb43b960a26b8e5958e37fed63df762","5560616d1e72f0a539f9ebbfea3b7d195c1ef5622f97994af1963748d4f97533","556ee783d8e2e4ca50f656c095758be613983f904d998a6534fb155510114f21","55a4711e799294d06988ab4acf77eacd7d424123082bba3ec987dff0ae13999c","55ae095961d78a1514c4dd1e63d477c60179a8662571ab5a90abd3eb2b83eb10","56e7158313357bb145bd98c5f790e569be2203fb2601565a30091a597a7e7ff5","5962dd14d3923433cf723d698d1af19ac37a270b6e88445643fc56a646faab5b","5a2064cdf51026eed65457c05f34bec919b31d96d35c29498d298685965f0b5a","5b77bd6dfa81cc339e729e4195e258facbfeb64b9c680512f742e3fb1961fdd5","5c3527e43fe24c5aa171c6fa4a3de7fe5e78f2527aed0dd19cb21d154d43da21","5c79c77f00167ca140127b00f1a79e1ffac621e46fc461089594206a7df8d7cc","5d015880319af666943e68169ca906bf2f0c813d8bf2c5c0262aeb5a40366350","5f2a75b89983d1005a38afa2cabccc3a39f31989807120281d8505ffd564e0c6","5f4fa6dde5930fe1b42f805895f0f5fb135c2b3ff9830f2bd30ae7526a3295a1","630fdcff1f227b5baf5d10bd78ef0fde68791ac0cd8a15f65065f5cc4501b17b","63113617f2e4ee6b827a69bce6afb3949190a282f5feaaa9e2c9f82372623bb8","63544fa69b09916d52b305700eb9816305ff22b77162a44edd13897acea3a655","63a4394e689acf4a4762cfb4df691d05f923fdf592fd2f8ea41e6a54f98d1136","69ebfc7eb8427db3c5c59bdde652d0cb269426126f8540b1b58caa29ccf130e2","69edc4285578313d1dd2f914d69add075a7b354f7fba717606d1abe15292576b","6a34d9279cae58765d6ee4a980192c0e15f3ca217b9f1815861d472a281b3cf8","6c3c592efe9c684ada5661b8cc88a5c3f6e57c841db06b9e070687504cbf6236","6ce6d164c3e31463fb9e144fdf91413e55d077cfc4f25092bb02923fb538a84f","6e08a638e1e28020923effd4c65fc517dbe7b06100ff76cde74e427191503b84","6f3a7020233cd77cfe59eefec0a277f6dda323743c8d80e4e54a95cd3cbc23cf","6fccc6f0c5fa71c43211785dced8abd0f3295040eab56063f4e8d77f1c09b8ef","700cd21af9ed7e81900fad9d52de2fb11db48e64b038e4293168f85e5dd0e043","702d1dfa75e92a916a446429f474d4c296e6ea4e8c487995852d0525e8440659","704cf778db6086c3e282c81249fb0ef09c1d7c2043335ef74c7ecb69bb3e84ad","71ef1ed2d5e4bc7eebe7a73bb3e9423e5bc2f8319186380fe8b38334952d3b01","7256ba00af1cf759b95b7bf8ae3b9943f31349bd10a7652a26bb419b368d73a3","7369b339daca0fcf46ac7fe82d65ae95c75d7dbcaaae51209e6d90b6587a014e","73ec844fb3e2b9febd00ba37508b284fad141630f03cb9f74e36a195180f5054","7410de003c7b582e30470d1209eefc796a70c76fe8d61dd9ccfe01ecfa41310c","76bf5a9c126db6eb466287a7c0d823327ee9882a70eaaa6efb03d169b5dba808","781a64598efb2a11156f07271ba1c14c4f6b3d73aa2943b26eae02063df7af70","799abc1e8d381b8d97349479139985e383bb49179b5a80f39807cb35a3ee78ce","79faec494bdd6d098c9d2a9d8559f822938c6b2104188db95321d89e7a732979","7a032dbf0351aa32c77c8d187f7eb697500ff186c88c5946ecc15adc972246a6","7a134e7f1822183ed1c0ded720971539350feaaf92612761210cfc3ccdc55870","7aa52373f2721dd76fc8eeb3d6061794f27ea8d11e96bcb1ff25a97994a77d5c","7ad4ef4b8d3221758a9e7f9577750ee03f6cba11c8eae8bf25f74a3131bd21a2","7baa35131ece7ed9860607157d2531d4d70a061bdc9bb9876e20328f127cec53","7cbf970a11bdb91a40e248eee97ef789205910ebc913349698fc75ed35e82fdf","7d6133667f81aa66a98755d253ea43301b45ada338225df034d2ffdfc79829e7","7e89b59b456dde4bbbdbf8079665bd82c51d8e500018472981c15618b3893959","7ead0c68ffa0ced241af74dde58b3831343dff3f7eaab64bddb9954545b7ba12","7f8188b57ad3b0c28210c95954e5623376a4262dd5e75f002700c6094b8d6b6c","7f91dfc2ea1a3131c4090375db0f489c2a572e245ade6cda4ebd440446d6d60e","7fcb8cba3ed0ee9c342947aa88f0f699bb4f5c23244d21c6c739c9b66d7c6101","800060d7b4934508d0277f90a464e3112fd2fc99af4ef23825d09b0ff53f91c3","800a802a4ce9e597a102f0a566535c1f9f7adfc60c41af6bd2db4fb7fe3c0d0e","820c12fcbded9048a363b9e0ebbc48b24f85fd4a68131b5dfc1b19057bf09ddb","82c419e5de083e423330432c9d45c744043d1bccd8eeccb41e3014ce9ae3c32f","8343a4211a4d0ffdb320d5a4305174d85bb707d15dad978f6436297d022daa11","83a97b9ebb29f5cd014ef5e178970a601ee92c44678f05d1860b383c5f63b79d","85a962a7c23c14dff8d683e738b53f422221697b213cafeb616d3a172a6c4223","8629fddeb4f273b35df69d4d28923adc14eff59d919b1a495d1a68818137c561","872ab2b2d65fe685b91e355f5af051c85b79569ece16448160d01fef38039624","87f2b3634baa504f2ed9508c6cf6a47bbfb36214a177eb13d70d6a987706818c","88b615ef6a31bd9958e98b8ea522f49f0360ccac5d9fa8deb9e3ef3fe3147d9d","89cafbb20d6029656266d8cb0f85103fa519c8032598282fea58c94cc59c4125","89f2105745b3a7cfd30e7d7c598d6c8fdde0a599f30fd0db7382cba50412445e","8b3eec010d1eae43a28c88434f2410a751f790a9d6ec4a08e75e68c171629ab2","8cecfa09651c40be4d7c11c117c80e1911dc75bf6f1cc34be64706823cc024c3","8d250acd40c8a24ba0d51cc73e65bba6856509b5fbf4c7d7a435897a01c6e764","8df1420c27503370db9382f68a0af8d2b4d56f9dbc94b24ffae450a905083a79","8e7371228a726f381fb811d1d812c39917788a3df7e53dba1a3c364e755a0c03","8fae27ba5117e202afbd523b249fc454912571900fc909f5419b8ac96c773c44","902b958b4db7d8d8bf73a82a8aa86e5485b39477047c8ad60175d118fe31d987","91c9ced5e9ab8da897b7f69166a7d0bade5c58d511b42d60d5430d536da45d09","941f70c384905ab77cb9a88e2671301117e4df553da6fc7a09210710deb9b6ca","9442788fa51227044803f1d3efdfc1c2b2da372871a85f0f7a6bb3596a5c003f","947a1cdd43831936480167169d30334f818bb5d882650a3547827c05204af111","971f59cc197732d0c0b6b8aabbbefca4550fb8fb04f8522bdb4257c05a28848a","98a097d6ebb754334250dfd3ccc5f3dfaf5966524758cbfc9e10adf4a0229693","98c7e4bc2f05e9b4ca703db4a02347db7355a44f04e3a4003e26c46a56bded2c","9944d1a9674e555a41d31d069d136461eb06dd4052d40f2e4ea4368dd978e01b","9bbd03293bf53e9db51401d157b3eb2aa51e9c70449350e98b9a0a3fc9a684ce","9cf90b3aa59f3ca0e40fd9e1fec9703428752d63bded6b091d28f614c9ba99ae","9eb67ea41c5bcb9557ba51bbbd1b321a78f16335cadebbed848d8e6c1fc68bab","a0ff0d0bb3a3c801b637d091293f2eeaac68e934274e4116d298ba60ec3461cc","a1baa1f699fd4ce19e8ef6cdfe346e1b0be63e16d5c5cd5feddcccb16a62f269","a3c84d76be9d891812e795dd46470c2978dceeff928d729c0d5dd6def599923b","a64e8aee389ae696d0d4b045c0153092113fa522ed5a0fd9b5658b8418db4ded","a6c531ed9bbafabfdd649f3030daf2f24461163aaf99dc73bb24dddb77bbcb90","a7ff7302e668dcea1cd1db2241ff95c0d73534539bd03fdefebbfb57f60d3849","a8b4a33078335d2811bffb78eee49aab5fcb31597dae366d43e20c7f7800994b","a91a47fb4fa5c1b1a834fa602030e435ad641240e6ceeb99eeeab7341ca09dec","a91c8a1431a4120667cd523cf56bac004794fc5b8b24275ad2f9c8a15c75fba1","aa131e74e695292adab9f57b3ccc5a503a836dd4b95a3b2b107c69f35dba3637","acd7884bca46ea9422503cead985691da05cca25bd5ed52a199783cae7b8b01f","ae69fe306bf5db346ddfa4367cda24c95e44213baca27b0ee7d7167bcdd85af6","ae8c200dbcea29f43b29974cc247d70647c80d5d76385396f1c82ee9f669e2f1","aec13a075b84253397fb97e1c93a23e1aaee6d6bff2a9161bfd00a5b1d7611de","b09355a97e3aef396f681943b37a404a98fccc6bcb97781eddb2fc000d1d985d","b0ecfca0d114bae34ffa62ac3ea05159a4415fc6eb73ab1fcc4d79f657268f19","b25c41f19ba40e646fd9b6f82051ee4c38985539e445b26bd628eae98537df53","b262187aa66e8a97083bf7f79b91595bf7a4077abe7f8be5b00b4998f4579d20","b4091f93c3d96e36b0708f5dcd46e0e7a0a48f098036ccef6164e4a6429ed94c","b4093c67a9195ee7d28d2575e967ac80057b92339489c244243c7c504c669ff0","b44352445272089cf90967d4d413cf7009bed0ac19f3fa95cb831d5ebad081c3","b4ce73bea5219f1b27bffb36c6a9dee14447a710a8938db807770083db4552ac","b5102ef50e7d4ed1925af5a8b45192e737df02fafb75d7065995a2bb93d2e8e1","b5428b5775526a00645566822530fb969b82247ba83f2c80c06d34151e1f9061","b6cf3b02f36e0efa93b04667cdc5701340033a09e41a7196277cf6756999a666","b77c6669bcd54e0fa949faf2f7205f2631acfbc1ccf79f93f8dab5c5717f0e93","b7ffd6cddb12384224772e8de79aec89d8f4bca966a3c2a05763889f92a6db5c","b8abe10a2a92bf537a49e8dee92baf8de3ed591848a1b25151dab0d7ab3134e5","b96cea09313d481dfff1ed1a2c552ea29e8fe68f52139458996a4e36157748d2","b96f9beb6d6d8fbf88c4b8b2b807a362f2640479cab6173cf64c7710817785a0","b9ad2510d8249ec4c8e7fd8b2471727aa1bd0ce8f3dde78e545fb2f8f2985a1d","ba7d7464da8e13722232c8f86273774054693681becc450a68aea21a5a0e9b91","ba87e5d43ddb10937bb17941f055f80a223d0981fbba44107aeec8530e3a7774","bac3431138e986d6426c1e81bdfe0a968394896c0751cbbcc8f36002fd0ed069","bb230236c4ab6353afb4147014c93204d3d1eb8a6d18558075df5fe79ed7f392","bd714f38c881208f1190ad714bf8fa5aa63adf302bdaa8ad8810ff279e43459e","be75cc1ee935f783be39978de91ae196c16141d4096e16eb6d07f59583296b4b","be8c3cb2d8d67e63c8b069920b74c6272922febbc6a0a2c4a0072a7a213681d2","beed0f36d9b1b9a20bfbf89c96862482b8d5b9d4284bc89539efe9c9b11f000d","bfd21b5c8eb26e9d475868bb30d66ee08f20876e9df5cd06aa8fec01ffe666df","bfe97e65f2cbe6bcd0f14ff57ea4dc1dedb2e5f0db92d04d0982cf1932ac1c3e","c112d36ba38c362da1c022945db5b6bbdc3014685ca9bb7d940f5086f00a675c","c23cf45c1dcb748145d87f5c173dd3c8becaf9e3f6fdcb3e2ca91d6726b0842a","c29b8d250a7b5e73f4ef675329da2251b8de032501e4836445b6aafd90c645fa","c329c9df0dae8a036da9be440432d045be3ee13cf5664cfa6ccf11576ed11acb","c4600cd5358b5798a075beb54539d952f200def1c9a573bd237c795fd33ba36f","c6752cc3c7ad06d1e9f127365f078919ac46b77f8a8fe413650094d914838ec3","c6867ec30530fd3feca89a4e968522f783b636b165ef74f288c42dd50bd51a3d","c6bfbb004af355e96ed5b4c8c9b8b7a96d1c08d24bcde7c666728eb9497d6d71","c8bd340e6fc7fa3e97415f7ad4c22c51d88c6e77f782c12923e841c04d3f882b","cad13b6653fd9f811e67d13c5f01f9dec047f8c384097cee01dd2e2db39e539f","cc24c3770587f2421514fa399d2617201752bdca145ac39058de91d45d3d19c1","cd2da00f6f1bad8fb7c1b87cff80e122eb017e44a471cdea769efc67db369038","ce887fb65b6977a2046e7583d704863624e55909ebcc9c3ed065b3d13079a410","cf9223c369b6fb7baa52f301f904352ba8e8d5e4c2a06f70de6ef1cf76fe1b84","cfc3b5044af37ae7485fba8067dcb22b2438bdaa6e3a30c22ce0f9e2c00aa597","d0481d9b6111ab4afba0462e88970b863284807ff44ca97364c84952e3f88583","d0973a1aca6a118375b466d6e91821f8450110fdf042ac848ee16912012d2b0f","d0df3068db679e24d9487ee09a6462ac5cf3df30f46ee466b66feb6dd5ff71e2","d227e0a73e3c5452bc5ab41ea2c695dfc0ff9b0c1c81e59ab3173f796a4157cf","d2cba4dbbfe3d026f825a8b470a2f6011f9b8e245cf042ae8889afbb17dac6b2","d2e4c515093f8a2aa824c8b542a016e5c321065f4525931b2fac4f8af2fe52c6","d31e8aa21d1498f2d4a07c4cc89ea6f5a6d3ce54d334dbff230e0f55db35c85e","d37de74aadd5916eeae243decf347821c4e946356b9f70471658638ac3092f91","d49d02cad8bbfeac607457b08aac6068916ef45d8f6c980279d6e654407cc7be","d4f51c31a454d9abac29457cbbc21e1b5767c0eac1b37c41ee787a3efb05c80f","d5c084e12da4a5111487c166b879042a21a056f761ee22d9237cb4f65f366341","d6077d547aa21ea10a9bdf6c752b8d1a0a6382b4b43a0fdf790f245e66a609fc","d67e8c1aaab1ce6ec1755599ecde153c47c6b90dd4c301663abe9057bc31af57","d6abcc1484c3df45bde915abf48324af1e995c3266a3c6c069e98e94c8d9a4d7","d8ca8e025e226ad6bdd32a6a9fceae2982b0413a0ad09314558b54bdc724bf99","d8d03142030c11a0aa1012102fce2b202baf88e424a1236832937e87450dc579","d9823dfddf6c507ec030fce4bd2d98fbda18e595c2ebc563574d9196cc7a5e33","d9b0972f3406075b860ba7cd2e71d4492c826960319b10389c2c2820e2981254","da37a61fab07ec8856b725854e4064f55a59149aa69cad1bcbf89ec478b9f578","dad01e5bfb13a6c4419f4d24fa8dbb424e93a1c4be656b0e5dd48ac546e0a0d9","db21a75b4fa6165f75268963474f3262124795d816ba80f685bab2c6eaedb028","dd97ab52fd89f42352c595ce137684cc519c473fa17969e8a6adcde7322a4748","dda0a34d6704887eb36bbc0173334b49d755cac8cea3bbd17bfa972f04183dd4","ddbda9408727a19a4a55d516bed99331edf67d8301de9c78564716465c949619","e0288c94ca9c16a6de217e6baeed720fcf83e401bec45bd15ca47ba8fc9b44dd","e1667469384ec775a3df665679cb3fef057dc84dcb18ed8db8b9c5723835968a","e16c328504278cfe520d6d99990f2a4370cc48159aba86694d0f7598fd4b0611","e24df071f5325bb3a5b20f355143556bc7712535ee8b6ce4c426598f06fd2448","e28d8e6b71264d0bfab853e63178f2c151367cce0dbd16125596ff3604b6658d","e2c734504d211580b4e6674eb1c7d31fb6fb730c037210c34c980a96f9098269","e3f19c383354cdf45311f92f00b90fed25dfba7e9892ab2f5f3aa4885876b75f","e409fbfe439455330c0fe003de860e30f7093cc3cc83a32f886c9b539a29f60b","e6300ee8e6c2c4ce6d7ab02b7b06fd1cabe3c5c52b99a6ea3ea8b5acd5092e0b","e734d068446591aba283d136c21b4fb0209f91352cb4fc6589bd651cdbfec163","e7a333109a7aaec2b71048868500c15e721900628eb48790dfeaa1fd4c2dabc3","e7c9175fbfd9fd84bed95d552bc0a439b07a233c3e91fb39ae2f23197ee53f1b","ea1b8a251ecc1fd96697d0c602d3e14ec46383d27bb9485a0326cea5576ffacb","ea311dca2ef14e02b9aae563bb28dc737b04b7f01c1ceb2be3d92007d2c74ac6","ea8e5b79bbe5329ae8437677c8316f2f9fd75bb1d40c88308c269140a7e564c7","eb996138bc91c0ee63bafe1ba10b130ff5a2fc82aa4918296222e0a831a569fe","eba6e8e5a12a86f17fade41bef365aa95491c469e18aa91aef64908a4263c905","edc160a11c07dda8072748b66db7f27b6cd8efbd1faa3f6c826a0fe445859c17","edfcbe4773eac1fe2964179a4ad21294efede89568f2efd8e283ac18bc5693b1","f0f90dee84db760cc1bb0f6e6983d4de0e3d5d9f4adf7b2b52f0d3dbe6d585a4","f1d4a6e98f41ab3f6cfd67cddeab9d0ed287b92cb3dbe575e3ce61925510a792","f21c3a9267110e469f224ac7eb76ca5bb084fc90df014f1ca6791d5770483944","f379a1b9e29aa7fc25c4c0c897eaa3c0e90d66a201a0ade8cbf523a5cdc8cf50","f3e04891c79b604f9235f438adfa49ee27db43d25c7be0d1cc06ae53b8f6d2d8","f46904e701174fe2850798d9e1b077bdac42fcac01dbc385298da01118c82aa6","f53265f53af0b0856911ab08b373736964d0c443e8ba61d7f1d45f5e5b04edf3","f686173d310f41e26e3fe8a7c1dbf4313e4d793323335348badbcf4633f5d699","f704c9c9e2cab1ed44578f48d161320b5fb4384ecdd8b40a5e22c4078a8594da","f89156489d35f9992d5971a52a6e03a7d7f095e15c2c782e85efb1408a2bd6be","f99ef6fa3c9c6bf572ec69eb6eeea9f88ce6590d3a5565bec62b001b6f2a376a","fa2dfc22b4fdbcf402a822e8dd376925655d997a0f96284a60f10665ba3581ba","fa3df5f8349aec4805bbcd279b88697def63f2462d8ada0b5fe1d9983d9a6daa","fa6b97cbca1d4f09662e706293b0aec1eb76b8e2277441f54ab6c548b5423236","faac0c3fa7cdf67b452d407e9a1db5cbe1e9140ecfe300200b0b0a6279c97c66","fbc8b53b5c6f3727c084e5e0429e410a3fed5a17e1a0144692fd196d9836a4bb","fd04d7588bb9e6ca0a8b65ed0c9635082a9ee5f46b2d1b5b25866a072236c1fc","fd60f2a432086c6fc4a4c39d8d2d6edf5794c763c05a6401db2bb5fa2c601775","ff532716738e2fc716c10797d9717f324cca3a1234320a84a73a0b89569f11ab","ffd0fe3449e449c7b9fcdcc7e2c1ffb677e57ad935a252de88a0122d437efa67","ffde5c700732beac27a9b5162213d387422ce199400e56d9cefe550005b6a542"],"schema":"fsgg.atlas/1"} diff --git a/.claude/skills/atlas/assets/seed/records/14156f1c6bf0fa8dfcb5cfafac09e012db446d528dad0e4301404fd693b9bed3.json b/.claude/skills/atlas/assets/seed/records/14156f1c6bf0fa8dfcb5cfafac09e012db446d528dad0e4301404fd693b9bed3.json new file mode 100644 index 000000000..9bebaa794 --- /dev/null +++ b/.claude/skills/atlas/assets/seed/records/14156f1c6bf0fa8dfcb5cfafac09e012db446d528dad0e4301404fd693b9bed3.json @@ -0,0 +1 @@ +{"citations":[{"path":".agents/skills/work-programme/SKILL.md","repository":"FS-GG/.github","revision":"ef8eb92f4e8444cf3bf0888d44336c53e229a26a","sha256":"7545dc7f8228b63f531edf087d0fd6535de7e4f620e20a5aa1cebcbef04ffb62"},{"path":".github/workflows/coord-engine.yml","repository":"FS-GG/.github","revision":"a91d94bc07a5696c0c80fb89a6171fbd85d771d4","sha256":"406e5b64320fd58ccb448e6da742d1abbf53efca6369543ab7a88781345c600d"}],"conflictsWith":[],"id":"platform/executable-qualification-and-final-assembly","kind":"lesson","recordedAt":"2026-10-18T10:43:19Z","repository":"FS-GG/.github","schema":"fsgg.atlas/1","status":"recorded","summary":"Before costly qualification, verify that the maintained runner actually invokes the changed assertions and that negative controls fail through that same route; compile success or a zero-test invocation does not establish executable coverage. Assemble compatible source, version, Atlas and delivery-closure changes and reconcile the intended final base before the expensive full run. Defer reporting-only followups when they would invalidate that qualification; this is not a blanket main freeze or permission to bypass required checks. Existing forward recovery retains unavailable original outcomes and reservations as Unknown without repeated unavailable-history searches. Source guidance delivery remains distinct from installed skill adoption and measured process benefit.\n\nThe maintained coord-engine workflow implements early executable feedback after build: Core tests and non-vacuity, focused workspace telemetry tests with a five-minute step bound and non-vacuity, then the full mandatory CLI tests and non-vacuity before browser/package/parity qualification. The original forty-minute job bound remains unchanged. Normal TRX and --blame test-sequence artifacts are retained by an always step; no memory dump is enabled. Focused execution is diagnostic evidence, not full qualification or permission to skip the later suite. Earlier opaque failures and later concrete assertion failures retain their own evidence; a repair does not explain an unobserved original or establish timing savings, installed adoption or current runtime acceptance.","supersedes":["cad13b6653fd9f811e67d13c5f01f9dec047f8c384097cee01dd2e2db39e539f"],"tags":["qualification","coverage","delivery","process","recovery"],"title":"Verify executable coverage early and assemble compatible changes before costly qualification"} diff --git a/.claude/skills/atlas/assets/seed/records/4855e1947afc954cb1b20bb45e7af10b098fa34714bd32e9bc77941cf58fdaaa.json b/.claude/skills/atlas/assets/seed/records/4855e1947afc954cb1b20bb45e7af10b098fa34714bd32e9bc77941cf58fdaaa.json new file mode 100644 index 000000000..d8565dbbb --- /dev/null +++ b/.claude/skills/atlas/assets/seed/records/4855e1947afc954cb1b20bb45e7af10b098fa34714bd32e9bc77941cf58fdaaa.json @@ -0,0 +1 @@ +{"citations":[{"path":"src/FS.GG.Coord.Core/TelemetryStore.fs","repository":"FS-GG/.github","revision":"ef8eb92f4e8444cf3bf0888d44336c53e229a26a","sha256":"8032321c251a03662111e9965845360eb8fd92cda0ce9e220116a81cf4a7e4e2"},{"path":"src/FS.GG.Coord.Cli/SkillTelemetryReaders.fs","repository":"FS-GG/.github","revision":"ef8eb92f4e8444cf3bf0888d44336c53e229a26a","sha256":"a510716436479424894fbd4787ee545c9b37e4090644066310b55b3ada439b7d"},{"path":"src/FS.GG.Coord.Cli/SkillTelemetryAdapter.fs","repository":"FS-GG/.github","revision":"ef8eb92f4e8444cf3bf0888d44336c53e229a26a","sha256":"74d61ae2ce23b4e6fafd940ccd924374d4a8060db0c65693b2b69e69d840b857"},{"path":"src/FS.GG.Coord.Cli/WorkspaceTelemetryApplication.fs","repository":"FS-GG/.github","revision":"ef8eb92f4e8444cf3bf0888d44336c53e229a26a","sha256":"7c1c889ceb8022f66650623016e6e71493b0eba6dc755272a62800095c8ef150"},{"path":"src/FS.GG.Coord.Cli/TelemetryStoreApplication.fs","repository":"FS-GG/.github","revision":"ef8eb92f4e8444cf3bf0888d44336c53e229a26a","sha256":"04fa2aeda375b1bb5f5e1e9a4c8b9983146c8fda6c7388933077e67d1805f025"},{"path":"src/FS.GG.Coord.Cli/TelemetryApplication.fs","repository":"FS-GG/.github","revision":"ef8eb92f4e8444cf3bf0888d44336c53e229a26a","sha256":"fdfa123c0175440004e239ebd49046684c687538cd02269504ac60c84245ff8b"}],"conflictsWith":[],"id":"contract/passive-native-usage-observations","kind":"contract","recordedAt":"2026-10-18T10:43:19Z","repository":"FS-GG/.github","schema":"fsgg.atlas/1","status":"recorded","summary":"At the cited prospective 0.106 source candidate, explicit selected Codex rollout files share the maintained strict native decoder, including recursive duplicate-property and strict UTF8 refusal, and project actual optional response counters through provider-usage-observation/1. Item, inventory and terminal attribution stay unknown/partial; these canonical-only facts never enter qualified item totals. Stable native thread/turn/response identities, a finite serialized producer index, private pending intent and existing immutable spool retain corrections and exact replay. Local enqueue/reporting make no receiver or App Server call. Initial capture-only setup skips credential presence and reports receiver unverified. Same-owner state cloning/migration is unsupported without original state/fence reconciliation; one selected association root is the supported ownership boundary.\n\nReceiver admission refuses cross-owner changes. A complete bounded drain census retains the earliest pending head for each structural scope/source/generation, fencing numeric successors behind uncertain or durable-but-not-applied receipts. Candidate scheduling rotates eligible independent heads and ordinary traffic through the existing sixteen-envelope quantum with one private advisory cursor of at most 256 bytes. The cursor advances under the configuration lock immediately before each actual head attempt, rather than skipping a whole selected quantum. Expired shared deadline/cancellation stops new head attempts; canceled lookup cannot proceed to Submit. Missing/invalid cursor state resets deterministic order. Cursor crashes affect ordering only; queued bytes, receipts and authority remain unchanged. No fixed elapsed-time or eight-pass service guarantee follows; transport timeouts and exact-source tests remain separate.\n\nThe receiver application classifies exactly passive-observation-authenticated-owner-required, passive-observation-owner-mismatch and passive-observation-kind-is-immutable as semantic admission refusals. Their terminal rejected result is distinct from a genuine storage/unknown failure, which keeps the original ready bytes for reconciliation; no broad passive-error prefix turns storage failure into successful cleanup. Unsupported receiver data remains retained at the producer according to its original delivery state. Earlier opaque failures remain Unknown where no determining evidence exists; a newly identified admission-classification defect does not retroactively explain them. Original focused failures remain retained separately from this reviewed source correction, whose runtime result is not claimed here. Full qualification of this unified source, publication, installed producer capture, compatible receiver Host/store and restart/restore durability remain unaccepted here. Host is independently versioned; first useful isolated candidate capture does not wait on Home access or Host deployment. Published/installed 0.105 and the accepted board binding stay unchanged. Earlier records and original failures/Unknown operations remain retained with no replay or reservation release.","supersedes":["7a134e7f1822183ed1c0ded720971539350feaaf92612761210cfc3ccdc55870"],"tags":["telemetry","passive","native","capture","attribution","delivery","corrections"],"title":"Passive native responses separate capture, attribution and delivery"} diff --git a/docs/atlas/catalog.json b/docs/atlas/catalog.json index c63bdfe39..3676f31fc 100644 --- a/docs/atlas/catalog.json +++ b/docs/atlas/catalog.json @@ -1 +1 @@ -{"records":["000ada42299601fba29016e5c0e0d4012876fb42670bb10fa0b1315477254ba4","00641d046d6869fdd0023ab3df99e0e67a6ea28f0dcb701f622b1cec8b3e07c6","026b08fb343aefe19177e95b759560d340d372def4b71acf613fefee3438ade2","0357495d23fac4fad210b6dd7ed7cc57dd33d107e1659a81f085cad78300797f","036c148f6d0e89858c9bf4cf380272ca6904bb4ca277a909fb71c47f5450cef7","04e404d89dca295564813149472b1de8e6c43357e2f6d91d169ded7600ed3a02","0509e5c6fdbd2dde0c0db8558647080560714804d00e4f9268342f2e84858a3d","06ad2c8aa0ff3b862edf3ba99e0e4e8801ee163709e66333cd06c3fc61232b05","0a6d7dc5b64970bfdadc9049ace95e8bc163fc421beea70129ff0eaa692c6d06","0ad4403c8f4078dbfa543310c69bd1dfc768e305987214ffc37d7b2600c4687c","0c22360d4653eb0f450e4d3d34564875f1660cfcb2d546095d98b3faa3967cbc","0da4d093b49c0a1f654b38008bb01195e816829279ca1989bd2448194e15361b","0e560af7d9dd2e0f2f588a74cd35512973747f20bdfe0bee0bc889105ea53dc9","0ea7107c2c8edaab3ff2bae32f63cfbef6903a51cdaff257278f757ed5ef429d","0eef4d717eb03f0906aa3be7336aa71f831726afabe8a56077b76f6e82fd08e1","11fe30832d93706c60efd836b09f35f049c4a715ad6144cf277ca240c5780704","1244d27db0cf5075353bcc622d0fb3b5ca6a7d08526e2c5754e8b745c250bf3f","155fe673b8ae12549c978e1bf1d5c43e360937fcf2135cdcd5aea6f6c771da44","1945f527afc3c2930ec4d7fa57ebb2ef7dd6321c0dd3ab9233c9963e9e613165","19d657b67672257ece127f3b957674b7fb4780843148db0a36a0b329c2a418ba","1a24f6ef0c08a898f309c1b925fc19b29526f913a61a1dfe4b1a4308ebdd97ac","1b5351b2dc647aba864e387168db5128435cb80da94fc42581cd60a05fc34b9a","1da011289116fe88fe92cb8f0e83ed7ccbbca251681d4e136c5a61c40364f8d3","1ec9445b242d2a2e149fe71c67bf13d8c0e4ebe5a6ed7b022656b9941973909d","1edc36731a9c76ad07d269d8b4fd84c8c956bb43d6f56de17d6208164856ffbe","20901b579f69cc97eb56b492938864667576e1c9bfacf13f8a529c4f6e543448","21338155cb4f52c49e5072c877771be67c75590d9b238ea025fba5209fd6e018","23af79bd1e7995fc8162ddc4d830318acb054bbfcc9c7d5cb141ec306da67386","24d4f2730d94d1b7f149771ef0e59192f4936d142b21f4a56b1a391e4514d38d","2591526ddabbea03fbdc38bf172bc54f42df9bc51eba7ad2b70d6e67215f08f1","26259abc7fe745f52e06f2aa2abb0e50f189bc7608065f04d5c669a0a99941cd","26290a0990d6dac0ce9448e05eb934210603356043dcf14a5d80585288e2aa92","26d6b31965013079d4db67a2c403e01f21e3c30ae65953400dbed92e289a0925","288daf614247c260cb673d8674e8b3874ccc4e269347836851f702d7ac8e2f7c","28abfaf6d50ca38af0b88aa50524200c17af9000da83ddbab3d8f9e06e020fa5","291d3db272eae084d34c04bc1305f2abb26a7e7acbc5515208469b46719a4ed1","2a38ddebfe3380232e35d5a24f9cb9f7c38abbc9c68add4ea5952c1e65d328d2","2c76ce93500601e281a41f5985fe4e3926fc8bc9d01ee687f14052cb553ad2d2","2d599c722a08306b98f2d833fb3e4a7acb9dea92e6a58820caa2f65c09803fb8","2ecd502add2d801eebed39411fadc9a80098ba9ce04a5f4b728a0e4e331232d6","2f7357367d921995f4c6fdaa693392adcd2df4860ef4d25c8dc47f7ddea8c755","2fb2ed7902a8e35dc36489a23245d963026d688008c92fed6fdc1f6bc27198a6","310bfb5b2d061bb733771e5cb7b3b7d25db43af5eda9f806169b7ef9330c2fe7","32f69a7b8997ae98b9305ee578145d795dbcd39ca4469bf2465e57a0295cda51","335683e33b94cb86b5e426b4faed200673bf850151191a08458136ceb164fd4e","3407ec53a884d3945d86a88d6b9a883419dd426e96b1108a8e6686f30397a629","34463778cf2d29e3896a65613cf9e3eb3e9f2d8946d17f12b609e70eec63d128","35da3938b72cf3520e126ad595157104b69ab748904c7b4e12f563d6b103172b","37c8908ea2a349cd3034018027160ad810b28ad1fc203a9a353971e1f7396b4c","37e39faee019bb041627510f1f02746ba9a85696417a083b438eb4974b72c2bf","38a75fd804821f4836f0a7ba8d41af3d3a3a5f5d7dcea68487009297824258d9","397476cf107b48e7a662264f8fea9f880231fd3d1e0401622650f214cfaa35c7","3ad8b0398ba6c354c9e31b7438b2515579fc0b1f17de4b35a914c862a3a11e3b","3b3c6cf083b12a840565e00458e2fd4ee8a61f97cda452703a6b13d7776b6c13","3b4af144afed3d52dd2e1f64e23bc25b3475eee5f7af3bde9886761b15c33dfd","3b5d82795e9f5d1992ab67e078fcf1108247ab9b6d1baeac944d3ec0294cec5d","3d0274f77576abdbdf442c8843e955e1bbc91e9f8cbfe3646b119337cdb13c96","3e2f66baa16c7ea936eba34720a55897438f60b343cbe8fda4eab1e5dde044eb","41c768ea17144c6ec225e9a65d4c3c127fdd7264dcba1a89aa17b20fd5d7e3ee","42aeb46fcc3d10b95e4067bc9cda875fa933b4102873f67c7bf1f8ca6799a598","4320b92712bc14dbe10b56f1cd3d1bdc093fc4be6016732839d0be4dd4d027d3","46cdf2c207f79d388001f6636dfb7a98bb2ba72b9d1c6df4938f0a27691e07a6","480f1ede18ae031b164d49d676feeb1090fb33932676ff52e1e2eb24e8d154cd","48797c44c92cb34fd9a57a08020b45c6920b2268dc8ad616c0f814a3710d5316","48d094622ada1806cb30335926007c1abc476b1f7b45a2e250c490afa25e847b","4a724a6a842a132c2185279513f341b79f9be93e42660f1255770eeae3b1323c","4c8c327dacf345e184042092e96ad3ea02ed4cece57dac5fa68ea52fbb5a6adf","4d5a44ba07fafeab823b54a21846269330ce35b4c190f3ddd5434bc8530d9b41","4da0a5be70e8af9c39623deac83822749482187f6a0fc3d186dcfddaa7111576","4f1e58fc658a4ceda181e2a7fa249305b09b573ffd68c2489f204f4957224957","4f2750b974c1404acb721ffc84cbd1d0756a24211dd6f6503c10ea74dbc45676","509ec9c08864b9dd0029f32ffeac85fbac863e2dad459994c65b7cb5264faffa","52049cc9cee43bb27229e6b3e983e02c6aa20dd7d153b13e3c74bc6d2b47cf92","5382c901d160ca2d79888d8acd7a690a5349826b5da486274b0800c9d7513f11","540879695d41205515aaabe5466971014cb43b960a26b8e5958e37fed63df762","5560616d1e72f0a539f9ebbfea3b7d195c1ef5622f97994af1963748d4f97533","556ee783d8e2e4ca50f656c095758be613983f904d998a6534fb155510114f21","55a4711e799294d06988ab4acf77eacd7d424123082bba3ec987dff0ae13999c","55ae095961d78a1514c4dd1e63d477c60179a8662571ab5a90abd3eb2b83eb10","56e7158313357bb145bd98c5f790e569be2203fb2601565a30091a597a7e7ff5","5962dd14d3923433cf723d698d1af19ac37a270b6e88445643fc56a646faab5b","5a2064cdf51026eed65457c05f34bec919b31d96d35c29498d298685965f0b5a","5b77bd6dfa81cc339e729e4195e258facbfeb64b9c680512f742e3fb1961fdd5","5c3527e43fe24c5aa171c6fa4a3de7fe5e78f2527aed0dd19cb21d154d43da21","5c79c77f00167ca140127b00f1a79e1ffac621e46fc461089594206a7df8d7cc","5d015880319af666943e68169ca906bf2f0c813d8bf2c5c0262aeb5a40366350","5f2a75b89983d1005a38afa2cabccc3a39f31989807120281d8505ffd564e0c6","5f4fa6dde5930fe1b42f805895f0f5fb135c2b3ff9830f2bd30ae7526a3295a1","630fdcff1f227b5baf5d10bd78ef0fde68791ac0cd8a15f65065f5cc4501b17b","63113617f2e4ee6b827a69bce6afb3949190a282f5feaaa9e2c9f82372623bb8","63544fa69b09916d52b305700eb9816305ff22b77162a44edd13897acea3a655","63a4394e689acf4a4762cfb4df691d05f923fdf592fd2f8ea41e6a54f98d1136","69ebfc7eb8427db3c5c59bdde652d0cb269426126f8540b1b58caa29ccf130e2","69edc4285578313d1dd2f914d69add075a7b354f7fba717606d1abe15292576b","6a34d9279cae58765d6ee4a980192c0e15f3ca217b9f1815861d472a281b3cf8","6c3c592efe9c684ada5661b8cc88a5c3f6e57c841db06b9e070687504cbf6236","6ce6d164c3e31463fb9e144fdf91413e55d077cfc4f25092bb02923fb538a84f","6e08a638e1e28020923effd4c65fc517dbe7b06100ff76cde74e427191503b84","6f3a7020233cd77cfe59eefec0a277f6dda323743c8d80e4e54a95cd3cbc23cf","6fccc6f0c5fa71c43211785dced8abd0f3295040eab56063f4e8d77f1c09b8ef","700cd21af9ed7e81900fad9d52de2fb11db48e64b038e4293168f85e5dd0e043","702d1dfa75e92a916a446429f474d4c296e6ea4e8c487995852d0525e8440659","704cf778db6086c3e282c81249fb0ef09c1d7c2043335ef74c7ecb69bb3e84ad","71ef1ed2d5e4bc7eebe7a73bb3e9423e5bc2f8319186380fe8b38334952d3b01","7256ba00af1cf759b95b7bf8ae3b9943f31349bd10a7652a26bb419b368d73a3","7369b339daca0fcf46ac7fe82d65ae95c75d7dbcaaae51209e6d90b6587a014e","73ec844fb3e2b9febd00ba37508b284fad141630f03cb9f74e36a195180f5054","7410de003c7b582e30470d1209eefc796a70c76fe8d61dd9ccfe01ecfa41310c","76bf5a9c126db6eb466287a7c0d823327ee9882a70eaaa6efb03d169b5dba808","781a64598efb2a11156f07271ba1c14c4f6b3d73aa2943b26eae02063df7af70","799abc1e8d381b8d97349479139985e383bb49179b5a80f39807cb35a3ee78ce","79faec494bdd6d098c9d2a9d8559f822938c6b2104188db95321d89e7a732979","7a032dbf0351aa32c77c8d187f7eb697500ff186c88c5946ecc15adc972246a6","7a134e7f1822183ed1c0ded720971539350feaaf92612761210cfc3ccdc55870","7aa52373f2721dd76fc8eeb3d6061794f27ea8d11e96bcb1ff25a97994a77d5c","7ad4ef4b8d3221758a9e7f9577750ee03f6cba11c8eae8bf25f74a3131bd21a2","7baa35131ece7ed9860607157d2531d4d70a061bdc9bb9876e20328f127cec53","7cbf970a11bdb91a40e248eee97ef789205910ebc913349698fc75ed35e82fdf","7d6133667f81aa66a98755d253ea43301b45ada338225df034d2ffdfc79829e7","7e89b59b456dde4bbbdbf8079665bd82c51d8e500018472981c15618b3893959","7ead0c68ffa0ced241af74dde58b3831343dff3f7eaab64bddb9954545b7ba12","7f8188b57ad3b0c28210c95954e5623376a4262dd5e75f002700c6094b8d6b6c","7f91dfc2ea1a3131c4090375db0f489c2a572e245ade6cda4ebd440446d6d60e","7fcb8cba3ed0ee9c342947aa88f0f699bb4f5c23244d21c6c739c9b66d7c6101","800060d7b4934508d0277f90a464e3112fd2fc99af4ef23825d09b0ff53f91c3","800a802a4ce9e597a102f0a566535c1f9f7adfc60c41af6bd2db4fb7fe3c0d0e","820c12fcbded9048a363b9e0ebbc48b24f85fd4a68131b5dfc1b19057bf09ddb","82c419e5de083e423330432c9d45c744043d1bccd8eeccb41e3014ce9ae3c32f","8343a4211a4d0ffdb320d5a4305174d85bb707d15dad978f6436297d022daa11","83a97b9ebb29f5cd014ef5e178970a601ee92c44678f05d1860b383c5f63b79d","85a962a7c23c14dff8d683e738b53f422221697b213cafeb616d3a172a6c4223","8629fddeb4f273b35df69d4d28923adc14eff59d919b1a495d1a68818137c561","872ab2b2d65fe685b91e355f5af051c85b79569ece16448160d01fef38039624","87f2b3634baa504f2ed9508c6cf6a47bbfb36214a177eb13d70d6a987706818c","88b615ef6a31bd9958e98b8ea522f49f0360ccac5d9fa8deb9e3ef3fe3147d9d","89cafbb20d6029656266d8cb0f85103fa519c8032598282fea58c94cc59c4125","89f2105745b3a7cfd30e7d7c598d6c8fdde0a599f30fd0db7382cba50412445e","8b3eec010d1eae43a28c88434f2410a751f790a9d6ec4a08e75e68c171629ab2","8cecfa09651c40be4d7c11c117c80e1911dc75bf6f1cc34be64706823cc024c3","8d250acd40c8a24ba0d51cc73e65bba6856509b5fbf4c7d7a435897a01c6e764","8df1420c27503370db9382f68a0af8d2b4d56f9dbc94b24ffae450a905083a79","8e7371228a726f381fb811d1d812c39917788a3df7e53dba1a3c364e755a0c03","8fae27ba5117e202afbd523b249fc454912571900fc909f5419b8ac96c773c44","902b958b4db7d8d8bf73a82a8aa86e5485b39477047c8ad60175d118fe31d987","91c9ced5e9ab8da897b7f69166a7d0bade5c58d511b42d60d5430d536da45d09","941f70c384905ab77cb9a88e2671301117e4df553da6fc7a09210710deb9b6ca","9442788fa51227044803f1d3efdfc1c2b2da372871a85f0f7a6bb3596a5c003f","947a1cdd43831936480167169d30334f818bb5d882650a3547827c05204af111","971f59cc197732d0c0b6b8aabbbefca4550fb8fb04f8522bdb4257c05a28848a","98a097d6ebb754334250dfd3ccc5f3dfaf5966524758cbfc9e10adf4a0229693","98c7e4bc2f05e9b4ca703db4a02347db7355a44f04e3a4003e26c46a56bded2c","9944d1a9674e555a41d31d069d136461eb06dd4052d40f2e4ea4368dd978e01b","9bbd03293bf53e9db51401d157b3eb2aa51e9c70449350e98b9a0a3fc9a684ce","9cf90b3aa59f3ca0e40fd9e1fec9703428752d63bded6b091d28f614c9ba99ae","9eb67ea41c5bcb9557ba51bbbd1b321a78f16335cadebbed848d8e6c1fc68bab","a0ff0d0bb3a3c801b637d091293f2eeaac68e934274e4116d298ba60ec3461cc","a1baa1f699fd4ce19e8ef6cdfe346e1b0be63e16d5c5cd5feddcccb16a62f269","a3c84d76be9d891812e795dd46470c2978dceeff928d729c0d5dd6def599923b","a64e8aee389ae696d0d4b045c0153092113fa522ed5a0fd9b5658b8418db4ded","a6c531ed9bbafabfdd649f3030daf2f24461163aaf99dc73bb24dddb77bbcb90","a7ff7302e668dcea1cd1db2241ff95c0d73534539bd03fdefebbfb57f60d3849","a8b4a33078335d2811bffb78eee49aab5fcb31597dae366d43e20c7f7800994b","a91a47fb4fa5c1b1a834fa602030e435ad641240e6ceeb99eeeab7341ca09dec","a91c8a1431a4120667cd523cf56bac004794fc5b8b24275ad2f9c8a15c75fba1","aa131e74e695292adab9f57b3ccc5a503a836dd4b95a3b2b107c69f35dba3637","acd7884bca46ea9422503cead985691da05cca25bd5ed52a199783cae7b8b01f","ae69fe306bf5db346ddfa4367cda24c95e44213baca27b0ee7d7167bcdd85af6","ae8c200dbcea29f43b29974cc247d70647c80d5d76385396f1c82ee9f669e2f1","aec13a075b84253397fb97e1c93a23e1aaee6d6bff2a9161bfd00a5b1d7611de","b09355a97e3aef396f681943b37a404a98fccc6bcb97781eddb2fc000d1d985d","b0ecfca0d114bae34ffa62ac3ea05159a4415fc6eb73ab1fcc4d79f657268f19","b25c41f19ba40e646fd9b6f82051ee4c38985539e445b26bd628eae98537df53","b262187aa66e8a97083bf7f79b91595bf7a4077abe7f8be5b00b4998f4579d20","b4091f93c3d96e36b0708f5dcd46e0e7a0a48f098036ccef6164e4a6429ed94c","b4093c67a9195ee7d28d2575e967ac80057b92339489c244243c7c504c669ff0","b44352445272089cf90967d4d413cf7009bed0ac19f3fa95cb831d5ebad081c3","b4ce73bea5219f1b27bffb36c6a9dee14447a710a8938db807770083db4552ac","b5102ef50e7d4ed1925af5a8b45192e737df02fafb75d7065995a2bb93d2e8e1","b5428b5775526a00645566822530fb969b82247ba83f2c80c06d34151e1f9061","b6cf3b02f36e0efa93b04667cdc5701340033a09e41a7196277cf6756999a666","b77c6669bcd54e0fa949faf2f7205f2631acfbc1ccf79f93f8dab5c5717f0e93","b7ffd6cddb12384224772e8de79aec89d8f4bca966a3c2a05763889f92a6db5c","b8abe10a2a92bf537a49e8dee92baf8de3ed591848a1b25151dab0d7ab3134e5","b96cea09313d481dfff1ed1a2c552ea29e8fe68f52139458996a4e36157748d2","b96f9beb6d6d8fbf88c4b8b2b807a362f2640479cab6173cf64c7710817785a0","b9ad2510d8249ec4c8e7fd8b2471727aa1bd0ce8f3dde78e545fb2f8f2985a1d","ba7d7464da8e13722232c8f86273774054693681becc450a68aea21a5a0e9b91","ba87e5d43ddb10937bb17941f055f80a223d0981fbba44107aeec8530e3a7774","bac3431138e986d6426c1e81bdfe0a968394896c0751cbbcc8f36002fd0ed069","bb230236c4ab6353afb4147014c93204d3d1eb8a6d18558075df5fe79ed7f392","bd714f38c881208f1190ad714bf8fa5aa63adf302bdaa8ad8810ff279e43459e","be75cc1ee935f783be39978de91ae196c16141d4096e16eb6d07f59583296b4b","be8c3cb2d8d67e63c8b069920b74c6272922febbc6a0a2c4a0072a7a213681d2","beed0f36d9b1b9a20bfbf89c96862482b8d5b9d4284bc89539efe9c9b11f000d","bfd21b5c8eb26e9d475868bb30d66ee08f20876e9df5cd06aa8fec01ffe666df","bfe97e65f2cbe6bcd0f14ff57ea4dc1dedb2e5f0db92d04d0982cf1932ac1c3e","c112d36ba38c362da1c022945db5b6bbdc3014685ca9bb7d940f5086f00a675c","c23cf45c1dcb748145d87f5c173dd3c8becaf9e3f6fdcb3e2ca91d6726b0842a","c29b8d250a7b5e73f4ef675329da2251b8de032501e4836445b6aafd90c645fa","c329c9df0dae8a036da9be440432d045be3ee13cf5664cfa6ccf11576ed11acb","c4600cd5358b5798a075beb54539d952f200def1c9a573bd237c795fd33ba36f","c6752cc3c7ad06d1e9f127365f078919ac46b77f8a8fe413650094d914838ec3","c6867ec30530fd3feca89a4e968522f783b636b165ef74f288c42dd50bd51a3d","c6bfbb004af355e96ed5b4c8c9b8b7a96d1c08d24bcde7c666728eb9497d6d71","c8bd340e6fc7fa3e97415f7ad4c22c51d88c6e77f782c12923e841c04d3f882b","cad13b6653fd9f811e67d13c5f01f9dec047f8c384097cee01dd2e2db39e539f","cc24c3770587f2421514fa399d2617201752bdca145ac39058de91d45d3d19c1","cd2da00f6f1bad8fb7c1b87cff80e122eb017e44a471cdea769efc67db369038","ce887fb65b6977a2046e7583d704863624e55909ebcc9c3ed065b3d13079a410","cf9223c369b6fb7baa52f301f904352ba8e8d5e4c2a06f70de6ef1cf76fe1b84","cfc3b5044af37ae7485fba8067dcb22b2438bdaa6e3a30c22ce0f9e2c00aa597","d0481d9b6111ab4afba0462e88970b863284807ff44ca97364c84952e3f88583","d0973a1aca6a118375b466d6e91821f8450110fdf042ac848ee16912012d2b0f","d0df3068db679e24d9487ee09a6462ac5cf3df30f46ee466b66feb6dd5ff71e2","d227e0a73e3c5452bc5ab41ea2c695dfc0ff9b0c1c81e59ab3173f796a4157cf","d2cba4dbbfe3d026f825a8b470a2f6011f9b8e245cf042ae8889afbb17dac6b2","d2e4c515093f8a2aa824c8b542a016e5c321065f4525931b2fac4f8af2fe52c6","d31e8aa21d1498f2d4a07c4cc89ea6f5a6d3ce54d334dbff230e0f55db35c85e","d37de74aadd5916eeae243decf347821c4e946356b9f70471658638ac3092f91","d49d02cad8bbfeac607457b08aac6068916ef45d8f6c980279d6e654407cc7be","d4f51c31a454d9abac29457cbbc21e1b5767c0eac1b37c41ee787a3efb05c80f","d5c084e12da4a5111487c166b879042a21a056f761ee22d9237cb4f65f366341","d6077d547aa21ea10a9bdf6c752b8d1a0a6382b4b43a0fdf790f245e66a609fc","d67e8c1aaab1ce6ec1755599ecde153c47c6b90dd4c301663abe9057bc31af57","d6abcc1484c3df45bde915abf48324af1e995c3266a3c6c069e98e94c8d9a4d7","d8ca8e025e226ad6bdd32a6a9fceae2982b0413a0ad09314558b54bdc724bf99","d8d03142030c11a0aa1012102fce2b202baf88e424a1236832937e87450dc579","d9823dfddf6c507ec030fce4bd2d98fbda18e595c2ebc563574d9196cc7a5e33","d9b0972f3406075b860ba7cd2e71d4492c826960319b10389c2c2820e2981254","da37a61fab07ec8856b725854e4064f55a59149aa69cad1bcbf89ec478b9f578","dad01e5bfb13a6c4419f4d24fa8dbb424e93a1c4be656b0e5dd48ac546e0a0d9","db21a75b4fa6165f75268963474f3262124795d816ba80f685bab2c6eaedb028","dd97ab52fd89f42352c595ce137684cc519c473fa17969e8a6adcde7322a4748","dda0a34d6704887eb36bbc0173334b49d755cac8cea3bbd17bfa972f04183dd4","ddbda9408727a19a4a55d516bed99331edf67d8301de9c78564716465c949619","e0288c94ca9c16a6de217e6baeed720fcf83e401bec45bd15ca47ba8fc9b44dd","e1667469384ec775a3df665679cb3fef057dc84dcb18ed8db8b9c5723835968a","e16c328504278cfe520d6d99990f2a4370cc48159aba86694d0f7598fd4b0611","e24df071f5325bb3a5b20f355143556bc7712535ee8b6ce4c426598f06fd2448","e28d8e6b71264d0bfab853e63178f2c151367cce0dbd16125596ff3604b6658d","e2c734504d211580b4e6674eb1c7d31fb6fb730c037210c34c980a96f9098269","e3f19c383354cdf45311f92f00b90fed25dfba7e9892ab2f5f3aa4885876b75f","e409fbfe439455330c0fe003de860e30f7093cc3cc83a32f886c9b539a29f60b","e6300ee8e6c2c4ce6d7ab02b7b06fd1cabe3c5c52b99a6ea3ea8b5acd5092e0b","e734d068446591aba283d136c21b4fb0209f91352cb4fc6589bd651cdbfec163","e7a333109a7aaec2b71048868500c15e721900628eb48790dfeaa1fd4c2dabc3","e7c9175fbfd9fd84bed95d552bc0a439b07a233c3e91fb39ae2f23197ee53f1b","ea1b8a251ecc1fd96697d0c602d3e14ec46383d27bb9485a0326cea5576ffacb","ea311dca2ef14e02b9aae563bb28dc737b04b7f01c1ceb2be3d92007d2c74ac6","ea8e5b79bbe5329ae8437677c8316f2f9fd75bb1d40c88308c269140a7e564c7","eb996138bc91c0ee63bafe1ba10b130ff5a2fc82aa4918296222e0a831a569fe","eba6e8e5a12a86f17fade41bef365aa95491c469e18aa91aef64908a4263c905","edc160a11c07dda8072748b66db7f27b6cd8efbd1faa3f6c826a0fe445859c17","edfcbe4773eac1fe2964179a4ad21294efede89568f2efd8e283ac18bc5693b1","f0f90dee84db760cc1bb0f6e6983d4de0e3d5d9f4adf7b2b52f0d3dbe6d585a4","f1d4a6e98f41ab3f6cfd67cddeab9d0ed287b92cb3dbe575e3ce61925510a792","f21c3a9267110e469f224ac7eb76ca5bb084fc90df014f1ca6791d5770483944","f379a1b9e29aa7fc25c4c0c897eaa3c0e90d66a201a0ade8cbf523a5cdc8cf50","f3e04891c79b604f9235f438adfa49ee27db43d25c7be0d1cc06ae53b8f6d2d8","f46904e701174fe2850798d9e1b077bdac42fcac01dbc385298da01118c82aa6","f53265f53af0b0856911ab08b373736964d0c443e8ba61d7f1d45f5e5b04edf3","f686173d310f41e26e3fe8a7c1dbf4313e4d793323335348badbcf4633f5d699","f704c9c9e2cab1ed44578f48d161320b5fb4384ecdd8b40a5e22c4078a8594da","f89156489d35f9992d5971a52a6e03a7d7f095e15c2c782e85efb1408a2bd6be","f99ef6fa3c9c6bf572ec69eb6eeea9f88ce6590d3a5565bec62b001b6f2a376a","fa2dfc22b4fdbcf402a822e8dd376925655d997a0f96284a60f10665ba3581ba","fa3df5f8349aec4805bbcd279b88697def63f2462d8ada0b5fe1d9983d9a6daa","fa6b97cbca1d4f09662e706293b0aec1eb76b8e2277441f54ab6c548b5423236","faac0c3fa7cdf67b452d407e9a1db5cbe1e9140ecfe300200b0b0a6279c97c66","fbc8b53b5c6f3727c084e5e0429e410a3fed5a17e1a0144692fd196d9836a4bb","fd04d7588bb9e6ca0a8b65ed0c9635082a9ee5f46b2d1b5b25866a072236c1fc","fd60f2a432086c6fc4a4c39d8d2d6edf5794c763c05a6401db2bb5fa2c601775","ff532716738e2fc716c10797d9717f324cca3a1234320a84a73a0b89569f11ab","ffd0fe3449e449c7b9fcdcc7e2c1ffb677e57ad935a252de88a0122d437efa67","ffde5c700732beac27a9b5162213d387422ce199400e56d9cefe550005b6a542"],"schema":"fsgg.atlas/1"} +{"records":["000ada42299601fba29016e5c0e0d4012876fb42670bb10fa0b1315477254ba4","00641d046d6869fdd0023ab3df99e0e67a6ea28f0dcb701f622b1cec8b3e07c6","026b08fb343aefe19177e95b759560d340d372def4b71acf613fefee3438ade2","0357495d23fac4fad210b6dd7ed7cc57dd33d107e1659a81f085cad78300797f","036c148f6d0e89858c9bf4cf380272ca6904bb4ca277a909fb71c47f5450cef7","04e404d89dca295564813149472b1de8e6c43357e2f6d91d169ded7600ed3a02","0509e5c6fdbd2dde0c0db8558647080560714804d00e4f9268342f2e84858a3d","06ad2c8aa0ff3b862edf3ba99e0e4e8801ee163709e66333cd06c3fc61232b05","0a6d7dc5b64970bfdadc9049ace95e8bc163fc421beea70129ff0eaa692c6d06","0ad4403c8f4078dbfa543310c69bd1dfc768e305987214ffc37d7b2600c4687c","0c22360d4653eb0f450e4d3d34564875f1660cfcb2d546095d98b3faa3967cbc","0da4d093b49c0a1f654b38008bb01195e816829279ca1989bd2448194e15361b","0e560af7d9dd2e0f2f588a74cd35512973747f20bdfe0bee0bc889105ea53dc9","0ea7107c2c8edaab3ff2bae32f63cfbef6903a51cdaff257278f757ed5ef429d","0eef4d717eb03f0906aa3be7336aa71f831726afabe8a56077b76f6e82fd08e1","11fe30832d93706c60efd836b09f35f049c4a715ad6144cf277ca240c5780704","1244d27db0cf5075353bcc622d0fb3b5ca6a7d08526e2c5754e8b745c250bf3f","14156f1c6bf0fa8dfcb5cfafac09e012db446d528dad0e4301404fd693b9bed3","155fe673b8ae12549c978e1bf1d5c43e360937fcf2135cdcd5aea6f6c771da44","1945f527afc3c2930ec4d7fa57ebb2ef7dd6321c0dd3ab9233c9963e9e613165","19d657b67672257ece127f3b957674b7fb4780843148db0a36a0b329c2a418ba","1a24f6ef0c08a898f309c1b925fc19b29526f913a61a1dfe4b1a4308ebdd97ac","1b5351b2dc647aba864e387168db5128435cb80da94fc42581cd60a05fc34b9a","1da011289116fe88fe92cb8f0e83ed7ccbbca251681d4e136c5a61c40364f8d3","1ec9445b242d2a2e149fe71c67bf13d8c0e4ebe5a6ed7b022656b9941973909d","1edc36731a9c76ad07d269d8b4fd84c8c956bb43d6f56de17d6208164856ffbe","20901b579f69cc97eb56b492938864667576e1c9bfacf13f8a529c4f6e543448","21338155cb4f52c49e5072c877771be67c75590d9b238ea025fba5209fd6e018","23af79bd1e7995fc8162ddc4d830318acb054bbfcc9c7d5cb141ec306da67386","24d4f2730d94d1b7f149771ef0e59192f4936d142b21f4a56b1a391e4514d38d","2591526ddabbea03fbdc38bf172bc54f42df9bc51eba7ad2b70d6e67215f08f1","26259abc7fe745f52e06f2aa2abb0e50f189bc7608065f04d5c669a0a99941cd","26290a0990d6dac0ce9448e05eb934210603356043dcf14a5d80585288e2aa92","26d6b31965013079d4db67a2c403e01f21e3c30ae65953400dbed92e289a0925","288daf614247c260cb673d8674e8b3874ccc4e269347836851f702d7ac8e2f7c","28abfaf6d50ca38af0b88aa50524200c17af9000da83ddbab3d8f9e06e020fa5","291d3db272eae084d34c04bc1305f2abb26a7e7acbc5515208469b46719a4ed1","2a38ddebfe3380232e35d5a24f9cb9f7c38abbc9c68add4ea5952c1e65d328d2","2c76ce93500601e281a41f5985fe4e3926fc8bc9d01ee687f14052cb553ad2d2","2d599c722a08306b98f2d833fb3e4a7acb9dea92e6a58820caa2f65c09803fb8","2ecd502add2d801eebed39411fadc9a80098ba9ce04a5f4b728a0e4e331232d6","2f7357367d921995f4c6fdaa693392adcd2df4860ef4d25c8dc47f7ddea8c755","2fb2ed7902a8e35dc36489a23245d963026d688008c92fed6fdc1f6bc27198a6","310bfb5b2d061bb733771e5cb7b3b7d25db43af5eda9f806169b7ef9330c2fe7","32f69a7b8997ae98b9305ee578145d795dbcd39ca4469bf2465e57a0295cda51","335683e33b94cb86b5e426b4faed200673bf850151191a08458136ceb164fd4e","3407ec53a884d3945d86a88d6b9a883419dd426e96b1108a8e6686f30397a629","34463778cf2d29e3896a65613cf9e3eb3e9f2d8946d17f12b609e70eec63d128","35da3938b72cf3520e126ad595157104b69ab748904c7b4e12f563d6b103172b","37c8908ea2a349cd3034018027160ad810b28ad1fc203a9a353971e1f7396b4c","37e39faee019bb041627510f1f02746ba9a85696417a083b438eb4974b72c2bf","38a75fd804821f4836f0a7ba8d41af3d3a3a5f5d7dcea68487009297824258d9","397476cf107b48e7a662264f8fea9f880231fd3d1e0401622650f214cfaa35c7","3ad8b0398ba6c354c9e31b7438b2515579fc0b1f17de4b35a914c862a3a11e3b","3b3c6cf083b12a840565e00458e2fd4ee8a61f97cda452703a6b13d7776b6c13","3b4af144afed3d52dd2e1f64e23bc25b3475eee5f7af3bde9886761b15c33dfd","3b5d82795e9f5d1992ab67e078fcf1108247ab9b6d1baeac944d3ec0294cec5d","3d0274f77576abdbdf442c8843e955e1bbc91e9f8cbfe3646b119337cdb13c96","3e2f66baa16c7ea936eba34720a55897438f60b343cbe8fda4eab1e5dde044eb","41c768ea17144c6ec225e9a65d4c3c127fdd7264dcba1a89aa17b20fd5d7e3ee","42aeb46fcc3d10b95e4067bc9cda875fa933b4102873f67c7bf1f8ca6799a598","4320b92712bc14dbe10b56f1cd3d1bdc093fc4be6016732839d0be4dd4d027d3","46cdf2c207f79d388001f6636dfb7a98bb2ba72b9d1c6df4938f0a27691e07a6","480f1ede18ae031b164d49d676feeb1090fb33932676ff52e1e2eb24e8d154cd","4855e1947afc954cb1b20bb45e7af10b098fa34714bd32e9bc77941cf58fdaaa","48797c44c92cb34fd9a57a08020b45c6920b2268dc8ad616c0f814a3710d5316","48d094622ada1806cb30335926007c1abc476b1f7b45a2e250c490afa25e847b","4a724a6a842a132c2185279513f341b79f9be93e42660f1255770eeae3b1323c","4c8c327dacf345e184042092e96ad3ea02ed4cece57dac5fa68ea52fbb5a6adf","4d5a44ba07fafeab823b54a21846269330ce35b4c190f3ddd5434bc8530d9b41","4da0a5be70e8af9c39623deac83822749482187f6a0fc3d186dcfddaa7111576","4f1e58fc658a4ceda181e2a7fa249305b09b573ffd68c2489f204f4957224957","4f2750b974c1404acb721ffc84cbd1d0756a24211dd6f6503c10ea74dbc45676","509ec9c08864b9dd0029f32ffeac85fbac863e2dad459994c65b7cb5264faffa","52049cc9cee43bb27229e6b3e983e02c6aa20dd7d153b13e3c74bc6d2b47cf92","5382c901d160ca2d79888d8acd7a690a5349826b5da486274b0800c9d7513f11","540879695d41205515aaabe5466971014cb43b960a26b8e5958e37fed63df762","5560616d1e72f0a539f9ebbfea3b7d195c1ef5622f97994af1963748d4f97533","556ee783d8e2e4ca50f656c095758be613983f904d998a6534fb155510114f21","55a4711e799294d06988ab4acf77eacd7d424123082bba3ec987dff0ae13999c","55ae095961d78a1514c4dd1e63d477c60179a8662571ab5a90abd3eb2b83eb10","56e7158313357bb145bd98c5f790e569be2203fb2601565a30091a597a7e7ff5","5962dd14d3923433cf723d698d1af19ac37a270b6e88445643fc56a646faab5b","5a2064cdf51026eed65457c05f34bec919b31d96d35c29498d298685965f0b5a","5b77bd6dfa81cc339e729e4195e258facbfeb64b9c680512f742e3fb1961fdd5","5c3527e43fe24c5aa171c6fa4a3de7fe5e78f2527aed0dd19cb21d154d43da21","5c79c77f00167ca140127b00f1a79e1ffac621e46fc461089594206a7df8d7cc","5d015880319af666943e68169ca906bf2f0c813d8bf2c5c0262aeb5a40366350","5f2a75b89983d1005a38afa2cabccc3a39f31989807120281d8505ffd564e0c6","5f4fa6dde5930fe1b42f805895f0f5fb135c2b3ff9830f2bd30ae7526a3295a1","630fdcff1f227b5baf5d10bd78ef0fde68791ac0cd8a15f65065f5cc4501b17b","63113617f2e4ee6b827a69bce6afb3949190a282f5feaaa9e2c9f82372623bb8","63544fa69b09916d52b305700eb9816305ff22b77162a44edd13897acea3a655","63a4394e689acf4a4762cfb4df691d05f923fdf592fd2f8ea41e6a54f98d1136","69ebfc7eb8427db3c5c59bdde652d0cb269426126f8540b1b58caa29ccf130e2","69edc4285578313d1dd2f914d69add075a7b354f7fba717606d1abe15292576b","6a34d9279cae58765d6ee4a980192c0e15f3ca217b9f1815861d472a281b3cf8","6c3c592efe9c684ada5661b8cc88a5c3f6e57c841db06b9e070687504cbf6236","6ce6d164c3e31463fb9e144fdf91413e55d077cfc4f25092bb02923fb538a84f","6e08a638e1e28020923effd4c65fc517dbe7b06100ff76cde74e427191503b84","6f3a7020233cd77cfe59eefec0a277f6dda323743c8d80e4e54a95cd3cbc23cf","6fccc6f0c5fa71c43211785dced8abd0f3295040eab56063f4e8d77f1c09b8ef","700cd21af9ed7e81900fad9d52de2fb11db48e64b038e4293168f85e5dd0e043","702d1dfa75e92a916a446429f474d4c296e6ea4e8c487995852d0525e8440659","704cf778db6086c3e282c81249fb0ef09c1d7c2043335ef74c7ecb69bb3e84ad","71ef1ed2d5e4bc7eebe7a73bb3e9423e5bc2f8319186380fe8b38334952d3b01","7256ba00af1cf759b95b7bf8ae3b9943f31349bd10a7652a26bb419b368d73a3","7369b339daca0fcf46ac7fe82d65ae95c75d7dbcaaae51209e6d90b6587a014e","73ec844fb3e2b9febd00ba37508b284fad141630f03cb9f74e36a195180f5054","7410de003c7b582e30470d1209eefc796a70c76fe8d61dd9ccfe01ecfa41310c","76bf5a9c126db6eb466287a7c0d823327ee9882a70eaaa6efb03d169b5dba808","781a64598efb2a11156f07271ba1c14c4f6b3d73aa2943b26eae02063df7af70","799abc1e8d381b8d97349479139985e383bb49179b5a80f39807cb35a3ee78ce","79faec494bdd6d098c9d2a9d8559f822938c6b2104188db95321d89e7a732979","7a032dbf0351aa32c77c8d187f7eb697500ff186c88c5946ecc15adc972246a6","7a134e7f1822183ed1c0ded720971539350feaaf92612761210cfc3ccdc55870","7aa52373f2721dd76fc8eeb3d6061794f27ea8d11e96bcb1ff25a97994a77d5c","7ad4ef4b8d3221758a9e7f9577750ee03f6cba11c8eae8bf25f74a3131bd21a2","7baa35131ece7ed9860607157d2531d4d70a061bdc9bb9876e20328f127cec53","7cbf970a11bdb91a40e248eee97ef789205910ebc913349698fc75ed35e82fdf","7d6133667f81aa66a98755d253ea43301b45ada338225df034d2ffdfc79829e7","7e89b59b456dde4bbbdbf8079665bd82c51d8e500018472981c15618b3893959","7ead0c68ffa0ced241af74dde58b3831343dff3f7eaab64bddb9954545b7ba12","7f8188b57ad3b0c28210c95954e5623376a4262dd5e75f002700c6094b8d6b6c","7f91dfc2ea1a3131c4090375db0f489c2a572e245ade6cda4ebd440446d6d60e","7fcb8cba3ed0ee9c342947aa88f0f699bb4f5c23244d21c6c739c9b66d7c6101","800060d7b4934508d0277f90a464e3112fd2fc99af4ef23825d09b0ff53f91c3","800a802a4ce9e597a102f0a566535c1f9f7adfc60c41af6bd2db4fb7fe3c0d0e","820c12fcbded9048a363b9e0ebbc48b24f85fd4a68131b5dfc1b19057bf09ddb","82c419e5de083e423330432c9d45c744043d1bccd8eeccb41e3014ce9ae3c32f","8343a4211a4d0ffdb320d5a4305174d85bb707d15dad978f6436297d022daa11","83a97b9ebb29f5cd014ef5e178970a601ee92c44678f05d1860b383c5f63b79d","85a962a7c23c14dff8d683e738b53f422221697b213cafeb616d3a172a6c4223","8629fddeb4f273b35df69d4d28923adc14eff59d919b1a495d1a68818137c561","872ab2b2d65fe685b91e355f5af051c85b79569ece16448160d01fef38039624","87f2b3634baa504f2ed9508c6cf6a47bbfb36214a177eb13d70d6a987706818c","88b615ef6a31bd9958e98b8ea522f49f0360ccac5d9fa8deb9e3ef3fe3147d9d","89cafbb20d6029656266d8cb0f85103fa519c8032598282fea58c94cc59c4125","89f2105745b3a7cfd30e7d7c598d6c8fdde0a599f30fd0db7382cba50412445e","8b3eec010d1eae43a28c88434f2410a751f790a9d6ec4a08e75e68c171629ab2","8cecfa09651c40be4d7c11c117c80e1911dc75bf6f1cc34be64706823cc024c3","8d250acd40c8a24ba0d51cc73e65bba6856509b5fbf4c7d7a435897a01c6e764","8df1420c27503370db9382f68a0af8d2b4d56f9dbc94b24ffae450a905083a79","8e7371228a726f381fb811d1d812c39917788a3df7e53dba1a3c364e755a0c03","8fae27ba5117e202afbd523b249fc454912571900fc909f5419b8ac96c773c44","902b958b4db7d8d8bf73a82a8aa86e5485b39477047c8ad60175d118fe31d987","91c9ced5e9ab8da897b7f69166a7d0bade5c58d511b42d60d5430d536da45d09","941f70c384905ab77cb9a88e2671301117e4df553da6fc7a09210710deb9b6ca","9442788fa51227044803f1d3efdfc1c2b2da372871a85f0f7a6bb3596a5c003f","947a1cdd43831936480167169d30334f818bb5d882650a3547827c05204af111","971f59cc197732d0c0b6b8aabbbefca4550fb8fb04f8522bdb4257c05a28848a","98a097d6ebb754334250dfd3ccc5f3dfaf5966524758cbfc9e10adf4a0229693","98c7e4bc2f05e9b4ca703db4a02347db7355a44f04e3a4003e26c46a56bded2c","9944d1a9674e555a41d31d069d136461eb06dd4052d40f2e4ea4368dd978e01b","9bbd03293bf53e9db51401d157b3eb2aa51e9c70449350e98b9a0a3fc9a684ce","9cf90b3aa59f3ca0e40fd9e1fec9703428752d63bded6b091d28f614c9ba99ae","9eb67ea41c5bcb9557ba51bbbd1b321a78f16335cadebbed848d8e6c1fc68bab","a0ff0d0bb3a3c801b637d091293f2eeaac68e934274e4116d298ba60ec3461cc","a1baa1f699fd4ce19e8ef6cdfe346e1b0be63e16d5c5cd5feddcccb16a62f269","a3c84d76be9d891812e795dd46470c2978dceeff928d729c0d5dd6def599923b","a64e8aee389ae696d0d4b045c0153092113fa522ed5a0fd9b5658b8418db4ded","a6c531ed9bbafabfdd649f3030daf2f24461163aaf99dc73bb24dddb77bbcb90","a7ff7302e668dcea1cd1db2241ff95c0d73534539bd03fdefebbfb57f60d3849","a8b4a33078335d2811bffb78eee49aab5fcb31597dae366d43e20c7f7800994b","a91a47fb4fa5c1b1a834fa602030e435ad641240e6ceeb99eeeab7341ca09dec","a91c8a1431a4120667cd523cf56bac004794fc5b8b24275ad2f9c8a15c75fba1","aa131e74e695292adab9f57b3ccc5a503a836dd4b95a3b2b107c69f35dba3637","acd7884bca46ea9422503cead985691da05cca25bd5ed52a199783cae7b8b01f","ae69fe306bf5db346ddfa4367cda24c95e44213baca27b0ee7d7167bcdd85af6","ae8c200dbcea29f43b29974cc247d70647c80d5d76385396f1c82ee9f669e2f1","aec13a075b84253397fb97e1c93a23e1aaee6d6bff2a9161bfd00a5b1d7611de","b09355a97e3aef396f681943b37a404a98fccc6bcb97781eddb2fc000d1d985d","b0ecfca0d114bae34ffa62ac3ea05159a4415fc6eb73ab1fcc4d79f657268f19","b25c41f19ba40e646fd9b6f82051ee4c38985539e445b26bd628eae98537df53","b262187aa66e8a97083bf7f79b91595bf7a4077abe7f8be5b00b4998f4579d20","b4091f93c3d96e36b0708f5dcd46e0e7a0a48f098036ccef6164e4a6429ed94c","b4093c67a9195ee7d28d2575e967ac80057b92339489c244243c7c504c669ff0","b44352445272089cf90967d4d413cf7009bed0ac19f3fa95cb831d5ebad081c3","b4ce73bea5219f1b27bffb36c6a9dee14447a710a8938db807770083db4552ac","b5102ef50e7d4ed1925af5a8b45192e737df02fafb75d7065995a2bb93d2e8e1","b5428b5775526a00645566822530fb969b82247ba83f2c80c06d34151e1f9061","b6cf3b02f36e0efa93b04667cdc5701340033a09e41a7196277cf6756999a666","b77c6669bcd54e0fa949faf2f7205f2631acfbc1ccf79f93f8dab5c5717f0e93","b7ffd6cddb12384224772e8de79aec89d8f4bca966a3c2a05763889f92a6db5c","b8abe10a2a92bf537a49e8dee92baf8de3ed591848a1b25151dab0d7ab3134e5","b96cea09313d481dfff1ed1a2c552ea29e8fe68f52139458996a4e36157748d2","b96f9beb6d6d8fbf88c4b8b2b807a362f2640479cab6173cf64c7710817785a0","b9ad2510d8249ec4c8e7fd8b2471727aa1bd0ce8f3dde78e545fb2f8f2985a1d","ba7d7464da8e13722232c8f86273774054693681becc450a68aea21a5a0e9b91","ba87e5d43ddb10937bb17941f055f80a223d0981fbba44107aeec8530e3a7774","bac3431138e986d6426c1e81bdfe0a968394896c0751cbbcc8f36002fd0ed069","bb230236c4ab6353afb4147014c93204d3d1eb8a6d18558075df5fe79ed7f392","bd714f38c881208f1190ad714bf8fa5aa63adf302bdaa8ad8810ff279e43459e","be75cc1ee935f783be39978de91ae196c16141d4096e16eb6d07f59583296b4b","be8c3cb2d8d67e63c8b069920b74c6272922febbc6a0a2c4a0072a7a213681d2","beed0f36d9b1b9a20bfbf89c96862482b8d5b9d4284bc89539efe9c9b11f000d","bfd21b5c8eb26e9d475868bb30d66ee08f20876e9df5cd06aa8fec01ffe666df","bfe97e65f2cbe6bcd0f14ff57ea4dc1dedb2e5f0db92d04d0982cf1932ac1c3e","c112d36ba38c362da1c022945db5b6bbdc3014685ca9bb7d940f5086f00a675c","c23cf45c1dcb748145d87f5c173dd3c8becaf9e3f6fdcb3e2ca91d6726b0842a","c29b8d250a7b5e73f4ef675329da2251b8de032501e4836445b6aafd90c645fa","c329c9df0dae8a036da9be440432d045be3ee13cf5664cfa6ccf11576ed11acb","c4600cd5358b5798a075beb54539d952f200def1c9a573bd237c795fd33ba36f","c6752cc3c7ad06d1e9f127365f078919ac46b77f8a8fe413650094d914838ec3","c6867ec30530fd3feca89a4e968522f783b636b165ef74f288c42dd50bd51a3d","c6bfbb004af355e96ed5b4c8c9b8b7a96d1c08d24bcde7c666728eb9497d6d71","c8bd340e6fc7fa3e97415f7ad4c22c51d88c6e77f782c12923e841c04d3f882b","cad13b6653fd9f811e67d13c5f01f9dec047f8c384097cee01dd2e2db39e539f","cc24c3770587f2421514fa399d2617201752bdca145ac39058de91d45d3d19c1","cd2da00f6f1bad8fb7c1b87cff80e122eb017e44a471cdea769efc67db369038","ce887fb65b6977a2046e7583d704863624e55909ebcc9c3ed065b3d13079a410","cf9223c369b6fb7baa52f301f904352ba8e8d5e4c2a06f70de6ef1cf76fe1b84","cfc3b5044af37ae7485fba8067dcb22b2438bdaa6e3a30c22ce0f9e2c00aa597","d0481d9b6111ab4afba0462e88970b863284807ff44ca97364c84952e3f88583","d0973a1aca6a118375b466d6e91821f8450110fdf042ac848ee16912012d2b0f","d0df3068db679e24d9487ee09a6462ac5cf3df30f46ee466b66feb6dd5ff71e2","d227e0a73e3c5452bc5ab41ea2c695dfc0ff9b0c1c81e59ab3173f796a4157cf","d2cba4dbbfe3d026f825a8b470a2f6011f9b8e245cf042ae8889afbb17dac6b2","d2e4c515093f8a2aa824c8b542a016e5c321065f4525931b2fac4f8af2fe52c6","d31e8aa21d1498f2d4a07c4cc89ea6f5a6d3ce54d334dbff230e0f55db35c85e","d37de74aadd5916eeae243decf347821c4e946356b9f70471658638ac3092f91","d49d02cad8bbfeac607457b08aac6068916ef45d8f6c980279d6e654407cc7be","d4f51c31a454d9abac29457cbbc21e1b5767c0eac1b37c41ee787a3efb05c80f","d5c084e12da4a5111487c166b879042a21a056f761ee22d9237cb4f65f366341","d6077d547aa21ea10a9bdf6c752b8d1a0a6382b4b43a0fdf790f245e66a609fc","d67e8c1aaab1ce6ec1755599ecde153c47c6b90dd4c301663abe9057bc31af57","d6abcc1484c3df45bde915abf48324af1e995c3266a3c6c069e98e94c8d9a4d7","d8ca8e025e226ad6bdd32a6a9fceae2982b0413a0ad09314558b54bdc724bf99","d8d03142030c11a0aa1012102fce2b202baf88e424a1236832937e87450dc579","d9823dfddf6c507ec030fce4bd2d98fbda18e595c2ebc563574d9196cc7a5e33","d9b0972f3406075b860ba7cd2e71d4492c826960319b10389c2c2820e2981254","da37a61fab07ec8856b725854e4064f55a59149aa69cad1bcbf89ec478b9f578","dad01e5bfb13a6c4419f4d24fa8dbb424e93a1c4be656b0e5dd48ac546e0a0d9","db21a75b4fa6165f75268963474f3262124795d816ba80f685bab2c6eaedb028","dd97ab52fd89f42352c595ce137684cc519c473fa17969e8a6adcde7322a4748","dda0a34d6704887eb36bbc0173334b49d755cac8cea3bbd17bfa972f04183dd4","ddbda9408727a19a4a55d516bed99331edf67d8301de9c78564716465c949619","e0288c94ca9c16a6de217e6baeed720fcf83e401bec45bd15ca47ba8fc9b44dd","e1667469384ec775a3df665679cb3fef057dc84dcb18ed8db8b9c5723835968a","e16c328504278cfe520d6d99990f2a4370cc48159aba86694d0f7598fd4b0611","e24df071f5325bb3a5b20f355143556bc7712535ee8b6ce4c426598f06fd2448","e28d8e6b71264d0bfab853e63178f2c151367cce0dbd16125596ff3604b6658d","e2c734504d211580b4e6674eb1c7d31fb6fb730c037210c34c980a96f9098269","e3f19c383354cdf45311f92f00b90fed25dfba7e9892ab2f5f3aa4885876b75f","e409fbfe439455330c0fe003de860e30f7093cc3cc83a32f886c9b539a29f60b","e6300ee8e6c2c4ce6d7ab02b7b06fd1cabe3c5c52b99a6ea3ea8b5acd5092e0b","e734d068446591aba283d136c21b4fb0209f91352cb4fc6589bd651cdbfec163","e7a333109a7aaec2b71048868500c15e721900628eb48790dfeaa1fd4c2dabc3","e7c9175fbfd9fd84bed95d552bc0a439b07a233c3e91fb39ae2f23197ee53f1b","ea1b8a251ecc1fd96697d0c602d3e14ec46383d27bb9485a0326cea5576ffacb","ea311dca2ef14e02b9aae563bb28dc737b04b7f01c1ceb2be3d92007d2c74ac6","ea8e5b79bbe5329ae8437677c8316f2f9fd75bb1d40c88308c269140a7e564c7","eb996138bc91c0ee63bafe1ba10b130ff5a2fc82aa4918296222e0a831a569fe","eba6e8e5a12a86f17fade41bef365aa95491c469e18aa91aef64908a4263c905","edc160a11c07dda8072748b66db7f27b6cd8efbd1faa3f6c826a0fe445859c17","edfcbe4773eac1fe2964179a4ad21294efede89568f2efd8e283ac18bc5693b1","f0f90dee84db760cc1bb0f6e6983d4de0e3d5d9f4adf7b2b52f0d3dbe6d585a4","f1d4a6e98f41ab3f6cfd67cddeab9d0ed287b92cb3dbe575e3ce61925510a792","f21c3a9267110e469f224ac7eb76ca5bb084fc90df014f1ca6791d5770483944","f379a1b9e29aa7fc25c4c0c897eaa3c0e90d66a201a0ade8cbf523a5cdc8cf50","f3e04891c79b604f9235f438adfa49ee27db43d25c7be0d1cc06ae53b8f6d2d8","f46904e701174fe2850798d9e1b077bdac42fcac01dbc385298da01118c82aa6","f53265f53af0b0856911ab08b373736964d0c443e8ba61d7f1d45f5e5b04edf3","f686173d310f41e26e3fe8a7c1dbf4313e4d793323335348badbcf4633f5d699","f704c9c9e2cab1ed44578f48d161320b5fb4384ecdd8b40a5e22c4078a8594da","f89156489d35f9992d5971a52a6e03a7d7f095e15c2c782e85efb1408a2bd6be","f99ef6fa3c9c6bf572ec69eb6eeea9f88ce6590d3a5565bec62b001b6f2a376a","fa2dfc22b4fdbcf402a822e8dd376925655d997a0f96284a60f10665ba3581ba","fa3df5f8349aec4805bbcd279b88697def63f2462d8ada0b5fe1d9983d9a6daa","fa6b97cbca1d4f09662e706293b0aec1eb76b8e2277441f54ab6c548b5423236","faac0c3fa7cdf67b452d407e9a1db5cbe1e9140ecfe300200b0b0a6279c97c66","fbc8b53b5c6f3727c084e5e0429e410a3fed5a17e1a0144692fd196d9836a4bb","fd04d7588bb9e6ca0a8b65ed0c9635082a9ee5f46b2d1b5b25866a072236c1fc","fd60f2a432086c6fc4a4c39d8d2d6edf5794c763c05a6401db2bb5fa2c601775","ff532716738e2fc716c10797d9717f324cca3a1234320a84a73a0b89569f11ab","ffd0fe3449e449c7b9fcdcc7e2c1ffb677e57ad935a252de88a0122d437efa67","ffde5c700732beac27a9b5162213d387422ce199400e56d9cefe550005b6a542"],"schema":"fsgg.atlas/1"} diff --git a/docs/atlas/records/14156f1c6bf0fa8dfcb5cfafac09e012db446d528dad0e4301404fd693b9bed3.json b/docs/atlas/records/14156f1c6bf0fa8dfcb5cfafac09e012db446d528dad0e4301404fd693b9bed3.json new file mode 100644 index 000000000..9bebaa794 --- /dev/null +++ b/docs/atlas/records/14156f1c6bf0fa8dfcb5cfafac09e012db446d528dad0e4301404fd693b9bed3.json @@ -0,0 +1 @@ +{"citations":[{"path":".agents/skills/work-programme/SKILL.md","repository":"FS-GG/.github","revision":"ef8eb92f4e8444cf3bf0888d44336c53e229a26a","sha256":"7545dc7f8228b63f531edf087d0fd6535de7e4f620e20a5aa1cebcbef04ffb62"},{"path":".github/workflows/coord-engine.yml","repository":"FS-GG/.github","revision":"a91d94bc07a5696c0c80fb89a6171fbd85d771d4","sha256":"406e5b64320fd58ccb448e6da742d1abbf53efca6369543ab7a88781345c600d"}],"conflictsWith":[],"id":"platform/executable-qualification-and-final-assembly","kind":"lesson","recordedAt":"2026-10-18T10:43:19Z","repository":"FS-GG/.github","schema":"fsgg.atlas/1","status":"recorded","summary":"Before costly qualification, verify that the maintained runner actually invokes the changed assertions and that negative controls fail through that same route; compile success or a zero-test invocation does not establish executable coverage. Assemble compatible source, version, Atlas and delivery-closure changes and reconcile the intended final base before the expensive full run. Defer reporting-only followups when they would invalidate that qualification; this is not a blanket main freeze or permission to bypass required checks. Existing forward recovery retains unavailable original outcomes and reservations as Unknown without repeated unavailable-history searches. Source guidance delivery remains distinct from installed skill adoption and measured process benefit.\n\nThe maintained coord-engine workflow implements early executable feedback after build: Core tests and non-vacuity, focused workspace telemetry tests with a five-minute step bound and non-vacuity, then the full mandatory CLI tests and non-vacuity before browser/package/parity qualification. The original forty-minute job bound remains unchanged. Normal TRX and --blame test-sequence artifacts are retained by an always step; no memory dump is enabled. Focused execution is diagnostic evidence, not full qualification or permission to skip the later suite. Earlier opaque failures and later concrete assertion failures retain their own evidence; a repair does not explain an unobserved original or establish timing savings, installed adoption or current runtime acceptance.","supersedes":["cad13b6653fd9f811e67d13c5f01f9dec047f8c384097cee01dd2e2db39e539f"],"tags":["qualification","coverage","delivery","process","recovery"],"title":"Verify executable coverage early and assemble compatible changes before costly qualification"} diff --git a/docs/atlas/records/4855e1947afc954cb1b20bb45e7af10b098fa34714bd32e9bc77941cf58fdaaa.json b/docs/atlas/records/4855e1947afc954cb1b20bb45e7af10b098fa34714bd32e9bc77941cf58fdaaa.json new file mode 100644 index 000000000..d8565dbbb --- /dev/null +++ b/docs/atlas/records/4855e1947afc954cb1b20bb45e7af10b098fa34714bd32e9bc77941cf58fdaaa.json @@ -0,0 +1 @@ +{"citations":[{"path":"src/FS.GG.Coord.Core/TelemetryStore.fs","repository":"FS-GG/.github","revision":"ef8eb92f4e8444cf3bf0888d44336c53e229a26a","sha256":"8032321c251a03662111e9965845360eb8fd92cda0ce9e220116a81cf4a7e4e2"},{"path":"src/FS.GG.Coord.Cli/SkillTelemetryReaders.fs","repository":"FS-GG/.github","revision":"ef8eb92f4e8444cf3bf0888d44336c53e229a26a","sha256":"a510716436479424894fbd4787ee545c9b37e4090644066310b55b3ada439b7d"},{"path":"src/FS.GG.Coord.Cli/SkillTelemetryAdapter.fs","repository":"FS-GG/.github","revision":"ef8eb92f4e8444cf3bf0888d44336c53e229a26a","sha256":"74d61ae2ce23b4e6fafd940ccd924374d4a8060db0c65693b2b69e69d840b857"},{"path":"src/FS.GG.Coord.Cli/WorkspaceTelemetryApplication.fs","repository":"FS-GG/.github","revision":"ef8eb92f4e8444cf3bf0888d44336c53e229a26a","sha256":"7c1c889ceb8022f66650623016e6e71493b0eba6dc755272a62800095c8ef150"},{"path":"src/FS.GG.Coord.Cli/TelemetryStoreApplication.fs","repository":"FS-GG/.github","revision":"ef8eb92f4e8444cf3bf0888d44336c53e229a26a","sha256":"04fa2aeda375b1bb5f5e1e9a4c8b9983146c8fda6c7388933077e67d1805f025"},{"path":"src/FS.GG.Coord.Cli/TelemetryApplication.fs","repository":"FS-GG/.github","revision":"ef8eb92f4e8444cf3bf0888d44336c53e229a26a","sha256":"fdfa123c0175440004e239ebd49046684c687538cd02269504ac60c84245ff8b"}],"conflictsWith":[],"id":"contract/passive-native-usage-observations","kind":"contract","recordedAt":"2026-10-18T10:43:19Z","repository":"FS-GG/.github","schema":"fsgg.atlas/1","status":"recorded","summary":"At the cited prospective 0.106 source candidate, explicit selected Codex rollout files share the maintained strict native decoder, including recursive duplicate-property and strict UTF8 refusal, and project actual optional response counters through provider-usage-observation/1. Item, inventory and terminal attribution stay unknown/partial; these canonical-only facts never enter qualified item totals. Stable native thread/turn/response identities, a finite serialized producer index, private pending intent and existing immutable spool retain corrections and exact replay. Local enqueue/reporting make no receiver or App Server call. Initial capture-only setup skips credential presence and reports receiver unverified. Same-owner state cloning/migration is unsupported without original state/fence reconciliation; one selected association root is the supported ownership boundary.\n\nReceiver admission refuses cross-owner changes. A complete bounded drain census retains the earliest pending head for each structural scope/source/generation, fencing numeric successors behind uncertain or durable-but-not-applied receipts. Candidate scheduling rotates eligible independent heads and ordinary traffic through the existing sixteen-envelope quantum with one private advisory cursor of at most 256 bytes. The cursor advances under the configuration lock immediately before each actual head attempt, rather than skipping a whole selected quantum. Expired shared deadline/cancellation stops new head attempts; canceled lookup cannot proceed to Submit. Missing/invalid cursor state resets deterministic order. Cursor crashes affect ordering only; queued bytes, receipts and authority remain unchanged. No fixed elapsed-time or eight-pass service guarantee follows; transport timeouts and exact-source tests remain separate.\n\nThe receiver application classifies exactly passive-observation-authenticated-owner-required, passive-observation-owner-mismatch and passive-observation-kind-is-immutable as semantic admission refusals. Their terminal rejected result is distinct from a genuine storage/unknown failure, which keeps the original ready bytes for reconciliation; no broad passive-error prefix turns storage failure into successful cleanup. Unsupported receiver data remains retained at the producer according to its original delivery state. Earlier opaque failures remain Unknown where no determining evidence exists; a newly identified admission-classification defect does not retroactively explain them. Original focused failures remain retained separately from this reviewed source correction, whose runtime result is not claimed here. Full qualification of this unified source, publication, installed producer capture, compatible receiver Host/store and restart/restore durability remain unaccepted here. Host is independently versioned; first useful isolated candidate capture does not wait on Home access or Host deployment. Published/installed 0.105 and the accepted board binding stay unchanged. Earlier records and original failures/Unknown operations remain retained with no replay or reservation release.","supersedes":["7a134e7f1822183ed1c0ded720971539350feaaf92612761210cfc3ccdc55870"],"tags":["telemetry","passive","native","capture","attribution","delivery","corrections"],"title":"Passive native responses separate capture, attribution and delivery"} diff --git a/registry/driver-skill-manifest.json b/registry/driver-skill-manifest.json index 2f791c815..2608de0c7 100644 --- a/registry/driver-skill-manifest.json +++ b/registry/driver-skill-manifest.json @@ -5,7 +5,7 @@ "id": "atlas", "scope": "driver", "sha256": "c18e56fcc56abf80903e2fc6829cd94b44f42947724a26318ebcbf1ac5e1b35b", - "tree-sha256": "aa6ab4eb97ca1d61e192144997fb0f21cf2481a31edc44c066e2bc1c7bd7de49", + "tree-sha256": "008b481148ed61a7558a295203ab1db01e4d4886818d64b9d30dcad69b561037", "files": [ { "path": "SKILL.md", @@ -24,7 +24,7 @@ }, { "path": "assets/seed/catalog.json", - "sha256": "1a1fe671a5e1fcceccd9fcd6ab11f554254b8b8af0d104276d2dc3d237854f69", + "sha256": "6ad30cfdf5dea5607a94c889e5fdcaf23a6297f5da415e747820f11769b417c6", "executable": false }, { @@ -112,6 +112,11 @@ "sha256": "1244d27db0cf5075353bcc622d0fb3b5ca6a7d08526e2c5754e8b745c250bf3f", "executable": false }, + { + "path": "assets/seed/records/14156f1c6bf0fa8dfcb5cfafac09e012db446d528dad0e4301404fd693b9bed3.json", + "sha256": "14156f1c6bf0fa8dfcb5cfafac09e012db446d528dad0e4301404fd693b9bed3", + "executable": false + }, { "path": "assets/seed/records/155fe673b8ae12549c978e1bf1d5c43e360937fcf2135cdcd5aea6f6c771da44.json", "sha256": "155fe673b8ae12549c978e1bf1d5c43e360937fcf2135cdcd5aea6f6c771da44", @@ -342,6 +347,11 @@ "sha256": "480f1ede18ae031b164d49d676feeb1090fb33932676ff52e1e2eb24e8d154cd", "executable": false }, + { + "path": "assets/seed/records/4855e1947afc954cb1b20bb45e7af10b098fa34714bd32e9bc77941cf58fdaaa.json", + "sha256": "4855e1947afc954cb1b20bb45e7af10b098fa34714bd32e9bc77941cf58fdaaa", + "executable": false + }, { "path": "assets/seed/records/48797c44c92cb34fd9a57a08020b45c6920b2268dc8ad616c0f814a3710d5316.json", "sha256": "48797c44c92cb34fd9a57a08020b45c6920b2268dc8ad616c0f814a3710d5316", From b21abce7081f4ad3c6f2af7c8c2eeb633c227f7e Mon Sep 17 00:00:00 2001 From: EHotwagner Date: Sun, 18 Oct 2026 12:55:13 +0200 Subject: [PATCH 19/19] test: exercise scoped and fresh unauthenticated passive admission separately --- .../WorkspaceTelemetryApplicationTests.fs | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/tests/FS.GG.Coord.Cli.Tests/WorkspaceTelemetryApplicationTests.fs b/tests/FS.GG.Coord.Cli.Tests/WorkspaceTelemetryApplicationTests.fs index 93b4fc6c5..0b0c4bf0a 100644 --- a/tests/FS.GG.Coord.Cli.Tests/WorkspaceTelemetryApplicationTests.fs +++ b/tests/FS.GG.Coord.Cli.Tests/WorkspaceTelemetryApplicationTests.fs @@ -789,6 +789,8 @@ module WorkspaceTelemetryApplicationTests = let cleanup, root = temp () use cleanup = cleanup let unwrap value = value |> Result.defaultWith (sprintf "%A" >> failwith) + let expectError (expected: string list) (actual: Result) = + Assert.True((actual = Error expected), sprintf "expected Error %A; actual %A" expected actual) let home, path = passiveSource root "receiver" let store = Path.Combine(root, "store") let approved = TelemetryStore.ApprovedLocalDurable @@ -884,7 +886,7 @@ module WorkspaceTelemetryApplicationTests = Assert.Contains("\"status\":\"rejected\"", TelemetryStoreApplication.lookupReceipt store approved scope batchId |> unwrap) Assert.False(File.Exists retainedFile) else - Assert.Equal(Error [ "storage-unavailable" ], outcome) + expectError [ "storage-unavailable" ] outcome Assert.Contains("\"status\":\"durably-received\"", TelemetryStoreApplication.lookupReceipt store approved scope batchId |> unwrap) Assert.Equal(retainedBytes, File.ReadAllBytes retainedFile) TelemetryStoreApplication.drainReceipts store approved scope.Workspace |> unwrap |> ignore @@ -899,7 +901,23 @@ module WorkspaceTelemetryApplicationTests = Assert.Contains("\"status\":\"rejected\"", TelemetryStoreApplication.lookupReceipt store approved collector.Scope "collector-passive" |> unwrap) let final = System.Text.Json.Nodes.JsonNode.Parse(TelemetryStoreApplication.passiveObservations store approved scope |> unwrap) Assert.Equal(snapshot["observations"].ToJsonString(), final["observations"].ToJsonString()) - Assert.Equal(Error [ "passive-observation-authenticated-owner-required" ], TelemetryStoreApplication.ingest store approved batches[1]) + // The existing scoped-store guard precedes passive fact admission. Neither route + // may bypass authority: verify its exact public result, then the unscoped inner guard. + expectError [ "scoped-store-requires-receipt-ingestion" ] (TelemetryStoreApplication.ingest store approved batches[1]) + let fresh = System.Text.Json.Nodes.JsonNode.Parse batches[1] + fresh["ingestId"] <- System.Text.Json.Nodes.JsonValue.Create "fresh-unauthenticated-passive-attempt" + let freshBytes = Encoding.UTF8.GetBytes(fresh.ToJsonString()) + expectError [ "scoped-store-requires-receipt-ingestion" ] (TelemetryStoreApplication.ingest store approved freshBytes) + let afterDirectRefusals = System.Text.Json.Nodes.JsonNode.Parse(TelemetryStoreApplication.passiveObservations store approved scope |> unwrap) + Assert.Equal(snapshot["observations"].ToJsonString(), afterDirectRefusals["observations"].ToJsonString()) + let unscoped = Path.Combine(root, "unscoped-store") + TelemetryStoreApplication.initialize unscoped approved |> unwrap |> ignore + expectError [ "passive-observation-authenticated-owner-required" ] (TelemetryStoreApplication.ingest unscoped approved freshBytes) + use unscopedConnection = new Microsoft.Data.Sqlite.SqliteConnection($"Data Source={Path.Combine(unscoped, TelemetryStoreApplication.databaseFileName)};Mode=ReadOnly;Pooling=False") + unscopedConnection.Open() + use unscopedFacts = unscopedConnection.CreateCommand() + unscopedFacts.CommandText <- "SELECT count(*) FROM ingest_facts;" + Assert.Equal(0L, Convert.ToInt64(unscopedFacts.ExecuteScalar())) [] let ``passive source keeps absent dimensions unknown and accounts for nonusage scan budgets`` () =