From 1f1b7d1c4107f79e96a0f9539e80087c0f6606b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Gro=C3=9F?= Date: Sun, 18 Oct 2026 02:44:39 +0200 Subject: [PATCH 01/15] build: a probe that runs nothing under src/ is recorded by what it watches C22GeneratorRefusalsProbe builds its consumer in a child process, so the coverage report of its own process shows no file under src/, and `prober footprint` refused to record an empty footprint ("it would never go stale"), however many paths its registry entry watched. With no footprint the probe was never current, and the gate counted all 621 of C22-generator-refusals' pairs uncovered. `footprint` now records an empty footprint where the entry watches something, and refuses only where nothing ran and nothing is watched; a footprint is current by its watched paths when it ran nothing under src/. C22's entry watches what its consumer compiles against: the base package, the analyzers it carries, the generators, and src/Directory.Build.* (it watched the first and the last two, as C18 does, and lacked the generators and the analyzers). Recovers 607 of C22's 621 pairs, the rest of what its rows hold; its other 14 pairs had no row and get rows with the scattered pairs. Tests: WatchedTests gains a probe that ran nothing under src/ (recorded by what it watches, current, and stale when a watched path changes) and one that also watches nothing (refused). Each fails with its half of the change reverted, and the refusal test fails with the refusal removed. Co-Authored-By: Claude Opus 5.5 --- .../RowsPerProbeTests.cs | 41 +++++++++++++++++++ tools/Prober/Commands.cs | 10 +++-- tools/Prober/Ledger.cs | 4 +- tools/Prober/README.md | 4 +- tools/probe/corpus/registry.json | 2 + 5 files changed, 55 insertions(+), 6 deletions(-) diff --git a/test/CodoMetis.TypeKit.Prober.Tests/RowsPerProbeTests.cs b/test/CodoMetis.TypeKit.Prober.Tests/RowsPerProbeTests.cs index f3e5a890..c52e5b5d 100644 --- a/test/CodoMetis.TypeKit.Prober.Tests/RowsPerProbeTests.cs +++ b/test/CodoMetis.TypeKit.Prober.Tests/RowsPerProbeTests.cs @@ -236,6 +236,47 @@ public void A_change_to_a_watched_path_changes_the_footprint_since_a_release() ledger.FootprintChangedSince("P", "v1", ledger.Footprints()).ShouldBeTrue(); } + /// A replay's record of a probe that runs nothing under src/ in its own process, as C22, which builds its consumer in a child process. + private (int Exit, string Output, string Error) RanNothingUnderSrc() + { + var report = Path.Combine(fx.Root, "coverage.cobertura.xml"); + File.WriteAllText(report, $"""{fx.Root}"""); + var result = fx.Ledger("footprint", "--probe", "P", "--root", fx.Root, "--cobertura", report); + File.Delete(report); + return result; + } + + [Fact] + public void A_probe_that_ran_nothing_under_src_is_recorded_by_what_it_watches() + { + Registry(watched: true); + fx.Write(Catalogue, "class Catalogue {}\n"); + fx.Commit("a probe watching a catalogue, building in a child process"); + var (exit, output, error) = RanNothingUnderSrc(); + exit.ShouldBe(0, output + error); + var line = JsonNode.Parse(File.ReadLines(Path.Combine(fx.BranchDir, "footprints.jsonl")).Last())!; + line["footprint"]!.AsObject().Count.ShouldBe(0); + line["watched"]![Catalogue]!.GetValue().ShouldBe(fx.Sh("git", "rev-parse", $"HEAD:{Catalogue}").Trim()); + fx.Ledger("record-run", "--probe", "P", "--result", "pass", "--evidence", fx.Evidence([R("1", "1"), R("2", "2")])).Exit.ShouldBe(0); + Stale().ShouldBeFalse("what P watches is unchanged"); + fx.Covered().ShouldBe(2); + ChangeTheCatalogue(); + Stale().ShouldBeTrue("the catalogue P watches changed"); + fx.Covered().ShouldBe(0); + } + + [Fact] + public void A_probe_that_ran_nothing_under_src_and_watches_nothing_is_refused() + { + Registry(watched: false); + fx.Write(Catalogue, "class Catalogue {}\n"); + fx.Commit("a probe watching nothing, building in a child process"); + var (exit, output, error) = RanNothingUnderSrc(); + exit.ShouldBe(1, output + error); + (output + error).ShouldContain("refusing to record an empty footprint"); + File.Exists(Path.Combine(fx.BranchDir, "footprints.jsonl")).ShouldBeFalse(); + } + [Theory] [InlineData(true)] [InlineData(false)] diff --git a/tools/Prober/Commands.cs b/tools/Prober/Commands.cs index abfd7418..91cc7df3 100644 --- a/tools/Prober/Commands.cs +++ b/tools/Prober/Commands.cs @@ -352,13 +352,17 @@ public static int Footprint(Ledger l, Args a) } } } - if (hit.Count == 0) - throw new Refusal("the coverage report shows no executed file under " + string.Join(", ", include) + "; refusing to record an empty footprint (it would never go stale)"); + // A probe whose own process runs nothing under the include paths (one that builds a consumer in a child process, as C22 + // does) is recorded by what its registry entry watches; with nothing watched either, the footprint would never go stale. + var watchedPaths = l.Watched(a.Need("probe")); + if (hit.Count == 0 && watchedPaths.Count == 0) + throw new Refusal("the coverage report shows no executed file under " + string.Join(", ", include) + + " and the registry entry watches nothing; refusing to record an empty footprint (it would never go stale): name what the probe depends on in its entry's watched"); var rev = Git.Out(worktree, "rev-parse", "HEAD"); var footprint = new JsonObject(hit.Select(p => KeyValuePair.Create(p, (JsonNode?)Git.ObjectId(worktree, p)))); var compileTime = new JsonObject(a.All("compile-time").Select(p => KeyValuePair.Create(p, (JsonNode?)Git.ObjectId(worktree, p)))); // What the probe's registry entry watches beyond what ran: recorded with the ids it ran at, so a change stales it. - var watched = new JsonObject(l.Watched(a.Need("probe")).Select(p => KeyValuePair.Create(p, (JsonNode?)Git.ObjectId(worktree, p)))); + var watched = new JsonObject(watchedPaths.Select(p => KeyValuePair.Create(p, (JsonNode?)Git.ObjectId(worktree, p)))); Files.AppendLine(l.P("footprints.jsonl"), new JsonObject { ["schemaVersion"] = Files.SchemaVersion, ["probe"] = a.Need("probe"), ["commit"] = rev, ["footprint"] = footprint, diff --git a/tools/Prober/Ledger.cs b/tools/Prober/Ledger.cs index 70e3cff0..50673244 100644 --- a/tools/Prober/Ledger.cs +++ b/tools/Prober/Ledger.cs @@ -209,13 +209,13 @@ public Dictionary Footprints() => /// /// A probe's footprint is current when every path it ran, every compile-time path, every path its registry entry /// watches and the toolchain are unchanged at HEAD. A watched path the footprint did not record (one added to the - /// entry since) is not current. + /// entry since) is not current. A footprint that ran nothing under src/ is current only by watched paths it recorded. /// public bool FootprintCurrent(string probe, Dictionary footprints) { if (currentCache.TryGetValue(probe, out var cached)) return cached; var ok = false; - if (footprints.TryGetValue(probe, out var r) && r["footprint"] is JsonObject fp && fp.Count > 0) + if (footprints.TryGetValue(probe, out var r) && r["footprint"] is JsonObject fp && (fp.Count > 0 || r["watched"] is JsonObject { Count: > 0 })) { var watched = r["watched"] as JsonObject ?? []; ok = Watched(probe).All(watched.ContainsKey) diff --git a/tools/Prober/README.md b/tools/Prober/README.md index c957ffab..3abf10f2 100644 --- a/tools/Prober/README.md +++ b/tools/Prober/README.md @@ -57,7 +57,9 @@ footprint cannot see, since the footprint is what ran in the probe's own process over the analyzer tests' `TypeArgumentSites` and `TypeArgumentKinds`), a build input a child process reads is another (C18's consumer build compiles against the base package and evaluates `src/Directory.Build.*`). The replay records each with its object id in the footprint line, a change to one stales the footprint like a path -the probe ran, and the gate counts it as touching the probe's claim. +the probe ran, and the gate counts it as touching the probe's claim. A probe whose own process runs nothing under `src/` +(C22 builds its consumer in a child process) is recorded by what its entry watches alone; where nothing ran and nothing +is watched, `footprint` refuses to record an empty footprint, which would never go stale. The round lock, `round.lock` and its mutex, sits in the branch's directory (`branches//`), beside everything a round or a replay writes, so rounds and replays of two branches run at once and two of one branch diff --git a/tools/probe/corpus/registry.json b/tools/probe/corpus/registry.json index 808e4805..55240d81 100644 --- a/tools/probe/corpus/registry.json +++ b/tools/probe/corpus/registry.json @@ -755,6 +755,8 @@ "filter": "*C22GeneratorRefusalsProbe", "watched": [ "src/CodoMetis.TypeKit", + "src/CodoMetis.TypeKit.Analyzers", + "src/CodoMetis.TypeKit.Generators", "src/Directory.Build.props", "src/Directory.Build.targets" ], From 76b17d211df3207d29918628c5d5bd4157c4de09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Gro=C3=9F?= Date: Sun, 18 Oct 2026 02:44:55 +0200 Subject: [PATCH 02/15] test: the document obligations do not apply under Preserve, and rows for the rest of C12, C13, C16 and C21 Decision 108 stopped crediting checks that compared nothing but a document both hosts refuse, which left 821 pairs of C12, 48 of C13, 455 of C16 and 677 of C21 uncovered. Declarations (claims.json, `inapplicable`, cite record:0099): - json.ReferenceHandler=Preserve on every obligation of C12, C16 and C21, and on C13's two document obligations (doc-required-where-rejected, doc-optional-where-absent); absent-is-default reads the wire and stays wanted there. Measured at 938d8f8 from an empty state: every row of the four probes under Preserve had its document refused by ASP.NET alone too (C12 76, C13 71, C16 93, C21 63 rows), none written. - json.MaxDepth=3 together with source IDescribedJsonConverter or JsonSchemaDescriptions on C12's four obligations: the coord host's document is refused by ASP.NET alone in every such row (106 rows at 938d8f8, 166 after the new rows, none written), while under the decimal-converter source it is written in every row (29 and 55). No declaration under json.MaxDepth=3 alone: the documents of C12's decimal host, of C13 (47 rows), C16 (91) and C21 (59) are written and compared there, so it would not be true, and its pairs were covered already. Rows: `rows --probe` for C12, C13, C16 and C21 (C13's came out the same, since Preserve stays wanted by absent-is-default), then rows from `rows --claim` appended until the pairs converged: C12 302 -> 462 rows, C13 296 -> 321, C16 298, C21 295 -> 435. Under MaxDepth=3 without Preserve about two thirds of the documents are refused for ASP.NET alone too, decided by the depth of the row's shape rather than by an axis, so those pairs needed further rows rather than a declaration. Recovers C12 821 (647 by rows, 174 declared), C13 48, C16 455 (283 by rows, 172 declared), and 664 of C21's 698 (498 by rows, 166 declared). C21's regenerated rows fail in 8 rows and its appended rows in 2 more; their triage is in the next commits and in the pull request. Co-Authored-By: Claude Opus 5.5 --- tools/probe/corpus/claims.json | 220 +++++++++++++++++- .../rows/C12DescribedConverterProbe.json.gz | Bin 19433 -> 28571 bytes .../corpus/rows/C13PatchRequiredProbe.json.gz | Bin 19034 -> 20506 bytes .../rows/C16OptionsAgreementProbe.json.gz | Bin 19221 -> 19385 bytes .../rows/C21OpenapiSchemaParityProbe.json.gz | Bin 18369 -> 25822 bytes 5 files changed, 209 insertions(+), 11 deletions(-) diff --git a/tools/probe/corpus/claims.json b/tools/probe/corpus/claims.json index 05eb1ed8..1467910f 100644 --- a/tools/probe/corpus/claims.json +++ b/tools/probe/corpus/claims.json @@ -6392,7 +6392,29 @@ "IDescribedJsonConverter", "decimal-converter" ] - } + }, + "inapplicable": [ + { + "axes": { + "json.ReferenceHandler": [ + "Preserve" + ] + }, + "cite": "record:0099" + }, + { + "axes": { + "json.MaxDepth": [ + "3" + ], + "source": [ + "IDescribedJsonConverter", + "JsonSchemaDescriptions" + ] + }, + "cite": "record:0099" + } + ] }, { "id": "options-describe", @@ -6401,11 +6423,55 @@ "source": [ "JsonSchemaDescriptions" ] - } + }, + "inapplicable": [ + { + "axes": { + "json.ReferenceHandler": [ + "Preserve" + ] + }, + "cite": "record:0099" + }, + { + "axes": { + "json.MaxDepth": [ + "3" + ], + "source": [ + "IDescribedJsonConverter", + "JsonSchemaDescriptions" + ] + }, + "cite": "record:0099" + } + ] }, { "id": "every-position", - "sentence": "With CodoMetis.TypeKit.AspNetCore, `AddTypeKit()` writes the same descriptions into the OpenAPI document, in every position, a list's elements and a dictionary's values included." + "sentence": "With CodoMetis.TypeKit.AspNetCore, `AddTypeKit()` writes the same descriptions into the OpenAPI document, in every position, a list's elements and a dictionary's values included.", + "inapplicable": [ + { + "axes": { + "json.ReferenceHandler": [ + "Preserve" + ] + }, + "cite": "record:0099" + }, + { + "axes": { + "json.MaxDepth": [ + "3" + ], + "source": [ + "IDescribedJsonConverter", + "JsonSchemaDescriptions" + ] + }, + "cite": "record:0099" + } + ] }, { "id": "parameter-keeps-aspnet", @@ -6414,7 +6480,29 @@ "source": [ "decimal-converter" ] - } + }, + "inapplicable": [ + { + "axes": { + "json.ReferenceHandler": [ + "Preserve" + ] + }, + "cite": "record:0099" + }, + { + "axes": { + "json.MaxDepth": [ + "3" + ], + "source": [ + "IDescribedJsonConverter", + "JsonSchemaDescriptions" + ] + }, + "cite": "record:0099" + } + ] } ], "exclude": [ @@ -6463,11 +6551,31 @@ "json.RespectRequiredConstructorParameters": [ "true" ] - } + }, + "inapplicable": [ + { + "axes": { + "json.ReferenceHandler": [ + "Preserve" + ] + }, + "cite": "record:0099" + } + ] }, { "id": "doc-optional-where-absent", - "sentence": "`AddTypeKit()` leaves a patch out of `required` where the serializer lets it be absent, and keeps it there where the options reject a body without it." + "sentence": "`AddTypeKit()` leaves a patch out of `required` where the serializer lets it be absent, and keeps it there where the options reject a body without it.", + "inapplicable": [ + { + "axes": { + "json.ReferenceHandler": [ + "Preserve" + ] + }, + "cite": "record:0099" + } + ] }, { "id": "absent-is-default", @@ -6654,7 +6762,17 @@ "both", "controller-without-ApiController-visible" ] - } + }, + "inapplicable": [ + { + "axes": { + "json.ReferenceHandler": [ + "Preserve" + ] + }, + "cite": "record:0099" + } + ] }, { "id": "error-names-type-and-descriptions", @@ -6668,7 +6786,17 @@ "both", "controller-without-ApiController-visible" ] - } + }, + "inapplicable": [ + { + "axes": { + "json.ReferenceHandler": [ + "Preserve" + ] + }, + "cite": "record:0099" + } + ] }, { "id": "patch-held-refused", @@ -6682,7 +6810,17 @@ "both", "controller-without-ApiController-visible" ] - } + }, + "inapplicable": [ + { + "axes": { + "json.ReferenceHandler": [ + "Preserve" + ] + }, + "cite": "record:0099" + } + ] }, { "id": "same-converters-build", @@ -6692,7 +6830,17 @@ "naming-policy", "number-handling" ] - } + }, + "inapplicable": [ + { + "axes": { + "json.ReferenceHandler": [ + "Preserve" + ] + }, + "cite": "record:0099" + } + ] }, { "id": "minimal-host-not-compared", @@ -6705,7 +6853,17 @@ "minimal", "route-group" ] - } + }, + "inapplicable": [ + { + "axes": { + "json.ReferenceHandler": [ + "Preserve" + ] + }, + "cite": "record:0099" + } + ] } ], "not-promised": [ @@ -11478,6 +11636,14 @@ ] }, "cite": "not-promised:own-converter-for-the-wrapped-type" + }, + { + "axes": { + "json.ReferenceHandler": [ + "Preserve" + ] + }, + "cite": "record:0099" } ] }, @@ -11505,6 +11671,14 @@ ] }, "cite": "not-promised:own-converter-for-the-wrapped-type" + }, + { + "axes": { + "json.ReferenceHandler": [ + "Preserve" + ] + }, + "cite": "record:0099" } ] }, @@ -11536,6 +11710,14 @@ ] }, "cite": "not-promised:own-converter-for-the-wrapped-type" + }, + { + "axes": { + "json.ReferenceHandler": [ + "Preserve" + ] + }, + "cite": "record:0099" } ] }, @@ -11563,6 +11745,14 @@ ] }, "cite": "not-promised:own-converter-for-the-wrapped-type" + }, + { + "axes": { + "json.ReferenceHandler": [ + "Preserve" + ] + }, + "cite": "record:0099" } ] }, @@ -11591,6 +11781,14 @@ ] }, "cite": "not-promised:own-converter-for-the-wrapped-type" + }, + { + "axes": { + "json.ReferenceHandler": [ + "Preserve" + ] + }, + "cite": "record:0099" } ] } diff --git a/tools/probe/corpus/rows/C12DescribedConverterProbe.json.gz b/tools/probe/corpus/rows/C12DescribedConverterProbe.json.gz index 608850e94dbac93843bfdee17cbf6c52d90beffb..694df3024977c82bf72359c3ec5e2207e103c4c0 100644 GIT binary patch literal 28571 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 Av;Y7A diff --git a/tools/probe/corpus/rows/C13PatchRequiredProbe.json.gz b/tools/probe/corpus/rows/C13PatchRequiredProbe.json.gz index 881ba330d552f81da293a5aaa8f2bade694bba92..28c4797f647b6b789cc397feb0a7e2018cfc2222 100644 GIT binary patch delta 19795 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 delta 18226 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 diff --git a/tools/probe/corpus/rows/C16OptionsAgreementProbe.json.gz b/tools/probe/corpus/rows/C16OptionsAgreementProbe.json.gz index 3c1e958f4f90688dcb4414642e5ba0a20c6cb501..762426f8f9266ee28b5ac3fa93370a583b4c8a80 100644 GIT binary patch literal 19385 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 E0Jp<$#{d8T literal 19221 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 literal 18369 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 cAra-@{l9pF From 9b6f58ed7430436c3d001b57082ca56cc80e1685 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Gro=C3=9F?= Date: Sun, 18 Oct 2026 02:45:14 +0200 Subject: [PATCH 03/15] docs: C21 does not promise the twin's schema where a nullable value object admits null and ASP.NET drops it Decision 36: "A nullable value object admits null in the OpenAPI document wherever it appears". C21 quoted it as `a-class-value-object-admits-null` for the class kinds only; a nullable struct value object admits null the same way, so the entry `a-nullable-value-object-admits-null` quotes the same sentence for http.nullability=nullable. Triage step 3 of row 216 of C21OpenapiSchemaParityProbe (a validated struct over double, nullable, in a read-only list, under AllowNamedFloatingPointLiterals): ASP.NET writes the items of the twin's IReadOnlyList without null, on the host without TypeKit as well, and the value object's items are its component or null, as decision 36 says; the schemas are otherwise the same. No finding. Co-Authored-By: Claude Opus 5.5 --- tools/probe/corpus/claims.json | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tools/probe/corpus/claims.json b/tools/probe/corpus/claims.json index 1467910f..b258b506 100644 --- a/tools/probe/corpus/claims.json +++ b/tools/probe/corpus/claims.json @@ -11835,6 +11835,16 @@ ] } }, + { + "id": "a-nullable-value-object-admits-null", + "source": "design/adr/0036-nullable-value-object-admits-null-openapi.md#0036-a-nullable-value-object-admits-null-in-the-openapi-document-wherever-it-appears", + "sentence": "A nullable value object admits null in the OpenAPI document wherever it appears", + "axes": { + "http.nullability": [ + "nullable" + ] + } + }, { "id": "openapi-2-nullable-component-loses-its-type", "source": "src/CodoMetis.TypeKit.AspNetCore/README.md#what-the-document-says", From 7b0edf0e78accf4f507f1da7bb8ff5882d8dfeb3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Gro=C3=9F?= Date: Sun, 18 Oct 2026 02:45:14 +0200 Subject: [PATCH 04/15] test: C21's schema comparison cites KB-001 for a nullable body's format, decision 36 for an added null, and cannot tell a form-bound record class Triage of the rows C21OpenapiSchemaParityProbe failed after its rows were written again; each failed in three runs at 938d8f8 (two replays and a try). - Rows 113 and 282 (triage 2, KB-001): a class value object over TimeOnly and over char at the root, nullable, under OpenAPI 2.0. The minimal schema endpoint's twin body is TimeOnly? / char?, which ASP.NET writes as its format and allOf [{x-nullable: true}] alone, on the host without TypeKit as well; the class value object's body is not nullable in a minimal API and keeps its schema. KB-001 (executable, KB001.cs) says a nullable body is written as "its format and allOf: [{"x-nullable": true}]"; the harness cited not-promised openapi-2-nullable-body-keeps-only-its-null only where the body kept nothing but its null (an enum), and now cites it where it keeps its format too. - Row 216 (triage 3, decision 36): the value object admits null where ASP.NET writes the twin's nullable type without it, the schemas otherwise the same: cites a-nullable-value-object-admits-null (previous commit). - Row 62 (triage 1): a validated class over a record class, bound from an MVC form. ASP.NET binds the wrapped record class by its properties (A, B) and the value object otherwise (Value.A, Value.B); the harness already ended parameters that differ this way inconclusive, and now does the same for a form body. Rows 38, 170, 184, 196, 330, 358, 386, 408, 415 and 422 still fail; the pull request carries their triage (code-analyst hand-offs and the harness gaps left). Co-Authored-By: Claude Opus 5.5 --- tools/probe/corpus/harness/HttpBaseline.cs | 25 +++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/tools/probe/corpus/harness/HttpBaseline.cs b/tools/probe/corpus/harness/HttpBaseline.cs index 2fe5adae..e394f233 100644 --- a/tools/probe/corpus/harness/HttpBaseline.cs +++ b/tools/probe/corpus/harness/HttpBaseline.cs @@ -500,14 +500,18 @@ static bool NullOrReference(JsonNode? n) => return References(valueObject).FirstOrDefault(x => twins.TryGetValue(x.Item1, out var t) && t == x.Item2).Item2; } - /// A body whose schema is its null alone, {"schema": {"allOf": [{"x-nullable": true}]}}, anywhere in an operation: told by its structure. /// A schema that is the OpenAPI 2.0 null flag and nothing else: {"allOf":[{"x-nullable":true}]}. static bool OnlyTheNullFlag(JsonObject o) => o.Count == 1 && o["allOf"] is JsonArray { Count: 1 } all && all[0] is JsonObject { Count: 1 } flag && flag["x-nullable"]?.GetValueKind() == JsonValueKind.True; + /// + /// A body whose schema is its format and its null alone, {"schema": {"format": "int32", "allOf": [{"x-nullable": true}]}}, or its null + /// alone where the type has no format, anywhere in an operation: told by its structure (KB-001). + /// static bool OnlyItsNull(JsonNode? n) => n switch { - JsonObject o => o["schema"] is JsonObject { Count: 1 } schema && schema["allOf"] is JsonArray { Count: 1 } all && all[0] is JsonObject { Count: 1 } flag + JsonObject o => o["schema"] is JsonObject schema && schema.All(kv => kv.Key is "allOf" or "format") + && schema["allOf"] is JsonArray { Count: 1 } all && all[0] is JsonObject { Count: 1 } flag && flag["x-nullable"]?.GetValueKind() == JsonValueKind.True || o.Any(kv => OnlyItsNull(kv.Value)), JsonArray a => a.Any(OnlyItsNull), @@ -652,7 +656,17 @@ string Inputs(JsonNode op) if (sp != sv) { if (e.Kind == "closed-set") { c.Inapplicable(Cite.NotPromised("a-closed-set-is-a-string-enum"), "schema"); continue; } + // A form binds the wrapped record class by its properties and the value object otherwise, as the parameters above: the two + // sides' fields are not alike, and no sentence cites it, so the check cannot tell (row 62 of C21). + if (e.Wrapped == "own-record-class" && pp.Contains("/form/") && method == "post") + { c.Inconclusive($"{pp} vs {vp}: the wrapped record class is bound from a form by its properties, the value object otherwise: the fields differ"); continue; } var d = Difference(JsonNode.Parse(sp), JsonNode.Parse(sv), "$"); + // Decision 36: a nullable value object admits null wherever it appears, where ASP.NET may write the twin's nullable type without + // it (the items of a list of double? under AllowNamedFloatingPointLiterals, row 216 of C21; the twin is held to side (1) above). + // Only that null differs: the value object admits it where the twin does not, and the schemas are otherwise the same. + if (Make.AdmitsNull(e.Vo) && d.Keys is [.., "x-null"] && d.P is null && d.V?.GetValueKind() == JsonValueKind.True + && JsonNode.DeepEquals(Hx.NoNull(JsonNode.Parse(sp)), Hx.NoNull(JsonNode.Parse(sv)))) + { c.Inapplicable(Cite.NotPromised("a-nullable-value-object-admits-null"), d.Path); continue; } var openApi2 = r.Is("openapi.OpenApiVersion", "OpenApi2_0"); // Side (1) at the same path: the twin's and the value object's operations in the document ASP.NET writes without TypeKit. var twin1 = po1 is null ? null : JsonNode.Parse(Sig(doc1!, po1)); @@ -664,9 +678,10 @@ string Inputs(JsonNode op) // shows it: without TypeKit, ASP.NET writes the value object's position at the same path the same, where the twin has nothing. if (openApi2 && d.P is null && d.V is not null && At(vo1, d.Keys) is { } same1 && JsonNode.DeepEquals(same1, At(vo3, d.Keys))) { c.Inapplicable(Cite.NotPromised("openapi-2-nullable-component-loses-its-type"), d.Path); continue; } - // KB-001: OpenAPI 2.0 writes a nullable body of the wrapped value type as allOf [{x-nullable: true}] alone, where a class value - // object's body in a minimal API is not nullable and keeps its schema (not-promised openapi-2-nullable-body-keeps-only-its-null; - // row 257). Side (1) shows it: without TypeKit, the twin's schema there is that null alone. + // KB-001: OpenAPI 2.0 writes a nullable body of the wrapped value type as its format and allOf [{x-nullable: true}] alone (the + // null alone where it has no format, an enum), where a class value object's body in a minimal API is not nullable and keeps its + // schema (not-promised openapi-2-nullable-body-keeps-only-its-null; row 257, and rows 113 and 282 over TimeOnly and char). Side (1) + // shows it: without TypeKit, the twin's schema there is that format and that null alone. // AspNetCore README "What the document says" (KB-026), seen from the twin: OpenAPI 2.0 writes a nullable property of any component, // the twin's nullable enum among them, as allOf [{x-nullable: true}] without the reference, where the value object keeps its type. // Side (1) shows it: without TypeKit, the twin's property there is that null alone. From ed1069b0425d5d8a56741ee5366648191d1148c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Gro=C3=9F?= Date: Sun, 18 Oct 2026 02:45:25 +0200 Subject: [PATCH 05/15] test: C17's and C19's rows written again, without the refused kinds they substituted The stored rows of C17Cmtk0014Probe and C19Cmtk0010KindsProbe put shape.refused-kind values in rows whose other settings exclude them; the probes substituted another kind there and credited values the row did not run. `rows --probe` now leaves such an axis out of the row (decision 108), so both files are written again whole: C17 283 -> 295 rows (14 leave an axis out), C19 282 -> 297 (14 leave an axis out). Both replay with every row passing. Recovers C17-cmtk0014's 41 pairs and C19-cmtk0010-kinds' 50. Co-Authored-By: Claude Opus 5.5 --- .../corpus/rows/C17Cmtk0014Probe.json.gz | Bin 3831 -> 3915 bytes .../corpus/rows/C19Cmtk0010KindsProbe.json.gz | Bin 4245 -> 4370 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/tools/probe/corpus/rows/C17Cmtk0014Probe.json.gz b/tools/probe/corpus/rows/C17Cmtk0014Probe.json.gz index d72d0fe63cddc2d114b89850f2f9fe8a7479ec00..c373c112649c3ee0e587a7d69c75572de536bae8 100644 GIT binary patch literal 3915 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 From dfc841ab2d81dba00833f2bd218dac04ed478375 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Gro=C3=9F?= Date: Sun, 18 Oct 2026 02:45:45 +0200 Subject: [PATCH 06/15] test: L02's parsing obligations do not apply to TryFrom or formatting, and its JSON check reads a value of another kind L02 (README "Rejections never repeat the input") left 74 pairs uncovered, 6 of them json.Converters=own-for-wrapped|own-for-value-object against text.entry=TryFrom|ToString-format|TryFormat-short-span: in such a row the JSON check is declared inapplicable (not-promised the-applications-own-converter) and nothing else ran. What is true there, and so what this commit says: TryFrom, ToString-format and TryFormat-short-span reject no text. TryFrom answers None, and formatting reads no input; the Generators README's "When text is rejected" names the rejections, a FormatException from Parse and false from TryParse. The probe already runs its parsing checks only for Parse, TryParse, IParsable, ISpanParsable and the type converter (TextRow.Reads), which are the `axes` both obligations list. So parsing-never-repeats and no-inner-that-quotes declare themselves inapplicable at those three entries (cite docs:src/CodoMetis.TypeKit.Generators/README.md#when-text-is-rejected). The 6 pairs are then wanted by no obligation; every other pair of those entries stays wanted by json-never-repeats. Rows could not reach them: no check of the claim applies there. json-never-repeats placed the secret only where the wrapped value stands, as a string, and an unvalidated value object over string or Uri reads every string, so such rows ended "every JSON input read, none refused". Where every variant was read, the check now also sends an array holding the secret in that place, which such a value object refuses, and requires the refusal not to quote it (not at a dictionary key, which is a property name). 22 of the 26 rows inconclusive that way now pass, none fails. Exclusions: json.PreferredObjectCreationHandling=Populate against a reference handler, which System.Text.Json refuses (JsonRow substitutes the default), as twelve other claims exclude it; and a record class as a dictionary key, which System.Text.Json writes only through a converter of the application's (NotSupportedException for the wrapped type alike), where the JSON half is not promised, and which has no parsing. Rows: `rows --probe` (289 rows), then rows from `rows --claim` appended, and 8 rows set by hand from a passing row's settings for pairs the covering array kept placing in rows that read nothing: own-for-value-object with Parse, a record class with a wrong token and as a nullable property, Uri and TryFrom as a field (with IncludeFields), and an enum with ISpanParsable; 366 rows. Recovers all 74: 6 declared, 3 excluded, 65 by rows. Co-Authored-By: Claude Opus 5.5 --- tools/probe/corpus/claims.json | 44 ++++++++++++++++++ tools/probe/corpus/harness/TextRow.cs | 9 +++- .../probe/corpus/rows/L02NoQuoteProbe.json.gz | Bin 21902 -> 14093 bytes 3 files changed, 52 insertions(+), 1 deletion(-) diff --git a/tools/probe/corpus/claims.json b/tools/probe/corpus/claims.json index b258b506..e01363da 100644 --- a/tools/probe/corpus/claims.json +++ b/tools/probe/corpus/claims.json @@ -14157,6 +14157,16 @@ ] }, "cite": "docs:src/CodoMetis.TypeKit.Generators/README.md#what-is-generated" + }, + { + "axes": { + "text.entry": [ + "TryFrom", + "ToString-format", + "TryFormat-short-span" + ] + }, + "cite": "docs:src/CodoMetis.TypeKit.Generators/README.md#when-text-is-rejected" } ] }, @@ -14239,6 +14249,16 @@ ] }, "cite": "docs:src/CodoMetis.TypeKit.Generators/README.md#what-is-generated" + }, + { + "axes": { + "text.entry": [ + "TryFrom", + "ToString-format", + "TryFormat-short-span" + ] + }, + "cite": "docs:src/CodoMetis.TypeKit.Generators/README.md#when-text-is-rejected" } ] } @@ -14265,6 +14285,30 @@ ] } } + ], + "exclude": [ + { + "reason": "System.Text.Json refuses PreferredObjectCreationHandling.Populate together with a ReferenceHandler on the options object; JsonRow substitutes the default, so the pair never applies.", + "pairs": [ + [ + "json.PreferredObjectCreationHandling=Populate", + "json.ReferenceHandler=Preserve" + ], + [ + "json.PreferredObjectCreationHandling=Populate", + "json.ReferenceHandler=IgnoreCycles" + ] + ] + }, + { + "reason": "System.Text.Json writes no dictionary key of a record class but through a converter of the application's (NotSupportedException for the wrapped type alike, L01's rows), where the JSON half is not promised (not-promised the-applications-own-converter), and a value object over a record class has no parsing (Generators README#what-is-generated), so no check of the claim can read the pair.", + "pairs": [ + [ + "shape.position=dictionary-key", + "shape.wrapped=own-record-class" + ] + ] + } ] }, { diff --git a/tools/probe/corpus/harness/TextRow.cs b/tools/probe/corpus/harness/TextRow.cs index a3da0fb6..a2df1d53 100644 --- a/tools/probe/corpus/harness/TextRow.cs +++ b/tools/probe/corpus/harness/TextRow.cs @@ -454,7 +454,7 @@ static int Occurrences(string text, string needle) } if (variants.Count == 0) return c.Inconclusive($"the wrapped value has no place in {Cut(doc)}: the options leave it out"); var rejected = 0; var inPaths = new List(); - foreach (var (text, needle) in variants) + string? Read(string text, string needle) { try { JsonSerializer.Deserialize(text, hv.Declared, opts); } catch (Exception ex) @@ -470,7 +470,14 @@ static int Occurrences(string text, string needle) if (ex.InnerException is not null && ex is JsonException && !(ex.InnerException is JsonException) && twin?.InnerException is null) return $"JSON read: refusal carries inner {ex.InnerException.GetType().Name}: {Cut(ex.InnerException.Message)}"; if (inPath > 0) inPaths.Add(twin is JsonException { Path: { } tp } && Occurrences(tp, needle) > 0 ? "the key in the Path, the wrapped type's alike" : "the key in the Path, as not-promised a-rejected-dictionary-key-in-the-path says"); } + return null; } + foreach (var (text, needle) in variants) + if (Read(text, needle) is { } quoted) return quoted; + // A wrapped type that reads every string (a string, a Uri) refuses none of these: what a client sends that it cannot read is a value + // of another kind, and an array holding the secret where the wrapped value stands is one (a key is a property name, never an array). + if (rejected == 0 && at >= 0 && pos != "dictionary-key" + && Read(doc[..at] + "[\"" + TextOps.Secret + "\"]" + doc[(at + sample.Length)..], TextOps.Secret) is { } quotedInArray) return quotedInArray; if (rejected == 0) return c.Inconclusive("every JSON input read, none refused: nothing to quote"); c.Note(NoteKeys.Compared, $"JSON read: {rejected} refused without the input" + (inPaths.Count > 0 ? ", " + string.Join(", ", inPaths.Distinct()) : "")); return null; diff --git a/tools/probe/corpus/rows/L02NoQuoteProbe.json.gz b/tools/probe/corpus/rows/L02NoQuoteProbe.json.gz index d788d8a0f418b397427c9a6881aad195380016a5..8c537a2448320a5b63606515f6498a68fafc7e68 100644 GIT binary patch literal 14093 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କ@tG-B6Y$#U2kW)~peL3<| z3pYJ>yN7+(AMdy8q15)nZ+^p*b80M_OT@NbFqcd1kfvA{Rm`GpCDat1Nu282%t(On zE8-N?o)x2}-1&@Q-isYD0;y@5HSVQw2t*bcG_rw`Gb@18^u$G~qJ31FEOld&n4nt%*vG3()o>V7-sGtQL*N-2on08f&{!_Z0kV!k zInWWUodCqU`j&us1}TP_Fd3l$VC&?BwcM6tCWzV-ZmL0_*J6yamf4;{ZwZj_GRhGB zoEXN4u#}~xEG=aTp)BzXY{et6D#dkT(+;9%JRC7yD`>$a15ekQKorZPyi#tQIXwra zZje+=BgF$0*4EC2y$Ho~jS=kUHqZw-{neB`VYl^kYK2)*nn;sd!EyRrQQBzqt797M=^=SrlFqj0T21MQ3!rIDoH`S)=h2_ zDM=4qch0)b2`vnzLLHWhwp6sGqAe9Ix`SIv+fv$=(zcYgdYU!&OgdT8{_wy5{=@$R LU+CoIjJ5^<_$71t literal 21902 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 ZHM$gDM$d2l@4tWZ{{g-qfSZ-O3IL63`1=3= From 689fed914d4928c508ee3e63b22f0478b65349af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Gro=C3=9F?= Date: Sun, 18 Oct 2026 02:46:09 +0200 Subject: [PATCH 07/15] test: E02 compares an enum with >= as C# does, excludes >= over string, bool and Uri, and holds group-by at two levels over DateTimeOffset E02ValueTranslatesProbe built where-value-compare with Expression.GreaterThanOrEqual and, where that throws, substituted where-equals ("the wrapped type has no >= operator"), so 5 pairs of ef.query=where-value-compare never ran: string, bool, Uri, enum and flags enum. The reason is true of the first three, which have no >= in C#, and not of an enum, which C# compares with >= over its underlying type: an expression tree the compiler writes for `o.Status.Value >= Status.B` converts both sides to it. - The probe now compares an enum (or a nullable enum) as C# does, through the underlying type on both sides; rows 216 and 217 (an enum and a flags enum) run where-value-compare and pass, the rows and the SQL the twin's. - claims.json excludes where-value-compare over string, bool and Uri with that reason. - One group-by row for shape.site=nested-two-levels x shape.wrapped=DateTimeOffset (row 215), and the two rows above, appended from `rows --claim`. Recovers all 6 of E02's pairs: 3 excluded, 3 by rows. Co-Authored-By: Claude Opus 5.5 --- tools/probe/corpus/claims.json | 19 ++++++++++++++++++ .../corpus/probes/E02ValueTranslatesProbe.cs | 11 +++++++++- .../rows/E02ValueTranslatesProbe.json.gz | Bin 1660 -> 1675 bytes 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/tools/probe/corpus/claims.json b/tools/probe/corpus/claims.json index e01363da..a31aad56 100644 --- a/tools/probe/corpus/claims.json +++ b/tools/probe/corpus/claims.json @@ -12868,6 +12868,25 @@ ] } } + ], + "exclude": [ + { + "reason": "C# defines no `>=` for a `string`, a `bool` or a `Uri`, so no query compares their `.Value` with it; E02ValueTranslatesProbe writes where-equals in its place there, so no row holds the pair.", + "pairs": [ + [ + "ef.query=where-value-compare", + "shape.wrapped=string" + ], + [ + "ef.query=where-value-compare", + "shape.wrapped=bool" + ], + [ + "ef.query=where-value-compare", + "shape.wrapped=Uri" + ] + ] + } ] }, { diff --git a/tools/probe/corpus/probes/E02ValueTranslatesProbe.cs b/tools/probe/corpus/probes/E02ValueTranslatesProbe.cs index 9287e380..372ea708 100644 --- a/tools/probe/corpus/probes/E02ValueTranslatesProbe.cs +++ b/tools/probe/corpus/probes/E02ValueTranslatesProbe.cs @@ -4,7 +4,8 @@ // value, get-value, value-or-null (by ef.accessor): "`.Value`, `GetValue()` and `ValueOrNull()` translate to the column itself.": the rows the query answers // column-not-cast (every row): "A table's column is re-typed, not cast, so an index on it still serves the query.": the SQL // Expected: no failure for any row; where a side refuses the query, EfSides says how the check ends. Where SQLite cannot compare or -// order the wrapped type, every obligation declares itself inapplicable (claims.json, fact KB-039). +// order the wrapped type, every obligation declares itself inapplicable (claims.json, fact KB-039). where-value-compare is >= as C# writes +// it, over the underlying type for an enum; a string, a bool and a Uri have none, and claims.json excludes the pair. using System.Linq.Expressions; using System.Reflection; using Microsoft.EntityFrameworkCore; @@ -20,6 +21,10 @@ public sealed class E02ValueTranslatesProbe static MethodInfo? Unwrap(Type vo, string name) => vo.GetMethods(BindingFlags.Public | BindingFlags.Static).FirstOrDefault(m => m.Name == name && m.GetParameters().Length == 1); + /// The type C# compares an enum (or a nullable enum) over: its underlying type, nullable where it is; null for any other type. + static Type? Underlying(Type t) => Nullable.GetUnderlyingType(t) is { IsEnum: true } e ? typeof(Nullable<>).MakeGenericType(Enum.GetUnderlyingType(e)) + : t.IsEnum ? Enum.GetUnderlyingType(t) : null; + static async Task Check(Probes.Shapes.Row r) { var e = Probes.Ef3.E4.At(r, r["shape.kind"], r["shape.wrapped"], r["shape.site"]); @@ -53,6 +58,10 @@ IQueryable Build(DbContext db, Type entity, bool vo) case "where-value-compare": BinaryExpression cmp; try { cmp = Expression.GreaterThanOrEqual(access, param); } + // C# compares two values of an enum with >= over its underlying type, and an expression tree it compiles says so + // with a conversion on each side; Expression.GreaterThanOrEqual defines no >= for the enum itself. + catch (InvalidOperationException) when (Underlying(at) is { } u) { cmp = Expression.GreaterThanOrEqual(Expression.Convert(access, u), Expression.Convert(param, u)); } + // string, bool and Uri have no >= in C# (excluded in claims.json): no row asks for one catch (InvalidOperationException) { r.Substituted("ef.query", "where-equals", "the wrapped type has no >= operator"); cmp = Expression.Equal(access, param); } return Q.Call("Where", [entity], src, Lam(cmp)); case "order-by": return Q.Call("OrderBy", [entity, at], src, Lam(access)); diff --git a/tools/probe/corpus/rows/E02ValueTranslatesProbe.json.gz b/tools/probe/corpus/rows/E02ValueTranslatesProbe.json.gz index f262adfe1c70b2dfc95096684cc5f0b8bb65c787..b420251cd0eb7b107c6e436379db0fea517fe74b 100644 GIT binary patch delta 1610 zcmV-Q2DSP842unrEF1`e{yp5pvEzW8M|IV3eG_)I+SW`@Pjz*5^QDnUEPpxwSlql6 z?*466*KQp9p|~mjIDfjhKEL{LcEj`X(!C5|LGr8sc&W-0co332!8^xuL1c>3{j;R!sY8`SfkqKKso3+qT=`m$_||EgW3k4_oF<{i$r- zC)chRcGvf9(5P?CsrzoKnr=+8A-qKOV>P7j-tvuZSn;OORqe80pKbcqW1=0Z?YoD> z#fjLfB-8%4nqO`EeP|L*+ghrx-tDtxdg}jiqP2zktvR}1PgQ4dZ-4i3uG%rtwzz|L zwl3YXM%TLktbCk7zN2W-V+zIZ!u1^wq>EU!7aj~z*b0#b8X)-``3SN z@9#%9L5sCzTznkxu9)d+3CD!cWxTm^ch8f9f@dfaq+fCeS2xG1Rb9T(Ubc15+_%-k zScc$Bbc~7#3m$8h&wn)$_ukrKZ3U_bR}V$b(DmX2ck3P%xlEf5J_GPzeZwM_Cw$Yr zo0|jiyiovDR18RQBzr&ymT4zNbuQex`~GZjL|19I@8mW z@QDXj=`fm(*F_#5`7D2SD^f99%KEFn%vWMTpVH(g-d zHAn!ERq1dDrK3?}C``hUgIy{zIAyFvqcnz$W3}*_x&kn)xd0$uynFy63oQvuB>KdT zpf!Q_XU5RoLP@T+Ytc~ZU_E(Tc)+BV0Ykc11BO=VD1YLs%}v8nVhE&!13|jnN>mGv zOv}kBQ+R<47cMUi_MN!Ptgk>>iz+Z(R+t2<Nr`z8VG#mMOhVUCAJmdu7Gi=ZmLq8zc-3!C1K&;rWjqF#Y~c>&X1o~; zVwPk;PE+(s4vk73ubyBsHuPrIH&TgaJG6_3 zItPVsm5@G@_Jq$3(p7_I*^opEj?S#uL3V8_#Y;1TC|_ctI1bw^?RqeEu!?$(`6@I) z8I0U;EbpApEjrt?cb+wRB=?CE$iJOB*dxqV`Vwmwl=o zw|^0f-h~abN;2Ppr{-j6Ym#+^G2D9}(XgaP^!w^J+^aK1S#Q#)bj3{#vQe9?p?lfm zLWpn@a$uH$3GCK6)&MD@Ng^?L#%Vjs!MA1$n@9SG)j+h=+5TJ9%QrT5%xt9F1O zL*8NsFolW{rJDRHk8+mStnwXcugGGHor)*AN3K$pyzM~Sf9-0Rtk)VFT<0?86xPb53g5$0h(VP I&cA&C0N=M3a{vGU delta 1595 zcmV-B2E_S`4g3s{EF3HZ{d>5HW5)qGkLs$Sd=qxH+SW`@Pjz*5^SO~oEPuZISlm1p z?*466*KQp9p|~mjxO}>}zP$QzcEfpj>0#*SQ+an@UL7B+lY9GT(;b%AmoI7#%Qqa# zaT?}&`tttROm2CingG)7SvFX8eZfNRqI)9(sifKPBpT6zdv(LQ0ZMz+QncFtm!ok)3uw~xVpUT#K za_x#?cYWUmjr!J{y6>i{>Bb}*!b?;?Rzv#kE#K&d6>l0{)h_$>*`{wjCfcFezI#Yq zoQS`PH`HhbGaqt)=?v-9B5Ur~V%&T3e{!nxp&mRCNaTc7Gq|svQ$;i#vE1 z>(V`Ibglc(%EuYxJ8Bm*LNQ?7l&z5IJ#jJn7UM)~TNYXy+#)OrY=xva*Y+K=fBon7 z{(f{5v{+ll#m52fikYsKa7+kY#+xg5cb*&+JVTKn{gOMlx;a*@>hg{DvaNgOzO5d{ zG6Y|uV^mC7@L02au78QR_tq9`D^NwadMI*+t`{G;Tlc8QW!iM`8Gr}t8y2xV;hXN= z+#HDKjRK&eVnB)`*#kPTOj|(`2HnviJN1@BkNlyZ?^*#yg3ngdO*|A}j6QMEnVz16 zPdt#jS>vG>i6mTO=9?C`G7-@cka&0}V^RYlzVt+fz(LFrEq`N7NX;u@V`z82A(4y& z9^et9L?$d)Ld249p)fNn*|zUai^xJWAl4fW0XzhQ*l@TZq}#NF&AV(UVzP3%F}4Aj zx19$F?I_pnEo?wIzqQx{IzGmGDbw4qhx3a&ezy+5-TX^r^4DL9CShGgrl832{Oq6B7uy=>p@f zK>~oRN{2%z9gP}8VG@oU>{5}zDPtuXr7>h2tA*Fp6@X#Q1px8l&e@~117Z$7}C8OFtkcX5r1E8ZW@*nLm(v_2-4+NqFQ)l zT24-x!V6@$aCvF4@5H^%`U;e_r~=dL3X@=!9L+7mE{-GxHqoUoJj&G0gjyy>ih*n8 ziheMbk(3)HYAaPqcbaZkX@Tf@zTs7%9ofZj>9%fyBaWuI!t zZGXg~cVWY6{l5AQ_v%bh)|)gcU2#)`Y}6)e=w9}? z5F(s}9GGQb0=spNH9(4Jl1L1maoUb@@U0m|a4S=0a|i=4jK~SxYVCG@Y_>v{6a~<{2&@(1`^_UXwq0M z;}3b{c$aQ$slF!~EW!$|L<(mo@hyeGU(Z0%<^377&@!nnJlrD31^Fs<2iz{VEPun- z6%wtiaM`Hsfg2>0qEP~sDNB#xsDObh0*9Z0=7CR{4g_<%?Xx_2E%y_u(tGZ;RXaeC zA#bq*m_o&fQceDpM>$JuR{4&!S7fopPQ?@5BUhbv5 From 53050b7a96e814625b84d5e80b224a7ebb0bf39c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Gro=C3=9F?= Date: Sun, 18 Oct 2026 02:46:24 +0200 Subject: [PATCH 08/15] test: rows and exclusions for the scattered pairs of C02, C03, C05, L01, L03, L04, L06 and C22 Exclusions, each with its reason: - json.PreferredObjectCreationHandling=Populate against json.ReferenceHandler=Preserve|IgnoreCycles for C03, C05, L01, L03 and L04, the reason twelve other claims already give: System.Text.Json refuses Populate with a reference handler, and JsonRow substitutes the default. Recovers C03's 2, C05's 2, L04's 2, and 2 each of L01 and L03. - C02: AsText and AsOptionalText in globalization-invariant mode, not promised (as-text-refused-in-globalization-invariant-mode): AsText() throws PlatformNotSupportedException there (docs/text.md, "Globalization- invariant mode") and AsOptionalText() calls it; the probe checks that refusal without credit and runs the row on the identifier counterpart. 2 pairs. Rows, appended from `rows --claim` and replayed: - C02: 4 rows in globalization-invariant mode (the other 5 of its 7 pairs). - L01: 3 rows (read-only-list-element x flags enum, wrong-token x enum, and a record class as a dictionary key, row 582, which ends framework-refuses), and row 584, set by hand from row 582: a record class as a dictionary key under json.Converters=own-for-wrapped, the only converter under which System.Text.Json writes a record class as a key (row 582 and every earlier row with the pair end framework-refuses, NotSupportedException for the twin alike). Recovers L01's other 3. - L03: 2 rows (polymorphic-derived-property x a record class, TimeOnly x ToString-format, a record class x Parse). Recovers L03's other 3. - L06: 1 row, field x string under IncludeFields; ProbeContext gains its carrier (Shapes.g.cs, written again by shapes.cs from L06's rows, as the generators' README says). Recovers L06's 1. - C22: 9 rows for the 14 pairs no row held once its footprint was current (shape.inheritance, shape.kind and shape.site against DateTime, DateTimeOffset, DateOnly, Uri, long and char). Co-Authored-By: Claude Opus 5.5 --- tools/probe/corpus/claims.json | 90 ++++++++++++++++++ tools/probe/corpus/harness/Shapes.g.cs | 1 + .../corpus/rows/C02OptionalTextProbe.json.gz | Bin 511 -> 532 bytes .../rows/C22GeneratorRefusalsProbe.json.gz | Bin 1516 -> 1563 bytes .../corpus/rows/L01JsonBytesProbe.json.gz | Bin 18520 -> 18612 bytes .../probe/corpus/rows/L03OneRuleProbe.json.gz | Bin 21902 -> 21960 bytes .../corpus/rows/L06OffTheWireProbe.json.gz | Bin 12218 -> 12248 bytes 7 files changed, 91 insertions(+) diff --git a/tools/probe/corpus/claims.json b/tools/probe/corpus/claims.json index a31aad56..6d611b9f 100644 --- a/tools/probe/corpus/claims.json +++ b/tools/probe/corpus/claims.json @@ -582,6 +582,21 @@ ] } } + ], + "exclude": [ + { + "reason": "Not promised (as-text-refused-in-globalization-invariant-mode): `AsText()` throws `PlatformNotSupportedException` in globalization-invariant mode (docs/text.md#globalization-invariant-mode), and `AsOptionalText()`, which calls it, throws with it, so C02OptionalTextProbe checks that refusal without credit and runs the row on the identifier counterpart; no row holds the pair.", + "pairs": [ + [ + "entry=AsText", + "text.culture=globalization-invariant" + ], + [ + "entry=AsOptionalText", + "text.culture=globalization-invariant" + ] + ] + } ] }, { @@ -629,6 +644,21 @@ "id": "unmapped-set-stops-start", "sentence": "The host doesn't start while either set is unmapped." } + ], + "exclude": [ + { + "reason": "System.Text.Json refuses PreferredObjectCreationHandling.Populate together with a ReferenceHandler on the options object; JsonRow substitutes the default, so the pair never applies.", + "pairs": [ + [ + "json.PreferredObjectCreationHandling=Populate", + "json.ReferenceHandler=Preserve" + ], + [ + "json.PreferredObjectCreationHandling=Populate", + "json.ReferenceHandler=IgnoreCycles" + ] + ] + } ] }, { @@ -799,6 +829,21 @@ ] } } + ], + "exclude": [ + { + "reason": "System.Text.Json refuses PreferredObjectCreationHandling.Populate together with a ReferenceHandler on the options object; JsonRow substitutes the default, so the pair never applies.", + "pairs": [ + [ + "json.PreferredObjectCreationHandling=Populate", + "json.ReferenceHandler=Preserve" + ], + [ + "json.PreferredObjectCreationHandling=Populate", + "json.ReferenceHandler=IgnoreCycles" + ] + ] + } ] }, { @@ -14101,6 +14146,21 @@ ] } } + ], + "exclude": [ + { + "reason": "System.Text.Json refuses PreferredObjectCreationHandling.Populate together with a ReferenceHandler on the options object; JsonRow substitutes the default, so the pair never applies.", + "pairs": [ + [ + "json.PreferredObjectCreationHandling=Populate", + "json.ReferenceHandler=Preserve" + ], + [ + "json.PreferredObjectCreationHandling=Populate", + "json.ReferenceHandler=IgnoreCycles" + ] + ] + } ] }, { @@ -14450,6 +14510,21 @@ ] } } + ], + "exclude": [ + { + "reason": "System.Text.Json refuses PreferredObjectCreationHandling.Populate together with a ReferenceHandler on the options object; JsonRow substitutes the default, so the pair never applies.", + "pairs": [ + [ + "json.PreferredObjectCreationHandling=Populate", + "json.ReferenceHandler=Preserve" + ], + [ + "json.PreferredObjectCreationHandling=Populate", + "json.ReferenceHandler=IgnoreCycles" + ] + ] + } ] }, { @@ -14606,6 +14681,21 @@ ] } } + ], + "exclude": [ + { + "reason": "System.Text.Json refuses PreferredObjectCreationHandling.Populate together with a ReferenceHandler on the options object; JsonRow substitutes the default, so the pair never applies.", + "pairs": [ + [ + "json.PreferredObjectCreationHandling=Populate", + "json.ReferenceHandler=Preserve" + ], + [ + "json.PreferredObjectCreationHandling=Populate", + "json.ReferenceHandler=IgnoreCycles" + ] + ] + } ] }, { diff --git a/tools/probe/corpus/harness/Shapes.g.cs b/tools/probe/corpus/harness/Shapes.g.cs index f0c47fae..786b9c57 100644 --- a/tools/probe/corpus/harness/Shapes.g.cs +++ b/tools/probe/corpus/harness/Shapes.g.cs @@ -9555,4 +9555,5 @@ static partial void Fill(List e) [JsonSerializable(typeof(Cn_record_struct_F>), TypeInfoPropertyName = "T8870")] [JsonSerializable(typeof(Cn_struct_P>>), TypeInfoPropertyName = "T8871")] [JsonSerializable(typeof(Cn_generic_type_P>, int>), TypeInfoPropertyName = "T8872")] +[JsonSerializable(typeof(Cn_record_struct_F>), TypeInfoPropertyName = "T8873")] public partial class ProbeContext : JsonSerializerContext { } diff --git a/tools/probe/corpus/rows/C02OptionalTextProbe.json.gz b/tools/probe/corpus/rows/C02OptionalTextProbe.json.gz index 303240a48061e8192fca53f823a03322c72ffae1..51817f86c2251f98df03f12ef51f337ac6f2e51d 100644 GIT binary patch delta 520 zcmV+j0{8v@1C#^|ABzY8000000{_ifkqj7rFqKtfTaH6Y5&yjj>d>Mj#Ajd9EwU}$ z^X1*UcgcYyl8G&u4axOnO0{u9D<-MqpN@=%#OgdPHeUvZ@{!CAgezzFWJc!c{m)O&y-U4fQhc#8EA--Xsk8IG3aQ+?q$Oe_=M69wwj z`XVVY^U+#B08(11SU${0e-)JoTei=R6}2{*(VKjAQh+Q4L<(^)jjGs~N=%LP(P}(_ zYOK|m7SgvF25Jyg`rrmKr1@ZLpQpS)oji(Ns7V{L>u#)0pzL;sCCF33hduOj!NW&0 z5%~(A6}u>QI6Ayh$hX;rjX@YrrXQ~Sf43QA3VhrLVm-&1nvgqEPs5zgD358E<4yWu z+7br`p5A!k^DnZfY3Y3G3QG@iiFeO&RL36dfTB>X<9;8r5c>Eu8uu?wJ&3{Eaqtar KvQ$dv8UO&QfcDG) delta 499 zcmV1pfmJABzY8000000{_idkqj7rVk)b~wj76)BK~_F)S*R5h|jsuEwU}$ zyUV+G@Af2-Ol-((NUkSSs*Mv`F-aZ&bYwInRu`GSd>QP^PcqvRuAJSG8JTDIKaZEk zw?rtDJAa{8nW0+Aoj)^HCp^o>iB?-~9k*0!{gIpUnO5AtC{%Qwb>LJGBIRxsu2!d8aM4D(?i@lsB2Zb2zNKP?_wRJO3p7@ktM zGo1dt_oum`Yhg1N2&@v2V=Jn7A;mFI1W4~vub32HtgH$>`=@Fc*@7BSfX>q8V;!8+ z#>l0_L2EYf{-|WB=0t@0?oWpFHUf@Y@h0cyJ2Ek_zO{>POZ<9 z60;ty1q2|am5LR@eDq&YiLmAP>{(H3i`n^*uPzFZrGQ8=?xj%`8%v3)ks(@*Cs2*O z+NFgI9fpw_1eHFxfs7eG*xDB;FHk3sVi#)4hU~fBnhH pH#qS0CJ(T%K diff --git a/tools/probe/corpus/rows/C22GeneratorRefusalsProbe.json.gz b/tools/probe/corpus/rows/C22GeneratorRefusalsProbe.json.gz index 2368e4b735d934fba3e3208b199c4331a9999f1e..a435a310ba460495623836293f5e7847fcc91a54 100644 GIT binary patch literal 1563 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 Ssgr;1PW}TKM)(rxcmMzlU-6Lu diff --git a/tools/probe/corpus/rows/L01JsonBytesProbe.json.gz b/tools/probe/corpus/rows/L01JsonBytesProbe.json.gz index 1a024dbdb73e11def784bc052f3c73d9fac9c969..10767ecc4f6294648cf3a14a816283898488e4d3 100644 GIT binary patch literal 18612 zcmV)CK*GNtiwFP!00002|LvVib7aSnrT6+3ZM9a)W~_GF$q0#~X^E7nRMv~JUR)p( zL^cz7!F-5<$@JgnCh8$nF>km>gg=hQja|12EEXQ+^f-RbcmDb2ZZ~Wn-~9GJ-u&r* z{qNQP9LN3Y_W86qzWMckyg7_NAE#gWf4}y;GhaWfJ z49Cr%#-BHbPapgH{oOcy4!`^te)u|JmG~zBz1$%h%x5KmXOg^W&fO`Mcrq<*V|?{c*EDPG8l(Z@&7&zxv4O zcl!MG{Ob3+{K+og*vsk9Hvj}<4@A-&*g8=Pt#|5KTiMXxcmFdAK*Bi z4|ki@51akwF#XuCS9jz7wE4$r?jQN)Vc70}`G95E1bFf~G)6eE=w>_R#o89K}9s2x{KObKHI3NBMmw(s4{`Kpbv9bO% z7;@&uwJ|_Uj@RF=>to~fM|?3ermz3%emtzEFU)zf8eje5WzWS$rF;#vs6{s=tm+|Sm zo4(DwIWj+VUXPN`U)lH5591*{QQrNyeM*dzkKfCVC|`Y2S7r+F z5uZlL$4Rp~O+SJw);#&e2hEI=e}CMSX)>)2$K%(-q|J>XTx4-!L4n8?vzQ&io z_3J9@MJo_u@Wt`lSB zr}KE(gZ3{!q;Bt-*~R4D^d0~3H~aJd{D(1o)g36@;(0I_n03to5!cq z^XmA;52oZ6BcQEl&6cmen|eD7@fw<6Tc`(7;aHK@Wj{YQ8LuAzF@^W`L3-o}jEwDm z^)#IB9!! zJUl&Y@1|wxFnxE|ug@}H50$@dA2;uwhJ9kNOh0Moi#~Jvyt=#mm~HS>6jzOww}uEj zXG(OF>?@9fK9Vyyh`l4{9iyU=;5}lrbl3IgzYMD%H*=$dkVZC_|H5vjf5T7b%l8rP zEG%v%nSHCoJ>;0JAiQD1GM7X;1;>(G%l#&aC1gFGr!RS8j{JNWr!UQE{Bg5~w4~|U zOUwk2Sj$Jwy;tPP;(zar;7BX;klbH>&aRAx^KMLf&vK71mcl4^yI4D2SOAn!H0x^4 z)g{V3H;N5}A#NPTaqdWad5s8*7(tcN;yGe`PbqwqnA~U?qk`%BkiE^ypHWm-3VnwM zxmfH!ejQUH=p`THb6N3`J=t=G;jk!sdmvn1Go9=r*3&rmS16r=t$4mX16|<>|l2f!vWsO zF6}ZEN$3W%b|^>d(2Q^rk^J<|CsG)sd(uu z7cl}9)RmD^`s|=*2hThrKs+NnXZf!77*gzFUOgar+-MR1R?VsDt8l_Ml3qHvwh?0; zq+&9(fKfGjtY8P}8aUl}X(m--NoG8E8hOJ-bDe&`kEbCyZX#fa1Y{Je?Ig4h#VvRj zCHLPDi-^Xv7Mte5*@*=g9UrNrfuM~ZiZuq=If9G6+kKIp zU01>p;=4cAjSHXvJPQ%&t99Jh5fVFf1dkf;uG0d>f(w?CdTujn;Y9JsU|H#V^G*I}eVxUVuKJF2cgr>RH=N)WlbJ4w~0M z2}B)m@8gs#ivY*2nusEuUE<<9>Fg5KYcB_qM&xmTV!|>)iHgUy61uATnCS(a-SR3E z@nek>UObpE&F4O2+RXRaOqHIw0bwsTdhD$!xXLuZel&~3MZ*`E)Y^F7pyAfcaq%dJ z-Z*5Wa`A+`*8B@7DEXDpOI+JGWrf!DVnHSTT*l_w zts-Jb(#A8+NtcaE1G&^Fk{DU0G%Z(r@2Y6C2Mf=ECg2s}$7~qQn=nW<&#+Bn*l4(E z(n^&D#u-O10ZghR8JGc>)Qy_EguV@TN~86`N3fT#m;ZV$ISh=wd*x@H+1}#4B!jGX z^{60_r`xf`HpQJz>n}4nlgs+@?rGQu=Qau$QQB_1fIS{JMso~S9!$Q05}bkcc%Htd zF*WWj3T zQ8HI@%Eg2XiE>QvN_QqJmq-)F_D3 zDu7pr8w9cSLcI2SesN%{aWF)sH(3rDfaIBBnmNR)Hch3Cw!{57DV9idW{81NpmC7b z6UNPiNcZa(Y1SM0foj%u{!!#vur?f=sAqJxk_(sF5H&Cp}K2S39$AblVgR@FaP zdhku=mcqrhQ)zpgdOOXU-Fhhm_ZAB!l{Vx0T3E_06WdN~9yn(hyUinV^#h#M+&rBE z2xxa^ca$G*iGHeWl0RkyHk2vc)rqfES3g9QO}po##fsemZz=n(`w7DAO9XPE|xJb1^L3=X?%Y}N%F=5I!o#t#BD>gF71q%EiYL?cC4 zXDA|svkb=*;g6qPp>8ZgyUeKu@clxw3G@7Ax8t~z%g0zA zaV+Ygocrl?3ZtC*>7bim0*x5g#2sZhQ@iEZJK+nGx_%r04?8@f=qj?D1iIs3EG225 z*<2Yz8mn#+m#I@d3MPaIRVd`v0iklpE*So)T<~jefhm;&$!MWc~Amkb5&9ZFy;bfm3h{k(@GfiFPOYTZ31%u{NY>N{GHfzfHIfCgAJL( zfNvY)By`;`xhe*-I$}t4>~d=)k#_qkEdsrDoiG`ZncRMukZqO`pzcr|mwJ{nV^3G?`JG3f)fSnUit5`ugW% zFq<#+dLl%KXBbxaIHfYhDZIpjlF_AWa;q`#m|5my$9}qa0FHcp@PKFFnukz*OJ0V~ zVuWZ7ko}EKYK0y)?Occ>WPU46CS3jzqx!0G3tOD_8dy)gd1B89c+}X&BA?75(XRTn zdC|4nNI^c+9xORmN|?f4bZ;7+`n?VtN%u>XRMVL68lbg!eqPpyUA!&xh=LN&I9K6s z&(r(EkyPYnY{if|5Lf_eT{IDd)8>YTT9FmQ{cga9H$Td_!U7i0hBt4m<)cT|aN=%#J2Dt_lLar?~$447YYRD1LMqc%9|iJKhT zgL^oS7UHQw;T2uUXo!8`81D9nBoYz9wZmD>b2D6k8rfS@bjtC2$7F@_@YwS1HF^pv zN6suk$ED%jg40u^3dhLtv_e?o0qFt$E;ZeA4JiFtkf4S^cx}DbH!)gRy%hMhdU4Xd z9VlO`!}ScrAjo&8%E5=Q;y%P`|H2I;@SW~Ch;U%S)rk^aYobNBXKv8`Se!re>U#F?ZtZ7n! ztZ{WgelyWMrTFfWxZV;ZBgNN@-|!F-PVpZ#@U=AN5j-f)ySrai5MD$iXAIsru1cy1 z(peexuCSk=0pA5JA}!EGERVcZj(8%M_x`XIV=czhPU!QDD}ZqsfHYejR{4Yj2XW2k z2h@uv6cWt<9bi{E;m1MqZV`t{>a~F!@i+u4g8@>$R92ifRKuoa)r4bzRSPc~S>3f` zh%yw1Y6Kl0{dl{oei_k_9$@ zH_Ua8*wxE<@NgI;jJB*0-JH3*i7Q)i5hhq+R(yosPNYkYz+{;RkL3C4)2E%1@nT61 zFj;A^&&JEL#kSlKj8n^3JT+3d zQpq@$R0KoA2y|gZxY+1mReQBV1j8H>T26H-?OZB1x<)}IZK_1| zo)KFBJ1O#CAV*Iozw zne!tC>DHSAJL|PsE|W$c<$76IhzK8!j-sf|vQoeyp|0SD`A}tjZEP{xg%`w$7^PNN zQX`dS!WlUSTJvtU9=rpe`Cg8I%ib`vqT5}O4htOv0a#NcpP1anHLW*!hpE(rPtzHY# z7^_V!@PV-{)+6hmAU=Hj%B-f}?POAy6Jmm}R1$Dx5_U76SX#J0RtjeWM@OZACgXYf z5)057+iTzJ))MgtNn>HZaK^OCC=NxDhA7VRJIq9&(x(=Yc=JRE6zwZ+;GK2_7Lwu_ z!my2~0i(r6N5Mm-K?(tu)FGI(X&4v{mDiK>iBN4h>Jo?>JX#dn7=tAZZA=rfvm)8* zf$lHmbL7<-=4J6OE6E8!f3@($7pAghVAIC_WhBA!`Ey628RB53+K{Tet@+d|ow0YnyBczF4 zW_YBa0D{0)(s~vH0j<4*IJ?{n3?oez^EFRu#ZJjkLMaiF0p3a zn#oa8TQsSQ^?J)g<2ERbFj zFQfJ5Zu>awf+CJg21#|@mPfG9RH2n`wD8qgT3Sgerbb>P=>2Z^;kXjMFr!;hSQ3kZ z2L(lMLBbr#@)tXuz;xK~4fPoX=(!z!#yK9y-~0&^@A01(<-tMHbWcqSlD!76 z#Hv4h{K1V1XagK5o4KjJDPm)Kbd*0^sJW3o{YHSis?UvROtvL)9NnGu;e?RX79wh} zCm4@vojShxoKWmEg^y7~4!E?Zgo#$MOJ6OcDy=NC^`B%bFtV0H|5Ci!gBec}H36CU)*G zKXhdkfR0LvL?lO~bZZ%QS8U2jv_mk6XFe^ua@qDQoC%I|UaKq={GbEKwimb1v*7j^ zqokRNt`Z|X@nk_N0u`Vnm68W&u@&5x_BK>!dAxO`l@6ZkBZPUlNrZ&oAGV?!iGAOW z=tD;40_?4CD3|*|)6;sGrld}XQ+q+YUYsj+oZv>3MB2BE{4GP`i4p^ZhGG8@s>NaC z>ws&wRPl+}-gZA~E4JGm#_JKSgRA(=LfPSO$8i_Tv?}^MvB4FIqT?Zo##^$qhiUb! z3e+9Ou`qROWHJRI5Yf9w3`yfHeDSzbb|3p~A~Pwji<_l0f^c(Xc3BylxeDU>ZF;!8 ze4+SrDfkXaDogNId~UpY7jl$=7|r5Q7{E+~PXF?x!|;#E<%OG%;fkuY>27f>nP zUjtM;1Ua#0ZXAoR#zfgbbfKkH%FF=Lx9+6*9B4 ziK#LDOr0+Wq1)%x-Q@>r(;f=d$~k7x0D~;DI#kvLJL_6hNXbw<7=r`JeJXb4?Xa+T z^-=Ecmo`+_)a!-agn7M5myws_23lgc%EBe^&0i|guCj*lVNGP>$U`sVVsra^+K63g zqBX>b)HPBqn7MwUJq6j`5s48h!2w?Z-7)BRQqV{+iweX#LzH=P&~acAKNa?*UmTsW$68fPJkN*S9d;_FC|Lt+v3!xLllXAftU zDTgE$xlx)sEL-{86hnZJ<3-j*+X>B5HaGU6XjbEu;hvcvnhRX`>O}XTry-4dGSi#V z-#unN6^7A%u8N8_)}t&RW}#tg=z#P?27z=GDw!jO7H}%*<~>a2dmh-b2yrwvvA=@X z=Qi5X9diYdyyGmTTUY6h!!^r_qtkjprd#+1HP9zpGt*7>ihXvOHWT_aW8}1VEVru# z62#k3EQ+~3Cd(46YzCNw+{UB<1>?tZ8Yzmm z4hldptXJdo6T2c@@@Il}RPu%iR(=%$7rl_PL<>#TX+=9L&<%Ga^v6c zh98bAB09{RC6NejVG;ItVIK2zaP#dKGVh#%JaFQ+EVpu)M}aMF$?(jzK`rEge;Tf&k{%zP@+dj}A|o+W@_A8qi8as+O`nc1An7D9mQTdW!O zisNXH4sqhECWQe1>g&iLfRs#Jx^5JaGS@v%22NDOkG(R|RfMr-V)IL)?H7<3QI*;o~* zNap4e^$O88v=Zg+z6OEP@y+m6K^yJ^h~Z0%fs~eUsog9SQ2;Ss1a(*xSbgj?U-A1V z5bDHlF#&$}1m9B{Bfti*xTfAal4N?~#bX4P#)g{o<8U+29_0%$V7FH3O_<8*3A0}# zZX@lMl!sVKgb)H4<-z!Q--^DAj4rNpxu?Nx#{f#dj&Uk(F7zvV%ITHBHpY|8Kn|gl zlssr+0goj8D3&e4mA3i{9ISIjr@Pr)?m47eo-FMHDap|a=7=1Febq=dOndKHlO4z;A&qjY0&-OXJXy7uzKKZ^z=tt=hQF5Chh5^IP8bDGl zexr!cXj)OhjBcWh@}npd$RTkYl4v$eHH1Yk+V|}4-TUfi?b0# zM%ySPzjMf|q^nG=SI^+x!Col*B#O4OyEzvVbU`A(T&M}>^0iK?_IEhFNF=M>_Hlb^ zuktqwYlc!N?y+qsTwt&7a6!qd(JD8Ybj11nW4m8H4X3+@D>LP0`bP~hP(tE)}K}Cx5{^c7@4ky2pM!kN$SA3syY1t!i^6V}93|?yh|_DO(8>X`a%jpypIdh`3L?UtKT75=9A}I^S^imCLR|*jkH@z?Sm`+;!&HFoTRLlTGph0p8&b#1fYId2x2$ zF;ALUlvfqgDJriWJUc@)ZBvJCSdiQP?8r3q{%~7I#YRgJ}00%>1!9VYG6D<00 zVeBW2MqkDgX#eUj9p3dvZWO>U8y7#SgJ6YScUNs*jmOu4`i0QQr~mKa#r79xdJ z)#3@?EM;*EP^KkbcL7RLDjyXAL2XM=O}wixIE%;icC9oH7XHy_J zzT2XNf(2(y&{94`Rh8Xs!Bke*PBSKTz!MOwwctc=xImdGVutt@f;SkA7d6(9ZPG`^ z4cG*cQ7RzP?xcFmP7C7@4Gfh8bn7T51!O|gzCBNKVQDHX(1PL4Ty*9^2ceEcYX~m4 zt}|aMN}zx!4;GfsOe=!tw~F`^T_vh4{2lCJoTyc=mCRM-_W86~Bx}Cbv>Mgu4t?DD zyu|qA@EW}yix6GsCk~aoOFQ8eMG{*&zyc4&5#gb2wvH`+xmdG|Ezm%}Q`*!f{Wc^aiWFa9WupuwFIl{Zh;> z(ZIxetRjozmo(=^$vNu?#{ie?o-fPlR65u|oheqF*YHI7XkEbm^P&~A$@L|qnCeP| z_)Mfz^nyJ9TyT@-dFRAl1h%~XkyoG|Pho_3JYGyji8Ww;fyLp1?zAw}qbRSI#2xn~ zuqW9FZkzhel}pzWR~L+Fv7G9f*zLR+SowOdD#P*7R7YNI;jW{htiMeF$N<5m(DEM5 z3=b-b(L)wiw6^QKf?yL>xW+u&crmsPJOh~lVx)YyFnk{Bco7HTbZv58iQ?t(ZmEgm zIzff14LTz- zc2C}7;Dw7;ol%LRd=kL$}6Ou-aHly{!YfHv;FhB3s+*e{uz^j!?YF zlID(a+zCn?wnteD6rvX4%&ir?1;BgDi8;{yL?Al19?#QP-=#&oa{b7-2wUOat$Q}> zsPA0}@tYI9I@7@MJ{#vxpKBBwGlTR&7*B@SgbxSuX@pe1$of!ruATdPfA=sP;uc+6 z;?)6M9SF|``7Awp3@%Q=rLy0Y;B^>WMeqwQ{S}G!kjI|wbitis`Y3gB^B~1e3Sw%+ z0YZzr$apsVviLDPVNtxN;VFc*VOp*iY@1X)l?%A*UNcq@Q{2wW5+4Ve7#b)D6Ol<+ z&^Y&M19>?mT$vgllW`Hc=CHFb3t$GpM`183xG}t>1sQ(k4fbi=JwJ|zr-x~&nSS=C zZ})nYz!YjXaeKu3(Ia;Ldx`z~N2-@DNI!0{EKJqJnY-aIh(ek9e{*Rz?9<0tUooq@ z6s4siTz;1mwW}+;B*a;@J{T-p2v~qFa^9sAl}+C`mAY$!Rz_IHJTtc(jU=a^verA& zufDFixPG5eN0n_KAJ3=D7js1w%n_-UlFCZsI}L)5WMO?T&NRe8Ep%~gYK4B1gvQE< z?kgJEky;(JT5kR14v)A~I>aDHuK1YM7gD z2(d#!0R8atnZ6pUr%zvwe6)vEp0-*St$4izCIpos4Y6QjLa91{Q3BrWP^p&@Nvao7oxMdIal!xv74O4&sy$ZZBnRBJ$G8_S}#=SrB@a}T@l zc%l{v0L?Tyv>xGQLq#&U$|e3)^G8p?c%dIV&Ym-!yA2LfQ6jY)U0QXftjZWkSmh2z z&@)dr3Hu=29&-fHTq0|SkK%1L+*DEr-t=IZ%l*3_V0?H*wJx;I4nbl&$L;OLhMo!e z-$OiSES3;lXkysPI>GCWk>^a0dggS~q0Az)(g`7$u(epoW^RFl4lS32^2s+5^c4x> zpuB8aGN&=++Hw|&`T^Myrg+m7zeq`sMed|PqLbj4cMG&aw z#kY7WCY@_WfW$U&@z@4f0I(5$xeZ2~FZ8RYw5*p=Tp{bek6zzd8R>I%$RbN9vd-Dg zN~;8#FyA@V&3o!30(%OQh~WgidQTaCgiR~KR7j#%ch2n}tvO?BpG2LFgx{dmlYl1+ zK2l0j5kanjziwnO(X8_h5_O>Q7f`1;f`Fn~rNL?GmQEfUu#wzV+#4sVqpQOfA&)G> zIq5lMgO|_@`y^d94q?AnUQg;{ff&1q*Q8h;4her$lrtE)d13~Y(I^0jtd=xnxpyBT z66xV?vX@W(k()=#^!j|-01)ZTQ3T4#zlGmz{DQ!p1I>uz9Y)BLF zF9{Z<6`>>LYqnMLu)FG@O%7I{k0(?2!rYik^Bg31=;|iucqE2CaF1W>B7YvJ4C2 zA!B#o1uLalM2}t^;WTDNIC_-$%O99Lva~R8S(yZ661c_4UYPd}dw%e$BnVbwlvth)Xw^As1M6^gRcfR7 zOBy=hP|L{eIPPGb(ode{U@< z1D@hdZ5TqayAZ=dBgQL2fDdU#gLBA-xa0;HCRM4s>SHdWK2y7Ux0l|v?EG+KoJDwy zsJCLW&MhJ=RjXVLCYU)~!)}NMP0#8osN*f-VN$Mj}pM3 zUSrj~L3%T}PSkNcWkW*XyR0glV_2T`MogxHJ$UGVcZ2J!%+!$Zu@l-UL-8nj$=Hji zaq=*3k_hP15yLwM;rfu7E0y-KnT3R5@(2*wRlUW;YVn3|oe?v2g!i5*R&5Gst+SJa zA^^~?>)neeP*+c-%odVitE%SZurs)w;tZOf!*BRbjTmxaAx^$5k6Fp3CKA6{ zWW1Q2drfev8h(++*vxi*RiRa-9L~Jmubzg}-9y=-7p0ol-1r_c!5`4EDrkkznJV&k z-w1sYMWvb7O(Fy?RngjR9;~CS?ZBs(;<&LW(_O6fH0CrwmEDBru9^4(hN|Pd zi}H+gXjwS=AzOdFp1;#5%QF^UYv6}0!$?%o6|>-~t;a4la3CR**7Hr1r`|dSXG0G-dkzWmMC7KmAY=4?s)wfS7*qE%?sjW-U zLSiz~s{F6_mmkcMcM1e=Ksv+MpDQ+jU*l4%)?KYt-Bv|?HH2~+A*E+>k&$tk$-r36 zK_ueu6nnGkqSVonte%)KO1ef$j=UaorSehZp7HC5l0rmDq;MZBS0MSOVSt|*AS5D+ z17C0>et&63B7xIW?d_~+WFs$aBxOotN+TR!8qp9Qq~WFlcSP?gaf^PfRuN!#NJvl` zL<2D zs(AaRD^|q6>&m*wW*QtG?69C+!Gj(zZW7)XKtVH2ex4mOB6TROs zkfN)Rail%FY8iBhY@N6rM**0K=OtJbCnA2gY2K{8uqvY zMFTWq=v>v_P2Qq6NrbxEG}L=le5J|6n-Tt2OjWgZ6TwKwAh${ALEw#zt(_Ji=1rsS zztgTXTo#h)C;509_NQL`t9SHW6skG%-0Q#v(3~<6-6W(;!Uw`Lo;a@4M2n<|z+m-u zuc4)Lnj0~8nyeePm6|WaNf;pD*T9KKW{|}0>H>e@fXzm z8m$$ppN<95BsO}j0F5zz5rrN1+4sd0_1M$t1Cgn&<5)s43DNv3p6+v2Omvo!XgqoJ zlpmmDt^C46&X2j;i8REdWPG&NXA>iX<2yaf5v_|u$_veq;`1=Wu9iU?K=Rm=J{0b| z1`oL?{g6Ss*ht7A&gFR+T-I_5BhjjN{nbKtUHx<(FJFuO%MT#3iW=K zxJEnp)-p@@J`=L+CYN7g?1|O((>snDOi*KIB*jDzDEaOwcPxP~f!Jpx=>uWYe&(<> zubrhO6D$aEzVt}rUm0%Gf5qA~qA}7IQ}7D}Bx!7`DDI~qn2Vs}Ld_3CX{W*BHaH7~ z>{%Dd9D*dHCe;o?N9DRwSujQT!c8mRJ3>=lBa@@CSRMjGKo$2)lZ*(MVu*Sh0pfF$ zH8*d8yC`BcZ#D^cuFKrLKWsfCcQIBEP;Wb65$7^|ATgS+O2);U^Yld#O`}+`OKA)d z0PxVFut_>ua$@hmGPRfS{T~FEHTOOnfr!Ss#!x+2QQ0C0x0wiANh}nr1OaVU5t-Xl zgp02%Hx#w3e;f6A?wOdbp2iFGCpvr?Ff;H)!`umm&S{2yx8#hDAnz7X6k-9Dj9ElO z^nHWF$<)j5v{L-e(*(?vF6bbGFn$D}3Du&S6DtUrb7_W4wnlcK<2+eZM~2Amff1bp zzrWNiA=e!q1UkqlqwhvY6^ZNjYi+P398~TWWanT&QF#!BRBX1Txm+_sg(+EW1qx-nO3ddK@>yZkjh&HLvR7*7gN|I-M`o|k$UG;cv0z=n9bwU>3Mbh!dTGgq^Mpjx~$rv z>@W|Lt12v05=j_Bct8;4p%LJfBI9WH1}ytWaXppQ2rMCyk)cQZm{yGt9FP*0YU2G)@+Jl?juj*?)h;%JUvV=py{v0^i5x{5+dqWbk4xD zlhIx8qL9=MIcyg#RJEhbYo%0{KVwHJI`OsvUvDF#i?)_9WmEvqNR#~yHAmdMorKM7 zH&{;`;2~lmy-osfXvbWl#Z_%^B*fLbhv5*wV5StHiNb9MH-k6$hL<3r1C_%lB@H%gbFGh5hcpOjpLuCOErTUal;7bvX(N@MI*J%XBGyrLm6-;ce z#rn!@L-kq3Zj<>W3tE`trB&i+`7_eF8A0-A(phaHXEu$uQf`(;gom&!?Be4JFSKH0jMn9N4Um)3@OAO+~Ea(xRhS zM|FZRr7abcp8Jz7(qVN7vxf*(qmv1bg&iRg`atEcIo)y}+el(4$j%QF367G{vi1^gG~m8+9c3dr;?}{ORx(wVrBenttMf(k01eI zopOxJh;-+Xn1K7m>8~KxSBW*GVMMHD5Qo#-^&%YP-+D{pzj091BC{h##UE}4 zN5r1iV>sf}#;O4Dx99D;zL4Df=o^wEpqdJHt`1#XOL?rf3u9VPn(BHyPhVLvv%F

