Skip to content

Commit f216cd5

Browse files
committed
Migrate legacy workspace metadata on load
Codex P0: Fix missing name/projectPath fields in old metadata Old installations have metadata.json with only id/projectName/workspacePath. When getAllWorkspaceMetadata() loads these files, enrichMetadataWithPaths() fails because getWorkspacePaths() requires metadata.name and metadata.projectPath. Solution: Detect missing fields when loading metadata and migrate in-place: - Add name field (from workspace basename) - Add projectPath field (from config) - Save migrated metadata to disk This prevents the empty workspace list bug where legacy workspaces disappear from the UI after upgrading to stable IDs.
1 parent eb0d8f8 commit f216cd5

File tree

1 file changed

+28
-2
lines changed

1 file changed

+28
-2
lines changed

src/config.ts

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -321,7 +321,20 @@ export class Config {
321321

322322
if (fs.existsSync(metadataPath)) {
323323
const data = fs.readFileSync(metadataPath, "utf-8");
324-
const metadata = JSON.parse(data) as WorkspaceMetadata;
324+
let metadata = JSON.parse(data) as WorkspaceMetadata;
325+
326+
// Migrate legacy metadata that's missing required fields
327+
if (!metadata.name || !metadata.projectPath) {
328+
metadata = {
329+
...metadata,
330+
name: metadata.name ?? workspaceBasename,
331+
projectPath: metadata.projectPath ?? projectPath,
332+
projectName: metadata.projectName ?? projectName,
333+
};
334+
// Save migrated metadata
335+
fs.writeFileSync(metadataPath, JSON.stringify(metadata, null, 2));
336+
}
337+
325338
workspaceMetadata.push(metadata);
326339
} else {
327340
// Try legacy ID format (project-workspace)
@@ -330,7 +343,20 @@ export class Config {
330343

331344
if (fs.existsSync(metadataPath)) {
332345
const data = fs.readFileSync(metadataPath, "utf-8");
333-
const metadata = JSON.parse(data) as WorkspaceMetadata;
346+
let metadata = JSON.parse(data) as WorkspaceMetadata;
347+
348+
// Migrate legacy metadata that's missing required fields
349+
if (!metadata.name || !metadata.projectPath) {
350+
metadata = {
351+
...metadata,
352+
name: metadata.name ?? workspaceBasename,
353+
projectPath: metadata.projectPath ?? projectPath,
354+
projectName: metadata.projectName ?? projectName,
355+
};
356+
// Save migrated metadata
357+
fs.writeFileSync(metadataPath, JSON.stringify(metadata, null, 2));
358+
}
359+
334360
workspaceMetadata.push(metadata);
335361
} else {
336362
// No metadata found - create it for legacy workspace

0 commit comments

Comments
 (0)