@synap-core/workspace-templates 0.12.0 → 0.23.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 (245) hide show
  1. package/README.md +483 -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 +420 -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 +471 -0
  54. package/capabilities/vercel.capability.json +424 -0
  55. package/dist/define-CPS0n8BV.d.ts +1331 -0
  56. package/dist/index.d.ts +174 -900
  57. package/dist/index.js +26148 -23931
  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/packs/bookmark-views-pack.json +33 -0
  64. package/packs/crm-pack.json +76 -0
  65. package/packs/customer-profile.json +28 -0
  66. package/packs/deep-research.playbook.json +30 -0
  67. package/packs/event-views-pack.json +33 -0
  68. package/packs/habit-profile.json +27 -0
  69. package/packs/hr-pack.json +54 -0
  70. package/packs/invoice-profile.json +28 -0
  71. package/packs/knowledge-base-pack.json +56 -0
  72. package/packs/meeting-profile.json +29 -0
  73. package/packs/product-profile.json +30 -0
  74. package/packs/project-management-pack.json +49 -0
  75. package/packs/recipe-profile.json +29 -0
  76. package/packs/task-views-pack.json +39 -0
  77. package/retired.yaml +136 -0
  78. package/skills/app-factory-build-slice/SKILL.md +70 -0
  79. package/skills/app-factory-build-slice.catalog.json +17 -0
  80. package/skills/app-factory-design-canvas/SKILL.md +96 -0
  81. package/skills/app-factory-design-canvas.catalog.json +17 -0
  82. package/skills/app-factory-design-review/SKILL.md +99 -0
  83. package/skills/app-factory-design-review.catalog.json +18 -0
  84. package/skills/app-factory-research/SKILL.md +123 -0
  85. package/skills/app-factory-research.catalog.json +17 -0
  86. package/skills/bookmark-enrichment/SKILL.md +40 -0
  87. package/skills/carousel-format/carousel-format.skill.json +18 -0
  88. package/skills/collage-broll/collage-broll.skill.json +20 -0
  89. package/skills/content-taste/content-taste.skill.json +18 -0
  90. package/skills/creative-director/creative-director.skill.json +18 -0
  91. package/skills/design-critique/SKILL.md +135 -0
  92. package/skills/design-critique.catalog.json +12 -0
  93. package/skills/designing-with-real-components/SKILL.md +140 -0
  94. package/skills/designing-with-real-components.catalog.json +12 -0
  95. package/skills/edit-loop/edit-loop.skill.json +25 -0
  96. package/skills/facecam-edit/facecam-edit.skill.json +24 -0
  97. package/skills/mapping-the-server/SKILL.md +54 -0
  98. package/skills/math-explainer-manimgx/math-explainer-manimgx.skill.json +20 -0
  99. package/skills/motion-quality-gates/motion-quality-gates.skill.json +20 -0
  100. package/skills/open-design-edit/open-design-edit.skill.json +24 -0
  101. package/skills/reading-client-progress/SKILL.md +65 -0
  102. package/skills/routing-to-channels/SKILL.md +54 -0
  103. package/skills/stellar-scf-grants-advisor/ASSOCIATE-CHEATSHEET.md +133 -0
  104. package/skills/stellar-scf-grants-advisor/ASSOCIATE-ONBOARDING-GUIDE.md +761 -0
  105. package/skills/stellar-scf-grants-advisor/CLIENT-FAQ.md +181 -0
  106. package/skills/stellar-scf-grants-advisor/PARTNER-HANDOVER.md +130 -0
  107. package/skills/stellar-scf-grants-advisor/SKILL.md +102 -0
  108. package/skills/stellar-scf-grants-advisor/examples/README.md +43 -0
  109. package/skills/stellar-scf-grants-advisor/examples/chat-summary-templates.md +158 -0
  110. package/skills/stellar-scf-grants-advisor/examples/corpus-comparable-rows.md +136 -0
  111. package/skills/stellar-scf-grants-advisor/examples/q10-team-rewrites.md +109 -0
  112. package/skills/stellar-scf-grants-advisor/examples/q2-description-rewrites.md +88 -0
  113. package/skills/stellar-scf-grants-advisor/examples/q6-integration-rewrites.md +107 -0
  114. package/skills/stellar-scf-grants-advisor/examples/tranche-structures.md +176 -0
  115. package/skills/stellar-scf-grants-advisor/reference/01-methodology.md +96 -0
  116. package/skills/stellar-scf-grants-advisor/reference/02-scoring-framework.md +199 -0
  117. package/skills/stellar-scf-grants-advisor/reference/03-rejection-patterns.md +241 -0
  118. package/skills/stellar-scf-grants-advisor/reference/04-winner-patterns.md +120 -0
  119. package/skills/stellar-scf-grants-advisor/reference/05-comeback-patterns.md +92 -0
  120. package/skills/stellar-scf-grants-advisor/reference/06-budget-benchmarks.md +125 -0
  121. package/skills/stellar-scf-grants-advisor/reference/07-integration-list.md +147 -0
  122. package/skills/stellar-scf-grants-advisor/reference/08-abstract-fields.md +258 -0
  123. package/skills/stellar-scf-grants-advisor/reference/09-build-fields.md +259 -0
  124. package/skills/stellar-scf-grants-advisor/reference/10-corpus-winners.md +135 -0
  125. package/skills/stellar-scf-grants-advisor/reference/11-corpus-rejects.md +267 -0
  126. package/skills/stellar-scf-grants-advisor/reference/12-client-communication.md +131 -0
  127. package/skills/stellar-scf-grants-advisor/reference/13-excel-output-spec.md +199 -0
  128. package/skills/stellar-scf-grants-advisor/reference/14-worked-examples.md +160 -0
  129. package/skills/stellar-scf-grants-advisor/templates/abstract-review-builder.py +253 -0
  130. package/skills/stellar-scf-grants-advisor/templates/build-review-builder.py +213 -0
  131. package/skills/video-direction/video-direction.skill.json +20 -0
  132. package/skills/video-style-vocabulary/video-style-vocabulary.skill.json +20 -0
  133. package/skills/video-toolbox/video-toolbox.skill.json +20 -0
  134. package/src/__fixtures__/lifecycle-presets.flat-before.json +205 -0
  135. package/src/agency-os.yaml +122 -0
  136. package/src/agent-os-skill-slugs.test.ts +65 -0
  137. package/src/apify-social-reader.test.ts +317 -0
  138. package/src/base.yaml +85 -39
  139. package/src/blockchain-ecosystem.yaml +1 -0
  140. package/src/brand-library.yaml +525 -14
  141. package/src/builder-dev-fold.template.test.ts +113 -0
  142. package/src/builder.yaml +779 -91
  143. package/src/business-model-catalog-description.test.ts +47 -0
  144. package/src/business-model-grp.template.test.ts +214 -0
  145. package/src/business-model.yaml +296 -49
  146. package/src/catalog-safety.test.ts +198 -0
  147. package/src/catalog.template-items.test.ts +75 -0
  148. package/src/catalog.ts +66 -2
  149. package/src/concept-guard.test.ts +28 -8
  150. package/src/concept-guard.ts +2 -2
  151. package/src/content-creation.template.test.ts +52 -0
  152. package/src/content-creation.yaml +192 -0
  153. package/src/content-os.edit-loop.template.test.ts +210 -0
  154. package/src/content-os.publish-due-posts.template.test.ts +261 -0
  155. package/src/content-os.template.test.ts +322 -0
  156. package/src/content-os.video-takes.template.test.ts +338 -0
  157. package/src/content-os.work-a-take.template.test.ts +125 -0
  158. package/src/content-os.yaml +1830 -39
  159. package/src/content-studio-retired.template.test.ts +82 -0
  160. package/src/corpus-flow-validity.test.ts +4 -5
  161. package/src/crm-absorbs-outreach.template.test.ts +117 -0
  162. package/src/crm-build-plan.template.test.ts +128 -0
  163. package/src/crm-lists.template.test.ts +96 -0
  164. package/src/crm-messages-cadence.template.test.ts +164 -0
  165. package/src/crm-one-send-door.template.test.ts +65 -0
  166. package/src/crm.yaml +1456 -181
  167. package/src/decisions-wave.template.test.ts +186 -0
  168. package/src/define.ts +130 -17
  169. package/src/design-to-implementation.template.test.ts +94 -0
  170. package/src/domain-template-type.test.ts +75 -0
  171. package/src/ecosystem.yaml +27 -66
  172. package/src/enterprise-os.yaml +10 -134
  173. package/src/facecam-edit.audio-studio.test.ts +188 -0
  174. package/src/fal-generate-image.test.ts +200 -0
  175. package/src/fal-media-lab-pod-files.test.ts +180 -0
  176. package/src/finance.yaml +254 -1
  177. package/src/foundation.yaml +78 -38
  178. package/src/frame-host-modules.d.mts +6 -0
  179. package/src/frame-host-modules.mjs +58 -0
  180. package/src/generate.mjs +9 -3
  181. package/src/github-merge.test.ts +210 -0
  182. package/src/grants.yaml +46 -17
  183. package/src/hr.yaml +39 -6
  184. package/src/index.ts +36 -1
  185. package/src/intent.test.ts +161 -0
  186. package/src/internal-runbook.yaml +19 -1
  187. package/src/jev.test.ts +356 -0
  188. package/src/legal.yaml +33 -1
  189. package/src/life-os.yaml +51 -240
  190. package/src/lifecycle-coverage.test.ts +124 -0
  191. package/src/lifecycle-declarations.test.ts +252 -0
  192. package/src/lifecycle-presets.test.ts +468 -0
  193. package/src/lifecycle-presets.ts +494 -0
  194. package/src/lifecycle-stuck.test.ts +46 -0
  195. package/src/lifecycle-waits.parity.test.ts +319 -0
  196. package/src/marketing.yaml +108 -4
  197. package/src/meetings-knowledge.yaml +18 -0
  198. package/src/networking.yaml +23 -2
  199. package/src/operations.yaml +304 -4
  200. package/src/pipeline-views.template.test.ts +88 -0
  201. package/src/playbook-goal-placeholders.test.ts +57 -0
  202. package/src/postiz-contract.test.ts +134 -0
  203. package/src/presentation-declarations.test.ts +174 -0
  204. package/src/process-contract.validate.test.ts +352 -0
  205. package/src/project-management.yaml +39 -740
  206. package/src/publish-body.d.mts +29 -0
  207. package/src/publish-body.mjs +74 -0
  208. package/src/publish-body.test.ts +74 -0
  209. package/src/publish-official-lib.test.ts +176 -0
  210. package/src/replicate-rvm.test.ts +504 -0
  211. package/src/research-base.yaml +119 -20
  212. package/src/research-decision.yaml +60 -3
  213. package/src/reserved-profile-slugs.test.ts +83 -0
  214. package/src/retired-goal-kinds.test.ts +58 -0
  215. package/src/role-reference-and-step-domain.test.ts +192 -0
  216. package/src/seed-obligation.test.ts +1 -6
  217. package/src/send-message-maps.test.ts +227 -0
  218. package/src/shared-role-ssot.test.ts +40 -2
  219. package/src/ship-a-change.template.test.ts +177 -0
  220. package/src/skills.test.ts +170 -0
  221. package/src/social.yaml +85 -27
  222. package/src/space-packages.freshness.test.ts +97 -0
  223. package/src/space-packages.generated.ts +40 -0
  224. package/src/space-packages.test.ts +125 -0
  225. package/src/space-packages.ts +73 -0
  226. package/src/start.test.ts +188 -0
  227. package/src/task-intents.test.ts +293 -0
  228. package/src/templates.ts +20851 -21496
  229. package/src/types.ts +443 -60
  230. package/src/unipile-publish-post.test.ts +162 -0
  231. package/src/validate-flow.drift.test.ts +2 -3
  232. package/src/validate-flow.ts +22 -2
  233. package/src/validate-onboarding.test.ts +59 -0
  234. package/src/validate.test.ts +71 -4
  235. package/src/validate.ts +1335 -7
  236. package/src/wire-core.ts +231 -0
  237. package/src/wire.test.ts +159 -0
  238. package/src/wire.ts +107 -0
  239. package/src/agent-fleet.yaml +0 -1645
  240. package/src/business-developer.template.test.ts +0 -351
  241. package/src/business-developer.yaml +0 -860
  242. package/src/content-studio.yaml +0 -361
  243. package/src/dev-dashboard.yaml +0 -990
  244. package/src/outreach-comms.yaml +0 -486
  245. package/src/the-arch.yaml +0 -201
@@ -0,0 +1,54 @@
1
+ {
2
+ "_meta": {
3
+ "slug": "hr-pack",
4
+ "icon": "users",
5
+ "color": "#F59E0B",
6
+ "tags": ["hr", "team", "employees", "departments"],
7
+ "requiredTier": null,
8
+ "isPublic": true
9
+ },
10
+ "profiles": [
11
+ {
12
+ "slug": "team-member",
13
+ "displayName": "Team Member",
14
+ "icon": "user",
15
+ "color": "#F59E0B",
16
+ "description": "Team members and employees",
17
+ "scope": "workspace",
18
+ "parentProfileSlug": "person",
19
+ "properties": [
20
+ { "slug": "role", "valueType": "string", "required": true, "label": "Role / Title" },
21
+ { "slug": "department", "valueType": "string", "label": "Department" },
22
+ { "slug": "start-date", "valueType": "date", "label": "Start Date" },
23
+ { "slug": "location", "valueType": "string", "label": "Location" },
24
+ { "slug": "skills", "valueType": "array", "label": "Skills" },
25
+ { "slug": "status", "valueType": "string", "label": "Status", "inputType": "select", "enumValues": ["active", "on-leave", "offboarded"] }
26
+ ]
27
+ },
28
+ {
29
+ "slug": "department",
30
+ "displayName": "Department",
31
+ "icon": "building-2",
32
+ "color": "#6366F1",
33
+ "description": "Organizational departments and teams",
34
+ "scope": "workspace",
35
+ "properties": [
36
+ { "slug": "head", "valueType": "string", "label": "Department Head" },
37
+ { "slug": "headcount", "valueType": "number", "label": "Headcount", "constraints": { "min": 0 } },
38
+ { "slug": "budget", "valueType": "number", "label": "Annual Budget", "constraints": { "min": 0 } },
39
+ { "slug": "description", "valueType": "string", "label": "Description", "inputType": "textarea" }
40
+ ]
41
+ }
42
+ ],
43
+ "views": [
44
+ {
45
+ "name": "Team",
46
+ "type": "table",
47
+ "scopeProfileSlug": "team-member",
48
+ "config": {}
49
+ }
50
+ ],
51
+ "entityLinks": [
52
+ { "sourceProfileSlug": "team-member", "targetProfileSlug": "department", "type": "belongs_to", "label": "In department" }
53
+ ]
54
+ }
@@ -0,0 +1,28 @@
1
+ {
2
+ "_meta": {
3
+ "slug": "invoice-profile",
4
+ "icon": "receipt",
5
+ "color": "#10B981",
6
+ "tags": ["invoice", "billing", "finance"],
7
+ "requiredTier": null,
8
+ "isPublic": true
9
+ },
10
+ "profiles": [
11
+ {
12
+ "slug": "invoice",
13
+ "displayName": "Invoice",
14
+ "icon": "receipt",
15
+ "color": "#10B981",
16
+ "description": "Invoice with line items and payment tracking",
17
+ "scope": "workspace",
18
+ "properties": [
19
+ { "slug": "invoice-number", "valueType": "string", "required": true, "label": "Invoice Number" },
20
+ { "slug": "amount", "valueType": "number", "required": true, "label": "Amount", "constraints": { "min": 0 } },
21
+ { "slug": "currency", "valueType": "string", "label": "Currency", "placeholder": "USD" },
22
+ { "slug": "status", "valueType": "string", "label": "Status", "inputType": "select", "enumValues": ["draft", "sent", "paid", "overdue", "cancelled"] },
23
+ { "slug": "due-date", "valueType": "date", "label": "Due Date" },
24
+ { "slug": "issued-date", "valueType": "date", "label": "Issued Date" }
25
+ ]
26
+ }
27
+ ]
28
+ }
@@ -0,0 +1,56 @@
1
+ {
2
+ "_meta": {
3
+ "slug": "knowledge-base-pack",
4
+ "icon": "book-open",
5
+ "color": "#06B6D4",
6
+ "tags": ["knowledge", "articles", "documentation", "resources"],
7
+ "requiredTier": null,
8
+ "isPublic": true
9
+ },
10
+ "profiles": [
11
+ {
12
+ "slug": "article",
13
+ "displayName": "Article",
14
+ "icon": "newspaper",
15
+ "color": "#8B5CF6",
16
+ "description": "Knowledge base articles and documentation",
17
+ "scope": "workspace",
18
+ "parentProfileSlug": "bookmark",
19
+ "properties": [
20
+ { "slug": "author", "valueType": "string", "label": "Author" },
21
+ { "slug": "published-at", "valueType": "date", "label": "Published" },
22
+ { "slug": "category", "valueType": "string", "label": "Category" },
23
+ { "slug": "tags", "valueType": "array", "label": "Tags" },
24
+ { "slug": "read-time", "valueType": "number", "label": "Read Time (min)", "constraints": { "min": 0 } }
25
+ ]
26
+ },
27
+ {
28
+ "slug": "resource",
29
+ "displayName": "Resource",
30
+ "icon": "link",
31
+ "color": "#10B981",
32
+ "description": "External links, tools, and references",
33
+ "scope": "workspace",
34
+ "properties": [
35
+ { "slug": "url", "valueType": "string", "required": true, "label": "URL", "inputType": "url" },
36
+ { "slug": "category", "valueType": "string", "label": "Category" },
37
+ { "slug": "rating", "valueType": "number", "label": "Rating", "constraints": { "min": 0, "max": 5 } },
38
+ { "slug": "notes", "valueType": "string", "label": "Notes", "inputType": "textarea" }
39
+ ]
40
+ }
41
+ ],
42
+ "views": [
43
+ {
44
+ "name": "Articles",
45
+ "type": "grid",
46
+ "scopeProfileSlug": "article",
47
+ "config": {}
48
+ },
49
+ {
50
+ "name": "Resources",
51
+ "type": "list",
52
+ "scopeProfileSlug": "resource",
53
+ "config": {}
54
+ }
55
+ ]
56
+ }
@@ -0,0 +1,29 @@
1
+ {
2
+ "_meta": {
3
+ "slug": "meeting-profile",
4
+ "icon": "video",
5
+ "color": "#8B5CF6",
6
+ "tags": ["meeting", "calendar", "scheduling"],
7
+ "requiredTier": null,
8
+ "isPublic": true
9
+ },
10
+ "profiles": [
11
+ {
12
+ "slug": "meeting",
13
+ "displayName": "Meeting",
14
+ "icon": "video",
15
+ "color": "#8B5CF6",
16
+ "description": "Meeting with attendees, agenda, and notes",
17
+ "scope": "workspace",
18
+ "properties": [
19
+ { "slug": "title", "valueType": "string", "required": true, "label": "Title" },
20
+ { "slug": "start-date", "valueType": "date", "required": true, "label": "Start Time" },
21
+ { "slug": "end-date", "valueType": "date", "label": "End Time" },
22
+ { "slug": "location", "valueType": "string", "label": "Location / Link" },
23
+ { "slug": "attendees", "valueType": "array", "label": "Attendees" },
24
+ { "slug": "agenda", "valueType": "string", "label": "Agenda", "inputType": "textarea" },
25
+ { "slug": "notes", "valueType": "string", "label": "Meeting Notes", "inputType": "textarea" }
26
+ ]
27
+ }
28
+ ]
29
+ }
@@ -0,0 +1,30 @@
1
+ {
2
+ "_meta": {
3
+ "slug": "product-profile",
4
+ "icon": "package",
5
+ "color": "#6366F1",
6
+ "tags": ["product", "inventory", "ecommerce"],
7
+ "requiredTier": null,
8
+ "isPublic": true
9
+ },
10
+ "profiles": [
11
+ {
12
+ "slug": "product",
13
+ "displayName": "Product",
14
+ "icon": "package",
15
+ "color": "#6366F1",
16
+ "description": "Product with pricing, SKU, and inventory",
17
+ "scope": "workspace",
18
+ "properties": [
19
+ { "slug": "name", "valueType": "string", "required": true, "label": "Product Name" },
20
+ { "slug": "sku", "valueType": "string", "label": "SKU" },
21
+ { "slug": "price", "valueType": "number", "label": "Price", "constraints": { "min": 0 } },
22
+ { "slug": "currency", "valueType": "string", "label": "Currency", "placeholder": "USD" },
23
+ { "slug": "category", "valueType": "string", "label": "Category" },
24
+ { "slug": "status", "valueType": "string", "label": "Status", "inputType": "select", "enumValues": ["draft", "active", "discontinued"] },
25
+ { "slug": "description", "valueType": "string", "label": "Description", "inputType": "textarea" },
26
+ { "slug": "image", "valueType": "string", "label": "Image URL" }
27
+ ]
28
+ }
29
+ ]
30
+ }
@@ -0,0 +1,49 @@
1
+ {
2
+ "_meta": {
3
+ "slug": "project-management-pack",
4
+ "icon": "kanban-square",
5
+ "color": "#8B5CF6",
6
+ "tags": ["projects", "tasks", "milestones", "team"],
7
+ "requiredTier": null,
8
+ "isPublic": true
9
+ },
10
+ "profiles": [
11
+ {
12
+ "slug": "task",
13
+ "displayName": "Task",
14
+ "icon": "check-square",
15
+ "color": "#3B82F6",
16
+ "description": "Work items and action items",
17
+ "scope": "workspace",
18
+ "properties": [
19
+ { "slug": "status", "valueType": "string", "required": true, "label": "Status", "inputType": "select", "enumValues": ["todo", "in-progress", "review", "done", "cancelled"] },
20
+ { "slug": "priority", "valueType": "string", "label": "Priority", "inputType": "select", "enumValues": ["low", "medium", "high", "urgent"] },
21
+ { "slug": "due-date", "valueType": "date", "label": "Due Date" },
22
+ { "slug": "assignee", "valueType": "string", "label": "Assignee" },
23
+ { "slug": "estimate", "valueType": "number", "label": "Estimate (hours)", "constraints": { "min": 0 } },
24
+ { "slug": "tags", "valueType": "array", "label": "Labels" }
25
+ ]
26
+ },
27
+ {
28
+ "slug": "milestone",
29
+ "displayName": "Milestone",
30
+ "icon": "flag",
31
+ "color": "#F59E0B",
32
+ "description": "Key deliverables and checkpoints",
33
+ "scope": "workspace",
34
+ "properties": [
35
+ { "slug": "due-date", "valueType": "date", "required": true, "label": "Target Date" },
36
+ { "slug": "status", "valueType": "string", "label": "Status", "inputType": "select", "enumValues": ["upcoming", "in-progress", "completed", "missed"] },
37
+ { "slug": "description", "valueType": "string", "label": "Description", "inputType": "textarea" }
38
+ ]
39
+ }
40
+ ],
41
+ "views": [
42
+ {
43
+ "name": "Task Board",
44
+ "type": "kanban",
45
+ "scopeProfileSlug": "task",
46
+ "config": { "groupByField": "status" }
47
+ }
48
+ ]
49
+ }
@@ -0,0 +1,29 @@
1
+ {
2
+ "_meta": {
3
+ "slug": "recipe-profile",
4
+ "icon": "chef-hat",
5
+ "color": "#F59E0B",
6
+ "tags": ["recipe", "cooking", "food"],
7
+ "requiredTier": null,
8
+ "isPublic": true
9
+ },
10
+ "profiles": [
11
+ {
12
+ "slug": "recipe",
13
+ "displayName": "Recipe",
14
+ "icon": "chef-hat",
15
+ "color": "#F59E0B",
16
+ "description": "Recipe with ingredients, steps, and nutrition",
17
+ "scope": "workspace",
18
+ "properties": [
19
+ { "slug": "title", "valueType": "string", "required": true, "label": "Recipe Name" },
20
+ { "slug": "cuisine", "valueType": "string", "label": "Cuisine" },
21
+ { "slug": "prep-time", "valueType": "number", "label": "Prep Time (min)", "constraints": { "min": 0 } },
22
+ { "slug": "cook-time", "valueType": "number", "label": "Cook Time (min)", "constraints": { "min": 0 } },
23
+ { "slug": "servings", "valueType": "number", "label": "Servings", "constraints": { "min": 1 } },
24
+ { "slug": "ingredients", "valueType": "array", "label": "Ingredients" },
25
+ { "slug": "tags", "valueType": "array", "label": "Tags" }
26
+ ]
27
+ }
28
+ ]
29
+ }
@@ -0,0 +1,39 @@
1
+ {
2
+ "_meta": {
3
+ "slug": "task-views-pack",
4
+ "displayName": "Task Views",
5
+ "icon": "layout-grid",
6
+ "color": "#3B82F6",
7
+ "tags": ["tasks", "kanban", "views", "productivity"],
8
+ "requiredTier": null,
9
+ "isPublic": true
10
+ },
11
+ "description": "Four ready-made task views: a Kanban board by status, a priority matrix, a due-date calendar and a table of all tasks.",
12
+ "profiles": [],
13
+ "views": [
14
+ {
15
+ "name": "Task Board",
16
+ "type": "kanban",
17
+ "scopeProfileSlug": "task",
18
+ "config": { "groupByField": "status" }
19
+ },
20
+ {
21
+ "name": "Priority Matrix",
22
+ "type": "matrix",
23
+ "scopeProfileSlug": "task",
24
+ "config": { "xField": "priority", "yField": "status" }
25
+ },
26
+ {
27
+ "name": "Task Calendar",
28
+ "type": "calendar",
29
+ "scopeProfileSlug": "task",
30
+ "config": { "dateField": "dueDate" }
31
+ },
32
+ {
33
+ "name": "All Tasks",
34
+ "type": "table",
35
+ "scopeProfileSlug": "task",
36
+ "config": {}
37
+ }
38
+ ]
39
+ }
package/retired.yaml ADDED
@@ -0,0 +1,136 @@
1
+ # Retired templates: the tombstone registry (schema: schema/retired.ts).
2
+ #
3
+ # A template that leaves the catalog stays KNOWN here. `synap catalog publish`
4
+ # sends each entry to the control plane (POST /api/packages/retire) after the
5
+ # live publishes, so a pod can tell "retired, replaced by X" from "never heard
6
+ # of it" and offer the person a safe move to X. Removing an entry does NOT
7
+ # un-retire the row on the CP.
8
+ #
9
+ # slug the retired slug
10
+ # kind workspace (default) · capability · skill · pack · automation
11
+ # replacedBy a LIVE catalog slug of the same kind, or absent when nothing replaces it
12
+ # reason one plain sentence a person reads
13
+ # since the date it left the catalog (YYYY-MM-DD)
14
+ #
15
+ # Validation (`synap catalog validate`): replacedBy is live and not retired; no
16
+ # slug is both live and retired in the same category; reasons are not empty.
17
+ # The evidence behind each entry is in pod file 00c1b2fe-ef98-41fa-86cf-801dfab12cd1 ("Template lifecycle: decisions wave + lane catalog").
18
+
19
+ apiVersion: synap/v1
20
+ retired:
21
+ # c64ec2fe: "ecosystem (absorbs radar+content-os per ratified merge)". Every
22
+ # radar kind (competitor, market-segment, trend, inspiration) is declared by ecosystem.
23
+ - slug: radar
24
+ kind: workspace
25
+ replacedBy: ecosystem
26
+ reason: Radar was merged into Ecosystem, which tracks competitors, market segments, trends and inspiration in one place.
27
+ since: "2026-07-16"
28
+
29
+ # 2026-07-22 (b12efb1b). Second Brain (life-os) declares every kind Personal
30
+ # held (note, bookmark, article; projects are the pod's own).
31
+ - slug: personal
32
+ kind: workspace
33
+ replacedBy: life-os
34
+ reason: Personal was replaced by Second Brain, which keeps your notes, bookmarks and articles together.
35
+ since: "2026-07-22"
36
+
37
+ # R7 2026-09-27 (src/builder-dev-fold.template.test.ts): the four views worth
38
+ # keeping were rebuilt over Builder's own kinds (slug builder-workspace, shown as "Dev"). credential, vendor, repository,
39
+ # service and environment were NOT ported.
40
+ - slug: dev-dashboard
41
+ kind: workspace
42
+ replacedBy: builder-workspace
43
+ reason: Dev Dashboard was folded into the Dev space, where its service health, deploy and cost views now live.
44
+ since: "2026-09-27"
45
+
46
+ # R7 2026-09-27: retired as a template, its `agent` kind deliberately not
47
+ # ported anywhere. Not a system space (only pod-admin carries a system_slug).
48
+ - slug: agent-fleet
49
+ kind: workspace
50
+ reason: Agent Fleet is no longer offered; your agents belong to the pod itself, not to a space.
51
+ since: "2026-09-27"
52
+
53
+ # eaf49166: it declared no profiles, only tools, skills and vault. It lives on
54
+ # as the capability `posthog-analytics` (capabilities/), a different category.
55
+ - slug: posthog-analytics
56
+ kind: workspace
57
+ reason: PostHog Analytics is now a capability you connect, not a space.
58
+ since: "2026-10-06"
59
+
60
+ # relay-app's private template (relay-app/src/lib/workspace-templates/relay.ts).
61
+ # Never in the catalog, but pods hold it. person and company move to CRM;
62
+ # event and task are pod-wide; campaign and contact have no home in CRM.
63
+ - slug: relay
64
+ kind: workspace
65
+ replacedBy: crm
66
+ reason: Relay was replaced by CRM, which keeps the people and companies you track.
67
+ since: "2026-10-11"
68
+
69
+ # relay-app's private template (relay-app/src/lib/workspace-templates/pkm.ts).
70
+ # life-os.yaml says it was consolidated from the CP pkm-template; it declares
71
+ # note, bookmark and highlight.
72
+ - slug: pkm
73
+ kind: workspace
74
+ replacedBy: life-os
75
+ reason: Knowledge was replaced by Second Brain, which keeps your notes, bookmarks and highlights.
76
+ since: "2026-10-11"
77
+
78
+ # Founder decision 2026-10-12 (pod file 00c1b2fe-ef98-41fa-86cf-801dfab12cd1, decisions wave item 1).
79
+ # Its lead/client fields, the campaign kind and "Qualify a lead" folded into
80
+ # crm.yaml; "Advance a commercial proposal" was dropped for CRM's "Win a
81
+ # deal"; the Synap-fee + commission model moved to the private arch-sales.yaml,
82
+ # itself retired the same day (below).
83
+ - slug: business-developer
84
+ kind: workspace
85
+ replacedBy: crm
86
+ reason: Business Developer was folded into CRM, which now qualifies your leads and runs your campaigns.
87
+ since: "2026-10-12"
88
+
89
+ # Founder decision 2026-10-12: The Arch (project + pod) is no longer in use.
90
+ # Both were private. Their sources are kept, never loaded, in retired-sources/.
91
+ # Existing pods keep their spaces and data; nothing offers them again.
92
+ - slug: arch-sales
93
+ kind: workspace
94
+ reason: Arch Sales was The Arch's own business-developer commission model, and that project is no longer in use.
95
+ since: "2026-10-12"
96
+
97
+ - slug: the-arch
98
+ kind: workspace
99
+ reason: The Arch was a private suite for a project that is no longer in use.
100
+ since: "2026-10-12"
101
+
102
+ # 2026-10-15, "Any link → data": every pod reads a
103
+ # public link itself (the builtin web read verb in Synap Core), so this pack
104
+ # and its capture_public_url twin are no longer offered. Nothing replaces it:
105
+ # nothing needs installing.
106
+ - slug: web.read
107
+ kind: capability
108
+ reason: Reading a public link is built into every pod.
109
+ since: "2026-10-15"
110
+
111
+ # Founder decision 2026-10-23: one space per domain. For a founder-led company
112
+ # outreach is part of the commercial job, so the CRM absorbs it: the
113
+ # `outreach-touch` kind (same slug and lifecycle keys), `sent_to` / `part_of`,
114
+ # the two views, "Personalized Outreach" and the LinkedIn ingest live in
115
+ # crm.yaml. `outreach-campaign` folded into CRM's `campaign` (campaign-type
116
+ # outreach); "Send an outreach message" became "Read the reply to an outreach
117
+ # message" (the agent drafts, a person sends). No pod had it installed.
118
+ - slug: outreach-comms
119
+ kind: workspace
120
+ replacedBy: crm
121
+ reason: Outreach & Comms was folded into CRM, which now keeps your outreach campaigns and the messages drafted for you to send.
122
+ since: "2026-10-23"
123
+
124
+ # Static edit loop W5 (build plan ab3e0a5a §4, founder D0-D1, 2 Nov 2026).
125
+ # Superseded since 2026-10-06: Content OS re-declared its three video kinds
126
+ # (content-composition, content-asset, render-job) verbatim, their views and
127
+ # pipeline links; brand-library folded its production-recipe into
128
+ # brand-template. The edit loop (edit-loop skill, video-toolbox routing)
129
+ # replaced its render pipeline. The founder's pod holds no Content Studio
130
+ # space (2026-11-03); a pod that does keeps it as it is (the resolver
131
+ # refuses a new install and leaves an installed space alone).
132
+ - slug: content-studio
133
+ kind: workspace
134
+ replacedBy: content-os
135
+ reason: Content Studio was folded into Content OS, which now keeps your videos, carousels and other visual posts with the rest of your content.
136
+ since: "2026-11-03"
@@ -0,0 +1,70 @@
1
+ ---
2
+ name: app-factory-build-slice
3
+ description: Build one slice of a new app from its approved design boards — scope by board files, data read server-side only through the person's sign-in, governed writes, the Website Factory gates, an independent re-run of every gate by the orchestrator, and a stop for the person's first look after slice 1. Use in the Build stage of "Build an app (App Factory)", or when handing an approved design to a coding agent.
4
+ metadata:
5
+ synap_native: true
6
+ auto_load: false
7
+ ---
8
+
9
+ # App Factory: build a slice
10
+
11
+ A slice is a set of approved boards built pixel for pixel, gate-green, in a pull request. It never starts before the
12
+ person approved the design, and never starts while a gap it depends on is open without a labelled bridge. Content
13
+ Studio's slice S1 (Home + idea bank, read-only, real data) is the reference.
14
+
15
+ ## 1. Write the slice brief (in the app repo, e.g. `BUILD-S1.md`)
16
+
17
+ The builder reads it fully, then `AGENTS.md`, `.claude/skills/build-site/SKILL.md`, the plan document (sections it
18
+ names) and the boards. The brief says:
19
+
20
+ - **Scope, by boards.** Each route with the board files it must match (desktop 1280, phone 390, every state board).
21
+ Shell items outside the slice link to ONE "coming next" page drawn with the kit's `StatePanel`, never a dead link.
22
+ - **Rules computed on the server**, written once (e.g. Home's one line: open interview with unanswered questions →
23
+ owed asks → pending proposals → the most overdue item). The counts that must agree across pages come from one
24
+ function.
25
+ - **Not in this slice**, explicitly (writes, sign-in, the pages of later slices).
26
+ - **Data.** The read set per page (route, `workspaceId` always passed, what it returns), the request budget per page
27
+ against the key's rate limit, cache per request only (no shared cache across people). A failed read renders the
28
+ error state with retry, never an empty list.
29
+ - **Sign-in, never a key.** The app is a pod-app site (`create-site --path pod-app`): the person signs in to their pod
30
+ and the server reads through `@synap-core/sdk/connect` (`createPodAppAuth`); follow the kit's AGENTS.md. Never an app
31
+ key; the session secret stays server-only, never in client code, never `NEXT_PUBLIC_*`, never logged or committed.
32
+ Not connected → the kit's "not connected" state. What a pod app can see and do (spaces, roles, pod-wide records,
33
+ writes): `node_modules/@synap-core/sdk/AGENTS.md`, section "What a pod app can see and do". It wins over anything
34
+ here. If something the app needs is not supported yet, that is a recorded gap with an owner — never edit
35
+ `synap-check.mjs` to pass.
36
+ - **Writes are governed.** A write from a pod app is a proposal in a granted space (`proposed` is success: link the
37
+ review, label it in the UI "Proposed · in your pod", never retry it); a person connection applies directly.
38
+ - **Look.** `design-kit/tokens.css` decisions copied into `app/brand.css` (shadcn token names), fonts self-hosted
39
+ (`next/font/local` or `@fontsource*`, never Google at build time), sizes = shadcn base-nova plus only the sizes the
40
+ design decisions added (as cva variants). Private app: `app/robots.ts` disallows all, pages carry `noindex`, and any
41
+ cookie (e.g. the sidebar's `sidebar_state`) is named on the privacy page.
42
+
43
+ ## 2. Gates (the builder runs them, quotes them, fixes until green)
44
+
45
+ - `pnpm verify` green (typecheck, lint, arc / extensions / synap / registry checks, build, smoke).
46
+ - `pnpm shots` and READ the PNGs and `.shots/REPORT.md` at 375 / 768 / 1280 (and dark, if designed): zero serious or
47
+ critical axe issues; compare each page with its board and list every remaining difference.
48
+ - Credential grep: the key's variable name appears only in server files
49
+ (`grep -rn "<KEY_VAR>" app components lib`).
50
+ - Mutation grep (read-only slices): no write call anywhere
51
+ (`grep -rnE 'method: ?"(POST|PATCH|PUT|DELETE)"|\.create\(|\.update\(|\.transition\(' app components lib` is empty).
52
+ - Small commits on a branch `s<N>-<slug>`, pushed, a pull request to main. Never push to main, never deploy
53
+ production; a preview deploy only when `VERCEL_TOKEN` is set (if not, say so and skip).
54
+
55
+ ## 3. Independent verification (the orchestrator, not the builder)
56
+
57
+ Never accept "done" from the builder's report. On the devbox (heavy gates never on the Mac; take the gate lock):
58
+ check out the PR head, run `pnpm verify` and the two greps yourself, read the screenshots, and quote the outputs.
59
+ Look for green-by-accident: a verify that passed only through a temporary proxy or a cached font, a flag that does not
60
+ exist or is not the pod-app path (`create-site --path pod-app`), ids in the brief that drifted from the pod. Record each trap you find as a lesson.
61
+
62
+ ## 4. Report and stop
63
+
64
+ Post in the slice's session room: what was built (routes, boards matched), the quoted gates, screenshot findings by
65
+ severity (VERIFIED), what only the person can judge (NEEDS-DOGFOOD), and the gaps still open with owners. After
66
+ **slice 1, STOP**: the person's first look on the preview (or the screenshots) decides the next slice. Later slices
67
+ continue in order unless the person stops them; each ends with the same report.
68
+
69
+ Done when: the PR is open, every gate is quoted by the orchestrator's own run, the differences from the boards are
70
+ listed, and (after slice 1) the person has been asked for their first look.
@@ -0,0 +1,17 @@
1
+ {
2
+ "apiVersion": "synap/v1",
3
+ "kind": "skill",
4
+ "meta": {
5
+ "slug": "app-factory-build-slice",
6
+ "name": "App Factory: build a slice",
7
+ "description": "Build one slice of an app from its approved boards: server-side reads through the person's sign-in, governed writes, the Website Factory gates, an independent re-run of every gate, and a stop for the person's first look after slice 1.",
8
+ "tags": [
9
+ "skill",
10
+ "app-factory",
11
+ "build",
12
+ "builder"
13
+ ],
14
+ "isPublic": true
15
+ },
16
+ "dependencies": []
17
+ }
@@ -0,0 +1,96 @@
1
+ ---
2
+ name: app-factory-design-canvas
3
+ description: Draw a new app on the design canvas with the Website Factory design kit — every page and every state, desktop and phone, in the real shadcn components from day one, with the person's real data as the sample world and one writer. Use in the Design stage of "Build an app (App Factory)", or when asked to design, mock up or draw an app's screens before building it.
4
+ metadata:
5
+ synap_native: true
6
+ auto_load: false
7
+ ---
8
+
9
+ # App Factory: design canvas
10
+
11
+ The canvas is where the person says yes before any code. It must show the app as it will be built: the real
12
+ components at their real sizes, every state, the phone, and the person's own data. Read the plan (Research output) and
13
+ the decisions first; draw nothing the data contract cannot fill.
14
+
15
+ ## Where the boards live
16
+
17
+ 1. Create the app's repo from the Website Factory now, not at build time: `pnpm create-site <dir> --name "<Name>"
18
+ --path <path>` in the template (a private repo `Synap-core/site-<slug>`). If the path's bundle is not available
19
+ yet (`pod-app` exits "bundle not available"), create it from `static`, and keep the gap in the register. Its
20
+ `design-kit/` is the kit; read `design-kit/README.md` fully.
21
+ 2. Work on a branch `design` in that repo and commit `design-kit/src` AND `design-kit/out` after every round. A design
22
+ that lives only in a scratch folder is lost at the next reboot (it happened).
23
+ 3. Publish `design-kit/out` (every `*.dc.html` + `canvas.json`) as the app's design canvas and put its link in the plan.
24
+
25
+ ## Set the look once
26
+
27
+ Fill `design-kit/tokens.css`: the shadcn token values (background, foreground, card, primary, muted, border, input,
28
+ ring, destructive, radius), the state-mark extras the app uses, the fonts (`@font`), and site macros for the app's
29
+ vocabulary (`@macro status:draft = [[lc:active:Draft]]`, one per lifecycle option, named exactly as the pod's lifecycle).
30
+ Reserve each brand colour for ONE meaning and write the meaning beside it (Content Studio: red only for recording and
31
+ "today", yellow only for the person's own words). Never introduce a colour on a board: `design:check` refuses it.
32
+
33
+ ## What to draw
34
+
35
+ - **The shell:** `src/Sidebar.dc.html` (256, the registry sidebar: groups, 32 px rows, counts as quiet grey stock or
36
+ a badge for a queue) and, if the app is used on a phone, `src/TabBar.dc.html` (at most five tabs; a centre `+` only
37
+ for capture).
38
+ - **One board per page** in the plan's pages table, at 1280, with `expand: fill`. Each page has ONE primary (button
39
+ `lg`), a header with a trail only when a parent exists, and every named thing as a link to its own board.
40
+ - **The phone**, 390 x 844, for every page the person uses on the phone: tab bar on every phone board, thumb buttons,
41
+ sheets as drawers (top radius 14, handle), root `width: 100%; max-width: 390px`, no horizontal overflow.
42
+ - **Every state**, per page (on its own "every state" board or beside the page):
43
+ loading (skeleton in the shape of the rows) · empty, with its answer named: omit (render nothing), invite (an action
44
+ that fills it), explain (why, and the escape), reassure ("all clear") · failed, with retry inside, never drawn as
45
+ empty · partly failed (the section, not the page) · gone / no access · offline · long content and many items (a cap
46
+ and "Show all N") · first run · an action in flight, done with undo, failed · the bridge state when a change waits as
47
+ a proposal in the pod (`[[pending]]`).
48
+ - **The app islands:** the service or pod down, access ended, not signed in / consent, the person's first run. An
49
+ island has no sidebar, one sentence, one way forward, and says what is safe.
50
+ - **The flow:** one canvas page that lays the boards out in the order a person lives them (e.g. a week), with row
51
+ titles in `canvas.json` notes.
52
+ - **The kit page:** the vocabulary sheet (`Vocabulary.dc.html`), the sidebar and the tab bar, so reviewers measure
53
+ against one sheet.
54
+
55
+ ## The sample world
56
+
57
+ Use the real rows the research chose: same names, ids, dates and counts on every board. Draw "as of" a real day and
58
+ label any future-state board ("Thursday, after Monday's interview"). The person's own words are verbatim, wrapped in
59
+ `<mark>`; if a board needs words they have not written, it shows the empty state instead. No lorem, no invented
60
+ companies or people (`design:check` catches the obvious ones; the rest is on you).
61
+
62
+ ## Fidelity (the numbers the review checks)
63
+
64
+ From the template's components (shadcn base-nova), as `vocab.css` draws them: button default 32 (px 10, radius 10,
65
+ 14·500, gap 6, icon 16), `lg` 36 = the page primary, sm 28, xs 24; a larger "do it now" button only if the decisions
66
+ added it as a cva size first (Content Studio: one `xl` 48 for Home's single action and the phone thumb buttons). Badge
67
+ 20 pill 12·500. Toggle 32, pressed = muted fill. Tabs 32 with a 3 px inset, active = background + shadow-sm; line tabs
68
+ with a 2 px indicator. Card radius 14, padding 16 (12 small), title 16·500. Item rows px 12 py 10, radius 10, title
69
+ 14·500, description 14 muted clamped to 2 lines. Input 32, textarea min 64. Kbd 20 muted, no border. Progress 4.
70
+ Sidebar 256, rows 32, group label 12·500 at 70 %. Empty: padding 24, gap 16, media tile 32. Type: display 60 / 36 /
71
+ 28 / 24 / 18 only, body 16 and 14, small 12, nothing else; weight 500 for UI, 600 section headings, 700 display;
72
+ spacing on the 4 px grid. Text contrast at least 4.5:1 (muted ink on a tinted ground fails first). No shadows in flow,
73
+ no gradients, no left accent stripes; state is a mark (glyph + one word), never a sentence.
74
+
75
+ Below 768 the sidebar becomes an offcanvas sheet with a top-bar trigger, a calendar becomes an agenda, list + detail
76
+ becomes list then push: draw one board at 768 or annotate. Dark mode is drawn or explicitly out of v1 (then no theme
77
+ toggle on any board).
78
+
79
+ ## One writer, and the gates
80
+
81
+ You are the one writer: reviewers report, you apply. After every round:
82
+
83
+ ```bash
84
+ pnpm design:build && pnpm design:check # lint + stale check, must be 0 problems
85
+ pnpm design:preview # overflow + axe per board (run heavy previews on the devbox)
86
+ ```
87
+
88
+ Quote both outputs, commit `src/` + `out/`, republish the canvas, and list every board added or changed with its
89
+ title. Then hand off to `app-factory-design-review`.
90
+
91
+ ## Output
92
+
93
+ The canvas link; the board list (file · title · page · states covered); a short design brief document in the pod (the
94
+ look decisions with each colour's one meaning, the fidelity numbers used, the sample world, open questions for the
95
+ person). Done when every page in the plan has its desktop board, its states and (if used on a phone) its phone
96
+ board, `design:check` is clean, and `design:preview` shows no overflow and no serious or critical axe issue.