304 lines
12 KiB
TypeScript
304 lines
12 KiB
TypeScript
import type { AppState } from '../../store/types'
|
|
|
|
const seedDate = '2026-05-06T00:00:00+02:00'
|
|
|
|
export const createSeedState = (): AppState => ({
|
|
schema_version: '0.3.0',
|
|
project: {
|
|
id: 'project_buildpulse',
|
|
name: 'BuildPulse',
|
|
one_line_pitch: 'A calm planning cockpit for AI-assisted product building.',
|
|
description:
|
|
'BuildPulse helps capture features, park distracting ideas, log progress as Pulse events, and export clean context for AI coding agents.',
|
|
current_goal: 'Sharpen v0.4 handoff workflows so coding agents get the right context fast.',
|
|
notes: 'First dogfood project: BuildPulse manages BuildPulse.',
|
|
created_at: seedDate,
|
|
updated_at: seedDate,
|
|
},
|
|
phases: [
|
|
{
|
|
id: 'phase_manual_cockpit',
|
|
title: 'Phase 1: Manual Cockpit',
|
|
goal: 'Prove the small planning cockpit works without turning into fake enterprise sludge.',
|
|
status: 'done',
|
|
order: 1,
|
|
notes: 'Feature Plan, Parking Lot, Pulse Log, and Export shipped first.',
|
|
created_at: seedDate,
|
|
updated_at: seedDate,
|
|
},
|
|
{
|
|
id: 'phase_ai_idea_placement',
|
|
title: 'Phase 2: AI Idea Placement',
|
|
goal: 'Turn raw ideas into guided decisions with explicit accept, park, or reject outcomes.',
|
|
status: 'done',
|
|
order: 2,
|
|
notes: 'AI triage and DECISION pulse logging are proven before release planning expands.',
|
|
created_at: seedDate,
|
|
updated_at: seedDate,
|
|
},
|
|
{
|
|
id: 'phase_structured_release_planning',
|
|
title: 'Phase 3: Structured Release Planning',
|
|
goal: 'Make releases concrete: what is required, what is forbidden, and how close the build is to ready.',
|
|
status: 'done',
|
|
order: 3,
|
|
notes: 'v0.3 shipped with phases, releases, and readiness signals.',
|
|
created_at: seedDate,
|
|
updated_at: seedDate,
|
|
},
|
|
{
|
|
id: 'phase_session_handoff',
|
|
title: 'Phase 4: Session Handoff',
|
|
goal: 'Give agents cleaner, more targeted context packages for implementation sessions.',
|
|
status: 'active',
|
|
order: 4,
|
|
notes: 'Current v0.4 step: faster, more focused handoff workflows for coding sessions.',
|
|
created_at: seedDate,
|
|
updated_at: seedDate,
|
|
},
|
|
{
|
|
id: 'phase_local_cloud_ai_assistant',
|
|
title: 'Phase 5: Local/Cloud AI Assistant',
|
|
goal: 'Blend local and remote AI assistance without turning the cockpit into router spaghetti.',
|
|
status: 'upcoming',
|
|
order: 5,
|
|
notes: 'Planned v0.5 direction.',
|
|
created_at: seedDate,
|
|
updated_at: seedDate,
|
|
},
|
|
{
|
|
id: 'phase_agent_pulse_integration',
|
|
title: 'Phase 6: Agent Pulse Integration',
|
|
goal: 'Ingest agent activity only after the manual cockpit and release planning are stable.',
|
|
status: 'upcoming',
|
|
order: 6,
|
|
notes: 'This stays out of v0.3 on purpose.',
|
|
created_at: seedDate,
|
|
updated_at: seedDate,
|
|
},
|
|
],
|
|
releases: [
|
|
{
|
|
id: 'release_v021_ai_triage',
|
|
phase_id: 'phase_ai_idea_placement',
|
|
name: 'v0.2.1 — AI Triage Flow Hardening',
|
|
goal: 'Make AI triage feel like the default idea-intake path from raw idea to DECISION pulse.',
|
|
definition_of_done: [
|
|
'AI recommends a placement with risk and smallest safe version.',
|
|
'User can accept, park, or reject without losing context.',
|
|
'Accepted or rejected triage creates a DECISION pulse.',
|
|
'Mobile layout stays readable during the triage flow.',
|
|
],
|
|
required_feature_ids: ['feature_plan_screen', 'parking_lot_screen', 'pulse_log_screen'],
|
|
optional_feature_ids: ['export_screen'],
|
|
forbidden_feature_titles: ['Live OpenClaw/Hermes Agent Status', 'WebSocket agent telemetry'],
|
|
status: 'shipped',
|
|
notes: 'This is the verified gate before v0.3 begins.',
|
|
created_at: seedDate,
|
|
updated_at: seedDate,
|
|
},
|
|
{
|
|
id: 'release_v030_phases_releases',
|
|
phase_id: 'phase_structured_release_planning',
|
|
name: 'v0.3 — Phases and Releases',
|
|
goal: 'Add release planning structure so the cockpit can answer what phase we are in, what release we are building, and what is forbidden until later.',
|
|
definition_of_done: [
|
|
'Phases exist as explicit project stages.',
|
|
'Releases track goal, definition of done, required features, optional features, and forbidden work.',
|
|
'Features can be linked to a phase and a release with required/optional role.',
|
|
'A release readiness view shows progress, blockers, recent pulses, and forbidden warnings.',
|
|
],
|
|
required_feature_ids: ['feature_plan_screen', 'parking_lot_screen', 'pulse_log_screen', 'export_screen'],
|
|
optional_feature_ids: [],
|
|
forbidden_feature_titles: [
|
|
'Live OpenClaw/Hermes Agent Status',
|
|
'OpenClaw / Hermes integration',
|
|
'WebSocket agent telemetry',
|
|
'GitHub / Gitea sync',
|
|
'Local/cloud model router',
|
|
'Session prompt generator',
|
|
],
|
|
status: 'shipped',
|
|
notes: 'Shipped. Release planning structure is live; still no live integrations.',
|
|
created_at: seedDate,
|
|
updated_at: seedDate,
|
|
},
|
|
{
|
|
id: 'release_v040_focused_handoffs',
|
|
phase_id: 'phase_session_handoff',
|
|
name: 'v0.4 — Focused Session Handoffs',
|
|
goal: 'Cut the friction between choosing a feature and giving a coding agent a sharp, minimal brief.',
|
|
definition_of_done: [
|
|
'Each feature detail exposes one-tap copy actions for OpenClaw, Claude Code, Codex, and a generic brief.',
|
|
'Prompt generation includes phase, release, readiness, blockers, parking-lot, and forbidden-work guardrails.',
|
|
'Copy actions can optionally log an INTENT pulse without triggering any live execution.',
|
|
],
|
|
required_feature_ids: ['export_screen', 'feature_focused_handoff_shortcuts'],
|
|
optional_feature_ids: ['pulse_log_screen'],
|
|
forbidden_feature_titles: ['Live OpenClaw/Hermes Agent Status', 'WebSocket agent telemetry', 'GitHub / Gitea sync'],
|
|
status: 'in_progress',
|
|
notes: 'v0.4.0 focuses on one-tap feature handoffs before preview/edit and result-capture slices.',
|
|
created_at: seedDate,
|
|
updated_at: seedDate,
|
|
},
|
|
],
|
|
features: [
|
|
{
|
|
id: 'feature_focused_handoff_shortcuts',
|
|
title: 'One-tap target-specific handoffs',
|
|
description: 'Let operators copy a sharp AI handoff for OpenClaw, Claude Code, Codex, or a generic agent directly from feature detail.',
|
|
column: 'now',
|
|
priority: 'must',
|
|
status: 'building',
|
|
acceptance_criteria: [
|
|
'Feature detail exposes separate copy actions for OpenClaw, Claude Code, Codex, and Generic.',
|
|
'Copied prompt includes release context, blockers, and forbidden-work warnings.',
|
|
'Copy can optionally log an INTENT pulse for the chosen target.',
|
|
],
|
|
scope_notes: 'This is the v0.4.0 loop: pick a feature, copy the right brief in one tap, then let the agent work.',
|
|
phase_id: 'phase_session_handoff',
|
|
release_id: 'release_v040_focused_handoffs',
|
|
release_role: 'required',
|
|
created_at: seedDate,
|
|
updated_at: seedDate,
|
|
},
|
|
{
|
|
id: 'feature_plan_screen',
|
|
title: 'Feature Plan screen',
|
|
description: 'Show the active build plan in calm Now / Next / Later / Done columns.',
|
|
column: 'now',
|
|
priority: 'must',
|
|
status: 'ready',
|
|
acceptance_criteria: [
|
|
'User can create a feature card.',
|
|
'User can move a feature between columns.',
|
|
'User can edit feature details without clutter.',
|
|
],
|
|
scope_notes: 'This is the home screen. It should answer “what now?” immediately.',
|
|
phase_id: 'phase_structured_release_planning',
|
|
release_id: 'release_v030_phases_releases',
|
|
release_role: 'required',
|
|
created_at: seedDate,
|
|
updated_at: seedDate,
|
|
},
|
|
{
|
|
id: 'parking_lot_screen',
|
|
title: 'Parking Lot screen',
|
|
description: 'Capture useful distractions without letting them hijack the build.',
|
|
column: 'now',
|
|
priority: 'must',
|
|
status: 'ready',
|
|
acceptance_criteria: [
|
|
'User can add parked ideas quickly.',
|
|
'Risk and future placement are visible.',
|
|
],
|
|
scope_notes: 'Parking is success behavior, not failure.',
|
|
phase_id: 'phase_structured_release_planning',
|
|
release_id: 'release_v030_phases_releases',
|
|
release_role: 'required',
|
|
created_at: seedDate,
|
|
updated_at: seedDate,
|
|
},
|
|
{
|
|
id: 'pulse_log_screen',
|
|
title: 'Pulse Log screen',
|
|
description: 'Log intent, action, results, blockers, and decisions in a future-compatible pulse shape.',
|
|
column: 'now',
|
|
priority: 'must',
|
|
status: 'ready',
|
|
acceptance_criteria: [
|
|
'User can add manual pulse events.',
|
|
'Pulses can link to features optionally.',
|
|
],
|
|
scope_notes: 'Manual in v0.1. No live agent ingestion yet.',
|
|
phase_id: 'phase_structured_release_planning',
|
|
release_id: 'release_v030_phases_releases',
|
|
release_role: 'required',
|
|
created_at: seedDate,
|
|
updated_at: seedDate,
|
|
},
|
|
{
|
|
id: 'export_screen',
|
|
title: 'Export screen',
|
|
description: 'Generate clean JSON, JSONL, and Markdown handoff context for AI developers.',
|
|
column: 'now',
|
|
priority: 'must',
|
|
status: 'ready',
|
|
acceptance_criteria: [
|
|
'JSON export works.',
|
|
'Markdown export includes CLAUDE_CONTEXT.md.',
|
|
],
|
|
scope_notes: 'Handoff quality matters more than bells and whistles.',
|
|
phase_id: 'phase_structured_release_planning',
|
|
release_id: 'release_v030_phases_releases',
|
|
release_role: 'required',
|
|
created_at: seedDate,
|
|
updated_at: seedDate,
|
|
},
|
|
],
|
|
parking_lot: [
|
|
{
|
|
id: 'parked_ai_triage',
|
|
title: 'AI idea triage',
|
|
description: 'Use AI to classify new ideas into Now, Next, Later, Parking Lot, or Reject.',
|
|
reason_parked: 'Manual workflow must prove useful first.',
|
|
possible_future_placement: 'v0.2',
|
|
risk_level: 'medium',
|
|
created_at: seedDate,
|
|
updated_at: seedDate,
|
|
},
|
|
{
|
|
id: 'parked_multi_project',
|
|
title: 'Multi-project support',
|
|
description: 'Track several products from one BuildPulse instance.',
|
|
reason_parked: 'Single-project discipline is the whole point of v0.1.',
|
|
possible_future_placement: 'v0.6+',
|
|
risk_level: 'medium',
|
|
created_at: seedDate,
|
|
updated_at: seedDate,
|
|
},
|
|
{
|
|
id: 'parked_openclaw_integration',
|
|
title: 'OpenClaw / Hermes integration',
|
|
description: 'Ingest agent events, task output, and status directly into BuildPulse.',
|
|
reason_parked: 'Way too spicy for v0.1. Manual pulse logging first.',
|
|
possible_future_placement: 'v1.0+',
|
|
risk_level: 'high',
|
|
created_at: seedDate,
|
|
updated_at: seedDate,
|
|
},
|
|
],
|
|
pulses: [
|
|
{
|
|
id: 'pulse_seed_001',
|
|
timestamp: seedDate,
|
|
project_id: 'project_buildpulse',
|
|
feature_id: 'feature_plan_screen',
|
|
source: 'manual',
|
|
agent_id: 'jimmi',
|
|
pulse_type: 'INTENT',
|
|
message: 'Start BuildPulse as a calm single-project cockpit, not a full agent framework.',
|
|
confidence_score: 0.95,
|
|
evidence_refs: ['docs/PRODUCT_BRIEF.md', 'docs/SCOPE.md'],
|
|
trace_id: 'session_seed',
|
|
},
|
|
{
|
|
id: 'pulse_seed_002',
|
|
timestamp: seedDate,
|
|
project_id: 'project_buildpulse',
|
|
source: 'manual',
|
|
agent_id: 'jimmi',
|
|
pulse_type: 'DECISION',
|
|
message: 'Park AI triage, releases, and integrations until the manual workflow proves itself.',
|
|
confidence_score: 0.9,
|
|
evidence_refs: ['docs/DECISIONS.md', 'docs/PARKING_LOT.md'],
|
|
trace_id: 'session_seed',
|
|
},
|
|
],
|
|
ai_recommendations: [],
|
|
settings: {
|
|
theme: 'light',
|
|
default_agent_id: 'jimmi',
|
|
},
|
|
})
|