@synap-core/workspace-templates 0.11.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 (249) 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 +189 -900
  57. package/dist/index.js +24654 -21639
  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 +41 -27
  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.template.test.ts +25 -19
  139. package/src/base.yaml +95 -39
  140. package/src/blockchain-ecosystem.yaml +1 -0
  141. package/src/brand-library.yaml +525 -14
  142. package/src/builder-dev-fold.template.test.ts +113 -0
  143. package/src/builder.yaml +798 -92
  144. package/src/business-model-catalog-description.test.ts +47 -0
  145. package/src/business-model-grp.template.test.ts +214 -0
  146. package/src/business-model.yaml +598 -0
  147. package/src/catalog-safety.test.ts +198 -0
  148. package/src/catalog.template-items.test.ts +75 -0
  149. package/src/catalog.ts +85 -2
  150. package/src/civic-france.yaml +102 -0
  151. package/src/concept-guard.test.ts +28 -8
  152. package/src/concept-guard.ts +2 -2
  153. package/src/content-creation.template.test.ts +52 -0
  154. package/src/content-creation.yaml +192 -0
  155. package/src/content-os.edit-loop.template.test.ts +210 -0
  156. package/src/content-os.publish-due-posts.template.test.ts +261 -0
  157. package/src/content-os.template.test.ts +322 -0
  158. package/src/content-os.video-takes.template.test.ts +338 -0
  159. package/src/content-os.work-a-take.template.test.ts +125 -0
  160. package/src/content-os.yaml +1830 -39
  161. package/src/content-studio-retired.template.test.ts +82 -0
  162. package/src/corpus-flow-validity.test.ts +4 -5
  163. package/src/crm-absorbs-outreach.template.test.ts +117 -0
  164. package/src/crm-build-plan.template.test.ts +128 -0
  165. package/src/crm-lists.template.test.ts +96 -0
  166. package/src/crm-messages-cadence.template.test.ts +164 -0
  167. package/src/crm-one-send-door.template.test.ts +65 -0
  168. package/src/crm.yaml +1456 -181
  169. package/src/decisions-wave.template.test.ts +186 -0
  170. package/src/define.ts +130 -17
  171. package/src/design-to-implementation.template.test.ts +94 -0
  172. package/src/dist-freshness.test.ts +97 -0
  173. package/src/domain-template-type.test.ts +75 -0
  174. package/src/ecosystem.yaml +27 -66
  175. package/src/enterprise-os.yaml +10 -134
  176. package/src/facecam-edit.audio-studio.test.ts +188 -0
  177. package/src/fal-generate-image.test.ts +200 -0
  178. package/src/fal-media-lab-pod-files.test.ts +180 -0
  179. package/src/finance.yaml +254 -1
  180. package/src/foundation.yaml +130 -28
  181. package/src/frame-host-modules.d.mts +6 -0
  182. package/src/frame-host-modules.mjs +58 -0
  183. package/src/generate.mjs +9 -3
  184. package/src/github-merge.test.ts +210 -0
  185. package/src/grants.yaml +57 -17
  186. package/src/hr.yaml +39 -6
  187. package/src/index.ts +36 -1
  188. package/src/intent.test.ts +161 -0
  189. package/src/internal-runbook.yaml +19 -1
  190. package/src/jev.test.ts +356 -0
  191. package/src/legal.yaml +33 -1
  192. package/src/life-os.yaml +65 -240
  193. package/src/lifecycle-coverage.test.ts +124 -0
  194. package/src/lifecycle-declarations.test.ts +252 -0
  195. package/src/lifecycle-presets.test.ts +468 -0
  196. package/src/lifecycle-presets.ts +494 -0
  197. package/src/lifecycle-stuck.test.ts +46 -0
  198. package/src/lifecycle-waits.parity.test.ts +319 -0
  199. package/src/marketing.yaml +108 -4
  200. package/src/meetings-knowledge.yaml +18 -0
  201. package/src/networking.yaml +23 -2
  202. package/src/operations.yaml +304 -4
  203. package/src/pipeline-views.template.test.ts +88 -0
  204. package/src/playbook-goal-placeholders.test.ts +57 -0
  205. package/src/postiz-contract.test.ts +134 -0
  206. package/src/presentation-declarations.test.ts +174 -0
  207. package/src/process-contract.validate.test.ts +352 -0
  208. package/src/project-management.yaml +39 -740
  209. package/src/publish-body.d.mts +29 -0
  210. package/src/publish-body.mjs +74 -0
  211. package/src/publish-body.test.ts +74 -0
  212. package/src/publish-official-lib.test.ts +176 -0
  213. package/src/replicate-rvm.test.ts +504 -0
  214. package/src/research-base.yaml +119 -20
  215. package/src/research-decision.yaml +60 -3
  216. package/src/reserved-profile-slugs.test.ts +83 -0
  217. package/src/retired-goal-kinds.test.ts +58 -0
  218. package/src/role-reference-and-step-domain.test.ts +192 -0
  219. package/src/seed-obligation.test.ts +176 -0
  220. package/src/send-message-maps.test.ts +227 -0
  221. package/src/shared-role-ssot.test.ts +42 -1
  222. package/src/ship-a-change.template.test.ts +177 -0
  223. package/src/skills.test.ts +170 -0
  224. package/src/social.yaml +85 -27
  225. package/src/space-packages.freshness.test.ts +97 -0
  226. package/src/space-packages.generated.ts +40 -0
  227. package/src/space-packages.test.ts +125 -0
  228. package/src/space-packages.ts +73 -0
  229. package/src/start.test.ts +188 -0
  230. package/src/task-intents.test.ts +293 -0
  231. package/src/templates.ts +21639 -21522
  232. package/src/types.ts +443 -60
  233. package/src/unipile-publish-post.test.ts +162 -0
  234. package/src/validate-flow.drift.test.ts +2 -3
  235. package/src/validate-flow.ts +32 -2
  236. package/src/validate-onboarding.test.ts +59 -0
  237. package/src/validate.test.ts +156 -3
  238. package/src/validate.ts +1384 -7
  239. package/src/wire-core.ts +231 -0
  240. package/src/wire.test.ts +159 -0
  241. package/src/wire.ts +107 -0
  242. package/src/__fixtures__/report-automation-flow.json +0 -393
  243. package/src/agent-fleet.yaml +0 -1645
  244. package/src/business-developer.template.test.ts +0 -351
  245. package/src/business-developer.yaml +0 -860
  246. package/src/content-studio.yaml +0 -361
  247. package/src/dev-dashboard.yaml +0 -990
  248. package/src/outreach-comms.yaml +0 -486
  249. package/src/the-arch.yaml +0 -201
@@ -0,0 +1,598 @@
1
+ # Business Model workspace template
2
+ #
3
+ # WHY THIS TEMPLATE EXISTS (read before adding another strategy pack):
4
+ # The nine-component business-model interrogation (porteur, offer, market,
5
+ # money, means, and the conventions binding them) maps almost entirely onto
6
+ # vocabulary that ALREADY EXISTS in this corpus — `mission`/`vision`/`value`
7
+ # (foundation), `audience`/`pain-point`/`positioning`/`offer` (foundation,
8
+ # shared + pod-scoped), `client`/`partner`/`lead` (foundation shared roles),
9
+ # and the whole IBIS apparatus of `question`/`hypothesis`/`decision`/`source`
10
+ # (research-base + research-decision). Minting a parallel `business-model-*`
11
+ # vocabulary would have been a vocabulary fork — the exact failure
12
+ # `concept-guard.ts` was written to catch.
13
+ #
14
+ # So this pack adds only what is genuinely MISSING, which is three things:
15
+ # 1. `convention` — the binding external rule the model rests on (an
16
+ # eligibility threshold, a deontological duty, a contractual floor). Not
17
+ # a decision (nobody chose it) and not a finding (it is not evidence, it
18
+ # is a constraint). Nothing in the corpus expressed this.
19
+ # 2. `projection` — a quantified scenario with its assumptions attached, so
20
+ # a number can be challenged by challenging what it assumed.
21
+ # 3. `rests_on` / `refutes` — the two edges that make a business model a
22
+ # GRAPH instead of a document. `rests_on` is deliberately NOT `depends_on`
23
+ # or `blocks`: those are acyclic scheduling edges, and a business model is
24
+ # legitimately circular (the offer rests on the means, the means rest on
25
+ # the money, the money rests on the offer). `rests_on` carries support and
26
+ # staleness, not sequencing, so a cycle is information rather than a bug.
27
+ #
28
+ # The porteur and funder ROLES it needs are declared in foundation.yaml, the
29
+ # shared-role SSOT — see the note there.
30
+ #
31
+ # THIS IS THE CANONICAL GRP (concept consolidation W4a, 2026-09-25). The method
32
+ # ships as a TRACK TEMPLATE — "Business Model (GRP)", `scope: project`, six
33
+ # steps, each naming the DOMAIN (workspace template slug) it is worked in — and
34
+ # the nine seeded questions are the GRP method's own set, one per component of
35
+ # its three pillars: GRP = Génération · Rémunération · Partage (founder decision
36
+ # A, 2026-09-28 — NOT the later "GRP #1 … #9" wedge/ICP/positioning set). They
37
+ # are copied verbatim from the founder's live pod-level rows so an install ADOPTS
38
+ # them (seed dedupe is `${kind}:${title}` in the target workspace OR among the
39
+ # user's pod-wide rows — services/definition-seeds.ts) instead of adding a
40
+ # second set. `convention` and `projection` are pod-wide kinds, so the GRP needs
41
+ # no workspace of its own: its entities are filed to the project by the track,
42
+ # not by where the session happened to run.
43
+
44
+ meta:
45
+ slug: business-model
46
+ domain: strategy
47
+ name: Business Model
48
+ description: "Business Model (GRP): a track template you run on a project. Six steps turn the model's nine component questions into evidence-backed decisions, conventions and projections."
49
+ icon: layout-grid
50
+ color: "#0EA5E9"
51
+ tags: [strategy, business-model, grp, ibis, viability]
52
+ isPublic: true
53
+
54
+ workspace:
55
+ name: Foundation
56
+ description: Adds business-model interrogation to the strategic substrate — what the model rests on, which conventions bind it, and which numbers assume what.
57
+ subtype: foundation
58
+
59
+ # ONE compose base only — `validate.ts` requires every compose dependency to
60
+ # equal `workspace.subtype`, which is correct: an overlay is layered into one
61
+ # workspace, and a thing cannot be layered into two. The business model belongs
62
+ # in Foundation, because its components ARE the strategic DNA. The evidence
63
+ # apparatus it borrows (hypothesis, source, finding) lives in the Research
64
+ # workspace and is reached by RELATION, not by merging two lenses into one.
65
+ dependencies:
66
+ - slug: foundation
67
+ relation: compose
68
+ reason: The model's components ARE the foundation vocabulary — mission, audience, pain-point, positioning, offer, and the client/partner/porteur/funder roles. This pack interrogates them; it does not restate them.
69
+
70
+ profiles:
71
+ # ── Re-declared from dependencies, verbatim-compatible ─────────────────────
72
+ # Re-declaring a composed profile is how a pack states what it operates on;
73
+ # the apply layer resolves shared slugs to the ONE pod-wide row. Shapes here
74
+ # are strict subsets of the owner's shape, so no overlay conflict arises.
75
+ - slug: question
76
+ displayName: Question
77
+ icon: help-circle
78
+ profileKind: kind
79
+ properties:
80
+ - slug: questionStatus
81
+ label: Status
82
+ valueType: string
83
+ inputType: select
84
+ enumValues: [open, exploring, answered, abandoned]
85
+ # `wedge-stage` (the C→A wedge ladder) left the template with the
86
+ # "GRP #" set (founder decision A, 2026-09-28): it is one venture's go-to-
87
+ # market ladder, not part of the Génération / Rémunération / Partage
88
+ # method, and only "GRP #1" ever carried it. The live Foundation overlay
89
+ # is untouched — reconcile is additive.
90
+ - slug: decision
91
+ displayName: Decision
92
+ icon: gavel
93
+ profileKind: kind
94
+ properties:
95
+ - slug: decisionStatus
96
+ label: Status
97
+ valueType: string
98
+ inputType: select
99
+ enumValues: [proposed, accepted, superseded, rejected]
100
+
101
+ # ── What this pack actually adds ───────────────────────────────────────────
102
+ - slug: convention
103
+ displayName: Convention
104
+ icon: scale
105
+ color: rose
106
+ description: A binding rule the model must satisfy and did not choose — an eligibility threshold, a professional duty, a contractual floor, a platform policy. Distinct from a decision (nobody decided it) and from a finding (it constrains rather than informs).
107
+ # Pod-wide kind (same two axes as foundation's audience/offer): a GRP step
108
+ # worked in another domain (a Finance or Research session) must still be
109
+ # able to resolve and file a convention — it belongs to the project's
110
+ # model, not to the workspace the session ran in.
111
+ scope: shared
112
+ entityScope: pod
113
+ profileKind: kind
114
+ properties:
115
+ - slug: rule
116
+ label: The Rule
117
+ valueType: string
118
+ inputType: textarea
119
+ description: State the constraint in the terms the issuer uses, not in a paraphrase. Paraphrase is where eligibility collisions hide.
120
+ - slug: issuer
121
+ label: Issued By
122
+ valueType: string
123
+ inputType: text
124
+ description: Who imposes it — a regulator, a funder, an ordre professionnel, a platform, a counterparty.
125
+ - slug: conventionType
126
+ label: Type
127
+ valueType: string
128
+ inputType: select
129
+ enumValues:
130
+ [
131
+ regulatory,
132
+ deontological,
133
+ eligibility,
134
+ contractual,
135
+ platform,
136
+ fiscal,
137
+ other,
138
+ ]
139
+ - slug: bindingStatus
140
+ label: Binding Status
141
+ valueType: string
142
+ inputType: select
143
+ enumValues: [verified, assumed, contested, expired]
144
+ description: "`assumed` is the dangerous default — it means nobody has read the source text yet."
145
+ - slug: sourceReference
146
+ label: Source Reference
147
+ valueType: string
148
+ inputType: text
149
+ description: The cahier des charges, article, or guide this comes from. A convention with no reference is an assumption wearing a rule's clothes.
150
+ - slug: expiresAt
151
+ label: Expires / Review By
152
+ valueType: date
153
+ inputType: date
154
+ - slug: consequenceIfBreached
155
+ label: Consequence If Breached
156
+ valueType: string
157
+ inputType: textarea
158
+
159
+ - slug: projection
160
+ displayName: Projection
161
+ icon: trending-up
162
+ color: violet
163
+ description: A quantified scenario with its assumptions attached. The number is never the artifact — the assumptions are, because that is the only part anyone can argue with.
164
+ # Pod-wide for the same reason as `convention`: the money step runs in
165
+ # Finance, and its projections must land on the project's model.
166
+ scope: shared
167
+ entityScope: pod
168
+ profileKind: kind
169
+ properties:
170
+ - slug: scenario
171
+ label: Scenario
172
+ valueType: string
173
+ inputType: select
174
+ enumValues: [pessimistic, base, optimistic]
175
+ - slug: horizon
176
+ label: Horizon
177
+ valueType: string
178
+ inputType: select
179
+ enumValues: [month, quarter, year, three-year]
180
+ - slug: assumptions
181
+ label: Assumptions
182
+ valueType: string
183
+ inputType: textarea
184
+ description: Every input this number needs to be true. When one changes, whatever rests on this projection goes stale.
185
+ - slug: revenueEstimate
186
+ label: Revenue Estimate
187
+ valueType: number
188
+ inputType: number
189
+ - slug: costEstimate
190
+ label: Cost Estimate
191
+ valueType: number
192
+ inputType: number
193
+ - slug: breakEvenUnits
194
+ label: Break-Even Units
195
+ valueType: number
196
+ inputType: number
197
+ - slug: confidence
198
+ label: Confidence
199
+ valueType: string
200
+ inputType: select
201
+ enumValues: [low, medium, high]
202
+
203
+ # ── The GRP interrogation marker (founder decision D4: joins the template) ──
204
+ # A workspace role on `question`: marks a question as one of the nine GRP
205
+ # interrogations and carries its number, its GRP pillar and how good the
206
+ # evidence behind its answer is. Property slugs verbatim from the live
207
+ # Foundation role (snake_case as live). GRP = Génération · Rémunération ·
208
+ # Partage — the live role's "Growth Research Positioning" was an agent's
209
+ # invented expansion and is corrected here. Seeds cannot carry facets, so a
210
+ # fresh install gets the role and the nine questions; the first GRP session
211
+ # attaches it. The seeds carry their pillar in `tags` regardless.
212
+ - slug: grp-interrogation
213
+ displayName: GRP Interrogation
214
+ description: "Marks a Question as one of the nine GRP business-model interrogations (GRP = Génération · Rémunération · Partage). Carries the interrogation number (1-9), its GRP pillar (generation, remuneration or sharing), and the quality of the evidence behind the answer."
215
+ profileKind: role
216
+ applicableKinds: [question]
217
+ properties:
218
+ - slug: interrogation_number
219
+ label: Interrogation number
220
+ valueType: number
221
+ inputType: number
222
+ - slug: grp_domain
223
+ label: GRP pillar
224
+ valueType: string
225
+ inputType: text
226
+ description: "generation (Génération), remuneration (Rémunération) or sharing (Partage) — the same word the question carries in its tags."
227
+ - slug: evidence_quality
228
+ label: Evidence quality
229
+ valueType: string
230
+ inputType: text
231
+
232
+ # Relation TYPE vocabulary. Declared here (not as bare entityLinks) because
233
+ # these two carry description + inverse labels that the entity-link path drops.
234
+ relationDefs:
235
+ - slug: rests_on
236
+ displayName: Rests On
237
+ description: "The source depends on the target for its validity — not for its scheduling. Cycles are LEGAL and meaningful here: a business model is mutually supporting by nature, and forcing it into an acyclic dependency graph destroys the information. When the target changes, everything resting on it is stale until re-checked."
238
+ isDirectional: true
239
+ uiHints:
240
+ category: reference
241
+ inverseLabel: Supports
242
+ - slug: refutes
243
+ displayName: Refutes
244
+ description: The source is evidence that the target is false. Kept as a first-class edge so a refuted component stays in the graph with its refutation attached, instead of being quietly deleted — the reason a road was not taken is worth more than the road.
245
+ isDirectional: true
246
+ uiHints:
247
+ category: reference
248
+ inverseLabel: Refuted By
249
+
250
+ entityLinks:
251
+ - sourceProfileSlug: offer
252
+ targetProfileSlug: convention
253
+ type: rests_on
254
+ label: Rests on
255
+ - sourceProfileSlug: offer
256
+ targetProfileSlug: audience
257
+ type: rests_on
258
+ label: Rests on
259
+ - sourceProfileSlug: projection
260
+ targetProfileSlug: offer
261
+ type: rests_on
262
+ label: Rests on
263
+ - sourceProfileSlug: decision
264
+ targetProfileSlug: convention
265
+ type: rests_on
266
+ label: Rests on
267
+ - sourceProfileSlug: decision
268
+ targetProfileSlug: projection
269
+ type: rests_on
270
+ label: Rests on
271
+ - sourceProfileSlug: convention
272
+ targetProfileSlug: offer
273
+ type: refutes
274
+ label: Refutes
275
+ - sourceProfileSlug: convention
276
+ targetProfileSlug: audience
277
+ type: refutes
278
+ label: Refutes
279
+ - sourceProfileSlug: convention
280
+ targetProfileSlug: question
281
+ type: rests_on
282
+ label: Rests on
283
+
284
+ views:
285
+ - name: Conventions
286
+ slug: business-model-conventions
287
+ type: table
288
+ scopeProfileSlug: convention
289
+ description: Every rule the model must satisfy, who imposes it, and whether anyone has actually verified it.
290
+ defaultView: true
291
+ config:
292
+ columns: [title, conventionType, issuer, bindingStatus, expiresAt]
293
+ - name: Unverified Conventions
294
+ slug: business-model-assumed-conventions
295
+ type: list
296
+ scopeProfileSlug: convention
297
+ description: Conventions still marked assumed or contested — the model rests on these and nobody has read the source text.
298
+ config:
299
+ filters:
300
+ - field: bindingStatus
301
+ operator: in
302
+ value: [assumed, contested]
303
+ - name: Projections
304
+ slug: business-model-projections
305
+ type: table
306
+ scopeProfileSlug: projection
307
+ description: Scenarios with their assumptions in the open, so a number can be argued with.
308
+ config:
309
+ columns:
310
+ [title, scenario, horizon, revenueEstimate, costEstimate, confidence]
311
+ - name: Open Interrogation
312
+ slug: business-model-open-questions
313
+ type: kanban
314
+ scopeProfileSlug: question
315
+ groupBy: questionStatus
316
+ description: The nine component questions and everything they spawned, by status.
317
+
318
+ # ── Seeds: the interrogation, not fake data ────────────────────────────────
319
+ # A strategy template that seeds example companies teaches nothing and gets
320
+ # deleted. What is actually reusable is the QUESTION SET — the workspace should
321
+ # arrive with the model's nine interrogations already open, so the first step
322
+ # has somewhere to start and the kanban is not an empty box.
323
+ #
324
+ # The GRP method's nine questions, three per pillar — Génération (porteur,
325
+ # value proposition, value fabrication), Rémunération (revenue sources, volume
326
+ # and pricing, performance), Partage (stakeholders, conventions, ecosystem).
327
+ # VERBATIM from the founder's live pod-level rows (workspaceId NULL, read
328
+ # 2026-09-28): title, the question text in `properties.title`, `description`,
329
+ # `tags` and `questionStatus`. The PILLAR is the live tag `generation` /
330
+ # `remuneration` / `sharing` — that is how a step (or an agent) finds a pillar's
331
+ # questions; no new field. Only `askedAt` (2026-09-15, the day the founder asked
332
+ # them) is left out: a fixed historical date on a fresh install would be false,
333
+ # and an adopted row keeps its own anyway (adoption never rewrites properties).
334
+ # Do not paraphrase a title — the seed dedupe key is `${kind}:${title}`, so a
335
+ # reworded title seeds a SECOND set beside the live one instead of adopting it
336
+ # (asserted by business-model-grp.template.test.ts, and through the real helper
337
+ # by synap-backend compose-overlay.seeds.pglite.test.ts).
338
+ #
339
+ # Which STEP of the method each question serves is carried by the step itself:
340
+ # its `suggestedTasks` open with the exact titles of its questions (see the
341
+ # playbook below; porteur → Porteur; offer_buyer → Value proposition + Value
342
+ # fabrication; conventions_cost → Stakeholders + Conventions + Ecosystem;
343
+ # money_means → Revenue sources + Volume and pricing; refutation → Performance).
344
+ seedEntities:
345
+ - profileSlug: question
346
+ title: "Porteur — what does the founder bring that cannot be hired, and what does the venture require of them personally?"
347
+ properties:
348
+ title: "Porteur — what does the founder bring that cannot be hired, and what does the venture require of them personally?"
349
+ description: "Generation / porteur. Tests intuitu personae: credentials, licences, reputation and relationships that are attached to a named person rather than to the company. Answering this exposes load-bearing single points of failure that a capability table hides. Circular: the porteur's standing determines which stakeholders will engage, and the stakeholders engaged determine what standing the porteur must hold."
350
+ tags: [business-model, grp, generation, method-question]
351
+ questionStatus: open
352
+ - profileSlug: question
353
+ title: "Value proposition — for whom is this indispensable, and what do they stop doing once they have it?"
354
+ properties:
355
+ title: "Value proposition — for whom is this indispensable, and what do they stop doing once they have it?"
356
+ description: "Generation / value proposition. The second half is the real test: a proposition nobody stops anything for is a preference, not a need. Circular: the conventions the venture is bound by constrain what may be promised, and the promise made determines which conventions become binding."
357
+ tags: [business-model, grp, generation, method-question]
358
+ questionStatus: open
359
+ - profileSlug: question
360
+ title: "Value fabrication — what is the chain that actually produces the value, and which link do we own?"
361
+ properties:
362
+ title: "Value fabrication — what is the chain that actually produces the value, and which link do we own?"
363
+ description: "Generation / fabrication de la valeur. Forces the distinction between the activity performed and the value delivered, and names the links owned by others. A venture that owns no link is a broker; a venture that owns every link is usually lying about cost."
364
+ tags: [business-model, grp, generation, method-question]
365
+ questionStatus: open
366
+ - profileSlug: question
367
+ title: "Revenue sources — who pays, for which unit, and why that unit rather than another?"
368
+ properties:
369
+ title: "Revenue sources — who pays, for which unit, and why that unit rather than another?"
370
+ description: "Remuneration / sources de revenus. The payer is frequently not the beneficiary, and the billing unit encodes a theory of value that is rarely stated. Circular: the segment chosen determines which revenue source is available, and the revenue source chosen re-selects the viable segment."
371
+ tags: [business-model, grp, remuneration, method-question]
372
+ questionStatus: open
373
+ - profileSlug: question
374
+ title: "Volume and pricing — what volume at what price clears the cost base, and is that volume reachable in this market?"
375
+ properties:
376
+ title: "Volume and pricing — what volume at what price clears the cost base, and is that volume reachable in this market?"
377
+ description: "Remuneration / volume et prix. Separates the arithmetic question from the market question; a model can be internally coherent and still require a volume the addressable market cannot supply."
378
+ tags: [business-model, grp, remuneration, method-question]
379
+ questionStatus: open
380
+ - profileSlug: question
381
+ title: "Performance — which number tells us the model works, and what observation would falsify it?"
382
+ properties:
383
+ title: "Performance — which number tells us the model works, and what observation would falsify it?"
384
+ description: "Remuneration / performance. Requires a stopping rule stated before the evidence arrives, while it can still be set honestly. Circular: price assumptions drive the performance target, and observed performance revises the pricing thesis."
385
+ tags: [business-model, grp, remuneration, method-question, falsifiable]
386
+ questionStatus: open
387
+ - profileSlug: question
388
+ title: "Stakeholders — who must say yes for this to exist, and what does each of them need in return?"
389
+ properties:
390
+ title: "Stakeholders — who must say yes for this to exist, and what does each of them need in return?"
391
+ description: "Sharing / parties prenantes. Covers actors with veto power who are not customers: regulators, orders and professional bodies, funders, referencing schemes, platform gatekeepers. Their consent is a precondition, not a sales outcome."
392
+ tags: [business-model, grp, sharing, method-question]
393
+ questionStatus: open
394
+ - profileSlug: question
395
+ title: "Conventions — which rules bind us, who enforces them, and which are mandatory rather than advisory?"
396
+ properties:
397
+ title: "Conventions — which rules bind us, who enforces them, and which are mandatory rather than advisory?"
398
+ description: "Sharing / conventions. Deontological codes, eligibility thresholds, neutrality requirements and conflict-of-interest rules that constrain the model from outside. The binding-versus-advisory distinction decides whether a convention is a design constraint or a preference, and enforcement determines the cost of breach."
399
+ tags: [business-model, grp, sharing, method-question, conventions]
400
+ questionStatus: open
401
+ - profileSlug: question
402
+ title: "Ecosystem — what does the venture give back, and what breaks if we extract without returning?"
403
+ properties:
404
+ title: "Ecosystem — what does the venture give back, and what breaks if we extract without returning?"
405
+ description: "Sharing / partage et ecosysteme. The reciprocity test that distinguishes a durable position from extraction. Answering it usually surfaces the convention or stakeholder relationship that fails first under pressure."
406
+ tags: [business-model, grp, sharing, method-question]
407
+ questionStatus: open
408
+
409
+ # The method's dependency order, declared: a downstream pillar RESTS ON the
410
+ # upstream one — Rémunération rests on Génération (you are paid for value you
411
+ # generate), Partage rests on Rémunération and Génération (you share what you
412
+ # capture, with those the porteur can engage). Plus exactly the three cycles the
413
+ # questions' own descriptions name ("Circular: …"): value proposition ⇄
414
+ # conventions, porteur ⇄ stakeholders, volume and pricing ⇄ performance. Cycles
415
+ # are legal for `rests_on` — that is why this pack does not use `depends_on`.
416
+ suggestedRelations:
417
+ # Génération (internal): the chain produces what the proposition promises.
418
+ - sourceRef: "Value fabrication — what is the chain that actually produces the value, and which link do we own?"
419
+ targetRef: "Value proposition — for whom is this indispensable, and what do they stop doing once they have it?"
420
+ type: rests_on
421
+ # Rémunération rests on Génération.
422
+ - sourceRef: "Revenue sources — who pays, for which unit, and why that unit rather than another?"
423
+ targetRef: "Value proposition — for whom is this indispensable, and what do they stop doing once they have it?"
424
+ type: rests_on
425
+ - sourceRef: "Volume and pricing — what volume at what price clears the cost base, and is that volume reachable in this market?"
426
+ targetRef: "Value fabrication — what is the chain that actually produces the value, and which link do we own?"
427
+ type: rests_on
428
+ - sourceRef: "Volume and pricing — what volume at what price clears the cost base, and is that volume reachable in this market?"
429
+ targetRef: "Revenue sources — who pays, for which unit, and why that unit rather than another?"
430
+ type: rests_on
431
+ - sourceRef: "Performance — which number tells us the model works, and what observation would falsify it?"
432
+ targetRef: "Volume and pricing — what volume at what price clears the cost base, and is that volume reachable in this market?"
433
+ type: rests_on
434
+ # Partage rests on Génération / Rémunération.
435
+ - sourceRef: "Stakeholders — who must say yes for this to exist, and what does each of them need in return?"
436
+ targetRef: "Porteur — what does the founder bring that cannot be hired, and what does the venture require of them personally?"
437
+ type: rests_on
438
+ - sourceRef: "Stakeholders — who must say yes for this to exist, and what does each of them need in return?"
439
+ targetRef: "Revenue sources — who pays, for which unit, and why that unit rather than another?"
440
+ type: rests_on
441
+ - sourceRef: "Conventions — which rules bind us, who enforces them, and which are mandatory rather than advisory?"
442
+ targetRef: "Value proposition — for whom is this indispensable, and what do they stop doing once they have it?"
443
+ type: rests_on
444
+ - sourceRef: "Ecosystem — what does the venture give back, and what breaks if we extract without returning?"
445
+ targetRef: "Stakeholders — who must say yes for this to exist, and what does each of them need in return?"
446
+ type: rests_on
447
+ # The three named cycles (the back edges).
448
+ - sourceRef: "Value proposition — for whom is this indispensable, and what do they stop doing once they have it?"
449
+ targetRef: "Conventions — which rules bind us, who enforces them, and which are mandatory rather than advisory?"
450
+ type: rests_on
451
+ - sourceRef: "Porteur — what does the founder bring that cannot be hired, and what does the venture require of them personally?"
452
+ targetRef: "Stakeholders — who must say yes for this to exist, and what does each of them need in return?"
453
+ type: rests_on
454
+ - sourceRef: "Volume and pricing — what volume at what price clears the cost base, and is that volume reachable in this market?"
455
+ targetRef: "Performance — which number tells us the model works, and what observation would falsify it?"
456
+ type: rests_on
457
+
458
+ # ── The method: a TRACK TEMPLATE (scope project) ───────────────────────────
459
+ # The six steps of the founder's approved live method (73848ca9 on the pod),
460
+ # verbatim: goals, suggestedTasks, categories, and the open-ended `maintain`
461
+ # step. Two additions. (1) Each step's suggestedTasks OPEN with the exact titles
462
+ # of the seeded GRP questions it answers (the step → question map; a stage
463
+ # session is offered its goal + suggestedTasks, so the step names its questions
464
+ # by the same title the seed dedupe keys on). (2) `domain` per step — the workspace TEMPLATE slug the
465
+ # step is worked in (startStageSession resolves it to the project's installed
466
+ # workspace, and falls back to the project home when it is missing). ONE domain
467
+ # per step, the primary one:
468
+ # porteur → foundation the porteur role + non-goals/constraints are Foundation's.
469
+ # offer_buyer → foundation offer/audience/pain-point live there; buyer
470
+ # companies get the pod-wide `lead` role, which
471
+ # attaches from any workspace (W2b), so CRM is
472
+ # not needed to run this step.
473
+ # conventions_cost → foundation the Conventions + Projections views this pack
474
+ # installs live in Foundation; both kinds are
475
+ # pod-wide, so the unit-cost projection still
476
+ # shows in Finance.
477
+ # money_means → finance money before revenue = revenue-stream/budget/
478
+ # expense, Finance's kinds.
479
+ # refutation → research-base a falsifiable test is a hypothesis with a
480
+ # date; hypothesis/finding live in Research.
481
+ # maintain → foundation the Deprecation Check starts from a changed
482
+ # Foundation element.
483
+ # The session-scoped "Business Model Interrogation" this replaces is gone; the
484
+ # live-only copy on the founder's pod (f93b155b) is retired by a governed archive.
485
+ playbooks:
486
+ - name: Business Model (GRP)
487
+ description: The business-model method, run as a TRACK on a project (project-scoped). Walks the nine component questions as stages, resolves each into a decision backed by evidence, and records the conventions and projections the model rests on, including the cycles. Stages can be re-entered — the model is maintained, not finished.
488
+ goalTemplate: "Interrogate the business model of this project and record what it rests on: resolve each component question into a decision with evidence, keep conventions 'assumed' until their source is read, give every number a projection with its assumptions, and wire the graph with rests_on (cycles included)."
489
+ icon: layout-grid
490
+ scope: project
491
+ stages:
492
+ - key: porteur
493
+ name: Porteur & constraints
494
+ category: started
495
+ domain: foundation
496
+ goal: Name who the model rests on and what their situation forbids.
497
+ suggestedTasks:
498
+ - "Porteur — what does the founder bring that cannot be hired, and what does the venture require of them personally?"
499
+ - Who is the porteur, and what does the model rest on them for?
500
+ - What does the porteur's situation forbid?
501
+ - key: offer_buyer
502
+ name: Offer & buyer
503
+ category: started
504
+ domain: foundation
505
+ goal: State the offer as the problem it ends, and separate payer, user and beneficiary.
506
+ suggestedTasks:
507
+ - "Value proposition — for whom is this indispensable, and what do they stop doing once they have it?"
508
+ - "Value fabrication — what is the chain that actually produces the value, and which link do we own?"
509
+ - What is the offer, stated as the problem it ends?
510
+ - Who exactly buys it, and who merely benefits from it?
511
+ - key: conventions_cost
512
+ name: Conventions & unit cost
513
+ category: started
514
+ domain: foundation
515
+ goal: Read the rules that bind the model and cost one unit of delivery.
516
+ suggestedTasks:
517
+ - "Stakeholders — who must say yes for this to exist, and what does each of them need in return?"
518
+ - "Conventions — which rules bind us, who enforces them, and which are mandatory rather than advisory?"
519
+ - "Ecosystem — what does the venture give back, and what breaks if we extract without returning?"
520
+ - Which conventions bind this model, and which are still assumed?
521
+ - What does one unit of delivery actually cost to produce?
522
+ - key: money_means
523
+ name: Money & means
524
+ category: started
525
+ domain: finance
526
+ goal: Find the money before revenue and the means that must exist first; record the circularity.
527
+ suggestedTasks:
528
+ - "Revenue sources — who pays, for which unit, and why that unit rather than another?"
529
+ - "Volume and pricing — what volume at what price clears the cost base, and is that volume reachable in this market?"
530
+ - Where does the money come from before revenue does?
531
+ - What means — people, tools, licences, premises — must exist first?
532
+ - key: refutation
533
+ name: Refutation test
534
+ category: started
535
+ domain: research-base
536
+ goal: Set the falsifiable observation and its date while it can still be set honestly.
537
+ suggestedTasks:
538
+ - "Performance — which number tells us the model works, and what observation would falsify it?"
539
+ - What observation would refute this model, and by when?
540
+ - List conventions still 'assumed' and projections with low confidence.
541
+ - key: maintain
542
+ name: Keep the model current
543
+ category: started
544
+ domain: foundation
545
+ indefinite: true
546
+ goal: When a foundation element changes, find what rests on it and re-check it (GRP Deprecation Check).
547
+ suggestedTasks:
548
+ - Run 'GRP Deprecation Check' when positioning, offer, value or a non-goal changes.
549
+
550
+ # The `maintain` step's work template (founder decision D4: joins the
551
+ # template). A SESSION template, verbatim from the live Foundation playbook.
552
+ - name: GRP Deprecation Check
553
+ description: Cross-workspace GRP deprecation check. When a Foundation element (positioning, differentiator, value, non-goal) is updated, this playbook finds linked entities in Radar, Brand, CRM, Content, Operations and creates tasks for owners. Non-Architech-specific — reusable for any venture using the GRP framework.
554
+ goalTemplate: "Check if {updated_part} deprecates linked GRP parts: detect cross-workspace dependencies, notify owners, plan updates, verify resolution"
555
+ # `{name}` is what a run substitutes; `{{name}}` never was (see
556
+ # playbook-goal-placeholders.test.ts). Declared so the run asks for it.
557
+ params:
558
+ - name: updated_part
559
+ type: text
560
+ label: Foundation element that changed
561
+ required: true
562
+ icon: refresh-cw
563
+ stages:
564
+ - key: detect_impact
565
+ name: Detect Impact
566
+ category: started
567
+ - key: notify_owners
568
+ name: Notify Owners
569
+ category: started
570
+ - key: plan_update
571
+ name: Plan Update
572
+ category: started
573
+ - key: verify
574
+ name: Verify Resolution
575
+ category: started
576
+
577
+ # Founder decision D3: no shortcut on `question` (a question is answered inside
578
+ # a step of the method, not by launching the method from it). The convention
579
+ # shortcut points at the method.
580
+ actionPlacements:
581
+ - profileSlug: convention
582
+ surface: entity-detail
583
+ kind: playbook
584
+ ref: Business Model (GRP)
585
+ label: Re-check what rests on this
586
+
587
+ integrations:
588
+ - templateKey: research-methods
589
+ - templateKey: exa
590
+
591
+ # ── taskIntents — WHAT THIS WORKSPACE NEEDS TO FUNCTION ───────────────────
592
+ # Closed vocabulary: `@synap-core/types/capability-intents` (pod migrations
593
+ # 0283/0284). DERIVED from the declared intents of this template's own
594
+ # `integrations` capability packs — not hand-guessed. Checked at authoring
595
+ # time by `validateTemplate` (`task-intent-unknown`) and by
596
+ # `src/task-intents.test.ts`.
597
+ taskIntents:
598
+ - search_external