Skip to content

DUR041 carries the real state of conformance coverage - #270

Merged
gplanchat merged 2 commits into
mainfrom
docs/dur041-etat-reel
Sep 3, 2026
Merged

DUR041 carries the real state of conformance coverage#270
gplanchat merged 2 commits into
mainfrom
docs/dur041-etat-reel

Conversation

@gplanchat

@gplanchat gplanchat commented Sep 3, 2026

Copy link
Copy Markdown
Owner

Text only — one ADR and one docblock. No behaviour, no test changed; the 134 conformance tests pass, unchanged.

What was false

DUR041 describes two arrangements in the present tense although they were never written:

The Temporal adapters answer to a live server and belong to the integration suite; they run this tier there, not in unit.

Temporal's read-through store gets checked for the first time.

Neither TemporalJournalEventStore, nor TemporalReadThroughEventStore, nor TemporalWorkflowRunCatalog extends a conformance suite. No tier runs against them — not the port tier, not the replay tier, not in unit, not in integration.

The docblock of EventStoreReplayConformanceTestCase repeated the same statement ("an adapter backed by a server — both Temporal stores — only extends EventStoreConformanceTestCase"), so a reader who checks the ADR against the code lands on the same claim and concludes it is true.

What was not false

The status said "implemented for all four ports". That is accurate: all four ports do have their suite. What was missing is that adapter coverage is a different question, and that nothing in the ADR gave it.

And a pair only exists if the backend implements the port. Temporal implements two out of fourEventStoreInterface (twice) and WorkflowRunCatalogInterface. WorkflowMetadataStore and ChildWorkflowParentLinkStoreInterface have no Temporal implementation, as the ADR's context table already says with dashes: those are not gaps.

The real state, now in the ADR

Port Memory DBAL Illuminate Temporal
EventStoreInterface two tiers two tiers two tiers implemented twice, runs nothing
WorkflowMetadataStore runs runs runs not implemented
ChildWorkflowParentLinkStoreInterface runs runs runs not implemented
WorkflowRunCatalogInterface runs runs runs implemented, runs nothing

Twelve pairs exist and are covered, two exist and are not — the two Temporal ones, the only backend whose storage shape differs from the reference. The three covered backends share a journal and a table: the parity they prove is the one that was never in doubt. The suite is proven where it was free and unproven where it matters, which is the opposite of what the ADR set out to do.

The shape of the correction

The two faulty sentences are kept and annotated, not rewritten. They state the decision, which holds: splitting into two classes is sound, and an adapter backed by a server should indeed extend only the port tier. It is the present tense that did not hold. One observation is worth keeping as is:

A bridge that runs neither half was not anticipated by the split, and that is precisely the oversight it was meant to make visible. The declaration was never made, so there was nothing to notice.

Follow-up

Filling the two pairs is the subject of #269 (backend-data-parity), whose §5 writes them and whose §5.3 adds a CI job that fails on a missing pair — so the grid does not end up incomplete a second time without anyone seeing it.

… décrivait

DUR041 décrit deux dispositions comme acquises alors qu'elles n'ont jamais été
écrites : « The Temporal adapters ... run this tier there » et « Temporal's
read-through store gets checked for the first time ». Ni TemporalJournalEventStore,
ni TemporalReadThroughEventStore, ni TemporalWorkflowRunCatalog n'étend une suite de
conformité — aucun palier ne s'exécute contre eux.

Le statut disait « implemented for all four ports ». C'est vrai des ports : les quatre
ont bien leur suite. Ça laissait croire à une couverture qui n'existe pas côté
adaptateurs, d'où un tableau de couverture explicite.

Une paire n'existe que si le backend implémente le port : Temporal en implémente deux
sur quatre, donc WorkflowMetadataStore et ChildWorkflowParentLinkStore ne sont pas des
trous. Douze paires existent et sont couvertes, deux existent et ne le sont pas — les
deux Temporal, le seul backend dont la forme de stockage diffère de la référence.

Les deux phrases fautives sont conservées et annotées plutôt que réécrites : elles
disent la décision, qui tient. C'est le présent de l'indicatif qui ne tenait pas.

Le docbloc d'EventStoreReplayConformanceTestCase reprenait le même énoncé faux ; il est
corrigé au même endroit, sinon le lecteur qui vérifie l'ADR retombe dessus.

134 tests de conformité verts, inchangés : ce commit ne touche que du texte.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
gplanchat added a commit that referenced this pull request Sep 3, 2026
Le décompte était faux. Une paire n'existe que si le backend implémente le port, et
Temporal en implémente deux sur quatre : EventStoreInterface (deux fois) et
WorkflowRunCatalogInterface. WorkflowMetadataStore et ChildWorkflowParentLinkStore n'ont
pas d'implémentation Temporal — ce ne sont pas des trous, et le tableau de contexte de
DUR041 le disait déjà avec des tirets.

Douze paires existent et sont couvertes, deux existent et ne le sont pas. La §5.1 écrit
donc deux sous-classes, pas quatre, et le job de 5.3 ne compte pas une paire qui n'existe
pas.

Corrige aussi l'attribution : « implemented for all four ports » est exact des ports. Ce
qui était faux, ce sont les deux phrases au présent de l'indicatif sur les adaptateurs
Temporal. Reprises en #270, d'où les §6.1 et 6.2 cochées.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@gplanchat
gplanchat enabled auto-merge September 3, 2026 20:49
@gplanchat
gplanchat merged commit 949cf87 into main Sep 3, 2026
34 checks passed
@gplanchat
gplanchat deleted the docs/dur041-etat-reel branch September 3, 2026 21:00
@gplanchat gplanchat changed the title DUR041 porte l'état réel de la couverture de conformité DUR041 carries the real state of conformance coverage Sep 4, 2026
5mehulhelp5 pushed a commit to 5mehulhelp5/durable-dev that referenced this pull request Sep 4, 2026
…n/audit/

Vingt relectures indépendantes du cœur, du bundle Symfony et du plugin Sylius, menées
le 3 septembre 2026 sur main à 8fdc5ec, plus leur synthèse.

Les grilles sont nommées par leur axe de relecture. Aucun nom ni profil de personne
n'apparaît : ce sont des axes d'expertise, pas des auteurs, et une opinion attribuée à
quelqu'un qui ne l'a pas émise n'aurait rien à faire dans un dépôt. Seules subsistent
deux références au paquet Composer webmozart/assert, dans une ligne « Amont » où elles
citent une bibliothèque, pas une personne.

Le README porte la méthode, le périmètre — dont l'exclusion des 680 fichiers protobuf
générés du pont Temporal — et une section sur ce qu'un audit de code ne peut pas voir,
avec les exemples que les issues ouvertes en donnent.

Deux notes d'édition corrigent une surestimation du rapport sur les tests, reprise dans
la synthèse : le statut « implemented for all four ports » de DUR041 était exact des
ports. Ce qui était faux, ce sont les deux énoncés au présent sur les adaptateurs
Temporal, repris en gplanchat#270.

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

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant