fix: fail closed backend capabilities and isolate gate smoke
This commit is contained in:
+29
-9
@@ -40,6 +40,25 @@ provider. The current character status subscription is gated in Convex; no
|
||||
durable user-job service exists in this baseline, so future job kinds remain
|
||||
closed until they have reviewed enqueue and worker entry points.
|
||||
|
||||
### Policy authority and update order
|
||||
|
||||
The web and Convex processes receive the same value, but parse it in separate
|
||||
processes. The web parser preserves the private baseline when its setting is
|
||||
omitted for development compatibility; the Convex/backend parser requires an
|
||||
explicit, valid setting and fails closed when propagation is missing, empty,
|
||||
or malformed. Convex is authoritative for persisted subscriptions and bridge
|
||||
mutations; the web gate is an earlier ingress/provider guard, not a replacement
|
||||
for backend authorization.
|
||||
|
||||
Update the backend setting first, validate a status query and representative
|
||||
bridge mutation in an isolated deployment, then update the web setting and
|
||||
verify the HTTP gate. A web-only narrowing does **not** revoke existing
|
||||
Convex subscriptions, sessions, or grants, and this lane makes no such claim.
|
||||
A backend-only narrowing may cause already-running web requests to receive
|
||||
backend denials until the web setting converges. Record both settings and the
|
||||
validation timestamps in the release evidence; rollback must restore the
|
||||
backend policy before reopening web entry points.
|
||||
|
||||
## Immutable release metadata
|
||||
|
||||
`APP_RELEASE_ID` is carried into the runtime image and returned as the
|
||||
@@ -89,15 +108,16 @@ lane.
|
||||
## Evidence boundaries
|
||||
|
||||
Read-only `tea` inspection on 2026-09-19 reported no Gitea workflows or runs
|
||||
for `jb/eden`; runner labels, Docker availability, and action availability are
|
||||
therefore not validated. The workflow is prepared locally but has not run
|
||||
remotely. The source job runs a strict staging release check after building
|
||||
the client. The separate container job is restricted to trusted pushes,
|
||||
validates Compose expansion, builds the digest-pinned web image, compiles a
|
||||
synthetic reference into a private volume, and smoke-tests the runtime with
|
||||
`--network none`; these steps still need an actual compatible Gitea runner.
|
||||
No browser automation, OAuth callback failure injection, Convex migration
|
||||
rollback, instance-credential backup/restore, key rotation, or live
|
||||
for `jb/eden`; runner labels, Docker availability, protected-ref enforcement,
|
||||
and action availability were therefore not validated. The workflow is prepared
|
||||
locally but has not run remotely. The source job runs a strict staging release
|
||||
check after building the client. The separate container job is currently
|
||||
**disabled** (`if: ${{ false }}`), not merely push-filtered: its rootless
|
||||
runner and protected-ref policy require operator verification and approval
|
||||
before enablement. Its draft commands use per-run image, volume, and container
|
||||
names and clean up only those names, but are not release evidence while the job
|
||||
is disabled. No browser automation, OAuth callback failure injection, Convex
|
||||
migration rollback, instance-credential backup/restore, key rotation, or live
|
||||
revocation/transfer evidence is claimed by this lane. Those remain explicit
|
||||
operator/integration gates and must use synthetic or separately consented
|
||||
isolated environments.
|
||||
|
||||
Reference in New Issue
Block a user