@assistkick/create 1.7.0 → 1.8.0

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 (200) hide show
  1. package/dist/bin/create.js +0 -0
  2. package/package.json +9 -7
  3. package/templates/assistkick-product-system/.env.example +1 -0
  4. package/templates/assistkick-product-system/local.db +0 -0
  5. package/templates/assistkick-product-system/package.json +4 -2
  6. package/templates/assistkick-product-system/packages/backend/package.json +2 -0
  7. package/templates/assistkick-product-system/packages/backend/src/routes/agents.ts +165 -0
  8. package/templates/assistkick-product-system/packages/backend/src/routes/files.test.ts +358 -0
  9. package/templates/assistkick-product-system/packages/backend/src/routes/files.ts +356 -0
  10. package/templates/assistkick-product-system/packages/backend/src/routes/git.ts +96 -1
  11. package/templates/assistkick-product-system/packages/backend/src/routes/graph.ts +1 -0
  12. package/templates/assistkick-product-system/packages/backend/src/routes/kanban.ts +43 -4
  13. package/templates/assistkick-product-system/packages/backend/src/routes/pipeline.ts +200 -84
  14. package/templates/assistkick-product-system/packages/backend/src/routes/projects.ts +6 -3
  15. package/templates/assistkick-product-system/packages/backend/src/routes/terminal.ts +53 -17
  16. package/templates/assistkick-product-system/packages/backend/src/routes/video.ts +218 -0
  17. package/templates/assistkick-product-system/packages/backend/src/routes/workflow_groups.ts +119 -0
  18. package/templates/assistkick-product-system/packages/backend/src/routes/workflows.ts +154 -0
  19. package/templates/assistkick-product-system/packages/backend/src/server.ts +81 -9
  20. package/templates/assistkick-product-system/packages/backend/src/services/agent_service.test.ts +489 -0
  21. package/templates/assistkick-product-system/packages/backend/src/services/agent_service.ts +416 -0
  22. package/templates/assistkick-product-system/packages/backend/src/services/bundle_service.test.ts +189 -0
  23. package/templates/assistkick-product-system/packages/backend/src/services/bundle_service.ts +182 -0
  24. package/templates/assistkick-product-system/packages/backend/src/services/init.ts +28 -78
  25. package/templates/assistkick-product-system/packages/backend/src/services/project_service.test.ts +16 -0
  26. package/templates/assistkick-product-system/packages/backend/src/services/project_service.ts +73 -2
  27. package/templates/assistkick-product-system/packages/backend/src/services/project_workspace_service.test.ts +4 -4
  28. package/templates/assistkick-product-system/packages/backend/src/services/project_workspace_service.ts +87 -11
  29. package/templates/assistkick-product-system/packages/backend/src/services/pty_session_manager.test.ts +210 -69
  30. package/templates/assistkick-product-system/packages/backend/src/services/pty_session_manager.ts +210 -215
  31. package/templates/assistkick-product-system/packages/backend/src/services/ssh_key_service.test.ts +162 -0
  32. package/templates/assistkick-product-system/packages/backend/src/services/ssh_key_service.ts +148 -0
  33. package/templates/assistkick-product-system/packages/backend/src/services/terminal_ws_handler.ts +11 -5
  34. package/templates/assistkick-product-system/packages/backend/src/services/tts_service.test.ts +64 -0
  35. package/templates/assistkick-product-system/packages/backend/src/services/tts_service.ts +134 -0
  36. package/templates/assistkick-product-system/packages/backend/src/services/video_render_service.test.ts +256 -0
  37. package/templates/assistkick-product-system/packages/backend/src/services/video_render_service.ts +258 -0
  38. package/templates/assistkick-product-system/packages/backend/src/services/workflow_group_service.ts +106 -0
  39. package/templates/assistkick-product-system/packages/backend/src/services/workflow_service.test.ts +275 -0
  40. package/templates/assistkick-product-system/packages/backend/src/services/workflow_service.ts +222 -0
  41. package/templates/assistkick-product-system/packages/frontend/package-lock.json +3455 -0
  42. package/templates/assistkick-product-system/packages/frontend/package.json +6 -0
  43. package/templates/assistkick-product-system/packages/frontend/src/App.tsx +8 -0
  44. package/templates/assistkick-product-system/packages/frontend/src/api/client.ts +456 -16
  45. package/templates/assistkick-product-system/packages/frontend/src/api/client_files.test.ts +172 -0
  46. package/templates/assistkick-product-system/packages/frontend/src/api/client_video.test.ts +238 -0
  47. package/templates/assistkick-product-system/packages/frontend/src/components/AgentsView.tsx +307 -0
  48. package/templates/assistkick-product-system/packages/frontend/src/components/CoherenceView.tsx +82 -66
  49. package/templates/assistkick-product-system/packages/frontend/src/components/CompositionPlaceholder.tsx +97 -0
  50. package/templates/assistkick-product-system/packages/frontend/src/components/DesignSystemView.tsx +20 -0
  51. package/templates/assistkick-product-system/packages/frontend/src/components/EditorTabBar.tsx +57 -0
  52. package/templates/assistkick-product-system/packages/frontend/src/components/FileTree.tsx +313 -0
  53. package/templates/assistkick-product-system/packages/frontend/src/components/FileTreeContextMenu.tsx +61 -0
  54. package/templates/assistkick-product-system/packages/frontend/src/components/FileTreeInlineInput.tsx +73 -0
  55. package/templates/assistkick-product-system/packages/frontend/src/components/FilesView.tsx +404 -0
  56. package/templates/assistkick-product-system/packages/frontend/src/components/GitRepoModal.tsx +187 -56
  57. package/templates/assistkick-product-system/packages/frontend/src/components/GraphLegend.tsx +71 -73
  58. package/templates/assistkick-product-system/packages/frontend/src/components/GraphSettings.tsx +8 -8
  59. package/templates/assistkick-product-system/packages/frontend/src/components/GraphView.tsx +1 -1
  60. package/templates/assistkick-product-system/packages/frontend/src/components/InviteUserDialog.tsx +15 -11
  61. package/templates/assistkick-product-system/packages/frontend/src/components/KanbanView.tsx +202 -171
  62. package/templates/assistkick-product-system/packages/frontend/src/components/LoginPage.tsx +14 -14
  63. package/templates/assistkick-product-system/packages/frontend/src/components/ProjectSelector.tsx +54 -33
  64. package/templates/assistkick-product-system/packages/frontend/src/components/QaIssueSheet.tsx +32 -49
  65. package/templates/assistkick-product-system/packages/frontend/src/components/SidePanel.tsx +43 -48
  66. package/templates/assistkick-product-system/packages/frontend/src/components/TerminalView.tsx +121 -52
  67. package/templates/assistkick-product-system/packages/frontend/src/components/Toolbar.tsx +20 -14
  68. package/templates/assistkick-product-system/packages/frontend/src/components/UsersView.tsx +52 -52
  69. package/templates/assistkick-product-system/packages/frontend/src/components/VideoGallery.tsx +313 -0
  70. package/templates/assistkick-product-system/packages/frontend/src/components/VideographyView.tsx +250 -0
  71. package/templates/assistkick-product-system/packages/frontend/src/components/WorkflowsView.tsx +474 -0
  72. package/templates/assistkick-product-system/packages/frontend/src/components/ds/AccentBorderList.tsx +53 -0
  73. package/templates/assistkick-product-system/packages/frontend/src/components/ds/Button.tsx +87 -0
  74. package/templates/assistkick-product-system/packages/frontend/src/components/ds/ButtonGroup.tsx +29 -0
  75. package/templates/assistkick-product-system/packages/frontend/src/components/ds/ButtonShowcase.tsx +221 -0
  76. package/templates/assistkick-product-system/packages/frontend/src/components/ds/CardGlass.tsx +141 -0
  77. package/templates/assistkick-product-system/packages/frontend/src/components/ds/CompletionRing.tsx +30 -0
  78. package/templates/assistkick-product-system/packages/frontend/src/components/ds/ContentCard.tsx +34 -0
  79. package/templates/assistkick-product-system/packages/frontend/src/components/ds/IconButton.tsx +74 -0
  80. package/templates/assistkick-product-system/packages/frontend/src/components/ds/KanbanCard.tsx +103 -87
  81. package/templates/assistkick-product-system/packages/frontend/src/components/ds/KanbanCardShowcase.tsx +9 -188
  82. package/templates/assistkick-product-system/packages/frontend/src/components/ds/Kbd.tsx +11 -0
  83. package/templates/assistkick-product-system/packages/frontend/src/components/ds/KindBadge.tsx +21 -0
  84. package/templates/assistkick-product-system/packages/frontend/src/components/ds/NavBarSidekick.tsx +81 -37
  85. package/templates/assistkick-product-system/packages/frontend/src/components/ds/SidePanelShowcase.tsx +370 -0
  86. package/templates/assistkick-product-system/packages/frontend/src/components/ds/SideSheet.tsx +64 -0
  87. package/templates/assistkick-product-system/packages/frontend/src/components/ds/StatusDot.tsx +18 -0
  88. package/templates/assistkick-product-system/packages/frontend/src/components/workflow/CheckCardPositionNode.tsx +36 -0
  89. package/templates/assistkick-product-system/packages/frontend/src/components/workflow/CheckCycleCountNode.tsx +60 -0
  90. package/templates/assistkick-product-system/packages/frontend/src/components/workflow/EndNode.tsx +42 -0
  91. package/templates/assistkick-product-system/packages/frontend/src/components/workflow/GroupNode.tsx +189 -0
  92. package/templates/assistkick-product-system/packages/frontend/src/components/workflow/NodePalette.tsx +123 -0
  93. package/templates/assistkick-product-system/packages/frontend/src/components/workflow/RunAgentNode.tsx +51 -0
  94. package/templates/assistkick-product-system/packages/frontend/src/components/workflow/SetCardMetadataNode.tsx +53 -0
  95. package/templates/assistkick-product-system/packages/frontend/src/components/workflow/StartNode.tsx +18 -0
  96. package/templates/assistkick-product-system/packages/frontend/src/components/workflow/TransitionCardNode.tsx +59 -0
  97. package/templates/assistkick-product-system/packages/frontend/src/components/workflow/WorkflowCanvas.tsx +335 -0
  98. package/templates/assistkick-product-system/packages/frontend/src/components/workflow/WorkflowMonitorModal.tsx +634 -0
  99. package/templates/assistkick-product-system/packages/frontend/src/components/workflow/autoLayout.ts +103 -0
  100. package/templates/assistkick-product-system/packages/frontend/src/components/workflow/edgeColors.ts +35 -0
  101. package/templates/assistkick-product-system/packages/frontend/src/components/workflow/monitor_nodes.tsx +208 -0
  102. package/templates/assistkick-product-system/packages/frontend/src/components/workflow/workflow_types.test.ts +119 -0
  103. package/templates/assistkick-product-system/packages/frontend/src/components/workflow/workflow_types.ts +107 -0
  104. package/templates/assistkick-product-system/packages/frontend/src/constants/graph.ts +13 -11
  105. package/templates/assistkick-product-system/packages/frontend/src/hooks/useAutoSave.ts +75 -0
  106. package/templates/assistkick-product-system/packages/frontend/src/hooks/useToast.tsx +16 -3
  107. package/templates/assistkick-product-system/packages/frontend/src/pages/accept_invitation_page.tsx +30 -27
  108. package/templates/assistkick-product-system/packages/frontend/src/pages/forgot_password_page.tsx +18 -15
  109. package/templates/assistkick-product-system/packages/frontend/src/pages/register_page.tsx +21 -18
  110. package/templates/assistkick-product-system/packages/frontend/src/pages/reset_password_page.tsx +28 -25
  111. package/templates/assistkick-product-system/packages/frontend/src/routes/AgentsRoute.tsx +6 -0
  112. package/templates/assistkick-product-system/packages/frontend/src/routes/CoherenceRoute.tsx +1 -1
  113. package/templates/assistkick-product-system/packages/frontend/src/routes/DashboardLayout.tsx +2 -2
  114. package/templates/assistkick-product-system/packages/frontend/src/routes/FilesRoute.tsx +13 -0
  115. package/templates/assistkick-product-system/packages/frontend/src/routes/GraphRoute.tsx +2 -2
  116. package/templates/assistkick-product-system/packages/frontend/src/routes/VideographyRoute.tsx +13 -0
  117. package/templates/assistkick-product-system/packages/frontend/src/routes/WorkflowsRoute.tsx +6 -0
  118. package/templates/assistkick-product-system/packages/frontend/src/stores/useProjectStore.ts +6 -3
  119. package/templates/assistkick-product-system/packages/frontend/src/stores/useSidePanelStore.ts +4 -4
  120. package/templates/assistkick-product-system/packages/frontend/src/styles/index.css +275 -3535
  121. package/templates/assistkick-product-system/packages/frontend/src/utils/auto_save_service.test.ts +167 -0
  122. package/templates/assistkick-product-system/packages/frontend/src/utils/auto_save_service.ts +101 -0
  123. package/templates/assistkick-product-system/packages/frontend/src/utils/composition_matcher.test.ts +42 -0
  124. package/templates/assistkick-product-system/packages/frontend/src/utils/composition_matcher.ts +17 -0
  125. package/templates/assistkick-product-system/packages/frontend/src/utils/file_utils.test.ts +145 -0
  126. package/templates/assistkick-product-system/packages/frontend/src/utils/file_utils.ts +42 -0
  127. package/templates/assistkick-product-system/packages/frontend/src/utils/task_status.test.ts +4 -10
  128. package/templates/assistkick-product-system/packages/frontend/src/utils/task_status.ts +19 -1
  129. package/templates/assistkick-product-system/packages/frontend/vite.config.ts +5 -0
  130. package/templates/assistkick-product-system/packages/shared/db/local.db +0 -0
  131. package/templates/assistkick-product-system/packages/shared/db/migrations/0004_tidy_matthew_murdock.sql +9 -0
  132. package/templates/assistkick-product-system/packages/shared/db/migrations/0005_mysterious_falcon.sql +692 -0
  133. package/templates/assistkick-product-system/packages/shared/db/migrations/0006_next_venom.sql +9 -0
  134. package/templates/assistkick-product-system/packages/shared/db/migrations/0007_deep_barracuda.sql +39 -0
  135. package/templates/assistkick-product-system/packages/shared/db/migrations/0008_puzzling_hannibal_king.sql +1 -0
  136. package/templates/assistkick-product-system/packages/shared/db/migrations/0009_amused_beast.sql +8 -0
  137. package/templates/assistkick-product-system/packages/shared/db/migrations/0010_spotty_moira_mactaggert.sql +9 -0
  138. package/templates/assistkick-product-system/packages/shared/db/migrations/0011_goofy_snowbird.sql +3 -0
  139. package/templates/assistkick-product-system/packages/shared/db/migrations/0011_supreme_doctor_octopus.sql +3 -0
  140. package/templates/assistkick-product-system/packages/shared/db/migrations/0013_reflective_prowler.sql +15 -0
  141. package/templates/assistkick-product-system/packages/shared/db/migrations/meta/0004_snapshot.json +921 -0
  142. package/templates/assistkick-product-system/packages/shared/db/migrations/meta/0005_snapshot.json +1042 -0
  143. package/templates/assistkick-product-system/packages/shared/db/migrations/meta/0006_snapshot.json +1101 -0
  144. package/templates/assistkick-product-system/packages/shared/db/migrations/meta/0007_snapshot.json +1336 -0
  145. package/templates/assistkick-product-system/packages/shared/db/migrations/meta/0008_snapshot.json +1275 -0
  146. package/templates/assistkick-product-system/packages/shared/db/migrations/meta/0009_snapshot.json +1327 -0
  147. package/templates/assistkick-product-system/packages/shared/db/migrations/meta/0010_snapshot.json +1393 -0
  148. package/templates/assistkick-product-system/packages/shared/db/migrations/meta/0011_snapshot.json +1436 -0
  149. package/templates/assistkick-product-system/packages/shared/db/migrations/meta/0013_snapshot.json +1538 -0
  150. package/templates/assistkick-product-system/packages/shared/db/migrations/meta/_journal.json +70 -0
  151. package/templates/assistkick-product-system/packages/shared/db/schema.ts +113 -0
  152. package/templates/assistkick-product-system/packages/shared/lib/claude-service.ts +32 -7
  153. package/templates/assistkick-product-system/packages/shared/lib/constants.ts +9 -0
  154. package/templates/assistkick-product-system/packages/shared/lib/git_workflow.ts +12 -4
  155. package/templates/assistkick-product-system/packages/shared/lib/graph.ts +5 -0
  156. package/templates/assistkick-product-system/packages/shared/lib/workflow_engine.test.ts +1753 -0
  157. package/templates/assistkick-product-system/packages/shared/lib/workflow_engine.ts +1281 -0
  158. package/templates/assistkick-product-system/packages/shared/lib/workflow_orchestrator.ts +211 -0
  159. package/templates/assistkick-product-system/packages/shared/tools/add_node.test.ts +43 -0
  160. package/templates/assistkick-product-system/packages/shared/tools/add_node.ts +13 -2
  161. package/templates/assistkick-product-system/packages/shared/tools/get_kanban.ts +1 -1
  162. package/templates/assistkick-product-system/packages/shared/tools/migrate_epics.test.ts +226 -0
  163. package/templates/assistkick-product-system/packages/shared/tools/migrate_epics.ts +251 -0
  164. package/templates/assistkick-product-system/packages/shared/tools/update_node.ts +2 -2
  165. package/templates/assistkick-product-system/packages/shared/utils/hello_workflow.test.ts +10 -0
  166. package/templates/assistkick-product-system/packages/shared/utils/hello_workflow.ts +6 -0
  167. package/templates/assistkick-product-system/packages/video/Root.tsx +85 -0
  168. package/templates/assistkick-product-system/packages/video/components/email_scene.tsx +231 -0
  169. package/templates/assistkick-product-system/packages/video/components/outro_scene.tsx +153 -0
  170. package/templates/assistkick-product-system/packages/video/components/part_divider.tsx +90 -0
  171. package/templates/assistkick-product-system/packages/video/components/scene.tsx +226 -0
  172. package/templates/assistkick-product-system/packages/video/components/theme.ts +22 -0
  173. package/templates/assistkick-product-system/packages/video/components/title_scene.tsx +169 -0
  174. package/templates/assistkick-product-system/packages/video/components/video_split_layout.tsx +84 -0
  175. package/templates/assistkick-product-system/packages/video/compositions/.gitkeep +0 -0
  176. package/templates/assistkick-product-system/packages/video/index.ts +4 -0
  177. package/templates/assistkick-product-system/packages/video/package.json +28 -0
  178. package/templates/assistkick-product-system/packages/video/remotion.config.ts +11 -0
  179. package/templates/assistkick-product-system/packages/video/scripts/process_script.test.ts +326 -0
  180. package/templates/assistkick-product-system/packages/video/scripts/process_script.ts +630 -0
  181. package/templates/assistkick-product-system/packages/video/style.css +1 -0
  182. package/templates/assistkick-product-system/packages/video/tsconfig.json +18 -0
  183. package/templates/assistkick-product-system/tests/graph_legend.test.ts +2 -1
  184. package/templates/assistkick-product-system/tests/video_render_service.test.ts +179 -0
  185. package/templates/assistkick-product-system/tests/web_terminal.test.ts +219 -455
  186. package/templates/assistkick-product-system/tests/workflow_integration.test.ts +341 -0
  187. package/templates/skills/assistkick-developer/SKILL.md +3 -0
  188. package/templates/skills/assistkick-developer/references/react_development_guidelines.md +225 -0
  189. package/templates/skills/product-system/graph.json +1890 -0
  190. package/templates/skills/product-system/kanban.json +304 -0
  191. package/templates/skills/product-system/nodes/comp_001.md +56 -0
  192. package/templates/skills/product-system/nodes/comp_002.md +57 -0
  193. package/templates/skills/product-system/nodes/data_001.md +51 -0
  194. package/templates/skills/product-system/nodes/data_002.md +40 -0
  195. package/templates/skills/product-system/nodes/data_004.md +38 -0
  196. package/templates/skills/product-system/nodes/dec_001.md +34 -0
  197. package/templates/skills/product-system/nodes/dec_016.md +32 -0
  198. package/templates/skills/product-system/nodes/feat_008.md +30 -0
  199. package/templates/skills/video-composition-agent/SKILL.md +232 -0
  200. package/templates/skills/video-script-writer/SKILL.md +136 -0
