# 0.2.0 Update Compatibility Audit

This audit compares pre-merge `main` (`1173b8a`, core 0.1.9) with the initially
published merge (`c917615`, incorrectly numbered 1.2.0). The merge changed 191
files: 75 core/runtime files, 85 plugin files, 20 generated knowledge files, and
11 other project files.

## Confirmed Upgrade Failures

1. **Core imported an independently preserved plugin.** `src/web/server.js`
   loaded `plugins/okf/backend/file_knowledge` during startup. Core-only updates
   deliberately preserve the whole `plugins/` directory, so a 0.1.9 install did
   not receive the new OKF plugin file and crashed before the web server started.
2. **A newly added package was required before dependencies were updated.** The
   OBS connector loaded `obs-websocket-js` at module initialization. Core updates
   preserve `node_modules/` and the old updater did not reconcile it with the new
   lockfile, producing another startup crash.
3. **Core and plugin delivery were not coordinated.** The merged repository had
   patch-bumped plugins, but a core update copied none of them by design. There
   was no historical release catalog or exact-version plugin installer to let an
   administrator bring an old installation to a known release set.
4. **The release number was wrong.** 1.2.0 was a mistaken major-version jump from
   0.1.9. Normal semantic-version ordering would reject the corrected 0.2.0 as a
   downgrade for an already affected install.

No unresolved static relative imports remain in the repaired tree. Plugin data
remains isolated under each plugin's `data/` directory, and current plugin
manifests match the 0.2.0 release catalog.

## Repairs

- Core now uses the OKF capability registered at
  `global.lumiFrameworks.okf.saveCorrection`; if OKF is absent, only that action
  shows an install/enable message.
- OBS WebSocket is an optional dependency and is loaded behind a guarded
  connector boundary. Its absence cannot stop the overlay or web server.
- `run.js` reconciles required direct dependencies with `package-lock.json`
  before each application start. Optional integration failure is degraded, not
  fatal.
- `release-index.json` maps core, plugin, and Lumi AI tool versions to immutable
  release tags. Admins can install or reinstall an exact core/plugin version.
- `update-manifest.json` declares 0.2.0 as the supported replacement for 1.2.0,
  allowing affected installations to repair themselves despite semver ordering.
- Repository checkout and post-copy verification both confirm the requested
  version. Plugin updates preserve plugin data and now restart before reporting
  the selected code as active.

## Data Safety

The repair does not replace `data/`, `plugins/`, `node_modules/`, configuration,
storage, uploads, logs, databases, secrets, environment files,
`knowledge/community/`, or `knowledge/corrections/`. It creates a compressed
rollback snapshot first. The repair ZIP contains only managed core files, a
preservation manifest, and SHA-256 hashes; it contains no user or plugin data.

The snapshot database copy is a safety backup, not a migration or replacement.
The repair introduces no destructive database migration.
