@synap-core/workspace-templates 0.12.0 → 0.24.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 (237) hide show
  1. package/README.md +509 -0
  2. package/automations/bookmark-enrichment.automation.json +321 -0
  3. package/automations/github-pr-events.automation.json +505 -0
  4. package/automations/mail-feed.automation.json +86 -0
  5. package/automations/ship-a-change-checks-green.automation.json +106 -0
  6. package/automations/ship-a-change-checks-red.automation.json +106 -0
  7. package/automations/ship-a-change-deployed.automation.json +56 -0
  8. package/automations/ship-a-change-pr-merged.automation.json +110 -0
  9. package/automations/ship-a-change-pr-opened.automation.json +104 -0
  10. package/automations/url-bookmark-capture.automation.json +132 -0
  11. package/capabilities/agency-skills.capability.json +157 -0
  12. package/capabilities/apify.capability.json +265 -0
  13. package/capabilities/apollo.capability.json +120 -0
  14. package/capabilities/arch-backend.capability.json +97 -0
  15. package/capabilities/arch-client-intelligence.capability.json +401 -0
  16. package/capabilities/backblaze-b2.capability.json +205 -0
  17. package/capabilities/cal-com.capability.json +266 -0
  18. package/capabilities/canva.capability.json +274 -0
  19. package/capabilities/claude-code-routines.capability.json +172 -0
  20. package/capabilities/claude-managed-agents.capability.json +215 -0
  21. package/capabilities/client-comms-report.capability.json +246 -0
  22. package/capabilities/content-idea-to-production.capability.json +29 -0
  23. package/capabilities/datagouv.capability.json +315 -0
  24. package/capabilities/discord-bot.capability.json +157 -0
  25. package/capabilities/dropbox.capability.json +281 -0
  26. package/capabilities/exa.capability.json +109 -0
  27. package/capabilities/fal-ai.capability.json +83 -0
  28. package/capabilities/fal-media-lab.capability.json +158 -0
  29. package/capabilities/fireflies.capability.json +191 -0
  30. package/capabilities/freellmapi.capability.json +114 -0
  31. package/capabilities/generic-apikey.capability.json +92 -0
  32. package/capabilities/github-merge.capability.json +99 -0
  33. package/capabilities/github-read.capability.json +325 -0
  34. package/capabilities/governance-tighten-recommender.capability.json +81 -0
  35. package/capabilities/jev.capability.json +226 -0
  36. package/capabilities/lead-conversion-enrollment.capability.json +246 -0
  37. package/capabilities/mail-feed.capability.json +277 -0
  38. package/capabilities/mailgun.capability.json +52 -0
  39. package/capabilities/nango-google.capability.json +639 -0
  40. package/capabilities/notion.capability.json +417 -0
  41. package/capabilities/omniroute.capability.json +137 -0
  42. package/capabilities/posthog-analytics.capability.json +258 -0
  43. package/capabilities/postiz.capability.json +467 -0
  44. package/capabilities/proactive-digest.capability.json +190 -0
  45. package/capabilities/proton.capability.json +288 -0
  46. package/capabilities/replicate-rvm.capability.json +97 -0
  47. package/capabilities/research-methods.capability.json +57 -0
  48. package/capabilities/shopify.capability.json +395 -0
  49. package/capabilities/slack.capability.json +369 -0
  50. package/capabilities/stripe.capability.json +1496 -0
  51. package/capabilities/telegram-bridge.capability.json +56 -0
  52. package/capabilities/treg.capability.json +102 -0
  53. package/capabilities/unipile-linkedin.capability.json +494 -0
  54. package/capabilities/vercel.capability.json +424 -0
  55. package/dist/define-DqoItRiR.d.ts +1370 -0
  56. package/dist/index.d.ts +174 -900
  57. package/dist/index.js +26447 -24075
  58. package/dist/index.js.map +1 -1
  59. package/dist/wire.d.ts +222 -0
  60. package/dist/wire.js +77 -0
  61. package/dist/wire.js.map +1 -0
  62. package/package.json +27 -4
  63. package/retired.yaml +136 -0
  64. package/skills/app-factory-build-slice/SKILL.md +70 -0
  65. package/skills/app-factory-build-slice.catalog.json +17 -0
  66. package/skills/app-factory-design-canvas/SKILL.md +96 -0
  67. package/skills/app-factory-design-canvas.catalog.json +17 -0
  68. package/skills/app-factory-design-review/SKILL.md +105 -0
  69. package/skills/app-factory-design-review.catalog.json +18 -0
  70. package/skills/app-factory-research/SKILL.md +123 -0
  71. package/skills/app-factory-research.catalog.json +17 -0
  72. package/skills/bookmark-enrichment/SKILL.md +40 -0
  73. package/skills/carousel-format/carousel-format.skill.json +18 -0
  74. package/skills/collage-broll/collage-broll.skill.json +20 -0
  75. package/skills/content-taste/content-taste.skill.json +18 -0
  76. package/skills/creative-director/creative-director.skill.json +18 -0
  77. package/skills/design-critique/SKILL.md +138 -0
  78. package/skills/design-critique.catalog.json +12 -0
  79. package/skills/designing-with-real-components/SKILL.md +140 -0
  80. package/skills/designing-with-real-components.catalog.json +12 -0
  81. package/skills/edit-loop/edit-loop.skill.json +25 -0
  82. package/skills/facecam-edit/facecam-edit.skill.json +24 -0
  83. package/skills/mapping-the-server/SKILL.md +54 -0
  84. package/skills/math-explainer-manimgx/math-explainer-manimgx.skill.json +20 -0
  85. package/skills/motion-quality-gates/motion-quality-gates.skill.json +20 -0
  86. package/skills/open-design-edit/open-design-edit.skill.json +24 -0
  87. package/skills/reading-client-progress/SKILL.md +65 -0
  88. package/skills/routing-to-channels/SKILL.md +54 -0
  89. package/skills/stellar-scf-grants-advisor/ASSOCIATE-CHEATSHEET.md +133 -0
  90. package/skills/stellar-scf-grants-advisor/ASSOCIATE-ONBOARDING-GUIDE.md +761 -0
  91. package/skills/stellar-scf-grants-advisor/CLIENT-FAQ.md +181 -0
  92. package/skills/stellar-scf-grants-advisor/PARTNER-HANDOVER.md +130 -0
  93. package/skills/stellar-scf-grants-advisor/SKILL.md +102 -0
  94. package/skills/stellar-scf-grants-advisor/examples/README.md +43 -0
  95. package/skills/stellar-scf-grants-advisor/examples/chat-summary-templates.md +158 -0
  96. package/skills/stellar-scf-grants-advisor/examples/corpus-comparable-rows.md +136 -0
  97. package/skills/stellar-scf-grants-advisor/examples/q10-team-rewrites.md +109 -0
  98. package/skills/stellar-scf-grants-advisor/examples/q2-description-rewrites.md +88 -0
  99. package/skills/stellar-scf-grants-advisor/examples/q6-integration-rewrites.md +107 -0
  100. package/skills/stellar-scf-grants-advisor/examples/tranche-structures.md +176 -0
  101. package/skills/stellar-scf-grants-advisor/reference/01-methodology.md +96 -0
  102. package/skills/stellar-scf-grants-advisor/reference/02-scoring-framework.md +199 -0
  103. package/skills/stellar-scf-grants-advisor/reference/03-rejection-patterns.md +241 -0
  104. package/skills/stellar-scf-grants-advisor/reference/04-winner-patterns.md +120 -0
  105. package/skills/stellar-scf-grants-advisor/reference/05-comeback-patterns.md +92 -0
  106. package/skills/stellar-scf-grants-advisor/reference/06-budget-benchmarks.md +125 -0
  107. package/skills/stellar-scf-grants-advisor/reference/07-integration-list.md +147 -0
  108. package/skills/stellar-scf-grants-advisor/reference/08-abstract-fields.md +258 -0
  109. package/skills/stellar-scf-grants-advisor/reference/09-build-fields.md +259 -0
  110. package/skills/stellar-scf-grants-advisor/reference/10-corpus-winners.md +135 -0
  111. package/skills/stellar-scf-grants-advisor/reference/11-corpus-rejects.md +267 -0
  112. package/skills/stellar-scf-grants-advisor/reference/12-client-communication.md +131 -0
  113. package/skills/stellar-scf-grants-advisor/reference/13-excel-output-spec.md +199 -0
  114. package/skills/stellar-scf-grants-advisor/reference/14-worked-examples.md +160 -0
  115. package/skills/stellar-scf-grants-advisor/templates/abstract-review-builder.py +253 -0
  116. package/skills/stellar-scf-grants-advisor/templates/build-review-builder.py +213 -0
  117. package/skills/video-direction/video-direction.skill.json +20 -0
  118. package/skills/video-style-vocabulary/video-style-vocabulary.skill.json +20 -0
  119. package/skills/video-toolbox/video-toolbox.skill.json +20 -0
  120. package/src/__fixtures__/lifecycle-presets.flat-before.json +205 -0
  121. package/src/agency-os.yaml +122 -0
  122. package/src/agent-os-skill-slugs.test.ts +65 -0
  123. package/src/apify-social-reader.test.ts +317 -0
  124. package/src/base.yaml +85 -39
  125. package/src/blockchain-ecosystem.yaml +1 -0
  126. package/src/brand-library.yaml +525 -14
  127. package/src/builder-dev-fold.template.test.ts +113 -0
  128. package/src/builder.yaml +779 -91
  129. package/src/business-model-catalog-description.test.ts +47 -0
  130. package/src/business-model-grp.template.test.ts +214 -0
  131. package/src/business-model.yaml +296 -49
  132. package/src/catalog-safety.test.ts +198 -0
  133. package/src/catalog.template-items.test.ts +75 -0
  134. package/src/catalog.ts +66 -2
  135. package/src/concept-guard.test.ts +28 -8
  136. package/src/concept-guard.ts +2 -2
  137. package/src/content-creation.template.test.ts +52 -0
  138. package/src/content-creation.yaml +192 -0
  139. package/src/content-os.edit-loop.template.test.ts +210 -0
  140. package/src/content-os.publish-due-posts.template.test.ts +261 -0
  141. package/src/content-os.template.test.ts +349 -0
  142. package/src/content-os.video-takes.template.test.ts +338 -0
  143. package/src/content-os.work-a-take.template.test.ts +125 -0
  144. package/src/content-os.yaml +1873 -39
  145. package/src/content-studio-retired.template.test.ts +82 -0
  146. package/src/corpus-flow-validity.test.ts +4 -5
  147. package/src/crm-absorbs-outreach.template.test.ts +117 -0
  148. package/src/crm-build-plan.template.test.ts +128 -0
  149. package/src/crm-lists.template.test.ts +96 -0
  150. package/src/crm-messages-cadence.template.test.ts +246 -0
  151. package/src/crm-one-send-door.template.test.ts +65 -0
  152. package/src/crm.yaml +1563 -181
  153. package/src/decisions-wave.template.test.ts +186 -0
  154. package/src/define.ts +146 -17
  155. package/src/design-to-implementation.template.test.ts +94 -0
  156. package/src/domain-template-type.test.ts +75 -0
  157. package/src/ecosystem.yaml +27 -66
  158. package/src/enterprise-os.yaml +10 -134
  159. package/src/facecam-edit.audio-studio.test.ts +188 -0
  160. package/src/fal-generate-image.test.ts +200 -0
  161. package/src/fal-media-lab-pod-files.test.ts +180 -0
  162. package/src/finance.yaml +254 -1
  163. package/src/foundation.yaml +78 -38
  164. package/src/frame-host-modules.d.mts +6 -0
  165. package/src/frame-host-modules.mjs +58 -0
  166. package/src/generate.mjs +9 -3
  167. package/src/github-merge.test.ts +210 -0
  168. package/src/grants.yaml +46 -17
  169. package/src/hr.yaml +39 -6
  170. package/src/index.ts +36 -1
  171. package/src/intent.test.ts +161 -0
  172. package/src/internal-runbook.yaml +19 -1
  173. package/src/jev.test.ts +356 -0
  174. package/src/legal.yaml +33 -1
  175. package/src/life-os.yaml +51 -240
  176. package/src/lifecycle-coverage.test.ts +124 -0
  177. package/src/lifecycle-declarations.test.ts +252 -0
  178. package/src/lifecycle-presets.test.ts +468 -0
  179. package/src/lifecycle-presets.ts +494 -0
  180. package/src/lifecycle-stuck.test.ts +46 -0
  181. package/src/lifecycle-waits.parity.test.ts +319 -0
  182. package/src/marketing.yaml +108 -4
  183. package/src/meetings-knowledge.yaml +18 -0
  184. package/src/networking.yaml +23 -2
  185. package/src/operations.yaml +304 -4
  186. package/src/pipeline-views.template.test.ts +88 -0
  187. package/src/playbook-goal-placeholders.test.ts +57 -0
  188. package/src/postiz-contract.test.ts +134 -0
  189. package/src/presentation-declarations.test.ts +174 -0
  190. package/src/process-contract.validate.test.ts +352 -0
  191. package/src/project-management.yaml +39 -740
  192. package/src/publish-body.d.mts +29 -0
  193. package/src/publish-body.mjs +74 -0
  194. package/src/publish-body.test.ts +74 -0
  195. package/src/publish-official-lib.test.ts +176 -0
  196. package/src/replicate-rvm.test.ts +504 -0
  197. package/src/research-base.yaml +119 -20
  198. package/src/research-decision.yaml +60 -3
  199. package/src/reserved-profile-slugs.test.ts +81 -0
  200. package/src/retired-goal-kinds.test.ts +52 -0
  201. package/src/role-reference-and-step-domain.test.ts +192 -0
  202. package/src/seed-obligation.test.ts +1 -6
  203. package/src/send-message-maps.test.ts +227 -0
  204. package/src/shared-role-ssot.test.ts +40 -2
  205. package/src/ship-a-change.template.test.ts +177 -0
  206. package/src/skills.test.ts +170 -0
  207. package/src/social.yaml +85 -27
  208. package/src/space-packages.freshness.test.ts +97 -0
  209. package/src/space-packages.generated.ts +40 -0
  210. package/src/space-packages.test.ts +125 -0
  211. package/src/space-packages.ts +73 -0
  212. package/src/start.test.ts +188 -0
  213. package/src/stripe-capability.test.ts +192 -0
  214. package/src/task-intents.test.ts +293 -0
  215. package/src/template-documents.test.ts +158 -0
  216. package/src/templates.ts +20907 -21464
  217. package/src/types.ts +475 -61
  218. package/src/unipile-linkedin-find-profile.test.ts +183 -0
  219. package/src/unipile-publish-post.test.ts +162 -0
  220. package/src/validate-flow.drift.test.ts +2 -3
  221. package/src/validate-flow.ts +22 -2
  222. package/src/validate-onboarding.test.ts +59 -0
  223. package/src/validate.test.ts +71 -4
  224. package/src/validate.ts +1416 -7
  225. package/src/wire-core.ts +231 -0
  226. package/src/wire.test.ts +159 -0
  227. package/src/wire.ts +107 -0
  228. package/views/bookmark-views-pack.view.json +39 -0
  229. package/views/event-views-pack.view.json +45 -0
  230. package/views/task-views-pack.view.json +53 -0
  231. package/src/agent-fleet.yaml +0 -1645
  232. package/src/business-developer.template.test.ts +0 -351
  233. package/src/business-developer.yaml +0 -860
  234. package/src/content-studio.yaml +0 -361
  235. package/src/dev-dashboard.yaml +0 -990
  236. package/src/outreach-comms.yaml +0 -486
  237. package/src/the-arch.yaml +0 -201
