SPEC-0011: Project Workspace Enrichment
Overview
Enriches tracker-native projects created by /design:plan and /design:organize with navigational context, structured views, iteration fields, and sane defaults so that both LLM agents and human developers can effectively navigate and manage planned work. Formalizes 📝 ADR-0012 (Project Workspace Enrichment), which extends the project grouping capabilities of 📝 ADR-0009 and the story-sized issue granularity of 📝 ADR-0011.
Requirements
Requirement: GitHub Project Description and README
Projects created or managed by /design:plan and /design:organize SHALL have a short description and a README. The description SHALL be a one-liner summarizing the project scope (e.g., "Implementation of SPEC-0003: JWT Authentication"). The README SHALL be a structured navigational document written as a GitHub Project README field (not a repository file) containing spec references, governing ADRs, key files with line-number references, a story index, and dependency ordering. The README serves as project-scoped agent context, analogous to /design:prime output but limited to the project's scope.
Scenario: Plan creates project with README
- WHEN
/design:plancreates a new GitHub Project for an epic - THEN the project SHALL have a description set to "Implementation of {SPEC-XXXX}: {Capability Title}"
- AND the project SHALL have a README containing:
- Paths to
spec.mdanddesign.mdwith brief summaries - A list of governing ADRs with titles and file paths
- Key source files, modules, and directories relevant to the project scope
- A story index listing all story issue numbers, titles, and branch names
- Dependency ordering showing logical story sequencing
- Paths to
Scenario: Organize adds README to existing project
- WHEN
/design:organizerestructures an existing GitHub Project (tier b or c) - THEN the skill SHALL add or replace the project README with the same structure as above, derived from the spec and its current stories
Scenario: README content structure
- WHEN the README is generated for any project
- THEN the README SHALL follow this template:
# {Project Title}
## Spec
- **spec.md**: `docs/openspec/specs/{name}/spec.md` -- {one-line summary}
- **design.md**: `docs/openspec/specs/{name}/design.md` -- {one-line summary}
## Governing ADRs
- ADR-XXXX: {title} (`docs/adrs/ADR-XXXX-{slug}.md`)
## Key Files
- `src/{path}:{line}` -- {symbol or description}
## Stories
| # | Title | Branch | Status |
|---|-------|--------|--------|
| {number} | {title} | `feature/{number}-{slug}` | Open |
## Dependencies
{number} -> {number} -> {number}
Requirement: GitHub Project Iteration Fields
Projects created by /design:plan SHALL have an iteration field named "Sprint" with a default cycle length of 2 weeks. The cycle length SHALL be configurable via .claude-plugin-design.json key projects.iteration_weeks. Stories SHALL be assigned to iterations based on their dependency ordering: foundation stories go into Sprint 1, dependent stories into Sprint 2, and so on. The iteration field MUST be created via the GitHub Projects V2 GraphQL API (gh api graphql).
Scenario: Iteration field creation
- WHEN
/design:plancreates a GitHub Project - THEN the skill SHALL add an iteration field named "Sprint" to the project with a cycle length equal to
projects.iteration_weeks(default: 2 weeks) - AND the iteration field SHALL be created using
gh api graphql -f query='...'with thecreateProjectV2Fieldmutation
Scenario: Story assignment to sprints
- WHEN stories have been created and assigned to a project with an iteration field
- THEN foundation stories (no dependencies) SHALL be assigned to Sprint 1
- AND stories that depend on Sprint 1 stories SHALL be assigned to Sprint 2
- AND subsequent dependency layers SHALL be assigned to incrementally later sprints
Scenario: Custom iteration duration
- WHEN
.claude-plugin-design.jsoncontains"projects": { "iteration_weeks": 3 } - THEN the iteration field SHALL use a 3-week cycle length instead of the default 2-week cycle
Requirement: GitHub Project Named Views
Projects created by /design:plan SHALL have three named views configured. The views SHALL replace the default unnamed "Table" view that GitHub creates automatically. The view names and types SHALL be configurable via .claude-plugin-design.json key projects.views. Views MUST be created via the GitHub Projects V2 GraphQL API.
Scenario: View creation
- WHEN
/design:plancreates a GitHub Project - THEN the skill SHALL create three named views:
| View Name | Type | Purpose |
|---|---|---|
| All Work | Table/List | Default list view showing all items with status, assignee, and sprint fields |
| Board | Board | Kanban board grouped by status |
| Roadmap | Roadmap | Timeline view using the Sprint iteration field |
Scenario: Custom view configuration
- WHEN
.claude-plugin-design.jsoncontains"projects": { "views": ["Backlog", "Sprint Board", "Timeline"] } - THEN the skill SHALL create views with the custom names instead of the defaults
- AND the view types SHALL map positionally: first = Table, second = Board, third = Roadmap
Scenario: Replacing default view
- WHEN the project has a default unnamed "Table" view created by GitHub
- THEN the skill SHALL rename or replace it with the first configured view (default: "All Work")
Requirement: Gitea Project Structure
For Gitea trackers, projects created by /design:plan SHALL use milestones as epic buckets, board columns for workflow stages, and task checklists (per 📝 ADR-0011) for requirement tracking within stories. The board columns SHALL be configurable via .claude-plugin-design.json key projects.columns.