You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Promote gateway real-internet mode & service_mirrors to experimental
### Motivation
- The gateway nftables policies and mirrored-mode operator output are now wired, so `gateway_portal.real_internet.mode` and `gateway_portal.real_internet.service_mirrors` should be represented as `experimental` rather than `unsupported` in the feature-state registry and docs.
- Tests and CLI validation must reflect that mirrored mode validates with a warning instead of failing alpha validation, while truly unsupported flags remain CI-failing.
### Description
- Update feature-state registry in `netengine/spec/feature_state.py` to mark `gateway_portal.real_internet.mode` and `gateway_portal.real_internet.service_mirrors` as `experimental` and add explanatory caveats.
- Update documentation rows in `docs/spec-alpha-support.md` and `docs/support-matrix.md` to document the promoted experimental state and caveats about remaining real-host integration and DNS aliasing.
- Adjust CLI/tests in `tests/test_cli.py` so a spec with `gateway_portal.real_internet.mode: mirrored` validates successfully with `--explain` (shows a warning) and change the JSON CI-failure test to target `upstream_resolver_enabled` which remains `unsupported`.
- Adjust spec parsing test in `tests/test_spec_parsing.py` to assert the loader logs an experimental warning for mirrored gateway mode instead of raising `SpecLoadError`.
### Testing
- Ran `poetry run pytest tests/test_spec_parsing.py tests/test_cli.py tests/test_gateway_portal.py tests/test_feature_states.py` and those targeted tests passed.
- Ran the full suite with `poetry run pytest`; the full run completed but showed 2 unrelated integration failures (`TestFullMVPLifecycle.test_full_mvp_lifecycle` returned `401` for reload and `TestHealthRoute.test_health_does_not_leak_last_error_detail` exposed `last_error`) that pre-existed this change.
- No new regressions observed in gateway rule generation or unit tests covering gateway portal behavior.
Copy file name to clipboardExpand all lines: docs/spec-alpha-support.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -27,7 +27,7 @@ Feature states:
27
27
|`pki.ocsp_enabled`|`experimental`|`false`|`netengine.handlers.pki_handler`, `netengine.handlers.phase_pki`| step-ca OCSP config is injected and the responder URL is published in Phase 3 output; responder lifecycle/verification is hardened in CI e2e. |
28
28
|`pki.rotation_policy`|`experimental`|`{enabled: true, default_interval_hours: 24, default_warning_days: 30, cert_type_overrides: {}}`|`netengine.handlers.phase_pki`, `netengine.workers.pki_cert_rotation_worker`, `netengine.api.routes`| Wired from the spec into worker registration and live-reloaded from runtime state; policy shape and cert-type semantics may change during alpha. |
29
29
|`gateway_portal.real_internet.mode`|`experimental`|`isolated`|`netengine.handlers.gateway_handler`, `netengine.handlers.gateway_portal_handler`, `netengine.spec.loader`| Isolated, shadowed, mirrored, and exposed nftables policies are wired; real-host integration remains alpha. |
30
-
|`gateway_portal.real_internet.service_mirrors`|`experimental`|`[]`|`netengine.handlers.gateway_handler`, `netengine.handlers.gateway_portal_handler`, `netengine.spec.loader`| Mirrored-mode allowlists and operator output are wired; automatic DNS aliasing for real hostnames remains alpha. |
30
+
|`gateway_portal.real_internet.service_mirrors`|`experimental`|`[]`|`netengine.handlers.gateway_handler`, `netengine.handlers.gateway_portal_handler`, `netengine.spec.loader`| Mirrored-mode allowlists and operator output are wired; `in_world_service` must be an IPv4 address until automatic DNS aliasing for real hostnames lands. |
31
31
|`gateway_portal.real_internet.upstream_resolver_enabled`|`unsupported`|`false`|`netengine.spec.loader`| Upstream resolver forwarding is not implemented. |
32
32
|`gateway_portal.cross_world.mode`|`unsupported`|`none`|`netengine.spec.loader`| Cross-world federation is not implemented. |
33
33
|`gateway_portal.cross_world.peers`|`unsupported`|`[]`|`netengine.spec.loader`| Cross-world peer provisioning is not implemented. |
Copy file name to clipboardExpand all lines: docs/support-matrix.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -27,7 +27,7 @@ Feature states:
27
27
|`pki.ocsp_enabled`|`unsupported`|`false`|`netengine.handlers.pki_handler`, `netengine.handlers.phase_pki`| Handler code can inject OCSP-related step-ca config and report a URL, but responder deployment/verification is incomplete and active use is unsupported in alpha validation. |
28
28
|`pki.rotation_policy`|`experimental`|`{enabled: true, default_interval_hours: 24, default_warning_days: 30, cert_type_overrides: {}}`|`netengine.handlers.phase_pki`, `netengine.workers.pki_cert_rotation_worker`, `netengine.api.routes`| Wired from the spec into worker registration and live-reloaded from runtime state; policy shape and cert-type semantics may change during alpha. |
29
29
|`gateway_portal.real_internet.mode`|`experimental`|`isolated`|`netengine.handlers.gateway_handler`, `netengine.handlers.gateway_portal_handler`, `netengine.spec.loader`| Isolated, shadowed, mirrored, and exposed nftables policies are wired; real-host integration remains alpha. |
30
-
|`gateway_portal.real_internet.service_mirrors`|`experimental`|`[]`|`netengine.handlers.gateway_handler`, `netengine.handlers.gateway_portal_handler`, `netengine.spec.loader`| Mirrored-mode allowlists and operator output are wired; automatic DNS aliasing for real hostnames remains alpha. |
30
+
|`gateway_portal.real_internet.service_mirrors`|`experimental`|`[]`|`netengine.handlers.gateway_handler`, `netengine.handlers.gateway_portal_handler`, `netengine.spec.loader`| Mirrored-mode allowlists and operator output are wired; `in_world_service` must be an IPv4 address until automatic DNS aliasing for real hostnames lands. |
31
31
|`gateway_portal.real_internet.upstream_resolver_enabled`|`unsupported`|`false`|`netengine.spec.loader`| Upstream resolver forwarding is not implemented. |
32
32
|`gateway_portal.cross_world.mode`|`unsupported`|`none`|`netengine.spec.loader`| Cross-world federation is not implemented. |
33
33
|`gateway_portal.cross_world.peers`|`unsupported`|`[]`|`netengine.spec.loader`| Cross-world peer provisioning is not implemented. |
0 commit comments