@elevasis/sdk 1.26.0 → 1.26.2

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.2",
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;
@@ -7641,7 +7694,7 @@ declare function compileBusinessOntologyValidationIndex(model: OrganizationModel
7641
7694
  * organization model's `sales.lead-gen` stage records). Hosts that own a
7642
7695
  * populated tenant model (e.g. `apps/api` with the Elevasis canonical model)
7643
7696
  * MUST build their own index via `compileBusinessOntologyValidationIndex(model)`
7644
- * and call `createLeadGenStageValidators(index)`. `@repo/core` stays generic
7697
+ * and call `createLeadGenStageValidators(index)`. The core package stays generic;
7645
7698
  * it must never import a tenant model.
7646
7699
  */
7647
7700
  type LeadGenStageValidators = {
@@ -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;
@@ -10494,8 +10547,8 @@ type TypedAdapter<TMap extends ToolMethodMap$1> = {
10494
10547
  * Message protocol:
10495
10548
  * Parent -> Worker: { type: 'manifest' }
10496
10549
  * Worker -> Parent: { type: 'manifest', workflows: [...], agents: [...],
10497
- * triggers?: [...], integrations?: [...], humanCheckpoints?: [...],
10498
- * relationships?: {...} }
10550
+ * organizationModel?: {...}, triggers?: [...], integrations?: [...],
10551
+ * humanCheckpoints?: [...], relationships?: {...} }
10499
10552
  *
10500
10553
  * Parent -> Worker: { type: 'execute', resourceId, executionId, input, organizationId?, organizationName?,
10501
10554
  * sessionId?, sessionTurnNumber?, parentExecutionId?, executionDepth }
@@ -9284,6 +9284,7 @@ function startWorker(org) {
9284
9284
  if (msg.type === "manifest") {
9285
9285
  parentPort.postMessage({
9286
9286
  type: "manifest",
9287
+ organizationModel: org.organizationModel,
9287
9288
  workflows: (org.workflows ?? []).map((w2) => ({
9288
9289
  resourceId: w2.config.resourceId,
9289
9290
  name: w2.config.name,
@@ -21298,7 +21299,7 @@ function recordAsyncAnnotation(test5, promise) {
21298
21299
  return promise;
21299
21300
  }
21300
21301
 
21301
- // ../../node_modules/.pnpm/vitest@3.2.4_@edge-runtime+_655b5a9ef789d2c00bade142a29242c2/node_modules/vitest/dist/chunks/utils.XdZDrNZV.js
21302
+ // ../../node_modules/.pnpm/vitest@3.2.4_@edge-runtime+_d1cccf33043c821cd797d4ac11d33b3e/node_modules/vitest/dist/chunks/utils.XdZDrNZV.js
21302
21303
  var NAME_WORKER_STATE = "__vitest_worker__";
21303
21304
  function getWorkerState() {
21304
21305
  const workerState = globalThis[NAME_WORKER_STATE];
@@ -21346,7 +21347,7 @@ async function waitForImportsToResolve() {
21346
21347
  await waitForImportsToResolve();
21347
21348
  }
21348
21349
 
21349
- // ../../node_modules/.pnpm/vitest@3.2.4_@edge-runtime+_655b5a9ef789d2c00bade142a29242c2/node_modules/vitest/dist/chunks/_commonjsHelpers.BFTU3MAI.js
21350
+ // ../../node_modules/.pnpm/vitest@3.2.4_@edge-runtime+_d1cccf33043c821cd797d4ac11d33b3e/node_modules/vitest/dist/chunks/_commonjsHelpers.BFTU3MAI.js
21350
21351
  var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {};
21351
21352
  function getDefaultExportFromCjs3(x2) {
21352
21353
  return x2 && x2.__esModule && Object.prototype.hasOwnProperty.call(x2, "default") ? x2["default"] : x2;
@@ -23379,7 +23380,7 @@ var SnapshotClient = class {
23379
23380
  }
23380
23381
  };
23381
23382
 
23382
- // ../../node_modules/.pnpm/vitest@3.2.4_@edge-runtime+_655b5a9ef789d2c00bade142a29242c2/node_modules/vitest/dist/chunks/date.Bq6ZW5rf.js
23383
+ // ../../node_modules/.pnpm/vitest@3.2.4_@edge-runtime+_d1cccf33043c821cd797d4ac11d33b3e/node_modules/vitest/dist/chunks/date.Bq6ZW5rf.js
23383
23384
  var RealDate = Date;
23384
23385
  var now2 = null;
23385
23386
  var MockDate = class _MockDate extends RealDate {
@@ -23427,7 +23428,7 @@ function resetDate() {
23427
23428
  globalThis.Date = RealDate;
23428
23429
  }
23429
23430
 
23430
- // ../../node_modules/.pnpm/vitest@3.2.4_@edge-runtime+_655b5a9ef789d2c00bade142a29242c2/node_modules/vitest/dist/chunks/vi.bdSIJ99Y.js
23431
+ // ../../node_modules/.pnpm/vitest@3.2.4_@edge-runtime+_d1cccf33043c821cd797d4ac11d33b3e/node_modules/vitest/dist/chunks/vi.bdSIJ99Y.js
23431
23432
  var unsupported = [
23432
23433
  "matchSnapshot",
23433
23434
  "toMatchSnapshot",
@@ -26108,7 +26109,7 @@ function getImporter(name) {
26108
26109
  return stack?.file || "";
26109
26110
  }
26110
26111
 
26111
- // ../../node_modules/.pnpm/vitest@3.2.4_@edge-runtime+_655b5a9ef789d2c00bade142a29242c2/node_modules/vitest/dist/index.js
26112
+ // ../../node_modules/.pnpm/vitest@3.2.4_@edge-runtime+_d1cccf33043c821cd797d4ac11d33b3e/node_modules/vitest/dist/index.js
26112
26113
  __toESM(require_dist());
26113
26114
 
26114
26115
  // src/test-utils/mock-adapters.ts
@@ -7,8 +7,8 @@
7
7
  * Message protocol:
8
8
  * Parent -> Worker: { type: 'manifest' }
9
9
  * Worker -> Parent: { type: 'manifest', workflows: [...], agents: [...],
10
- * triggers?: [...], integrations?: [...], humanCheckpoints?: [...],
11
- * relationships?: {...} }
10
+ * organizationModel?: {...}, triggers?: [...], integrations?: [...],
11
+ * humanCheckpoints?: [...], relationships?: {...} }
12
12
  *
13
13
  * Parent -> Worker: { type: 'execute', resourceId, executionId, input, organizationId?, organizationName?,
14
14
  * sessionId?, sessionTurnNumber?, parentExecutionId?, executionDepth }
@@ -6801,6 +6801,7 @@ function startWorker(org) {
6801
6801
  if (msg.type === "manifest") {
6802
6802
  parentPort.postMessage({
6803
6803
  type: "manifest",
6804
+ organizationModel: org.organizationModel,
6804
6805
  workflows: (org.workflows ?? []).map((w) => ({
6805
6806
  resourceId: w.config.resourceId,
6806
6807
  name: w.config.name,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elevasis/sdk",
3
- "version": "1.26.0",
3
+ "version": "1.26.2",
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.33.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,31 @@
1
+ # Lead Gen Manage Access Package Baseline
2
+
3
+ ## Why this note exists
4
+
5
+ This train adds `sales.lead-gen.manage` as the OM-aligned runtime permission for operating Lead Gen list-builder mutations. The implementation ships through `@elevasis/core` and `@elevasis/ui`; template projects need the package baseline update so derived apps receive the new access key and shared Lead Gen UI guards.
6
+
7
+ ## Applies to
8
+
9
+ - Template UI package baseline: `external/_template/ui/package.json`
10
+ - Template core package baseline: `external/_template/core/package.json`
11
+ - Template operations package baseline: `external/_template/operations/package.json`
12
+ - Derived projects that expose the shared Lead Gen list-builder UI
13
+
14
+ ## Required actions
15
+
16
+ 1. Publish the prepared `@elevasis/core` release containing `sales.lead-gen.manage` and `AccessKeys.leadGenManage`.
17
+ 2. Publish the prepared `@elevasis/ui` release containing the shared Lead Gen mutation affordance guards.
18
+ 3. Run the prepared external sync manifest so derived projects receive the updated package baselines.
19
+ 4. For client launches, verify Operator users receive `sales.lead-gen.manage` through platform role grants before list-builder smoke.
20
+
21
+ ## Verification
22
+
23
+ - `pnpm -C packages/core build:publish`
24
+ - `pnpm -C packages/ui build:publish`
25
+ - `pnpm -C external/_template/ui check-types`
26
+ - `pnpm -C external/_template/ui build`
27
+ - `pnpm sync:verify` after the manifest-scoped external sync stage
28
+
29
+ ## Not handled by /git-sync
30
+
31
+ Database permission rows and system role grants are environment state, not template files. Apply the SQL migration or equivalent environment change separately before inviting Operator users.
@@ -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.
@@ -0,0 +1,37 @@
1
+ # UI + SDK package fixes (lastVisitedOrg, worker-manifest organizationModel)
2
+
3
+ ## Why this note exists
4
+
5
+ `@elevasis/ui` and `@elevasis/sdk` were republished with two backward-compatible fixes:
6
+
7
+ - `@elevasis/ui`: `OrganizationProvider` now persists org preference as `lastVisitedOrg` (matching the `/api/users/me` schema), removing the noisy 400 on organization switching.
8
+ - `@elevasis/sdk`: the worker manifest now includes `organizationModel`, so platform deployment persistence receives your tenant Organization Model snapshot.
9
+
10
+ The SDK change requires a deploy, not just an install, to take effect on your active platform deployment.
11
+
12
+ ## Applies to
13
+
14
+ All template-derived projects that consume `@elevasis/ui` and `@elevasis/sdk` and run an `operations/` resources bundle on the Elevasis platform.
15
+
16
+ ## Required actions
17
+
18
+ 1. Pull and install so the new baselines land:
19
+ - `@elevasis/ui` baseline bump in `ui/package.json`
20
+ - `@elevasis/sdk` baseline bump in `operations/package.json`
21
+ 2. `pnpm -C ui install && pnpm -C operations install` (or a project-root install) to update lockfiles.
22
+ 3. Redeploy your operations bundle so the worker manifest publishes your Organization Model to the active deployment:
23
+ - dev: `pnpm -C operations deploy`
24
+ - prod: `pnpm -C operations deploy:prod`
25
+ 4. Redeploy the UI (your host, e.g. Vercel) so the `lastVisitedOrg` fix ships to the browser.
26
+
27
+ No source merges are required; both changes are internal to the published packages.
28
+
29
+ ## Verification
30
+
31
+ - `pnpm -C ui check-types && pnpm -C ui build`
32
+ - `pnpm -C operations check && pnpm -C operations check-types`
33
+ - After deploy, confirm the active deployment persists an Organization Model snapshot (Lead Gen / list surfaces resolve the tenant model rather than erroring), and that organization switching no longer emits a 400 against `/api/users/me`.
34
+
35
+ ## Not handled by /git-sync
36
+
37
+ `/git-sync` pulls the new baselines and surfaces this note, but it does NOT install dependencies, deploy your operations bundle, or redeploy your UI. Run the install + deploy steps above yourself; the worker-manifest fix only takes effect on your active deployment after an operations redeploy.
@@ -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.
@@ -426,7 +428,7 @@ elevasis-sdk session:end <id>
426
428
 
427
429
  ## elevasis-sdk queue:\*
428
430
 
429
- Manage HITL command queue tasks. See the [Command Queue CLI Guide](/technical/development/agent-driven-development/command-cli-guide) for the full command reference.
431
+ Manage HITL command queue tasks. See the [Command Queue CLI Guide](/technical/development/agent-driven-development/cli-operations) for the full command reference.
430
432
 
431
433
  **Quick reference:**
432
434
 
@@ -444,7 +446,7 @@ elevasis-sdk queue:status --pretty
444
446
 
445
447
  ## elevasis-sdk schedule:\*
446
448
 
447
- Manage recurring, relative, and absolute task schedules. See the [Schedule CLI Guide](/technical/development/agent-driven-development/schedule-cli-guide) for the full command reference including schedule config JSON shapes.
449
+ Manage recurring, relative, and absolute task schedules. See the [Schedule CLI Guide](/technical/development/agent-driven-development/cli-operations) for the full command reference including schedule config JSON shapes.
448
450
 
449
451
  **Quick reference:**
450
452
 
@@ -466,7 +468,7 @@ elevasis-sdk schedule:cancel <id> --pretty
466
468
 
467
469
  Knowledge map inspection. The `om:*` (Organization Model) commands expose knowledge graph traversal via the CLI.
468
470
 
469
- For the full command reference, flag details, and graph architecture, see the [knowledge:\* CLI documentation](/technical/features/knowledge/knowledge-cli).
471
+ For the full command reference, flag details, and graph architecture, see the [knowledge:\* CLI documentation](/technical/features/knowledge/cli-and-skill).
470
472
 
471
473
  **Quick reference:**
472
474