---
title: Activity Bounded Context
type: entity
created: 2026-09-06
updated: 2026-09-06
sources: [raw/sessions/2026-09-06-frontend-integration.md]
tags: [activity, context, issue-tracking]
---

# Activity Bounded Context

`Activity` is an append-only event feed recording what happened in a workspace (e.g. `changed status`, `created feature`, `logged time`). It was added as part of the issue-tracking frontend port.

## Domain

- **Aggregate:** `Domain\Activity\Entities\Activity` (`src/Domain/Activity/Entities/Activity.php`) — `reconstitute(ActivityId, ?TicketId, WorkspaceId, UserId $authorId, action, detail, createdAt)`; getters `id()`, `ticketId()` (nullable), `workspaceId()`, `authorId()`, `action()`, `detail()`, `createdAt()`.
- **Value object:** `ActivityId` (string id).
- **Repository interface:** `ActivityRepositoryInterface` — `nextIdentity()`, `save()`, `findById()`, `findByWorkspace(WorkspaceId): list<Activity>`, `all()`.

## Infrastructure

- `ActivityModel` (table `activities`, string PK `activity_id`; relations: `ticket()` (nullable), `workspace()`, `author()`).
- `ActivityMapper`, `EloquentActivityRepository`.

## Persistence / relationships

`activities` was created by `2026_09_06_000000_extend_for_issue_tracking.php` with nullable `ticket_id`, `workspace_id`, `author_id`, `action`, and `detail`.

## Application / presentation

- Query: `ListActivities` (resolves author name). Activity entries are written by `CreateTicket`, `UpdateTicket`, and `LogTime` commands.
- Presentation: `ActivityController` (`/w/{workspace}/activity`).

## Related pages

- [ticket](ticket.md) — activities reference tickets
- [workspace](workspace.md) — workspace-scoped feed
- [time-entry](time-entry.md) — logging time records an activity
- [overview](../overview.md) — project context