@synap-core/workspace-templates 0.7.1 → 0.7.3

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.
Files changed (50) hide show
  1. package/dist/index.d.ts +266 -8
  2. package/dist/index.js +2314 -1440
  3. package/dist/index.js.map +1 -1
  4. package/package.json +4 -3
  5. package/src/agent-fleet.yaml +666 -108
  6. package/src/blockchain-ecosystem.yaml +1 -0
  7. package/src/brand-library.yaml +127 -12
  8. package/src/builder.yaml +116 -12
  9. package/src/business-developer.yaml +110 -18
  10. package/src/catalog.test.ts +2 -2
  11. package/src/catalog.ts +13 -3
  12. package/src/communication.yaml +23 -453
  13. package/src/composition-graph.test.ts +28 -2
  14. package/src/concept-guard.test.ts +176 -0
  15. package/src/concept-guard.ts +219 -0
  16. package/src/content-os.yaml +103 -10
  17. package/src/content-studio.yaml +1 -0
  18. package/src/crm.yaml +1 -0
  19. package/src/define.ts +8 -8
  20. package/src/dev-dashboard.yaml +43 -9
  21. package/src/domains.test.ts +117 -0
  22. package/src/domains.ts +102 -0
  23. package/src/ecosystem.yaml +25 -5
  24. package/src/enterprise-os.yaml +1 -0
  25. package/src/finance.yaml +46 -5
  26. package/src/foundation.yaml +13 -1
  27. package/src/generate.d.mts +15 -0
  28. package/src/generate.mjs +86 -0
  29. package/src/grants.yaml +1 -0
  30. package/src/hr.yaml +61 -8
  31. package/src/index.ts +40 -0
  32. package/src/internal-runbook.yaml +36 -5
  33. package/src/legal.yaml +97 -12
  34. package/src/life-os.yaml +188 -27
  35. package/src/marketing.yaml +15 -2
  36. package/src/meetings-knowledge.yaml +143 -23
  37. package/src/operations.yaml +347 -0
  38. package/src/outreach-comms.yaml +11 -3
  39. package/src/project-management.yaml +840 -111
  40. package/src/research-base.yaml +516 -0
  41. package/src/research-decision.yaml +158 -0
  42. package/src/shared-role-ssot.test.ts +268 -0
  43. package/src/social.yaml +105 -37
  44. package/src/templates-freshness.test.ts +55 -0
  45. package/src/templates.ts +4620 -4278
  46. package/src/the-arch.yaml +1 -0
  47. package/src/types.ts +9 -0
  48. package/src/validate.test.ts +81 -0
  49. package/src/validate.ts +561 -0
  50. package/src/personal.yaml +0 -177
@@ -7,6 +7,7 @@
7
7
 
8
8
  meta:
9
9
  slug: project-management
10
+ domain: build
10
11
  name: Project Management OS
11
12
  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
13
  icon: kanban-square
@@ -40,7 +41,17 @@ profiles:
40
41
  label: Quarter
41
42
  valueType: string
42
43
  inputType: select
43
- enumValues: ["Q1 2025", "Q2 2025", "Q3 2025", "Q4 2025", "Q1 2026", "Q2 2026", "Q3 2026", "Q4 2026"]
44
+ enumValues:
45
+ [
46
+ "Q1 2025",
47
+ "Q2 2025",
48
+ "Q3 2025",
49
+ "Q4 2025",
50
+ "Q1 2026",
51
+ "Q2 2026",
52
+ "Q3 2026",
53
+ "Q4 2026",
54
+ ]
44
55
  - slug: okr-owner
45
56
  label: Owner
46
57
  valueType: entity_id
@@ -109,7 +120,8 @@ profiles:
109
120
  label: Status
110
121
  valueType: string
111
122
  inputType: select
112
- enumValues: [Backlog, Planning, In Progress, On Hold, Completed, Cancelled]
123
+ enumValues:
124
+ [Backlog, Planning, In Progress, On Hold, Completed, Cancelled]
113
125
  constraints:
114
126
  defaultValue: In Progress
115
127
  - slug: project-priority
@@ -262,7 +274,17 @@ profiles:
262
274
  label: Role
263
275
  valueType: string
264
276
  inputType: select
265
- enumValues: [Founder, Engineer, Designer, PM, Marketing, Ops, Advisor, Stakeholder]
277
+ enumValues:
278
+ [
279
+ Founder,
280
+ Engineer,
281
+ Designer,
282
+ PM,
283
+ Marketing,
284
+ Ops,
285
+ Advisor,
286
+ Stakeholder,
287
+ ]
266
288
  - slug: person-email
267
289
  label: Email
268
290
  valueType: string
@@ -343,7 +365,16 @@ views:
343
365
  config:
344
366
  sortBy: sprint-number
345
367
  sortOrder: desc
346
- visibleColumns: [sprint-number, sprint-status, sprint-start, sprint-end, sprint-goal, sprint-velocity, sprint-completed-count]
368
+ visibleColumns:
369
+ [
370
+ sprint-number,
371
+ sprint-status,
372
+ sprint-start,
373
+ sprint-end,
374
+ sprint-goal,
375
+ sprint-velocity,
376
+ sprint-completed-count,
377
+ ]
347
378
  defaultSort: { field: sprint-number, direction: desc }
