north-scape/relayboard

Relayboard: accessible team boards with audited actions, dependency maps, and shared web/MCP use cases.

A remix template · 0 remixes · Remix north-scape/relayboard

app/boards/application/ports.py

"""Ports are intentionally small; DataK3 and test doubles implement the same boundary."""
from contextlib import AbstractContextManager
from typing import Protocol
from boards.domain.model import Board, Card

class BoardRepository(Protocol):
    def atomic(self) -> AbstractContextManager: ...
    def get(self, board_id: str) -> Board | None: ...
    def boards_for(self, email: str) -> list[Board]: ...
    def save_board(self, board: Board) -> None: ...
    def delete_membership(self, board_id: str, email: str) -> None: ...
    def get_card(self, card_id: str) -> Card | None: ...
    def cards_on(self, board_id: str) -> list[Card]: ...
    def save_card(self, card: Card) -> None: ...
    def log(self, board_id, card_id, actor, action, changes=None) -> None: ...
    def activity(self, board_id: str) -> list[dict]: ...

class Assistant(Protocol):
    def checklist(self, card_title: str) -> list[str]: ...
    def summary(self, board: dict) -> str: ...
    def embeddings(self, texts: list[str]) -> list[list[float]]: ...