1# OpenSpec Change Board23## Purpose45The dashboard plugin SHALL present repo-local OpenSpec work as a maintainer-facing board that surfaces ideas, active changes, archived changes, task progress, and rich artifact details. The board exists to make OpenSpec state inspectable without leaving the Hermes dashboard.67## Requirements89### Requirement: Board scan model10The dashboard API SHALL scan each initialized source's `openspec/` directory into board data without persisting change or spec records in the plugin database.1112#### Scenario: Active change scan13- **GIVEN** a directory exists under `openspec/changes/` with a `proposal.md`14- **WHEN** the source is scanned15- **THEN** the API includes it as a change with name, token, title, status, artifact presence flags, and task stats when available1617#### Scenario: Archived change scan18- **GIVEN** a directory exists under `openspec/changes/archive/` with a `proposal.md`19- **WHEN** the source is scanned20- **THEN** the API includes it as an archived change and assigns it the archived status2122#### Scenario: Idea scan23- **GIVEN** a markdown file exists under `openspec/ideas/`24- **WHEN** the source is scanned25- **THEN** the API includes it as an idea with name, token, title, and ideas status2627#### Scenario: Current spec scan28- **GIVEN** a markdown file exists under `openspec/specs/`29- **WHEN** the source is scanned30- **THEN** the API includes it as a current spec with relative path, token, and title3132### Requirement: Change status derivation33The dashboard API SHALL derive change board status from OpenSpec files and task completion rather than storing status manually.3435#### Scenario: Draft status36- **GIVEN** a change has a proposal but no tasks file or no parseable task stats37- **WHEN** the board scan runs38- **THEN** the change status is `draft`3940#### Scenario: Todo status41- **GIVEN** a change has tasks and zero completed checklist items42- **WHEN** the board scan runs43- **THEN** the change status is `todo`4445#### Scenario: In-progress status46- **GIVEN** a change has both completed and incomplete checklist items47- **WHEN** the board scan runs48- **THEN** the change status is `in_progress`4950#### Scenario: Done status51- **GIVEN** a change has tasks and every checklist item is complete52- **WHEN** the board scan runs53- **THEN** the change status is `done`5455#### Scenario: Archived status56- **GIVEN** a change lives under `openspec/changes/archive/`57- **WHEN** the board scan runs58- **THEN** the change status is `archived` regardless of task completion5960### Requirement: Change detail API61The dashboard API SHALL expose full detail for a selected change.6263#### Scenario: Existing change detail64- **GIVEN** a selected source contains the requested change65- **WHEN** the dashboard requests change detail66- **THEN** the API returns the change name, title, status, archive flag, task stats, proposal markdown, design markdown, tasks markdown, and delta spec entries6768#### Scenario: Delta spec comparison69- **GIVEN** a change contains delta spec files under its `specs/` directory70- **WHEN** the API returns change detail71- **THEN** each delta spec entry includes relative path, proposed content, current worktree spec content when present, status, and a unified diff when content changed7273#### Scenario: Missing change detail74- **WHEN** the dashboard requests a change that does not exist in the selected source75- **THEN** the API returns a not-found response7677### Requirement: Idea detail API78The dashboard API SHALL expose full markdown detail for selected idea files.7980#### Scenario: Existing idea detail81- **GIVEN** an idea markdown file exists under `openspec/ideas/`82- **WHEN** the dashboard requests idea detail83- **THEN** the API returns the idea name, title, ideas status, and markdown content8485#### Scenario: Missing idea detail86- **WHEN** the dashboard requests an idea that does not exist87- **THEN** the API returns a not-found response8889### Requirement: Board user interface90The dashboard UI SHALL render changes and ideas in status-oriented columns and let maintainers inspect one selected artifact at a time.9192#### Scenario: Board columns93- **WHEN** the dashboard renders an initialized source94- **THEN** it displays ideas, draft, todo, in-progress, done, and archived groups using the source scan payload9596#### Scenario: Artifact selection97- **WHEN** the user selects a change or idea card98- **THEN** the dashboard opens a focused detail panel for that artifact rather than requiring the user to navigate away99100#### Scenario: Change artifact tabs101- **GIVEN** a selected change includes proposal, tasks, design, or spec deltas102- **WHEN** the detail panel renders103- **THEN** the user can switch among those artifact views and see missing artifacts clearly104105### Requirement: Markdown and task rendering106The dashboard UI SHALL render OpenSpec markdown and tasks in readable HTML while keeping the plugin self-contained.107108#### Scenario: Markdown display109- **WHEN** proposal, design, idea, or spec markdown is displayed110- **THEN** the UI renders common markdown elements including headings, bold text, inline code, lists, horizontal rules, and paragraphs111112#### Scenario: Task checklist display113- **WHEN** a tasks document contains OpenSpec checklist items114- **THEN** the UI displays task structure and completion status in a parsed, readable form instead of raw undifferentiated markdown