348
379
 
349
380
  - name: Project Timeline
@@ -372,7 +403,15 @@ views:
372
403
  description: "All open tasks sorted by priority"
373
404
  config:
374
405
  sortBy: task-priority
375
- visibleColumns: [task-status, task-priority, task-type, task-assignee, task-due-date, task-sprint]
406
+ visibleColumns:
407
+ [
408
+ task-status,
409
+ task-priority,
410
+ task-type,
411
+ task-assignee,
412
+ task-due-date,
413
+ task-sprint,
414
+ ]
376
415
  defaultSort: { field: task-priority, direction: desc }
377
416
  filterBy:
378
417
  field: task-status
@@ -406,7 +445,8 @@ views:
406
445
  scopeProfileSlug: person
407
446
  description: "Team members with linked task count, sprint assignment, and availability"
408
447
  config:
409
- visibleColumns: [person-role, person-focus, person-availability, person-okr-owner]
448
+ visibleColumns:
449
+ [person-role, person-focus, person-availability, person-okr-owner]
410
450
 
411
451
  - name: Retrospective Board
412
452
  slug: retrospective-board
@@ -423,7 +463,15 @@ views:
423
463
  scopeProfileSlug: okr
424
464
  description: "All OKRs with key result progress bars for quarterly review"
425
465
  config:
426
- visibleColumns: [okr-status, okr-quarter, okr-type, okr-owner, okr-confidence, okr-review-date]
466
+ visibleColumns:
467
+ [
468
+ okr-status,
469
+ okr-quarter,
470
+ okr-type,
471
+ okr-owner,
472
+ okr-confidence,
473
+ okr-review-date,
474
+ ]
427
475
  defaultSort: { field: okr-quarter, direction: desc }
428
476
 
429
477
  - name: Backlog
@@ -455,7 +503,8 @@ views:
455
503
  description: "Historical OKRs organized by quarter for retrospective planning"
456
504
  config:
457
505
  groupByField: okr-quarter
458
- visibleColumns: [okr-status, okr-quarter, okr-type, okr-owner, okr-confidence]
506
+ visibleColumns:
507
+ [okr-status, okr-quarter, okr-type, okr-owner, okr-confidence]
459
508
 
460
509
  # Pack views (inlined from project-management-pack).
461
510
  - name: Task Board
@@ -481,14 +530,103 @@ views:
481
530
  config:
482
531
  layout: bento
483
532
  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 } }
533
+ - {
534
+ id: okr-header,
535
+ kind: widget,
536
+ widgetType: section-header,
537
+ pos: { x: 0, y: 0, w: 12, h: 2 },
538
+ config:
539
+ { title: OKRs, icon: Target, color: "#14B8A6", profileSlug: okr },
540
+ }
541
+ - {
542
+ id: okr-count-active,
543
+ kind: widget,
544
+ widgetType: stat-card,
545
+ pos: { x: 0, y: 2, w: 3, h: 3 },
546
+ config:
547
+ {
548
+ label: Active OKRs,
549
+ aggregation: count,
550
+ profileSlug: okr,
551
+ color: "#14B8A6",
552
+ icon: Target,
553
+ },
554
+ }
555
+ - {
556
+ id: okr-count-on-track,
557
+ kind: widget,
558
+ widgetType: entity-count,
559
+ pos: { x: 3, y: 2, w: 3, h: 3 },
560
+ config:
561
+ {
562
+ profileSlug: okr,
563
+ label: On Track,
564
+ icon: TrendingUp,
565
+ filter: { status: on-track },
566
+ color: "#10B981",
567
+ },
568
+ }
569
+ - {
570
+ id: okr-count-at-risk,
571
+ kind: widget,
572
+ widgetType: entity-count,
573
+ pos: { x: 6, y: 2, w: 3, h: 3 },
574
+ config:
575
+ {
576
+ profileSlug: okr,
577
+ label: At Risk,
578
+ icon: AlertTriangle,
579
+ filter: { status: at-risk },
580
+ color: "#F59E0B",
581
+ },
582
+ }
583
+ - {
584
+ id: okr-count-completed,
585
+ kind: widget,
586
+ widgetType: entity-count,
587
+ pos: { x: 9, y: 2, w: 3, h: 3 },
588
+ config:
589
+ {
590
+ profileSlug: okr,
591
+ label: Completed,
592
+ icon: CheckCircle,
593
+ filter: { status: completed },
594
+ color: "#6366F1",
595
+ },
596
+ }
597
+ - {
598
+ id: okr-spotlight,
599
+ kind: widget,
600
+ widgetType: entity-spotlight,
601
+ pos: { x: 0, y: 5, w: 5, h: 4 },
602
+ config:
603
+ {
604
+ profileSlug: okr,
605
+ seed: daily,
606
+ layout: detail,
607
+ subtitleField: owner,
608
+ color: "#14B8A6",
609
+ },
610
+ }
611
+ - {
612
+ id: okr-projects,
613
+ kind: widget,
614
+ widgetType: entity-list,
615
+ pos: { x: 5, y: 5, w: 7, h: 4 },
616
+ config:
617
+ {
618
+ profileSlug: project,
619
+ title: Active Projects,
620
+ limit: 8,
621
+ variant: compact,
622
+ },
623
+ }
624
+ - {
625
+ id: okr-table,
626
+ kind: view,
627
+ viewName: OKR Progress Table,
628
+ pos: { x: 0, y: 9, w: 12, h: 8 },
629
+ }
492
630
 
