Skip to content

Commit 3e0a4a0

Browse files
os-zhuangclaude
andauthored
chore(spec): cut orphaned object.recordTypes and object.cdc stubs (#1960)
Both were spec-only properties with elaborate docstrings and zero consumers in either repo (framework runtime + objectui authoring/ rendering), classified `dead` in the liveness ledger: - `recordTypes`: a Salesforce-specific concept. The platform models record variants via a discriminator field + conditional layouts (visibleWhen / form variants), so this stub is redundant. - `cdc` / `CDCConfigSchema`: aspirational enterprise change-data- capture. Low-code change propagation is served by webhooks + triggers; no streaming runtime exists. Removes false surface from the metadata contract. Gate stays green (object 56 classified), spec tests 6562 passed. Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent a2a5a08 commit 3e0a4a0

3 files changed

Lines changed: 4 additions & 32 deletions

File tree

.changeset/cut-recordtypes-cdc.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
---
2+
---
3+
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.

packages/spec/liveness/object.json

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -181,10 +181,6 @@
181181
"status": "dead",
182182
"evidence": "aspirational; no runtime"
183183
},
184-
"cdc": {
185-
"status": "dead",
186-
"evidence": "aspirational; no runtime"
187-
},
188184
"softDelete": {
189185
"status": "dead",
190186
"evidence": "no runtime; duplicates the (also dead) enable.trash"
@@ -193,10 +189,6 @@
193189
"status": "dead",
194190
"evidence": "SearchConfigSchema — no runtime; duplicates enable.searchable"
195191
},
196-
"recordTypes": {
197-
"status": "dead",
198-
"evidence": "elaborate docstring, unimplemented"
199-
},
200192
"defaultDetailForm": {
201193
"status": "dead",
202194
"evidence": "documented fallback chain unimplemented"

packages/spec/src/data/object.zod.ts

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -198,23 +198,6 @@ export const PartitioningConfigSchema = lazySchema(() => z.object({
198198
message: 'interval is required when strategy is "range"',
199199
}));
200200

201-
/**
202-
* Change Data Capture (CDC) Configuration Schema
203-
* Enables real-time data streaming to external systems
204-
*
205-
* @example Stream all changes to Kafka
206-
* {
207-
* enabled: true,
208-
* events: ['insert', 'update', 'delete'],
209-
* destination: 'kafka://events.objectstack'
210-
* }
211-
*/
212-
export const CDCConfigSchema = lazySchema(() => z.object({
213-
enabled: z.boolean().describe('Enable Change Data Capture'),
214-
events: z.array(z.enum(['insert', 'update', 'delete'])).describe('Event types to capture'),
215-
destination: z.string().describe('Destination endpoint (e.g., "kafka://topic", "webhook://url")'),
216-
}));
217-
218201
/**
219202
* Object Field Group Schema — MVP (data-layer protocol)
220203
*
@@ -514,9 +497,6 @@ const ObjectSchemaBase = z.object({
514497
// Partitioning strategy
515498
partitioning: PartitioningConfigSchema.optional().describe('Table partitioning configuration for performance'),
516499

517-
// Change Data Capture
518-
cdc: CDCConfigSchema.optional().describe('Change Data Capture (CDC) configuration for real-time data streaming'),
519-
520500
/**
521501
* Logic & Validation (Co-located)
522502
* Best Practice: Define rules close to data.
@@ -607,9 +587,6 @@ const ObjectSchemaBase = z.object({
607587
*/
608588
enable: ObjectCapabilities.optional().describe('Enabled system features modules'),
609589

610-
/** Record Types */
611-
recordTypes: z.array(z.string()).optional().describe('Record type names for this object'),
612-
613590
/** Sharing Model */
614591
sharingModel: z.enum(['private', 'read', 'read_write', 'full']).optional().describe('Default sharing model'),
615592

@@ -882,7 +859,6 @@ export type TenancyConfig = z.infer<typeof TenancyConfigSchema>;
882859
export type SoftDeleteConfig = z.infer<typeof SoftDeleteConfigSchema>;
883860
export type VersioningConfig = z.infer<typeof VersioningConfigSchema>;
884861
export type PartitioningConfig = z.infer<typeof PartitioningConfigSchema>;
885-
export type CDCConfig = z.infer<typeof CDCConfigSchema>;
886862

887863
/**
888864
* Resolved CRUD affordance matrix for an object — what generic

0 commit comments

Comments
 (0)