@synap-core/workspace-templates 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1119 @@
1
+ # Project Management OS (PM OS) workspace template
2
+ # AI-generation-friendly YAML. Validated against types.ts at build time.
3
+ # Consolidated from synap-backend project-management.package.json (PRIMARY,
4
+ # extends inlined), synap-control-plane-api "PM OS Template.json" (richer
5
+ # cross-check — project profile, project views, content), and the
6
+ # project-management-pack (milestone profile + entityLinks + pack views).
7
+
8
+ meta:
9
+ slug: project-management
10
+ name: Project Management OS
11
+ description: "OKR-first project management workspace. Objectives, key results, projects, sprints, and tasks as connected entities — navigable from any direction in a relationship graph. Designed for solo founders and small teams who want goal-execution alignment without per-seat overhead."
12
+ icon: kanban-square
13
+ color: "#3B82F6"
14
+ tags: [projects, tasks, sprints, okrs, agile, milestones, team]
15
+ isPublic: true
16
+
17
+ workspace:
18
+ name: Project Management OS
19
+ description: "OKR-first project management workspace. Objectives, key results, projects, sprints, and tasks as connected entities — navigable from any direction in a relationship graph. Designed for solo founders and small teams who want goal-execution alignment without per-seat overhead."
20
+ proposalId: pm-os-v1
21
+ subtype: project-management
22
+ visibility: pod_visible
23
+
24
+ profiles:
25
+ - slug: okr
26
+ displayName: OKR
27
+ icon: target
28
+ color: "#2E4EAD"
29
+ description: "A quarterly objective with measurable key results"
30
+ scope: WORKSPACE
31
+ properties:
32
+ - slug: okr-status
33
+ label: Status
34
+ valueType: string
35
+ inputType: select
36
+ enumValues: [Planning, Active, On Track, At Risk, Completed, Cancelled]
37
+ constraints:
38
+ defaultValue: Active
39
+ - slug: okr-quarter
40
+ label: Quarter
41
+ valueType: string
42
+ inputType: select
43
+ enumValues: ["Q1 2025", "Q2 2025", "Q3 2025", "Q4 2025", "Q1 2026", "Q2 2026", "Q3 2026", "Q4 2026"]
44
+ - slug: okr-owner
45
+ label: Owner
46
+ valueType: entity_id
47
+ targetProfileSlug: person
48
+ - slug: okr-type
49
+ label: Type
50
+ valueType: string
51
+ inputType: select
52
+ enumValues: [Company, Team, Personal]
53
+ - slug: kr1-label
54
+ label: Key Result 1
55
+ valueType: string
56
+ - slug: kr1-target
57
+ label: KR1 Target
58
+ valueType: number
59
+ - slug: kr1-current
60
+ label: KR1 Current
61
+ valueType: number
62
+ - slug: kr1-unit
63
+ label: KR1 Unit
64
+ valueType: string
65
+ - slug: kr2-label
66
+ label: Key Result 2
67
+ valueType: string
68
+ - slug: kr2-target
69
+ label: KR2 Target
70
+ valueType: number
71
+ - slug: kr2-current
72
+ label: KR2 Current
73
+ valueType: number
74
+ - slug: kr2-unit
75
+ label: KR2 Unit
76
+ valueType: string
77
+ - slug: kr3-label
78
+ label: Key Result 3
79
+ valueType: string
80
+ - slug: kr3-target
81
+ label: KR3 Target
82
+ valueType: number
83
+ - slug: kr3-current
84
+ label: KR3 Current
85
+ valueType: number
86
+ - slug: kr3-unit
87
+ label: KR3 Unit
88
+ valueType: string
89
+ - slug: okr-confidence
90
+ label: Confidence
91
+ valueType: string
92
+ inputType: select
93
+ enumValues: [High, Medium, Low]
94
+ - slug: okr-review-date
95
+ label: Review Date
96
+ valueType: date
97
+ - slug: okr-notes
98
+ label: Notes
99
+ valueType: string
100
+
101
+ - slug: project
102
+ displayName: Project
103
+ icon: folder
104
+ color: "#7C3AED"
105
+ description: "A bounded body of work with a clear scope, owner, and deadline"
106
+ scope: WORKSPACE
107
+ properties:
108
+ - slug: project-status
109
+ label: Status
110
+ valueType: string
111
+ inputType: select
112
+ enumValues: [Backlog, Planning, In Progress, On Hold, Completed, Cancelled]
113
+ constraints:
114
+ defaultValue: In Progress
115
+ - slug: project-priority
116
+ label: Priority
117
+ valueType: string
118
+ inputType: select
119
+ enumValues: [Critical, High, Medium, Low]
120
+ - slug: project-linked-okr
121
+ label: Linked OKR
122
+ valueType: entity_id
123
+ targetProfileSlug: okr
124
+ - slug: project-owner
125
+ label: Owner
126
+ valueType: entity_id
127
+ targetProfileSlug: person
128
+ - slug: project-start
129
+ label: Start Date
130
+ valueType: date
131
+ - slug: project-deadline
132
+ label: Deadline
133
+ valueType: date
134
+ - slug: project-milestone
135
+ label: Milestone
136
+ valueType: string
137
+ - slug: project-health
138
+ label: Health
139
+ valueType: string
140
+ inputType: select
141
+ enumValues: [Green, Yellow, Red]
142
+ - slug: project-effort
143
+ label: Effort (days)
144
+ valueType: number
145
+ - slug: project-tags
146
+ label: Tags
147
+ valueType: array
148
+ inputType: select
149
+ enumValues: [Product, Marketing, Ops, Engineering, Design, Research]
150
+ - slug: project-outcome
151
+ label: Expected Outcome
152
+ valueType: string
153
+ - slug: project-description
154
+ label: Description
155
+ valueType: string
156
+ inputType: textarea
157
+
158
+ - slug: task
159
+ displayName: Task
160
+ icon: check-square
161
+ color: "#059669"
162
+ description: "An atomic unit of work with a clear owner and due date"
163
+ scope: WORKSPACE
164
+ properties:
165
+ - slug: task-status
166
+ label: Status
167
+ valueType: string
168
+ inputType: select
169
+ enumValues: [Backlog, Todo, In Progress, Review, Done, Cancelled]
170
+ constraints:
171
+ defaultValue: Todo
172
+ - slug: task-priority
173
+ label: Priority
174
+ valueType: string
175
+ inputType: select
176
+ enumValues: [Critical, High, Medium, Low]
177
+ constraints:
178
+ defaultValue: Medium
179
+ - slug: task-assignee
180
+ label: Assignee
181
+ valueType: entity_id
182
+ targetProfileSlug: person
183
+ - slug: task-project
184
+ label: Project
185
+ valueType: entity_id
186
+ targetProfileSlug: project
187
+ - slug: task-sprint
188
+ label: Sprint
189
+ valueType: entity_id
190
+ targetProfileSlug: sprint
191
+ - slug: task-due-date
192
+ label: Due Date
193
+ valueType: date
194
+ - slug: task-effort
195
+ label: Effort (hours)
196
+ valueType: number
197
+ - slug: task-type
198
+ label: Type
199
+ valueType: string
200
+ inputType: select
201
+ enumValues: [Feature, Bug, Research, Content, Ops, Review, Meeting]
202
+ - slug: task-blocked-by
203
+ label: Blocked By
204
+ valueType: string
205
+ - slug: task-tags
206
+ label: Tags
207
+ valueType: array
208
+ inputType: select
209
+ enumValues: [quick-win, deep-work, async, sync, waiting, recurring]
210
+
211
+ - slug: sprint
212
+ displayName: Sprint
213
+ icon: zap
214
+ color: "#D97706"
215
+ description: "A fixed execution cycle with a clear scope, start/end, and retrospective"
216
+ scope: WORKSPACE
217
+ properties:
218
+ - slug: sprint-status
219
+ label: Status
220
+ valueType: string
221
+ inputType: select
222
+ enumValues: [Planning, Active, Review, Completed]
223
+ constraints:
224
+ defaultValue: Active
225
+ - slug: sprint-number
226
+ label: Sprint #
227
+ valueType: number
228
+ - slug: sprint-start
229
+ label: Start Date
230
+ valueType: date
231
+ - slug: sprint-end
232
+ label: End Date
233
+ valueType: date
234
+ - slug: sprint-goal
235
+ label: Sprint Goal
236
+ valueType: string
237
+ - slug: sprint-capacity
238
+ label: Capacity (hours)
239
+ valueType: number
240
+ - slug: sprint-velocity
241
+ label: Velocity (hours completed)
242
+ valueType: number
243
+ - slug: sprint-task-count
244
+ label: Task Count
245
+ valueType: number
246
+ - slug: sprint-completed-count
247
+ label: Completed Count
248
+ valueType: number
249
+ - slug: sprint-linked-okr
250
+ label: Linked OKR
251
+ valueType: entity_id
252
+ targetProfileSlug: okr
253
+
254
+ - slug: person
255
+ displayName: Person
256
+ icon: user
257
+ color: "#0891B2"
258
+ description: "Team member or stakeholder"
259
+ scope: WORKSPACE
260
+ properties:
261
+ - slug: person-role
262
+ label: Role
263
+ valueType: string
264
+ inputType: select
265
+ enumValues: [Founder, Engineer, Designer, PM, Marketing, Ops, Advisor, Stakeholder]
266
+ - slug: person-email
267
+ label: Email
268
+ valueType: string
269
+ - slug: person-focus
270
+ label: Current Focus
271
+ valueType: string
272
+ - slug: person-okr-owner
273
+ label: OKR Owner
274
+ valueType: boolean
275
+ - slug: person-availability
276
+ label: Availability (hrs/week)
277
+ valueType: number
278
+ - slug: person-timezone
279
+ label: Timezone
280
+ valueType: string
281
+
282
+ # Inlined from project-management-pack (the only genuinely new profile).
283
+ - slug: milestone
284
+ displayName: Milestone
285
+ icon: flag
286
+ color: "#F59E0B"
287
+ description: "Key deliverables and checkpoints"
288
+ scope: WORKSPACE
289
+ properties:
290
+ - slug: due-date
291
+ label: Target Date
292
+ valueType: date
293
+ constraints:
294
+ required: true
295
+ - slug: status
296
+ label: Status
297
+ valueType: string
298
+ inputType: select
299
+ enumValues: [upcoming, in-progress, completed, missed]
300
+ - slug: description
301
+ label: Description
302
+ valueType: string
303
+ inputType: textarea
304
+
305
+ views:
306
+ - name: OKR Dashboard
307
+ slug: okr-dashboard
308
+ type: kanban
309
+ scopeProfileSlug: okr
310
+ defaultView: true
311
+ groupBy: okr-status
312
+ description: "All OKRs by status with progress indicators"
313
+ config:
314
+ groupByField: okr-status
315
+
316
+ - name: OKR → Projects → Tasks
317
+ slug: okr-hierarchy
318
+ type: graph
319
+ scopeProfileSlugs: [okr, project, task]
320
+ description: "Three-level drill-down: OKR expands to linked projects, projects expand to tasks"
321
+ config:
322
+ hierarchyEdges:
323
+ - { parent: okr, child: project, via: project-linked-okr }
324
+ - { parent: project, child: task, via: task-project }
325
+
326
+ - name: Sprint Board
327
+ slug: sprint-board
328
+ type: kanban
329
+ scopeProfileSlug: task
330
+ groupBy: task-status
331
+ description: "Active sprint tasks in Backlog / Todo / In Progress / Review / Done lanes"
332
+ config:
333
+ groupByField: task-status
334
+ filterBy:
335
+ field: task-sprint
336
+ operator: is_active
337
+
338
+ - name: All Sprints
339
+ slug: sprint-list
340
+ type: table
341
+ scopeProfileSlug: sprint
342
+ description: "Table of all sprints with velocity and completion stats"
343
+ config:
344
+ sortBy: sprint-number
345
+ sortOrder: desc
346
+ visibleColumns: [sprint-number, sprint-status, sprint-start, sprint-end, sprint-goal, sprint-velocity, sprint-completed-count]
347
+ defaultSort: { field: sprint-number, direction: desc }
348
+
349
+ - name: Project Timeline
350
+ slug: project-timeline
351
+ type: timeline
352
+ scopeProfileSlug: project
353
+ description: "Gantt-style timeline of all active projects"
354
+ config:
355
+ startField: project-start
356
+ endField: project-deadline
357
+ colorBy: project-status
358
+
359
+ - name: Project Board
360
+ slug: project-board
361
+ type: kanban
362
+ scopeProfileSlug: project
363
+ groupBy: project-status
364
+ description: "Projects by status lane"
365
+ config:
366
+ groupByField: project-status
367
+
368
+ - name: Task Inbox
369
+ slug: task-inbox
370
+ type: table
371
+ scopeProfileSlug: task
372
+ description: "All open tasks sorted by priority"
373
+ config:
374
+ sortBy: task-priority
375
+ visibleColumns: [task-status, task-priority, task-type, task-assignee, task-due-date, task-sprint]
376
+ defaultSort: { field: task-priority, direction: desc }
377
+ filterBy:
378
+ field: task-status
379
+ operator: not_in
380
+ value: [Done, Cancelled]
381
+
382
+ - name: Weekly Focus
383
+ slug: weekly-focus
384
+ type: table
385
+ scopeProfileSlug: task
386
+ description: "Tasks due this week — your daily planning view"
387
+ config:
388
+ sortBy: task-priority
389
+ filterBy:
390
+ field: task-due-date
391
+ operator: this_week
392
+ defaultSort: { field: task-priority, direction: desc }
393
+
394
+ - name: Relationship Graph
395
+ slug: relationship-graph
396
+ type: graph
397
+ scopeProfileSlugs: [okr, project, task, sprint, person]
398
+ description: "Full entity graph: OKR → Project → Task → Sprint → Person. The Synap PM OS structural demo."
399
+ config:
400
+ layout: force
401
+ showRelations: true
402
+
403
+ - name: Team Workload
404
+ slug: team-workload
405
+ type: table
406
+ scopeProfileSlug: person
407
+ description: "Team members with linked task count, sprint assignment, and availability"
408
+ config:
409
+ visibleColumns: [person-role, person-focus, person-availability, person-okr-owner]
410
+
411
+ - name: Retrospective Board
412
+ slug: retrospective-board
413
+ type: kanban
414
+ scopeProfileSlug: sprint
415
+ groupBy: sprint-status
416
+ description: "Sprint retrospectives — completed sprints with retrospective notes attached as documents"
417
+ config:
418
+ groupByField: sprint-status
419
+
420
+ - name: OKR Progress Table
421
+ slug: okr-progress
422
+ type: table
423
+ scopeProfileSlug: okr
424
+ description: "All OKRs with key result progress bars for quarterly review"
425
+ config:
426
+ visibleColumns: [okr-status, okr-quarter, okr-type, okr-owner, okr-confidence, okr-review-date]
427
+ defaultSort: { field: okr-quarter, direction: desc }
428
+
429
+ - name: Backlog
430
+ slug: backlog
431
+ type: table
432
+ scopeProfileSlug: task
433
+ description: "Unscheduled tasks awaiting sprint assignment"
434
+ config:
435
+ sortBy: task-priority
436
+ filterBy:
437
+ field: task-status
438
+ operator: is
439
+ value: Backlog
440
+ defaultSort: { field: task-priority, direction: desc }
441
+
442
+ - name: Calendar
443
+ slug: calendar
444
+ type: calendar
445
+ scopeProfileSlugs: [task, sprint, project]
446
+ description: "Unified calendar of task due dates, sprint cycles, and project deadlines"
447
+ config:
448
+ dateField: task-due-date
449
+
450
+ - name: OKRs by Quarter
451
+ slug: okr-by-quarter
452
+ type: table
453
+ scopeProfileSlug: okr
454
+ groupBy: okr-quarter
455
+ description: "Historical OKRs organized by quarter for retrospective planning"
456
+ config:
457
+ groupByField: okr-quarter
458
+ visibleColumns: [okr-status, okr-quarter, okr-type, okr-owner, okr-confidence]
459
+
460
+ # Pack views (inlined from project-management-pack).
461
+ - name: Task Board
462
+ slug: task-board
463
+ type: kanban
464
+ scopeProfileSlug: task
465
+ description: "Pack task board grouped by status"
466
+ config:
467
+ groupByField: status
468
+
469
+ - name: Projects
470
+ slug: projects
471
+ type: table
472
+ scopeProfileSlug: project
473
+ description: "Pack projects table"
474
+ config: {}
475
+
476
+ # Bento dashboard views (per-profile).
477
+ - name: OKR Dashboard
478
+ slug: okr-dashboard-bento
479
+ type: bento
480
+ scopeProfileSlug: okr
481
+ config:
482
+ layout: bento
483
+ blocks:
484
+ - { id: okr-header, kind: widget, widgetType: section-header, pos: { x: 0, y: 0, w: 12, h: 2 }, config: { title: OKRs, icon: Target, color: "#14B8A6", profileSlug: okr } }
485
+ - { id: okr-count-active, kind: widget, widgetType: stat-card, pos: { x: 0, y: 2, w: 3, h: 3 }, config: { label: Active OKRs, aggregation: count, profileSlug: okr, color: "#14B8A6", icon: Target } }
486
+ - { id: okr-count-on-track, kind: widget, widgetType: entity-count, pos: { x: 3, y: 2, w: 3, h: 3 }, config: { profileSlug: okr, label: On Track, icon: TrendingUp, filter: { status: on-track }, color: "#10B981" } }
487
+ - { id: okr-count-at-risk, kind: widget, widgetType: entity-count, pos: { x: 6, y: 2, w: 3, h: 3 }, config: { profileSlug: okr, label: At Risk, icon: AlertTriangle, filter: { status: at-risk }, color: "#F59E0B" } }
488
+ - { id: okr-count-completed, kind: widget, widgetType: entity-count, pos: { x: 9, y: 2, w: 3, h: 3 }, config: { profileSlug: okr, label: Completed, icon: CheckCircle, filter: { status: completed }, color: "#6366F1" } }
489
+ - { id: okr-spotlight, kind: widget, widgetType: entity-spotlight, pos: { x: 0, y: 5, w: 5, h: 4 }, config: { profileSlug: okr, seed: daily, layout: detail, subtitleField: owner, color: "#14B8A6" } }
490
+ - { id: okr-projects, kind: widget, widgetType: entity-list, pos: { x: 5, y: 5, w: 7, h: 4 }, config: { profileSlug: project, title: Active Projects, limit: 8, variant: compact } }
491
+ - { id: okr-table, kind: view, viewName: OKR Progress Table, pos: { x: 0, y: 9, w: 12, h: 8 } }
492
+
493
+ - name: Project Dashboard
494
+ slug: project-dashboard
495
+ type: bento
496
+ scopeProfileSlug: project
497
+ config:
498
+ layout: bento
499
+ blocks:
500
+ - { id: proj-header, kind: widget, widgetType: section-header, pos: { x: 0, y: 0, w: 12, h: 2 }, config: { title: Projects, icon: FolderOpen, color: "#F97316", profileSlug: project } }
501
+ - { id: proj-active, kind: widget, widgetType: entity-count, pos: { x: 0, y: 2, w: 3, h: 3 }, config: { profileSlug: project, label: Active, icon: Play, filter: { status: active }, color: "#10B981" } }
502
+ - { id: proj-planning, kind: widget, widgetType: entity-count, pos: { x: 3, y: 2, w: 3, h: 3 }, config: { profileSlug: project, label: Planning, icon: Map, filter: { status: planning }, color: "#3B82F6" } }
503
+ - { id: proj-hold, kind: widget, widgetType: entity-count, pos: { x: 6, y: 2, w: 3, h: 3 }, config: { profileSlug: project, label: On Hold, icon: PauseCircle, filter: { status: on-hold }, color: "#F59E0B" } }
504
+ - { id: proj-done, kind: widget, widgetType: entity-count, pos: { x: 9, y: 2, w: 3, h: 3 }, config: { profileSlug: project, label: Completed, icon: CheckCircle, filter: { status: completed }, color: "#8B5CF6" } }
505
+ - { id: proj-spotlight, kind: widget, widgetType: entity-spotlight, pos: { x: 0, y: 5, w: 5, h: 4 }, config: { profileSlug: project, seed: daily, layout: detail, subtitleField: area, color: "#F97316" } }
506
+ - { id: proj-tasks, kind: widget, widgetType: entity-list, pos: { x: 5, y: 5, w: 7, h: 4 }, config: { profileSlug: task, title: Open Tasks, limit: 8, variant: compact } }
507
+ - { id: proj-board, kind: view, viewName: Project Board, pos: { x: 0, y: 9, w: 12, h: 8 } }
508
+
509
+ - name: Task Dashboard
510
+ slug: task-dashboard
511
+ type: bento
512
+ scopeProfileSlug: task
513
+ config:
514
+ layout: bento
515
+ blocks:
516
+ - { id: task-header, kind: widget, widgetType: section-header, pos: { x: 0, y: 0, w: 12, h: 2 }, config: { title: Tasks, icon: CheckSquare, color: "#6366F1", profileSlug: task } }
517
+ - { id: task-todo, kind: widget, widgetType: entity-count, pos: { x: 0, y: 2, w: 3, h: 3 }, config: { profileSlug: task, label: To Do, icon: Circle, filter: { status: todo }, color: "#6B7280" } }
518
+ - { id: task-progress, kind: widget, widgetType: entity-count, pos: { x: 3, y: 2, w: 3, h: 3 }, config: { profileSlug: task, label: In Progress, icon: Loader, filter: { status: in-progress }, color: "#3B82F6" } }
519
+ - { id: task-review, kind: widget, widgetType: entity-count, pos: { x: 6, y: 2, w: 3, h: 3 }, config: { profileSlug: task, label: In Review, icon: Eye, filter: { status: review }, color: "#F59E0B" } }
520
+ - { id: task-done, kind: widget, widgetType: entity-count, pos: { x: 9, y: 2, w: 3, h: 3 }, config: { profileSlug: task, label: Done, icon: CheckCircle, filter: { status: done }, color: "#10B981" } }
521
+ - { id: task-capture, kind: widget, widgetType: quick-capture, pos: { x: 0, y: 5, w: 4, h: 3 }, config: { presetProfileSlug: task } }
522
+ - { id: task-list, kind: widget, widgetType: entity-list, pos: { x: 4, y: 5, w: 8, h: 3 }, config: { profileSlug: task, title: Recent Tasks, limit: 6, variant: compact } }
523
+ - { id: task-sprint-board, kind: view, viewName: Sprint Board, pos: { x: 0, y: 8, w: 12, h: 8 } }
524
+
525
+ - name: Sprint Dashboard
526
+ slug: sprint-dashboard
527
+ type: bento
528
+ scopeProfileSlug: sprint
529
+ config:
530
+ layout: bento
531
+ blocks:
532
+ - { id: sprint-header, kind: widget, widgetType: section-header, pos: { x: 0, y: 0, w: 12, h: 2 }, config: { title: Sprints, icon: Zap, color: "#8B5CF6", profileSlug: sprint } }
533
+ - { id: sprint-total, kind: widget, widgetType: stat-card, pos: { x: 0, y: 2, w: 3, h: 3 }, config: { label: Total Sprints, aggregation: count, profileSlug: sprint, color: "#8B5CF6", icon: Zap } }
534
+ - { id: sprint-active, kind: widget, widgetType: entity-count, pos: { x: 3, y: 2, w: 3, h: 3 }, config: { profileSlug: sprint, label: Active, icon: Play, filter: { status: active }, color: "#10B981" } }
535
+ - { id: sprint-tasks, kind: widget, widgetType: entity-count, pos: { x: 6, y: 2, w: 3, h: 3 }, config: { profileSlug: task, label: Sprint Tasks, icon: CheckSquare, color: "#6366F1" } }
536
+ - { id: sprint-velocity, kind: widget, widgetType: entity-list, pos: { x: 0, y: 5, w: 12, h: 4 }, config: { profileSlug: sprint, title: Recent Sprints, limit: 6, variant: detailed } }
537
+ - { id: sprint-board, kind: view, viewName: Sprint Board, pos: { x: 0, y: 9, w: 12, h: 8 } }
538
+
539
+ # Schema-level links between entity types (inlined from project-management-pack).
540
+ entityLinks:
541
+ - { sourceProfileSlug: task, targetProfileSlug: project, type: belongs_to, label: "Belongs to" }
542
+ - { sourceProfileSlug: milestone, targetProfileSlug: project, type: belongs_to, label: "Part of" }
543
+
544
+ displayTemplates:
545
+ - name: OKR Card
546
+ description: ""
547
+ entityType: okr
548
+ targetType: entity
549
+ isDefault: true
550
+ config:
551
+ layout:
552
+ structure:
553
+ header: { enabled: true, slots: [okr-status, okr-quarter, okr-type], layout: horizontal }
554
+ sidebar: { enabled: true, slots: [okr-owner, okr-confidence, okr-review-date], position: right, width: 260px, layout: vertical }
555
+ content: { enabled: true, slots: [kr1-label, kr1-current, kr2-label, kr2-current, kr3-label, kr3-current], layout: vertical }
556
+ fieldMapping:
557
+ okr-status: { slot: okr-status, renderer: { type: badge }, order: 1 }
558
+ okr-quarter: { slot: okr-quarter, renderer: { type: badge }, order: 2 }
559
+ okr-type: { slot: okr-type, renderer: { type: badge }, order: 3 }
560
+ okr-owner: { slot: okr-owner, renderer: { type: avatar }, order: 4 }
561
+ okr-confidence: { slot: okr-confidence, renderer: { type: badge }, order: 5 }
562
+ okr-review-date: { slot: okr-review-date, renderer: { type: date, format: relative }, order: 6 }
563
+ kr1-label: { slot: kr1-label, renderer: { type: text }, order: 7, label: KR1, showLabel: true }
564
+ kr1-current: { slot: kr1-current, renderer: { type: progress }, order: 8 }
565
+ kr2-label: { slot: kr2-label, renderer: { type: text }, order: 9, label: KR2, showLabel: true }
566
+ kr2-current: { slot: kr2-current, renderer: { type: progress }, order: 10 }
567
+ kr3-label: { slot: kr3-label, renderer: { type: text }, order: 11, label: KR3, showLabel: true }
568
+ kr3-current: { slot: kr3-current, renderer: { type: progress }, order: 12 }
569
+ colors:
570
+ accent: "#2E4EAD"
571
+
572
+ - name: Project Card
573
+ description: ""
574
+ entityType: project
575
+ targetType: entity
576
+ isDefault: true
577
+ config:
578
+ layout:
579
+ structure:
580
+ header: { enabled: true, slots: [project-status, project-priority, project-health], layout: horizontal }
581
+ sidebar: { enabled: true, slots: [project-linked-okr, project-owner, project-deadline, project-effort], position: right, width: 260px, layout: vertical }
582
+ content: { enabled: true, slots: [project-milestone, project-outcome, project-tags], layout: vertical }
583
+ fieldMapping:
584
+ project-status: { slot: project-status, renderer: { type: badge }, order: 1 }
585
+ project-priority: { slot: project-priority, renderer: { type: badge }, order: 2 }
586
+ project-health: { slot: project-health, renderer: { type: badge }, order: 3 }
587
+ project-linked-okr: { slot: project-linked-okr, renderer: { type: link }, order: 4 }
588
+ project-owner: { slot: project-owner, renderer: { type: avatar }, order: 5 }
589
+ project-deadline: { slot: project-deadline, renderer: { type: date, format: relative }, order: 6 }
590
+ project-effort: { slot: project-effort, renderer: { type: number }, order: 7 }
591
+ project-milestone: { slot: project-milestone, renderer: { type: text }, order: 8, label: Milestone, showLabel: true }
592
+ project-outcome: { slot: project-outcome, renderer: { type: text }, order: 9, label: Expected Outcome, showLabel: true }
593
+ project-tags: { slot: project-tags, renderer: { type: badge }, order: 10 }
594
+ colors:
595
+ accent: "#7C3AED"
596
+
597
+ - name: Task Card
598
+ description: ""
599
+ entityType: task
600
+ targetType: entity
601
+ isDefault: true
602
+ config:
603
+ layout:
604
+ structure:
605
+ header: { enabled: true, slots: [task-status, task-priority, task-type], layout: horizontal }
606
+ sidebar: { enabled: true, slots: [task-project, task-sprint, task-assignee, task-due-date, task-effort], position: right, width: 260px, layout: vertical }
607
+ content: { enabled: true, slots: [task-blocked-by, task-tags], layout: vertical }
608
+ fieldMapping:
609
+ task-status: { slot: task-status, renderer: { type: badge }, order: 1 }
610
+ task-priority: { slot: task-priority, renderer: { type: badge }, order: 2 }
611
+ task-type: { slot: task-type, renderer: { type: badge }, order: 3 }
612
+ task-project: { slot: task-project, renderer: { type: link }, order: 4 }
613
+ task-sprint: { slot: task-sprint, renderer: { type: link }, order: 5 }
614
+ task-assignee: { slot: task-assignee, renderer: { type: avatar }, order: 6 }
615
+ task-due-date: { slot: task-due-date, renderer: { type: date, format: relative }, order: 7 }
616
+ task-effort: { slot: task-effort, renderer: { type: number }, order: 8 }
617
+ task-blocked-by: { slot: task-blocked-by, renderer: { type: text }, order: 9, label: Blocked By, showLabel: true }
618
+ task-tags: { slot: task-tags, renderer: { type: badge }, order: 10 }
619
+ colors:
620
+ accent: "#059669"
621
+
622
+ - name: Sprint Card
623
+ description: ""
624
+ entityType: sprint
625
+ targetType: entity
626
+ isDefault: true
627
+ config:
628
+ layout:
629
+ structure:
630
+ header: { enabled: true, slots: [sprint-status, sprint-number], layout: horizontal }
631
+ sidebar: { enabled: true, slots: [sprint-linked-okr, sprint-start, sprint-end, sprint-capacity], position: right, width: 260px, layout: vertical }
632
+ content: { enabled: true, slots: [sprint-goal, sprint-velocity, sprint-completed-count], layout: vertical }
633
+ fieldMapping:
634
+ sprint-status: { slot: sprint-status, renderer: { type: badge }, order: 1 }
635
+ sprint-number: { slot: sprint-number, renderer: { type: number }, order: 2 }
636
+ sprint-linked-okr: { slot: sprint-linked-okr, renderer: { type: link }, order: 3 }
637
+ sprint-start: { slot: sprint-start, renderer: { type: date }, order: 4 }
638
+ sprint-end: { slot: sprint-end, renderer: { type: date, format: relative }, order: 5 }
639
+ sprint-capacity: { slot: sprint-capacity, renderer: { type: number }, order: 6 }
640
+ sprint-goal: { slot: sprint-goal, renderer: { type: text }, order: 7, label: Sprint Goal, showLabel: true }
641
+ sprint-velocity: { slot: sprint-velocity, renderer: { type: progress }, order: 8, label: Velocity, showLabel: true }
642
+ sprint-completed-count: { slot: sprint-completed-count, renderer: { type: number }, order: 9, label: Tasks, showLabel: true }
643
+ colors:
644
+ accent: "#D97706"
645
+
646
+ seedEntities:
647
+ - profileSlug: person
648
+ title: Antoine
649
+ properties:
650
+ person-role: Founder
651
+ person-email: antoine@synap.io
652
+ person-focus: Synap template stack and PM OS launch
653
+ person-okr-owner: true
654
+ person-availability: 40
655
+ person-timezone: Europe/Paris
656
+
657
+ - profileSlug: person
658
+ title: Léa Moreau
659
+ properties:
660
+ person-role: Engineer
661
+ person-email: lea@synap.io
662
+ person-focus: Display template rendering and entity graph view
663
+ person-okr-owner: false
664
+ person-availability: 35
665
+ person-timezone: Europe/Paris
666
+
667
+ - profileSlug: okr
668
+ title: "Launch Synap PM OS — Q1 2026"
669
+ properties:
670
+ okr-status: Active
671
+ okr-quarter: "Q1 2026"
672
+ okr-owner: "ref:person:Antoine"
673
+ okr-type: Company
674
+ kr1-label: Template validated and live in staging
675
+ kr1-target: 1
676
+ kr1-current: 0
677
+ kr1-unit: milestone
678
+ kr2-label: Onboarding guide published (1,000 words min)
679
+ kr2-target: 1
680
+ kr2-current: 0
681
+ kr2-unit: doc
682
+ kr3-label: Demo video recorded and embedded on landing page
683
+ kr3-target: 1
684
+ kr3-current: 0
685
+ kr3-unit: video
686
+ okr-confidence: High
687
+ okr-review-date: "2026-03-28"
688
+ content: |
689
+ # OKR Brief: Launch Synap PM OS — Q1 2026
690
+
691
+ ## Objective
692
+ Ship a fully functional, entity-first project management workspace template that demonstrates the core Synap thesis: goals, projects, sprints, and tasks as a connected relationship graph — not siloed tools.
693
+
694
+ ## Why This Matters
695
+ The PM software market is $9.76B and growing at 15.4% CAGR, but every major tool treats OKRs and task execution as separate concerns. Asana Goals, Monday OKR boards, ClickUp Goals — all bolted on. None architecturally connects an Objective to the tasks that should advance it.
696
+
697
+ Synap PM OS is the proof of concept that our entity model solves this. Before we can tell founders and small teams that Synap replaces their PM stack, we need to show them what that looks like at the template layer.
698
+
699
+ ## Success Definition
700
+ By March 31, 2026:
701
+ - Template JSON validated and live in staging with all 5 profiles, 15 views, 4 display templates, and 26 seed entity relations
702
+ - Onboarding guide published: covers OKR setup, sprint configuration, and the relationship graph demo in under 15 minutes of reading
703
+ - Demo video (3-5 minutes) showing the OKR → Project → Task traversal from the entity card and the relationship graph view
704
+
705
+ ## Key Risks
706
+ - Graph view rendering performance on entity-dense workspaces needs testing before public launch
707
+ - OKR progress bar computation logic (KR current / KR target) must be validated against edge cases (zero targets, >100% completion)
708
+
709
+ ## Dependencies
710
+ - Display template renderer must support progress-bar for numeric fields before template goes live
711
+ - Seed entity relation pipeline must resolve `ref:` values for all 5 profiles
712
+
713
+ - profileSlug: okr
714
+ title: "Grow Template Activations — Q1 2026"
715
+ properties:
716
+ okr-status: Active
717
+ okr-quarter: "Q1 2026"
718
+ okr-owner: "ref:person:Antoine"
719
+ okr-type: Company
720
+ kr1-label: Template activations (installs)
721
+ kr1-target: 500
722
+ kr1-current: 0
723
+ kr1-unit: activations
724
+ kr2-label: Newsletter subscribers from PM OS launch campaign
725
+ kr2-target: 300
726
+ kr2-current: 0
727
+ kr2-unit: subscribers
728
+ kr3-label: LinkedIn post impressions on PM OS launch thread
729
+ kr3-target: 15000
730
+ kr3-current: 0
731
+ kr3-unit: impressions
732
+ okr-confidence: Medium
733
+ okr-review-date: "2026-03-28"
734
+
735
+ - profileSlug: project
736
+ title: Build PM OS Template
737
+ properties:
738
+ project-status: In Progress
739
+ project-priority: Critical
740
+ project-linked-okr: "ref:okr:Launch Synap PM OS — Q1 2026"
741
+ project-owner: "ref:person:Antoine"
742
+ project-start: "2026-02-17"
743
+ project-deadline: "2026-03-07"
744
+ project-milestone: Template JSON validated in staging
745
+ project-health: Green
746
+ project-effort: 12
747
+ project-tags: [Product, Engineering]
748
+ project-outcome: "A fully functional PM OS workspace template demonstrating the OKR → Project → Task entity graph"
749
+ content: |
750
+ # Project Brief: Build PM OS Template
751
+
752
+ ## Scope
753
+ Design, build, and validate the Synap PM OS workspace template JSON. This includes 5 entity profiles (OKR, Project, Task, Sprint, Person), 15 views, a 12-widget dashboard, 4 display templates, 19 seed entities, and 26 suggested relations.
754
+
755
+ ## Deliverables
756
+ 1. **pm-os-template.json** — Complete workspace template with all profiles, views, dashboard, display templates, seed entities, and suggestedRelations
757
+ 2. **Validation report** — Confirms all ref: values resolve correctly, all entity_id properties point to valid targetProfileSlugs, all views reference existing profiles
758
+ 3. **Graph demo check** — Confirms the OKR → Project → Task traversal is visible in the relationship graph view from both the OKR entity card and the Task entity card
759
+
760
+ ## Architecture Decisions
761
+ - **5 profiles, not 6**: Milestone considered as a sixth profile but folded into Project as a property to reduce complexity for first-time users. Can be promoted to a full profile in v2.
762
+ - **Sprint as first-class entity**: Unlike Asana/Monday which treat sprints as a view filter or folder, Sprint is a proper entity with velocity tracking and retrospective document content.
763
+ - **OKR progress via three KR fields**: Rather than a dynamic KR sub-entity (complex to render), KR1/KR2/KR3 are direct properties with label + target + current + unit. Keeps the OKR card readable without a sub-table.
764
+
765
+ ## Timeline
766
+ - Week 1 (Feb 17–21): Profile schemas and property definitions
767
+ - Week 2 (Feb 24–28): Views, dashboard, display templates
768
+ - Week 3 (Mar 2–7): Seed entities, relations, content, validation
769
+
770
+ - profileSlug: project
771
+ title: Publish PM OS Onboarding Guide
772
+ properties:
773
+ project-status: Backlog
774
+ project-priority: High
775
+ project-linked-okr: "ref:okr:Launch Synap PM OS — Q1 2026"
776
+ project-owner: "ref:person:Antoine"
777
+ project-start: "2026-03-03"
778
+ project-deadline: "2026-03-21"
779
+ project-milestone: Guide live at synap.io/templates/pm-os
780
+ project-health: Green
781
+ project-effort: 4
782
+ project-tags: [Product, Marketing]
783
+ project-outcome: Founders and small teams can install and configure the PM OS in under 15 minutes using the guide
784
+
785
+ - profileSlug: project
786
+ title: PM OS Distribution Campaign
787
+ properties:
788
+ project-status: Planning
789
+ project-priority: High
790
+ project-linked-okr: "ref:okr:Grow Template Activations — Q1 2026"
791
+ project-owner: "ref:person:Antoine"
792
+ project-start: "2026-03-10"
793
+ project-deadline: "2026-03-31"
794
+ project-milestone: Launch LinkedIn thread + Newsletter Issue 14
795
+ project-health: Green
796
+ project-effort: 5
797
+ project-tags: [Marketing]
798
+ project-outcome: 500 template activations and 300 newsletter subs from PM OS launch
799
+
800
+ - profileSlug: project
801
+ title: Waitlist Landing Page
802
+ properties:
803
+ project-status: Planning
804
+ project-priority: Medium
805
+ project-linked-okr: "ref:okr:Grow Template Activations — Q1 2026"
806
+ project-owner: "ref:person:Antoine"
807
+ project-start: "2026-03-01"
808
+ project-deadline: "2026-03-14"
809
+ project-milestone: Landing page live with waitlist form
810
+ project-health: Yellow
811
+ project-effort: 3
812
+ project-tags: [Product, Marketing]
813
+ project-outcome: Dedicated landing page for PM OS with activation count display and waitlist CTA
814
+
815
+ - profileSlug: sprint
816
+ title: "Sprint 3 — Content OS & Second Brain Final"
817
+ properties:
818
+ sprint-status: Completed
819
+ sprint-number: 3
820
+ sprint-start: "2026-02-03"
821
+ sprint-end: "2026-02-14"
822
+ sprint-goal: "Ship Content OS and Second Brain templates with full schema upgrade (entity_id, relations, displayTemplates, content)"
823
+ sprint-capacity: 60
824
+ sprint-velocity: 58
825
+ sprint-task-count: 14
826
+ sprint-completed-count: 13
827
+ content: |
828
+ # Sprint 3 Retrospective
829
+
830
+ **Sprint Goal**: Ship Content OS and Second Brain templates with full schema upgrade.
831
+
832
+ **Outcome**: 13/14 tasks completed. Velocity 58/60 hours. One carry-forward: CRM display template polish (moved to Sprint 4).
833
+
834
+ ## What Went Well
835
+ - Schema upgrade process was smooth once ref_map pattern was established for seed entities
836
+ - Content entities (deal briefs, activity notes, project briefs) raised the quality bar significantly — writing content as a real user, not a demonstrator, produced noticeably better seed data
837
+ - suggestedRelations architecture creates a graph density pattern: CRM (22 relations) > Content OS (20) > Second Brain (15) — each template's relational profile matches its real-world use
838
+
839
+ ## What Didn't
840
+ - KR tracking fields in the OKR profile need reconsideration — three separate label/target/current property groups is readable but doesn't scale to dynamic KR counts
841
+ - Missed one content entity for Second Brain (planned 4, shipped 3)
842
+
843
+ ## Actions Next Sprint
844
+ 1. Finalize CRM display template polish (carry-forward)
845
+ 2. Begin PM OS template architecture with OKR as first-class entity
846
+ 3. Validate relationship graph rendering with dense seed entity set (26 relations target)
847
+ 4. Decide: static KR properties vs. sub-entity KR model for v2 OKR profile
848
+
849
+ - profileSlug: sprint
850
+ title: "Sprint 4 — Template Validation"
851
+ properties:
852
+ sprint-status: Active
853
+ sprint-number: 4
854
+ sprint-start: "2026-02-17"
855
+ sprint-end: "2026-02-28"
856
+ sprint-goal: "Complete PM OS template JSON, CRM display template polish, and begin onboarding guide outline"
857
+ sprint-capacity: 55
858
+ sprint-velocity: 22
859
+ sprint-task-count: 10
860
+ sprint-completed-count: 4
861
+ sprint-linked-okr: "ref:okr:Launch Synap PM OS — Q1 2026"
862
+
863
+ - profileSlug: sprint
864
+ title: "Sprint 5 — Docs & Distribution"
865
+ properties:
866
+ sprint-status: Planning
867
+ sprint-number: 5
868
+ sprint-start: "2026-03-03"
869
+ sprint-end: "2026-03-14"
870
+ sprint-goal: "Ship onboarding guide, record demo video, build landing page, draft launch content"
871
+ sprint-capacity: 55
872
+ sprint-velocity: 0
873
+ sprint-task-count: 8
874
+ sprint-completed-count: 0
875
+ sprint-linked-okr: "ref:okr:Grow Template Activations — Q1 2026"
876
+
877
+ - profileSlug: task
878
+ title: Define 5 profile schemas
879
+ properties:
880
+ task-status: Done
881
+ task-priority: Critical
882
+ task-assignee: "ref:person:Antoine"
883
+ task-project: "ref:project:Build PM OS Template"
884
+ task-sprint: "ref:sprint:Sprint 4 — Template Validation"
885
+ task-due-date: "2026-02-21"
886
+ task-effort: 4
887
+ task-type: Feature
888
+ task-tags: [deep-work]
889
+
890
+ - profileSlug: task
891
+ title: Configure 15 views
892
+ properties:
893
+ task-status: Done
894
+ task-priority: Critical
895
+ task-assignee: "ref:person:Antoine"
896
+ task-project: "ref:project:Build PM OS Template"
897
+ task-sprint: "ref:sprint:Sprint 4 — Template Validation"
898
+ task-due-date: "2026-02-24"
899
+ task-effort: 3
900
+ task-type: Feature
901
+ task-tags: [deep-work]
902
+
903
+ - profileSlug: task
904
+ title: Write seed entity content
905
+ properties:
906
+ task-status: In Progress
907
+ task-priority: High
908
+ task-assignee: "ref:person:Antoine"
909
+ task-project: "ref:project:Build PM OS Template"
910
+ task-sprint: "ref:sprint:Sprint 4 — Template Validation"
911
+ task-due-date: "2026-02-27"
912
+ task-effort: 5
913
+ task-type: Feature
914
+ task-tags: [deep-work]
915
+
916
+ - profileSlug: task
917
+ title: Validate relationship graph
918
+ properties:
919
+ task-status: Todo
920
+ task-priority: High
921
+ task-assignee: "ref:person:Léa Moreau"
922
+ task-project: "ref:project:Build PM OS Template"
923
+ task-sprint: "ref:sprint:Sprint 4 — Template Validation"
924
+ task-due-date: "2026-02-28"
925
+ task-effort: 3
926
+ task-type: Feature
927
+ task-blocked-by: Seed entity content must be complete first
928
+ task-tags: [deep-work, waiting]
929
+
930
+ - profileSlug: task
931
+ title: Write OKR setup walkthrough
932
+ properties:
933
+ task-status: Backlog
934
+ task-priority: High
935
+ task-assignee: "ref:person:Antoine"
936
+ task-project: "ref:project:Publish PM OS Onboarding Guide"
937
+ task-sprint: "ref:sprint:Sprint 5 — Docs & Distribution"
938
+ task-due-date: "2026-03-10"
939
+ task-effort: 3
940
+ task-type: Content
941
+ task-tags: [deep-work, async]
942
+
943
+ - profileSlug: task
944
+ title: Record demo video
945
+ properties:
946
+ task-status: Backlog
947
+ task-priority: High
948
+ task-assignee: "ref:person:Antoine"
949
+ task-project: "ref:project:Publish PM OS Onboarding Guide"
950
+ task-sprint: "ref:sprint:Sprint 5 — Docs & Distribution"
951
+ task-due-date: "2026-03-14"
952
+ task-effort: 4
953
+ task-type: Content
954
+ task-blocked-by: Template must be live in staging before recording
955
+ task-tags: [deep-work]
956
+
957
+ - profileSlug: task
958
+ title: Draft LinkedIn launch thread
959
+ properties:
960
+ task-status: Backlog
961
+ task-priority: Medium
962
+ task-assignee: "ref:person:Antoine"
963
+ task-project: "ref:project:PM OS Distribution Campaign"
964
+ task-sprint: "ref:sprint:Sprint 5 — Docs & Distribution"
965
+ task-due-date: "2026-03-12"
966
+ task-effort: 2
967
+ task-type: Content
968
+ task-tags: [async]
969
+
970
+ - profileSlug: task
971
+ title: Schedule newsletter Issue 14 teaser
972
+ properties:
973
+ task-status: Backlog
974
+ task-priority: Medium
975
+ task-assignee: "ref:person:Antoine"
976
+ task-project: "ref:project:PM OS Distribution Campaign"
977
+ task-sprint: "ref:sprint:Sprint 5 — Docs & Distribution"
978
+ task-due-date: "2026-03-10"
979
+ task-effort: 1
980
+ task-type: Content
981
+ task-tags: [async, quick-win]
982
+
983
+ - profileSlug: task
984
+ title: Design hero section copy
985
+ properties:
986
+ task-status: Backlog
987
+ task-priority: Medium
988
+ task-assignee: "ref:person:Antoine"
989
+ task-project: "ref:project:Waitlist Landing Page"
990
+ task-due-date: "2026-03-07"
991
+ task-effort: 2
992
+ task-type: Content
993
+ task-tags: [async, quick-win]
994
+
995
+ suggestedRelations:
996
+ - { sourceRef: "okr:Launch Synap PM OS — Q1 2026", targetRef: "project:Build PM OS Template", type: parent_of }
997
+ - { sourceRef: "okr:Launch Synap PM OS — Q1 2026", targetRef: "project:Publish PM OS Onboarding Guide", type: parent_of }
998
+ - { sourceRef: "okr:Grow Template Activations — Q1 2026", targetRef: "project:PM OS Distribution Campaign", type: parent_of }
999
+ - { sourceRef: "okr:Grow Template Activations — Q1 2026", targetRef: "project:Waitlist Landing Page", type: parent_of }
1000
+ - { sourceRef: "project:Build PM OS Template", targetRef: "task:Define 5 profile schemas", type: parent_of }
1001
+ - { sourceRef: "project:Build PM OS Template", targetRef: "task:Configure 15 views", type: parent_of }
1002
+ - { sourceRef: "project:Build PM OS Template", targetRef: "task:Write seed entity content", type: parent_of }
1003
+ - { sourceRef: "project:Build PM OS Template", targetRef: "task:Validate relationship graph", type: parent_of }
1004
+ - { sourceRef: "project:Publish PM OS Onboarding Guide", targetRef: "task:Write OKR setup walkthrough", type: parent_of }
1005
+ - { sourceRef: "project:Publish PM OS Onboarding Guide", targetRef: "task:Record demo video", type: parent_of }
1006
+ - { sourceRef: "project:PM OS Distribution Campaign", targetRef: "task:Draft LinkedIn launch thread", type: parent_of }
1007
+ - { sourceRef: "project:PM OS Distribution Campaign", targetRef: "task:Schedule newsletter Issue 14 teaser", type: parent_of }
1008
+ - { sourceRef: "project:Waitlist Landing Page", targetRef: "task:Design hero section copy", type: parent_of }
1009
+ - { sourceRef: "sprint:Sprint 4 — Template Validation", targetRef: "task:Define 5 profile schemas", type: relates_to }
1010
+ - { sourceRef: "sprint:Sprint 4 — Template Validation", targetRef: "task:Configure 15 views", type: relates_to }
1011
+ - { sourceRef: "sprint:Sprint 4 — Template Validation", targetRef: "task:Write seed entity content", type: relates_to }
1012
+ - { sourceRef: "sprint:Sprint 4 — Template Validation", targetRef: "task:Validate relationship graph", type: relates_to }
1013
+ - { sourceRef: "sprint:Sprint 5 — Docs & Distribution", targetRef: "task:Write OKR setup walkthrough", type: relates_to }
1014
+ - { sourceRef: "sprint:Sprint 5 — Docs & Distribution", targetRef: "task:Record demo video", type: relates_to }
1015
+ - { sourceRef: "sprint:Sprint 5 — Docs & Distribution", targetRef: "task:Draft LinkedIn launch thread", type: relates_to }
1016
+ - { sourceRef: "sprint:Sprint 5 — Docs & Distribution", targetRef: "task:Schedule newsletter Issue 14 teaser", type: relates_to }
1017
+ - { sourceRef: "task:Define 5 profile schemas", targetRef: "person:Antoine", type: assigned_to }
1018
+ - { sourceRef: "task:Configure 15 views", targetRef: "person:Antoine", type: assigned_to }
1019
+ - { sourceRef: "task:Write OKR setup walkthrough", targetRef: "person:Antoine", type: assigned_to }
1020
+ - { sourceRef: "task:Draft LinkedIn launch thread", targetRef: "person:Antoine", type: assigned_to }
1021
+ - { sourceRef: "okr:Launch Synap PM OS — Q1 2026", targetRef: "person:Antoine", type: assigned_to }
1022
+ - { sourceRef: "okr:Grow Template Activations — Q1 2026", targetRef: "person:Antoine", type: assigned_to }
1023
+
1024
+ # App reference — PM OS lands on its views/dashboard.
1025
+ app:
1026
+ kind: stored
1027
+ cellKey: entity-detail
1028
+
1029
+ # Browser sidebar + layout config.
1030
+ layout:
1031
+ defaultView: OKR Dashboard
1032
+ defaultApp: null
1033
+ pinnedApps: [dashboard, data]
1034
+ sidebarItems:
1035
+ - { kind: view, viewName: OKR Dashboard, label: OKRs, icon: target }
1036
+ - { kind: view, viewName: Project Board, label: Projects, icon: folder }
1037
+ - { kind: view, viewName: Sprint Board, label: Sprint Board, icon: zap }
1038
+ - { kind: view, viewName: All Sprints, label: Sprints, icon: list }
1039
+ - { kind: view, viewName: Task Inbox, label: Tasks, icon: check-square }
1040
+ - { kind: view, viewName: Weekly Focus, label: This Week, icon: calendar }
1041
+ - { kind: view, viewName: Backlog, label: Backlog, icon: inbox }
1042
+ - { kind: view, viewName: Relationship Graph, label: Graph, icon: git-branch }
1043
+ - { kind: view, viewName: Team Workload, label: Team, icon: users }
1044
+ - { kind: view, viewName: Calendar, label: Calendar, icon: calendar-days }
1045
+
1046
+ # Home dashboard — bentoLayout widgets + bentoViewBlocks merged.
1047
+ bento:
1048
+ viewName: PM OS Home
1049
+ blocks:
1050
+ - { kind: widget, widgetType: welcome-header, pos: { x: 0, y: 0, w: 12, h: 2 }, config: { title: Project Management OS, subtitle: "OKRs → Projects → Tasks — all connected." } }
1051
+ - { kind: widget, widgetType: entity-count, pos: { x: 0, y: 2, w: 2, h: 3 }, config: { profileSlug: okr, label: Active OKRs, icon: target } }
1052
+ - { kind: widget, widgetType: entity-count, pos: { x: 2, y: 2, w: 2, h: 3 }, config: { profileSlug: project, label: Active Projects, icon: folder } }
1053
+ - { kind: widget, widgetType: entity-count, pos: { x: 4, y: 2, w: 2, h: 3 }, config: { profileSlug: task, label: Open Tasks, icon: check-square } }
1054
+ - { kind: widget, widgetType: entity-count, pos: { x: 6, y: 2, w: 2, h: 3 }, config: { profileSlug: sprint, label: Active Sprints, icon: zap } }
1055
+ - { kind: widget, widgetType: entity-count, pos: { x: 8, y: 2, w: 2, h: 3 }, config: { profileSlug: person, label: Team Members, icon: users } }
1056
+ - { kind: widget, widgetType: entity-count, pos: { x: 10, y: 2, w: 2, h: 3 }, config: { profileSlug: task, label: Due This Week, icon: calendar } }
1057
+ - { kind: view, viewName: OKR Progress Table, pos: { x: 0, y: 5, w: 7, h: 8 } }
1058
+ - { kind: view, viewName: Sprint Board, pos: { x: 7, y: 5, w: 5, h: 8 } }
1059
+ - { kind: view, viewName: Project Timeline, pos: { x: 0, y: 13, w: 8, h: 6 } }
1060
+ - { kind: view, viewName: Weekly Focus, pos: { x: 8, y: 13, w: 4, h: 6 } }
1061
+
1062
+ # Per-profile entity detail bento layouts.
1063
+ profileEntityBentoTemplates:
1064
+ okr:
1065
+ blocks:
1066
+ - { id: okr-eb-header, kind: widget, widgetType: entity-header, pos: { x: 0, y: 0, w: 12, h: 2 } }
1067
+ - { id: okr-eb-props, kind: widget, widgetType: entity-properties, pos: { x: 0, y: 2, w: 4, h: 8 } }
1068
+ - { id: okr-eb-projects, kind: widget, widgetType: entity-list, pos: { x: 4, y: 2, w: 8, h: 4 }, config: { profileSlug: project, title: Projects, limit: 6, variant: compact } }
1069
+ - { id: okr-eb-content, kind: widget, widgetType: entity-content, pos: { x: 4, y: 6, w: 8, h: 4 } }
1070
+ project:
1071
+ blocks:
1072
+ - { id: proj-eb-header, kind: widget, widgetType: entity-header, pos: { x: 0, y: 0, w: 12, h: 2 } }
1073
+ - { id: proj-eb-props, kind: widget, widgetType: entity-properties, pos: { x: 0, y: 2, w: 4, h: 8 } }
1074
+ - { id: proj-eb-tasks, kind: widget, widgetType: entity-list, pos: { x: 4, y: 2, w: 8, h: 4 }, config: { profileSlug: task, title: Tasks, limit: 8, variant: compact } }
1075
+ - { id: proj-eb-content, kind: widget, widgetType: entity-content, pos: { x: 4, y: 6, w: 8, h: 4 } }
1076
+ task:
1077
+ blocks:
1078
+ - { id: task-eb-header, kind: widget, widgetType: entity-header, pos: { x: 0, y: 0, w: 12, h: 2 } }
1079
+ - { id: task-eb-props, kind: widget, widgetType: entity-properties, pos: { x: 0, y: 2, w: 5, h: 8 } }
1080
+ - { id: task-eb-content, kind: widget, widgetType: entity-content, pos: { x: 5, y: 2, w: 7, h: 8 } }
1081
+ sprint:
1082
+ blocks:
1083
+ - { id: sprint-eb-header, kind: widget, widgetType: entity-header, pos: { x: 0, y: 0, w: 12, h: 2 } }
1084
+ - { id: sprint-eb-props, kind: widget, widgetType: entity-properties, pos: { x: 0, y: 2, w: 4, h: 6 } }
1085
+ - { id: sprint-eb-tasks, kind: widget, widgetType: entity-list, pos: { x: 4, y: 2, w: 8, h: 6 }, config: { profileSlug: task, title: Sprint Tasks, limit: 10, variant: compact } }
1086
+
1087
+ # Playbooks — session templates seeded with the workspace.
1088
+ playbooks:
1089
+ - name: Sprint Retrospective
1090
+ goalTemplate: "Run a retrospective for {sprint} to review what went well, what didn't, and what to improve next sprint."
1091
+ params:
1092
+ - { name: sprint, type: entity, label: Sprint, required: true }
1093
+
1094
+ # Per-workspace onboarding context (read by the shared onboard skill).
1095
+ onboarding:
1096
+ goal: "Capture the user's goals, the projects in flight, the current sprint, and who's involved — so the workspace mirrors how their team actually plans and delivers."
1097
+ framing: "Act as a sharp delivery lead / chief of staff. Tease out what outcomes matter this quarter, what's actively being worked, what's in the current cycle, and who owns what. Translate that into OKRs, projects, a sprint, and people."
1098
+ collect:
1099
+ - profileSlug: okr
1100
+ what: The goals / OKRs that define success this quarter
1101
+ cardinality: few
1102
+ keyFields: [title, okr-quarter, okr-owner, kr1-label]
1103
+ - profileSlug: project
1104
+ what: The projects actively in flight and their priority
1105
+ cardinality: several
1106
+ keyFields: [title, project-status, project-priority, project-linked-okr]
1107
+ - profileSlug: sprint
1108
+ what: The current cycle / sprint and its goal
1109
+ cardinality: one
1110
+ keyFields: [title, sprint-goal, sprint-start, sprint-end]
1111
+ - profileSlug: person
1112
+ what: The key people on the team and their roles
1113
+ cardinality: several
1114
+ keyFields: [name, person-role, person-email]
1115
+ openingQuestions:
1116
+ - "What are the big outcomes you're trying to hit this quarter?"
1117
+ - "What projects are actively in flight right now, and which matter most?"
1118
+ - "Who's on the team, and what does each person own?"
1119
+ doneWhen: "This quarter's goals exist, active projects are captured with priority, a current sprint is defined, and the core team is on the board."