@elevasis/sdk 1.26.0 → 1.26.1

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.
package/dist/cli.cjs CHANGED
@@ -37181,15 +37181,55 @@ var ResourceMappingSchema = DisplayMetadataSchema.extend({
37181
37181
 
37182
37182
  // ../core/src/organization-model/domains/branding.ts
37183
37183
  var OrganizationModelBrandingSchema = external_exports.object({
37184
+ /**
37185
+ * @deprecated Prefer `identity.organizationName`; branding retains it for back-compat.
37186
+ * Legacy tenants that have not set `identity.organizationName` fall back to this field.
37187
+ */
37184
37188
  organizationName: LabelSchema,
37189
+ /**
37190
+ * @deprecated Prefer `identity.productName`; branding retains it for back-compat.
37191
+ * Legacy tenants that have not set `identity.productName` fall back to this field.
37192
+ */
37185
37193
  productName: LabelSchema,
37194
+ /**
37195
+ * @deprecated Prefer `identity.shortName`; branding retains it for back-compat.
37196
+ * Legacy tenants that have not set `identity.shortName` fall back to this field.
37197
+ */
37186
37198
  shortName: external_exports.string().trim().min(1).max(40),
37199
+ /**
37200
+ * @deprecated Prefer `identity.description`; branding retains it for back-compat.
37201
+ * Legacy tenants that have not set `identity.description` fall back to this field.
37202
+ */
37187
37203
  description: DescriptionSchema.optional(),
37188
37204
  logos: external_exports.object({
37189
37205
  light: external_exports.string().trim().min(1).max(2048).optional(),
37190
37206
  dark: external_exports.string().trim().min(1).max(2048).optional()
37191
- }).default({})
37192
- });
37207
+ }).default({}),
37208
+ /**
37209
+ * Brand voice — how the organization communicates. Plain-language description
37210
+ * of tone, register, and personality (e.g. "Direct and human — no jargon").
37211
+ * Max 280 characters.
37212
+ */
37213
+ voice: external_exports.string().trim().max(280).optional(),
37214
+ /**
37215
+ * Brand tagline or positioning statement — the memorable one-liner that
37216
+ * captures the brand's promise or differentiator. Max 200 characters.
37217
+ */
37218
+ tagline: external_exports.string().trim().max(200).optional(),
37219
+ /**
37220
+ * Core brand values — an ordered list of principles the organization stands
37221
+ * for (e.g. ["Transparency", "Craftsmanship", "Velocity"]). Each entry must
37222
+ * be a non-empty trimmed string.
37223
+ */
37224
+ values: external_exports.array(external_exports.string().trim().min(1)).optional(),
37225
+ /**
37226
+ * ID of the active UI theme preset from the UI theme-presets registry.
37227
+ * The UI layer resolves this to colors and typography via `usePresetsContext()`.
37228
+ * Free-form string — validation and fallback state are handled at the UI layer.
37229
+ * Min 1, max 64 characters.
37230
+ */
37231
+ themePresetId: external_exports.string().trim().min(1).max(64).optional()
37232
+ }).passthrough();
37193
37233
  var DEFAULT_ORGANIZATION_MODEL_BRANDING = {
37194
37234
  organizationName: "Default Organization",
37195
37235
  productName: "Organization OS",
@@ -37312,8 +37352,33 @@ var IdentityDomainSchema = external_exports.object({
37312
37352
  * background. Populated by /setup; surfaced to agents as organizational context.
37313
37353
  * Optional — many projects have no external client.
37314
37354
  */
37315
- clientBrief: external_exports.string().trim().default("")
37316
- });
37355
+ clientBrief: external_exports.string().trim().default(""),
37356
+ /**
37357
+ * Display name of the organization as shown to end users.
37358
+ * Recommended placement for display naming — prefer this over the deprecated
37359
+ * `branding.organizationName`. Falls back to `branding.organizationName` for
37360
+ * legacy tenants that have not yet migrated.
37361
+ */
37362
+ organizationName: LabelSchema.optional(),
37363
+ /**
37364
+ * Display name of the primary product or platform.
37365
+ * Recommended placement for display naming — prefer this over the deprecated
37366
+ * `branding.productName`. Falls back to `branding.productName` for legacy tenants.
37367
+ */
37368
+ productName: LabelSchema.optional(),
37369
+ /**
37370
+ * Short abbreviated name used in space-constrained UI surfaces (max 40 chars).
37371
+ * Recommended placement for display naming — prefer this over the deprecated
37372
+ * `branding.shortName`. Falls back to `branding.shortName` for legacy tenants.
37373
+ */
37374
+ shortName: external_exports.string().trim().min(1).max(40).optional(),
37375
+ /**
37376
+ * Plain-language description of the organization for display and discovery.
37377
+ * Recommended placement for display naming — prefer this over the deprecated
37378
+ * `branding.description`. Falls back to `branding.description` for legacy tenants.
37379
+ */
37380
+ description: DescriptionSchema.optional()
37381
+ }).passthrough();
37317
37382
  var DEFAULT_ORGANIZATION_MODEL_IDENTITY = {
37318
37383
  mission: "",
37319
37384
  vision: "",
@@ -44059,7 +44124,7 @@ function wrapAction(commandName, fn) {
44059
44124
  // package.json
44060
44125
  var package_default = {
44061
44126
  name: "@elevasis/sdk",
44062
- version: "1.26.0",
44127
+ version: "1.26.1",
44063
44128
  description: "SDK for building Elevasis organization resources",
44064
44129
  type: "module",
44065
44130
  bin: {
package/dist/index.d.ts CHANGED
@@ -2884,6 +2884,51 @@ type Database = {
2884
2884
  }
2885
2885
  ];
2886
2886
  };
2887
+ deployment_organization_models: {
2888
+ Row: {
2889
+ created_at: string;
2890
+ deployment_id: string;
2891
+ model_hash: string | null;
2892
+ organization_id: string;
2893
+ organization_model: Json;
2894
+ schema_version: string;
2895
+ updated_at: string;
2896
+ };
2897
+ Insert: {
2898
+ created_at?: string;
2899
+ deployment_id: string;
2900
+ model_hash?: string | null;
2901
+ organization_id: string;
2902
+ organization_model: Json;
2903
+ schema_version?: string;
2904
+ updated_at?: string;
2905
+ };
2906
+ Update: {
2907
+ created_at?: string;
2908
+ deployment_id?: string;
2909
+ model_hash?: string | null;
2910
+ organization_id?: string;
2911
+ organization_model?: Json;
2912
+ schema_version?: string;
2913
+ updated_at?: string;
2914
+ };
2915
+ Relationships: [
2916
+ {
2917
+ foreignKeyName: "deployment_organization_models_deployment_id_fkey";
2918
+ columns: ["deployment_id"];
2919
+ isOneToOne: true;
2920
+ referencedRelation: "deployments";
2921
+ referencedColumns: ["id"];
2922
+ },
2923
+ {
2924
+ foreignKeyName: "deployment_organization_models_organization_id_fkey";
2925
+ columns: ["organization_id"];
2926
+ isOneToOne: false;
2927
+ referencedRelation: "organizations";
2928
+ referencedColumns: ["id"];
2929
+ }
2930
+ ];
2931
+ };
2887
2932
  deployments: {
2888
2933
  Row: {
2889
2934
  created_at: string;
@@ -6897,7 +6942,11 @@ declare const OrganizationModelSchema$1: z.ZodObject<{
6897
6942
  light: z.ZodOptional<z.ZodString>;
6898
6943
  dark: z.ZodOptional<z.ZodString>;
6899
6944
  }, z.core.$strip>>;
6900
- }, z.core.$strip>>;
6945
+ voice: z.ZodOptional<z.ZodString>;
6946
+ tagline: z.ZodOptional<z.ZodString>;
6947
+ values: z.ZodOptional<z.ZodArray<z.ZodString>>;
6948
+ themePresetId: z.ZodOptional<z.ZodString>;
6949
+ }, z.core.$loose>>;
6901
6950
  navigation: z.ZodDefault<z.ZodObject<{
6902
6951
  sidebar: z.ZodDefault<z.ZodObject<{
6903
6952
  primary: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodType<SidebarNode, unknown, z.core.$ZodTypeInternals<SidebarNode, unknown>>>>;
@@ -6944,7 +6993,11 @@ declare const OrganizationModelSchema$1: z.ZodObject<{
6944
6993
  }, z.core.$strip>>;
6945
6994
  }, z.core.$strip>>;
6946
6995
  clientBrief: z.ZodDefault<z.ZodString>;
6947
- }, z.core.$strip>>;
6996
+ organizationName: z.ZodOptional<z.ZodString>;
6997
+ productName: z.ZodOptional<z.ZodString>;
6998
+ shortName: z.ZodOptional<z.ZodString>;
6999
+ description: z.ZodOptional<z.ZodString>;
7000
+ }, z.core.$loose>>;
6948
7001
  customers: z.ZodDefault<z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
6949
7002
  id: z.ZodString;
6950
7003
  order: z.ZodNumber;
@@ -1674,7 +1674,11 @@ declare const OrganizationModelSchema$1: z.ZodObject<{
1674
1674
  light: z.ZodOptional<z.ZodString>;
1675
1675
  dark: z.ZodOptional<z.ZodString>;
1676
1676
  }, z.core.$strip>>;
1677
- }, z.core.$strip>>;
1677
+ voice: z.ZodOptional<z.ZodString>;
1678
+ tagline: z.ZodOptional<z.ZodString>;
1679
+ values: z.ZodOptional<z.ZodArray<z.ZodString>>;
1680
+ themePresetId: z.ZodOptional<z.ZodString>;
1681
+ }, z.core.$loose>>;
1678
1682
  navigation: z.ZodDefault<z.ZodObject<{
1679
1683
  sidebar: z.ZodDefault<z.ZodObject<{
1680
1684
  primary: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodType<SidebarNode, unknown, z.core.$ZodTypeInternals<SidebarNode, unknown>>>>;
@@ -1721,7 +1725,11 @@ declare const OrganizationModelSchema$1: z.ZodObject<{
1721
1725
  }, z.core.$strip>>;
1722
1726
  }, z.core.$strip>>;
1723
1727
  clientBrief: z.ZodDefault<z.ZodString>;
1724
- }, z.core.$strip>>;
1728
+ organizationName: z.ZodOptional<z.ZodString>;
1729
+ productName: z.ZodOptional<z.ZodString>;
1730
+ shortName: z.ZodOptional<z.ZodString>;
1731
+ description: z.ZodOptional<z.ZodString>;
1732
+ }, z.core.$loose>>;
1725
1733
  customers: z.ZodDefault<z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
