Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .changeset/cut-recordtypes-cdc.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
---
---

chore(spec): remove the orphaned `object.recordTypes` and `object.cdc` properties from `ObjectSchema`. Both were spec-only stubs with elaborate docstrings and zero consumers in either repo (framework runtime + objectui authoring/rendering): `recordTypes` (Salesforce-specific concept — the platform models record variants via a discriminator field + conditional layouts / form variants) and `cdc` / `CDCConfigSchema` (aspirational enterprise change-data-capture — low-code change propagation is served by webhooks + triggers). Removes false surface from the metadata contract; both were classified `dead` in the liveness ledger. No package version impact.
8 changes: 0 additions & 8 deletions packages/spec/liveness/object.json
Original file line number Diff line number Diff line change
Expand Up @@ -181,10 +181,6 @@
"status": "dead",
"evidence": "aspirational; no runtime"
},
"cdc": {
"status": "dead",
"evidence": "aspirational; no runtime"
},
"softDelete": {
"status": "dead",
"evidence": "no runtime; duplicates the (also dead) enable.trash"
Expand All @@ -193,10 +189,6 @@
"status": "dead",
"evidence": "SearchConfigSchema — no runtime; duplicates enable.searchable"
},
"recordTypes": {
"status": "dead",
"evidence": "elaborate docstring, unimplemented"
},
"defaultDetailForm": {
"status": "dead",
"evidence": "documented fallback chain unimplemented"
Expand Down
24 changes: 0 additions & 24 deletions packages/spec/src/data/object.zod.ts
Original file line number Diff line number Diff line change
Expand Up @@ -198,23 +198,6 @@ export const PartitioningConfigSchema = lazySchema(() => z.object({
message: 'interval is required when strategy is "range"',
}));

/**
* Change Data Capture (CDC) Configuration Schema
* Enables real-time data streaming to external systems
*
* @example Stream all changes to Kafka
* {
* enabled: true,
* events: ['insert', 'update', 'delete'],
* destination: 'kafka://events.objectstack'
* }
*/
export const CDCConfigSchema = lazySchema(() => z.object({
enabled: z.boolean().describe('Enable Change Data Capture'),
events: z.array(z.enum(['insert', 'update', 'delete'])).describe('Event types to capture'),
destination: z.string().describe('Destination endpoint (e.g., "kafka://topic", "webhook://url")'),
}));

/**
* Object Field Group Schema — MVP (data-layer protocol)
*
Expand Down Expand Up @@ -514,9 +497,6 @@ const ObjectSchemaBase = z.object({
// Partitioning strategy
partitioning: PartitioningConfigSchema.optional().describe('Table partitioning configuration for performance'),

// Change Data Capture
cdc: CDCConfigSchema.optional().describe('Change Data Capture (CDC) configuration for real-time data streaming'),

/**
* Logic & Validation (Co-located)
* Best Practice: Define rules close to data.
Expand Down Expand Up @@ -607,9 +587,6 @@ const ObjectSchemaBase = z.object({
*/
enable: ObjectCapabilities.optional().describe('Enabled system features modules'),

/** Record Types */
recordTypes: z.array(z.string()).optional().describe('Record type names for this object'),

/** Sharing Model */
sharingModel: z.enum(['private', 'read', 'read_write', 'full']).optional().describe('Default sharing model'),

Expand Down Expand Up @@ -882,7 +859,6 @@ export type TenancyConfig = z.infer<typeof TenancyConfigSchema>;
export type SoftDeleteConfig = z.infer<typeof SoftDeleteConfigSchema>;
export type VersioningConfig = z.infer<typeof VersioningConfigSchema>;
export type PartitioningConfig = z.infer<typeof PartitioningConfigSchema>;
export type CDCConfig = z.infer<typeof CDCConfigSchema>;

/**
* Resolved CRUD affordance matrix for an object — what generic
Expand Down
Loading