0Gtycr8L?5dhcv=O^M@9-ed2Yw!vu%B>Z>Ax5F?_d zE7QR0(PJKsC*a4C_BX~0hHGHRMi?x#niy~il7uX~QIG#(hG)FIszLE19%WifYyedm z4~)wTQP2mxUdR~8+FUW5^-?>3dwVT6AQtvaqX%(mF*)G+u@sTRyRcn1ZfXcdsy9yg zp1KUeW}-1LBQLY9HN0Z6!#(PL0wl2JC?XL~yV0UF*Dp8KA(}IS<*aUFvE#x++T7nZ zbDjyYkOWXsD{j4qk6)bC^n0DkjO_V9BKsXA)+49eN9yb&?X^!}V$aBBgwHEtfaFcU zXKolp_N%8M<_NT;BK!UUa>&EZnmQ?k4{T*w*BZktvfe?a+Y3HW-qmE%-$vk^d4?t% zKugh%@5Mm2#vLhsK-X3%^HEAY`J0Qobw$|T78z9ni()hfsr7Y5F7790Um=ic24F^P z`hdcT+533}5gBeS3>fq!ls*pCyHX4wN1i}N!|t2KHuYr=lt|^|fFQL3ONxk^vQ45G zi_os-%gEx6%*8jK3K9~0h^L2&g}Kq`9fc#EFib1}p+Jp1G0iE^VlzhM6gc&hFI+e= z@W9DL1}W<-6RT!?;VJH}sI$(Z$9aH6R!=d+Ek*2Qt1pcdQ%2cO=NZ?|JKr`sXIzf`GBLcyVD^0@+s78MXXrEHMPhRdY@+%F1_91WFC&QcSHVO4 zE#~GzG7?GABa;epJB~YaDu}(S496l8WG`VnYCeyUNU{A`LWm9?k;_}X{B8VV3la|b z8=qy=hD*HTZv=JK8Mx{Ua*okJ!3prMH+S2|VJCQ*2~^k_@s=BSX0(;Y#S6+*$*$$S zSES7hV1l?MbNwM8?txuByK21+UfE*iC5h;3thH_sdhamMLaOyu6}M`8BO~t3MsR$@ zgQLROQTdkl``z%vaYe9~^=TnKPa0MnZ{dxcE#?20BZ8De42d=5?qN8Dpra}m%h68C z&NmEbyZi|!&f)jQgnZ^#l!-hwB#;2^hnuF1W{G58I`#kf@h`QiFV#okVEa?W4>C(2 zGt2K6A>ho*LnbEPG#R1a7;{GEloPp>s_|!z$RQ_$WzE~yDsC*feLij66E#6aKociwUdaPRQkw6BKv`$P^iq&v)zJx^$vq8eDu)DG( z(<8%+i*C-z)dYE`z!O&m`ey_ej|iEYAfqLgWdxoO;Ld`_u#Hss%`&NIb5~ym7tP2= zB6Iw8dCZ_j_`)^U2tuBt#cu!$^NO#;Btk&(l~bpQ#37J)ymj1t?=jHMQMQlbj2>tA zAd-3nIT2>(kX29Do)r>tfdLwEyiPm|ZA2p~B!IE-+BVf#M1bCmhjgDo?Z7LSKse!D z^0|VdqiWt~>Qgo7CtV*;SyLUGZR3j=EPzZtJVRX#LQ_=D`8t>8fp0Dg#-#=B^i@L% zFpfHexRTfB8?ZV{jDi%XLo56nNkL@Mw8O^moG@0J`^yjD%B-@ z)A{n9YSFfaZ*YxW>+5GLK?9;;?jn-bSH^3|WTJSkCq7Wupc!I4OKiQrBnooCi#DGU zT5@nD*XukpOt2+kVcRt&hk?X$m^jW41$c?c@UUZ*U=)kv9f%7oXmd}O43t2w{Mxb_ zVrop&5nZwBej@~L8qNO-)Krj5h)|RdmmA<-%ITE4ftVsOxM&c3XMh(A9~_XeoM>^M zT|M&X6g4gUBAEYGuyxPK{OTVO#&Fgr{3g3G>0<-A*YwM8j0=t(zC8mi$U-^AE)AUNnA|~)w*Cm8?qmgmbdmnZYFln+pR*dru{wpTw z8lmNq`D9UT~yOtuv%_e6b!EmZBC5uyx7$7@2)uT7SWtzbi1H zyz1pb<9XvH&N?^K?-T{3=H5Pz0e1+9_Z|3))3CMd2oC;9xvDFNSZ~trBv+0!0`E0i z+jztkN9g*422X0o=~kn|WLWGCOtkJxO>CxPEDfgKlF~3yN#E?2z9t{W@l;eFtaV6s z9}Q6L!R;AgTZBT#@taU*TYs7p?!+U{ z^p2K_;_a42#!6cw3()NMm3kOHzDzlV5Bo~op?0^^bulh%6mII4#hmID_XjXgjxqdAs#t2Bw zr&`>XUR5AmBW;34WLas;LXPO4f21G+I zni3PO&brq7_QI0fDM4y`@ie zXTk8S1Z~&S$_!3_wBhnLntq;-r(u5*z|n_#6|trc(pji{&iGTS6kB zuWNcN)Q3&Qxu;YXaitc76G?zcvOOed!X_Xy#0;045t|LQZ423U61MX~!iuk~iA1oO z=wF7JA>(cGI%AO4shb`G-ZlE+BXg;7?bR}A=rbB0NI^f5eZxRZr3|m>N^$DJ;@X?# zUMY^vT8mwQA$#0~GK-*Z9~y&%WlZB*LX5|W45psmHmol+y+UW9Ylo!FL7i~tFEi8) z_md6e`}_OL&~dA|5Fj#g=|>`3DL`o-RC$Fwb3VrXCD=oSyyQ|V#@)kk5KjJv==*J) zE{{-1AsgcLPuqoqk(5VzIj(i$Sz^L{HYY8vBe7Y-hjqnJt-iL>*w@#h3UR_picp(y$(i7oO82D9#KSqHE89h-T+jZV2SDBDLf?Y^-w%?$f!f;yy7Z`H_z&_WLRrEF0KhwND;wgo*h%9%RWrro4S zUEvK;SL4d7o#pIl7gJ<`)Vajcj~C!>JS&Ts)l;Sc+XwEeX4&BPx&oTKye$TfEC5tU z##82PJq=3<3DIEV;XqY?*Ua2w2rn5XeoSTw314XyaY}UVm?z^y8em95g-pDt<`>=i zJZ-$v-Zu4*$oL?5BH7H!!JwXQ9-mIntK%0xYoRB`4U`8}o>*w!=50=4?{-vql{8c2 zxP3ltP=yWIV+;G0(vX~iN=nW-?E2?x!HlS)H8RCkkyoU#m%oPDXI-n3Dt8)4eRkjX zWs|+V0NGUq%c^27E0{Qt(q~S_Nd`C9-z0o2qy24wzFJ3RIW17>K)8<6X3>f{h_j`*9?bOHkY^~ zydvu3#1(EBuJF=Zi`Cp!>c@&Unh0j7_*KSG8w#(&JMR+g`Nnanr7|%W%XnJ=MP06VGb9JdSfgG)HblAyn9s3~;EH zUDil(_RV8*j>OZ!Ie393yp1r#+M+s&%eV3idz|;3ryq)!90Qa=s0FIagADsg15DQA zdHT9T0+5tjdZGCx;C9)D(tpdmEY}8#+4F_vaYOduBQ$FD`p!H8y^mhot!`wZC&#q% zKlj*HB_u?Dp>R#o_S$pPT2ujMLM3o*wvaKm54)W;kyC zH2%Cfe0uEf_jlv;9Dey1e)yX%-}(Ff?)eYf&2D|99`(g5a5|hnzhZyf-|f!p&D?kS z^YD+G&C}^&`pVl+|Lwc;aQ3!>i}~m&4|Mb2x0) z-{1bv=I->(VKZD_gI9n4tH1N(&-(n`@c8no{BeKW?2pr{`uELOKm4mlPT%SC>-p99 zyZmIAH+Hi>&Htr;z5I}y{oUr}A=h5^ziy6C)6f6idAA#Gcbnhs_v7j1nH*;y``67+ z=k4^&r%%Ok`nm5;_R#o89K}4t;*)&xe;E=fhud`Mdu0uV2rUjrFI(kW)9Vl>wr1ynef` zmyOqt_@ZV^um9?PJglY{=Db;rFTV+_0`gyn>HpOhkoWuJa6i?8-SCgi`trvA{&+V$ zz52E@CFP4kF<(!cf0`+T>%{9DMVDX(8QW0i`tDyBn7iG0ytFEtndRNm9?RmRSl$D>(43zU*vXl^0_8xtad-<-?t*FvIDks!e0m)e0x#9FNzxWj}YhhA_W~P6cuQHdXy!qWRcY&fY`CKp9xVsd(yp*m}d<)Cf zk?6P?cGDBM`jA((WjGv$=R|S2yvJXBkNG0Ad3-uOuZ~}QFeSSff!&H$ZTafm)azM@ zX=uJ}p$4MDvLd~g{XA?krXPT13UBs78gc|m#&*AY8cuf)SE|MBIPMY^;-%L?T%e$g zIFP#(y{nG+^5puisbOCp_u zW35}u^(KiXWIdjzmpoBNem;!TOLH23-0UGGX}aAb9-+Ln{(#kX> z_m|JvmC|tDjY;iU?(xNPG0N>O)=n1|fXyhHbT#Md66Ky7MFzrHZXCvO?nrx?Mue9b zK{utvb;S6dQaF^D+-Mo4f~oqDz0Jy>QB+$BeT4_vSnNN(j;ST+#UJByS@BtWvey}g z#iDHXK)AeSD%nM(r*ZDDPuXy9PI94IKV5}rB$XP4&7kV4rObd-0&i~;=n8? zDDp6Jj$t$>_q*YTy4k_t+33td=C|0v+ z&FMv&B#Aij0Oa>8oiO5V*PYXeOrIw){g`cOshD(@ix>ei>dLHAdhMWV2TwdAKs+Nf zXZfo37^~RDOg$ie+-Mg6R>i65t8hX$l5RS9C~n5PD8B!OSVT0QwOBL{&Q2`2==iKk z8Zg@Ep;%*(og=8|%hf082}n%ArZ126)Sa-lvCfbp(RL*qA-?Nl-M9b>z_SpRzFNh7 z9U-w(NARfe?t5B5TW~>BQqOHh4V)-087wJ%PnU($Y^qB4 z+<>qb8$I^c1YBhbU_XjQ;-cXTL~3n}H)yyub6h;ip*Id0seE}t-f`X^w$SOC9wo&2 z6f7^DkD8X(F>C$-6x8~a*q6AbZ^|xO*NX*}_;VSXOSg)MAxR6*I44~;Dh=dPqex<8 ziPE%G@ja`e%^WN|1)6|Xgm1H9ByYkX)jZ8MjbWqVs!1zR78qw7JqIwk9m&89z_@PI z)Ft$7xKkRf4?cpqd_DZvv&ms#?A;?j>%{gJ^O6j*-c_T5K%Q<#7TXkeI=z3H!I@mz zmv>LYJ~+2gK#0X^5@H zk)9ABf^W~;HELFlOO~H&0V%flf%u1wPRNUs#p*91%iJ_^Mk zkSHTTmm=b zVa+A#^-$rxHxeN<0V)TAazoY!gXHoDsu303GUkqg2(1E`LfjyTtq0<@pYw|YTaAMu zD!s{a$N(hI3{%V@9<^z@+GyL{pW|YQL}!L57zH~H@_NF!nGo)N{UFV{rbOMv0>M#@ z)_j;-`?d97dRlZ4a!7hznrJih81KQ)unnv}kOQmg2bOMplewjEvF()G9w**TGiJAb z6@q(5#A8(0#s%?@#W&}2r z3Eb7OuT)1rL|mJ8%}0w7y9L@(_FeZAgxQw}1W9iP36Fu)eh6<#qckB+#la->=iY%* z0`;Ik>fwW5*V}er4J`7s!3Yp`)!T}DP94ciW@kJ=BwuP=YuBN9VS$CG(NKfo4fm-V zEpO$)JH}*i*j;V2F5obKF{(6v5GYYM=RhMZIqfGJDY`miBSI+4a5N!q9ZTdxO?%x* zk898gxntA|A>)pH3$*$|;`?I{76~ ziE(w@QIa#YTaLXFzQC#L#{uw=!y_(TMVga9cN~nSB&{=>3u8!Q)lKX&bz6^u3L!!j z3fXl)Y&m2b41ZTH__en{l*))>AbfTK%(xY!3+wQLgh=*Cg7OxfxjS>?-eHvWtc>!) za{R-JMr6XG@B=KR!R(EtXa^>;yIE)|p=F6BD}@Hgch6uRX4al(TxX3uC;_p#C@BOO zbHQendDflVl`!I8FnNdC1m*zv!?(EpJF)5jB`$*p8#0RlUpB^Z=(=BWRRm;p#E|IN z<<>|d?dDZl7<%h6VKOW;x%n_5(<~!E-Jvor^(1G;n$%$Fbb1b7&PJ8PY9~ZyRu`M< zsv@&o4Z$Re(wG=;LE6{0>-&63kr~yg(CJj3J{h;GufIPAGx<_4CqjgHh9QNI6Dm{e z!b>zL8Ckj}w;J<|nPm<;_SMA$aOA6l2RsAU3_|rOc^P{aBSdQe?{92UD|E4G=RzF8 z^IIu0;qs3d(N~R2*y5zuz-sEv9eYN=qsBTGd1nrZcGZu~i@vLkWaKl=!ID#@gbD0L z*QU{~-|MiEbiPDMG>v($0UC?vr)7qp)YiQy=Lo@|*KLqXD-%08>|$bbg`$_-9i6Tm?n!RJ@*%;9ng=0kz+9)^P>gdk|M z5@7goN0rE$ZrawW;%EL6x8GdAfcZ5?H8;=SYJ;;qaa+fB;~vh?LX0XDUeT3|hL{(Q zp>B^zA`w}*b~vlKZ-xs{BXettPC0&aOqMARk1g*Wqo=Ut$f+ghxHP<5aJq_A;TSoZ zRtQNvAU(ierKWqX0i{0+64WpVudT=WCQ1t{mjXXlFOIvn1LbS?u>Qsz^c-N%TMbc4 zY$lzGORwto#QMAo0tn~@qh;Ahu|a1J6c9@Ls>O>&N6?EJ{SYcj6k-v4LU_g5raCE{ zP>KYI|E&d|b($;4NRy*)ZDphZK?x9Y`C_CzywJ=fprTT6=E_WT7o1tEQI(T^aSB2e z8$Q!PlL2;iKI7BZ)ED*C6GQW6zkOLwfM3OxNRZt~XyKIgD%db-cqF~~ z?bdZw_Qw2f5dlc6|Njzy!k zKvn}{!zgH%!sw@E3%r?C$DJ@c4t8i~8b1$|T_M_nh`4yrJ;m)65wtNSdXg5+PMRNF zK8jDoG%67@f0g63Tw9RH`q*IG4*XMbfiq`LXwOIq*H*VV5ahjGe$LKe`&*6NMkHQa z5|NR_phGh!nzYaa#=avfH8D)6a8;8)Uw%DXl!Zo)r%DQURWgnx5y8+f0$tdeV={&G zO*eZ-;;pI=Q8&Q*kg8kmOu1lX?d8=BbNRdlIa+3^8WCE84|;$}2t^ZMu;-2T9(AW&nX3%TYXiGujbB+woMI3xj(0a_>$ z?KUN5oOr{#Sa`Edl_+gaWU3QH3vEasGkL_zutI$0t*Y_`J{QUlv zwqsGH#g9(VZk~nU(b!-r^12#(k&@VWS8AsM&P}osy+s{)-Udg%iu5hc8{2@zMQovx z;oMOV*8<+Cw5F*wU!vp?+H6&BYW1YamPcMW4ZY~!|b~LyGn@>ls&K&J6Z79KO zZ&{2bBjnYW(XMs5x*{G|UFI)`$4KcbZaV6s#|fBGo=wkEq*}3W zU0B8^1a;9zG18`>Od~>z(25XIS|}rkMzvTT#mIy<58P#h6tT+`j}#O@5ZFpe&tf2; zwR;d}m3x6;q{(2u=1HyCE*WZ3N|ScffiinIYYsW!oC%;Ymzc;tXUgSiK}BqxI%)`#9`^B92T7 zNp;+ohq2FeLo1(X;k##PsU@kX8hMGJ_q*YT<4X9#j4nlCtymN^C@A|DB+QX4f3edE zOp6U)P@fTio}1xk?Bh}O8e4TOEgg&CHT6qFC#6n9T)`}{vpvh)ot;XD4tl;4sur5Q z*snjaZ_PF7pz|x*%vmTMX%XS}W3FilP+Ed+UW1TbTZkv;l#=a!^)#IB9?C$k5V7Q` z!r?}p@4d<5V}{!c31#TtNcudf(#J_LS1K$LnOgwm1uhqdv6N*R2A3PQC8}(@-j%S^ zE9N)^1bGc2ze43k>>6U>t!V4X!pr6-DaV5{ac#srq+OiEZLtwL20e@r zmzt<1dM3k)2Bv_ebYrkd2`ae9PyU3l_xRU~a^oN=x~HlI$zFrs#HtTI{@_Lhv;hv3 z&0JL96tOW~I?Bfus&1rDzY!p>>UAR;lWj>HM|Wj?xJ5{+3lSCA6O2c-OdVf;PAGao zBRD1Jc_#j0SUskTDSl<_SkwIqJ{V;QUSchR+aiuTVQ$ADR$_80A>^1BR)5hVr)4MYAR6pO>~*8#_Fsp1o{we5b? zR&2F9jMgJs23PT!g_6VHj^i$vXjODPvB4FIqT?Zg##@rKhe`FUGSnT$vCwsEBr*jd z5YfFyjFrY)_~3CT?>_cyB2y`@FE>kT1fk~2%(5~Ta~0V0+thG*=|b@jA1OG)A8BO&NQ4xm!HzXphS2y$Z0>^K%5 zjfv8M$N@Yu@-U%c$y%6G;P~z)QZO6Piw12)DivZ}C)|2-w|yLTjt3gIL@K!87~~@3 zZC`1-%7mhLq$78Ufu|@QGlBrMPB4b&q>ZIfkH%FFrwOS66*9fEiK;Purp}jx(Czc; z?(%`!w1+~qQjQrUz#uPK9U|+3opmiDq+}=_jKYDWJ{7z2c34=v_$c@JrH!p?YIPaD!$_oOIgC&U$R#TwvfGvuY--} zyXnM`h&>D6kdx*c=E6~p-8c(rRLa;y5vLSelDV-DMYB6z8Sa_+p}9bXuTFFidK%KWCo{DveeN;SsW620b5T^Z zupXuPFf$EXLkFY>83fW%C})lsTEHo!n>U!u=RC02BE-?yME(jMpWA3kcgz+<@{Y5V zY+a>04p%HIj!x?VnQrDAR70O^%uE;AE9Ti{%1r2K#z<-J7;aY!B#76cSOjx>RF)-3 z*$glzm4f@bhv5*|^QVP0@$v{aB8o+~?s)oz6{nlxJqpu9JiBHc&(ljB6^o?j+W}^l zL{y5fc+f!@B|%hYLNRz51hq`kk-5vyf_2pMxs6E!3c`=&BvKT29Tb3ISg*$E6T2c* z@@Il}R5HT^3%`nhi(bg_#t(wjD~{Bh!!AAaMpi9;vrdGjU28!1CzZ(Q78WUOLX{Ag zDl9;3n&U_=Rv?1=+#IyWxl9im(ndYe^)6 zTUdlWo|(to9o&5Sh0L5&;0I3JmgQOwb1SgLEg7D<7O4F&b`Uo_)F>7b<}kyNt)xLo zD0#yw+!EHh#7w6m-FE=->sbpB?4u1{P>#S2IMbVR=|Tu_eTy-}UUnSq(jiWK)ua&M zUws`J1d!{~>t38~QWzV7RHEK-#Gsc%P95%wS(Mb_Vj2=zXo#(9TM0W^iV_(nfp>i| z8E=F^(*87)P)d^goKQyLNX$2cexxS~x8N3TkF5s9YYh@WE|UvN6pUQZkq@OrYa`Or zx6CfQ=KEDNB?ux=zWCUiVZja`Xy zc3*=)>G)#!Dx(c|0AlFUVj!huRBAWNL=-@j7r{L&3amc1o3D8O34}WFYfOOWp5T2- zV+7a$64%tcBT1$wCLSZOG&axEEIn%G~DW^vQ+XzoG4LQW7q-3Cp1w4|}qgbX0 zSIX)uaInrEovvncx#y5-c`~#QBqT@6m?Lrw_H9#|A~ecwP5hN8c*3^g4yKmUxRs2? zFm6}8ll?HVF?@}~wtO@sPfp9mVgA}g!9i>*yf>VA{6a!?Dhpipj)d|)N~j-PTvzHM z%nY|6T*B^|em478ac`f~L<8pu_VM>MLO)8Eh?3h3Q4APr)&MKj;u%GR9&eWU*^0`n zEvpTxQLk*1aTv!_$+EQJd{0(CVNEd7qOT%N8aX`$F>n~2Se%6*GP{jJ@;isTN~+4# za`g=64t7J~x1wmvyPI<{L0?D&s0%gbT>h?;iv1lvk{3Y14E6FFwee=ZJ&c2 zW@I+0o4f7fu#3WOmMkUedl9E;rBKQNyj6v{x>!>Y^&ug(l5}FrYQS;!8(8W>@Rqs* zam>_|E;I2g{z3|}niCGS0wEWL4LQ#73nyk0xVIFPxp~MJ94F z#JI}b-S4Pk;_xv#4SLW zmU!F+C`qZjR0IUIEn#co9fiSZJg%o}rE#$ELyKiV4h9}6vUx{{e4@Mr0h6rhi%g1H z(u~b22(>_RzZyqI56OYGoJW8<3m|v!)fOUM1lSSZx8t}Im4`%>uigaIih##cfYYO! zj=0fVXWU;teFd2|_$VZ;oC+JheDgUrvR7GvauIv)$=F|Ts3aQpnIN*V8y7^Q>LE6? zq)bq}+C^oegASwCP>M2w|2lo(&X-y0_IY)8`LscfIWj@Ptg@pO?dg5DMKJ{n)|#N9 ze280BcD4m`v%*%IF{uNdfLN^tCwjsKN<|S9#J6C)!AQKQk%nxOIx?=oCdeA40wV2B zs>jTwuJ?1Fx;7o&OGQK)RAZj!R69*=A@zo3WzeW zuykfx7CgUJ#GmLY5oO`8U=O22t(sOcTanx6(`J#Z`C8FxRG~Zcap!XrI_Nv1N5f6X}acTIxmKh6l1XmOO5_5aB6Y^VRUIeX1iS5kzLD z#Z7d@IQ!UnbB3A5=&X%$hxq+S2AZ{K?TUN{Ub`$uv~M<%kpb85WQaSHP%I4F5v}}~TC!V!? z{!s741n=n5y$E~%@H>|ZO+7U42##SAgOIkwBtD9dloppTNNFe$|DouWNm ztl*5}>oWT?rGP$?6n6AkW_y z+@yHk*|8UaEw6v%6^O@EC?Ouhi%BW52Fx!oI9yPj7KVBhWok*>abFC3l8NB9uHW2s z>009If>AA&6I~NKofiWuU$0eVC_b9X$g2(9brh8K*#v+L5PTI{o}-zeK}8XI$ij-& zc9~ZYY@!O)m}eRsNwYip^ObwKAv;G9-uV|)Eiu7J@IiWgZ@+%b+j!4-$? zQPu*5s6{w)O9gKM@ZPdx4zxcJu+FW=^YrSwq-eSq8N(<|2=tKEsir~Vkn>6f<0`ZM z{0p-BaZ|_zS@6*}8h;2so;MB@aS48Yrpj#26+@+LS`f?pS`rq)EF{?(zl`)w1gVUq z0YhXD!h*zOgwQBEVRAv1Gwv^87qh>Zsui)jstBO8psF}kx5vPIQOapc{wFq zsTv=haS^iSu)Qw}U#<cTFG<*ZsB43;be%s>~}@6w6NrZZ0E-ZeohBP3&QXRBX zZvECBAeJ~Mn{Cgn%q5D*X1J2HL@COkWs_#?S5;gpa}MJq{N z)()L9bnLMguc1S#I(Dpa^Gucebf&|2f7qhuJV?ty*fREzqfDT#Loh5i5NpUuB9hvQ z)Ld=Xo4f7fuoEPU#PjWj51b0+vWpOq+YFSbR)ESDmPJd?l@PDz9(LjJL@f{inn`qM z-NMU;iezw=OZ2PeLr+0@p@$u3&6&>K1_!Aq;o6P9T6LzZ$_PnV;SNU7Gfy=M`ykvN za|BRaA}fcFqHQ(oR8j}tbYYqE{ktDve0W8*DzwfHL1H_{&F#j9o(bvSLyR*PO$aVD zF>GX=;Pu8xbEZc11Sjaxd&=-5Y+4ECh9r7)=Uo5MnliR_B9 zbR&a_W}SDCr~{2pK%M3Y0*YpZ2B%lIwDZ`2jpV+?y>X&Cx+-iD{Kzt#lkP({n1p87 zC+VHEods1%;#OO`DD#h|}Ncg3qoWaQT6EmocMg~CSZAn9td-ozD;U4ZHdwJ&{ z*?FWyug|9q0FmAtMWF2bTln3^&j{Q(&eHx??iqYFOAst+-zgJ^-tZXhB;Sl#V5D zq3HoxDy!AhNRwWU5a-;>ujm)WOv+N@Cnn>1YSt3e`2f=m4hLG0JQAE`6lNL1VKHXZ z5UnP~&de*4dK2#!t)@y{XU>x!IKE;o@K zp+y+(Fmm{$)MT#N696bhwAd^^POIjQ1igl&7at@-gmKT!ts3SW5fj`qs4}EYw{9#t zt4tyB+NzeGZ{#BP3=YEX>N5<@I~vxxBUu*(ETZ!FnC?5;_78XlHl&I8hXjk#icpa8 ztpU-(BA+>C8qUck?fy3ydt}VJqNiR=!dVNc;@vfaL2I6`8IOu2)r{PZ z;|>;Fq_jb~iF@^hG})MMN*1t>)t_cK)gzNf!k{WLWoRlhjSmM+%ed#HAwjti3#Q`% zu+hS-UMsNyr1^%#Ip-$i#i%4%_Z@!&pJE#|y+0$ct7Mg!?ck7rwx(mzJ6&>cyEj{elPd>Mm80a_<82-&=FbfV+589fpwY zE<~}=u-hNW3=L}V(MgNF`yH@MEqR1FCoJFz=uY&?o48T%z_96yZPN(8j& zh@l;WP<_bMl}h>8OhdvDc?7WRs@`H^rFg@q&WMRR!fQ_zqc#P0t+SPcA^ZKnm>oGFzw`ndSHi@}nhuW?SH%@}LjD0T3`Brh~QSQEF zr{29R1?u9dl-WWuY*kgi9JU9yQ=CElbNC70sS-mrEX2u|r7&5d=mv>o{LQaroZ+wSnaGhM}6Ph(C4RM|;*?mH7-z)-cFcTt*=4lN5u zKV>+Q<*{oQMK~ZF|z!hV$*)zoj zfw^bRU7e6D0cOBvyu9xoV-+K8qLuZlp{ztRqK2(cQ;YicaRnQb6+5+c3A>P(jI=8K z>;2_}Su&?U@CKwke0^N8G5i{bTD7ift;)74%BvwZrx9FwCKnkQm6;5T)f_}3KBw4= zRTs4#E%EA!Ek;SzNXe1cqpnmAHSQk2jwmTalteQ3!EyzXGYtd$%m5(~Rvh?%8}a)~ zGb<9feX6~j6^(4mXlvlK7?x_?o#qNdq^USJj>6Or#i+%W(xCSujzaj9BD(9ISi zKm#6lv}p05Q~;;3ClI|z6&cSw=`z$ItPmSl7oN(vBLZl}Xj4K7%$Sl^j6~lS8x`J7 zXWrmDzmO#oDS)rM;_SrG(Y{XU6P*CyZk?%HhcKFr%bJx4yy~)dOlG3@35a#RpleG{COe`2}@K1#4q>YcTd9}x1eZ%Mhum! z+P%qJ^dyN;SDS`%uZpiUnRqio--@|at?fiG+%d>$5_%ALV_|Ej1&C?WsQd5KD-D;1 zWcnl@Ps9Gyqkr{|zKcRNXP$cN<`k1d|ZSzvAvb=Z%R@GZKv_kM8mVRIHU> zc*y!O7dw%Ln3R-{*79s(cyN5HhdH8kaY%Wg8d7{7X2{htXah(Zds2tOoon!ri_(J( z+Qmj<4dNW0hrwknr!W$!de^5GGVAK6^LTkJ_Aehmpw!MB!K z!q=IQVK=$_5@SuQww~Ux)L?=dJ0mG3dO%5cPpM-Gd-IB;t$Fn}oBS(QrxA^jwwQolARtL&T}5#|1;JbdEf;Ef5NdZC%x;6zP{^Kjk;EZL zYt-bngV>{TRjDkPB7EScmF^uODX)>r(U>g{0U@A@d!|W71WYkRyo~_yxyhKDx4>Bx zv645Ngge)H?%p4^o|d~9tp}*K9WaP<89I;{$yX)iVorJbvJp+ASg}KC3=shE(4w$T zI$3gJ&%iR3m+|!<1eZ1UJ{y6E#=6E(IapEIA_%vc2wh1m6srUQZFVCv*QW>vUs-l2 zYF_^~;`7`+F@1X)&(NR9@MXZvz#9#7B^WxV8Fp^TDIG!P7Elyo0hNpyL__3#gTu+x z!|$|Q{La+`Oq4FDAcGKo1fU7kqM8#e2Y9-2 z3J(GuWaQCzBczJh_4~Cpm=g}lcMH;UFrcVBh+$g!k-I64Vd`H;+JA&C7+zC~+p@zu z3X|oDWs1^?SZV+B` zyO9tD2fu%b>(VVZ%%nFdiGWR_wE-8qd)s3I#LGBkZhFLiyE9cIun>!5Wq2DDr@&qt ze!J_&RhxYXzCig!6*h7AFSbmi=9~&GDxDIud3-uOuZ~{`3mUBy)s018t9B?m%wTeL z3(H)IBm^NmAc%6&2r#9{DB8UN%l=ke&&_HCmXJuv(4&4#tCKy ztv9EOHq4<#JH(=ZAZ2lDCdDxOk*9I@{5T$-9;OLs`n8ze^z|ySMBR$k8F+Rwy6RmN zlG-7M?V^RMdX)KHDdpwQ=uwJJylueO+py@OwI$3oDu8CB$^3?zBW_+#!e+J`v?mVm z5HXWpCjmI5V=htRs#Z7>%hkJw;SfMzrevUr!fgi^hB&Lu`lwSq>ZC3>>DsdY_!_1< z5dy^A)$?jQ*_K4~_}60$A$_<#Z6)-aVyRL*2cg!tEO2QO z^E+EkBXe1)5Wr^`=71LT8E>cJu6FIA-ges*eU^aA64t+BR436?pjZvhJxc>Enw$5+ zqDrF9H-tx+5ke8*hHRpcZ4ZTnh+}MP{;{hz`sv>+A_~vtN67JUR=N^i9?>FWDZ_8k zF)YYYf|`!-GH;46MzoiB98dX0WdVayy~`)?r3go8E2EL?G=gFp0aK;V+1aw}gBX+( zsa}P(qOAlv#>x#BHwns0@fYnA)FsVRQhdgOR{bFCXD(({3TMNhsF}xhVPbnN*5AxF z6rWYBHkt1<7@Js(Qi6Qt!7C;RV~d=xCxTcO0!ClF{gC8NUw#|E_`76Ru2HrltTrVA zOet*0xKo>=$ymavCdI=I2}7Z2YxtXwO1)Z6bJ9!+K|Kjaaq~0^YSYcmVW?w~niN>G zPXMO0yU5-PuGAen8Djf++T-Kn`SfzQq1LkmO?q=#4s2G(=`FatsfdwWT67d^t4=Vc zwB^R6`~IYZbXXa}>>@(N=w!lUVM|DaJW%;-PM6%r7Lph)Wao>C1V_nexN%U~x0zIq zuQCyG0d{<>hw@}D0fPwKYL~_a%YMW;3WNJ`lpB$F#=qhLhg`Z+GYuhVwE?$*+;$8S z{Mzv2NN-_T{Yj+s;V1!IX+{C}V3UENHZko8^|Cm~zx9^bf8(I2MQTTkh(BBpj)*+1 z+i=9Gja3HVZ_nFxeIU8{(KjSTK-CrO938s2l=4`!3!_?4JJt1go?clovAktms0zv` z`Vj_q$MN}<4U;j9KD?B-8R=arX|Yk2hcv=O^M@9-ed2Yw!vu%B>Tg8^Ax1<@SEhi~ zBgZ@%Pr#2O?JtZMG}pk8jWAefH8$W9BncUIqi+AjG|zZxRfFP3Ji@e=m;kC$9vGJw zBA^ery^s-*wb^1g?@R6U?d_%9fJoRgg&xGE#pHnN$5KQ#@4{x?xNSo)T)lC^_te)Q zY$h55GxAc~TEi)~!^anAHGQvBnUFmnNMzrG#2RwCe56i3(q8%mCiaYMM)li#_xOIL*DZIMwWuqZ}zkXmn7lx-5lScG;p zZ$=h(WG=q>RFIJ1O+4LHEX<8g_b8mz2}8sJU<%am6VsdmEjD9BPJvTC`N9_`1{ydS z%OEA4Wn$HgFFeKB6?M{CbUP2wlGSq=;^rdulGT@5iYcM&r}K?qN(SrUej9-R7|TDp~ThCrz0Ez8AO707)WM5^{7r#M9=9wgv`NV_8MVP z&sN-$h2~A*$;;I12RFcGemzPupfSsbXhaSCY!ZiwmUD^?v(AWBFRH|-{PBgc^T<_@ z;j2+^>{4s|)AEoaYh)e37_3En%#phDm*ll-omJ4HCn#A*ys4!PC!TLWcwoa!vEqZ- zsF0$v_lGTVvW;R&IO}$69j%8WY42&AkrVV%rGsot2u*vsWT42|B^wjh$O$JAYD|E< zWB~!}MEu>lEQ4J!3tElP8dX}_v`*d2>F-=5{96o77!gA!w%xCuhSS}{mHIIKRKsOm zI(1G5m{wlbMzeV3% zNJb*L^vI-w+>YZ8oeE;FD#MY81nEl{L(S(B63Mn7YZ0P@N96KWFTagnbV0%&@Nvao7o7W&#CvM!e+)t{H8)aq)~YRcqJs+$&OM z22erVoVorG5O>3_o?NwF2CpnJ^ID1M?^tWqAavhhunVc)ud1k3+bbDyZ#IJEBOV+T zMvlstyx;GJAC4=6y{u0Q@fm4YcD#ira<=6EU(OPw9AZecA$JeMAp{*&IT#P#L!;=# zLygG`c?8x2jKGOYsxoItGJsX-5d)iLQ4ql+BBUj+F>Ex#0<|TafYnH66q-ncZ|0$g z&xWN+^4lSi%g!WKb1jLpP(HxQq>v1dXg64Uk&;l&2tGV|xY07<^=KK?y0V31nvZ z{vrgNd3ngh#7vW6`i)U%WKKDeL#Y}cb3_g~AtYj*v$?fxL)vCaouhOg#U4FQ??E{A z2y!A!&mp@#U3*4I#03Uu*zr2?EVK}fh>!rr!fVS^V-W#*G9J=>1~mh(dyR z${tnoK2z_iK|ksGXv&((*lZhL#9#qr^5GfV)gUxQRiCeOXdZayvS3_V;7ngNlmO$X zLo8SF@_YkEXNgge0%d50pOF-nEShrI7@8ACOLKqu0M7I-@1BNzioAIFXLvIes-Mo6 zcdA9%8ot0acC4?TtON~+hS`fqN?#e%kV!@HY)^cku0cJ-dXm_BeMuDLfER5(wP?w~ zm0XYW%n-qrn1yZIlpF>UOJU+zKNR34CdI>!Re}*Lj&~p~kf6 zn$FS{EABUf@upG#uRu%%*@OsL`Ea=b?xCDct{aFd5`&8d!FL9jSoq+8jOIj(`|PTb zN2jQ1;TOU5uY#$2M&eh0i!g?=KA|_+jY%CF$i1dteq&s4>>x*N2k+^p*i?mP5g2*b zCL}cPd9k?o)-Ewk82ZZZyP2X_Vl83QcNo#fSkilT+P#102TLpi3BR!RmJf23)Ut zsnB@Zc!{&l&Gen3fYjX6$FU86aT2zcZNb4mDOY9X5baHR0SgH9_fB%4dzcJ~y@80AN$vqV!M-$kV-} zwMFq(%OYc?t&s(2@_S5#BU5fNbJt<$+VXA1vHUzSO@o26h6NA7DD)&aTy#~fAkj!f zJeL|8$vV)_SRevHnuiPwwjX5rLFZFNDL@iX$6*F48g)OS4xMi_9~4nM?^s^q&o+9s zg$JciSD4%9(*_pas99XwtVOWg!6{jzhbN5MX$mNCYz|(_-ujXX^((O(39ooH-iD~ASU5X-g@vuH*m}Kx`O7T46fn&QU}W#0iRJO{ z9m68EsQPJpELSft>-TmXchWOR2sKDVmAmae!;^3prN4-smX+>47$zCA6EO<)MRv+G z$ANAI9Z9nI%MuP>`xo1t`qLmqM%4LB+_C?V!%S&I`b%!L=SQq zYu-H#`&RsZ@*I+=Ta&mF6z3w-{eXFblVQCYr%&yQ;H5DZC??uAaIR~IsVQzyyg+J8 zEGZ=#`|W=9G@R}pic&oT5RJ6%!L7#J0ESUCB8#=#t%#ZeYh?E`3N{?oefRD3ls?s- z1w*qEG+j%}GdTTd!(}#_KF`O~us;dl=tE6Ktg3@_7AmhZ{uH*HHYP$+4ut+KT{o&) z7VdI|A%D~2HTrr5MaClxDgN7-{fQuWY3a`6@-Pblfg2Il7r=L%vt40z9Y}Qp{B|s; zO^I^S!PnmF1m7G#e2~z+!?1(`x!XTePyMwudhWB;)IkGCHB|b zO4n-c1j_xS;e9Bcc}|a@I8$VZtUUuFnw?s`VRDG`88&m%VL#0D_!{-xJ;_91Tb_s- zD!zIJ;>UzX={}lC_l=EdX2?eq)FFj7IMhXWs6ccWX~$GCFqe+&eX9sttLgv z3U7$I8h5?gSuJvYD2HK|S3(KAoOd$1gr>p)1A>lm=CvSZJQ+ZBAkDa#Z;(Y37pS z_W86yU2Mo6Ti8=dL+cDwQgY5=*WX_YCPWpDktvpnydsUg{2FGTb*)0G+-V^7-hJQ6 zCcAq9lB)`aRmE&pFmWKIV@}3N2G`f$Bz!ES1WjJ@-mkp?UjKxOm5l`fmWz}KS?dDr z0PZqxTg8D0b{)%Mu`8K)DV-_bi;ST<6kddP-X+*`#&L31Yqr3??!^(L`b`N30r*n=diXw3{u}JnL+Mc%mL!SEFT3 zPcn>JBA&x-yd4Q-zH3|q&nq4-m{sLAB-Tt*%Xnv6Y|^9vZJ~Via>Od3YW5x+@~{K3 zH3>-?(JnTI!jjbZL(xZ=#f4DRE9=s5)g{pzl?J!2Nc$2zj&p%EN3KO7wy-50;7}>M ztdioao5$oFiMxYy@B&MijWCwAMR63DxAF^locEolABvZ31C&9i1&YgqH2X;dOxELh Xdflhe@~i*;*RTFRuwkWReYXh!60nMg diff --git a/tools/probe/corpus/rows/L03OneRuleProbe.json.gz b/tools/probe/corpus/rows/L03OneRuleProbe.json.gz index 19c95f72bbfc6075796c59169ee4aaeb314d1b14..fffe2faabc07540c63e57a304f5e0ede8f1af873 100644 GIT binary patch delta 87 zcmV-d0I2_ts{zQX0kC^jO$0^{m_4d?yMevZ1WLCMqBOovGM7|Q$+45>RI&3!qwCNZ tNMrS}lC>FQetk!f#kHcE8AW-DD~u<9sdWG5|Ni?o{~sWPmf5|;3IH Date: Sun, 18 Oct 2026 08:20:10 +0200 Subject: [PATCH 09/15] test: KB-042, ASP.NET refuses a char's schema under WriteAsString, and C21's obligations do not apply there Triage step 2 of row 408 of C21OpenapiSchemaParityProbe (a validated class over char as a polymorphic derived property, json.MaxDepth=3 and json.NumberHandling=WriteAsString); it failed in three runs of `try` at 53050b7. AddTypeKit() refused the document with a JsonException reading an OpenApiJsonSchema, ASP.NET alone with MaxDepth's InvalidOperationException: two refusals that differ by type, which decision 108 makes a violation unless a sentence makes them intended. Neither is TypeKit's. ASP.NET builds each schema with System.Text.Json's exporter under the host's options and reads the node back as its own OpenApiJsonSchema; a char's schema is minLength and maxLength 1, which reach the reader as strings under WriteAsString. Measured in a host without TypeKit (KB042.cs, its fixture): a body holding a char is refused so, one holding an int is written, and so is a char under the default number handling. With MaxDepth left at its default, ASP.NET alone refuses row 408's document with this same JsonException; under MaxDepth=3 it meets the depth limit first at the twin's endpoint, where TypeKit asks for the char while it describes the value object's. So no document is written for a char under WriteAsString, by either host: each obligation of C21 declares the pair json.NumberHandling=WriteAsString x shape.wrapped=char inapplicable, citing fact:KB-042. No finding. Co-Authored-By: Claude Opus 5.5 --- ...schema-is-refused-under-write-as-string.md | 30 ++++++++ design/knowledge/README.md | 1 + test/CodoMetis.TypeKit.Facts/KB042.cs | 72 +++++++++++++++++++ .../KB042.fixture.json | 54 ++++++++++++++ tools/probe/corpus/claims.json | 55 ++++++++++++++ 5 files changed, 212 insertions(+) create mode 100644 design/knowledge/KB-042-a-char-schema-is-refused-under-write-as-string.md create mode 100644 test/CodoMetis.TypeKit.Facts/KB042.cs create mode 100644 test/CodoMetis.TypeKit.Facts/KB042.fixture.json diff --git a/design/knowledge/KB-042-a-char-schema-is-refused-under-write-as-string.md b/design/knowledge/KB-042-a-char-schema-is-refused-under-write-as-string.md new file mode 100644 index 00000000..f04120fa --- /dev/null +++ b/design/knowledge/KB-042-a-char-schema-is-refused-under-write-as-string.md @@ -0,0 +1,30 @@ +--- +verified: 2026-10-18 +pins: + - Microsoft.AspNetCore.OpenApi 10.0.12 + - sdk 10.0.4xx +source: the document Microsoft.AspNetCore.OpenApi writes for a minimal API whose body holds a char, and one whose body holds an int, under JsonNumberHandling.WriteAsString and the default number handling, measured in a host without TypeKit; ASP.NET Core 10's OpenApiSchemaService builds each schema with System.Text.Json's JsonSchemaExporter under the host's options and reads the node back as its own OpenApiJsonSchema, and a char's schema is the exporter's minLength and maxLength of 1 +turned-on: row 408 of C21OpenapiSchemaParityProbe (claim C21-openapi-schema-parity), under json.NumberHandling=WriteAsString with json.MaxDepth=3, where AddTypeKit() refused the document with this JsonException, asking for the char a value object wraps, and ASP.NET alone with MaxDepth's InvalidOperationException, met first at another endpoint +test: test/CodoMetis.TypeKit.Facts/KB042.cs +fixture: test/CodoMetis.TypeKit.Facts/KB042.fixture.json +--- + +# KB-042. Under `NumberHandling` with `WriteAsString`, ASP.NET refuses the OpenAPI document of an endpoint whose schema holds a `char` + +ASP.NET builds a schema with System.Text.Json's schema exporter, under the host's JSON options, and reads the node +back as its own `OpenApiJsonSchema`. A `char`'s schema is a string of `minLength` and `maxLength` 1. With +`JsonSerializerOptions.NumberHandling` set to `WriteAsString`, those two numbers reach the reader as strings, and +generating the document fails with a `JsonException`, "The JSON value could not be converted to OpenApiJsonSchema", +whose inner exception cannot read a string token as a number. A host without TypeKit does so for any endpoint +whose body holds a `char`. A number's schema is written under the same option, and a `char`'s under the default +number handling. + +| A minimal API's body of `Holder` | `NumberHandling = WriteAsString` | the default number handling | +|---|---|---| +| `T` is `char` | `JsonException`, the document is not written | `{"maxLength":1,"minLength":1,"type":"string","format":"char"}` | +| `T` is `int` | `{"pattern":"^-?(?:0\|[1-9]\\d*)$","type":["integer","string"],"format":"int32"}` | (not measured) | + +A value object over `char` is described with that same schema, asked of ASP.NET, so under this option its document +is refused as the wrapped type's is. Which of two refusals a document meets first follows the order ASP.NET visits +its endpoints and schemas in, so under a second refusing option (`MaxDepth`) a host with TypeKit, which asks for the +`char` while it describes the value object, can meet this one where ASP.NET alone meets the other. diff --git a/design/knowledge/README.md b/design/knowledge/README.md index c14f9f18..cdcad740 100644 --- a/design/knowledge/README.md +++ b/design/knowledge/README.md @@ -70,3 +70,4 @@ test and later for the harness's `Baseline.Fact`. | [KB-039](KB-039-sqlite-neither-compares-nor-orders-datetimeoffset-timespan-or-ulong.md) | EF Core's SQLite provider neither compares nor orders a `DateTimeOffset`, a `TimeSpan` or a `ulong`, and does both for a `decimal` | EF Core 10.0.12, its SQLite provider 10.0.12 | `KB039` | | [KB-040](KB-040-a-converter-is-charged-a-level-of-max-depth.md) | Under `MaxDepth`, System.Text.Json refuses a value a converter of one's own writes at the limit, where its own converter writes it | SDK 10.0.4xx | `KB040` | | [KB-041](KB-041-mvc-cannot-write-its-400-under-a-context-without-validation-problem-details.md) | MVC cannot write its automatic 400 under a source-generated context that does not list `ValidationProblemDetails` | SDK 10.0.4xx | `KB041` | +| [KB-042](KB-042-a-char-schema-is-refused-under-write-as-string.md) | Under `NumberHandling` with `WriteAsString`, ASP.NET refuses the OpenAPI document of an endpoint whose schema holds a `char` | OpenApi 10.0.12, SDK 10.0.4xx | `KB042` | diff --git a/test/CodoMetis.TypeKit.Facts/KB042.cs b/test/CodoMetis.TypeKit.Facts/KB042.cs new file mode 100644 index 00000000..df2524ba --- /dev/null +++ b/test/CodoMetis.TypeKit.Facts/KB042.cs @@ -0,0 +1,72 @@ +using System.Text.Json; +using System.Text.Json.Serialization; +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.TestHost; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Logging; + +namespace CodoMetis.TypeKit.Facts; + +///

+/// design/knowledge/KB-042: under JsonSerializerOptions.NumberHandling with WriteAsString, ASP.NET refuses the OpenAPI document of +/// an endpoint whose schema holds a char, with a JsonException reading the schema back as its OpenApiJsonSchema: the +/// exporter's minLength and maxLength of a char are written as strings. A number's schema is written, and so is a +/// char's under the default number handling. +/// +public sealed class KB042 +{ + public sealed class Holder + { + public T P { get; set; } = default!; + } + + private static readonly FactFixture Fixture = FactFixture.Beside("KB-042"); + + public static TheoryData Answers() => [.. Fixture.Answers.Select(answer => answer.Id)]; + + /// The document of a minimal API whose one endpoint takes a body of Holder<T> for the answer's type. + private static async Task DocumentAsync(IReadOnlyDictionary when) + { + var builder = WebApplication.CreateBuilder(new WebApplicationOptions { EnvironmentName = Environments.Production }); + builder.WebHost.UseTestServer(); + builder.Logging.ClearProviders(); + builder.Services.ConfigureHttpJsonOptions(options => + { + if (when["json.NumberHandling"] == "WriteAsString") options.SerializerOptions.NumberHandling = JsonNumberHandling.WriteAsString; + }); + builder.Services.AddOpenApi(); + + await using var app = builder.Build(); + _ = when["shape.wrapped"] switch + { + "char" => app.MapPost("/kb042", ([FromBody] Holder body) => Results.Ok()), + "int" => app.MapPost("/kb042", ([FromBody] Holder body) => Results.Ok()), + var other => throw new ArgumentOutOfRangeException(nameof(when), other, "the fixture's types are char and int"), + }; + app.MapOpenApi(); + await app.StartAsync(TestContext.Current.CancellationToken); + + var text = await app.GetTestClient().GetStringAsync("/openapi/v1.json", TestContext.Current.CancellationToken); + return JsonNode.Parse(text)!; + } + + /// Each answer of KB042.fixture.json: the document of a body holding the answer's type, under the number handling it names. + [Theory, MemberData(nameof(Answers))] + public async Task ASP_NET_writes_or_refuses_the_document_as_the_fixture_holds(string id) + { + var answer = Fixture[id]; + + if (answer.Kind == FactAnswer.Exception) + { + var thrown = await Should.ThrowAsync(() => DocumentAsync(answer.When)); + answer.Mismatch(thrown).ShouldBeNull(); + } + else + { + answer.Mismatch(await DocumentAsync(answer.When)).ShouldBeNull(); + } + } +} diff --git a/test/CodoMetis.TypeKit.Facts/KB042.fixture.json b/test/CodoMetis.TypeKit.Facts/KB042.fixture.json new file mode 100644 index 00000000..f24316c7 --- /dev/null +++ b/test/CodoMetis.TypeKit.Facts/KB042.fixture.json @@ -0,0 +1,54 @@ +{ + "fact": "KB-042", + "answers": [ + { + "id": "char-under-write-as-string", + "kind": "exception", + "when": { + "json.NumberHandling": "WriteAsString", + "shape.wrapped": "char" + }, + "value": { + "type": "System.Text.Json.JsonException", + "operation": "document", + "stage": "reading the char's schema back as ASP.NET's OpenApiJsonSchema", + "message": "could not be converted to OpenApiJsonSchema" + }, + "note": "a minimal API's body holding a char, under NumberHandling WriteAsString: the document is refused" + }, + { + "id": "char-by-default", + "kind": "document", + "when": { + "json.NumberHandling": "default", + "shape.wrapped": "char" + }, + "at": "/components/schemas/HolderOfchar/properties/p", + "value": { + "maxLength": 1, + "minLength": 1, + "type": "string", + "format": "char" + }, + "note": "the same body under the default number handling: written" + }, + { + "id": "int-under-write-as-string", + "kind": "document", + "when": { + "json.NumberHandling": "WriteAsString", + "shape.wrapped": "int" + }, + "at": "/components/schemas/HolderOfint/properties/p", + "value": { + "pattern": "^-?(?:0|[1-9]\\d*)$", + "type": [ + "integer", + "string" + ], + "format": "int32" + }, + "note": "a body holding an int under NumberHandling WriteAsString: written" + } + ] +} diff --git a/tools/probe/corpus/claims.json b/tools/probe/corpus/claims.json index 6d611b9f..ac082057 100644 --- a/tools/probe/corpus/claims.json +++ b/tools/probe/corpus/claims.json @@ -11689,6 +11689,17 @@ ] }, "cite": "record:0099" + }, + { + "axes": { + "json.NumberHandling": [ + "WriteAsString" + ], + "shape.wrapped": [ + "char" + ] + }, + "cite": "fact:KB-042" } ] }, @@ -11724,6 +11735,17 @@ ] }, "cite": "record:0099" + }, + { + "axes": { + "json.NumberHandling": [ + "WriteAsString" + ], + "shape.wrapped": [ + "char" + ] + }, + "cite": "fact:KB-042" } ] }, @@ -11763,6 +11785,17 @@ ] }, "cite": "record:0099" + }, + { + "axes": { + "json.NumberHandling": [ + "WriteAsString" + ], + "shape.wrapped": [ + "char" + ] + }, + "cite": "fact:KB-042" } ] }, @@ -11798,6 +11831,17 @@ ] }, "cite": "record:0099" + }, + { + "axes": { + "json.NumberHandling": [ + "WriteAsString" + ], + "shape.wrapped": [ + "char" + ] + }, + "cite": "fact:KB-042" } ] }, @@ -11834,6 +11878,17 @@ ] }, "cite": "record:0099" + }, + { + "axes": { + "json.NumberHandling": [ + "WriteAsString" + ], + "shape.wrapped": [ + "char" + ] + }, + "cite": "fact:KB-042" } ] } From 82756b9ffa3a61f40166b7fd27986a928482d310 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Gro=C3=9F?= Date: Sun, 18 Oct 2026 08:20:29 +0200 Subject: [PATCH 10/15] docs: C21 does not promise the twin's schema for an enum component's first-use null, a 2.0 nullable element, or a library's converter Triage step 3 of rows 196, 358 and 422 of C21OpenapiSchemaParityProbe, each failing in three runs of `try` at 53050b7; the harness cites the entries in the next commit. - Row 196 (a validated struct over an enum written by name, a polymorphic derived type's property): the twin's property refers to the enum's component, which lists null because ASP.NET met it first as a nullable use, on the host without TypeKit as well; the value object's property is not nullable there and its component lists no null. KB-027 (executable) says so for every use: "met first as a nullable parameter, the component lists null among its values, for its non-nullable uses too". The entry enum-component-is-its-first-use quotes the sentence about parameters only; enum-component-lists-the-null-of-its-first-use quotes this one. - Row 358 (a nullable validated struct over bool as a dictionary's value, OpenAPI 2.0): the value object's value is its component or null, which the 2.0 writer writes as allOf [{x-nullable: true}] without the reference (KB-026), where the twin's bool? keeps its type. The AspNetCore README said so of a property and named the element the component or null "as a nullable property is", but not that it loses its type under 2.0; it says so now, and openapi-2-nullable-element-loses-its-type quotes it. - Row 422 (a nullable record struct over NodaTime's Instant in a list, OpenAPI 3.0): ASP.NET drops the twin's items, since it cannot see through NodaTime's converter, on the host without TypeKit as well, and the value object's items are put back. The README said so of "a JSON converter you write yourself", which own-converter-for-the-wrapped-type quotes under json.Converters=own-for-wrapped only; it now says the same of a converter a library registers for its own type, and a-librarys-converter-for-the-wrapped-type quotes it for shape.wrapped=NodaTime.Instant. No finding. Co-Authored-By: Claude Opus 5.5 --- src/CodoMetis.TypeKit.AspNetCore/README.md | 8 ++-- tools/probe/corpus/claims.json | 44 ++++++++++++++++++++++ 2 files changed, 49 insertions(+), 3 deletions(-) diff --git a/src/CodoMetis.TypeKit.AspNetCore/README.md b/src/CodoMetis.TypeKit.AspNetCore/README.md index 58584d95..213386c2 100644 --- a/src/CodoMetis.TypeKit.AspNetCore/README.md +++ b/src/CodoMetis.TypeKit.AspNetCore/README.md @@ -118,8 +118,9 @@ element schema, so `Quantity` gets no component at all, and both parameters are OpenAPI 2.0 can't put null around a reference. ASP.NET writes a nullable property of any component as `{"allOf":[{"x-nullable":true}]}` there, without the reference. So under 2.0 a nullable value-object - property loses its type, where the underlying type's nullable property keeps it. Inline value objects - if your 2.0 document needs it. + property loses its type, where the underlying type's nullable property keeps it. A nullable element of + a list or a dictionary loses its type the same way, since it's the component or null too. Inline value + objects if your 2.0 document needs it. - **Put rules in `Create`, not on the property.** A validation attribute on a value-object property (`[MaxLength]`, `[Range]`) ends up in the value object's shared component, as ASP.NET does for any @@ -160,7 +161,8 @@ source-generated JSON can do, because the patch's converter hides the value obje **A described type.** ASP.NET can't see through a JSON converter you write yourself. It writes the type as `{}`, or with only the `format` its CLR type maps to. It also drops a list's `items` and a -dictionary's `additionalProperties` of that type. +dictionary's `additionalProperties` of that type. The same goes for a converter a library registers for +its own type, such as NodaTime's for `Instant`. Two things fix that, and the document then describes the type as they say: diff --git a/tools/probe/corpus/claims.json b/tools/probe/corpus/claims.json index ac082057..9da25734 100644 --- a/tools/probe/corpus/claims.json +++ b/tools/probe/corpus/claims.json @@ -11994,6 +11994,50 @@ "validated-class" ] } + }, + { + "id": "enum-component-lists-the-null-of-its-first-use", + "source": "design/knowledge/KB-027-an-enum-component-is-its-first-use.md#kb-027-the-component-aspnet-makes-for-an-enum-written-by-name-is-the-schema-of-the-first-use-it-meets", + "sentence": "What the component says is whatever schema ASP.NET built for the first use it met: met first as a nullable parameter, the component lists null among its values, for its non-nullable uses too; met first as itself, it does not, for its nullable uses too.", + "axes": { + "json.Converters": [ + "JsonStringEnumConverter" + ], + "shape.wrapped": [ + "enum" + ] + } + }, + { + "id": "openapi-2-nullable-element-loses-its-type", + "source": "src/CodoMetis.TypeKit.AspNetCore/README.md#what-the-document-says", + "sentence": "A nullable element of a list or a dictionary loses its type the same way, since it's the component or null too.", + "axes": { + "openapi.OpenApiVersion": [ + "OpenApi2_0" + ], + "openapi.CreateSchemaReferenceId": [ + "default", + "own-prefixing" + ], + "shape.position": [ + "list-element", + "array-element", + "immutable-array-element", + "read-only-list-element", + "dictionary-value" + ] + } + }, + { + "id": "a-librarys-converter-for-the-wrapped-type", + "source": "src/CodoMetis.TypeKit.AspNetCore/README.md#what-the-document-says", + "sentence": "The same goes for a converter a library registers for its own type, such as NodaTime's for `Instant`.", + "axes": { + "shape.wrapped": [ + "NodaTime.Instant" + ] + } } ], "exclude": [ From 2fab36804243894d8c626c46a1c195d1f557ef31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Gro=C3=9F?= Date: Sun, 18 Oct 2026 08:20:40 +0200 Subject: [PATCH 11/15] test: C21's schema comparison cites KB-026 after the null normalisation and for an element, and KB-027 and a library's converter for a property Triage of rows 196, 358, 386 and 422 of C21OpenapiSchemaParityProbe, each failing in three runs of `try` at 53050b7; with this commit each ends inapplicable with its citation in `try`. - Row 386 (triage 3, KB-026): a nullable validated struct over Uri as a required-init property, OpenAPI 2.0. The value object's property is the 2.0 null flag with the wrapped type's format beside it, the twin's Uri keeps its type. The harness cited openapi-2-nullable-component-loses- its-type only where side (1) wrote the same at the value object's path, before any normalisation; a nullable struct value object over a class had its null flag taken out by the spellings' normalisation first, which left only the missing type. It is now told by its structure: the format beside the null flag alone, and the twin's the same with its type. - Row 358 (triage 3): a dictionary's nullable value is the null flag alone under 2.0, where ASP.NET alone drops a converter-backed element, so side (1) has nothing there; told by its structure, it cites openapi-2-nullable-element-loses-its-type. - Row 196 (triage 3, KB-027): the branch that cites enum-component-is-its-first-use for a parameter now takes a property too, citing enum-component-lists-the-null-of-its-first-use, on the same evidence (the twin's enum is a resolved component, side (1) lists the same null). - Row 422 (triage 3): a list of Instant whose twin has no items, side (1) neither, cites a-librarys-converter-for-the-wrapped-type. Co-Authored-By: Claude Opus 5.5 --- tools/probe/corpus/harness/HttpBaseline.cs | 45 +++++++++++++++++++++- 1 file changed, 43 insertions(+), 2 deletions(-) diff --git a/tools/probe/corpus/harness/HttpBaseline.cs b/tools/probe/corpus/harness/HttpBaseline.cs index e394f233..14652931 100644 --- a/tools/probe/corpus/harness/HttpBaseline.cs +++ b/tools/probe/corpus/harness/HttpBaseline.cs @@ -504,6 +504,17 @@ static bool NullOrReference(JsonNode? n) => static bool OnlyTheNullFlag(JsonObject o) => o.Count == 1 && o["allOf"] is JsonArray { Count: 1 } all && all[0] is JsonObject { Count: 1 } flag && flag["x-nullable"]?.GetValueKind() == JsonValueKind.True; + /// + /// The OpenAPI 2.0 null flag with the wrapped type's format beside it and nothing else, {"format":"uri","allOf":[{"x-nullable":true}]}: + /// a nullable component's property, which TypeKit gives the wrapped type's format (KB-026). + /// + static bool TheNullFlagBeside(JsonObject o) => + o.ContainsKey("format") && o.Count == 2 && OnlyTheNullFlag(new JsonObject { ["allOf"] = o["allOf"]?.DeepClone() }); + + /// A copy of the object without the key. + static JsonObject Without(JsonObject o, string key) => + new(o.Where(kv => kv.Key != key).Select(kv => KeyValuePair.Create(kv.Key, kv.Value?.DeepClone()))); + /// /// A body whose schema is its format and its null alone, {"schema": {"format": "int32", "allOf": [{"x-nullable": true}]}}, or its null /// alone where the type has no format, anywhere in an operation: told by its structure (KB-001). @@ -678,6 +689,23 @@ string Inputs(JsonNode op) // shows it: without TypeKit, ASP.NET writes the value object's position at the same path the same, where the twin has nothing. if (openApi2 && d.P is null && d.V is not null && At(vo1, d.Keys) is { } same1 && JsonNode.DeepEquals(same1, At(vo3, d.Keys))) { c.Inapplicable(Cite.NotPromised("openapi-2-nullable-component-loses-its-type"), d.Path); continue; } + // The same, where the spellings of the null were normalised above, which takes the null flag out of the value object's + // schema and leaves it without the type the 2.0 writer dropped with the reference (row 386 of C21, a nullable struct value + // object over Uri as a required-init property): told by its structure, the value object's schema there is the wrapped type's + // format beside the null flag alone, and the twin's is the same with its type. + if (openApi2 && d.Keys is [.., "properties", _, "type"] && d.P is not null && d.V is null + && At(vo3, d.Keys.SkipLast(1)) is JsonObject flagged3 && TheNullFlagBeside(flagged3) + && At(JsonNode.Parse(Sig(doc, po)), d.Keys.SkipLast(1)) is JsonObject typed2 + && JsonNode.DeepEquals(Hx.NoNull(Without(typed2, "type")), Hx.NoNull(flagged3))) + { c.Inapplicable(Cite.NotPromised("openapi-2-nullable-component-loses-its-type"), d.Path); continue; } + // AspNetCore README "What the document says": a nullable element is the component or null, as a nullable property is, which + // OpenAPI 2.0 writes as allOf [{x-nullable: true}] without the reference (not-promised openapi-2-nullable-element-loses-its-type; + // row 358 of C21, a dictionary's value). ASP.NET alone drops a converter-backed element, so side (1) has nothing there; told by + // its structure, the value object's element is the null flag alone where the twin's admits null. + if (openApi2 && d.Keys is [.., "items" or "additionalProperties", "allOf"] && d.P is null + && At(vo3, d.Keys.SkipLast(1)) is JsonObject element3 && OnlyTheNullFlag(element3) + && At(JsonNode.Parse(Sig(doc, po)), d.Keys.SkipLast(1)) is JsonObject element2 && element2["x-nullable"]?.GetValueKind() == JsonValueKind.True) + { c.Inapplicable(Cite.NotPromised("openapi-2-nullable-element-loses-its-type"), d.Path); continue; } // KB-001: OpenAPI 2.0 writes a nullable body of the wrapped value type as its format and allOf [{x-nullable: true}] alone (the // null alone where it has no format, an enum), where a class value object's body in a minimal API is not nullable and keeps its // schema (not-promised openapi-2-nullable-body-keeps-only-its-null; row 257, and rows 113 and 282 over TimeOnly and char). Side (1) @@ -693,11 +721,24 @@ string Inputs(JsonNode op) // parameter lists null through E's component where E was first met nullable; the value object's parameter is the enum's // content without it wherever the enum is a component (not-promised enum-component-is-its-first-use; row 285 of C21). Side (1) // shows it: without TypeKit, the twin's parameter lists the same null, through the same resolved component. - if (d.Keys is ["parameters", .., "enum"] && d.P is JsonArray we && d.V is JsonArray ve && we.Count == ve.Count + 1 && we[^1] is null + // The same component met first as a nullable use lists that null for a property too, the twin's non-nullable one included + // (not-promised enum-component-lists-the-null-of-its-first-use; row 196 of C21, a polymorphic derived type's property). + if (d.Keys is [.., "enum"] && d.P is JsonArray we && d.V is JsonArray ve && we.Count == ve.Count + 1 && we[^1] is null && JsonNode.DeepEquals(new JsonArray(we.Take(ve.Count).Select(x => x?.DeepClone()).ToArray()), ve) && At(JsonNode.Parse(Sig(doc, po)), d.Keys.SkipLast(1)) is JsonObject held && held.ContainsKey(Hx.ResolvedReference) && At(twin1, d.Keys) is { } listed1 && JsonNode.DeepEquals(listed1, d.P)) - { c.Inapplicable(Cite.NotPromised("enum-component-is-its-first-use"), vp); continue; } + { + if (d.Keys is ["parameters", ..]) c.Inapplicable(Cite.NotPromised("enum-component-is-its-first-use"), vp); + else c.Inapplicable(Cite.NotPromised("enum-component-lists-the-null-of-its-first-use"), vp); + continue; + } + // AspNetCore README "A described type": ASP.NET cannot see through a converter it did not write, one a library registers for + // its own type among them, and drops a list's items and a dictionary's additionalProperties of that type, where the value + // object's element is put back (not-promised a-librarys-converter-for-the-wrapped-type; row 422 of C21, a list of Instant?). + // Side (1) shows it: without TypeKit, the twin's container has no element schema either. + if (e.Wrapped == "NodaTime.Instant" && d.Keys is [.., "items" or "additionalProperties"] && d.P is null && d.V is not null + && twin1 is not null && At(twin1, d.Keys.SkipLast(1)) is JsonObject container1 && !container1.ContainsKey(d.Keys[^1])) + { c.Inapplicable(Cite.NotPromised("a-librarys-converter-for-the-wrapped-type"), d.Path); continue; } return $"schema differs for {pp} vs {vp} at {FirstDifference(JsonNode.Parse(sp), JsonNode.Parse(sv), "$")}:\n wrapped {Cut(sp)}\n value object {Cut(sv)}"; } } From ec7a4f903e6221d2abcf776198d7ed3744498724 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Gro=C3=9F?= Date: Sun, 18 Oct 2026 09:23:21 +0200 Subject: [PATCH 12/15] test: C21 compares schemas under the media types both bodies list where MVC's formatters decide them, and tells KB-026 by the null flag beside a format With F4's fix applied (its own pull request, fix/component-keeps-null), `try` of all of C21OpenapiSchemaParityProbe failed rows 38, 178, 181 and 243; each now passes or cites, and so does the whole probe. - Row 38 (triage 1): with the null in place, the next difference was the MVC body's media types: the value object's lists application/xml, text/xml and application/*+xml, the twin's does not. Under mvc.InputFormatters=xml-added, XmlSerializerInputFormatter reads the sealed record class value object and not the Uri it wraps; ASP.NET alone, with both sides' endpoints, lists the same for each side. The harness compared which media types MVC's formatters accept for two .NET types, which the claim does not speak to. Where side (1) lists each side's media types as the document does, the schemas are now compared under the media types both list; otherwise as before, so a media type lost to TypeKit still fails. - Rows 178, 181 and 243 (triage 3, KB-026, openapi-2-nullable-component- loses-its-type): class value objects over long, bool and int whose property admits null as a type parameter's or set through the constructor, OpenAPI 2.0. With F4's null around the reference, the 2.0 writer writes the property as allOf [{x-nullable: true}] beside the wrapped type's format, without the type and pattern the twin keeps, as the AspNetCore README says. The branch row 386 needed is told the same way for any content the writer drops: the value object's property is the null flag, alone or beside a format, and the twin's admits null with the same format. Co-Authored-By: Claude Opus 5.5 --- tools/probe/corpus/harness/HttpBaseline.cs | 53 ++++++++++++++++++---- 1 file changed, 43 insertions(+), 10 deletions(-) diff --git a/tools/probe/corpus/harness/HttpBaseline.cs b/tools/probe/corpus/harness/HttpBaseline.cs index 14652931..c6fd9068 100644 --- a/tools/probe/corpus/harness/HttpBaseline.cs +++ b/tools/probe/corpus/harness/HttpBaseline.cs @@ -511,9 +511,13 @@ static bool OnlyTheNullFlag(JsonObject o) => static bool TheNullFlagBeside(JsonObject o) => o.ContainsKey("format") && o.Count == 2 && OnlyTheNullFlag(new JsonObject { ["allOf"] = o["allOf"]?.DeepClone() }); - /// A copy of the object without the key. - static JsonObject Without(JsonObject o, string key) => - new(o.Where(kv => kv.Key != key).Select(kv => KeyValuePair.Create(kv.Key, kv.Value?.DeepClone()))); + /// The keys of a difference up to the property it lies in (…, properties, P), or null where it lies in none. + static IReadOnlyList? PropertyAt(IReadOnlyList keys) + { + for (var i = keys.Count - 2; i >= 0; i--) + if (keys[i] == "properties") return [.. keys.Take(i + 2)]; + return null; + } /// /// A body whose schema is its format and its null alone, {"schema": {"format": "int32", "allOf": [{"x-nullable": true}]}}, or its null @@ -586,6 +590,23 @@ string Sig(JsonNode d, JsonNode op) o["ok"] = Schemas(Hx.Deep(d, op["responses"]?["200"], mark: true)); return o.ToJsonString(); } + // The media types of an operation's request body and 200 response, each named by where it is + static HashSet MediaTypes(JsonNode op) => + [ + .. (op["requestBody"]?["content"] as JsonObject ?? []).Select(kv => "requestBody:" + kv.Key), + .. (op["responses"]?["200"]?["content"] as JsonObject ?? []).Select(kv => "ok:" + kv.Key), + ]; + // A signature with only the request body's and the 200 response's media types given + static string UnderMediaTypes(string sig, IEnumerable media) + { + var keep = media.ToHashSet(); + var o = JsonNode.Parse(sig)!.AsObject(); + foreach (var (part, name) in new[] { ("requestBody", "requestBody"), ("ok", "ok") }) + if (o[part]?["content"] is JsonObject content) + foreach (var key in content.Select(kv => kv.Key).ToList()) + if (!keep.Contains(name + ":" + key)) content.Remove(key); + return o.ToJsonString(); + } var checks = new List<(string, string)>(); if (Hx.HasMinimal(r)) { checks.Add((Hx.M(r, "/schema/plain"), Hx.M(r, "/schema/vo"))); } if (Hx.HasMvc(r)) @@ -649,6 +670,17 @@ string Inputs(JsonNode op) continue; } var sp = Sig(doc, po); var sv = Sig(doc, vo); + // MVC lists a body's and a response's media types by what its formatters can read and write of the .NET type, and the twin + // and the value object are two types (row 38 of C21: XmlSerializerInputFormatter reads a record class value object, not the + // Uri it wraps). Where the lists differ and side (1), ASP.NET alone with both sides' endpoints, lists each side's the same, + // the formatters decided it, not TypeKit: the schemas are compared under the media types both list. Otherwise as they are. + if (MediaTypes(po) is var mp && MediaTypes(vo) is var mv && !mp.SetEquals(mv) + && await Document(alone) is { } both0 && Op(both0, pp, method) is { } pAlone && Op(both0, vp, method) is { } vAlone + && MediaTypes(pAlone).SetEquals(mp) && MediaTypes(vAlone).SetEquals(mv)) + { + r.Log.AppendLine($"{pp} vs {vp}: media types the formatters list differ alike without TypeKit, compared under [{string.Join(", ", mp.Intersect(mv))}]"); + sp = UnderMediaTypes(sp, mp.Intersect(mv)); sv = UnderMediaTypes(sv, mp.Intersect(mv)); + } if (NullAroundReferences(sp, sv) is var (np, nv, around)) { sp = np; sv = nv; if (around) c.Note(NoteKeys.SchemaNullAroundReferenceNormalised); } if (sp != sv && Make.AdmitsNull(e.Vo) && Make.AdmitsNull(e.Plain) && e.Vo.IsValueType != e.Plain.IsValueType) { @@ -690,13 +722,14 @@ string Inputs(JsonNode op) if (openApi2 && d.P is null && d.V is not null && At(vo1, d.Keys) is { } same1 && JsonNode.DeepEquals(same1, At(vo3, d.Keys))) { c.Inapplicable(Cite.NotPromised("openapi-2-nullable-component-loses-its-type"), d.Path); continue; } // The same, where the spellings of the null were normalised above, which takes the null flag out of the value object's - // schema and leaves it without the type the 2.0 writer dropped with the reference (row 386 of C21, a nullable struct value - // object over Uri as a required-init property): told by its structure, the value object's schema there is the wrapped type's - // format beside the null flag alone, and the twin's is the same with its type. - if (openApi2 && d.Keys is [.., "properties", _, "type"] && d.P is not null && d.V is null - && At(vo3, d.Keys.SkipLast(1)) is JsonObject flagged3 && TheNullFlagBeside(flagged3) - && At(JsonNode.Parse(Sig(doc, po)), d.Keys.SkipLast(1)) is JsonObject typed2 - && JsonNode.DeepEquals(Hx.NoNull(Without(typed2, "type")), Hx.NoNull(flagged3))) + // schema and leaves it without what the 2.0 writer dropped with the reference: its type, its pattern (rows 386, 178, 181 + // and 243 of C21: a nullable struct value object over Uri as a required-init property, and class value objects whose + // property admits null as a type parameter's or set through the constructor). Told by its structure: the value object's + // property is the null flag, alone or beside the wrapped type's format, and the twin's, which admits null, has that format. + if (openApi2 && PropertyAt(d.Keys) is { } property + && At(vo3, property) is JsonObject flagged3 && (TheNullFlagBeside(flagged3) || OnlyTheNullFlag(flagged3)) + && At(JsonNode.Parse(Sig(doc, po)), property) is JsonObject typed2 && typed2["x-nullable"]?.GetValueKind() == JsonValueKind.True + && JsonNode.DeepEquals(typed2["format"], flagged3["format"])) { c.Inapplicable(Cite.NotPromised("openapi-2-nullable-component-loses-its-type"), d.Path); continue; } // AspNetCore README "What the document says": a nullable element is the component or null, as a nullable property is, which // OpenAPI 2.0 writes as allOf [{x-nullable: true}] without the reference (not-promised openapi-2-nullable-element-loses-its-type; From 7565175f5a86265ec930cfb0d6583352a7633779 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Gro=C3=9F?= Date: Sun, 18 Oct 2026 09:23:21 +0200 Subject: [PATCH 13/15] test: rows for C21's last uncovered pairs, and KB-026 told where the twin is a component itself `prober status` after a replay of the http family, with F4's fix applied: C21 had 13,677 of its 13,716 wanted pairs current, 39 uncovered. `rows --claim C21-openapi-schema-parity` proposed 14 rows, 5 of them the same as stored rows that earned nothing: under json.MaxDepth=3 both hosts refuse the document (409, 426, 430), a record class bound from an MVC form is inconclusive (411), and two nullable arrays ASP.NET names as one component (425). In each proposed row the axes no target pair names were set apart from those: json.MaxDepth and openapi.CreateSchemaReferenceId to their defaults, an own-record-class's form binding to the body, and the array's nullability to as-declared. The 14 are appended as rows 435 to 448. Row 444 (triage 3, KB-026): a validated class over a record class as a property, OpenAPI 2.0. The value object's property is the null flag alone; the twin's is the record class's component, whose reference ASP.NET's own rule leaves without a null, where the value object admits one (decision 36). The structural KB-026 branch now takes a twin that is a resolved component beside one that admits null. `try` of all 449 rows: pass 292, expected-refusal 112, inapplicable 26, inconclusive 19, no violation. Co-Authored-By: Claude Opus 5.5 --- tools/probe/corpus/harness/HttpBaseline.cs | 6 +++++- .../rows/C21OpenapiSchemaParityProbe.json.gz | Bin 25822 -> 26430 bytes 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/tools/probe/corpus/harness/HttpBaseline.cs b/tools/probe/corpus/harness/HttpBaseline.cs index c6fd9068..73c0cdf6 100644 --- a/tools/probe/corpus/harness/HttpBaseline.cs +++ b/tools/probe/corpus/harness/HttpBaseline.cs @@ -728,7 +728,11 @@ string Inputs(JsonNode op) // property is the null flag, alone or beside the wrapped type's format, and the twin's, which admits null, has that format. if (openApi2 && PropertyAt(d.Keys) is { } property && At(vo3, property) is JsonObject flagged3 && (TheNullFlagBeside(flagged3) || OnlyTheNullFlag(flagged3)) - && At(JsonNode.Parse(Sig(doc, po)), property) is JsonObject typed2 && typed2["x-nullable"]?.GetValueKind() == JsonValueKind.True + && At(JsonNode.Parse(Sig(doc, po)), property) is JsonObject typed2 + && (typed2["x-nullable"]?.GetValueKind() == JsonValueKind.True + // or the twin is a component itself (a wrapped record class, row 444 of C21), whose reference ASP.NET's own rule + // leaves without the null the value object admits (decision 36: a-nullable-value-object-admits-null) + || typed2.ContainsKey(Hx.ResolvedReference) && Make.AdmitsNull(e.Vo)) && JsonNode.DeepEquals(typed2["format"], flagged3["format"])) { c.Inapplicable(Cite.NotPromised("openapi-2-nullable-component-loses-its-type"), d.Path); continue; } // AspNetCore README "What the document says": a nullable element is the component or null, as a nullable property is, which diff --git a/tools/probe/corpus/rows/C21OpenapiSchemaParityProbe.json.gz b/tools/probe/corpus/rows/C21OpenapiSchemaParityProbe.json.gz index e4b9daae8ae74f484e121db28e01dfc6838c1caf..1202268d354bc3b7a10b51d3e0c21a04015661a2 100644 GIT binary patch delta 642 zcmV-|0)747$pOC30kFzse-l>uu&?$ZcpXMqOc&O%sZ`QzytF2VTDfEt ze5G#Ld|6H7YLyt<4k1ow_hvgzMy%V%)%x^&l|+0-QB>LZk-i)-er*zgz*bU6Eo3ma zhgLH2qO~zx)>?0uApp$bzwU~5EmVMW1vpoLa|Jk8fO7>nSAg?;e{?91wvn7GBFA0v zf}J_4fmN84wN?XvX9`zpSf)PYE|IB$bJ5j_yjpZMFzQa(JLlrWc%z2hTBfk*GKJdg zTPqc6r9!P#U_8+-u1sM@VrjYnyJGd*i66GSEtx6(7Op1m@zOUf)GL)F4r z+kDGloT`Wn+!2?zf2KG2$P2?rMq#Yx&>5LdWymPpj8Bi;rr-AC!VJqi^Kb&QiaIoe z&T-~nH!BPcm9cBK)`3){Z3>*-RlZ$Lrex%!sOE;G<-l2pSO4W;*9 zJoUvLgKJL6!WFmlm9wQJZtT7}O;!NHx(>b^yZs}Q0Q*n4N~M>|i_FTdAlL|7vqu>rC2PP(Rj}jY*TDiQT0IO4BqG#& zm^Q7OKsd{jm#D>IGiJDrRaV!lnqt|Ta}^|PYfF%dl&x)nRWhJz1SMzfjG>OF+hN$? zrF?QkSWU!7c=8%sU^URv@r=YV+p4w{TVk!syWH(?yw4bavL$JwN3uQD27=l^P#Xwp z13_&dsIi`9H4xwy0!0#&{Sz-xl%c0vUZMq;X)45XERl6VL6Ac9NNJJc>MT~rhpMKh c;vrGcF}FW?pZ?+h{P#cne^)&H>)Z0kFzs6jNOJ@IU;Y|Ne*n57O>2w6nep01(*`P5=M^ From 562c36745ffef9c26d9f7acb26466aee94595d3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Gro=C3=9F?= Date: Sun, 18 Oct 2026 09:23:21 +0200 Subject: [PATCH 14/15] test: C21's obligations do not apply to a wrapped record class under MaxDepth=3, and rows for its last 12 pairs `prober gate --since v2.1.0` after `replay --all` with F4's fix applied: 45 probes passed, C21 had 12 of its 13,716 wanted pairs uncovered, from rows 436, 440, 443 and 446 of the previous commit, which earned nothing. - json.MaxDepth=3 x shape.wrapped=own-record-class: every one of the 26 stored rows that holds the pair ends as ASP.NET alone refusing the document (the schema exporter's MaxDepth InvalidOperationException, at every position and host) or inconclusive; none can compare a document. Each obligation declares the pair inapplicable, citing record 0099, as it does json.ReferenceHandler=Preserve. - The other 11 pairs get five rows (449 to 453), each from `rows --claim` with the axes its target pairs do not name set where the document compares like with like: json.MaxDepth at its default; an own record class or an Instant as declared, not nullable, since F4 has a nullable value object admit the null its twin's component lacks (decision 36); a struct value object over a record class made a validated class with everything inlined, since a struct over a class has no twin at its nullability; a list of Instant on the host with controllers alone, whose minimal schema endpoint drops the twin's items (not-promised a-librarys-converter-for-the-wrapped-type); bodies rather than a query for a record class, which ASP.NET binds by its properties. `try` of rows 449 to 453: 5 pass. Co-Authored-By: Claude Opus 5.5 --- tools/probe/corpus/claims.json | 55 ++++++++++++++++++ .../rows/C21OpenapiSchemaParityProbe.json.gz | Bin 26430 -> 26676 bytes 2 files changed, 55 insertions(+) diff --git a/tools/probe/corpus/claims.json b/tools/probe/corpus/claims.json index 9da25734..301b96a8 100644 --- a/tools/probe/corpus/claims.json +++ b/tools/probe/corpus/claims.json @@ -11700,6 +11700,17 @@ ] }, "cite": "fact:KB-042" + }, + { + "axes": { + "json.MaxDepth": [ + "3" + ], + "shape.wrapped": [ + "own-record-class" + ] + }, + "cite": "record:0099" } ] }, @@ -11746,6 +11757,17 @@ ] }, "cite": "fact:KB-042" + }, + { + "axes": { + "json.MaxDepth": [ + "3" + ], + "shape.wrapped": [ + "own-record-class" + ] + }, + "cite": "record:0099" } ] }, @@ -11796,6 +11818,17 @@ ] }, "cite": "fact:KB-042" + }, + { + "axes": { + "json.MaxDepth": [ + "3" + ], + "shape.wrapped": [ + "own-record-class" + ] + }, + "cite": "record:0099" } ] }, @@ -11842,6 +11875,17 @@ ] }, "cite": "fact:KB-042" + }, + { + "axes": { + "json.MaxDepth": [ + "3" + ], + "shape.wrapped": [ + "own-record-class" + ] + }, + "cite": "record:0099" } ] }, @@ -11889,6 +11933,17 @@ ] }, "cite": "fact:KB-042" + }, + { + "axes": { + "json.MaxDepth": [ + "3" + ], + "shape.wrapped": [ + "own-record-class" + ] + }, + "cite": "record:0099" } ] } diff --git a/tools/probe/corpus/rows/C21OpenapiSchemaParityProbe.json.gz b/tools/probe/corpus/rows/C21OpenapiSchemaParityProbe.json.gz index 1202268d354bc3b7a10b51d3e0c21a04015661a2..bdcf9ef2f675be0cd198515da3b86c6f3def7b56 100644 GIT binary patch delta 25029 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 delta 24743 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�=wj_&d_ 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

BgG7A!Ey_ArTo0=Q5&9?%l(W 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 From 60de568eb86b8188cdc793273f79b4829f685bb4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Gro=C3=9F?= Date: Sun, 18 Oct 2026 09:23:38 +0200 Subject: [PATCH 15/15] docs: the roadmap's 2.2.0 gate item is done `prober gate --since v2.1.0` passes on probes alone, with no waiver: after `replay --all` from an empty PROBE_STATE_DIR with F4's fix applied (its own pull request), "44 claim(s) touched and fully covered, every probe replayed and passing, no open finding". The item "Grow the probe corpus until `prober gate` passes" goes, and so does the WS2 item's list of what the harness left the gate (C12, C13, C16 and C21's document-only pairs, C22's footprint), which this pull request answered. The roadmap holds what is open. Co-Authored-By: Claude Opus 5.5 --- design/roadmap.md | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/design/roadmap.md b/design/roadmap.md index 1729c070..716f8ba0 100644 --- a/design/roadmap.md +++ b/design/roadmap.md @@ -11,12 +11,8 @@ refusal may relax in any minor version; an Error that reports more waits for a m ([decision 97](adr/0097-2-2-0-is-a-consolidation-release-and-the-gate-binds.md)). Any gap below that is a defect, a cost or a missing guard may land here; one that adds surface waits for 2.3.0. -- Grow the probe corpus until `prober gate` passes on probes and reviewed waivers alone. Every claim - touched since v2.1.0 is covered pairwise, and no finding is open. - The probing harness (WS2 of the agentic issue-finding concept) is done - ([decision 108](adr/0108-a-probe-check-earns-credit-against-a-baseline-and-ws2-closes.md)). What it leaves the gate: the pairs of C12, C13, C16 and C21 that only a document - ASP.NET alone refuses had credited (a declaration of the document obligations' inapplicability under - `json.ReferenceHandler=Preserve` and `json.MaxDepth=3`, and rows for the rest), and C22's empty footprint. + ([decision 108](adr/0108-a-probe-check-earns-credit-against-a-baseline-and-ws2-closes.md)). WS3 (beyond pairs), WS4 (the mutation nightly), the second half of WS5 (the finder benchmark at equal budgets) and WS6 (PostgreSQL in CI) were dropped on 2026-10-17 by the maintainer's decision, and are not scheduled. - The generated-surface snapshot under "Generators" below.