493
631
  - name: Project Dashboard
494
632
  slug: project-dashboard
@@ -497,14 +635,108 @@ views:
497
635
  config:
498
636
  layout: bento
499
637
  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 } }
638
+ - {
639
+ id: proj-header,
640
+ kind: widget,
641
+ widgetType: section-header,
642
+ pos: { x: 0, y: 0, w: 12, h: 2 },
643
+ config:
644
+ {
645
+ title: Projects,
646
+ icon: FolderOpen,
647
+ color: "#F97316",
648
+ profileSlug: project,
649
+ },
650
+ }
651
+ - {
652
+ id: proj-active,
653
+ kind: widget,
654
+ widgetType: entity-count,
655
+ pos: { x: 0, y: 2, w: 3, h: 3 },
656
+ config:
657
+ {
658
+ profileSlug: project,
659
+ label: Active,
660
+ icon: Play,
661
+ filter: { status: active },
662
+ color: "#10B981",
663
+ },
664
+ }
665
+ - {
666
+ id: proj-planning,
667
+ kind: widget,
668
+ widgetType: entity-count,
669
+ pos: { x: 3, y: 2, w: 3, h: 3 },
670
+ config:
671
+ {
672
+ profileSlug: project,
673
+ label: Planning,
674
+ icon: Map,
675
+ filter: { status: planning },
676
+ color: "#3B82F6",
677
+ },
678
+ }
679
+ - {
680
+ id: proj-hold,
681
+ kind: widget,
682
+ widgetType: entity-count,
683
+ pos: { x: 6, y: 2, w: 3, h: 3 },
684
+ config:
685
+ {
686
+ profileSlug: project,
687
+ label: On Hold,
688
+ icon: PauseCircle,
689
+ filter: { status: on-hold },
690
+ color: "#F59E0B",
691
+ },
692
+ }
693
+ - {
694
+ id: proj-done,
695
+ kind: widget,
696
+ widgetType: entity-count,
697
+ pos: { x: 9, y: 2, w: 3, h: 3 },
698
+ config:
699
+ {
700
+ profileSlug: project,
701
+ label: Completed,
702
+ icon: CheckCircle,
703
+ filter: { status: completed },
704
+ color: "#8B5CF6",
705
+ },
706
+ }
707
+ - {
708
+ id: proj-spotlight,
709
+ kind: widget,
710
+ widgetType: entity-spotlight,
711
+ pos: { x: 0, y: 5, w: 5, h: 4 },
712
+ config:
713
+ {
714
+ profileSlug: project,
715
+ seed: daily,
716
+ layout: detail,
717
+ subtitleField: area,
718
+ color: "#F97316",
719
+ },
720
+ }
721
+ - {
722
+ id: proj-tasks,
723
+ kind: widget,
724
+ widgetType: entity-list,
725
+ pos: { x: 5, y: 5, w: 7, h: 4 },
726
+ config:
727
+ {
728
+ profileSlug: task,
729
+ title: Open Tasks,
730
+ limit: 8,
731
+ variant: compact,
732
+ },
733
+ }
734
+ - {
735
+ id: proj-board,
736
+ kind: view,
737
+ viewName: Project Board,
738
+ pos: { x: 0, y: 9, w: 12, h: 8 },
739
+ }
508
740
 
509
741
  - name: Task Dashboard
510
742
  slug: task-dashboard
@@ -513,14 +745,101 @@ views:
513
745
  config:
514
746
  layout: bento
515
747
  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 } }
