fix(006): pin @statecrafting/fleet-native 0.2.0, the per-app ingress allow#67
Conversation
…allow The in-pod two-stage E2E (2026-07-23) placed two apps on two ports in one tenant namespace and found the addon's namespace-wide fleet-allow-ingress-nginx froze the first app's port under create-or-tolerate-409: the second app rolled out Ready (kubelet probes bypass NetworkPolicy) but 502'd from the edge. fleet-native 0.2.0 (statecrafting spec 006 amendment) makes the ingress allow per-app and removeApp deletes it. The napi surface is unchanged; no backend/fleet/ code moves. The spec amendment records the E2E, the defect, the live mitigation, and the operator residuals (stale hand-patched policy to delete post-repin; egress admits only DNS + 443, so no SMTP).
AI Code ReviewSpec CouplingClean. The amendment is in Bugs / Logic ErrorsOrphaned 0.1.0 NetworkPolicies — migration gap. The 0.1.0 addon created a namespace-scoped The spec should either add an operator run-book step (enumerate SecurityTransition window is intentionally more permissive — the spec correctly notes NetworkPolicies are additive during the handover period, but the above orphan scenario extends that permissive window indefinitely for tenants whose 0.1.0 apps are eventually re-placed or removed without a prior cleanup pass. SMTP egress residual is pre-existing and correctly noted; no new surface opened here. PerformanceNo concerns. This is a dependency pin bump with no hot-path changes. Blocking: the migration gap for pre-existing 0.1.0 namespace-scoped policies needs resolution (automated cleanup in Automated review by Claude. Diff size: 85 lines. |
What
Bumps the
@statecrafting/fleet-nativepin from 0.1.0 to 0.2.0 and records the 2026-07-23 in-pod two-stage fleet E2E in spec 006 as a dated amendment.The E2E placed two apps on two different ports in one tenant namespace (echo on 4000, the private enrahitu chassis on 8080) and surfaced the namespace-wide port pin: the addon's
fleet-allow-ingress-nginxNetworkPolicy was namespace-scoped but pinned the deploying app's single port under create-or-tolerate-409, so the first app froze the allowed port set. The chassis rolled out Ready (kubelet probes bypass NetworkPolicy) and served 502 from the edge; the live policy was hand-patched to admit 8080 as mitigation.fleet-native 0.2.0 (statecrafting spec 006 amendment, statecrafting/statecrafting#12) makes the ingress allow per-app (
fleet-allow-ingress-<app>, podSelector on the app's selector labels, exactly the app's port) andremoveAppdeletes it with the app's other per-app resources. The napi surface is unchanged, so nobackend/fleet/code moves; the spec amendment also records the operator residuals (the stale hand-patched policy to delete post-repin, and egress admitting only DNS + 443, so placed cells cannot reach SMTP).Verification
npm run typecheck: clean.npm test: 147 passed, 18 skipped.spec-spine compile / index / lint --fail-on-warn: green, shards committed.Coupling waiver
Spec-Drift-Waiver: the substantive change is spec 006 territory (its amendment is in this PR);
package.jsonandpackage-lock.json(owned by 002-app-shell) change only by the one-line dependency pin moving to the published 0.2.0, the same shared-surface shape PR #42 waived for the original repoint.