package/src/builder.yaml CHANGED
@@ -16,16 +16,44 @@
16
16
  meta:
17
17
  slug: builder-workspace
18
18
  domain: build
19
- name: Builder
20
- description: "Builder workspace — apps, features, services, packages, environments, deployments, recipes, decisions, incidents, plus delegated agent tasks/projects/skills/providers."
19
+ name: Dev
20
+ description: "Dev workspace — apps, features, services, packages, environments, deployments, recipes, decisions, incidents, plus delegated agent tasks/skills/providers."
21
21
  icon: wrench
22
22
  color: "#7C3AED"
23
23
  tags: [builder, developer, agents]
24
24
  isPublic: true
25
+ # Onboarding start (meta.start): the "product and dev" card.
26
+ start:
27
+ order: 1
28
+ label: Product and dev
29
+ promise: Everything your agents are building, from backlog to done.
30
+ suggestFor: [developer]
31
+ profile: task
32
+ views: [task-board]
33
+ example:
34
+ - { title: "Add Stripe checkout", values: { task-status: Running, task-priority: High, task-type: Code } }
35
+ - { title: "Research competitor pricing", values: { task-status: Queued, task-priority: Medium, task-type: Research } }
36
+ - { title: "Fix login redirect loop", values: { task-status: Review, task-priority: Critical, task-type: Code } }
37
+ - { title: "Write the launch changelog", values: { task-status: Backlog, task-priority: Low, task-type: Content } }
38
+ - { title: "Ship v0.2 to staging", values: { task-status: Done, task-priority: High, task-type: Ops } }
39
+ firstSession:
40
+ title: Your live tasks
41
+ goal: "Add the 3 to 5 pieces of product work you or your agents are doing now, each with a status and a priority."
42
+ starters:
43
+ - "I am building a SaaS app with a small team"
44
+ - "I want my coding agents to pick up tasks from a board"
45
+ - "I am shipping a side project on weekends"
46
+ # What this space PRODUCES (homes): the purpose word, then its kinds/roles.
47
+ intent:
48
+ label: Product
49
+ produces:
50
+ - profile: devplane_feature
51
+ - profile: devplane_story
52
+ - profile: ui-design
25
53
 
