@synap-core/workspace-templates 0.8.1 → 0.9.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.
package/src/types.ts CHANGED
@@ -49,8 +49,30 @@ export interface TemplateProfile {
49
49
  icon?: string;
50
50
  color?: string;
51
51
  description?: string;
52
- /** Visibility scope. Omit or "WORKSPACE" for workspace-scoped. */
52
+ /**
53
+ * Visibility of the profile DEFINITION — who can USE this vocabulary.
54
+ * `system` = pod-wide; `shared` = ONE row reachable from other workspaces via
55
+ * a `profile_workspace_access` grant; omit or `workspace` = this workspace
56
+ * only. Orthogonal to `entityScope` below — do not conflate the two axes.
57
+ */
53
58
  scope?: string;
59
+ /**
60
+ * Placement of the profile's ENTITY ROWS — where the data LANDS.
61
+ * `pod` → entities are created with `workspace_id = NULL` and are therefore
62
+ * visible in every workspace; `workspace` (the backend default when omitted)
63
+ * → entities belong to the workspace that created them.
64
+ *
65
+ * Independent of `scope`: a `shared` profile can still mint workspace-scoped
66
+ * rows, and a `workspace`-scoped profile could in principle mint pod-wide
67
+ * ones. Both provisioning doors thread this verbatim into
68
+ * `ProfileRepository.create` (`create-workspace-from-definition.ts:1149`,
69
+ * `reconcile-workspace-from-definition.ts:319`) — omitting it inherits the
70
+ * repo default (`workspace`), which is the unchanged behaviour for templates
71
+ * that do not declare it. Applied on CREATE only: neither door flips the
72
+ * `entity_scope` of an existing profile (a divergence is reported as an
73
+ * advisory `scopeConflict` and the live row is left alone).
74
+ */
75
+ entityScope?: 'pod' | 'workspace';
54
76
  /** Semantic slug for system profiles. */
55
77
  semanticSlug?: string;
56
78
  /** Kind vs role profile. Omit for default ('kind'). */
@@ -284,9 +306,23 @@ export interface TemplatePlaybook {
284
306
  members?: string[];
285
307
  aiReactionMode?: 'on_mention' | 'always' | 'never';
286
308
  };
287
- schedule?: { cron: string } | null;
309
+ /**
310
+ * A cron schedule that maintains ONE backing cron automation (a single
311
+ * `playbook_run` node) which the pod's `automation-cron-scheduler` fires.
312
+ * `enabled` is read STRICTLY (`materializePlaybookCronAutomation` requires
313
+ * `enabled === true`) — omit it and the backing cron is NEVER created, so the
314
+ * playbook silently never fires. Always set it explicitly.
315
+ */
316
+ schedule?: { cron: string; enabled: boolean } | null;
288
317
  /** tool/skill keys this playbook grants. */
289
318
  grants?: string[];
319
+ /**
320
+ * Free-form playbook metadata → `playbooks.metadata`. Carries the propose-only
321
+ * governance marker for unattended maintenance playbooks:
322
+ * `{ governance: { forceProposeWrites: true } }` — every agent write in the
323
+ * playbook's scheduled sessions then routes to a reviewable proposal.
324
+ */
325
+ metadata?: Record<string, unknown>;
290
326
  /**
291
327
  * The entity kind this playbook operates over, persisted to
292
328
  * `playbooks.subject_profile`. Makes the playbook matchable by