---
title: Board Bounded Context
type: entity
created: 2026-09-06
updated: 2026-09-06
sources: [codebase snapshot 2026-09-06]
tags: [board, context, issue-tracking]
---

# Board Bounded Context

`Board` is part of the issue-tracking scaffolding (a board belongs to a workspace and holds tickets). It is modeled as an aggregate + repository + mapper + Eloquent model, but has **no use cases, controllers, or UI yet**.

> **Note on provenance:** reflects the code as of 2026-09-06; no written ADR exists.

## Domain

- **Aggregate:** `Domain\Board\Entities\Board` (`src/Domain/Board/Entities/Board.php`)
    - Reconstitute-only (`reconstitute(BoardId, boardName, boardKey, WorkspaceId)`); no behavior factory yet.
    - Getters: `id()`, `boardName()`, `boardKey()`, `workspaceId()`.
- **Value object:** `BoardId` (string id).
- **Repository interface:** `BoardRepositoryInterface` (`nextIdentity()`, `save()`, `findById()`).

## Infrastructure

- `BoardModel` (table `board`, non-incrementing string PK `board_id`; relations: `workspace()` BelongsTo, `tickets()` HasMany), `BoardMapper`, `EloquentBoardRepository`.

## Persistence / relationships

Created in the `2026_09_05_071303_add_tickets_table.php` migration (which is **misnamed** — it creates `workspace`, `board`, and `tickets` tables). The `board` table has a unique `board_name`, unique `board_key`, and a foreign key to `workspace.workspace_id`.

`Board` is referenced by `Ticket` via `BoardId` (a ticket belongs to a board). See [ticket](ticket.md).

## Observations / open questions

- **No behavior yet.** A board has no factory/invariants (e.g. key-uniqueness, name rules) — the aggregate is essentially a data holder.
- **No Application layer or presentation** — no command/query, no controller, no Inertia page.
- `board_name` and `board_key` are both unique in the schema, but that constraint is enforced by the DB, not the domain.

## Related pages

- [workspace](workspace.md) — the parent context
- [ticket](ticket.md) — the child context
- [repository-mapper-pattern](../concepts/repository-mapper-pattern.md) — persistence approach
- [overview](../overview.md) — where this fits the Jira-ward goal