26
54
  workspace:
27
- name: Builder
28
- description: "Developer + agent intelligence layer. Combines the DevPlane developer schema (apps, packages, services, environments, deployments, recipes, decisions, incidents) with the OpenClaw delegation primitives (project, task, skill, provider). Agents are pod-level identities — not tracked as workspace entities."
55
+ name: Dev
56
+ description: "Developer + agent intelligence layer. Combines the DevPlane developer schema (apps, packages, services, environments, deployments, recipes, decisions, incidents) with the agent delegation primitives (task, skill, provider). Agents are pod-level identities — not tracked as workspace entities."
29
57
  proposalId: builder-workspace-v1
30
58
  subtype: builder
31
59
  visibility: pod_visible
@@ -104,17 +132,38 @@ profiles:
104
132
  icon: git-branch
105
133
  color: blue
106
134
  description: A feature or work item with a persistent AI session
135
+ # The feature's ONE lifecycle (founder, 2026-10-13). The stored keys stay
136
+ # the ones live pods already hold; the labels carry the decided words.
137
+ # `agent_status` is the agent pipeline's runtime bookkeeping, not a lifecycle.
138
+ lifecycle:
139
+ property: featureStatus
140
+ options:
141
+ - { key: backlog, label: Idea, category: open }
142
+ - { key: spec, label: Spec, category: active }
143
+ - { key: in_progress, label: Building, category: active }
144
+ - { key: in_review, label: Review, category: active }
145
+ - { key: done, label: Shipped, category: done }
146
+ - { key: cancelled, label: Dropped, category: lost, humanOnly: true }
107
147
  properties:
108
148
  - slug: featureStatus
109
149
  label: Status
110
150
  valueType: string
111
151
  inputType: select
112
- enumValues: [backlog, in_progress, in_review, done, cancelled]
152
+ enumValues: [backlog, spec, in_progress, in_review, done, cancelled]
113
153
  - slug: priority
114
154
  label: Priority
115
155
  valueType: string
116
156
  inputType: select
117
157
  enumValues: [low, medium, high, critical]
158
+ # The work type of a feature (founder decision 2 A, 2026-10-26): a
159
+ # session's type is its subject's kind, and this one field splits the
160
+ # Feature kind. Bugs are `issue`, designs `ui-design`: never values here.
161
+ # No default: an unset value is "not typed yet", not "feature".
162
+ - slug: change
163
+ label: Change
164
+ valueType: string
165
+ inputType: select
166
+ enumValues: [feature, refactor, chore]
118
167
  - slug: linkedApp
119
168
  label: Linked App
120
169
  valueType: string
@@ -204,12 +253,23 @@ profiles:
204
253
  icon: book-marked
205
254
  color: violet
206
255
  description: A user-facing story that orchestrates features and drives the AI pipeline
256
+ # The story's ONE lifecycle (founder, 2026-10-13). Keys live pods hold are
257
+ # kept; `in-review` is not a story stage any more (its feature carries the
258
+ # review). `agent_status` is runtime bookkeeping, not a lifecycle.
259
+ lifecycle:
260
+ property: storyStatus
261
+ options:
262
+ - { key: backlog, label: Draft, category: open }
263
+ - { key: ready, label: Ready, category: active }
264
+ - { key: in-progress, label: In feature, category: active }
265
+ - { key: done, label: Done, category: done }
266
+ - { key: dropped, label: Dropped, category: lost, humanOnly: true }
207
267
  properties:
208
268
  - slug: storyStatus
209
269
  label: Status
210
270
  valueType: string
211
271
  inputType: select
212
- enumValues: [backlog, in-progress, in-review, done]
272
+ enumValues: [backlog, ready, in-progress, done, dropped]
213
273
  constraints: { defaultValue: backlog }
214
274
  - slug: priority
215
275
  label: Priority
@@ -917,60 +977,6 @@ profiles:
917
977
  valueType: date
918
978
  inputType: date
919
979
 
920
- - slug: project
921
- displayName: Project
922
- icon: folder
923
- color: "#2E6DA4"
924
- description: A bounded body of work delegated to one or more agents
925
- properties:
926
- - slug: project-status
927
- label: Status
928
- valueType: string
929
- inputType: select
930
- enumValues:
931
- [Backlog, Queued, In Progress, Blocked, Completed, Cancelled]
932
- - slug: project-priority
933
- label: Priority
934
- valueType: string
935
- inputType: select
936
- enumValues: [Critical, High, Medium, Low]
937
- - slug: project-owner
938
- label: Human Owner
939
- valueType: entity_id
940
- targetProfileSlug: person
941
- - slug: project-start
942
- label: Start Date
943
- valueType: date
944
- - slug: project-deadline
945
- label: Deadline
946
- valueType: date
947
- - slug: project-health
948
- label: Health
949
- valueType: string
950
- inputType: select
951
- enumValues: [Green, Yellow, Red]
952
- - slug: project-type
953
- label: Type
954
- valueType: string
955
- inputType: select
956
- enumValues:
957
- [
958
- Development,
959
- Research,
960
- Content,
961
- Automation,
962
- DevOps,
963
- Data,
964
- Outreach,
965
- Monitoring,
966
- ]
967
- - slug: project-goal
968
- label: Goal
969
- valueType: string
970
- - slug: project-outcome
971
- label: Expected Outcome
972
- valueType: string
973
-
974
980
  - slug: task
975
981
  displayName: Task
976
982
  icon: check-square
@@ -989,10 +995,6 @@ profiles:
989
995
  inputType: select
990
996
  enumValues: [Critical, High, Medium, Low]
991
997
  constraints: { defaultValue: Medium }
992
- - slug: task-project
993
- label: Project
994
- valueType: entity_id
995
- targetProfileSlug: project
996
998
  - slug: task-type
997
999
  label: Type
998
1000
  valueType: string
@@ -1291,6 +1293,117 @@ profiles:
1291
1293
  valueType: string
1292
1294
  inputType: text
1293
1295
 
