Skip to content

docs(adr): ADR-015 — why this repo imports another project's Appwrite client - #219

Merged
Polichinel merged 1 commit into
developmentfrom
docs/adr-015-pipeline-core-import-deferral
Aug 4, 2026
Merged

docs(adr): ADR-015 — why this repo imports another project's Appwrite client#219
Polichinel merged 1 commit into
developmentfrom
docs/adr-015-pipeline-core-import-deferral

Conversation

@Polichinel

Copy link
Copy Markdown
Collaborator

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 _ContractStorePort DIP 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

  1. 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.

  2. 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-221 in 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.

372 passed / 40 xfailed / 0 failed
ruff check .  ->  All checks passed!

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.

… 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>
@Polichinel
Polichinel merged commit 6c5d4fd into development Aug 4, 2026
4 checks passed
@Polichinel
Polichinel deleted the docs/adr-015-pipeline-core-import-deferral branch August 4, 2026 03:35
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