Skip to content

chore(ci): close two pin gaps found by #945 — Playwright ignore was a no-op, OWLSharp major breaks the build - #947

Merged
jsboige merged 1 commit into
masterfrom
chore/945-pin-gaps
Jul 26, 2026
Merged

chore(ci): close two pin gaps found by #945 — Playwright ignore was a no-op, OWLSharp major breaks the build#947
jsboige merged 1 commit into
masterfrom
chore/945-pin-gaps

Conversation

@jsboige

@jsboige jsboige commented Jul 26, 2026

Copy link
Copy Markdown
Contributor

Ce que #945 a mesuré sur la politique elle-même

#941 (le premier groupe nuget) a été superseded par dependabot lui-mêmeSuperseded by #944, puis #945. Ma note « ne la fermez pas pour faire propre » a été postée 3 minutes après que dependabot l'avait déjà fermée : j'ai écrit une consigne de procédure sans re-vérifier l'état de la PR. La règle « lire avant d'agir » vaut aussi pour l'état, pas seulement pour le corps.

#945 régénère le groupe, et il est utile pour une raison qui n'était pas prévue : il traverse deux épingles que #943 croyait avoir posées.

1. L'épingle Playwright était décorative — trouvée par po-2024, confirmée firsthand

- dependency-name: "Microsoft.Playwright"
  update-types: ["version-update:semver-major"]   # ne peut JAMAIS se déclencher

Microsoft.Playwright n'a jamais quitté la ligne 1.x (1.0 → 1.61 en juillet 2026). Un semver-major n'existe pas pour ce paquet. #945 a donc proposé 1.43.0 → 1.61.0 en tant que MINOR, et le filtre l'a laissé passer — exactement le bump que l'épingle prétendait empêcher.

La leçon est réutilisable, et elle vaut plus que le correctif : une entrée ignore ne vaut que le schéma de versionnage du paquet. « Ignorer les majeures » ne protège de rien sur un projet qui ne bumpe jamais sa majeure. Le crédit va à la review po-2024 sur #945 ; j'ai vérifié contre le delta de paquets de la PR avant de corriger.

→ Playwright passe en ALL update types, comme QuestPDF.

2. OWLSharp 4→5 casse le build — et c'est le « merit test » que j'avais différé

#942/#943 laissait OWLSharp délibérément non épinglé : « Apache-2.0, aucun risque licence, un major à tester sur ses mérites après le tag ». #945 a fait le test.

10 erreurs de compilation, toutes dans Ontology/OwlAdapter.cs (run 30212821456) :

CS1503: cannot convert from 'RDFSharp.Model.RDFResource'
                        to 'OWLSharp.Ontology.OWLNamedIndividual'

SKOSHelper (using OWLSharp.Extensions.SKOS) a changé ses signatures en 5.0.0. Les cinq points de contact sont enveloppés de try/catch avec fallback par scan d'annotations — mais ces catch gardent l'exécution, pas la compilation : le build n'atteint jamais les 638 tests.

Épinglé en semver-major, et la migration est ouverte comme #946 avec son DoD (régénérer l'OWL et retrouver 1 408 concepts / 59,9 % crosslinks / 5,07 Mo ; conserver les fallbacks ; retirer l'ignore dans la même PR). L'épingle est le corollaire du travail planifié, pas un moyen d'éteindre un build rouge — la barre d'admission en tête du fichier reste respectée : la décision est citée, et elle est datée d'aujourd'hui.

3. Deux choses délibérément non modifiées

dotNetRdf reste non épinglé. La review de po-2024 attribuait le blocage à dotNetRdf 3.3.2 → 3.5.2. Re-mesuré : c'est faux. dotNetRdf fournit VDS.RDF (parsing, utilisé ailleurs dans le même fichier), son bump est un minor, et RDFSharp.RDFResource est le type que notre code passe, pas celui qui a bougé. L'épingler aurait été un sur-épinglage acheté sur une mauvaise attribution.

SkiaSharp garde semver-major seulement. #945 a livré 2.88.6 → 2.88.9, un patch dans la ligne 2.88.x contre laquelle QuestPDF 2022.12.12 se lie. C'est l'épingle qui fonctionne, pas une fuite. Un commentaire le dit dans le fichier, pour que personne ne « corrige » ce cas par analogie avec Playwright : les deux diffèrent par le versionnage du paquet, pas par notre intention.

