Skip to content

Declare GranolaBindingsPort: the persistence seam for bucket bindings - #1

Merged
TheGreatAxios merged 1 commit into
mainfrom
cl-5088-granola-persistence-port-declare-granolabindingsport
Aug 2, 2026
Merged

Declare GranolaBindingsPort: the persistence seam for bucket bindings#1
TheGreatAxios merged 1 commit into
mainfrom
cl-5088-granola-persistence-port-declare-granolabindingsport

Conversation

@TheGreatAxios

Copy link
Copy Markdown
Contributor

Summary

  • Declares GranolaBindingsPort<Binding> in src/ingress/ — the persistence seam a host implements so this package never depends on any host or product-specific storage type
  • Exported from src/ingress/index.ts alongside the existing webhook exports

Why

CL-4894's Granola extraction hit a real dependency cycle: Scout's binding store depends on Scout's own artifact interface, but the Granola code is moving into this package while Scout depends on it. This port is the fix — the package declares the seam (load/save bindings for a tenant), the host implements it against whatever storage it has.

This slice is the type declaration only. The binding store itself (which will consume this port) moves in a later slice.

Test plan

  • bun run check-deps — clean
  • bun run typecheck — clean
  • bun run test:ingress — 3 pass

CL-5088

A host composing @corbits/granola/ingress supplies a concrete port backed
by its own storage. Generic over the binding shape so this package has
zero dependency on any host-specific or product-specific type.
@TheGreatAxios
TheGreatAxios merged commit 522b336 into main Aug 2, 2026
5 checks passed
@TheGreatAxios
TheGreatAxios deleted the cl-5088-granola-persistence-port-declare-granolabindingsport branch August 2, 2026 20:38
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