EveryInc/compound-engineering-plugin · info
Moved legacy Pi install manifest to ${backupPath}
Error message
Moved legacy Pi install manifest to ${backupPath} What it means
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.
Source
Thrown at src/targets/pi.ts:308
* own next install will migrate it).
*/
async function archiveLegacyInstallManifestIfOwned(
managedDir: string,
pluginName: string,
): Promise<void> {
const legacyDir = resolveLegacyManagedDir(managedDir, pluginName)
if (!legacyDir) return
const legacyManifestPath = path.join(legacyDir, PI_INSTALL_MANIFEST)
if (!(await pathExists(legacyManifestPath))) return
const owned = await readInstallManifest(legacyDir, pluginName)
if (!owned) return
const timestamp = new Date().toISOString().replace(/[:.]/g, "-")
const backupPath = path.join(managedDir, "legacy-backup", timestamp, PI_INSTALL_MANIFEST)
await ensureDir(path.dirname(backupPath))
await fs.rename(legacyManifestPath, backupPath)
console.warn(`Moved legacy Pi install manifest to ${backupPath}`)
}
async function readInstallManifest(
managedDir: string,
pluginName: string,
paths?: PiPaths,
): Promise<PiInstallManifest | null> {
const manifestPath = path.join(managedDir, PI_INSTALL_MANIFEST)
try {
const raw = await readText(manifestPath)
const parsed = JSON.parse(raw) as Partial<PiInstallManifest>
if (
parsed.version === 1 &&
parsed.pluginName === pluginName &&
Array.isArray(parsed.skills) &&
Array.isArray(parsed.prompts) &&
Array.isArray(parsed.extensions)
) {View on GitHub (pinned to c9c10f8c75)
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.
Defensive patterns
Strategy: fallback
Validate before calling
import { existsSync } from 'node:fs'
// informational migration — no pre-check needed, but you can detect it:
const legacyPresent = existsSync(legacyManifestPath)
const backupDirPattern = /legacy-backup\//
// if legacyPresent is false and backups exist, migration already happened Prevention
- 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
When it happens
Trigger: 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>.
Common situations: 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.
Related errors
- Dropping unsafe Pi install-manifest entry in ${manifestPath}
- Skipping ${targetDir}: existing unmanaged directory (not ove
- The Codex plugin manifest does not point at this repository'
- Local skill mode cannot represent Codex runtime components:
- Ignoring unreadable install manifest at ${manifestPath}.
AI-assisted analysis of EveryInc/compound-engineering-plugin@c9c10f8c75 (2026-08-31).
Data as JSON: /api/errors/d3a62dbb8c6f53bc.
Report an issue: GitHub.