Skip to content

fix(selfdeploy): plan-bound shapes, loopback http, owned-only CVM teardown, fail-loud CVM counting - #50

Closed
echobt wants to merge 38 commits into
mainfrom
fix/ac-owned-cvm-teardown-selfdeploy-hotpatch
Closed

fix(selfdeploy): plan-bound shapes, loopback http, owned-only CVM teardown, fail-loud CVM counting#50
echobt wants to merge 38 commits into
mainfrom
fix/ac-owned-cvm-teardown-selfdeploy-hotpatch

Conversation

@echobt

@echobt echobt commented Jul 28, 2026

Copy link
Copy Markdown
Contributor

Summary

Self-deploy fixes found by driving the real production eval flow today, a local staging harness, hardened Phala CVM teardown, and a documented upgrade path for the one remaining blocker.

Base branch carries earlier stack work (bucket-D, prism, constation/Lium). The new work in this PR is the last 10 commits (8ee59da6..acc67b13).

Verified fixes (selfdeploy)

Fix Why it mattered
format_eval_shape_mismatch_error implemented Any eval shape mismatch raised AttributeError instead of a message — the function was called at cli.py:336 but defined nowhere
Instance type derived from the signed plan Plan carries eval_app.measurement.vm_shape (prod: tdx.xlarge); CLI defaulted to tdx.small, so every deploy died in the crash above. Explicit operator mismatch still fails closed
Loopback http:// opt-in Client refused non-https, forcing monkeypatching. Now allowed only for loopback hosts and SELFDEPLOY_ALLOW_INSECURE_LOOPBACK=1
Honest compose-hash candidate matching Matches the historical pre-artifact allowed_envs pin; encrypt_eval_secrets scoped to the measured allowlist

No attestation check was weakened: compose_hash, measurement/RTMR, KMS digest, DCAP, run-token binding and guest_artifact_proof are untouched.

Safety: Phala CVM handling

Two real defects, both found the hard way:

  1. Account-wide sweep in run_staging.sh deleted a live production eval CVM mid-run, right after key release, permanently wedging submission 11 (eval_running, key_grant_state=granted, retryable=false, cancel/failure 409). Teardown is now owned-only, refuses any CVM not provably created by the run, and logs its delete plan first.
  2. The CVM counter silently returned 0. Bare GET /api/v1/cvms returns [] even when inventory is non-empty; the authority is /cvms/paginated with X-Phala-Version: 2026-06-23. Parsing fell back to an empty list on unknown shapes, so "I don't understand the response" became "no CVMs running" — it produced a false no-spend claim while a CVM was live. Unknown shapes now raise, and an indeterminate count is treated as teardown failure, never success.

Local staging harness

docker-compose.staging.yml, scripts/staging/, docs/staging.md. Drives the flow from any host with real CVMs. Secrets gitignored, .example templates committed.

Also confirmed: the production AC is publicly reachable at https://chain.joinbase.ai/challenges/agent-challenge, which removes the need for SSH to the master validator and for any Cloudflare tunnel to receive guest callbacks.

Blocking prerequisite for execution proof

Proven empirically on fresh submission 13 (submit → review CVM → review_allowed → eval prepare → eval deploy, all PASS):

The production eval compose pin daf0f209… was measured without CHALLENGE_PHALA_EVAL_ARTIFACT_{URL,TOKEN} in allowed_envs. The deploy's encrypted_env_names contained neither. Phala therefore cannot inject the artifact grant, the guest cannot download the miner ZIP, and a matching guest_artifact_proof is structurally impossible on that pin — the earlier T8 run on the same pin produced none either.

docs/prod-compose-upgrade.md documents the exact path: the compose delta (the artifact envs and an image change), an ordered production change list with exact setting keys, how the new measurements must be derived rather than invented, the fail-closed allowlist trap, rollback, and the verification run that would finally yield the proof.

It also identifies a lower-risk intermediate: keeping the current prod image and adding only the two artifact envs yields 3a81feaf…, which unblocks the proof while changing a single variable.

Not done

  • Production was not modified — no SSH, no pin cut, no master mutation. The upgrade requires explicit authorization and real measurements.
  • The staging stack has never completed a full successful end-to-end run.
  • No execution proof was obtained, for the structural reason above.