4. Les labels nuget / npm / vendored n'existaient pas

Ce fichier les référence depuis #910 ; ils n'existaient pas dans le dépôt. Dependabot postait donc « The following labels could not be found » sur chacune des 27 PR ouvertes. Les trois labels sont créés ; noté dans l'en-tête pour qu'on ne les supprime pas sans éditer la config.

Vérifications

  • yaml.safe_load : 29 blocs updates préservés (aucun bloc npm touché)
  • Liste ignore nuget résultante : AutoMapper (majeures) · QuestPDF (ALL) · SkiaSharp (majeures) · Playwright (ALL) · OWLSharp (majeures) · OWLSharp.Extensions (majeures)
  • schemastore dependabot-2.0 : valid
  • Diff = 1 fichier, +40/−1. Aucun code, aucun CSV, aucun workflow.

Disposition de #945

Ne pas merger : build rouge, et la cause est #946. Laissée ouverte — dependabot régénérera le groupe sans OWLSharp ni Playwright au prochain passage, et le tout-venant sain (Newtonsoft 13.0.4, PdfPig 0.1.15, CsvHelper 33, Spectre 0.57, xunit 2.9.3…) redeviendra mergeable une fois le major hors du lot.

Refs #942, #945, #946

🤖 Coordinator ai-01

… no-op, OWLSharp major breaks the build

The first grouped nuget PR under the #910 policy (#941) was superseded by dependabot
itself with #945, and #945 is the measurement that shows two defects in the pin list
merged as #943.

1. The Microsoft.Playwright entry was `update-types: ["version-update:semver-major"]`,
   which is a NO-OP for that package: it has never left the 1.x line (1.0 -> 1.61), so a
   semver-major update cannot fire. #945 proposed 1.43.0 -> 1.61.0 as a MINOR and the
   filter let it through. Found by po-2024's review on #945, confirmed firsthand against
   the PR's package delta. Now pinned on ALL update types, like QuestPDF.
   An ignore entry is only as strong as the package's versioning scheme.

2. OWLSharp / OWLSharp.Extensions 4.x -> 5.x breaks the build: 10 compile errors, all in
   Ontology/OwlAdapter.cs, all `RDFResource` -> `OWLNamedIndividual` (SKOSHelper changed
   its signatures). The try/catch fallbacks around those five call sites guard runtime,
   not compile, so the build never reaches the 638 tests. OWLSharp was deliberately left
   unpinned as "a major to test on its merits after the tag"; #945 ran that test and the
   answer is "needs an API migration", now issue #946 with its DoD. The pin is the
   corollary of that scheduled work, not a way to silence a red build.

Also recorded, both deliberately NOT changed:
- dotNetRdf stays unpinned. The #945 review first attributed the OwlAdapter break to
  dotNetRdf 3.3.2 -> 3.5.2; re-measured, that is wrong (VDS.RDF is used elsewhere in the
  file, the bump is a minor, and RDFSharp.RDFResource is the type our code passes, not the
  one that moved). Pinning it would have been an over-pin bought on a mis-attribution.
- SkiaSharp keeps major-only. #945 delivered 2.88.6 -> 2.88.9, a patch inside the 2.88.x
  line QuestPDF 2022.12.12 links against — the pin working as intended, not a leak.

Labels nuget / npm / vendored created in the repo: they were referenced by this file but
did not exist, so dependabot posted a "labels could not be found" comment on all 27 open
PRs. Noted in the header so they are not deleted without editing the config.

Refs #942, #945, #946

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@jsboige jsboige added dependencies Pull requests that update a dependency file nuget NuGet / .NET dependency updates labels Jul 26, 2026
@jsboige
jsboige merged commit 59d7047 into master Jul 26, 2026
3 checks passed
@jsboige
jsboige deleted the chore/945-pin-gaps branch July 26, 2026 23:20
jsboige added a commit that referenced this pull request Jul 27, 2026
…publish (#951) (#953)

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) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file nuget NuGet / .NET dependency updates

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant