Skip to content

Commit 364bb64

Browse files
committed
feat(metadata): add tenantId for multi-tenant isolation and update sorting in DatabaseLoader
1 parent 70edbad commit 364bb64

4 files changed

Lines changed: 9 additions & 2 deletions

File tree

content/docs/references/system/metadata-persistence.mdx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,7 @@ const result = MetadataCollectionInfo.parse(data);
271271
| **owner** | `string` | optional | |
272272
| **state** | `Enum<'draft' \| 'active' \| 'archived' \| 'deprecated'>` || |
273273
| **organizationId** | `string` | optional | Organization identifier for multi-tenant isolation |
274+
| **tenantId** | `string` | optional | Tenant identifier for multi-tenant isolation |
274275
| **environmentId** | `string` | optional | Environment ID — null = platform-global, set = env-scoped |
275276
| **version** | `number` || Record version for optimistic concurrency control |
276277
| **checksum** | `string` | optional | Content checksum for change detection |

packages/metadata/src/loaders/database-loader.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -562,7 +562,10 @@ export class DatabaseLoader implements MetadataLoader {
562562

563563
const historyRecords = await this._find(this.historyTableName, {
564564
where: historyFilter,
565-
orderBy: [{ field: 'recorded_at', order: 'desc' as const }],
565+
orderBy: [
566+
{ field: 'recorded_at', order: 'desc' as const },
567+
{ field: 'version', order: 'desc' as const },
568+
],
566569
limit: limit + 1,
567570
offset,
568571
});

packages/metadata/src/metadata.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -550,7 +550,7 @@ describe('MetadataPlugin', () => {
550550

551551
// Verify setDataEngine was called on the manager with ObjectQL
552552
const manager = (plugin as any).manager;
553-
expect(manager.setDataEngine).toHaveBeenCalledWith(mockObjectQL);
553+
expect(manager.setDataEngine).toHaveBeenCalledWith(mockObjectQL, undefined, undefined);
554554
});
555555

556556
it('should bridge ObjectQL AFTER filesystem metadata loading', async () => {

packages/spec/src/system/metadata-persistence.zod.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,9 @@ export const MetadataRecordSchema = z.object({
9999
/** Organization ID for multi-tenant isolation */
100100
organizationId: z.string().optional().describe('Organization identifier for multi-tenant isolation'),
101101

102+
/** Tenant ID for multi-tenant isolation (alias of organizationId in some contexts) */
103+
tenantId: z.string().optional().describe('Tenant identifier for multi-tenant isolation'),
104+
102105
/** Environment ID — null means platform-global, set means env-scoped */
103106
environmentId: z.string().optional().describe('Environment ID — null = platform-global, set = env-scoped'),
104107

0 commit comments

Comments
 (0)