1726
1734
  id: z.ZodString;
1727
1735
  order: z.ZodNumber;
@@ -2717,6 +2717,51 @@ type Database = {
2717
2717
  }
2718
2718
  ];
2719
2719
  };
2720
+ deployment_organization_models: {
2721
+ Row: {
2722
+ created_at: string;
2723
+ deployment_id: string;
2724
+ model_hash: string | null;
2725
+ organization_id: string;
2726
+ organization_model: Json;
2727
+ schema_version: string;
2728
+ updated_at: string;
2729
+ };
2730
+ Insert: {
2731
+ created_at?: string;
2732
+ deployment_id: string;
2733
+ model_hash?: string | null;
2734
+ organization_id: string;
2735
+ organization_model: Json;
2736
+ schema_version?: string;
2737
+ updated_at?: string;
2738
+ };
2739
+ Update: {
2740
+ created_at?: string;
2741
+ deployment_id?: string;
2742
+ model_hash?: string | null;
2743
+ organization_id?: string;
2744
+ organization_model?: Json;
2745
+ schema_version?: string;
2746
+ updated_at?: string;
2747
+ };
2748
+ Relationships: [
2749
+ {
2750
+ foreignKeyName: "deployment_organization_models_deployment_id_fkey";
2751
+ columns: ["deployment_id"];
2752
+ isOneToOne: true;
2753
+ referencedRelation: "deployments";
2754
+ referencedColumns: ["id"];
2755
+ },
2756
+ {
2757
+ foreignKeyName: "deployment_organization_models_organization_id_fkey";
2758
+ columns: ["organization_id"];
2759
+ isOneToOne: false;
2760
+ referencedRelation: "organizations";
2761
+ referencedColumns: ["id"];
2762
+ }
2763
+ ];
2764
+ };
2720
2765
  deployments: {
2721
2766
  Row: {
2722
2767
  created_at: string;
@@ -6095,7 +6140,11 @@ declare const OrganizationModelSchema: z.ZodObject<{
6095
6140
  light: z.ZodOptional<z.ZodString>;
6096
6141
  dark: z.ZodOptional<z.ZodString>;
6097
6142
  }, z.core.$strip>>;
6098
- }, z.core.$strip>>;
6143
+ voice: z.ZodOptional<z.ZodString>;
6144
+ tagline: z.ZodOptional<z.ZodString>;
6145
+ values: z.ZodOptional<z.ZodArray<z.ZodString>>;
6146
+ themePresetId: z.ZodOptional<z.ZodString>;
6147
+ }, z.core.$loose>>;
6099
6148
  navigation: z.ZodDefault<z.ZodObject<{
6100
6149
  sidebar: z.ZodDefault<z.ZodObject<{
6101
6150
  primary: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodType<SidebarNode, unknown, z.core.$ZodTypeInternals<SidebarNode, unknown>>>>;
@@ -6142,7 +6191,11 @@ declare const OrganizationModelSchema: z.ZodObject<{
6142
6191
  }, z.core.$strip>>;
6143
6192
  }, z.core.$strip>>;
6144
6193
  clientBrief: z.ZodDefault<z.ZodString>;
6145
- }, z.core.$strip>>;
6194
+ organizationName: z.ZodOptional<z.ZodString>;
6195
+ productName: z.ZodOptional<z.ZodString>;
6196
+ shortName: z.ZodOptional<z.ZodString>;
6197
+ description: z.ZodOptional<z.ZodString>;
6198
+ }, z.core.$loose>>;
6146
6199
  customers: z.ZodDefault<z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
