docs(adr): ADR-015 — why this repo imports another project's Appwrite client - #219
Merged
Polichinel merged 1 commit intoAug 4, 2026
Merged
Conversation
… client The þing-02 ratification attached a condition to the #146 deferral: record it as an ADR in this repo. That was never done. The reasoning lived only in a GitHub issue and in a deliberation folder outside the repository, which is what the condition existed to prevent -- an issue is a work item, not a place someone checks before deciding whether a rule applies to them. What the ADR records - Why the import stays: a hand-written client here would be the platform's THIRD copy, and the defect that prompted the assembly was common to the two existing copies, not a divergence between them. Upstream declines to export a client surface, deliberately, because exporting the current one would bless a shape its own maintainers have recorded as needing decomposition. There is nothing to unwind to. - What bounds it: an importer allowlist pinned by test, the _ContractStorePort DIP port (four methods, so the wire never sees Appwrite types), and the framework-contract test added with the 3.0.0 bump. Containment, not removal -- C-40 stays open on the residual. - The trigger in plain words: demand (a second incident rooted in duplicated client code) and supply (upstream carving out the auth/config seam). Either means revisit; both mean do it. Explicitly not "this seat's convenience". Two things found while writing it, neither previously recorded here - The supply half has PARTIALLY moved. The verdict was written against a single 3,064-line module; 3.0.0 relocated provisioning and transport out of it and added an audit package, leaving 2,841 lines. Still no exported client, so the trigger has not fired -- but "no movement" would be the wrong thing to believe. - The sibling obligation from the same verdict is DISCHARGED. It required this repo's legacy delivery path to be guarded or retired before 2026-11-30. It was retired in #149; C-63 is resolved; the deadline is moot here. Nobody had recorded that it was met. Also: `C-221` in the verdict is pipeline-core's REGISTER entry, not issue #221 (which is unrelated and closed). Noted in the appendix because this repo namespaces cross-repo identifiers for exactly that reason and the verdict's shorthand does not. Scope note: the deferral was written when one manager held the import; crafd added a second. Two adapters with identical contents now. 372 passed / 40 xfailed / 0 failed. ruff clean. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
B2 of the sequenced plan. Pure writing, no code — and the condition the þing-02 ratification attached to #146, which had not been met.
Why this exists
The deferral's reasoning lived only in a GitHub issue and in the platform's deliberation folder, outside this repository. That is precisely what the ratification objected to: "an issue reads as 'not done yet'; an ADR reads as 'decided, for these reasons, until this condition changes'."
The word deferred was doing real work and was easy to misread. It does not mean not done yet — it means examined, decided, and held under a stated condition. Those read identically in an issue tracker and completely differently to someone deciding whether they may change the code.
What it records
Why the import stays. A hand-written client here would be the platform's third copy — and the defect that prompted the assembly was common to the two existing copies, not a divergence between them. Upstream declines to export a client surface, deliberately, because exporting the current one would bless a shape its own maintainers have recorded as needing decomposition. There is nothing to unwind to.
What bounds it. An importer allowlist pinned by test; the
_ContractStorePortDIP port (four methods, so the wire modules never see Appwrite types); and the framework-contract test added with the 3.0.0 bump. Containment, not removal — C-40 stays open on exactly this residual.The trigger, in plain words. Demand — a second incident rooted in duplicated client code. Supply — upstream carving the auth/config seam out of its Appwrite module. Either means revisit; both mean do it. Explicitly not "when this team gets round to it".
Two things found while writing it
The supply half has partially moved, and nothing recorded that. The verdict was written against a single 3,064-line module. Version 3.0.0 relocated provisioning and transport out of it and added an audit package — 2,841 lines now. Still no exported client, so the trigger has not fired. But "no movement" would be the wrong thing for the next reader to believe.
The sibling obligation from the same verdict is discharged. It required this repo's legacy delivery path to be guarded or retired before 2026-11-30. It was retired in S1 — Delete the retired delivery path; refuse an incomplete config #149; C-63 is resolved; the deadline is moot here. Nobody had recorded that it was met — a dated cross-repo obligation quietly satisfied.
Also noted in the appendix:
C-221in the verdict is pipeline-core's register entry, not issue #221 (unrelated, closed). This repo namespaces cross-repo identifiers for exactly that reason; the verdict's shorthand does not.Verification
Every factual claim checked against the installed wheel and the repo, not the changelog: file.py at 2,841 lines,
provisioning.py/transport.py/audit/present, no client surface exported, the allowlist test present, the port's four methods enumerated, C-63 resolved, issue #221 unrelated.Indexed in
docs/ADRs/README.md; C-40 now points at it. #146 stays open — the ADR records the deferral, it does not discharge it.