1296
+ # A screen designed from REAL components (DESIGN-DEV-XP-PLAN P6). The design
1297
+ # is Puck JSON whose every `type` is a component the Storybook manifest
1298
+ # (`/manifests/components.json`) lists — never an invented one. The pod is
1299
+ # where the design lives; the canvas edits it; a coding agent implements it.
1300
+ # Skill: designing-with-real-components (+ design-critique for the rubric).
1301
+ # Process: "Design to implementation". A request yields 3 VARIANTS: sibling
1302
+ # ui-designs sharing one `variant-group`. References (the founder's own
1303
+ # captures, files) are linked with the base `references` relation — never a
1304
+ # property.
1305
+ - slug: ui-design
1306
+ displayName: UI Design
1307
+ icon: layout-template
1308
+ color: violet
1309
+ description: A screen designed from the real component library — Puck JSON a person reviews on the canvas and a coding agent implements.
1310
+ # The ONE lifecycle (work model L1). `approved` (the design review) and
1311
+ # `archived` are a person's call only.
1312
+ lifecycle:
1313
+ property: design-status
1314
+ options:
1315
+ - { key: draft, category: open }
1316
+ - { key: in-review, category: active }
1317
+ - { key: approved, category: active, humanOnly: true }
1318
+ - { key: implementing, category: active }
1319
+ - { key: implemented, category: done }
1320
+ - { key: archived, category: lost, humanOnly: true }
1321
+ # How it renders (entity rendering, decision 8): @synap-core/types/presentation.
1322
+ presentation:
1323
+ family: media
1324
+ media:
1325
+ source: { entityRef: screenshot }
1326
+ kind: image
1327
+ properties:
1328
+ - slug: design-status
1329
+ label: Status
1330
+ valueType: string
1331
+ inputType: select
1332
+ enumValues: [draft, in-review, approved, implementing, implemented, archived]
1333
+ constraints: { defaultValue: draft }
1334
+ - slug: target-surface
1335
+ label: Target surface
1336
+ valueType: string
1337
+ inputType: text
1338
+ placeholder: "The app and screen it is for, e.g. browser › Settings › Agents"
1339
+ - slug: design-scope
1340
+ label: Scope
1341
+ description: One component, or a whole page.
1342
+ valueType: string
1343
+ inputType: select
1344
+ enumValues: [component, page]
1345
+ constraints: { defaultValue: page }
1346
+ - slug: design-goal
1347
+ label: Goal
1348
+ description: The job the screen does for its reader, in one or two sentences — what the critique judges it against.
1349
+ valueType: string
1350
+ inputType: textarea
1351
+ - slug: variant-group
1352
+ label: Variant group
1353
+ description: One id shared by the sibling variants of one design request, so they are compared side by side.
1354
+ valueType: string
1355
+ inputType: text
1356
+ - slug: current-story-id
1357
+ label: Current story
1358
+ description: The Storybook story id of the screen as it is today, when it exists — the "before" of the compare.
1359
+ valueType: string
1360
+ inputType: text
1361
+ - slug: design-json
1362
+ label: Design (Puck JSON)
1363
+ description: "Puck data: content[] of { type, props: { id, … } }, root.props, zones. Every type is a component in the Storybook manifest."
1364
+ valueType: json
1365
+ inputType: json
1366
+ - slug: components-used
1367
+ label: Components used
1368
+ description: The component names the design JSON uses — filled from the JSON, never by hand.
1369
+ valueType: array
1370
+ inputType: text
1371
+ - slug: schema-version
1372
+ label: Schema version
1373
+ description: Version of the design JSON shape, for migrations.
1374
+ valueType: number
1375
+ inputType: number
1376
+ constraints: { defaultValue: 1 }
1377
+ - slug: screenshot
1378
+ label: Screenshot
1379
+ valueType: entity_id
1380
+ targetProfileSlug: file
1381
+ inputType: entity_select
1382
+ description: A render of the design, for review at a glance.
1383
+ - slug: motion
1384
+ label: Motion
1385
+ description: "The design's motion: a list of { trigger, target, preset } where preset is a named motion preset of the design tokens (each carries its reduced-motion fallback)."
1386
+ valueType: json
1387
+ inputType: json
1388
+ - slug: critique
1389
+ label: Critique
1390
+ description: "The latest critique findings (skill design-critique): a list of { id, tier, rule, severity, confidence, region, evidence, suggestion?, verdict? }."
1391
+ valueType: json
1392
+ inputType: json
1393
+ - slug: implementation-pr
1394
+ label: Implementation PR
1395
+ valueType: string
1396
+ inputType: url
1397
+ - slug: implemented-story-id
1398
+ label: Implemented story
1399
+ description: The Storybook story id of the built screen — the "after" of the compare.
1400
+ valueType: string
1401
+ inputType: text
1402
+ - slug: design-notes
1403
+ label: Notes
1404
+ valueType: string
1405
+ inputType: textarea
1406
+
1294
1407
  views:
1295
1408
  - name: Apps
1296
1409
  type: table
@@ -1298,6 +1411,7 @@ views:
1298
1411
  config:
1299
1412
  columns: [title, appStatus, techStack, port, deployUrl]
1300
1413
  - name: Task Board
1414
+ slug: task-board
1301
1415
  type: kanban
1302
1416
  scopeProfileSlug: task
1303
1417
  groupBy: task-status
@@ -1321,11 +1435,41 @@ views:
1321
1435
  scopeProfileSlug: devplane_incident
1322
1436
  config:
1323
1437
  columns: [title, severity, incidentStatus, affectedApps, resolvedAt]
1324
- - name: Projects
1438
+ # ── Folded from the retired dev-dashboard template (R7, 2026-09-27) ───────
1439
+ # Rebuilt over THIS template's own kinds (devplane_service /
1440
+ # devplane_deployment / provider). Never port dev-dashboard's `credential`
1441
+ # kind (secrets are not entities), its `vendor`/`repository` twins, or its
1442
+ # dev-* widgets (no implementation ever existed).
1443
+ - name: Service Health
1444
+ slug: service-health
1445
+ type: kanban
1446
+ scopeProfileSlug: devplane_service
1447
+ groupBy: serviceStatus
1448
+ description: Every service by health — healthy, degraded, down, maintenance.
1449
+ - name: Services by Type
1450
+ slug: services-by-type
1325
1451
  type: kanban
1326
- scopeProfileSlug: project
1327
- groupBy: project-status
1328
- description: Delegated projects by status.
1452
+ scopeProfileSlug: devplane_service
1453
+ groupBy: serviceType
1454
+ description: Services grouped by what they are — API, worker, cron, database, cache, queue.
1455
+ - name: Deploy Timeline
1456
+ slug: deploy-timeline
1457
+ type: table
1458
+ scopeProfileSlug: devplane_deployment
1459
+ sortBy: deployedAt
1460
+ sortOrder: desc
1461
+ config:
1462
+ columns: [title, deployStatus, version, linkedApp, linkedEnvironment, deployedBy, deployedAt]
1463
+ description: Most recent deployments first — what shipped, where, and whether it held.
1464
+ - name: Provider Costs
1465
+ slug: provider-costs
1466
+ type: table
1467
+ scopeProfileSlug: provider
1468
+ sortBy: provider-spend-week
1469
+ sortOrder: desc
1470
+ config:
1471
+ columns: [title, provider-type, provider-spend-week, provider-budget-day, provider-cost-input, provider-cost-output, provider-key-health]
1472
+ description: What each provider costs — this week's spend against the daily ceiling, highest first.
1329
1473
  # ── Architecture graph (ReactFlow) ───────────────────────────────────────
1330
1474
  # These views are MULTI-PROFILE on purpose: a flow that only loaded one
1331
1475
  # profile would have nodes but no edges (its relations point at OTHER types).
@@ -1401,6 +1545,547 @@ playbooks:
1401
1545
  executor: is-agent
1402
1546
  status: active
1403
1547
 