@@ -0,0 +1,1890 @@
1
+ {
2
+ "version": "1.0",
3
+ "project": {
4
+ "name": "",
5
+ "description": "",
6
+ "created_at": "2026-02-26T12:13:09.364Z",
7
+ "updated_at": "2026-02-28T08:35:12.136Z"
8
+ },
9
+ "nodes": [
10
+ {
11
+ "id": "comp_001",
12
+ "type": "component",
13
+ "name": "Graph Engine",
14
+ "status": "defined",
15
+ "completeness": 1,
16
+ "open_questions_count": 0,
17
+ "file": "nodes/comp_001.md",
18
+ "created_at": "2026-02-26T12:13:09.364Z",
19
+ "updated_at": "2026-02-26T12:21:39.425Z"
20
+ },
21
+ {
22
+ "id": "comp_002",
23
+ "type": "component",
24
+ "name": "Markdown System",
25
+ "status": "defined",
26
+ "completeness": 1,
27
+ "open_questions_count": 0,
28
+ "file": "nodes/comp_002.md",
29
+ "created_at": "2026-02-26T12:13:10.832Z",
30
+ "updated_at": "2026-02-26T12:21:39.463Z"
31
+ },
32
+ {
33
+ "id": "comp_003",
34
+ "type": "component",
35
+ "name": "Completeness Scorer",
36
+ "status": "defined",
37
+ "completeness": 1,
38
+ "open_questions_count": 0,
39
+ "file": "nodes/comp_003.md",
40
+ "created_at": "2026-02-26T12:13:13.158Z",
41
+ "updated_at": "2026-02-26T12:21:39.501Z"
42
+ },
43
+ {
44
+ "id": "comp_004",
45
+ "type": "component",
46
+ "name": "Validator",
47
+ "status": "defined",
48
+ "completeness": 1,
49
+ "open_questions_count": 0,
50
+ "file": "nodes/comp_004.md",
51
+ "created_at": "2026-02-26T12:13:14.831Z",
52
+ "updated_at": "2026-02-26T12:21:39.539Z"
53
+ },
54
+ {
55
+ "id": "comp_005",
56
+ "type": "component",
57
+ "name": "Constants Registry",
58
+ "status": "defined",
59
+ "completeness": 1,
60
+ "open_questions_count": 0,
61
+ "file": "nodes/comp_005.md",
62
+ "created_at": "2026-02-26T12:13:17.221Z",
63
+ "updated_at": "2026-02-26T12:21:39.577Z"
64
+ },
65
+ {
66
+ "id": "comp_006",
67
+ "type": "component",
68
+ "name": "Session Manager",
69
+ "status": "defined",
70
+ "completeness": 1,
71
+ "open_questions_count": 0,
72
+ "file": "nodes/comp_006.md",
73
+ "created_at": "2026-02-26T12:13:18.897Z",
74
+ "updated_at": "2026-02-26T12:21:39.615Z"
75
+ },
76
+ {
77
+ "id": "comp_007",
78
+ "type": "component",
79
+ "name": "CLI Tools Layer",
80
+ "status": "defined",
81
+ "completeness": 1,
82
+ "open_questions_count": 0,
83
+ "file": "nodes/comp_007.md",
84
+ "created_at": "2026-02-26T12:13:21.127Z",
85
+ "updated_at": "2026-02-26T12:21:39.652Z"
86
+ },
87
+ {
88
+ "id": "data_001",
89
+ "type": "data_entity",
90
+ "name": "graph.json",
91
+ "status": "defined",
92
+ "completeness": 1,
93
+ "open_questions_count": 0,
94
+ "file": "nodes/data_001.md",
95
+ "created_at": "2026-02-26T12:13:45.234Z",
96
+ "updated_at": "2026-02-26T12:21:39.691Z"
97
+ },
98
+ {
99
+ "id": "data_002",
100
+ "type": "data_entity",
101
+ "name": "Node Markdown Files",
102
+ "status": "defined",
103
+ "completeness": 1,
104
+ "open_questions_count": 0,
105
+ "file": "nodes/data_002.md",
106
+ "created_at": "2026-02-26T12:13:47.815Z",
107
+ "updated_at": "2026-02-26T12:21:39.730Z"
108
+ },
109
+ {
110
+ "id": "data_003",
111
+ "type": "data_entity",
112
+ "name": "Session Files",
113
+ "status": "defined",
114
+ "completeness": 1,
115
+ "open_questions_count": 0,
116
+ "file": "nodes/data_003.md",
117
+ "created_at": "2026-02-26T12:13:49.637Z",
118
+ "updated_at": "2026-02-26T12:21:39.767Z"
119
+ },
120
+ {
121
+ "id": "data_004",
122
+ "type": "data_entity",
123
+ "name": "kanban.json",
124
+ "status": "defined",
125
+ "completeness": 0.3,
126
+ "open_questions_count": 0,
127
+ "file": "nodes/data_004.md",
128
+ "created_at": "2026-02-26T16:17:04.615Z",
129
+ "updated_at": "2026-02-27T17:48:49.257Z"
130
+ },
131
+ {
132
+ "id": "dec_001",
133
+ "type": "decision",
134
+ "name": "Markdown as Source of Truth",
135
+ "status": "defined",
136
+ "completeness": 1,
137
+ "open_questions_count": 0,
138
+ "file": "nodes/dec_001.md",
139
+ "created_at": "2026-02-26T12:13:57.346Z",
140
+ "updated_at": "2026-02-28T08:31:00.785Z"
141
+ },
142
+ {
143
+ "id": "dec_002",
144
+ "type": "decision",
145
+ "name": "Atomic File Writes",
146
+ "status": "defined",
147
+ "completeness": 1,
148
+ "open_questions_count": 0,
149
+ "file": "nodes/dec_002.md",
150
+ "created_at": "2026-02-26T12:13:59.099Z",
151
+ "updated_at": "2026-02-26T12:21:39.991Z"
152
+ },
153
+ {
154
+ "id": "dec_003",
155
+ "type": "decision",
156
+ "name": "Cycle Detection on depends_on Only",
157
+ "status": "defined",
158
+ "completeness": 1,
159
+ "open_questions_count": 0,
160
+ "file": "nodes/dec_003.md",
161
+ "created_at": "2026-02-26T12:14:01.175Z",
162
+ "updated_at": "2026-02-26T12:21:40.028Z"
163
+ },
164
+ {
165
+ "id": "dec_004",
166
+ "type": "decision",
167
+ "name": "Type-Specific Completeness Scoring",
168
+ "status": "defined",
169
+ "completeness": 1,
170
+ "open_questions_count": 0,
171
+ "file": "nodes/dec_004.md",
172
+ "created_at": "2026-02-26T12:14:03.382Z",
173
+ "updated_at": "2026-02-26T12:21:40.065Z"
174
+ },
175
+ {
176
+ "id": "dec_005",
177
+ "type": "decision",
178
+ "name": "Bidirectional Relation Recording",
179
+ "status": "defined",
180
+ "completeness": 1,
181
+ "open_questions_count": 0,
182
+ "file": "nodes/dec_005.md",
183
+ "created_at": "2026-02-26T12:14:04.884Z",
184
+ "updated_at": "2026-02-26T12:21:40.104Z"
185
+ },
186
+ {
187
+ "id": "dec_006",
188
+ "type": "decision",
189
+ "name": "Force-Directed Graph Layout",
190
+ "status": "defined",
191
+ "completeness": 0.55,
192
+ "open_questions_count": 0,
193
+ "file": "nodes/dec_006.md",
194
+ "created_at": "2026-02-26T12:28:59.280Z",
195
+ "updated_at": "2026-02-26T12:48:21.869Z"
196
+ },
197
+ {
198
+ "id": "dec_007",
199
+ "type": "decision",
200
+ "name": "Read-Only UI",
201
+ "status": "defined",
202
+ "completeness": 0.55,
203
+ "open_questions_count": 0,
204
+ "file": "nodes/dec_007.md",
205
+ "created_at": "2026-02-26T12:29:00.364Z",
206
+ "updated_at": "2026-02-26T16:16:56.423Z"
207
+ },
208
+ {
209
+ "id": "dec_008",
210
+ "type": "decision",
211
+ "name": "UI Co-Located with Skill",
212
+ "status": "defined",
213
+ "completeness": 0.55,
214
+ "open_questions_count": 0,
215
+ "file": "nodes/dec_008.md",
216
+ "created_at": "2026-02-26T12:32:57.308Z",
217
+ "updated_at": "2026-02-26T12:48:31.740Z"
218
+ },
219
+ {
220
+ "id": "dec_009",
221
+ "type": "decision",
222
+ "name": "Lazy Node Content Loading",
223
+ "status": "defined",
224
+ "completeness": 0.55,
225
+ "open_questions_count": 0,
226
+ "file": "nodes/dec_009.md",
227
+ "created_at": "2026-02-26T12:34:47.217Z",
228
+ "updated_at": "2026-02-26T12:48:36.765Z"
229
+ },
230
+ {
231
+ "id": "dec_010",
232
+ "type": "decision",
233
+ "name": "Rendered Markdown in Detail Panel",
234
+ "status": "defined",
235
+ "completeness": 0.55,
236
+ "open_questions_count": 0,
237
+ "file": "nodes/dec_010.md",
238
+ "created_at": "2026-02-26T12:34:47.255Z",
239
+ "updated_at": "2026-02-26T12:48:41.190Z"
240
+ },
241
+ {
242
+ "id": "dec_011",
243
+ "type": "decision",
244
+ "name": "Separate kanban.json File",
245
+ "status": "defined",
246
+ "completeness": 0.55,
247
+ "open_questions_count": 0,
248
+ "file": "nodes/dec_011.md",
249
+ "created_at": "2026-02-26T16:06:36.866Z",
250
+ "updated_at": "2026-02-26T16:17:26.390Z"
251
+ },
252
+ {
253
+ "id": "dec_012",
254
+ "type": "decision",
255
+ "name": "Features-Only Kanban",
256
+ "status": "defined",
257
+ "completeness": 0.55,
258
+ "open_questions_count": 0,
259
+ "file": "nodes/dec_012.md",
260
+ "created_at": "2026-02-26T16:06:36.903Z",
261
+ "updated_at": "2026-02-27T13:04:16.533Z"
262
+ },
263
+ {
264
+ "id": "dec_013",
265
+ "type": "decision",
266
+ "name": "Tab Bar Navigation",
267
+ "status": "defined",
268
+ "completeness": 0.55,
269
+ "open_questions_count": 0,
270
+ "file": "nodes/dec_013.md",
271
+ "created_at": "2026-02-26T16:06:36.941Z",
272
+ "updated_at": "2026-02-27T09:13:33.097Z"
273
+ },
274
+ {
275
+ "id": "dec_014",
276
+ "type": "decision",
277
+ "name": "Kanban API with CLI Wrapper",
278
+ "status": "defined",
279
+ "completeness": 0.55,
280
+ "open_questions_count": 0,
281
+ "file": "nodes/dec_014.md",
282
+ "created_at": "2026-02-26T16:16:52.909Z",
283
+ "updated_at": "2026-02-26T16:17:40.025Z"
284
+ },
285
+ {
286
+ "id": "dec_015",
287
+ "type": "decision",
288
+ "name": "Free-Form User Column Transitions",
289
+ "status": "partially_defined",
290
+ "completeness": 0.25,
291
+ "open_questions_count": 0,
292
+ "file": "nodes/dec_015.md",
293
+ "created_at": "2026-02-26T17:37:52.469Z",
294
+ "updated_at": "2026-02-26T17:37:52.469Z"
295
+ },
296
+ {
297
+ "id": "dec_016",
298
+ "type": "decision",
299
+ "name": "SQLite Index for Scale",
300
+ "status": "defined",
301
+ "completeness": 0.75,
302
+ "open_questions_count": 0,
303
+ "file": "nodes/dec_016.md",
304
+ "created_at": "2026-02-27T07:55:59.733Z",
305
+ "updated_at": "2026-02-28T08:30:58.273Z"
306
+ },
307
+ {
308
+ "id": "dec_017",
309
+ "type": "decision",
310
+ "name": "Feature Kind Field",
311
+ "status": "defined",
312
+ "completeness": 0.75,
313
+ "open_questions_count": 0,
314
+ "file": "nodes/dec_017.md",
315
+ "created_at": "2026-02-27T08:03:39.407Z",
316
+ "updated_at": "2026-02-27T08:03:53.565Z"
317
+ },
318
+ {
319
+ "id": "dpat_001",
320
+ "type": "design_pattern",
321
+ "name": "Full-Screen Graph Layout",
322
+ "status": "defined",
323
+ "completeness": 0.35,
324
+ "open_questions_count": 0,
325
+ "file": "nodes/dpat_001.md",
326
+ "created_at": "2026-02-26T12:43:55.482Z",
327
+ "updated_at": "2026-02-27T08:36:32.592Z"
328
+ },
329
+ {
330
+ "id": "dpat_002",
331
+ "type": "design_pattern",
332
+ "name": "Dark and Light Theme with Toggle",
333
+ "status": "defined",
334
+ "completeness": 0.35,
335
+ "open_questions_count": 0,
336
+ "file": "nodes/dpat_002.md",
337
+ "created_at": "2026-02-26T12:43:57.538Z",
338
+ "updated_at": "2026-02-26T12:49:38.372Z"
339
+ },
340
+ {
341
+ "id": "dpat_003",
342
+ "type": "design_pattern",
343
+ "name": "Minimal Developer Tool Aesthetic",
344
+ "status": "defined",
345
+ "completeness": 0.35,
346
+ "open_questions_count": 0,
347
+ "file": "nodes/dpat_003.md",
348
+ "created_at": "2026-02-26T12:43:59.843Z",
349
+ "updated_at": "2026-02-26T12:49:41.473Z"
350
+ },
351
+ {
352
+ "id": "feat_001",
353
+ "type": "feature",
354
+ "name": "Node CRUD Operations",
355
+ "status": "defined",
356
+ "completeness": 1,
357
+ "open_questions_count": 0,
358
+ "file": "nodes/feat_001.md",
359
+ "created_at": "2026-02-26T12:13:27.928Z",
360
+ "updated_at": "2026-02-26T12:19:57.368Z"
361
+ },
362
+ {
363
+ "id": "feat_002",
364
+ "type": "feature",
365
+ "name": "Edge Management",
366
+ "status": "defined",
367
+ "completeness": 1,
368
+ "open_questions_count": 0,
369
+ "file": "nodes/feat_002.md",
370
+ "created_at": "2026-02-26T12:13:29.497Z",
371
+ "updated_at": "2026-02-26T12:19:57.406Z"
372
+ },
373
+ {
374
+ "id": "feat_003",
375
+ "type": "feature",
376
+ "name": "Question Lifecycle",
377
+ "status": "defined",
378
+ "completeness": 1,
379
+ "open_questions_count": 0,
380
+ "file": "nodes/feat_003.md",
381
+ "created_at": "2026-02-26T12:13:31.158Z",
382
+ "updated_at": "2026-02-26T12:19:57.444Z"
383
+ },
384
+ {
385
+ "id": "feat_004",
386
+ "type": "feature",
387
+ "name": "Completeness Tracking",
388
+ "status": "defined",
389
+ "completeness": 1,
390
+ "open_questions_count": 0,
391
+ "file": "nodes/feat_004.md",
392
+ "created_at": "2026-02-26T12:13:32.983Z",
393
+ "updated_at": "2026-02-26T12:19:57.481Z"
394
+ },
395
+ {
396
+ "id": "feat_005",
397
+ "type": "feature",
398
+ "name": "Gap Analysis",
399
+ "status": "defined",
400
+ "completeness": 1,
401
+ "open_questions_count": 0,
402
+ "file": "nodes/feat_005.md",
403
+ "created_at": "2026-02-26T12:13:34.987Z",
404
+ "updated_at": "2026-02-26T12:19:57.517Z"
405
+ },
406
+ {
407
+ "id": "feat_006",
408
+ "type": "feature",
409
+ "name": "Search and Discovery",
410
+ "status": "defined",
411
+ "completeness": 1,
412
+ "open_questions_count": 0,
413
+ "file": "nodes/feat_006.md",
414
+ "created_at": "2026-02-26T12:13:37.033Z",
415
+ "updated_at": "2026-02-26T12:19:57.555Z"
416
+ },
417
+ {
418
+ "id": "feat_007",
419
+ "type": "feature",
420
+ "name": "Session Management",
421
+ "status": "defined",
422
+ "completeness": 1,
423
+ "open_questions_count": 0,
424
+ "file": "nodes/feat_007.md",
425
+ "created_at": "2026-02-26T12:13:38.146Z",
426
+ "updated_at": "2026-02-26T12:19:57.591Z"
427
+ },
428
+ {
429
+ "id": "feat_008",
430
+ "type": "feature",
431
+ "name": "Index Rebuild",
432
+ "status": "defined",
433
+ "completeness": 1,
434
+ "open_questions_count": 0,
435
+ "file": "nodes/feat_008.md",
436
+ "created_at": "2026-02-26T12:13:39.739Z",
437
+ "updated_at": "2026-02-26T12:19:57.630Z"
438
+ },
439
+ {
440
+ "id": "feat_009",
441
+ "type": "feature",
442
+ "name": "Graph Visualization Web UI",
443
+ "status": "defined",
444
+ "completeness": 1,
445
+ "open_questions_count": 0,
446
+ "file": "nodes/feat_009.md",
447
+ "created_at": "2026-02-26T12:25:59.675Z",
448
+ "updated_at": "2026-02-26T12:48:58.041Z"
449
+ },
450
+ {
451
+ "id": "feat_010",
452
+ "type": "feature",
453
+ "name": "Completeness Dashboard",
454
+ "status": "defined",
455
+ "completeness": 1,
456
+ "open_questions_count": 0,
457
+ "file": "nodes/feat_010.md",
458
+ "created_at": "2026-02-26T12:30:50.823Z",
459
+ "updated_at": "2026-02-26T12:49:00.804Z"
460
+ },
461
+ {
462
+ "id": "feat_011",
463
+ "type": "feature",
464
+ "name": "Node Detail Side Panel",
465
+ "status": "defined",
466
+ "completeness": 1,
467
+ "open_questions_count": 0,
468
+ "file": "nodes/feat_011.md",
469
+ "created_at": "2026-02-26T12:30:50.863Z",
470
+ "updated_at": "2026-02-26T12:49:01.512Z"
471
+ },
472
+ {
473
+ "id": "feat_012",
474
+ "type": "feature",
475
+ "name": "Neighborhood Focus Mode",
476
+ "status": "defined",
477
+ "completeness": 1,
478
+ "open_questions_count": 0,
479
+ "file": "nodes/feat_012.md",
480
+ "created_at": "2026-02-26T12:30:50.900Z",
481
+ "updated_at": "2026-02-26T12:49:03.803Z"
482
+ },
483
+ {
484
+ "id": "feat_013",
485
+ "type": "feature",
486
+ "name": "Visual Gap Indicators",
487
+ "status": "defined",
488
+ "completeness": 1,
489
+ "open_questions_count": 0,
490
+ "file": "nodes/feat_013.md",
491
+ "created_at": "2026-02-26T12:30:50.938Z",
492
+ "updated_at": "2026-02-26T12:49:06.542Z"
493
+ },
494
+ {
495
+ "id": "feat_014",
496
+ "type": "feature",
497
+ "name": "Node Sizing by Edge Count",
498
+ "status": "defined",
499
+ "completeness": 1,
500
+ "open_questions_count": 0,
501
+ "file": "nodes/feat_014.md",
502
+ "created_at": "2026-02-26T12:37:36.804Z",
503
+ "updated_at": "2026-02-26T12:49:09.206Z"
504
+ },
505
+ {
506
+ "id": "feat_015",
507
+ "type": "feature",
508
+ "name": "Node Type Visual Encoding",
509
+ "status": "defined",
510
+ "completeness": 1,
511
+ "open_questions_count": 0,
512
+ "file": "nodes/feat_015.md",
513
+ "created_at": "2026-02-26T12:37:36.842Z",
514
+ "updated_at": "2026-02-26T21:21:31.789Z"
515
+ },
516
+ {
517
+ "id": "feat_016",
518
+ "type": "feature",
519
+ "name": "Edge Type Color Coding",
520
+ "status": "defined",
521
+ "completeness": 1,
522
+ "open_questions_count": 0,
523
+ "file": "nodes/feat_016.md",
524
+ "created_at": "2026-02-26T12:37:36.879Z",
525
+ "updated_at": "2026-02-26T21:38:17.111Z"
526
+ },
527
+ {
528
+ "id": "feat_017",
529
+ "type": "feature",
530
+ "name": "Graph Legend",
531
+ "status": "defined",
532
+ "completeness": 1,
533
+ "open_questions_count": 0,
534
+ "file": "nodes/feat_017.md",
535
+ "created_at": "2026-02-26T12:37:36.916Z",
536
+ "updated_at": "2026-02-26T12:49:21.249Z"
537
+ },
538
+ {
539
+ "id": "feat_018",
540
+ "type": "feature",
541
+ "name": "Hide Defined Nodes Filter",
542
+ "status": "defined",
543
+ "completeness": 1,
544
+ "open_questions_count": 0,
545
+ "file": "nodes/feat_018.md",
546
+ "created_at": "2026-02-26T12:37:36.953Z",
547
+ "updated_at": "2026-02-26T12:49:23.994Z"
548
+ },
549
+ {
550
+ "id": "feat_019",
551
+ "type": "feature",
552
+ "name": "Zoom and Pan",
553
+ "status": "defined",
554
+ "completeness": 1,
555
+ "open_questions_count": 0,
556
+ "file": "nodes/feat_019.md",
557
+ "created_at": "2026-02-26T12:39:19.836Z",
558
+ "updated_at": "2026-02-26T12:49:25.946Z"
559
+ },
560
+ {
561
+ "id": "feat_020",
562
+ "type": "feature",
563
+ "name": "Node Search with Type Filter",
564
+ "status": "defined",
565
+ "completeness": 1,
566
+ "open_questions_count": 0,
567
+ "file": "nodes/feat_020.md",
568
+ "created_at": "2026-02-26T12:39:19.874Z",
569
+ "updated_at": "2026-02-26T12:49:28.532Z"
570
+ },
571
+ {
572
+ "id": "feat_021",
573
+ "type": "feature",
574
+ "name": "Kanban Board View",
575
+ "status": "defined",
576
+ "completeness": 1,
577
+ "open_questions_count": 0,
578
+ "file": "nodes/feat_021.md",
579
+ "created_at": "2026-02-26T16:01:17.584Z",
580
+ "updated_at": "2026-02-26T17:39:48.402Z"
581
+ },
582
+ {
583
+ "id": "feat_022",
584
+ "type": "feature",
585
+ "name": "QA Rejection Notes",
586
+ "status": "defined",
587
+ "completeness": 1,
588
+ "open_questions_count": 0,
589
+ "file": "nodes/feat_022.md",
590
+ "created_at": "2026-02-26T16:09:50.939Z",
591
+ "updated_at": "2026-02-26T16:17:19.213Z"
592
+ },
593
+ {
594
+ "id": "feat_023",
595
+ "type": "feature",
596
+ "name": "QA Rejection Counter",
597
+ "status": "defined",
598
+ "completeness": 1,
599
+ "open_questions_count": 0,
600
+ "file": "nodes/feat_023.md",
601
+ "created_at": "2026-02-26T16:16:58.687Z",
602
+ "updated_at": "2026-02-26T16:17:21.255Z"
603
+ },
604
+ {
605
+ "id": "feat_024",
606
+ "type": "feature",
607
+ "name": "Free-Form Kanban Column Transitions",
608
+ "status": "defined",
609
+ "completeness": 1,
610
+ "open_questions_count": 0,
611
+ "file": "nodes/feat_024.md",
612
+ "created_at": "2026-02-26T17:39:54.608Z",
613
+ "updated_at": "2026-02-26T17:40:01.139Z"
614
+ },
615
+ {
616
+ "id": "feat_025",
617
+ "type": "feature",
618
+ "name": "Retry Attempt Label on Kanban Cards",
619
+ "status": "defined",
620
+ "completeness": 1,
621
+ "open_questions_count": 0,
622
+ "file": "nodes/feat_025.md",
623
+ "created_at": "2026-02-27T07:41:20.131Z",
624
+ "updated_at": "2026-02-27T07:41:31.353Z"
625
+ },
626
+ {
627
+ "id": "feat_026",
628
+ "type": "feature",
629
+ "name": "Human-Readable Legend Labels",
630
+ "status": "defined",
631
+ "completeness": 1,
632
+ "open_questions_count": 0,
633
+ "file": "nodes/feat_026.md",
634
+ "created_at": "2026-02-27T08:02:00.964Z",
635
+ "updated_at": "2026-02-27T08:02:13.882Z"
636
+ },
637
+ {
638
+ "id": "feat_027",
639
+ "type": "feature",
640
+ "name": "Feature Kind Field Support",
641
+ "status": "defined",
642
+ "completeness": 1,
643
+ "open_questions_count": 0,
644
+ "file": "nodes/feat_027.md",
645
+ "created_at": "2026-02-27T08:03:59.124Z",
646
+ "updated_at": "2026-02-27T08:04:09.976Z"
647
+ },
648
+ {
649
+ "id": "feat_028",
650
+ "type": "feature",
651
+ "name": "Reorder Search Above Type Filter",
652
+ "status": "defined",
653
+ "completeness": 1,
654
+ "open_questions_count": 0,
655
+ "file": "nodes/feat_028.md",
656
+ "created_at": "2026-02-27T08:24:57.129Z",
657
+ "updated_at": "2026-02-27T08:25:25.522Z",
658
+ "kind": "new"
659
+ },
660
+ {
661
+ "id": "feat_029",
662
+ "type": "feature",
663
+ "name": "Node Type Toggle Filters",
664
+ "status": "defined",
665
+ "completeness": 1,
666
+ "open_questions_count": 0,
667
+ "file": "nodes/feat_029.md",
668
+ "created_at": "2026-02-27T08:25:02.155Z",
669
+ "updated_at": "2026-02-27T08:25:32.538Z",
670
+ "kind": "new"
671
+ },
672
+ {
673
+ "id": "feat_030",
674
+ "type": "feature",
675
+ "name": "Graph Settings Side Sheet",
676
+ "status": "defined",
677
+ "completeness": 1,
678
+ "open_questions_count": 0,
679
+ "file": "nodes/feat_030.md",
680
+ "created_at": "2026-02-27T08:25:07.031Z",
681
+ "updated_at": "2026-02-27T08:25:40.397Z",
682
+ "kind": "new"
683
+ },
684
+ {
685
+ "id": "feat_031",
686
+ "type": "feature",
687
+ "name": "Legend Collapsed by Default",
688
+ "status": "defined",
689
+ "completeness": 1,
690
+ "open_questions_count": 0,
691
+ "file": "nodes/feat_031.md",
692
+ "created_at": "2026-02-27T08:25:12.883Z",
693
+ "updated_at": "2026-02-27T09:13:58.221Z",
694
+ "kind": "new"
695
+ },
696
+ {
697
+ "id": "feat_032",
698
+ "type": "feature",
699
+ "name": "URL-Based View Routing",
700
+ "status": "defined",
701
+ "completeness": 1,
702
+ "open_questions_count": 0,
703
+ "file": "nodes/feat_032.md",
704
+ "created_at": "2026-02-27T09:13:39.088Z",
705
+ "updated_at": "2026-02-27T09:13:45.551Z",
706
+ "kind": "new"
707
+ },
708
+ {
709
+ "id": "feat_033",
710
+ "type": "feature",
711
+ "name": "Test Bug",
712
+ "status": "partially_defined",
713
+ "completeness": 0.5,
714
+ "open_questions_count": 0,
715
+ "file": "nodes/feat_033.md",
716
+ "created_at": "2026-02-27T10:38:02.897Z",
717
+ "updated_at": "2026-02-27T10:38:02.897Z",
718
+ "kind": "bugfix"
719
+ },
720
+ {
721
+ "id": "feat_034",
722
+ "type": "feature",
723
+ "name": "Graceful Initialization on Missing Files",
724
+ "status": "defined",
725
+ "completeness": 1,
726
+ "open_questions_count": 0,
727
+ "file": "nodes/feat_034.md",
728
+ "created_at": "2026-02-27T11:11:59.081Z",
729
+ "updated_at": "2026-02-27T11:12:13.539Z",
730
+ "kind": "new"
731
+ },
732
+ {
733
+ "id": "feat_035",
734
+ "type": "feature",
735
+ "name": "Fix: Search results dropdown clipped by legend overflow",
736
+ "status": "defined",
737
+ "completeness": 1,
738
+ "open_questions_count": 0,
739
+ "file": "nodes/feat_035.md",
740
+ "created_at": "2026-02-27T12:31:47.348Z",
741
+ "updated_at": "2026-02-27T13:56:04.650Z",
742
+ "kind": "bugfix"
743
+ },
744
+ {
745
+ "id": "feat_036",
746
+ "type": "feature",
747
+ "name": "All Features on Kanban Board",
748
+ "status": "defined",
749
+ "completeness": 1,
750
+ "open_questions_count": 0,
751
+ "file": "nodes/feat_036.md",
752
+ "created_at": "2026-02-27T13:03:59.140Z",
753
+ "updated_at": "2026-02-27T13:04:17.067Z",
754
+ "kind": "new"
755
+ },
756
+ {
757
+ "id": "feat_037",
758
+ "type": "feature",
759
+ "name": "Fix: Graph Settings Not Persisted and Labels Reset on Clear Selection",
760
+ "status": "partially_defined",
761
+ "completeness": 0.8,
762
+ "open_questions_count": 0,
763
+ "file": "nodes/feat_037.md",
764
+ "created_at": "2026-02-27T13:09:45.700Z",
765
+ "updated_at": "2026-02-27T13:10:14.011Z",
766
+ "kind": "bugfix"
767
+ },
768
+ {
769
+ "id": "flow_001",
770
+ "type": "flow",
771
+ "name": "Interview Session Flow",
772
+ "status": "defined",
773
+ "completeness": 1,
774
+ "open_questions_count": 0,
775
+ "file": "nodes/flow_001.md",
776
+ "created_at": "2026-02-26T12:14:16.027Z",
777
+ "updated_at": "2026-02-26T12:21:40.217Z"
778
+ },
779
+ {
780
+ "id": "flow_002",
781
+ "type": "flow",
782
+ "name": "Kanban Card Lifecycle",
783
+ "status": "defined",
784
+ "completeness": 0.3,
785
+ "open_questions_count": 0,
786
+ "file": "nodes/flow_002.md",
787
+ "created_at": "2026-02-26T16:09:49.343Z",
788
+ "updated_at": "2026-02-27T17:48:54.458Z"
789
+ },
790
+ {
791
+ "id": "nfr_001",
792
+ "type": "non_functional_requirement",
793
+ "name": "Development Guidelines",
794
+ "status": "defined",
795
+ "completeness": 0.25,
796
+ "open_questions_count": 0,
797
+ "file": "nodes/nfr_001.md",
798
+ "created_at": "2026-02-26T12:44:07.730Z",
799
+ "updated_at": "2026-02-26T12:49:41.996Z"
800
+ },
801
+ {
802
+ "id": "role_001",
803
+ "type": "user_role",
804
+ "name": "AI Interviewer",
805
+ "status": "defined",
806
+ "completeness": 1,
807
+ "open_questions_count": 0,
808
+ "file": "nodes/role_001.md",
809
+ "created_at": "2026-02-26T12:14:10.101Z",
810
+ "updated_at": "2026-02-26T12:21:40.142Z"
811
+ },
812
+ {
813
+ "id": "role_002",
814
+ "type": "user_role",
815
+ "name": "Product Owner",
816
+ "status": "defined",
817
+ "completeness": 1,
818
+ "open_questions_count": 0,
819
+ "file": "nodes/role_002.md",
820
+ "created_at": "2026-02-26T12:14:11.518Z",
821
+ "updated_at": "2026-02-26T12:21:40.179Z"
822
+ },
823
+ {
824
+ "id": "tech_001",
825
+ "type": "tech_choice",
826
+ "name": "Node.js ES Modules",
827
+ "status": "defined",
828
+ "completeness": 1,
829
+ "open_questions_count": 0,
830
+ "file": "nodes/tech_001.md",
831
+ "created_at": "2026-02-26T12:13:51.340Z",
832
+ "updated_at": "2026-02-26T12:21:39.804Z"
833
+ },
834
+ {
835
+ "id": "tech_002",
836
+ "type": "tech_choice",
837
+ "name": "gray-matter",
838
+ "status": "defined",
839
+ "completeness": 1,
840
+ "open_questions_count": 0,
841
+ "file": "nodes/tech_002.md",
842
+ "created_at": "2026-02-26T12:13:52.647Z",
843
+ "updated_at": "2026-02-26T12:21:39.842Z"
844
+ },
845
+ {
846
+ "id": "tech_003",
847
+ "type": "tech_choice",
848
+ "name": "Commander.js",
849
+ "status": "defined",
850
+ "completeness": 1,
851
+ "open_questions_count": 0,
852
+ "file": "nodes/tech_003.md",
853
+ "created_at": "2026-02-26T12:13:54.053Z",
854
+ "updated_at": "2026-02-26T12:21:39.880Z"
855
+ },
856
+ {
857
+ "id": "tech_004",
858
+ "type": "tech_choice",
859
+ "name": "Chalk",
860
+ "status": "defined",
861
+ "completeness": 1,
862
+ "open_questions_count": 0,
863
+ "file": "nodes/tech_004.md",
864
+ "created_at": "2026-02-26T12:13:55.412Z",
865
+ "updated_at": "2026-02-26T12:21:39.916Z"
866
+ },
867
+ {
868
+ "id": "tech_005",
869
+ "type": "tech_choice",
870
+ "name": "Single-File Node.js Server",
871
+ "status": "defined",
872
+ "completeness": 0.25,
873
+ "open_questions_count": 0,
874
+ "file": "nodes/tech_005.md",
875
+ "created_at": "2026-02-26T12:34:47.140Z",
876
+ "updated_at": "2026-02-26T12:48:50.386Z"
877
+ },
878
+ {
879
+ "id": "tech_006",
880
+ "type": "tech_choice",
881
+ "name": "D3.js Force Graph",
882
+ "status": "defined",
883
+ "completeness": 0.25,
884
+ "open_questions_count": 0,
885
+ "file": "nodes/tech_006.md",
886
+ "created_at": "2026-02-26T12:34:47.179Z",
887
+ "updated_at": "2026-02-26T12:48:53.804Z"
888
+ },
889
+ {
890
+ "id": "feat_038",
891
+ "type": "feature",
892
+ "name": "Kanban Card Copy Button",
893
+ "status": "defined",
894
+ "completeness": 1,
895
+ "open_questions_count": 0,
896
+ "kind": "new",
897
+ "file": "nodes/feat_038.md",
898
+ "created_at": "2026-02-27T13:36:28.004Z",
899
+ "updated_at": "2026-02-27T13:36:35.243Z"
900
+ },
901
+ {
902
+ "id": "feat_039",
903
+ "type": "feature",
904
+ "name": "QA Issue Reporting Side Sheet",
905
+ "status": "defined",
906
+ "completeness": 1,
907
+ "open_questions_count": 0,
908
+ "kind": "new",
909
+ "file": "nodes/feat_039.md",
910
+ "created_at": "2026-02-27T17:41:35.915Z",
911
+ "updated_at": "2026-02-27T17:48:49.329Z"
912
+ },
913
+ {
914
+ "id": "feat_040",
915
+ "type": "feature",
916
+ "name": "Debug-First Pipeline Step for QA Issues",
917
+ "status": "defined",
918
+ "completeness": 1,
919
+ "open_questions_count": 0,
920
+ "kind": "new",
921
+ "file": "nodes/feat_040.md",
922
+ "created_at": "2026-02-27T17:41:41.752Z",
923
+ "updated_at": "2026-02-27T17:48:49.368Z"
924
+ },
925
+ {
926
+ "id": "feat_041",
927
+ "type": "feature",
928
+ "name": "Graph Coherence Review Process",
929
+ "status": "defined",
930
+ "completeness": 1,
931
+ "open_questions_count": 0,
932
+ "kind": "new",
933
+ "file": "nodes/feat_041.md",
934
+ "created_at": "2026-02-27T18:04:13.261Z",
935
+ "updated_at": "2026-02-27T18:09:29.439Z"
936
+ },
937
+ {
938
+ "id": "data_005",
939
+ "type": "data_entity",
940
+ "name": "coherence_reviews.json",
941
+ "status": "partially_defined",
942
+ "completeness": 0.3,
943
+ "open_questions_count": 0,
944
+ "file": "nodes/data_005.md",
945
+ "created_at": "2026-02-27T18:09:15.531Z",
946
+ "updated_at": "2026-02-27T18:09:15.531Z"
947
+ },
948
+ {
949
+ "id": "feat_042",
950
+ "type": "feature",
951
+ "name": "Fix: QA Issue Reporting Side Sheet Not Implemented",
952
+ "status": "defined",
953
+ "completeness": 1,
954
+ "open_questions_count": 0,
955
+ "kind": "bugfix",
956
+ "file": "nodes/feat_042.md",
957
+ "created_at": "2026-02-27T18:14:08.297Z",
958
+ "updated_at": "2026-02-27T18:14:32.486Z"
959
+ },
960
+ {
961
+ "id": "dec_018",
962
+ "type": "decision",
963
+ "name": "Turso Database as Source of Truth",
964
+ "status": "defined",
965
+ "completeness": 0.25,
966
+ "open_questions_count": 0,
967
+ "file": "nodes/dec_018.md",
968
+ "created_at": "2026-02-28T08:30:47.275Z",
969
+ "updated_at": "2026-02-28T08:35:12.097Z"
970
+ },
971
+ {
972
+ "id": "tech_007",
973
+ "type": "tech_choice",
974
+ "name": "Turso (LibSQL)",
975
+ "status": "partially_defined",
976
+ "completeness": 0.25,
977
+ "open_questions_count": 0,
978
+ "file": "nodes/tech_007.md",
979
+ "created_at": "2026-02-28T08:30:50.051Z",
980
+ "updated_at": "2026-02-28T08:30:50.051Z"
981
+ },
982
+ {
983
+ "id": "tech_008",
984
+ "type": "tech_choice",
985
+ "name": "Drizzle ORM",
986
+ "status": "partially_defined",
987
+ "completeness": 0.25,
988
+ "open_questions_count": 0,
989
+ "file": "nodes/tech_008.md",
990
+ "created_at": "2026-02-28T08:30:52.269Z",
991
+ "updated_at": "2026-02-28T08:30:52.269Z"
992
+ },
993
+ {
994
+ "id": "feat_043",
995
+ "type": "feature",
996
+ "name": "Drizzle Schema Definition",
997
+ "status": "defined",
998
+ "completeness": 0.7,
999
+ "open_questions_count": 0,
1000
+ "kind": "new",
1001
+ "file": "nodes/feat_043.md",
1002
+ "created_at": "2026-02-28T08:31:18.178Z",
1003
+ "updated_at": "2026-02-28T08:35:11.938Z"
1004
+ },
1005
+ {
1006
+ "id": "feat_044",
1007
+ "type": "feature",
1008
+ "name": "Turso Connection and Database Layer",
1009
+ "status": "defined",
1010
+ "completeness": 0.7,
1011
+ "open_questions_count": 0,
1012
+ "kind": "new",
1013
+ "file": "nodes/feat_044.md",
1014
+ "created_at": "2026-02-28T08:31:21.696Z",
1015
+ "updated_at": "2026-02-28T08:35:11.978Z"
1016
+ },
1017
+ {
1018
+ "id": "feat_045",
1019
+ "type": "feature",
1020
+ "name": "Data Migration Script",
1021
+ "status": "defined",
1022
+ "completeness": 0.7,
1023
+ "open_questions_count": 0,
1024
+ "kind": "new",
1025
+ "file": "nodes/feat_045.md",
1026
+ "created_at": "2026-02-28T08:31:24.631Z",
1027
+ "updated_at": "2026-02-28T08:35:12.018Z"
1028
+ },
1029
+ {
1030
+ "id": "feat_046",
1031
+ "type": "feature",
1032
+ "name": "Remove Local File Dependencies",
1033
+ "status": "defined",
1034
+ "completeness": 0.7,
1035
+ "open_questions_count": 0,
1036
+ "kind": "new",
1037
+ "file": "nodes/feat_046.md",
1038
+ "created_at": "2026-02-28T08:31:27.401Z",
1039
+ "updated_at": "2026-02-28T08:35:12.057Z"
1040
+ },
1041
+ {
1042
+ "id": "dec_019",
1043
+ "type": "decision",
1044
+ "name": "Turso Credentials via .env File",
1045
+ "status": "defined",
1046
+ "completeness": 0.25,
1047
+ "open_questions_count": 0,
1048
+ "file": "nodes/dec_019.md",
1049
+ "created_at": "2026-02-28T08:35:03.823Z",
1050
+ "updated_at": "2026-02-28T08:35:12.136Z"
1051
+ }
1052
+ ],
1053
+ "edges": [
1054
+ {
1055
+ "from": "feat_001",
1056
+ "to": "comp_001",
1057
+ "relation": "implemented_with"
1058
+ },
1059
+ {
1060
+ "from": "feat_001",
1061
+ "to": "comp_002",
1062
+ "relation": "implemented_with"
1063
+ },
1064
+ {
1065
+ "from": "feat_001",
1066
+ "to": "comp_005",
1067
+ "relation": "implemented_with"
1068
+ },
1069
+ {
1070
+ "from": "feat_002",
1071
+ "to": "comp_001",
1072
+ "relation": "implemented_with"
1073
+ },
1074
+ {
1075
+ "from": "feat_002",
1076
+ "to": "comp_004",
1077
+ "relation": "implemented_with"
1078
+ },
1079
+ {
1080
+ "from": "feat_003",
1081
+ "to": "comp_002",
1082
+ "relation": "implemented_with"
1083
+ },
1084
+ {
1085
+ "from": "feat_004",
1086
+ "to": "comp_003",
1087
+ "relation": "implemented_with"
1088
+ },
1089
+ {
1090
+ "from": "feat_004",
1091
+ "to": "comp_005",
1092
+ "relation": "implemented_with"
1093
+ },
1094
+ {
1095
+ "from": "feat_005",
1096
+ "to": "feat_004",
1097
+ "relation": "depends_on"
1098
+ },
1099
+ {
1100
+ "from": "feat_005",
1101
+ "to": "comp_003",
1102
+ "relation": "implemented_with"
1103
+ },
1104
+ {
1105
+ "from": "feat_006",
1106
+ "to": "comp_001",
1107
+ "relation": "implemented_with"
1108
+ },
1109
+ {
1110
+ "from": "feat_007",
1111
+ "to": "comp_006",
1112
+ "relation": "implemented_with"
1113
+ },
1114
+ {
1115
+ "from": "feat_008",
1116
+ "to": "comp_001",
1117
+ "relation": "implemented_with"
1118
+ },
1119
+ {
1120
+ "from": "feat_008",
1121
+ "to": "comp_002",
1122
+ "relation": "implemented_with"
1123
+ },
1124
+ {
1125
+ "from": "comp_001",
1126
+ "to": "data_001",
1127
+ "relation": "reads_writes"
1128
+ },
1129
+ {
1130
+ "from": "comp_002",
1131
+ "to": "data_002",
1132
+ "relation": "reads_writes"
1133
+ },
1134
+ {
1135
+ "from": "comp_006",
1136
+ "to": "data_003",
1137
+ "relation": "reads_writes"
1138
+ },
1139
+ {
1140
+ "from": "comp_003",
1141
+ "to": "comp_005",
1142
+ "relation": "depends_on"
1143
+ },
1144
+ {
1145
+ "from": "comp_004",
1146
+ "to": "comp_005",
1147
+ "relation": "depends_on"
1148
+ },
1149
+ {
1150
+ "from": "comp_007",
1151
+ "to": "comp_001",
1152
+ "relation": "depends_on"
1153
+ },
1154
+ {
1155
+ "from": "comp_007",
1156
+ "to": "comp_002",
1157
+ "relation": "depends_on"
1158
+ },
1159
+ {
1160
+ "from": "comp_007",
1161
+ "to": "comp_003",
1162
+ "relation": "depends_on"
1163
+ },
1164
+ {
1165
+ "from": "comp_007",
1166
+ "to": "comp_004",
1167
+ "relation": "depends_on"
1168
+ },
1169
+ {
1170
+ "from": "comp_007",
1171
+ "to": "comp_005",
1172
+ "relation": "depends_on"
1173
+ },
1174
+ {
1175
+ "from": "comp_007",
1176
+ "to": "comp_006",
1177
+ "relation": "depends_on"
1178
+ },
1179
+ {
1180
+ "from": "comp_002",
1181
+ "to": "dec_001",
1182
+ "relation": "governed_by"
1183
+ },
1184
+ {
1185
+ "from": "comp_001",
1186
+ "to": "dec_002",
1187
+ "relation": "governed_by"
1188
+ },
1189
+ {
1190
+ "from": "comp_004",
1191
+ "to": "dec_003",
1192
+ "relation": "governed_by"
1193
+ },
1194
+ {
1195
+ "from": "comp_003",
1196
+ "to": "dec_004",
1197
+ "relation": "governed_by"
1198
+ },
1199
+ {
1200
+ "from": "comp_002",
1201
+ "to": "dec_005",
1202
+ "relation": "governed_by"
1203
+ },
1204
+ {
1205
+ "from": "comp_007",
1206
+ "to": "tech_001",
1207
+ "relation": "implemented_with"
1208
+ },
1209
+ {
1210
+ "from": "comp_002",
1211
+ "to": "tech_002",
1212
+ "relation": "implemented_with"
1213
+ },
1214
+ {
1215
+ "from": "comp_007",
1216
+ "to": "tech_003",
1217
+ "relation": "implemented_with"
1218
+ },
1219
+ {
1220
+ "from": "comp_007",
1221
+ "to": "tech_004",
1222
+ "relation": "implemented_with"
1223
+ },
1224
+ {
1225
+ "from": "flow_001",
1226
+ "to": "role_001",
1227
+ "relation": "performed_by"
1228
+ },
1229
+ {
1230
+ "from": "flow_001",
1231
+ "to": "role_002",
1232
+ "relation": "performed_by"
1233
+ },
1234
+ {
1235
+ "from": "feat_009",
1236
+ "to": "dec_006",
1237
+ "relation": "governed_by"
1238
+ },
1239
+ {
1240
+ "from": "feat_009",
1241
+ "to": "dec_007",
1242
+ "relation": "governed_by"
1243
+ },
1244
+ {
1245
+ "from": "feat_009",
1246
+ "to": "feat_010",
1247
+ "relation": "contains"
1248
+ },
1249
+ {
1250
+ "from": "feat_009",
1251
+ "to": "feat_011",
1252
+ "relation": "contains"
1253
+ },
1254
+ {
1255
+ "from": "feat_009",
1256
+ "to": "feat_012",
1257
+ "relation": "contains"
1258
+ },
1259
+ {
1260
+ "from": "feat_009",
1261
+ "to": "feat_013",
1262
+ "relation": "contains"
1263
+ },
1264
+ {
1265
+ "from": "feat_009",
1266
+ "to": "dec_008",
1267
+ "relation": "governed_by"
1268
+ },
1269
+ {
1270
+ "from": "feat_009",
1271
+ "to": "tech_005",
1272
+ "relation": "implemented_with"
1273
+ },
1274
+ {
1275
+ "from": "feat_009",
1276
+ "to": "tech_006",
1277
+ "relation": "implemented_with"
1278
+ },
1279
+ {
1280
+ "from": "feat_009",
1281
+ "to": "dec_009",
1282
+ "relation": "governed_by"
1283
+ },
1284
+ {
1285
+ "from": "feat_011",
1286
+ "to": "dec_009",
1287
+ "relation": "governed_by"
1288
+ },
1289
+ {
1290
+ "from": "feat_011",
1291
+ "to": "dec_010",
1292
+ "relation": "governed_by"
1293
+ },
1294
+ {
1295
+ "from": "feat_009",
1296
+ "to": "feat_014",
1297
+ "relation": "contains"
1298
+ },
1299
+ {
1300
+ "from": "feat_009",
1301
+ "to": "feat_015",
1302
+ "relation": "contains"
1303
+ },
1304
+ {
1305
+ "from": "feat_009",
1306
+ "to": "feat_016",
1307
+ "relation": "contains"
1308
+ },
1309
+ {
1310
+ "from": "feat_009",
1311
+ "to": "feat_017",
1312
+ "relation": "contains"
1313
+ },
1314
+ {
1315
+ "from": "feat_009",
1316
+ "to": "feat_018",
1317
+ "relation": "contains"
1318
+ },
1319
+ {
1320
+ "from": "feat_017",
1321
+ "to": "feat_015",
1322
+ "relation": "depends_on"
1323
+ },
1324
+ {
1325
+ "from": "feat_017",
1326
+ "to": "feat_016",
1327
+ "relation": "depends_on"
1328
+ },
1329
+ {
1330
+ "from": "feat_017",
1331
+ "to": "feat_014",
1332
+ "relation": "depends_on"
1333
+ },
1334
+ {
1335
+ "from": "feat_009",
1336
+ "to": "feat_019",
1337
+ "relation": "contains"
1338
+ },
1339
+ {
1340
+ "from": "feat_009",
1341
+ "to": "feat_020",
1342
+ "relation": "contains"
1343
+ },
1344
+ {
1345
+ "from": "feat_009",
1346
+ "to": "dpat_001",
1347
+ "relation": "constrained_by"
1348
+ },
1349
+ {
1350
+ "from": "feat_009",
1351
+ "to": "dpat_002",
1352
+ "relation": "constrained_by"
1353
+ },
1354
+ {
1355
+ "from": "feat_009",
1356
+ "to": "dpat_003",
1357
+ "relation": "constrained_by"
1358
+ },
1359
+ {
1360
+ "from": "feat_009",
1361
+ "to": "nfr_001",
1362
+ "relation": "constrained_by"
1363
+ },
1364
+ {
1365
+ "from": "feat_009",
1366
+ "to": "feat_021",
1367
+ "relation": "contains"
1368
+ },
1369
+ {
1370
+ "from": "feat_021",
1371
+ "to": "dec_011",
1372
+ "relation": "governed_by"
1373
+ },
1374
+ {
1375
+ "from": "feat_021",
1376
+ "to": "dec_012",
1377
+ "relation": "governed_by"
1378
+ },
1379
+ {
1380
+ "from": "feat_009",
1381
+ "to": "dec_013",
1382
+ "relation": "governed_by"
1383
+ },
1384
+ {
1385
+ "from": "feat_021",
1386
+ "to": "data_001",
1387
+ "relation": "reads_writes"
1388
+ },
1389
+ {
1390
+ "from": "feat_021",
1391
+ "to": "feat_022",
1392
+ "relation": "contains"
1393
+ },
1394
+ {
1395
+ "from": "feat_021",
1396
+ "to": "flow_002",
1397
+ "relation": "constrained_by"
1398
+ },
1399
+ {
1400
+ "from": "feat_021",
1401
+ "to": "dec_014",
1402
+ "relation": "governed_by"
1403
+ },
1404
+ {
1405
+ "from": "feat_021",
1406
+ "to": "feat_023",
1407
+ "relation": "contains"
1408
+ },
1409
+ {
1410
+ "from": "feat_021",
1411
+ "to": "data_004",
1412
+ "relation": "reads_writes"
1413
+ },
1414
+ {
1415
+ "from": "feat_022",
1416
+ "to": "data_004",
1417
+ "relation": "reads_writes"
1418
+ },
1419
+ {
1420
+ "from": "feat_023",
1421
+ "to": "data_004",
1422
+ "relation": "reads_writes"
1423
+ },
1424
+ {
1425
+ "from": "flow_002",
1426
+ "to": "dec_015",
1427
+ "relation": "governed_by"
1428
+ },
1429
+ {
1430
+ "from": "feat_024",
1431
+ "to": "feat_021",
1432
+ "relation": "depends_on"
1433
+ },
1434
+ {
1435
+ "from": "feat_024",
1436
+ "to": "dec_015",
1437
+ "relation": "governed_by"
1438
+ },
1439
+ {
1440
+ "from": "feat_024",
1441
+ "to": "flow_002",
1442
+ "relation": "constrained_by"
1443
+ },
1444
+ {
1445
+ "from": "feat_024",
1446
+ "to": "data_004",
1447
+ "relation": "reads_writes"
1448
+ },
1449
+ {
1450
+ "from": "feat_025",
1451
+ "to": "feat_021",
1452
+ "relation": "depends_on"
1453
+ },
1454
+ {
1455
+ "from": "feat_025",
1456
+ "to": "data_004",
1457
+ "relation": "reads_writes"
1458
+ },
1459
+ {
1460
+ "from": "dec_016",
1461
+ "to": "dec_001",
1462
+ "relation": "relates_to"
1463
+ },
1464
+ {
1465
+ "from": "dec_016",
1466
+ "to": "data_001",
1467
+ "relation": "relates_to"
1468
+ },
1469
+ {
1470
+ "from": "dec_016",
1471
+ "to": "data_004",
1472
+ "relation": "relates_to"
1473
+ },
1474
+ {
1475
+ "from": "feat_009",
1476
+ "to": "data_001",
1477
+ "relation": "reads_writes"
1478
+ },
1479
+ {
1480
+ "from": "feat_026",
1481
+ "to": "feat_017",
1482
+ "relation": "depends_on"
1483
+ },
1484
+ {
1485
+ "from": "feat_009",
1486
+ "to": "feat_026",
1487
+ "relation": "contains"
1488
+ },
1489
+ {
1490
+ "from": "dec_017",
1491
+ "to": "dec_012",
1492
+ "relation": "relates_to"
1493
+ },
1494
+ {
1495
+ "from": "feat_027",
1496
+ "to": "dec_017",
1497
+ "relation": "governed_by"
1498
+ },
1499
+ {
1500
+ "from": "feat_027",
1501
+ "to": "feat_021",
1502
+ "relation": "depends_on"
1503
+ },
1504
+ {
1505
+ "from": "feat_028",
1506
+ "to": "feat_020",
1507
+ "relation": "depends_on"
1508
+ },
1509
+ {
1510
+ "from": "feat_029",
1511
+ "to": "feat_020",
1512
+ "relation": "depends_on"
1513
+ },
1514
+ {
1515
+ "from": "feat_030",
1516
+ "to": "feat_018",
1517
+ "relation": "depends_on"
1518
+ },
1519
+ {
1520
+ "from": "feat_031",
1521
+ "to": "feat_017",
1522
+ "relation": "depends_on"
1523
+ },
1524
+ {
1525
+ "from": "feat_009",
1526
+ "to": "feat_028",
1527
+ "relation": "contains"
1528
+ },
1529
+ {
1530
+ "from": "feat_009",
1531
+ "to": "feat_029",
1532
+ "relation": "contains"
1533
+ },
1534
+ {
1535
+ "from": "feat_009",
1536
+ "to": "feat_030",
1537
+ "relation": "contains"
1538
+ },
1539
+ {
1540
+ "from": "feat_009",
1541
+ "to": "feat_031",
1542
+ "relation": "contains"
1543
+ },
1544
+ {
1545
+ "from": "feat_028",
1546
+ "to": "dec_013",
1547
+ "relation": "governed_by"
1548
+ },
1549
+ {
1550
+ "from": "feat_029",
1551
+ "to": "feat_015",
1552
+ "relation": "depends_on"
1553
+ },
1554
+ {
1555
+ "from": "feat_030",
1556
+ "to": "feat_016",
1557
+ "relation": "depends_on"
1558
+ },
1559
+ {
1560
+ "from": "feat_030",
1561
+ "to": "feat_011",
1562
+ "relation": "relates_to"
1563
+ },
1564
+ {
1565
+ "from": "feat_028",
1566
+ "to": "dpat_001",
1567
+ "relation": "constrained_by"
1568
+ },
1569
+ {
1570
+ "from": "feat_029",
1571
+ "to": "dpat_001",
1572
+ "relation": "constrained_by"
1573
+ },
1574
+ {
1575
+ "from": "feat_030",
1576
+ "to": "dpat_001",
1577
+ "relation": "constrained_by"
1578
+ },
1579
+ {
1580
+ "from": "feat_032",
1581
+ "to": "dec_013",
1582
+ "relation": "governed_by"
1583
+ },
1584
+ {
1585
+ "from": "feat_009",
1586
+ "to": "feat_032",
1587
+ "relation": "contains"
1588
+ },
1589
+ {
1590
+ "from": "feat_032",
1591
+ "to": "feat_021",
1592
+ "relation": "depends_on"
1593
+ },
1594
+ {
1595
+ "from": "feat_032",
1596
+ "to": "feat_009",
1597
+ "relation": "depends_on"
1598
+ },
1599
+ {
1600
+ "from": "feat_034",
1601
+ "to": "data_001",
1602
+ "relation": "depends_on"
1603
+ },
1604
+ {
1605
+ "from": "feat_034",
1606
+ "to": "tech_005",
1607
+ "relation": "depends_on"
1608
+ },
1609
+ {
1610
+ "from": "feat_034",
1611
+ "to": "feat_009",
1612
+ "relation": "relates_to"
1613
+ },
1614
+ {
1615
+ "from": "feat_034",
1616
+ "to": "feat_021",
1617
+ "relation": "relates_to"
1618
+ },
1619
+ {
1620
+ "from": "feat_035",
1621
+ "to": "feat_020",
1622
+ "relation": "relates_to"
1623
+ },
1624
+ {
1625
+ "from": "feat_036",
1626
+ "to": "feat_021",
1627
+ "relation": "depends_on"
1628
+ },
1629
+ {
1630
+ "from": "feat_036",
1631
+ "to": "data_004",
1632
+ "relation": "reads_writes"
1633
+ },
1634
+ {
1635
+ "from": "feat_036",
1636
+ "to": "dec_012",
1637
+ "relation": "relates_to"
1638
+ },
1639
+ {
1640
+ "from": "feat_037",
1641
+ "to": "feat_030",
1642
+ "relation": "relates_to"
1643
+ },
1644
+ {
1645
+ "from": "feat_038",
1646
+ "to": "feat_021",
1647
+ "relation": "depends_on"
1648
+ },
1649
+ {
1650
+ "from": "feat_038",
1651
+ "to": "dec_007",
1652
+ "relation": "governed_by"
1653
+ },
1654
+ {
1655
+ "from": "feat_038",
1656
+ "to": "data_004",
1657
+ "relation": "reads_writes"
1658
+ },
1659
+ {
1660
+ "from": "feat_038",
1661
+ "to": "data_001",
1662
+ "relation": "reads_writes"
1663
+ },
1664
+ {
1665
+ "from": "feat_039",
1666
+ "to": "feat_022",
1667
+ "relation": "depends_on"
1668
+ },
1669
+ {
1670
+ "from": "feat_021",
1671
+ "to": "feat_039",
1672
+ "relation": "contains"
1673
+ },
1674
+ {
1675
+ "from": "feat_039",
1676
+ "to": "data_004",
1677
+ "relation": "reads_writes"
1678
+ },
1679
+ {
1680
+ "from": "feat_039",
1681
+ "to": "feat_030",
1682
+ "relation": "relates_to"
1683
+ },
1684
+ {
1685
+ "from": "feat_040",
1686
+ "to": "feat_022",
1687
+ "relation": "depends_on"
1688
+ },
1689
+ {
1690
+ "from": "feat_040",
1691
+ "to": "feat_021",
1692
+ "relation": "depends_on"
1693
+ },
1694
+ {
1695
+ "from": "feat_040",
1696
+ "to": "feat_039",
1697
+ "relation": "relates_to"
1698
+ },
1699
+ {
1700
+ "from": "feat_040",
1701
+ "to": "data_004",
1702
+ "relation": "reads_writes"
1703
+ },
1704
+ {
1705
+ "from": "flow_002",
1706
+ "to": "feat_040",
1707
+ "relation": "relates_to"
1708
+ },
1709
+ {
1710
+ "from": "feat_041",
1711
+ "to": "feat_002",
1712
+ "relation": "depends_on"
1713
+ },
1714
+ {
1715
+ "from": "feat_041",
1716
+ "to": "feat_006",
1717
+ "relation": "depends_on"
1718
+ },
1719
+ {
1720
+ "from": "feat_041",
1721
+ "to": "data_001",
1722
+ "relation": "reads_writes"
1723
+ },
1724
+ {
1725
+ "from": "feat_041",
1726
+ "to": "feat_005",
1727
+ "relation": "relates_to"
1728
+ },
1729
+ {
1730
+ "from": "feat_041",
1731
+ "to": "feat_008",
1732
+ "relation": "relates_to"
1733
+ },
1734
+ {
1735
+ "from": "feat_041",
1736
+ "to": "role_002",
1737
+ "relation": "performed_by"
1738
+ },
1739
+ {
1740
+ "from": "feat_041",
1741
+ "to": "comp_001",
1742
+ "relation": "implemented_with"
1743
+ },
1744
+ {
1745
+ "from": "feat_009",
1746
+ "to": "feat_041",
1747
+ "relation": "contains"
1748
+ },
1749
+ {
1750
+ "from": "feat_041",
1751
+ "to": "dec_005",
1752
+ "relation": "governed_by"
1753
+ },
1754
+ {
1755
+ "from": "feat_041",
1756
+ "to": "data_005",
1757
+ "relation": "reads_writes"
1758
+ },
1759
+ {
1760
+ "from": "feat_041",
1761
+ "to": "dec_013",
1762
+ "relation": "governed_by"
1763
+ },
1764
+ {
1765
+ "from": "feat_041",
1766
+ "to": "feat_001",
1767
+ "relation": "depends_on"
1768
+ },
1769
+ {
1770
+ "from": "feat_042",
1771
+ "to": "feat_039",
1772
+ "relation": "relates_to"
1773
+ },
1774
+ {
1775
+ "from": "dec_018",
1776
+ "to": "dec_016",
1777
+ "relation": "relates_to"
1778
+ },
1779
+ {
1780
+ "from": "dec_018",
1781
+ "to": "dec_001",
1782
+ "relation": "relates_to"
1783
+ },
1784
+ {
1785
+ "from": "tech_007",
1786
+ "to": "dec_018",
1787
+ "relation": "relates_to"
1788
+ },
1789
+ {
1790
+ "from": "tech_008",
1791
+ "to": "dec_018",
1792
+ "relation": "relates_to"
1793
+ },
1794
+ {
1795
+ "from": "tech_007",
1796
+ "to": "tech_008",
1797
+ "relation": "relates_to"
1798
+ },
1799
+ {
1800
+ "from": "feat_043",
1801
+ "to": "tech_008",
1802
+ "relation": "implemented_with"
1803
+ },
1804
+ {
1805
+ "from": "feat_043",
1806
+ "to": "tech_007",
1807
+ "relation": "implemented_with"
1808
+ },
1809
+ {
1810
+ "from": "feat_043",
1811
+ "to": "dec_018",
1812
+ "relation": "governed_by"
1813
+ },
1814
+ {
1815
+ "from": "feat_044",
1816
+ "to": "feat_043",
1817
+ "relation": "depends_on"
1818
+ },
1819
+ {
1820
+ "from": "feat_044",
1821
+ "to": "tech_007",
1822
+ "relation": "implemented_with"
1823
+ },
1824
+ {
1825
+ "from": "feat_044",
1826
+ "to": "tech_008",
1827
+ "relation": "implemented_with"
1828
+ },
1829
+ {
1830
+ "from": "feat_044",
1831
+ "to": "dec_018",
1832
+ "relation": "governed_by"
1833
+ },
1834
+ {
1835
+ "from": "feat_044",
1836
+ "to": "comp_001",
1837
+ "relation": "relates_to"
1838
+ },
1839
+ {
1840
+ "from": "feat_045",
1841
+ "to": "feat_044",
1842
+ "relation": "depends_on"
1843
+ },
1844
+ {
1845
+ "from": "feat_045",
1846
+ "to": "data_001",
1847
+ "relation": "relates_to"
1848
+ },
1849
+ {
1850
+ "from": "feat_045",
1851
+ "to": "data_002",
1852
+ "relation": "relates_to"
1853
+ },
1854
+ {
1855
+ "from": "feat_045",
1856
+ "to": "data_004",
1857
+ "relation": "relates_to"
1858
+ },
1859
+ {
1860
+ "from": "feat_046",
1861
+ "to": "feat_045",
1862
+ "relation": "depends_on"
1863
+ },
1864
+ {
1865
+ "from": "feat_046",
1866
+ "to": "feat_008",
1867
+ "relation": "relates_to"
1868
+ },
1869
+ {
1870
+ "from": "feat_046",
1871
+ "to": "comp_001",
1872
+ "relation": "relates_to"
1873
+ },
1874
+ {
1875
+ "from": "feat_046",
1876
+ "to": "comp_002",
1877
+ "relation": "relates_to"
1878
+ },
1879
+ {
1880
+ "from": "feat_044",
1881
+ "to": "dec_019",
1882
+ "relation": "governed_by"
1883
+ },
1884
+ {
1885
+ "from": "dec_019",
1886
+ "to": "dec_018",
1887
+ "relation": "relates_to"
1888
+ }
1889
+ ]
1890
+ }