From 9a3d223aafa2c34c4cd815ec5355a0bed7338310 Mon Sep 17 00:00:00 2001 From: David Baker Effendi Date: Tue, 1 Sep 2026 15:32:32 +0200 Subject: [PATCH] Retire the published semantic-pack cases Both cases have errored on every run since the v0.9.1 bundle stopped being reachable, and `errors == 0` is a freeze gate, so the development freeze path could not produce a clean run. Republishing the bundle was tried first and was not enough. The artifact is recoverable byte-for-byte -- it is archived at `BrokkAi/bifrost` under the asset-only tag `semantic-packs-v0.9.1`, hashing to the `a01cb3d7...` the cases pinned -- but with the download repaired the next gate rejects it: verify semantic-pack release bundle: unsupported release bundle schema 1 v0.10.8 requires release-bundle schema 2 on exact equality, and checks the generator identity immediately after, so the v0.9.1 packs cannot be consumed by any current pin regardless of where they are hosted. Keeping them would have meant re-authoring both cases against a schema-2 bundle: new bundle, artifact, and semantic hashes, plus fresh content-addressed `bifrost-model://` expectation URIs derived from them. That is re-authoring reviewed ground truth, not repairing it. The published-pack surface was a casualty of the open-core migration rather than a contract the corpus still needs, so the two documents and their fixtures are retired instead. The harness keeps its semantic-pack support: the schema, the document model, and the runner path are untouched, so a schema-2 pack case can be authored later without rebuilding any of it. The legacy cohort already skipped these documents as postdating the frozen 158-case inventory, so no promotion or cohort artifact moves. The corpus goes from 61 documents to 59, 232 authored cases to 230, 226 planned to 224. `requested_totals_cover_the_full_authored_corpus` caught the change and is updated to match. The evidence map drops its semantic-pack counts, and its generator now omits the clause entirely rather than reporting zero of something. Closes #180 Co-Authored-By: Claude Opus 5 --- .../cases/java-semantic-packs-v0.9.1.yaml | 43 ------------------- .../cases/scala-semantic-packs-v0.9.1.yaml | 43 ------------------- docs/src/content/docs/results/evidence.md | 4 +- docs/src/data/evidence.json | 6 +-- fixtures/java/semantic-packs/src/Main.java | 5 --- fixtures/scala/semantic-packs/src/Main.scala | 5 --- scripts/generate-docs-evidence.py | 26 ++++++++++- src/runners/bifrost.rs | 6 +-- 8 files changed, 32 insertions(+), 106 deletions(-) delete mode 100644 benchmarks/cases/java-semantic-packs-v0.9.1.yaml delete mode 100644 benchmarks/cases/scala-semantic-packs-v0.9.1.yaml delete mode 100644 fixtures/java/semantic-packs/src/Main.java delete mode 100644 fixtures/scala/semantic-packs/src/Main.scala diff --git a/benchmarks/cases/java-semantic-packs-v0.9.1.yaml b/benchmarks/cases/java-semantic-packs-v0.9.1.yaml deleted file mode 100644 index 3081846..0000000 --- a/benchmarks/cases/java-semantic-packs-v0.9.1.yaml +++ /dev/null @@ -1,43 +0,0 @@ -schemaVersion: 2 -corpus: { partition: development, selection: analyzer_informed } -groundTruth: { status: author_reviewed, reviewers: [DavidBakerEffendi] } -referencePolicy: bindings_optional -positionEncoding: utf-16 -source: { kind: fixture, path: fixtures/java/semantic-packs } -language: java -semanticPacks: - releaseVersion: 0.9.1 - bundleUrl: https://github.com/BrokkAi/bifrost/releases/download/v0.9.1/bifrost-semantic-packs-v0.9.1.tar.gz - bundleSha256: a01cb3d7651ec95ad65c157647db243464f7fd10d14cde9e5262b626fc372f9b - evidence: - - language: java - ecosystem: jdk - module: { name: java.base } - toolchain: { name: jdk, version: 21.0.8 } - target: jvm - artifactSha256: 5440baccc6c54b18671ab9cb9bf6ffdd7698d3a85ee74faa0b47b111312f200c - expectedPacks: - - packId: bifrost.jdk - packVersion: 21.0.8 - semanticSha256: f8fe5aa74028ad2c274c32c963a63137ae40b5a041ce47130e4f627bd998c504 - completeness: partial - probes: - - symbol: java.util.ArrayList - ancestor: java.util.AbstractList - - symbol: java.util.ArrayList.size - signatureContains: size -cases: - - id: java-published-pack-array-list-navigation - usageLookups: - - operation: definition - usage: - location: { uri: benchmark://source/src/Main.java, range: { start: { line: 3, character: 18 }, end: { line: 3, character: 27 } } } - kind: class - displayName: ArrayList - expectedDeclaration: - location: { uri: bifrost-model://v1/f8fe5aa74028ad2c274c32c963a63137ae40b5a041ce47130e4f627bd998c504/type/type.7085c38223effc81cafbf18bb7c08e2c08004f151a9a78b87c25e3e65e3664b4, range: { start: { line: 0, character: 0 }, end: { line: 0, character: 0 } } } - kind: class - displayName: java.util.ArrayList - verification: - method: manual_inspection - notes: Exact v0.9.1 release artifact, digest, coordinate, pack version, semantic digest, and stable ArrayList record identity reviewed on 2026-08-11. diff --git a/benchmarks/cases/scala-semantic-packs-v0.9.1.yaml b/benchmarks/cases/scala-semantic-packs-v0.9.1.yaml deleted file mode 100644 index c4403d6..0000000 --- a/benchmarks/cases/scala-semantic-packs-v0.9.1.yaml +++ /dev/null @@ -1,43 +0,0 @@ -schemaVersion: 2 -corpus: { partition: development, selection: analyzer_informed } -groundTruth: { status: author_reviewed, reviewers: [DavidBakerEffendi] } -referencePolicy: bindings_optional -positionEncoding: utf-16 -source: { kind: fixture, path: fixtures/scala/semantic-packs } -language: scala -semanticPacks: - releaseVersion: 0.9.1 - bundleUrl: https://github.com/BrokkAi/bifrost/releases/download/v0.9.1/bifrost-semantic-packs-v0.9.1.tar.gz - bundleSha256: a01cb3d7651ec95ad65c157647db243464f7fd10d14cde9e5262b626fc372f9b - evidence: - - language: scala - ecosystem: maven - package: { name: org.scala-lang:scala-library, version: 2.13.16 } - toolchain: { name: scala, version: 2.13.16 } - target: jvm - artifactSha256: c02edc324e7db59c52115214a6ef36e2d78d0a50dff635eda4dcee5502b1dea5 - expectedPacks: - - packId: bifrost.scala-library - packVersion: 2.13.16 - semanticSha256: 87053e06f21f3bda4652f4391978c7839e58c9ec28172a5ee65e654b82b37e94 - completeness: complete - probes: - - symbol: scala.collection.immutable.List - ancestor: scala.collection.immutable.LinearSeq - - symbol: scala.collection.LinearSeqOps.head - signatureContains: head -cases: - - id: scala-published-pack-list-navigation - usageLookups: - - operation: definition - usage: - location: { uri: benchmark://source/src/Main.scala, range: { start: { line: 3, character: 26 }, end: { line: 3, character: 30 } } } - kind: type - displayName: List - expectedDeclaration: - location: { uri: bifrost-model://v1/87053e06f21f3bda4652f4391978c7839e58c9ec28172a5ee65e654b82b37e94/type/type.265e98b629a501e7c6db842e4eb77821f0e3bc373faa3ceabb6aae21620a537f, range: { start: { line: 0, character: 0 }, end: { line: 0, character: 0 } } } - kind: type - displayName: scala.collection.immutable.List - verification: - method: manual_inspection - notes: Exact v0.9.1 release artifact, digest, coordinate, pack version, semantic digest, and stable List record identity reviewed on 2026-08-11. diff --git a/docs/src/content/docs/results/evidence.md b/docs/src/content/docs/results/evidence.md index a57f691..f24d95a 100644 --- a/docs/src/content/docs/results/evidence.md +++ b/docs/src/content/docs/results/evidence.md @@ -32,7 +32,7 @@ Each profile remains visible before any aggregate. The numbers here are selected ## Reviewed legacy boundaries -The immutable promotion is `legacy-promotion-v1-balanced-core`. Its balanced core is **110 cases**, with **42 overflow** candidates and **6 controls** kept outside the correctness denominator. The source-only legacy inventory contains 158 cases; the remaining development corpus also contains 2 semantic-pack cases that were never part of that inventory. +The immutable promotion is `legacy-promotion-v1-balanced-core`. Its balanced core is **110 cases**, with **42 overflow** candidates and **6 controls** kept outside the correctness denominator. The source-only legacy inventory contains 158 cases. | Language | Balanced-core cases | | --- | ---: | @@ -60,7 +60,7 @@ The entries below are derived only from checksum-verified release bundles. The g ## Remaining development evidence -The checked-in development corpus contains **160 cases**. The reviewed legacy core accounts for 110; the 50 cases outside that core comprise 42 frozen overflow candidates, 6 unsupported/not-planned controls, and 2 semantic-pack cases. This remainder is retained for regression and diagnosis; it is not silently added to v1, v2, or the legacy denominator. +The checked-in development corpus contains **158 cases**. The reviewed legacy core accounts for 110; the 48 cases outside that core comprise 42 frozen overflow candidates and 6 unsupported/not-planned controls. This remainder is retained for regression and diagnosis; it is not silently added to v1, v2, or the legacy denominator. ## Publication safeguards diff --git a/docs/src/data/evidence.json b/docs/src/data/evidence.json index 3af5452..b509bc3 100644 --- a/docs/src/data/evidence.json +++ b/docs/src/data/evidence.json @@ -1,12 +1,12 @@ { "development": { "balancedCoreCases": 110, - "caseCount": 160, + "caseCount": 158, "controlCases": 6, "legacyInventoryCases": 158, "overflowCases": 42, - "remainingCases": 50, - "semanticPackCases": 2 + "remainingCases": 48, + "semanticPackCases": 0 }, "generatedBy": "scripts/generate-docs-evidence.py", "guardrails": [ diff --git a/fixtures/java/semantic-packs/src/Main.java b/fixtures/java/semantic-packs/src/Main.java deleted file mode 100644 index c06af32..0000000 --- a/fixtures/java/semantic-packs/src/Main.java +++ /dev/null @@ -1,5 +0,0 @@ -import java.util.ArrayList; - -final class Main { - private final ArrayList values = new ArrayList<>(); -} diff --git a/fixtures/scala/semantic-packs/src/Main.scala b/fixtures/scala/semantic-packs/src/Main.scala deleted file mode 100644 index 1f12dda..0000000 --- a/fixtures/scala/semantic-packs/src/Main.scala +++ /dev/null @@ -1,5 +0,0 @@ -import scala.collection.immutable.List - -object Main { - val values: List[Int] = List(1, 2, 3) -} diff --git a/scripts/generate-docs-evidence.py b/scripts/generate-docs-evidence.py index c2a107d..405d0e1 100644 --- a/scripts/generate-docs-evidence.py +++ b/scripts/generate-docs-evidence.py @@ -393,6 +393,28 @@ def development_case_ids() -> list[str]: return ids +def _semantic_pack_clause(development: dict[str, Any]) -> str: + """Mention semantic-pack cases only while the corpus carries any. + + The category is empty once the published v0.9.1 packs are retired, and a + sentence that reports zero of something reads as an oversight rather than a + boundary. + """ + + count = development["semanticPackCases"] + if not count: + return "" + return ( + f" The remaining development corpus also contains {count} semantic-pack " + "cases that were never part of that inventory." + ) + + +def _semantic_pack_tail(development: dict[str, Any]) -> str: + count = development["semanticPackCases"] + return f", and {count} semantic-pack cases" if count else "" + + def build_legacy(bundles: dict[str, dict[str, Any]]) -> dict[str, Any]: # The published legacy result is the authority for this slice, so the map # describes the manifest that snapshot was frozen under, not the one the @@ -564,7 +586,7 @@ def markdown(data: dict[str, Any]) -> str: "", "## Reviewed legacy boundaries", "", - f"The immutable promotion is `{legacy['promotionId']}`. Its balanced core is **{legacy['caseCount']} cases**, with **{legacy['overflowCases']} overflow** candidates and **{legacy['controlCases']} controls** kept outside the correctness denominator. The source-only legacy inventory contains {legacy['inventoryCases']} cases; the remaining development corpus also contains {development['semanticPackCases']} semantic-pack cases that were never part of that inventory.", + f"The immutable promotion is `{legacy['promotionId']}`. Its balanced core is **{legacy['caseCount']} cases**, with **{legacy['overflowCases']} overflow** candidates and **{legacy['controlCases']} controls** kept outside the correctness denominator. The source-only legacy inventory contains {legacy['inventoryCases']} cases.{_semantic_pack_clause(development)}", "", "| Language | Balanced-core cases |", "| --- | ---: |", @@ -603,7 +625,7 @@ def markdown(data: dict[str, Any]) -> str: "", "## Remaining development evidence", "", - f"The checked-in development corpus contains **{development['caseCount']} cases**. The reviewed legacy core accounts for {development['balancedCoreCases']}; the {development['remainingCases']} cases outside that core comprise {development['overflowCases']} frozen overflow candidates, {development['controlCases']} unsupported/not-planned controls, and {development['semanticPackCases']} semantic-pack cases. This remainder is retained for regression and diagnosis; it is not silently added to v1, v2, or the legacy denominator.", + f"The checked-in development corpus contains **{development['caseCount']} cases**. The reviewed legacy core accounts for {development['balancedCoreCases']}; the {development['remainingCases']} cases outside that core comprise {development['overflowCases']} frozen overflow candidates and {development['controlCases']} unsupported/not-planned controls{_semantic_pack_tail(development)}. This remainder is retained for regression and diagnosis; it is not silently added to v1, v2, or the legacy denominator.", "", "## Publication safeguards", "", diff --git a/src/runners/bifrost.rs b/src/runners/bifrost.rs index 4f9cd17..e3957e2 100644 --- a/src/runners/bifrost.rs +++ b/src/runners/bifrost.rs @@ -2979,9 +2979,9 @@ mod tests { let totals = requested_run_totals(documents.iter().map(|(_, document)| document), false, None); - assert_eq!(totals.documents, 61); - assert_eq!(totals.authored_cases, 232); - assert_eq!(totals.planned_cases, 226); + assert_eq!(totals.documents, 59); + assert_eq!(totals.authored_cases, 230); + assert_eq!(totals.planned_cases, 224); assert_eq!( totals.development_planned_cases + totals.evaluation_planned_cases, totals.planned_cases