{
  "files": [
    "crates/spt-runtime/src/manifest.rs",
    "crates/spt-runtime/src/registry.rs",
    "crates/spt-store/src/serving.rs",
    "crates/spt-store/src/perch.rs",
    "crates/spt-daemon/src/servehost.rs",
    "docs/MANIFEST.md",
    "docs/STORAGE.md",
    "docs-site/src/harness-contract/manifest.md"
  ],
  "implemented": [
    "Optional adapter.web_short_path with shared serving-name/reserved-facet validation; registration checks shipped alias overlays before writes, and resolved manifests revalidate.",
    "Registration creates checked core-owned web output before committing active record, including without a daemon. Reconciliation creates/repairs active base roots, maintains exactly one owned dir entry, and retires inactive/missing registrations without deleting output.",
    "Startup and mutation reconciliation share REGISTRY_WRITE and durable publication. Live assignments—including alias presence—survive repeated reconciliation/update; reactivation uses never-reused allocator history.",
    "Read-only canonical root validator shared with HTTP; store rejects non-core-shaped roots and duplicate adapter ownership. Kind-independent TTL/audience metadata preserved.",
    "Tagged lifecycle/storage/manifest evidence and documented alias-update behavior, core ownership, stopped-daemon creation, profiles, and retained bytes."
  ],
  "main_interfaces": [
    "Startup: servehost::reconcile_at(home: &Path, now_ms: u64) -> io::Result<()> before serving begins.",
    "After CLI add/remove/update registration commits: servehost::reconcile(broker_name: &str) -> io::Result<()>; bounded existing control transport, ServeRequest::Reconcile returns Listed or refusal. No client registry writes.",
    "perch::create_adapter_web_dir_at(adapters_dir: &Path, adapter: &str) -> io::Result<PathBuf> is already wired into register_with_core and daemon reconcile.",
    "perch::validate_adapter_web_dir_in(home: &Path, adapter: &str) -> io::Result<PathBuf> returns canonical checked root without writes; HTTP peer integrated it.",
    "Regenerate manifest schema through Main-owned gates. Adapter header LSP references plus literal search found no struct literal migrations."
  ],
  "tests_authored_or_extended": [
    "registry::tests::web_alias_validation_precedes_registration_and_rechecks_resolved_profiles",
    "registry::tests::activation_refuses_redirected_web_root_without_touching_install_bytes (Unix)",
    "servehost::tests::adapter_lifecycle_has_one_root_and_retains_output_and_live_assignments",
    "serving::tests::adapter_cannot_claim_an_explicit_registration_or_escape_its_aux_directory (extended install-root and duplicate-owner refusals)"
  ],
  "unchanged": "adapter_update.rs has no production registry mutations: only pure planning/conduct/ripple_registered reads. Actual registration mutation edges are Main-owned CLI calls; no artificial daemon-update write path added.",
  "risks_forks": "No outstanding semantic fork. Main confirmed alias changes apply after deactivation/reactivation, not during a live assignment. No builds, tests, lint, format, or validation commands run per assignment; both-host verification remains Main-owned."
}