DriftDetector
Detects manifest drift: the gap between what a package DECLARES in its `milpa.json` and what its code ACTUALLY carries in `#[PluginMetadata]`. It diffs the two {@see VersionManifest}s field by field — `name`, `version`, and the `provides`/`requires`/`suggests` capability sets (identity compared by interface/id, normalized with `ltrim('\\')` so a leading-backslash FQCN and its bare form are equal). This is the tested primitive only. Turning a non-empty diff into the learnable `manifest drift` error is slice 2; slice 1 ships and proves the detector.
DriftDetector::diff()
public function diff(Milpa\Resolver\Manifest\VersionManifest $declared, Milpa\Resolver\Manifest\VersionManifest $actual): arrayDiff a declared manifest against the actual one.
Parameters
| Name | Type | Description |
|---|---|---|
| $declared | Milpa\Resolver\Manifest\VersionManifest | |
| $actual | Milpa\Resolver\Manifest\VersionManifest |