Repository navigation
feat: restore key data controls with deployment preflight - #87
Closed
ALikesToCode wants to merge 2 commits into
Closed
ALikesToCode wants to merge 2 commits into
ALikesToCode wants to merge 2 commits into
Conversation
|
Important Draft PR not reviewedDraft PRs are not automatically reviewed by default.
To automatically review draft PRs, update your CodeRabbit configuration: reviews:
auto_review:
drafts: true
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Deploying with
|
| Status | Name | Latest Commit | Updated (UTC) |
|---|---|---|---|
| ❌ Deployment failed View logs |
multillm-proxy | da66481 | Oct 20 2026, 12:10 PM |
Owner
Author
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Re-land #85 for an app whose requests carry personal data, with account-RPC compatibility, release admission and complete local CI coverage.
Incident evidence and changes
The account RPC is owned by the main Worker and reads its D1 binding directly. It does not traverse the private Knowledge service or require a new policy-signing secret. Both incident flags default off when unset.
A local D1 migrated through 0043 reproduces
account_storage_unavailablewhen the new account fields reach the previous Container's strict decoder. Matching current runtimes return 200 for both reported routes. No historical logs or Container fingerprint are available, so this establishes a version-compatibility failure mechanism, not the exact cause of the incident described as all-new. The stale private Worker does not explain these two account paths.data_policy_version: 1. Earlier Containers receive the original row shape only for verified unrestricted accounts; legacy reads and writes cannot bypass or replace restrictions. Current Containers still refuse absent, malformed or unsupported policies.test:workerwith a coverage contract.Local verification
Every CI command below ran through
blade-testlock. Python 3.11, Node 22 for Node/integration jobs and Node 24 for Cloudflare builds. Integration usedPYTHON=.venv/bin/python. The package-manager install used an isolated local prefix; bundle output directories were isolated under.cacheinstead of shared/tmppaths.python -m pip install --disable-pip-version-check --require-hashes -r requirements-ci.lockpython scripts/check_static_secrets.pyruff check . --select E9,F63,F7,F82mypy --ignore-missing-imports --follow-imports=skip --disable-error-code import-untyped --disable-error-code var-annotated --disable-error-code arg-type --disable-error-code assignment --disable-error-code operator app.py routes services providers streamingbandit -q -c .bandit -r app.py config.py error_handlers.py route_helpers.py routes services providers streamingpip-audit -r requirements.lockpython -m pytest -qnpm cinpm audit --audit-level=highnode --test tests/test_frontend_build.mjsnpm run test:workernpm run cf:migrations:checknpm run test:deploynode --test tests/test_free_routes_worker.mjsnode --test tests/test_client_headers_worker.mjsnpm run test:integrationnpm install --global "$(node -p "require('./package.json').packageManager")"pnpm install --frozen-lockfilepnpm run buildgit diff --exit-code -- static/css/style.cssnode scripts/key_data_preflight.mjs --checknode scripts/check_worker_bundle.mjs --config wrangler.knowledge.jsonc --outdir /tmp/knowledge-workernode scripts/check_worker_bundle.mjs --config wrangler.jsonc --outdir /tmp/main-workerThe bundle wrapper always supplies
--dry-run, normalizes paths against argument injection, and omits the release build command only in a temporary configuration. Real deploys retain the default preflight. Release-admission failure cases use deterministic command evidence in tests; no live preflight, deployment, secret change or remote migration was performed. Confidentiality and attribution checks are clean, with no exemptions.Rollout
Workers Builds deploys the main Worker and its Container independently of the GitHub workflow; a failed CI run does not stop that trigger. The default build must remain gated. Prefer disabling independent promotion and enabling the CI-gated orchestration workflow as the single deployment owner.
--containers-rollout=none, then roll out the matching Container. The manual script and deployment workflow now use this order.If independent builds remain connected, their initial upload must fail until prerequisites match; rerun only after the ordered release prerequisites succeed. Do not treat this draft's local evidence as confirmation of the historical all-new runtime combination.
The restored changes retain existing oversized files:
services/auth_service.py(1,261 lines),services/proxy_service.py(3,437) andtests/test_cloudflare_worker.mjs(4,165). A separate change can extract durable-principal lookup, provider orchestration and transport-specific tests respectively; this re-land preserves the reviewed boundaries. The new account-contract and release modules remain small.