Product Organization (PO)
Constants, conventions, and protocols for Plane MCP (plane-lightcraft), Outline MCP (outline), and local specs.
Load this skill when working with Plane URLs, modules, work items, cycles, or Outline spec docs.
Plane Constants
WORKSPACE_SLUG: lightcraft PROJECT_ID: b1e09911-9cc1-49b8-ad8f-5d55e3dafd16 PROJECT_IDENTIFIER: SPARK BASE_URL: https://plane.jimbui.dev
Members
| UUID | Name | |
|---|---|---|
| jimbui@lightcraft.pro | 0466b0c4-f202-4b57-b75a-f7bbc1ddb3c7 | Jim LC Bui (default assignee) |
| buihoangphuc919@gmail.com | 34232675-13d1-4b23-b90c-d5abe8bfd83b | JB_ADMIN / API owner |
| eliot@lightcrafttech.com | 4d158390-cf5a-4e9f-8810-01f25835c5b3 | Eliot Mack |
| elijah@lightcraft.pro | 752141dd-0532-4153-8434-3794e1cded19 | Elijah Welch |
Work Item States
| State | UUID |
|---|---|
| Backlog | 6b6a967b-10d3-4306-8d7b-8dcd8a1fa10a |
| Todo | 38e5ecc0-9aa5-4eee-9403-de57dcf78628 |
| In Progress | 0559cdf7-2eec-448e-8200-f5a3a92b18d6 |
| Done | b22a8c9e-5b39-4bba-8426-df73c50d2eba |
| Cancelled | 095c826d-ed61-4651-b4ed-472787f81fc7 |
Module Statuses
backlog → planned (/p) → in-progress (/s) → completed (/pp) | paused | cancelled
Outline Constants
OUTLINE_BASE_URL: https://outline.jimbui.dev SPARK_ROOT_DOC_ID: 0e3ffc06-c0b6-47e5-9821-b589d9eb4ec2 SPARK_ROOT_DOC_SLUG: spark-FqVd5fkaAU COLLECTION_ID: 3f608f3f-1137-4ec7-b1e8-b9ae98f57633 (LightCraft)
Local Spec Conventions
Specs live locally in docs/Spark/{path}/spec.md. MCP sync happens only during /pp.
Path Derivation
Module name → local path: strip trailing :, split by : , join as directory segments.
Module: "Navigation: Nav Bar:" Path: docs/Spark/Navigation/Nav Bar/spec.md Module: "Infrastructure: Cloudflare: R2:" Path: docs/Spark/Infrastructure/Cloudflare/R2/spec.md
YAML Frontmatter
---
module_id: {uuid} # Set by /pp (Plane module UUID)
outline_doc_id: {uuid} # Set by /pp (Outline doc UUID)
module_name: "Scope: Sub-scope:"
version: 1 # Bumped by /p EXTEND
status: planning|completed
---
- •
module_idandoutline_doc_idare empty until first/pppublish - •
versionstarts at 1, incremented by/p EXTEND - •
status:planningduring/p,completedafter/pp
Workflow
/p (local only) → /s (local only) → /pp (sync gateway) → /p EXTEND (local only) → ...
- •
/pand/snever call MCP — all reads/writes are local - •
/ppis the only command that touches Plane and Outline
URL Parsing
Pattern: {BASE_URL}/{WORKSPACE_SLUG}/projects/{project_id}/{resource_type}/{resource_id}/
Split path by / → extract project_id, resource type (modules|cycles|work-items), resource UUID.
Module Conventions
Naming: "Scope: Sub-scope:" — trailing colon required. Examples: SSO:, Spark Shot: Timeline:
Creation by /pp: name (convention above), start_date: spec created date, lead: default assignee UUID, status: "completed", description: outline_doc_id: {UUID}
Dates: /pp sets both start_date (from spec) and target_date (publish date).
Warning: update_module rejects members field (HTTP 400) — use lead only.
Work Item Conventions
Naming: Version-prefixed phases.
- •Parents:
"Scope: {ver}.{phase} - {Name}"(e.g.,"Nav Bar: 1.A - Branding & Layout") - •Children:
"Scope: {ver}.{phase} - {Name}: {Task}"(e.g.,"Nav Bar: 1.A - Branding & Layout: Replace logo")
Where Scope = last segment of module name (e.g., "Nav Bar" from "Navigation: Nav Bar:").
Phase naming in specs:
### Phase {ver}.{letter}: {Name}
- [ ] {ver}.{letter}.{number} - {Task}
Creation by /pp: All items created in Done state (implementation already complete). start_date: spec created date, target_date: publish date.
Must add to module via add_work_items_to_module AND cycle via add_work_items_to_cycle.
ID format in specs: SPARK-N (uuid) — appended after creation, archived in version sub-docs.
State transitions (/s): Start → In Progress + start_date today. Complete → Done + target_date today. Move ALL phase sub-items at once.
Cycle Conventions
Naming: "YYYY/WW" (ISO week). Range: Sunday 00:00:01 UTC → Saturday 23:59:00 UTC.
Auto-creation: Calculate current week → check existing cycles → create if missing with owned_by (not lead), end_date (not target_date). Cycle dates cannot be in the past.
Outline Spec Storage
Primary spec storage is local (docs/Spark/). Outline holds the published foundation and version sub-docs.
Doc Hierarchy
Module name segments map to nested Outline docs under Spark root:
Module: "Spark Shot: Nav Bar:" Spark (root) → Spark Shot (intermediate) → Nav Bar (leaf — foundation here)
Doc Registry
Spark root doc has a registry table between <!-- doc-registry --> markers:
| Scope | Doc ID | |---|---| | Spark Shot | abc-123 | | Spark Shot: Nav Bar | def-456 |
On creation (/pp): Split module name by : → check registry for each segment → create missing docs with correct parentDocumentId → add entries to registry.
On lookup: Read Spark root → parse registry → get doc ID. Never use search_documents for hierarchy resolution.
Version Sub-Docs
Created by /pp as children of the spec doc on Outline.
Title: v{N}: {summary title}
Content:
## Summary - [3-5 bullet points of what was implemented] --- ## Planning Archive [Full implementation phases, user journeys, technical design from this version] [SPARK-N (uuid) IDs embedded in checkbox lines]
Each version (1, 2, 3...) gets its own sub-doc. Used by /po NN release notes.
Release Notes (/po NN)
Generate cycle release notes. Triggered by /po NN where NN is ISO week number.
Protocol
- •Determine cycle:
{currentYear}/{NN}(e.g.,2026/06) - •List cycle work items via MCP
- •Group items by module (from module assignment)
- •For each module:
- •Find version sub-doc(s) from Outline (children of spec doc)
- •Extract Summary section
- •Generate release notes doc on Outline:
- •Title:
Release Notes: {YYYY}/W{NN} - •Content: module summaries grouped by module name
- •Title:
- •Return Outline doc URL
- •No Slack messages
Template
# Release Notes: {YYYY}/W{NN}
## {Module Name}
**v{N}: {title}**
- summary bullet
- summary bullet
## {Module Name}
**v{N}: {title}**
- summary bullet
MCP Tool Loading
Load tools via ToolSearch("select:mcp__plane-lightcraft__<name>") or ToolSearch("select:mcp__outline__<name>").
Plane: retrieve_module, update_module, create_module, list_module_work_items, create_work_item, update_work_item, add_work_items_to_module, add_work_items_to_cycle, list_cycles, create_cycle, list_states
Outline: read_document, update_document, create_document, get_document_id_from_title, search_documents
API Quirks
- •
update_modulerejectsmembers— HTTP 400 - •
retrieve_project_page/retrieve_workspace_page— 404 (broken). Use module description instead. - •
create_cycleusesend_date(nottarget_date) andowned_by(notlead) - •Cycle dates cannot be in the past
- •Sibling MCP calls cascade-fail — if one parallel call fails, retry individually
Common Mistakes
- •Writing spec content to Outline directly instead of local
docs/Spark/first - •Using old
Phase Xnaming instead of{ver}.{phase}format - •Missing module/cycle assignment on new work items
- •Using
Backloginstead ofTodo(orDonefor /pp) for new items - •Forgetting to update Spark root doc registry when creating new Outline docs
- •Hardcoding state/user IDs instead of referencing this skill's constants
- •Creating Plane work items during
/p(only/ppcreates them) - •Calling MCP during
/s(all updates are local)