1548
+ # THE PROCESS on `ui-design` (DESIGN-DEV-XP-PLAN P6). It FOLLOWS the
1549
+ # lifecycle the profile declares (`design-status`); it never keeps a second
1550
+ # status. `approved` is humanOnly: a person sets it on the canvas, so no
1551
+ # stage owns it. Generate writes 3 sibling VARIANTS (one variant-group);
1552
+ # Critique (no status, like Verify) judges them against the design-critique
1553
+ # rubric and a blocker loops to Generate. The Review gate is the commitment:
1554
+ # nothing is implemented from a design a person has not approved; a
1555
+ # rejection loops to Generate. Verify's check gate and Done's human gate both
1556
+ # send rework to Implement.
1557
+ # The worker is MANUAL: Generate creates the sibling variants as ui-designs,
1558
+ # and an `on: created` worker would propose a run for each of them (the
1559
+ # activator grammar has no filter to tell a request from a variant).
1560
+ - name: Design to implementation
1561
+ description: Take a UI design request from three variants built only of real Storybook components, through a rubric critique and a person's review on the canvas, to a pull request verified by the gates, a before/after compare and a walk in the running app.
1562
+ goalTemplate: >-
1563
+ Take this UI design ({design}) for {surface} from draft to implemented.
1564
+ Load the designing-with-real-components skill first, and design-critique
1565
+ for the Critique stage. GENERATE: read the Storybook component manifest
1566
+ (/manifests/components.json, or the Storybook MCP), the design's goal and
1567
+ scope and the entities it references, and write THREE variants as Puck
1568
+ JSON — this design and two sibling ui-designs sharing its variant-group —
1569
+ using ONLY components the manifest lists, with props each one declares,
1570
+ design tokens and named motion presets only; each variant lays out every
1571
+ state the screen has (empty, loading, failed, full, long content); fill
1572
+ components-used from the JSON and set schema-version. CRITIQUE: judge each
1573
+ variant with the design-critique rubric and write the findings into its
1574
+ critique; a checked or pattern blocker sends the run back to Generate;
1575
+ opinions are never applied. REVIEW: a person compares the variants on the
1576
+ canvas and approves one; nothing is implemented from an unapproved design,
1577
+ and only a person sets approved. IMPLEMENT: read design-json and the
1578
+ Storybook MCP, build the screen from those same real components, open a
1579
+ pull request and record its URL in implementation-pr and the built
1580
+ screen's story in implemented-story-id. VERIFY: typecheck, story coverage,
1581
+ interaction and accessibility tests, visual regression and the token
1582
+ guards are green, the implemented story was captured and compared with
1583
+ the design and the current story, and the screen was walked in the
1584
+ running app. Move the design's status only through its lifecycle
1585
+ (update_entity with expectedStatus); never invent a status.
1586
+ subjectProfile:
1587
+ profileSlug: ui-design
1588
+ statusProperty: design-status
1589
+ # No stage owns these: `approved` and `archived` are a person's call
1590
+ # (humanOnly on the lifecycle).
1591
+ humanOnlyStatuses: [approved, archived]
1592
+ activators:
1593
+ - { on: manual, mode: propose }
1594
+ params:
1595
+ - { name: design, type: entity, label: UI design, required: true }
1596
+ - { name: surface, type: text, label: Target surface }
1597
+ executor: is-agent
1598
+ status: active
1599
+ stages:
1600
+ - key: generate
1601
+ name: Generate
1602
+ category: planned
1603
+ subjectStatus: draft
1604
+ goal: Write three variants as Puck JSON — this design and two siblings in its variant-group — from components the Storybook manifest lists, with their declared props, tokens and named motion presets only, each with every state the screen has.
1605
+ expectedOutputs:
1606
+ - kind: ui-design
1607
+ label: Sibling variants (same variant-group)
1608
+ relationToSubject: relates_to
1609
+ criteria:
1610
+ - key: design-json-written
1611
+ statement: The design's Puck JSON is saved on the design.
1612
+ check: { kind: evidence, evidenceKey: design-json }
1613
+ - key: design-variants-grouped
1614
+ statement: Three variants exist — this design and two sibling ui-designs in the same variant-group — each with its own design JSON laying out every state the screen has among empty, loading, failed, full and long content.
1615
+ check: { kind: judge }
1616
+ - key: design-real-components-only
1617
+ statement: Every component type in each variant's design JSON is in the Storybook manifest and uses only props it declares, and components-used lists exactly those types.
1618
+ check: { kind: judge }
1619
+ - key: critique
1620
+ name: Critique
1621
+ category: started
1622
+ goal: Judge every variant with the design-critique rubric and write its findings into the variant's critique; a checked or pattern blocker sends the run back to Generate.
1623
+ gate: { kind: check }
1624
+ onFail: { toStage: generate }
1625
+ expectedOutputs:
1626
+ - kind: document
1627
+ label: Design critique (findings by variant, tier and rule id)
1628
+ relationToSubject: relates_to
1629
+ criteria:
1630
+ - key: critique-written
1631
+ statement: Each variant's critique holds its findings, each with a rule id of the design-critique rubric, a tier, a severity and a region.
1632
+ check: { kind: evidence, evidenceKey: critique }
1633
+ - key: critique-no-open-blocker
1634
+ statement: No checked or pattern finding of severity blocker is left open on the variants going to review.
1635
+ check: { kind: judge }
1636
+ - key: critique-opinions-not-applied
1637
+ statement: Every opinion finding names a heuristic id and a region, has low confidence, and was not applied to the design.
1638
+ check: { kind: judge }
1639
+ - key: review
1640
+ name: Review
1641
+ category: started
1642
+ subjectStatus: in-review
1643
+ goal: A person compares the variants and their critiques on the canvas and approves one, or sends the design back with what to change. A sibling chosen over this design is written into it first, so the run carries the chosen variant.
1644
+ # The commitment: implementation starts only from an approved design.
1645
+ gate: { kind: human }
1646
+ onFail: { toStage: generate }
1647
+ - key: implement
1648
+ name: Implement
1649
+ category: started
1650
+ subjectStatus: implementing
1651
+ goal: Build the screen from the approved design JSON with the real components, open a pull request and record it and the built screen's story on the design.
1652
+ criteria:
1653
+ - key: implementation-pr-linked
1654
+ statement: The pull request URL is recorded in implementation-pr.
1655
+ check: { kind: evidence, evidenceKey: implementation-pr }
1656
+ - key: implemented-story-linked
1657
+ statement: The Storybook story id of the built screen is recorded in implemented-story-id.
1658
+ check: { kind: evidence, evidenceKey: implemented-story-id }
1659
+ - key: implementation-matches-design
1660
+ statement: The screen uses the components and structure the design JSON names, with no invented component and no hardcoded colour.
1661
+ check: { kind: judge }
1662
+ - key: verify
1663
+ name: Verify
1664
+ category: started
1665
+ goal: Run the gates, capture the implemented story and compare it with the design (and the current story when there is one), and walk the screen in the running app; write what passed and what failed.
1666
+ gate: { kind: check }
1667
+ onFail: { toStage: implement }
1668
+ expectedOutputs:
1669
+ - kind: document
1670
+ label: Verification report (gates, compare and dogfood walk)
1671
+ relationToSubject: relates_to
1672
+ criteria:
1673
+ - key: verify-gates-green
1674
+ statement: Typecheck, story coverage, interaction, accessibility, visual regression and the token guards are green on the pull request.
1675
+ check: { kind: judge }
1676
+ - key: verify-compare
1677
+ statement: The implemented story was captured and compared with the design, and the report names every difference.
1678
+ check: { kind: judge }
1679
+ - key: verify-dogfood-walk
1680
+ statement: The screen was walked in the running app and the report carries what was seen.
1681
+ check: { kind: judge }
1682
+ - key: done
1683
+ name: Done
1684
+ category: completed
1685
+ subjectStatus: implemented
1686
+ goal: A person confirms the pull request merged and the screen matches the approved design; approving writes implemented.
1687
+ # A HUMAN gate (as Content OS Publish): a check gate judges the stage
1688
+ # being LEFT, so it would write implemented before anyone saw the merge.
1689
+ gate: { kind: human }
1690
+ onFail: { toStage: implement }
1691
+
1692
+ # THE APP FACTORY (2026-10-21): "let's build app X" → a designed, verified,
1693
+ # built app, the person asked at THREE gates only (decisions, design
1694
+ # approval, first look after slice 1). Generalises the Content Studio run of
1695
+ # 2026-10-20 (plan doc 6f728471); the method lives in four skills
1696
+ # (app-factory-research, -design-canvas, -design-review, -build-slice) and
1697
+ # the Website Factory's design-kit/.
1698
+ #
1699
+ # SUBJECT: the app (`devplane_app`), READ, not moved. That kind declares no
1700
+ # `lifecycle:` block, and the catalog's rule is that a kind a playbook moves
1701
+ # declares the moved property as its lifecycle (lifecycle-declarations
1702
+ # test). Its select `appStatus` (planning · active · deprecated · archived)
1703
+ # is therefore left to the person, and no stage carries a subjectStatus.
1704
+ # Consequence: a per-stage worker (`enters_status`) has nothing to fire on,
1705
+ # so the one worker is MANUAL. Making the factory's phases visible on the
1706
+ # Apps board, and giving each stage its own worker, needs a declared
1707
+ # lifecycle on devplane_app with an option per phase — a kind change for
1708
+ # the founder to decide, not invented here.
1709
+ - name: Build an app (App Factory)
1710
+ description: Turn "let's build app X" into a researched, designed, reviewed and verified app, built from the Website Factory in slices. The person is asked only three times — the decisions, the design approval, and a first look after slice 1.
1711
+ goalTemplate: >-
1712
+ Build the app "{name}": {idea}. Path: {path}. Work it as the App
1713
+ Factory, loading each stage's skill with synap_load_skill. INTAKE: find
1714
+ or create the app (resolve first; one devplane_app, never a twin), make
1715
+ it this session's subject, and record the idea in the person's words.
1716
+ RESEARCH (app-factory-research): name-collision check, a data contract
1717
+ per screen with live examples and counts, an identity and permission
1718
+ table (who writes, who approves, can the app's credential do it, with
1719
+ evidence), every platform gap with an id and an owner, and the real
1720
+ sample world; write the plan document. DECISIONS: ask the person 2-4
1721
+ multiple-choice questions in ONE ask, each with a recommended default;
1722
+ nothing is designed before they answer. DESIGN (app-factory-design-canvas):
1723
+ create the app repo from the Website Factory, draw every page and every
1724
+ state, desktop and phone, with its design-kit in the real components and
1725
+ the person's real data, and publish the canvas. REVIEW
1726
+ (app-factory-design-review): run the three read-only lenses in parallel —
1727
+ UX surface, component fidelity + contrast + responsive, data contract per
1728
+ element. CONSOLIDATE: one writer merges them into a redesign brief,
1729
+ applies it, and re-runs design:check and design:preview. DESIGN APPROVAL:
1730
+ the person approves the canvas; nothing is built from boards they have
1731
+ not approved. INFRA: open the platform, catalog and factory pull
1732
+ requests the slices need, each gap with its owner, or label a bridge in
1733
+ the UI and the code. BUILD (app-factory-build-slice): slice by slice,
1734
+ server-only credentials, no writes until the person can sign in, the
1735
+ Website Factory gates re-run independently on the devbox; after slice 1
1736
+ STOP for the person's first look. DOGFOOD: walk the app as the person
1737
+ would and collect their verdict. Branches and pull requests only: never
1738
+ push to main, never publish the catalog, never deploy production.
1739
+ Separate VERIFIED (gate output quoted) from NEEDS-DOGFOOD in every
1740
+ report.
1741
+ subjectProfile:
1742
+ profileSlug: devplane_app
1743
+ activators:
1744
+ - { on: manual, mode: propose }
1745
+ params:
1746
+ - { name: name, type: text, label: App name, required: true }
1747
+ - { name: idea, type: text, label: "What should it do, for whom, and what is hard today (in your words)?", required: true }
1748
+ - name: path
1749
+ type: choice
1750
+ label: "Who uses it: the owner over their own pod (private) · visitors with their own pod (pod-app) · the public, showing one pod's published data (showcase) · the public, no pod data (static)"
1751
+ default: private
1752
+ options: [private, pod-app, showcase, static]
1753
+ - { name: app, type: entity, label: The app, if it already exists }
1754
+ executor: is-agent
1755
+ status: active
1756
+ criteria:
1757
+ - key: three-gates-only
1758
+ statement: The person was asked only at the three gates (decisions, design approval, first look), each time in one message with a recommended default.
1759
+ check: { kind: judge }
1760
+ - key: real-sample-world
1761
+ statement: Every board and every built page shows the person's real data; no words are attributed to the person that they did not write.
1762
+ check: { kind: judge }
1763
+ - key: gates-independently-verified
1764
+ statement: Every gate claimed in a report (design:check, design:preview, pnpm verify, pnpm shots, the credential and mutation greps) was re-run by the orchestrator and its output quoted.
1765
+ check: { kind: judge }
1766
+ stages:
1767
+ - key: intake
1768
+ name: Intake
1769
+ category: planned
1770
+ goal: Find or create the app (resolve first), make it the session's subject, and write the idea, the problem, the goal and the measure of success in the person's words.
1771
+ criteria:
1772
+ - key: intake-subject-set
1773
+ statement: The session's subject is the app (one devplane_app, found before created).
1774
+ check: { kind: judge }
1775
+ - key: intake-own-words
1776
+ statement: The problem and the goal are quoted in the person's words, with what is not in v1.
1777
+ check: { kind: judge }
1778
+ - key: research
1779
+ name: Research
1780
+ category: planned
1781
+ goal: Name-collision check, data contract per screen with live counts, identity and permission table, platform gaps with owners, the real sample world, and the plan document (app-factory-research).
1782
+ expectedOutputs:
1783
+ - kind: document
1784
+ label: Plan (problem, decisions, facts verified, pages, slices, gaps register)
1785
+ relationToSubject: relates_to
1786
+ - kind: document
1787
+ label: Data contract per screen and identity table
1788
+ relationToSubject: relates_to
1789
+ criteria:
1790
+ - key: research-contract-live
1791
+ statement: Every screen has data-contract rows with a live example and count, and every action has an identity row with evidence (a live call or file:line).
1792
+ check: { kind: judge }
1793
+ - key: research-gaps-owned
1794
+ statement: Every platform gap has an id, an owner and the slice it blocks.
1795
+ check: { kind: judge }
1796
+ - key: decisions
1797
+ name: Decisions
1798
+ category: planned
1799
+ goal: Ask the person 2-4 multiple-choice questions in one ask, each with a recommended default and its cost; record each answer as a decision on the app.
1800
+ # Gate 1 of 3: nothing is designed before the person answers.
1801
+ gate: { kind: human }
1802
+ onFail: { toStage: research }
1803
+ expectedOutputs:
1804
+ - kind: devplane_decision_record
1805
+ label: One decision per answered question
1806
+ relationToSubject: relates_to
1807
+ - key: design
1808
+ name: Design
1809
+ category: started
1810
+ goal: Create the app repo from the Website Factory and draw every page and every state, desktop and phone, with its design-kit in the real components and the person's real data; publish the canvas (app-factory-design-canvas).
1811
+ expectedOutputs:
1812
+ - kind: document
1813
+ label: Design canvas (link) and board list
1814
+ relationToSubject: relates_to
1815
+ criteria:
1816
+ - key: design-check-clean
1817
+ statement: pnpm design:check reports 0 problems and pnpm design:preview reports no overflow and no serious or critical axe issue, both quoted.
1818
+ check: { kind: evidence, evidenceKey: design-check }
1819
+ - key: design-every-state
1820
+ statement: Every page in the plan has its desktop board, its states and, when used on a phone, its phone board.
1821
+ check: { kind: judge }
1822
+ - key: review
1823
+ name: Review
1824
+ category: started
1825
+ goal: Run the three read-only lenses in parallel — UX surface and consolidation; component fidelity, contrast and responsive; data contract per element (app-factory-design-review).
1826
+ expectedOutputs:
1827
+ - kind: document
1828
+ label: Review findings (three lenses, by severity, with evidence)
1829
+ relationToSubject: relates_to
1830
+ - key: consolidate
1831
+ name: Consolidate
1832
+ category: started
1833
+ goal: One writer merges the findings into a redesign brief (must-fix, boards to add, the person's questions with defaults, fidelity, real data), applies it, rebuilds and re-checks.
1834
+ expectedOutputs:
1835
+ - kind: document
1836
+ label: Redesign brief
1837
+ relationToSubject: relates_to
1838
+ criteria:
1839
+ - key: consolidate-nothing-dropped
1840
+ statement: Every lens finding is applied, kept with a reason, asked as a question, or registered as a gap.
1841
+ check: { kind: judge }
1842
+ - key: design-approval
1843
+ name: Design approval
1844
+ category: started
1845
+ goal: The person approves the canvas (and answers the brief's questions in one message), or sends it back with what to change.
1846
+ # Gate 2 of 3: nothing is built from boards the person has not approved.
1847
+ gate: { kind: human }
1848
+ onFail: { toStage: consolidate }
1849
+ - key: infra
1850
+ name: Infra
1851
+ category: started
1852
+ goal: Open the platform, catalog and factory pull requests the slices need, each gap with its owner; where a gap stays open, label the bridge in the UI and the code.
1853
+ expectedOutputs:
1854
+ - kind: document
1855
+ label: Infra pull requests and the gaps they close (links, owners)
1856
+ relationToSubject: relates_to
1857
+ - key: first-slice
1858
+ name: Slice 1 and first look
1859
+ category: started
1860
+ goal: Build slice 1 from its approved boards (app-factory-build-slice), re-run every gate independently on the devbox, report VERIFIED and NEEDS-DOGFOOD, then stop for the person's first look.
1861
+ # Gate 3 of 3: the person's first look decides the next slices.
1862
+ gate: { kind: human }
1863
+ onFail: { toStage: first-slice }
1864
+ expectedOutputs:
1865
+ - kind: document
1866
+ label: Slice 1 report (pull request, quoted gates, differences from the boards)
1867
+ relationToSubject: relates_to
1868
+ - kind: devplane_deployment
1869
+ label: Preview deployment
1870
+ relationToSubject: relates_to
1871
+ optional: true
1872
+ criteria:
1873
+ - key: slice1-gates-quoted
1874
+ statement: pnpm verify, the screenshots, and the credential and mutation greps were re-run by the orchestrator and quoted.
1875
+ check: { kind: evidence, evidenceKey: verify-output }
1876
+ - key: slice1-pr-open
1877
+ statement: Slice 1 is a pull request on the app repo; nothing was pushed to main or deployed to production.
1878
+ check: { kind: judge }
1879
+ - key: slices
1880
+ name: Next slices
1881
+ category: started
1882
+ goal: Build the remaining slices in plan order, each with the same gates, independent verification and report.
1883
+ expectedOutputs:
1884
+ - kind: document
1885
+ label: Slice reports
1886
+ relationToSubject: relates_to
1887
+ - key: dogfood
1888
+ name: Dogfood
1889
+ category: completed
1890
+ goal: Walk the built app as the person would (every door, every state reachable), collect their verdict after real use, and report VERIFIED and NEEDS-DOGFOOD; the person sets the app's status (active) themselves.
1891
+ expectedOutputs:
1892
+ - kind: document
1893
+ label: Dogfood report and the person's verdict
1894
+ relationToSubject: relates_to
1895
+
1896
+ # THE DEV LOOP AS STORED CONFIG (plan v5 T2, 2026-10-27). One change = one
1897
+ # session on its feature: shaped → building → PR opened → checks green →
1898
+ # merged → deployed to lab → dogfooded → criteria verified. It FOLLOWS the
1899
+ # feature's declared lifecycle (`featureStatus`, named as statusProperty, no
1900
+ # second status): Shape writes spec, Build in_progress, PR opened in_review,
1901
+ # Verify done (an agent's move into done proposes). The stages after PR
1902
+ # opened carry no status — the feature stays In review until it ships.
1903
+ #
1904
+ # ONE human gate, at the one commitment: the lab deploy stays the person's
1905
+ # (plan v5 decision F: a merge needs no proposal of its own; the PR outcome
1906
+ # and this step carry it). Red checks send the work back to Build (onFail).
1907
+ #
1908
+ # The facts move it, not the agent's word: the staged automations
1909
+ # `ship-a-change-*` (automations/, plan v5 T2 verbs) post the evidence the
1910
+ # criteria below read when GitHub or the pod says the PR opened, CI finished,
1911
+ # the PR merged or the pod deployed. The `github-read` capability lets the
1912
+ # worker read the same facts on the person's own token.
1913
+ #
1914
+ # WORKER: a feature entering Spec proposes a run (the person approves who
1915
+ # works it; a goal hands it to its agent delegate). Throttled to 5 waiting.
1916
+ - name: Ship a change
1917
+ description: Take a shaped change from branch to pull request, green checks, merge, lab and a dogfood walk, until its criteria are verified. The facts (PR opened, CI finished, merged, deployed) move the step; the person approves only the lab deploy.
1918
+ goalTemplate: >-
1919
+ Ship this change ({feature}) through one session, one branch and its pull
1920
+ requests, then the merge, the lab and a dogfood walk, until its criteria
1921
+ are verified. The step follows the work; move the feature's status only
1922
+ through its lifecycle (update_entity with expectedStatus), never invent
1923
+ one. SHAPE: write the end state and 2-5 binary criteria on this session,
1924
+ set the feature's change type (feature, refactor or chore), and name the
1925
+ repos it touches. BUILD: branch <type>/<slug> from origin/main in your own
1926
+ worktree, commit in verified slices, and run the smallest gate that
1927
+ answers for each finished slice, with its negative control; quote the
1928
+ output. PR OPENED: open a draft pull request whose body carries the line
1929
+ "Pod session: <this session id>", and record it on this session as the
1930
+ outcome pr-<repo>-<number> (kind pull_request, ref url); one outcome per
1931
+ pull request, and for each a session criterion keyed the same,
1932
+ "<repo>#<number> is merged", checked by the capability
1933
+ github_check_pr_merged, so the pod grades the merge itself. CHECKS: read the checks on the pull request's head with
1934
+ github_pr_checks (the github-read capability, on the person's own token)
1935
+ or wait for the ci.finished event; a red check sends the work back to
1936
+ Build. MERGE: a person merges; never merge and never push to main. The
1937
+ merge marks the outcome met. DEPLOY: ask the person for the lab deploy
1938
+ (synap_request_deploy_approval); the deploy is their call. DOGFOOD: walk
1939
+ the change in the running lab as a person would and report WORKS, BROKEN
1940
+ or CANNOT-TELL with what was seen. VERIFY: grade every criterion with its
1941
+ evidence, and separate VERIFIED (gate or check output quoted) from
1942
+ NEEDS-DOGFOOD.
1943
+ subjectProfile:
1944
+ profileSlug: devplane_feature
1945
+ statusProperty: featureStatus
1946
+ # No stage owns these: Idea is before the change is shaped, Dropped is a
1947
+ # person's call (humanOnly on the lifecycle).
1948
+ humanOnlyStatuses: [backlog, cancelled]
1949
+ activators:
1950
+ - { on: enters_status, status: spec, mode: propose, maxPendingApprovals: 5 }
1951
+ - { on: manual, mode: propose }
1952
+ params:
1953
+ - { name: feature, type: entity, label: Feature, required: true }
1954
+ executor: is-agent
1955
+ status: active
1956
+ stages:
1957
+ - key: shape
1958
+ name: Shaped
1959
+ category: planned
1960
+ subjectStatus: spec
1961
+ goal: Write the end state and 2-5 binary criteria on the session, set the feature's change type, and name the repos the change touches.
1962
+ criteria:
1963
+ - key: shape-criteria-written
1964
+ statement: The session states the end state and 2-5 binary criteria a check, a judge or a person can grade.
1965
+ check: { kind: judge }
1966
+ - key: shape-change-typed
1967
+ statement: The feature's change type is set (feature, refactor or chore) and the repos it touches are named.
1968
+ check: { kind: judge }
1969
+ - key: build
1970
+ name: Building
1971
+ category: started
1972
+ subjectStatus: in_progress
1973
+ goal: Build on a branch named after the work, from origin/main in your own worktree; commit in verified slices and run the smallest gate that answers for each finished slice, with its negative control.
1974
+ criteria:
1975
+ - key: build-gates-quoted
1976
+ statement: Each finished slice was gated once (the smallest gate that answers) and its output is quoted in the room, red lines attributed against main.
1977
+ check: { kind: judge }
1978
+ - key: build-negative-control
1979
+ statement: Every new test was run with its fix reverted and failed.
1980
+ check: { kind: judge }
1981
+ - key: pr-opened
1982
+ name: PR opened
1983
+ category: started
1984
+ subjectStatus: in_review
1985
+ goal: 'Open a draft pull request whose body carries the line "Pod session: <this session id>" and record it as the outcome pr-<repo>-<number> with its url.'
1986
+ expectedOutputs:
1987
+ - kind: pull_request
1988
+ label: Pull request (outcome pr-<repo>-<number>, ref = its url)
1989
+ relationToSubject: none
1990
+ criteria:
1991
+ - key: pr-opened
1992
+ statement: A pull request for this change is open and recorded on the session as a pr-<repo>-<number> outcome with its url.
1993
+ check: { kind: evidence, evidenceKey: pr-opened }
1994
+ - key: pr-names-session
1995
+ statement: The pull request body carries the line naming this Pod session.
1996
+ check: { kind: judge }
1997
+ - key: checks
1998
+ name: Checks green
1999
+ category: started
2000
+ goal: Read the checks on the pull request's head (github_pr_checks, or the ci.finished event); fix anything red in Build.
2001
+ gate: { kind: check }
2002
+ onFail: { toStage: build }
2003
+ criteria:
2004
+ - key: checks-green
2005
+ statement: Every required check on the pull request's head finished green.
2006
+ check:
2007
+ kind: evidence
2008
+ evidenceKey: checks-green
2009
+ hint: Posted by the ci.finished automation, or by the worker after github_pr_checks on the head sha (passed only when every run concluded success, neutral or skipped).
2010
+ - key: merge
2011
+ name: Merged
2012
+ category: started
2013
+ goal: A person merges the pull request; the merge marks the pr-<repo>-<number> outcome met and its criterion of the same key (github_check_pr_merged) grades it on GitHub's own answer. Never merge and never push to main.
2014
+ criteria:
2015
+ - key: merged
2016
+ statement: The pull request is merged.
2017
+ check:
2018
+ kind: evidence
2019
+ evidenceKey: merged
2020
+ hint: Posted by the dev.pr_merged automation, or by the worker after github_pr_get (merged true).
2021
+ - key: deploy
2022
+ name: Deployed to lab
2023
+ category: started
2024
+ goal: Ask the person to deploy the merged build to lab (synap_request_deploy_approval) and record the deployed sha.
2025
+ # The ONE commitment: a deploy is the person's call.
2026
+ gate: { kind: human }
2027
+ onFail: { toStage: build }
2028
+ criteria:
2029
+ - key: deployed
2030
+ statement: The lab runs a build that contains the merge commit.
2031
+ check:
2032
+ kind: evidence
2033
+ evidenceKey: deployed
2034
+ hint: The deployed sha contains the merge commit (github_compare base merge commit, head deployed sha, status identical or ahead).
2035
+ - key: dogfood
2036
+ name: Dogfooded
2037
+ category: started
2038
+ goal: Walk the change in the running lab as a person would, entering through the doors a person enters through, and report WORKS, BROKEN or CANNOT-TELL with what was seen.
2039
+ gate: { kind: check }
2040
+ onFail: { toStage: build }
2041
+ expectedOutputs:
2042
+ - kind: document
2043
+ label: Dogfood report (each path WORKS, BROKEN or CANNOT-TELL, with what was seen)
2044
+ relationToSubject: relates_to
2045
+ criteria:
2046
+ - key: dogfooded
2047
+ statement: The dogfood walk reports WORKS on every path the change touches.
2048
+ check: { kind: evidence, evidenceKey: dogfooded }
2049
+ - key: verify
2050
+ name: Criteria verified
2051
+ category: completed
2052
+ subjectStatus: done
2053
+ goal: Grade every criterion of the session with its evidence, separating VERIFIED (gate or check output quoted) from NEEDS-DOGFOOD; the feature reads Shipped once a person accepts it.
2054
+ criteria:
2055
+ - key: criteria-verified
2056
+ statement: Every criterion of the session is graded with its evidence, and nothing unverified is reported as verified.
2057
+ check: { kind: judge }
2058
+
2059
+ # The dogfood run a deploy starts (staged automation
2060
+ # `ship-a-change-deployed`), handed to the devbox worker. A RUN of its own,
2061
+ # not a stage, so another agent walks what the builder built. No subject
2062
+ # (so no activator: the automation or a person starts it):
2063
+ # one deploy carries every change merged since the last one, so the run
2064
+ # finds the Ship a change sessions waiting at Dogfooded and grades each.
2065
+ - name: Dogfood a change
2066
+ description: Walk a deployed change in the running app as a person would and report WORKS, BROKEN or CANNOT-TELL, then grade the dogfood of each Ship a change session it covers.
2067
+ goalTemplate: >-
2068
+ Dogfood {change} in the running app ({where}) as a person would. Load the
2069
+ dogfood skill. Enter through the doors a person enters through, reach
2070
+ every state the change touches, and report each path WORKS, BROKEN or
2071
+ CANNOT-TELL with a screenshot or the output seen. For each Ship a change
2072
+ session this covers (in the same goal, waiting at Dogfooded), post the
2073
+ evidence dogfooded on it (passed only when every path WORKS, with the
2074
+ report as its detail). Never fix anything here: a BROKEN path becomes a
2075
+ finding on the feature, and its session goes back to Building.
2076
+ params:
2077
+ - { name: change, type: text, label: "What to dogfood (a pull request, a sha, a feature)" }
2078
+ - { name: where, type: text, label: "Where it runs (the lab host)", default: lab }
2079
+ executor: is-agent
2080
+ status: active
2081
+ criteria:
2082
+ - key: dogfood-walked
2083
+ statement: Every path the change touches was walked in the running app and reported WORKS, BROKEN or CANNOT-TELL with what was seen.
2084
+ check: { kind: judge }
2085
+ - key: dogfood-graded
2086
+ statement: Each Ship a change session covered got its dogfooded evidence, passed only when every path works.
2087
+ check: { kind: judge }
2088
+
1404
2089
  onboarding:
1405
2090
  goal: Capture the real engineering surface — the apps that are shipped, where their code lives, what runs behind them, where they deploy, and what's in flight — so the workspace mirrors what the team actually builds and runs, not a generic template.
1406
2091
  framing: >
@@ -1447,6 +2132,7 @@ onboarding:
1447
2132
  terminal right now, not what was true at kickoff.
1448
2133
  collect:
1449
2134
  - profileSlug: devplane_app
2135
+ min: 1
1450
2136
  what: The apps that are shipped or actively being built — with where their code lives and what stack they run on.
1451
2137
  cardinality: several
1452
2138
  keyFields: [appName, appStatus, techStack, repoUrl]
@@ -1455,6 +2141,7 @@ onboarding:
1455
2141
  cardinality: few
1456
2142
  keyFields: [serviceType, serviceStatus, host]
1457
2143
  - profileSlug: devplane_environment
2144
+ min: 1
1458
2145
  what: The servers and deploy targets the team ships to — local through production.
1459
2146
  cardinality: few
1460
2147
  keyFields: [envType, host, serverProvider]
@@ -1463,41 +2150,38 @@ onboarding:
1463
2150
  cardinality: several
1464
2151
  keyFields: [packageName, packageRegistry, dependsOn]
1465
2152
  - profileSlug: devplane_feature
2153
+ min: 1
1466
2154
  what: The work in flight right now — features and work items with a status and priority.
1467
2155
  cardinality: several
1468
2156
  keyFields: [featureStatus, priority]
1469
- - profileSlug: project
1470
- what: The larger bounded bodies of work delegated to agents or the team, tied to a goal.
1471
- cardinality: few
1472
- keyFields: [project-status, project-goal]
1473
2157
  openingQuestions:
1474
2158
  - "What have you actually shipped, and what's still just planned? Give me the apps and their repos."
1475
2159
  - "For each app — what runs behind it (services, workers), and where does it deploy?"
1476
2160
  - "What's on your plate this week, and which of it should be delegated to agents?"
1477
- doneWhen: at least one app (with a repo) + its primary deploy target + one in-flight feature or project captured.
2161
+ doneWhen: at least one app (with a repo) + its primary deploy target + one in-flight feature captured.
1478
2162
 
1479
- # App reference
2163
+ # App reference — the space opens its own experience: the Work overview,
2164
+ # built from the shared lens-page components into a sandboxed frame cell that
2165
+ # this template installs (`spacePackage` below → `cell:builder-workspace:home`).
2166
+ # It replaced DevPlane, whose surface is an iframe on a localhost URL.
1480
2167
  app:
1481
- kind: native
1482
- appId: devplane
1483
- rendererType: native
1484
- title: DevPlane
2168
+ kind: stored
2169
+ cellKey: cell:builder-workspace:home
2170
+ title: Work
1485
2171
 
2172
+ # The space's code (base layer). `pnpm build:space-packages` bundles each cell
2173
+ # into src/space-packages.generated.ts; the pod installs it as a frame cell.
2174
+ spacePackage:
2175
+ cells:
2176
+ - key: home
2177
+ name: Work
2178
+ source: packages/web/src/space-packages/builder/home.tsx
2179
+
2180
+ # No DevPlane door: the space's entry is `app` above (DevPlane is a retired
2181
+ # surface; a sidebar item or a defaultApp naming it would be a second door).
1486
2182
  layout:
1487
- defaultApp: devplane
1488
2183
  defaultView: Task Board
1489
2184
  sidebarItems:
1490
- - kind: app
1491
- appId: devplane
1492
- label: DevPlane
1493
- icon: rocket
1494
- surface:
1495
- kind: app
1496
- appId: devplane
1497
- rendererType: native
1498
- placement: main
1499
- displayMode: full
1500
- title: DevPlane
1501
2185
  - kind: view
1502
2186
  viewName: Apps
1503
2187
  label: Apps
@@ -1518,6 +2202,10 @@ layout:
1518
2202
  viewName: Incidents
1519
2203
  label: Incidents
1520
2204
  icon: alert-triangle
2205
+ - kind: view
2206
+ viewName: Service Health
2207
+ label: Services
2208
+ icon: server
1521
2209
 
1522
2210
  bento:
1523
2211
  viewName: Builder Home
@@ -1526,7 +2214,7 @@ bento:
1526
2214
  widgetType: section-header
1527
2215
  pos: { x: 0, y: 0, w: 12, h: 2 }
1528
2216
  config:
1529
- title: Builder
2217
+ title: Dev
1530
2218
  subtitle: Apps, packages, deployments, and delegated tasks in one lens.
1531
2219
  color: "#7C3AED"
1532
2220
  - kind: widget