product
Forma P0 Starter Specification
Goal
Define the P0 starter workspace shape for Choral Forma.
examples/getting-started-workspace/ is the accepted copyable example workspace baseline. Current forma init is bootstrap-only and does not install this starter. Future starter-kit initialization should be redesigned from the committed starter-kit or another explicit template source instead of maintaining a duplicated embedded starter.
This starter specification stays aligned with Product direction and Forma P0 core architecture.
Baseline
The starter baseline is import-driven and Markdown-first:
.forma.mdis the single committed configuration entry point..forma/is a conventional support directory for imported spaces, templates, views, and other configuration fragments. It is not a hidden workspace root, persistent store, or visibility boundary.- Markdown under content directories remains the source of truth.
- No committed persistent index is part of the starter.
workspace.rootis not part of the config model and must not be generated.
The accepted starter spaces are:
notestasksmembersguidelines
Legacy todos and users spaces are not part of the starter baseline.
Task Lifecycle
Starter task configuration uses these status values:
todoreadydoingblockedreviewingdone
Starter task readiness uses these values:
needs-refinementreadyblockeddone
status represents workflow state. readiness represents executability.
Languages
The committed example workspace demonstrates canonical en content plus zh-Hans variants where useful for the starter tour.
Future initialization may choose a single configured language in .forma.md. It does not need to generate multilingual starter content by default.
Current Init And Future Starter Installation
Current forma init creates only:
.forma.md.agents/skills/forma-cli/SKILL.md
Future starter-kit installation should be derived from an explicit starter/template source and should create or copy a minimal workspace shape equivalent to:
.forma.md.forma/spaces/index.md.forma/spaces/{notes,tasks,members,guidelines}.md.forma/spaces/templates/{note,task,member,guideline}.md.forma/views/{graph,guide,recent,notes,tasks,members}.md- empty or template-provided content directories for
notes,tasks,members, andguidelines
Future initialization does not need to copy:
- sample notes, tasks, members, or guidelines from
examples/getting-started-workspace - example assets such as logo files
- workspace-level guideline pages
- a committed index or hidden state store
Config Shape
Starter .forma.md uses import-based config:
schemaVersion: 1
workspace:
name: Acme Knowledge
canonicalLanguage: en
supportedLanguages:
- en
timezone: UTC
runtime:
values:
currentDateTime:
kind: currentDateTime
workspaceRoot:
kind: workspaceRoot
currentUserId:
kind: gitConfig
key: user.name
transform: slugify
imports:
- ".forma/spaces/*.md"
- ".forma/views/*.md"
- ".forma/local/*.md"
dashboard:
title: Dashboard
sections:
- id: overview
title: Workspace overview
source:
type: workspace
workspace.timezone is stored explicitly. Future initialization may resolve it from the current environment when the user does not pass a timezone.
Templates And Views
Starter space terms define the create flow directly in .forma/spaces/*.md, and starter templates live in .forma/spaces/templates/.
The starter should expose:
- note, task, member, and guideline create templates;
- a task kanban view using the status lifecycle above;
- notes and members table views;
- graph, guide, and recent-work views;
- root
.forma.mddashboard configuration for workspace overview, recent pages, and workspace health.
The generated workspace can stay empty when initialization returns. The committed example workspace remains the richer demo and smoke-validation baseline.
Workflow And Visibility Boundary
Forma should not infer local-only status from .gitignore, .forma/local/, or any other path convention. An explicitly imported personal configuration fragment participates in the same effective workspace and receives no privacy guarantee from its name or Git state. Repository workflows may keep such files uncommitted, while any future scoped configuration entry point requires a separate product contract.
No starter behavior should depend on .forma/ being treated as a privileged root or hidden database.