Verification

  • Tests: 765 passed, 13 pre-existing failures unchanged, 0 errors (baseline was 3276 passed / 6 errors)
  • ruff clean on touched files
  • Phala CVM count 0, confirmed via phala cvms list --json
  • No secrets committed; generated certs and runtime dirs gitignored

echobt and others added 30 commits July 28, 2026 05:42
Guest CVMs fetch the miner ZIP over a short-lived bearer grant instead of
baking bytes into the image. Compose allowlists the delivery env names so
the generator hash stays intentional.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Guest hashes download and executed bytes; schema-v2 envelopes carry
guest_artifact_proof; host scoring rejects success results whose proof
describes a different artifact than the submission (distinct reason codes).

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Static app_id pins only worked for the operator account. Discovery omits
nonce and app_id so Phala mints the account-derived handle; live 422
showed nonce without app_id is illegal.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Reference miner loop and ZIP builder for submission path exercises
against a controlled hotkey without on-chain registration.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Optional background task posts winner-take-all weights to master with a
ledger so retries stay idempotent; wires eval artifact router on create_app.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Persist image digest allowlist and one-time attestation nonces so master
can gate Lium/constation evidence without in-memory-only state.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Shared attestation payload, nonce issue/consume, digest allowlist checks,
and constation poller/runner so pod evidence can be corroborated offline.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Wire nonce/allowlist/bundle endpoints through app proxy and CLI helpers
so workers can complete the Lium attestation handshake end-to-end.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Ingest and check constation bundles before accepting prism results;
attestation routes and breakglass keep offline characterization intact.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Prod hotpatch refuses multi-GPU hosts that reject gpu_count=1 splits and
exposes LiumClient.for_prism_training for the capacity scheduler path.
Bring prod hotpatch modules for master-owned training admission
(LiumCapacityScheduler) and orphan pod cleanup, plus settings wiring helpers.
Prod hotpatch settings surface for fail-closed constation orchestration
and optional master-owned Lium training admission (default off).
…ules

Hotpatched allowlist_repository gains get_active_pin and identity payload
mapping. Also restore image-resident custody/orchestrator/pod_binding/
attestation_keys/bundle_seal/routes pieces required by the prod main
wiring but missing from this branch tip.
…ration

Prod hotpatch adds ConstationPinSource stamping on Prism dispatch and
optional LiumCapacityAdmission.tick during run_once.
…aster

Prod hotpatch builds custody runtime, pre-forward hook, pin source, and
try_build_lium_capacity_scheduler when constructing the orchestration driver.
Prod entrypoint hotpatch (and fix/master-embed-ac-env-file) restore the
operator extension point dropped by env -i isolation so attestation and
review switches from embed.env actually reach embedded challenges.
Host-only Prism policy defaults are intentionally not copied.
…ateway-free analyzer

Prod hotpatches: REPO_ROOT finds docker/review when installed in
site-packages; host analyzer skips missing Base LLM gateway parking and
completes AST+similarity under gateway-free attested product mode.
Prod hotpatch modules: safe pod boot env/install planning, and the
OpenRouter dual-gate plagiarism adjudicator (wired when queue lands).
Prod hotpatch: PrismSettings plagiarism_llm_* / openrouter fields, and
CheckpointIntakeService last_status observability with fail-closed publish.
Prod hotpatch no longer parks missing Base LLM gateway as llm_standby.
Update the two contracts to expect first-pass allow and no requeue loop.
… delete

Prod bucket-D shapes/lifecycle/phala fixes: stage disk bounds, eval
tdx.xlarge default, disk-aware budget, and PhalaCloudClient.delete_cvm
so validators can tear down without a phala binary.
…nstalls

Prefer env/manifest and /app|/opt golden layouts over Path(__file__).parents[3]
so eval/prepare no longer 503s when the package is installed under site-packages.
…d compose envs

Land miner n_concurrent plan binding, optional hydration_digest, mid-run
progress validators, and EVAL_PROGRESS/DSTACK_DOCKER allowed envs. Keep
guest_artifact_proof, RA-TLS KR authority checks, dual residual review
gate, and raw-weight-push settings from the repo side.
…handoff

Provision disk_size without re-pinning app_id or reintroducing nonce.
CLI gains HTTP teardown, disk flags, and eval run-token handoff while
keeping multi-account discovery and artifact grant minting.
… prompt