748
+ - {
749
+ id: task-header,
750
+ kind: widget,
751
+ widgetType: section-header,
752
+ pos: { x: 0, y: 0, w: 12, h: 2 },
753
+ config:
754
+ {
755
+ title: Tasks,
756
+ icon: CheckSquare,
757
+ color: "#6366F1",
758
+ profileSlug: task,
759
+ },
760
+ }
761
+ - {
762
+ id: task-todo,
763
+ kind: widget,
764
+ widgetType: entity-count,
765
+ pos: { x: 0, y: 2, w: 3, h: 3 },
766
+ config:
767
+ {
768
+ profileSlug: task,
769
+ label: To Do,
770
+ icon: Circle,
771
+ filter: { status: todo },
772
+ color: "#6B7280",
773
+ },
774
+ }
775
+ - {
776
+ id: task-progress,
777
+ kind: widget,
778
+ widgetType: entity-count,
779
+ pos: { x: 3, y: 2, w: 3, h: 3 },
780
+ config:
781
+ {
782
+ profileSlug: task,
783
+ label: In Progress,
784
+ icon: Loader,
785
+ filter: { status: in-progress },
786
+ color: "#3B82F6",
787
+ },
788
+ }
789
+ - {
790
+ id: task-review,
791
+ kind: widget,
792
+ widgetType: entity-count,
793
+ pos: { x: 6, y: 2, w: 3, h: 3 },
794
+ config:
795
+ {
796
+ profileSlug: task,
797
+ label: In Review,
798
+ icon: Eye,
799
+ filter: { status: review },
800
+ color: "#F59E0B",
801
+ },
802
+ }
803
+ - {
804
+ id: task-done,
805
+ kind: widget,
806
+ widgetType: entity-count,
807
+ pos: { x: 9, y: 2, w: 3, h: 3 },
808
+ config:
809
+ {
810
+ profileSlug: task,
811
+ label: Done,
812
+ icon: CheckCircle,
813
+ filter: { status: done },
814
+ color: "#10B981",
815
+ },
816
+ }
817
+ - {
818
+ id: task-capture,
819
+ kind: widget,
820
+ widgetType: quick-capture,
821
+ pos: { x: 0, y: 5, w: 4, h: 3 },
822
+ config: { presetProfileSlug: task },
823
+ }
824
+ - {
825
+ id: task-list,
826
+ kind: widget,
827
+ widgetType: entity-list,
828
+ pos: { x: 4, y: 5, w: 8, h: 3 },
829
+ config:
830
+ {
831
+ profileSlug: task,
832
+ title: Recent Tasks,
833
+ limit: 6,
834
+ variant: compact,
835
+ },
836
+ }
837
+ - {
838
+ id: task-sprint-board,
839
+ kind: view,
840
+ viewName: Sprint Board,
841
+ pos: { x: 0, y: 8, w: 12, h: 8 },
842
+ }
524
843
 
525
844
  - name: Sprint Dashboard
526
845
  slug: sprint-dashboard
@@ -529,17 +848,94 @@ views:
529
848
  config:
530
849
  layout: bento
531
850
  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 } }
851
+ - {
852
+ id: sprint-header,
853
+ kind: widget,
854
+ widgetType: section-header,
855
+ pos: { x: 0, y: 0, w: 12, h: 2 },
856
+ config:
857
+ {
858
+ title: Sprints,
859
+ icon: Zap,
860
+ color: "#8B5CF6",
861
+ profileSlug: sprint,
862
+ },
863
+ }
864
+ - {
865
+ id: sprint-total,
866
+ kind: widget,
867
+ widgetType: stat-card,
868
+ pos: { x: 0, y: 2, w: 3, h: 3 },
869
+ config:
870
+ {
871
+ label: Total Sprints,
872
+ aggregation: count,
873
+ profileSlug: sprint,
874
+ color: "#8B5CF6",
875
+ icon: Zap,
876
+ },
877
+ }
878
+ - {
879
+ id: sprint-active,
880
+ kind: widget,
881
+ widgetType: entity-count,
882
+ pos: { x: 3, y: 2, w: 3, h: 3 },
883
+ config:
884
+ {
885
+ profileSlug: sprint,
886
+ label: Active,
887
+ icon: Play,
888
+ filter: { status: active },
889
+ color: "#10B981",
890
+ },
891
+ }
892
+ - {
893
+ id: sprint-tasks,
894
+ kind: widget,
895
+ widgetType: entity-count,
896
+ pos: { x: 6, y: 2, w: 3, h: 3 },
897
+ config:
898
+ {
899
+ profileSlug: task,
900
+ label: Sprint Tasks,
901
+ icon: CheckSquare,
902
+ color: "#6366F1",
903
+ },
904
+ }
905
+ - {
906
+ id: sprint-velocity,
907
+ kind: widget,
908
+ widgetType: entity-list,
909
+ pos: { x: 0, y: 5, w: 12, h: 4 },
910
+ config:
911
+ {
912
+ profileSlug: sprint,
913
+ title: Recent Sprints,
914
+ limit: 6,
915
+ variant: detailed,
916
+ },
917
+ }
918
+ - {
919
+ id: sprint-board,
920
+ kind: view,
921
+ viewName: Sprint Board,
922
+ pos: { x: 0, y: 9, w: 12, h: 8 },
923
+ }
538
924
 
539
925
  # Schema-level links between entity types (inlined from project-management-pack).
540
926
  entityLinks:
541
- - { sourceProfileSlug: task, targetProfileSlug: project, type: belongs_to, label: "Belongs to" }
542
- - { sourceProfileSlug: milestone, targetProfileSlug: project, type: belongs_to, label: "Part of" }
927
+ - {
928
+ sourceProfileSlug: task,
929
+ targetProfileSlug: project,
930
+ type: belongs_to,
931
+ label: "Belongs to",
932
+ }
933
+ - {
934
+ sourceProfileSlug: milestone,
935
+ targetProfileSlug: project,
936
+ type: belongs_to,
937
+ label: "Part of",
938
+ }
543
939
 
544
940
  displayTemplates:
545
941
  - name: OKR Card
@@ -550,22 +946,78 @@ displayTemplates:
550
946
  config:
551
947
  layout:
552
948
  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 }
949
+ header:
950
+ {
951
+ enabled: true,
952
+ slots: [okr-status, okr-quarter, okr-type],
953
+ layout: horizontal,
954
+ }
955
+ sidebar:
956
+ {
957
+ enabled: true,
958
+ slots: [okr-owner, okr-confidence, okr-review-date],
959
+ position: right,
960
+ width: 260px,
961
+ layout: vertical,
962
+ }
963
+ content:
964
+ {
965
+ enabled: true,
966
+ slots:
967
+ [
968
+ kr1-label,
969
+ kr1-current,
970
+ kr2-label,
971
+ kr2-current,
972
+ kr3-label,
973
+ kr3-current,
974
+ ],
975
+ layout: vertical,
976
+ }
556
977
  fieldMapping:
557
978
  okr-status: { slot: okr-status, renderer: { type: badge }, order: 1 }
558
- okr-quarter: { slot: okr-quarter, renderer: { type: badge }, order: 2 }
979
+ okr-quarter:
980
+ { slot: okr-quarter, renderer: { type: badge }, order: 2 }
559
981
  okr-type: { slot: okr-type, renderer: { type: badge }, order: 3 }
560
982
  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 }
983
+ okr-confidence:
984
+ { slot: okr-confidence, renderer: { type: badge }, order: 5 }
985
+ okr-review-date:
986
+ {
987
+ slot: okr-review-date,
988
+ renderer: { type: date, format: relative },
989
+ order: 6,
990
+ }
991
+ kr1-label:
992
+ {
993
+ slot: kr1-label,
994
+ renderer: { type: text },
995
+ order: 7,
996
+ label: KR1,
997
+ showLabel: true,
998
+ }
999
+ kr1-current:
1000
+ { slot: kr1-current, renderer: { type: progress }, order: 8 }
1001
+ kr2-label:
1002
+ {
1003
+ slot: kr2-label,
1004
+ renderer: { type: text },
1005
+ order: 9,
1006
+ label: KR2,
1007
+ showLabel: true,
1008
+ }
1009
+ kr2-current:
1010
+ { slot: kr2-current, renderer: { type: progress }, order: 10 }
1011
+ kr3-label:
1012
+ {
1013
+ slot: kr3-label,
1014
+ renderer: { type: text },
1015
+ order: 11,
1016
+ label: KR3,
1017
+ showLabel: true,
1018
+ }
1019
+ kr3-current:
1020
+ { slot: kr3-current, renderer: { type: progress }, order: 12 }
569
1021
  colors:
570
1022
  accent: "#2E4EAD"
571
1023
 
@@ -577,20 +1029,69 @@ displayTemplates:
577
1029
  config:
578
1030
  layout:
579
1031
  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 }
1032
+ header:
1033
+ {
1034
+ enabled: true,
1035
+ slots: [project-status, project-priority, project-health],
1036
+ layout: horizontal,
1037
+ }
1038
+ sidebar:
1039
+ {
1040
+ enabled: true,
1041
+ slots:
1042
+ [
1043
+ project-linked-okr,
1044
+ project-owner,
1045
+ project-deadline,
1046
+ project-effort,
1047
+ ],
1048
+ position: right,
1049
+ width: 260px,
1050
+ layout: vertical,
1051
+ }
1052
+ content:
1053
+ {
1054
+ enabled: true,
1055
+ slots: [project-milestone, project-outcome, project-tags],
1056
+ layout: vertical,
1057
+ }
583
1058
  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 }
1059
+ project-status:
1060
+ { slot: project-status, renderer: { type: badge }, order: 1 }
1061
+ project-priority:
1062
+ { slot: project-priority, renderer: { type: badge }, order: 2 }
1063
+ project-health:
1064
+ { slot: project-health, renderer: { type: badge }, order: 3 }
1065
+ project-linked-okr:
1066
+ { slot: project-linked-okr, renderer: { type: link }, order: 4 }
1067
+ project-owner:
1068
+ { slot: project-owner, renderer: { type: avatar }, order: 5 }
1069
+ project-deadline:
1070
+ {
1071
+ slot: project-deadline,
1072
+ renderer: { type: date, format: relative },
1073
+ order: 6,
1074
+ }
1075
+ project-effort:
1076
+ { slot: project-effort, renderer: { type: number }, order: 7 }
1077
+ project-milestone:
1078
+ {
1079
+ slot: project-milestone,
1080
+ renderer: { type: text },
1081
+ order: 8,
1082
+ label: Milestone,
1083
+ showLabel: true,
1084
+ }
1085
+ project-outcome:
1086
+ {
1087
+ slot: project-outcome,
1088
+ renderer: { type: text },
1089
+ order: 9,
1090
+ label: Expected Outcome,
1091
+ showLabel: true,
1092
+ }
1093
+ project-tags:
1094
+ { slot: project-tags, renderer: { type: badge }, order: 10 }
594
1095
  colors:
595
1096
  accent: "#7C3AED"
596
1097
 
@@ -602,19 +1103,60 @@ displayTemplates:
602
1103
  config:
603
1104
  layout:
604
1105
  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 }
