diff --git a/ampg/manifest.py b/ampg/manifest.py index bf39248..7f57447 100644 --- a/ampg/manifest.py +++ b/ampg/manifest.py @@ -84,6 +84,7 @@ def _fixture_entry( "checks": { "transport": transport, "profile": transport, + "isolation": "transport-profile", }, "interaction": _interaction_policy(protocol, route_policy), } diff --git a/docs/architecture.md b/docs/architecture.md index 10d0f11..ee7ca73 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -94,6 +94,10 @@ Daemon adapters provide a common interface: Adapters must be conservative. They do not modify non-AMPG config without showing a plan first, and managed config lives under AMPG-owned state directories. +Fixture manifests are the AMPG-to-AMPB boundary. They declare the published URL, expected +transport, expected profile, and transport-profile isolation result. They do not prescribe +browser process management or local daemon ownership; those decisions remain inside AMPB. + ## Platform providers Platform providers decide what daemon management means on the current host. AMPG detects diff --git a/docs/fixture-manifests.md b/docs/fixture-manifests.md index 2d4fb82..852cf66 100644 --- a/docs/fixture-manifests.md +++ b/docs/fixture-manifests.md @@ -19,7 +19,7 @@ The manifest contains public route expectations only: - enabled protocol fixtures. - protocol renderer and relative output path. - route URL for AMPB checks. -- expected AMPB transport and profile. +- expected AMPB transport, profile, and transport-profile isolation. - declared interaction tier, identity adapter, payment adapter, realtime flag, and public exposure flag. - optional route-group metadata for configured public route policies. @@ -27,6 +27,10 @@ The manifest contains public route expectations only: It must not contain private host inventory, hidden-service keys, tunnel keys, credentials, or deployment notes. +The isolation check is a browser-facing result, not a daemon-management instruction. +AMPG declares which transport profile must consume the route; AMPB independently decides +whether to adopt or start the local transport needed to reach it. + ## Commands ```sh diff --git a/tests/test_fixture_manifest.py b/tests/test_fixture_manifest.py index 0c3e70d..673e4d2 100644 --- a/tests/test_fixture_manifest.py +++ b/tests/test_fixture_manifest.py @@ -72,7 +72,14 @@ cid = "bafyexample" self.assertEqual("placeholder", by_protocol["tor"]["address_status"]) self.assertEqual("gemini://example.test/", by_protocol["gemini"]["url"]) self.assertEqual("ipfs://bafyexample", by_protocol["ipfs"]["url"]) - self.assertEqual({"transport": "ipfs", "profile": "ipfs"}, by_protocol["ipfs"]["checks"]) + self.assertEqual( + { + "transport": "ipfs", + "profile": "ipfs", + "isolation": "transport-profile", + }, + by_protocol["ipfs"]["checks"], + ) self.assertEqual( { "identity": "none", diff --git a/tests/test_preview.py b/tests/test_preview.py index 5bac712..92f0022 100644 --- a/tests/test_preview.py +++ b/tests/test_preview.py @@ -38,7 +38,10 @@ class PreviewTest(unittest.TestCase): self.assertEqual("http://127.0.0.1:19101/", tor_root["url"]) self.assertEqual({"transport": "clearnet", "profile": "clearnet"}, tor_root["checks"]) self.assertEqual("http://preview.onion/", tor_root["published"]["url"]) - self.assertEqual({"transport": "tor", "profile": "tor"}, tor_root["published"]["checks"]) + self.assertEqual( + {"transport": "tor", "profile": "tor", "isolation": "transport-profile"}, + tor_root["published"]["checks"], + ) self.assertEqual("preview", tor_root["address_status"]) self.assertEqual("ready", tor_root["preview"]["status"])