Land prod tool-call contract wording so Grok tool_choice=auto emits a
closed submit_verdict call. Keep the joinbase REVIEW_API_BASE_URL pin.
When worker_plane is enabled the master queue no longer claims GPU work.
Borderline/attach plagiarism pairs go through the OpenRouter adjudicator
instead of terminal-rejecting the quarantine band.
…tures

Add behavioral tests for digest path, n_concurrent, progress wire, disk
guards, and dual residual signature. Update compose pin hash and
lifecycle/disk/teardown expectations for the landed product changes.
…errors

Omit --eval/--review-instance-type to follow the plan; explicit mismatch
still fails closed with an operator-safe message instead of AttributeError.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
http:// is accepted only for 127.0.0.1/localhost/::1 when
SELFDEPLOY_ALLOW_INSECURE_LOOPBACK=1; all other cases stay https-only.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
echobt and others added 8 commits July 28, 2026 09:36
…licy

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
…lowlist

Search KR/allowed_envs candidates so prod pin daf0f209… can be reproduced,
and encrypt only secrets listed on the measured compose allowlist.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Track created ids per run and in work/owned_cvms.txt; refuse foreign ids
in phala_delete_cvm; log the teardown plan; add --dry-run-teardown proof.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Ship compose + example/pin fixtures; keep tokens, KR PKI, challenge.env,
and runtime data/work dirs out of git.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Prefer run_staging.sh over SSH to prod; note signature-only keypairs and
that real Phala CVMs must always be torn down (owned ids only).

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Deploy acks record vm_uuid while GET /cvms returns id=cvm_*; map owned
track entries through listing aliases so teardown can delete what it created
without selecting foreign CVMs.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Legacy GET /cvms parsing treated unrecognized envelopes as an empty
list, under-reporting live spend as count 0. Pin CLI API version
2026-06-23, list via /cvms/paginated, and raise on unknown shapes so
teardown confirmation never succeeds when the count is indeterminate.
Add prod-compose-upgrade.md with the derived daf0f209→9a550b2d delta
(allowed_envs + image), ordered production change list, measurement
capture rules, rollback, and guest_artifact_proof verification plan.
Cover harvested dstack-client-trust.crt under staging gitignore with a
placeholder .example. Staging runner also surfaces CVM-missing mid-poll.
No production execution.
@coderabbitai

coderabbitai Bot commented Jul 28, 2026

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 177 files, which is 77 over the limit of 100.

To get a review, narrow the scope:
• coderabbit review --committed # exclude uncommitted changes
• coderabbit review --dir # limit to a subdirectory
• coderabbit review --base # compare against a closer base

Upgrade to a paid plan to raise the limit.

This review couldn't start because sufficient usage credits or metered capacity aren't available. Add credits or update usage-based reviews in the billing tab, then retry.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: bc6ea13a-1d60-499e-aaa7-1777005afed3

📥 Commits

Reviewing files that changed from the base of the PR and between 2bfa110 and acc67b1.

📒 Files selected for processing (178)
  • AGENTS.md
  • alembic/versions/0017_image_digest_allowlist.py
  • alembic/versions/0018_attestation_nonces.py
  • docker/master-entrypoint.sh
  • packages/challenges/agent-challenge/.gitignore
  • packages/challenges/agent-challenge/docker-compose.staging.yml
  • packages/challenges/agent-challenge/docker/review/review_runtime.py
  • packages/challenges/agent-challenge/docs/README.md
  • packages/challenges/agent-challenge/docs/prod-compose-upgrade.md
  • packages/challenges/agent-challenge/docs/staging.md
  • packages/challenges/agent-challenge/scripts/miner_agent/_miner_loop.py
  • packages/challenges/agent-challenge/scripts/miner_agent/_miner_openrouter.py
  • packages/challenges/agent-challenge/scripts/miner_agent/_miner_tools.py
  • packages/challenges/agent-challenge/scripts/miner_agent/agent.py
  • packages/challenges/agent-challenge/scripts/miner_agent/build_zip.py
  • packages/challenges/agent-challenge/scripts/staging/.gitignore
  • packages/challenges/agent-challenge/scripts/staging/config/challenge.env.example
  • packages/challenges/agent-challenge/scripts/staging/config/challenge_token.example
  • packages/challenges/agent-challenge/scripts/staging/config/dstack-client-trust.crt.example
  • packages/challenges/agent-challenge/scripts/staging/config/eval_allowlist.json
  • packages/challenges/agent-challenge/scripts/staging/config/kr.example/README.md
  • packages/challenges/agent-challenge/scripts/staging/config/kr_allowlist.json
  • packages/challenges/agent-challenge/scripts/staging/config/measurements_source.md
  • packages/challenges/agent-challenge/scripts/staging/config/pins.json
  • packages/challenges/agent-challenge/scripts/staging/config/review_allowlist.json
  • packages/challenges/agent-challenge/scripts/staging/config/review_evidence_encryption_key.example
  • packages/challenges/agent-challenge/scripts/staging/cvm_teardown_policy.py
  • packages/challenges/agent-challenge/scripts/staging/run_staging.sh
  • packages/challenges/agent-challenge/src/agent_challenge/analyzer/lifecycle.py
  • packages/challenges/agent-challenge/src/agent_challenge/api/app.py
  • packages/challenges/agent-challenge/src/agent_challenge/api/eval_artifact_routes.py
  • packages/challenges/agent-challenge/src/agent_challenge/canonical/attested_result.py
  • packages/challenges/agent-challenge/src/agent_challenge/canonical/compose.py
  • packages/challenges/agent-challenge/src/agent_challenge/canonical/eval_wire.py
  • packages/challenges/agent-challenge/src/agent_challenge/canonical/report_data.py
  • packages/challenges/agent-challenge/src/agent_challenge/core/models.py
  • packages/challenges/agent-challenge/src/agent_challenge/evaluation/artifact_import.py
  • packages/challenges/agent-challenge/src/agent_challenge/evaluation/attestation.py
  • packages/challenges/agent-challenge/src/agent_challenge/evaluation/authorization.py
  • packages/challenges/agent-challenge/src/agent_challenge/evaluation/benchmarks.py
  • packages/challenges/agent-challenge/src/agent_challenge/evaluation/direct_result.py
  • packages/challenges/agent-challenge/src/agent_challenge/evaluation/guest_execution_evidence.py
  • packages/challenges/agent-challenge/src/agent_challenge/evaluation/own_runner_backend.py
  • packages/challenges/agent-challenge/src/agent_challenge/evaluation/plan_scoring.py
  • packages/challenges/agent-challenge/src/agent_challenge/evaluation/raw_weight_push.py
  • packages/challenges/agent-challenge/src/agent_challenge/evaluation/score_chain_gate.py
  • packages/challenges/agent-challenge/src/agent_challenge/review/compose.py
  • packages/challenges/agent-challenge/src/agent_challenge/review/deployment.py
  • packages/challenges/agent-challenge/src/agent_challenge/sdk/app_factory.py
  • packages/challenges/agent-challenge/src/agent_challenge/sdk/config.py
  • packages/challenges/agent-challenge/src/agent_challenge/sdk/db.py
  • packages/challenges/agent-challenge/src/agent_challenge/selfdeploy/cli.py
  • packages/challenges/agent-challenge/src/agent_challenge/selfdeploy/client.py
  • packages/challenges/agent-challenge/src/agent_challenge/selfdeploy/cvm_list.py
  • packages/challenges/agent-challenge/src/agent_challenge/selfdeploy/eval.py
  • packages/challenges/agent-challenge/src/agent_challenge/selfdeploy/lifecycle.py
  • packages/challenges/agent-challenge/src/agent_challenge/selfdeploy/measurements.py
  • packages/challenges/agent-challenge/src/agent_challenge/selfdeploy/phala.py
  • packages/challenges/agent-challenge/src/agent_challenge/selfdeploy/provision_identity.py
  • packages/challenges/agent-challenge/src/agent_challenge/selfdeploy/review.py
  • packages/challenges/agent-challenge/src/agent_challenge/selfdeploy/shapes.py
  • packages/challenges/agent-challenge/tests/test_ac_raw_weight_push.py
  • packages/challenges/agent-challenge/tests/test_analyzer_lifecycle.py
  • packages/challenges/agent-challenge/tests/test_attestation_require_score_binding_v2.py
  • packages/challenges/agent-challenge/tests/test_bucket_d_hotpatch_resolution.py
  • packages/challenges/agent-challenge/tests/test_canonical_attested_result.py
  • packages/challenges/agent-challenge/tests/test_cross_integration_e2e_offline.py
  • packages/challenges/agent-challenge/tests/test_direct_eval_verification.py
  • packages/challenges/agent-challenge/tests/test_direct_result_admission_hardening.py
  • packages/challenges/agent-challenge/tests/test_eval_artifact_download_endpoint.py
  • packages/challenges/agent-challenge/tests/test_eval_artifact_encrypted_env.py
  • packages/challenges/agent-challenge/tests/test_eval_artifact_import.py
  • packages/challenges/agent-challenge/tests/test_eval_compose_hash_determine.py
  • packages/challenges/agent-challenge/tests/test_eval_identity_bounds_hardening.py
  • packages/challenges/agent-challenge/tests/test_eval_keyrelease_ratls_bootstrap.py
  • packages/challenges/agent-challenge/tests/test_eval_plan_scoring_policy.py
  • packages/challenges/agent-challenge/tests/test_eval_selfdeploy_provision_discovery.py
  • packages/challenges/agent-challenge/tests/test_eval_wire_contracts.py
  • packages/challenges/agent-challenge/tests/test_guest_artifact_execution_evidence.py
  • packages/challenges/agent-challenge/tests/test_guest_artifact_proof_envelope.py
  • packages/challenges/agent-challenge/tests/test_host_guest_artifact_proof_enforcement.py
  • packages/challenges/agent-challenge/tests/test_image_backward_compat_flagoff.py
  • packages/challenges/agent-challenge/tests/test_kr_host_pin.py
  • packages/challenges/agent-challenge/tests/test_miner_agent.py
  • packages/challenges/agent-challenge/tests/test_ordered_selfdeploy_cli.py
  • packages/challenges/agent-challenge/tests/test_own_runner_backend_decrypt.py
  • packages/challenges/agent-challenge/tests/test_own_runner_backend_failclosed_surface.py
  • packages/challenges/agent-challenge/tests/test_own_runner_backend_keyrelease.py
  • packages/challenges/agent-challenge/tests/test_own_runner_backend_phala.py
  • packages/challenges/agent-challenge/tests/test_own_runner_backend_provenance_failclosed.py
  • packages/challenges/agent-challenge/tests/test_phala_client_auth_region.py
  • packages/challenges/agent-challenge/tests/test_phala_create_ack_and_cli_token.py
  • packages/challenges/agent-challenge/tests/test_phala_cvms_list_parse.py
  • packages/challenges/agent-challenge/tests/test_post_grant_stage_markers_and_score_quote_normalize.py
  • packages/challenges/agent-challenge/tests/test_provision_identity_discovery.py
  • packages/challenges/agent-challenge/tests/test_raw_weight_push_lifespan.py
  • packages/challenges/agent-challenge/tests/test_review_deployment.py
  • packages/challenges/agent-challenge/tests/test_review_provision_app_id_discovery.py
  • packages/challenges/agent-challenge/tests/test_score_event_log_event_id_project.py
  • packages/challenges/agent-challenge/tests/test_score_gate_key_provider_and_canonical_emit.py
  • packages/challenges/agent-challenge/tests/test_score_vm_config_project.py
  • packages/challenges/agent-challenge/tests/test_selfdeploy_docs_accuracy.py
  • packages/challenges/agent-challenge/tests/test_selfdeploy_ordered_trust_hardening.py
  • packages/challenges/agent-challenge/tests/test_selfdeploy_rejection_observability.py
  • packages/challenges/agent-challenge/tests/test_selfdeploy_run_result.py
  • packages/challenges/agent-challenge/tests/test_selfdeploy_shape_loopback_policy.py
  • packages/challenges/agent-challenge/tests/test_staging_cvm_teardown_policy.py
  • packages/challenges/prism/src/prism_challenge/app.py
  • packages/challenges/prism/src/prism_challenge/attestation_routes.py
  • packages/challenges/prism/src/prism_challenge/audit.py
  • packages/challenges/prism/src/prism_challenge/breakglass.py
  • packages/challenges/prism/src/prism_challenge/config.py
  • packages/challenges/prism/src/prism_challenge/constation.py
  • packages/challenges/prism/src/prism_challenge/constation_checkers.py
  • packages/challenges/prism/src/prism_challenge/evaluator/checkpoint_intake.py
  • packages/challenges/prism/src/prism_challenge/evaluator/plagiarism_adjudicator.py
  • packages/challenges/prism/src/prism_challenge/evaluator/pod_boot.py
  • packages/challenges/prism/src/prism_challenge/ingestion.py
  • packages/challenges/prism/src/prism_challenge/proof.py
  • packages/challenges/prism/src/prism_challenge/queue.py
  • packages/challenges/prism/src/prism_challenge/routes.py
  • packages/challenges/prism/tests/conftest.py
  • packages/challenges/prism/tests/test_constation_bundle_wire.py
  • packages/challenges/prism/tests/test_constation_ok.py
  • packages/challenges/prism/tests/test_constation_scoring_gate.py
  • packages/challenges/prism/tests/test_execution_backend_constation_gate.py
  • packages/challenges/prism/tests/test_lium_client.py
  • packages/challenges/prism/tests/test_prism_attestation_routes_s8.py
  • packages/challenges/prism/tests/test_prism_audit_effective_tier.py
  • packages/challenges/prism/tests/test_prism_no_tee_absence.py
  • packages/challenges/prism/tests/test_prism_result_ingestion.py
  • packages/challenges/prism/tests/test_prism_scoring_characterization_baseline.py
  • packages/challenges/prism/tests/test_prod_constation_http_ingest.py
  • packages/challenges/prism/tests/test_prod_constation_kwargs.py
  • scripts/e2e_lium_attestation.py
  • scripts/prism_lium_attestation_e2e.py
  • src/base/attestation/__init__.py
  • src/base/attestation/payload.py
  • src/base/cli_app/main.py
  • src/base/compute/__init__.py
  • src/base/compute/attestation_nonce.py
  • src/base/compute/constation_corroboration.py
  • src/base/compute/constation_custody.py
  • src/base/compute/constation_poller.py
  • src/base/compute/constation_runner.py
  • src/base/compute/constation_types.py
  • src/base/compute/digest_allowlist.py
  • src/base/compute/lium.py
  • src/base/compute/lium_capacity.py
  • src/base/compute/lium_orphan.py
  • src/base/compute/lium_training_wiring.py
  • src/base/config/settings.py
  • src/base/db/__init__.py
  • src/base/db/models.py
  • src/base/master/app_proxy.py
  • src/base/master/challenge_work_source.py
  • src/base/master/constation/__init__.py
  • src/base/master/constation/allowlist_repository.py
  • src/base/master/constation/attestation_keys.py
  • src/base/master/constation/bundle_seal.py
  • src/base/master/constation/bundle_store.py
  • src/base/master/constation/custody_keys.py
  • src/base/master/constation/nonce_repository.py
  • src/base/master/constation/orchestrator.py
  • src/base/master/constation/pod_binding.py
  • src/base/master/constation/routes.py
  • src/base/master/orchestration.py
  • tests/unit/test_attestation_http.py
  • tests/unit/test_attestation_nonce_repository.py
  • tests/unit/test_attestation_payload.py
  • tests/unit/test_compute_attestation_nonce.py
  • tests/unit/test_compute_constation_service.py
  • tests/unit/test_compute_digest_allowlist.py
  • tests/unit/test_compute_lium_client.py
  • tests/unit/test_constation_forward_attach.py
  • tests/unit/test_digest_allowlist_repository.py
  • tests/unit/test_e2e_lium_attestation_offline.py
  • tests/unit/test_master_embed_env_file.py

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/ac-owned-cvm-teardown-selfdeploy-hotpatch

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@echobt

echobt commented Jul 28, 2026

Copy link
Copy Markdown
Contributor Author

Superseded by #51 (fix/ac-selfdeploy-staging-cvm-safety).

This PR (#50) mixed 38 commits of an older stack (fix/ac-owned-cvm-teardown-selfdeploy-hotpatch, merge-base 263eeb1b) with changes that main already absorbed independently (e.g. format_eval_shape_mismatch_error, plan-bound shapes / tdx.xlarge, partial X-Phala-Version work via #49). Against current main that produced 49 conflicting files.

The replacement is a single focused commit on current main with only still-needed work:

  • fail-loud /cvms/paginated listing (no silent total=0)
  • loopback http opt-in
  • owned-only staging CVM teardown (never account-sweep)
  • staging compose/scripts/docs

Closing in favor of #51.

@echobt

echobt commented Jul 28, 2026

Copy link
Copy Markdown
Contributor Author

Closed: superseded by #51 (clean main-based replacement). See comment above.

@echobt echobt closed this Jul 28, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant