@synap-core/workspace-templates 0.4.0 → 0.6.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.
@@ -10,6 +10,21 @@ meta:
10
10
  tags: [marketing, crm, outreach, leads, campaigns]
11
11
  isPublic: true
12
12
 
13
+ # SSOT ordering guarantee — this template REFERENCES foundation's pod-wide
14
+ # shared `lead` role. The apply engine seeds a shared profile's pod-wide BASE
15
+ # property body from whichever template creates it FIRST, and adds a REUSING
16
+ # template's extra props as workspace OVERLAYS. Without this dependency,
17
+ # marketing-first would make the pod-wide `lead` base marketing's 10-prop body
18
+ # for EVERY workspace. Requiring foundation makes the resolver install it first
19
+ # (deps-first), so the base is always foundation's SSOT body (leadStage, notes)
20
+ # and marketing's extras stay per-workspace overlays. `require`, not `compose`:
21
+ # foundation is a real workspace, not an overlay.
22
+ dependencies:
23
+ - slug: foundation
24
+ kind: workspace
25
+ relation: require
26
+ reason: "Provides the pod-wide lead role vocabulary (leadStage) this workspace reuses."
27
+
13
28
  workspace:
14
29
  name: Marketing Campaign OS
15
30
  description: "Track leads, manage campaigns, and let AI help run your outreach. Contacts, pipeline, tasks, and AI briefings — all connected."
@@ -20,6 +35,8 @@ workspace:
20
35
  - marketing.contacts
21
36
  - marketing.leads
22
37
  sourceRoles:
38
+ brand: consumer
39
+ content: consumer
23
40
  marketing: provider
24
41
 
25
42
  profiles:
@@ -80,6 +97,9 @@ profiles:
80
97
  color: blue
81
98
  description: "A person in your marketing contact list."
82
99
  semanticSlug: marketing.contact
100
+ profileKind: role
101
+ applicableKinds:
102
+ - person
83
103
  properties:
84
104
  - slug: contact-email
85
105
  label: Email
@@ -117,19 +137,26 @@ profiles:
117
137
  valueType: string
118
138
  inputType: text
119
139
 
140
+ # `scope: shared` dedups to the ONE pod-wide `lead` profile seeded by
141
+ # foundation.yaml (SSOT for leadStage). Ordering is guaranteed by the
142
+ # `require: foundation` dependency above — foundation always installs first,
143
+ # so the pod-wide BASE body is always foundation's and the props below are
144
+ # always workspace OVERLAYS on top of it. That is the legitimate extension
145
+ # mechanism: EXTRA props are fine. What is NOT fine is REDECLARING a prop
146
+ # foundation already owns (e.g. `leadStage`) with a divergent enum/default —
147
+ # that is base drift, and the SSOT tripwire fails on it.
148
+ # (Standards reference inherited base props like `leadStage` directly.)
120
149
  - slug: lead
121
150
  displayName: Lead
122
151
  icon: user-plus
123
152
  color: green
124
153
  description: "A potential customer or partner contact in your pipeline"
125
154
  semanticSlug: marketing.lead
155
+ scope: shared
156
+ profileKind: role
157
+ applicableKinds:
158
+ - person
126
159
  properties:
127
- - slug: lead-stage
128
- label: Stage
129
- valueType: string
130
- inputType: select
131
- enumValues: [new, contacted, interested, qualified, demo, proposal, converted, lost]
132
- constraints: { defaultValue: new }
133
160
  - slug: lead-source
134
161
  label: Source
135
162
  valueType: string
@@ -164,7 +191,7 @@ profiles:
164
191
  label: Last Contacted
165
192
  valueType: date
166
193
  inputType: date
167
- - slug: lead-notes
194
+ - slug: notes
168
195
  label: Notes
169
196
  valueType: string
170
197
  inputType: textarea
@@ -190,7 +217,7 @@ views:
190
217
  slug: lead-pipeline
191
218
  type: kanban
192
219
  scopeProfileSlug: lead
193
- groupBy: lead-stage
220
+ groupBy: leadStage
194
221
  description: "Lead pipeline kanban by stage."
195
222
 
196
223
  onboarding:
@@ -249,7 +276,7 @@ onboarding:
249
276
  - profileSlug: lead
250
277
  what: A few representative leads already in motion, placed at their true pipeline stage.
251
278
  cardinality: several
252
- keyFields: [lead-stage, lead-source, lead-company]
279
+ keyFields: [leadStage, lead-source, lead-company]
253
280
  - profileSlug: contact
254
281
  what: Key marketing contacts — the people already on the list and how they got there.
255
282
  cardinality: few