1106
+ header:
1107
+ {
1108
+ enabled: true,
1109
+ slots: [task-status, task-priority, task-type],
1110
+ layout: horizontal,
1111
+ }
1112
+ sidebar:
1113
+ {
1114
+ enabled: true,
1115
+ slots:
1116
+ [
1117
+ task-project,
1118
+ task-sprint,
1119
+ task-assignee,
1120
+ task-due-date,
1121
+ task-effort,
1122
+ ],
1123
+ position: right,
1124
+ width: 260px,
1125
+ layout: vertical,
1126
+ }
1127
+ content:
1128
+ {
1129
+ enabled: true,
1130
+ slots: [task-blocked-by, task-tags],
1131
+ layout: vertical,
1132
+ }
608
1133
  fieldMapping:
609
- task-status: { slot: task-status, renderer: { type: badge }, order: 1 }
610
- task-priority: { slot: task-priority, renderer: { type: badge }, order: 2 }
1134
+ task-status:
1135
+ { slot: task-status, renderer: { type: badge }, order: 1 }
1136
+ task-priority:
1137
+ { slot: task-priority, renderer: { type: badge }, order: 2 }
611
1138
  task-type: { slot: task-type, renderer: { type: badge }, order: 3 }
612
- task-project: { slot: task-project, renderer: { type: link }, order: 4 }
1139
+ task-project:
1140
+ { slot: task-project, renderer: { type: link }, order: 4 }
613
1141
  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 }
1142
+ task-assignee:
1143
+ { slot: task-assignee, renderer: { type: avatar }, order: 6 }
1144
+ task-due-date:
1145
+ {
1146
+ slot: task-due-date,
1147
+ renderer: { type: date, format: relative },
1148
+ order: 7,
1149
+ }
1150
+ task-effort:
1151
+ { slot: task-effort, renderer: { type: number }, order: 8 }
1152
+ task-blocked-by:
1153
+ {
1154
+ slot: task-blocked-by,
1155
+ renderer: { type: text },
1156
+ order: 9,
1157
+ label: Blocked By,
1158
+ showLabel: true,
1159
+ }
618
1160
  task-tags: { slot: task-tags, renderer: { type: badge }, order: 10 }
619
1161
  colors:
620
1162
  accent: "#059669"
@@ -627,19 +1169,68 @@ displayTemplates:
627
1169
  config:
628
1170
  layout:
629
1171
  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 }
1172
+ header:
1173
+ {
1174
+ enabled: true,
1175
+ slots: [sprint-status, sprint-number],
1176
+ layout: horizontal,
1177
+ }
1178
+ sidebar:
1179
+ {
1180
+ enabled: true,
1181
+ slots:
1182
+ [sprint-linked-okr, sprint-start, sprint-end, sprint-capacity],
1183
+ position: right,
1184
+ width: 260px,
1185
+ layout: vertical,
1186
+ }
1187
+ content:
1188
+ {
1189
+ enabled: true,
1190
+ slots: [sprint-goal, sprint-velocity, sprint-completed-count],
1191
+ layout: vertical,
1192
+ }
633
1193
  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 }
1194
+ sprint-status:
1195
+ { slot: sprint-status, renderer: { type: badge }, order: 1 }
1196
+ sprint-number:
1197
+ { slot: sprint-number, renderer: { type: number }, order: 2 }
1198
+ sprint-linked-okr:
1199
+ { slot: sprint-linked-okr, renderer: { type: link }, order: 3 }
1200
+ sprint-start:
1201
+ { slot: sprint-start, renderer: { type: date }, order: 4 }
1202
+ sprint-end:
1203
+ {
1204
+ slot: sprint-end,
1205
+ renderer: { type: date, format: relative },
1206
+ order: 5,
1207
+ }
1208
+ sprint-capacity:
1209
+ { slot: sprint-capacity, renderer: { type: number }, order: 6 }
1210
+ sprint-goal:
1211
+ {
1212
+ slot: sprint-goal,
1213
+ renderer: { type: text },
1214
+ order: 7,
1215
+ label: Sprint Goal,
1216
+ showLabel: true,
1217
+ }
1218
+ sprint-velocity:
1219
+ {
1220
+ slot: sprint-velocity,
1221
+ renderer: { type: progress },
1222
+ order: 8,
1223
+ label: Velocity,
1224
+ showLabel: true,
1225
+ }
1226
+ sprint-completed-count:
1227
+ {
1228
+ slot: sprint-completed-count,
1229
+ renderer: { type: number },
1230
+ order: 9,
1231
+ label: Tasks,
1232
+ showLabel: true,
1233
+ }
643
1234
  colors:
644
1235
  accent: "#D97706"
645
1236
 
@@ -661,7 +1252,12 @@ layout:
661
1252
  - { kind: view, viewName: Task Inbox, label: Tasks, icon: check-square }
662
1253
  - { kind: view, viewName: Weekly Focus, label: This Week, icon: calendar }
663
1254
  - { kind: view, viewName: Backlog, label: Backlog, icon: inbox }
664
- - { kind: view, viewName: Relationship Graph, label: Graph, icon: git-branch }
1255
+ - {
1256
+ kind: view,
1257
+ viewName: Relationship Graph,
1258
+ label: Graph,
1259
+ icon: git-branch,
1260
+ }
665
1261
  - { kind: view, viewName: Team Workload, label: Team, icon: users }
666
1262
  - { kind: view, viewName: Calendar, label: Calendar, icon: calendar-days }
667
1263
 
@@ -669,42 +1265,175 @@ layout:
669
1265
  bento:
670
1266
  viewName: PM OS Home
671
1267
  blocks:
672
- - { 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." } }
673
- - { kind: widget, widgetType: entity-count, pos: { x: 0, y: 2, w: 2, h: 3 }, config: { profileSlug: okr, label: Active OKRs, icon: target } }
674
- - { kind: widget, widgetType: entity-count, pos: { x: 2, y: 2, w: 2, h: 3 }, config: { profileSlug: project, label: Active Projects, icon: folder } }
675
- - { kind: widget, widgetType: entity-count, pos: { x: 4, y: 2, w: 2, h: 3 }, config: { profileSlug: task, label: Open Tasks, icon: check-square } }
676
- - { kind: widget, widgetType: entity-count, pos: { x: 6, y: 2, w: 2, h: 3 }, config: { profileSlug: sprint, label: Active Sprints, icon: zap } }
677
- - { kind: widget, widgetType: entity-count, pos: { x: 8, y: 2, w: 2, h: 3 }, config: { profileSlug: person, label: Team Members, icon: users } }
678
- - { kind: widget, widgetType: entity-count, pos: { x: 10, y: 2, w: 2, h: 3 }, config: { profileSlug: task, label: Due This Week, icon: calendar } }
679
- - { kind: view, viewName: OKR Progress Table, pos: { x: 0, y: 5, w: 7, h: 8 } }
1268
+ - {
1269
+ kind: widget,
1270
+ widgetType: welcome-header,
1271
+ pos: { x: 0, y: 0, w: 12, h: 2 },
1272
+ config:
1273
+ {
1274
+ title: Project Management OS,
1275
+ subtitle: "OKRs → Projects → Tasks — all connected.",
1276
+ },
1277
+ }
1278
+ - {
1279
+ kind: widget,
1280
+ widgetType: entity-count,
1281
+ pos: { x: 0, y: 2, w: 2, h: 3 },
1282
+ config: { profileSlug: okr, label: Active OKRs, icon: target },
1283
+ }
1284
+ - {
1285
+ kind: widget,
1286
+ widgetType: entity-count,
1287
+ pos: { x: 2, y: 2, w: 2, h: 3 },
1288
+ config: { profileSlug: project, label: Active Projects, icon: folder },
1289
+ }
1290
+ - {
1291
+ kind: widget,
1292
+ widgetType: entity-count,
1293
+ pos: { x: 4, y: 2, w: 2, h: 3 },
1294
+ config: { profileSlug: task, label: Open Tasks, icon: check-square },
1295
+ }
1296
+ - {
1297
+ kind: widget,
1298
+ widgetType: entity-count,
1299
+ pos: { x: 6, y: 2, w: 2, h: 3 },
1300
+ config: { profileSlug: sprint, label: Active Sprints, icon: zap },
1301
+ }
1302
+ - {
1303
+ kind: widget,
1304
+ widgetType: entity-count,
1305
+ pos: { x: 8, y: 2, w: 2, h: 3 },
1306
+ config: { profileSlug: person, label: Team Members, icon: users },
1307
+ }
1308
+ - {
1309
+ kind: widget,
1310
+ widgetType: entity-count,
1311
+ pos: { x: 10, y: 2, w: 2, h: 3 },
1312
+ config: { profileSlug: task, label: Due This Week, icon: calendar },
1313
+ }
1314
+ - {
1315
+ kind: view,
1316
+ viewName: OKR Progress Table,
1317
+ pos: { x: 0, y: 5, w: 7, h: 8 },
1318
+ }
680
1319
  - { kind: view, viewName: Sprint Board, pos: { x: 7, y: 5, w: 5, h: 8 } }
681
- - { kind: view, viewName: Project Timeline, pos: { x: 0, y: 13, w: 8, h: 6 } }
1320
+ - {
1321
+ kind: view,
1322
+ viewName: Project Timeline,
1323
+ pos: { x: 0, y: 13, w: 8, h: 6 },
1324
+ }
682
1325
  - { kind: view, viewName: Weekly Focus, pos: { x: 8, y: 13, w: 4, h: 6 } }
683
1326
 
684
1327
  # Per-profile entity detail bento layouts.
685
1328
  profileEntityBentoTemplates:
686
1329
  okr:
687
1330
  blocks:
688
- - { id: okr-eb-header, kind: widget, widgetType: entity-header, pos: { x: 0, y: 0, w: 12, h: 2 } }
689
- - { id: okr-eb-props, kind: widget, widgetType: entity-properties, pos: { x: 0, y: 2, w: 4, h: 8 } }
690
- - { 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 } }
691
- - { id: okr-eb-content, kind: widget, widgetType: entity-content, pos: { x: 4, y: 6, w: 8, h: 4 } }
1331
+ - {
1332
+ id: okr-eb-header,
1333
+ kind: widget,
1334
+ widgetType: entity-header,
1335
+ pos: { x: 0, y: 0, w: 12, h: 2 },
1336
+ }
1337
+ - {
1338
+ id: okr-eb-props,
1339
+ kind: widget,
1340
+ widgetType: entity-properties,
1341
+ pos: { x: 0, y: 2, w: 4, h: 8 },
1342
+ }
1343
+ - {
1344
+ id: okr-eb-projects,
1345
+ kind: widget,
1346
+ widgetType: entity-list,
1347
+ pos: { x: 4, y: 2, w: 8, h: 4 },
1348
+ config:
1349
+ {
1350
+ profileSlug: project,
1351
+ title: Projects,
1352
+ limit: 6,
1353
+ variant: compact,
1354
+ },
1355
+ }
1356
+ - {
1357
+ id: okr-eb-content,
1358
+ kind: widget,
1359
+ widgetType: entity-content,
1360
+ pos: { x: 4, y: 6, w: 8, h: 4 },
1361
+ }
692
1362
  project:
