{"record":{"id":"d3a62dbb8c6f53bc","repo":"EveryInc/compound-engineering-plugin","slug":"moved-legacy-pi-install-manifest-to-backuppath","errorCode":null,"errorMessage":"Moved legacy Pi install manifest to ${backupPath}","messagePattern":"Moved legacy Pi install manifest to (.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"info","filePath":"src/targets/pi.ts","lineNumber":308,"sourceCode":" * own next install will migrate it).\n */\nasync function archiveLegacyInstallManifestIfOwned(\n  managedDir: string,\n  pluginName: string,\n): Promise<void> {\n  const legacyDir = resolveLegacyManagedDir(managedDir, pluginName)\n  if (!legacyDir) return\n  const legacyManifestPath = path.join(legacyDir, PI_INSTALL_MANIFEST)\n  if (!(await pathExists(legacyManifestPath))) return\n\n  const owned = await readInstallManifest(legacyDir, pluginName)\n  if (!owned) return\n\n  const timestamp = new Date().toISOString().replace(/[:.]/g, \"-\")\n  const backupPath = path.join(managedDir, \"legacy-backup\", timestamp, PI_INSTALL_MANIFEST)\n  await ensureDir(path.dirname(backupPath))\n  await fs.rename(legacyManifestPath, backupPath)\n  console.warn(`Moved legacy Pi install manifest to ${backupPath}`)\n}\n\nasync function readInstallManifest(\n  managedDir: string,\n  pluginName: string,\n  paths?: PiPaths,\n): Promise<PiInstallManifest | null> {\n  const manifestPath = path.join(managedDir, PI_INSTALL_MANIFEST)\n  try {\n    const raw = await readText(manifestPath)\n    const parsed = JSON.parse(raw) as Partial<PiInstallManifest>\n    if (\n      parsed.version === 1 &&\n      parsed.pluginName === pluginName &&\n      Array.isArray(parsed.skills) &&\n      Array.isArray(parsed.prompts) &&\n      Array.isArray(parsed.extensions)\n    ) {","sourceCodeStart":290,"sourceCodeEnd":326,"githubUrl":"https://github.com/EveryInc/compound-engineering-plugin/blob/c9c10f8c75412c7232cb2bd663e5fd1cea98d84e/src/targets/pi.ts#L290-L326","documentation":"archiveLegacyInstallManifestIfOwned in src/targets/pi.ts migrates an old-format Pi install manifest: if the legacy manifest file is present and owned by this plugin, it is moved (fs.rename) into managedDir/legacy-backup/<timestamp>/ and this notice is printed. It is informational — the new manifest format takes over and the old file is preserved as a backup, not deleted.","triggerScenarios":"Running writePiBundle when PI_INSTALL_MANIFEST exists at the legacy location and ownership checks pass (owned); the file is renamed to legacy-backup/<ISO-timestamp>/<manifest-name>.","commonSituations":"Upgrading the plugin across a manifest-format change after a long-lived install; an install that was created by an older converter version and never re-installed since the format migration.","solutions":["No action needed — this is a successful migration; the legacy manifest is backed up under legacy-backup/.","If you need the old manifest contents, find them at managedDir/legacy-backup/<timestamp>/.","If you see this repeatedly, check that the new manifest is being written in the expected location (permissions/ownership of managedDir) and that no other process is restoring the legacy file.","Delete old legacy-backup directories once you have confirmed the new install works, to keep the managed dir clean."],"exampleFix":null,"handlingStrategy":"fallback","validationCode":"import { existsSync } from 'node:fs'\n// informational migration — no pre-check needed, but you can detect it:\nconst legacyPresent = existsSync(legacyManifestPath)\nconst backupDirPattern = /legacy-backup\\//\n// if legacyPresent is false and backups exist, migration already happened","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Treat this notice as success; do not restore the legacy manifest back into place","Locate backups under managedDir/legacy-backup/<timestamp>/ if you need old contents","Clean up old legacy-backup directories after confirming the new install"],"tags":["pi","migration","manifest","backup"],"backgroundTag":"legacy-manifest-migration","analyzedSha":"c9c10f8c75412c7232cb2bd663e5fd1cea98d84e","analyzedAt":"2026-08-31T15:18:07.959Z","schemaVersion":2},"datasetVersion":"2026-08-31T19:17:28.585Z"}