6147
6200
  id: z.ZodString;
6148
6201
  order: z.ZodNumber;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elevasis/sdk",
3
- "version": "1.26.0",
3
+ "version": "1.26.1",
4
4
  "description": "SDK for building Elevasis organization resources",
5
5
  "type": "module",
6
6
  "bin": {
@@ -58,7 +58,7 @@
58
58
  "tsup": "^8.0.0",
59
59
  "typescript": "5.9.2",
60
60
  "zod": "^4.1.0",
61
- "@repo/core": "0.31.0",
61
+ "@repo/core": "0.32.0",
62
62
  "@repo/eslint-config": "0.0.0",
63
63
  "@repo/typescript-config": "0.0.0"
64
64
  },
@@ -23,7 +23,7 @@ Before collecting any information or running any steps, determine which state th
23
23
 
24
24
  **State A — Virgin (placeholders present):** One or more of the above placeholder strings is found. Run the full bootstrap flow (Steps 1–7 below), then hand off to `/om`.
25
25
 
26
- **State B — Already bootstrapped, org-model at defaults:** No placeholders found, but `core/config/organization-model.ts` contains only the default branding override (just `branding.organizationName`, `branding.productName`, `branding.shortName` — no identity, customers, offerings, roles, goals, or techStack overrides). Print:
26
+ **State B — Already bootstrapped, org-model at defaults:** No placeholders found, but `core/config/organization-model.ts` contains only the default display naming override (just `identity.organizationName`, `identity.productName`, `identity.shortName`, with legacy `branding.*` fallback values — no customers, offerings, roles, goals, or techStack overrides). Print:
27
27
 
