Make AMPB Firefox-first

This commit is contained in:
jwinterm
2026-07-07 16:51:32 -04:00
parent f0ffc039d1
commit 8a96957f62
13 changed files with 145 additions and 18 deletions
+2 -2
View File
@@ -23,7 +23,7 @@ class ConfigError(ValueError):
@dataclass(frozen=True)
class AppConfig:
state_dir: str = ".ampb"
default_engine: str = "system"
default_engine: str = "hardened-firefox"
isolate_by_transport: bool = True
transport_modes: dict[str, str] | None = None
@@ -68,7 +68,7 @@ def _parse_config(data: dict[str, Any], path: Path) -> AppConfig:
transports = _table(data, "transports", path)
state_dir = _string(browser, "state_dir", ".ampb", path)
default_engine = _string(browser, "default_engine", "system", path)
default_engine = _string(browser, "default_engine", "hardened-firefox", path)
isolate_by_transport = _bool(profiles, "isolate_by_transport", True, path)
transport_modes = _transport_modes(transports, path)
+15 -1
View File
@@ -4,7 +4,7 @@ from pathlib import Path
from .adapters import ADAPTERS
from .candidates import CANDIDATE_TRANSPORTS
from .metadata import ROUTE_RULES, TRANSPORT_DEFINITIONS
from .metadata import BROWSER_BACKENDS, ROUTE_RULES, TRANSPORT_DEFINITIONS
from .platforms import PLATFORM_CAPABILITIES
@@ -18,6 +18,7 @@ def generate_docs(root: Path, *, check: bool = False) -> list[Path]:
GENERATED_DIR / "adapters.md": _adapters_doc(),
GENERATED_DIR / "candidate-transports.md": _candidate_transports_doc(),
GENERATED_DIR / "platform-capabilities.md": _platform_capabilities_doc(),
GENERATED_DIR / "browser-strategy.md": _browser_strategy_doc(),
}
changed: list[Path] = []
for rel_path, content in docs.items():
@@ -104,3 +105,16 @@ def _candidate_transports_doc() -> str:
f"[source]({candidate.source}) | {candidate.note} |"
)
return _header("Generated Candidate Transports") + "\n".join(rows) + "\n"
def _browser_strategy_doc() -> str:
rows = [
"| Backend | Role | Status | Platforms | Launch Mode | Privacy Posture | Note |",
"| --- | --- | --- | --- | --- | --- | --- |",
]
for backend in BROWSER_BACKENDS:
rows.append(
f"| `{backend.name}` | {backend.role} | `{backend.status}` | {backend.platforms} | "
f"{backend.launch_mode} | {backend.privacy_posture} | {backend.note} |"
)
return _header("Generated Browser Strategy") + "\n".join(rows) + "\n"
+59
View File
@@ -20,6 +20,17 @@ class TransportDefinition:
note: str
@dataclass(frozen=True)
class BrowserBackend:
name: str
role: str
status: str
platforms: str
launch_mode: str
privacy_posture: str
note: str
ROUTE_RULES = (
RouteRule("*.onion", "tor", "tor", "route through Tor SOCKS"),
RouteRule("*.i2p", "i2p", "i2p", "route through I2P HTTP proxy"),
@@ -66,3 +77,51 @@ TRANSPORT_DEFINITIONS = (
"Adapter planned for resilient/private routing; physical/link-layer setup may require operator config.",
),
)
BROWSER_BACKENDS = (
BrowserBackend(
"hardened-firefox",
"primary web runtime",
"planned",
"desktop, android",
"managed profile, policy, and native transport launcher",
"strong baseline; track Firefox ESR and Tor Browser hardening choices",
"Default AMPB web runtime before a full browser fork.",
),
BrowserBackend(
"tor-browser-compatible",
"tor-hardened target",
"planned",
"desktop, android",
"adopt, launch, or fork after transport contracts are stable",
"highest Tor web target; do not claim equivalence until Tor Browser patches are tracked",
"Path toward real Tor Browser-grade behavior for .onion browsing.",
),
BrowserBackend(
"webkit-ios-shell",
"ios runtime",
"planned",
"ios",
"native shell with embedded transports and isolated web views",
"platform constrained; avoid clearnet fallback and isolate transport state",
"Required for App Store-style iOS builds outside special browser-engine entitlements.",
),
BrowserBackend(
"gemini-native-viewer",
"alternate-web viewer",
"planned",
"desktop, android, ios",
"built-in fetch and render path",
"no web engine or shared browser storage required",
"Used for Gemini and similar lightweight document transports.",
),
BrowserBackend(
"chromium-cef",
"prototype fallback",
"fallback",
"desktop",
"profile launcher only when Firefox path is blocked",
"not a Tor Browser privacy baseline",
"Allowed for experiments, but not the main privacy-browser strategy.",
),
)