From 57d5987eee948b638809afe017a0a765c165d7f9 Mon Sep 17 00:00:00 2001 From: jsboige Date: Mon, 27 Jul 2026 05:23:07 +0200 Subject: [PATCH] =?UTF-8?q?chore(ci):=20pin=20Humanizer=20against=20majors?= =?UTF-8?q?=20=E2=80=94=20v3=20renames=20the=20OWL=20IRIs=20we=20publish?= =?UTF-8?q?=20(#951)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit MEASURED on #949 (run 89854763158, `build (Release)`): 643 tests, 636 passed, 2 failed, and the two failures are exactly the GetId contract guards -- VirtueOwlGenerationContractTests.GetId_StripsApostrophesHyphensCommas [40 ms] OwlGetIdPureContractTests.FrenchFallacyName_ProducesFragment_AccentsPreserved [1 ms] Both assert GetId("Appel a l'autorite") == "appelALautorite" (accents preserved); both pass on master, verified locally 10/10 on the filtered run. GetId is Camelize plus a Replace chain, so Humanizer IS the transform, and v3 is a declared breaking major -- upstream ships a Roslyn analyzer for its own namespace migration. Why this outranks "two red tests": those fragments are the identity of the published ontology (1 408 fallacy IRIs, 223 virtue IRIs). A silent Camelize change renames every accented term's IRI on the next regeneration -- green build, no diff in our code, broken external consumers (#133 publication, CoursIA import). Same shape as the licence findings already in this file, one axis over: a package can change identity-bearing OUTPUT with nothing announcing it. Majors only, and here that filter is NOT the no-op it was for Playwright (#947): Humanizer's break sits on the major boundary. The shared rule is that the right update-types depends on where the package puts its break -- measure, don't copy. The pin carries its deferred work, per the admission bar at the top of this file: issue #951 holds the v3 migration and the prior question of whether published IRIs may change at all, which is jsboige's call, not ours. Refs #951, #949, #911, #133 Co-Authored-By: Claude Opus 5 (1M context) --- .github/dependabot.yml | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index dbc2b97b..0fca001b 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -106,6 +106,32 @@ updates: update-types: ["version-update:semver-major"] - dependency-name: "OWLSharp.Extensions" update-types: ["version-update:semver-major"] + # Humanizer 2.14.1 -> 3.0.10 changes the OWL IRI fragments we PUBLISH. MEASURED on #949 + # (run 89854763158, `build (Release)`): 643 tests, 636 passed, 2 failed, both of them the + # GetId contract tests, and nothing else -- + # VirtueOwlGenerationContractTests.GetId_StripsApostrophesHyphensCommas [40 ms] + # OwlGetIdPureContractTests.FrenchFallacyName_ProducesFragment_AccentsPreserved [1 ms] + # Both assert GetId("Appel à l'autorité") == "appelÀLautorité"; both pass on master + # (verified locally 2026-07-27, 10/10 on the filtered run). `GetId` is `Camelize` plus a + # Replace chain, i.e. Humanizer IS the transform -- and v3 is a declared breaking major + # (its own release notes ship a Roslyn analyzer for the "v3 namespace migration"). + # + # Why this is more than a red test: those fragments are the IDENTITY of the published + # ontology -- 1 408 fallacy IRIs in docs/ontology/argumentum.owl and 223 virtue IRIs in + # argumentum_virtues.owl are built by this function. A silent Camelize change renames + # every accented term's IRI on the next regeneration, breaking external consumers + # (#133 publication, the CoursIA import) with a green build and no diff in our own code. + # Same shape as the licence findings above, one axis over: a package can change + # identity-bearing OUTPUT without any tool announcing it. + # + # Majors only -- and here that filter is NOT the no-op it was for Playwright: Humanizer's + # break IS at the major boundary (2.x -> 3.x). The general rule the two cases share is + # that the right filter depends on where the package puts its break, so measure the + # package's versioning before choosing the update-types. + # Deferred work this pin accompanies: issue #951 (deliberate v3 migration + an explicit + # decision on whether published IRIs may change, which is jsboige's, not ours). + - dependency-name: "Humanizer" + update-types: ["version-update:semver-major"] # NOT pinned, on purpose: dotNetRdf. The #945 review first attributed the OwlAdapter # break to dotNetRdf 3.3.2 -> 3.5.2; re-measured, that is wrong. dotNetRdf supplies # VDS.RDF (parsing, used elsewhere in the same file), its bump is a MINOR, and