28
28
  ```
29
29
  This project is already set up. The organization model has not been configured yet.
@@ -32,7 +32,7 @@ Running /om to set up your organization profile...
32
32
 
33
33
  Then execute `/om` (the full layered flow) and stop.
34
34
 
35
- **State C — Fully configured:** No placeholders found AND `core/config/organization-model.ts` has at least one non-branding domain populated (identity, customers, offerings, roles, goals, or techStack present). Print:
35
+ **State C — Fully configured:** No placeholders found AND `core/config/organization-model.ts` has at least one non-default business domain populated (customers, offerings, roles, goals, techStack, or identity fields beyond display naming/client brief). Print:
36
36
 
37
37
  ```
38
38
  This project is already configured. To update your organization profile, run /om.
@@ -0,0 +1,49 @@
1
+ # Branding Names to Identity
2
+
3
+ ## Why this note exists
4
+
5
+ The Organization Model now treats `identity.organizationName`, `identity.productName`,
6
+ and `identity.shortName` as the preferred source for display naming. The older
7
+ `branding.*` name fields remain valid for backward compatibility, but new template code
8
+ reads identity first and falls back to branding only for legacy projects.
9
+
10
+ Branding also now supports first-class expression fields such as `voice`, `tagline`,
11
+ `values`, and `themePresetId`, while still accepting tenant-specific passthrough fields.
12
+
13
+ ## Applies to
14
+
15
+ Template-derived projects that customize Organization Model branding or read
16
+ `organizationModel.branding.organizationName`, `productName`, or `shortName` directly in
17
+ UI or setup code.
18
+
19
+ ## Required actions
20
+
21
+ 1. Keep existing `branding.organizationName`, `branding.productName`, and
22
+ `branding.shortName` values in place for compatibility.
23
+ 2. Add matching values under `identity.organizationName`, `identity.productName`, and
24
+ `identity.shortName`.
25
+ 3. Update project UI code to read `identity.* ?? branding.*` for display naming.
26
+ 4. Move brand expression into the broadened `branding` fields: `voice`, `tagline`,
27
+ `values`, `themePresetId`, and project-owned passthrough fields as needed.
28
+
29
+ ## Verification
30
+
31
+ Run the normal template-derived project gates after syncing:
32
+
33
+ ```powershell
34
+ pnpm -C core test
35
+ pnpm -C ui check-types
36
+ pnpm -C ui build
37
+ pnpm -C operations check-types
38
+ pnpm -C operations check
39
+ ```
40
+
41
+ Also open the app shell and Knowledge Base identity/branding views. Confirm display names
42
+ render from identity and branding expression fields render under Branding.
43
+
44
+ ## Not handled by /git-sync
45
+
46
+ `/git-sync` cannot choose real brand voice, tagline, values, logo assets, or custom
47
+ passthrough fields for an individual tenant. It also cannot remove legacy
48
+ `branding.*` name fields from project-specific code until maintainers confirm every
49
+ consumer has migrated to the identity-first fallback.
@@ -0,0 +1,42 @@
1
+ # OM Deployment Drift Detection
2
+
3
+ ## Why this note exists
4
+
5
+ The platform API now persists deployed Organization Model snapshots and validates tenant
6
+ lead-gen and CRM catalogs against the requesting tenant's active deployed model. The
7
+ template does not need source changes for this server-side fix, but template-derived
8
+ projects should accept the `@elevasis/core` package baseline when this release train
9
+ publishes it so generated database and shared type surfaces stay aligned.
10
+
11
+ ## Applies to
12
+
13
+ Template-derived projects that use SDK deployments, lead-gen list creation, CRM stages,
14
+ or CRM actions through the hosted Elevasis API.
15
+
16
+ ## Required actions
17
+
18
+ 1. Pull the package baseline update produced by this ship train.
19
+ 2. Redeploy or verify tenant operations resources if the project has recently changed its
20
+ Organization Model catalogs.
21
+ 3. After the API deployment stage completes, smoke lead-gen list creation with a
22
+ project-owned build template ID.
23
+
24
+ ## Verification
25
+
26
+ Run the normal template-derived project gates after syncing:
27
+
28
+ ```powershell
29
+ pnpm -C core test
30
+ pnpm -C operations check-types
31
+ pnpm -C operations check
32
+ pnpm -C ui check-types
33
+ pnpm -C ui build
34
+ ```
35
+
36
+ For projects using lead-gen, also verify list creation against the hosted API with a
37
+ tenant-owned build template ID.
38
+
39
+ ## Not handled by /git-sync
40
+
41
+ `/git-sync` cannot apply the production database change or deploy the hosted API. It also
42
+ does not create project-specific Organization Model catalogs or workflow resources.
@@ -149,9 +149,9 @@ For exact required flags and accepted enum values, see the command source under
149
149
 
150
150
  ## elevasis-sdk note:\*
151
151
 
152
- `elevasis-sdk note:*` is the agent-facing surface for pushing and reading personal user notes. Workflows and agents use it to surface information -- such as "deal X stalled" or "review run completed" -- directly into a user's Notes panel in the Command Center, without sending an email or notification.
152
+ `elevasis-sdk note:*` is the agent-facing surface for pushing and reading user notes. Workflows and agents use it to surface information -- such as "deal X stalled" or "review run completed" -- directly into a user's Notes panel in the Command Center, without sending an email or notification.
153
153
 
154
- Notes are personal to the target user and scoped to the calling organization. The external API surface exposes `GET + POST` only; `note:update` and `note:delete` are not yet available via SDK CLI. Users edit and delete notes through the right-panel view in the Command Center.
154
+ Agent-written notes are private to the target user and scoped to the calling organization. The authenticated Notes panel can also create and edit org-shared notes (`visibility: 'org'`), which are visible to active members of the same organization and show creator attribution. The external SDK CLI surface exposes `GET + POST` only; `note:update` and `note:delete` are not yet available via SDK CLI. Users edit, delete, and change visibility through the right-panel view.
155
155
 
156
156
  ### note:create
157
157
 
@@ -187,6 +187,7 @@ elevasis-sdk note:create --content <text>
187
187
  - Posts to `POST /api/external/user-notes`
188
188
  - When `--user` is omitted the note is created for the identity bound to the API key (the caller)
189
189
  - When `--user` is provided the platform resolves the email to a Supabase user UUID and verifies the resolved user is an active member of the calling organization before writing
190
+ - External agent-created notes are always private; org-shared visibility is a signed-in UI capability, not a broadcast CLI mode
190
191
  - The `--source` flag is recorded as the `source` column in `user_notes`; agent runtimes should pass their resource ID here so users can see which workflow created the note
191
192
  - Priority `normal` produces no badge in the UI; `high` renders orange, `urgent` renders red, `low` renders dimmed gray
192
193
 
@@ -279,9 +280,9 @@ elevasis-sdk note:list --user ops@acme.com --priority high --pinned --pretty
279
280
 
280
281
  ### Command Boundary
281
282
 
282
- - `note:create` and `note:list` operate on the **personal notes** surface -- not project notes. For project-scoped notes use `project:note:*`.
283
+ - `note:create` and `note:list` operate on the **user notes** surface -- not project notes. For project-scoped notes use `project:note:*`.
283
284
  - `note:update` and `note:delete` are not yet available via SDK CLI. Edit and delete notes using the Notes panel in the Command Center.
284
- - The Notes panel view (`NotesPanelView`) is registered in the right-panel registry alongside Overview, Recent Executions, and Notifications.
285
+ - The shared Notes panel view (`NotesPanelView`) is exported from `@elevasis/ui/features/notes` and registered in the right-panel registry alongside Overview, Recent Executions, and Notifications.
285
286
 
286
287
  **Implementation:** `packages/sdk/src/cli/commands/notes.ts` -- delegates to `POST /api/external/user-notes` and `GET /api/external/user-notes`
287
288
 
@@ -289,7 +290,8 @@ elevasis-sdk note:list --user ops@acme.com --priority high --pinned --pretty
289
290
 
290
291
  The following invariants govern the Notes feature and are relevant when building agents or workflows that write notes:
291
292
 
292
- - **Scope:** Notes are user-scoped and organization-scoped by default. A user can optionally make a note global, but the default scope is the current org.
293
+ - **Scope:** Notes are user-scoped and organization-scoped by default. A signed-in user can mark a note as org-shared; agent-created notes stay private to the target user.
294
+ - **Org-shared visibility:** `visibility: 'org'` lets active org members see and edit the note. Only the creator can change the visibility value.
293
295
  - **Sort order:** Pinned first, then by priority (`urgent` > `high` > `normal` > `low`), then by most recently updated.
294
296
  - **Broadcast:** Out of scope. Agents create notes for one resolved user at a time. Broadcast is a notifications concern, not a notes concern.
295
297
  - **Retention:** Notes persist until the user explicitly deletes them. There is no TTL and no dismissed state.
@@ -7,13 +7,23 @@
7
7
  import { defineOrganizationModel, defineResources } from '@elevasis/core/organization-model'
8
8
 
9
9
  // ---------------------------------------------------------------------------
10
- // Branding override
10
+ // Identity and branding override
11
11
  // ---------------------------------------------------------------------------
12
12
  export const brandingOverrideExample = defineOrganizationModel({
13
+ identity: {
14
+ organizationName: 'Northstar Studio',
15
+ productName: 'Northstar Ops',
16
+ shortName: 'Northstar'
17
+ },
13
18
  branding: {
14
- organizationName: 'Acme Corp',
15
- productName: 'Acme Command Center',
16
- shortName: 'Acme'
19
+ logos: {
20
+ light: '/brand/northstar-logo-light.svg',
21
+ dark: '/brand/northstar-logo-dark.svg'
22
+ },
23
+ voice: 'Clear, practical, and calm.',
24
+ tagline: 'Operational clarity for growing teams.',
25
+ values: ['Clarity', 'Reliability', 'Momentum'],
26
+ themePresetId: 'northstar'
17
27
  }
18
28
  })
19
29