693
1363
  blocks:
694
- - { id: proj-eb-header, kind: widget, widgetType: entity-header, pos: { x: 0, y: 0, w: 12, h: 2 } }
695
- - { id: proj-eb-props, kind: widget, widgetType: entity-properties, pos: { x: 0, y: 2, w: 4, h: 8 } }
696
- - { 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 } }
697
- - { id: proj-eb-content, kind: widget, widgetType: entity-content, pos: { x: 4, y: 6, w: 8, h: 4 } }
1364
+ - {
1365
+ id: proj-eb-header,
1366
+ kind: widget,
1367
+ widgetType: entity-header,
1368
+ pos: { x: 0, y: 0, w: 12, h: 2 },
1369
+ }
1370
+ - {
1371
+ id: proj-eb-props,
1372
+ kind: widget,
1373
+ widgetType: entity-properties,
1374
+ pos: { x: 0, y: 2, w: 4, h: 8 },
1375
+ }
1376
+ - {
1377
+ id: proj-eb-tasks,
1378
+ kind: widget,
1379
+ widgetType: entity-list,
1380
+ pos: { x: 4, y: 2, w: 8, h: 4 },
1381
+ config:
1382
+ { profileSlug: task, title: Tasks, limit: 8, variant: compact },
1383
+ }
1384
+ - {
1385
+ id: proj-eb-content,
1386
+ kind: widget,
1387
+ widgetType: entity-content,
1388
+ pos: { x: 4, y: 6, w: 8, h: 4 },
1389
+ }
698
1390
  task:
699
1391
  blocks:
700
- - { id: task-eb-header, kind: widget, widgetType: entity-header, pos: { x: 0, y: 0, w: 12, h: 2 } }
701
- - { id: task-eb-props, kind: widget, widgetType: entity-properties, pos: { x: 0, y: 2, w: 5, h: 8 } }
702
- - { id: task-eb-content, kind: widget, widgetType: entity-content, pos: { x: 5, y: 2, w: 7, h: 8 } }
1392
+ - {
1393
+ id: task-eb-header,
1394
+ kind: widget,
1395
+ widgetType: entity-header,
1396
+ pos: { x: 0, y: 0, w: 12, h: 2 },
1397
+ }
1398
+ - {
1399
+ id: task-eb-props,
1400
+ kind: widget,
1401
+ widgetType: entity-properties,
1402
+ pos: { x: 0, y: 2, w: 5, h: 8 },
1403
+ }
1404
+ - {
1405
+ id: task-eb-content,
1406
+ kind: widget,
1407
+ widgetType: entity-content,
1408
+ pos: { x: 5, y: 2, w: 7, h: 8 },
1409
+ }
703
1410
  sprint:
704
1411
  blocks:
705
- - { id: sprint-eb-header, kind: widget, widgetType: entity-header, pos: { x: 0, y: 0, w: 12, h: 2 } }
706
- - { id: sprint-eb-props, kind: widget, widgetType: entity-properties, pos: { x: 0, y: 2, w: 4, h: 6 } }
707
- - { 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 } }
1412
+ - {
1413
+ id: sprint-eb-header,
1414
+ kind: widget,
1415
+ widgetType: entity-header,
1416
+ pos: { x: 0, y: 0, w: 12, h: 2 },
1417
+ }
1418
+ - {
1419
+ id: sprint-eb-props,
1420
+ kind: widget,
1421
+ widgetType: entity-properties,
1422
+ pos: { x: 0, y: 2, w: 4, h: 6 },
1423
+ }
1424
+ - {
1425
+ id: sprint-eb-tasks,
1426
+ kind: widget,
1427
+ widgetType: entity-list,
1428
+ pos: { x: 4, y: 2, w: 8, h: 6 },
1429
+ config:
1430
+ {
1431
+ profileSlug: task,
1432
+ title: Sprint Tasks,
1433
+ limit: 10,
1434
+ variant: compact,
1435
+ },
1436
+ }
708
1437
 
709
1438
  # Playbooks — session templates seeded with the workspace.
710
1439
  playbooks: