feat(dashboard): guard capability-block approval for smolmachines bottles (PRD 0039)
apply_capability_change is Docker-only teardown/apply code. Before this change it was called regardless of backend, so approving a capability-block proposal from a smolmachines agent would run Docker commands against a slug that has no Docker container. After this change approve() reads the bottle's metadata: if compose_project is empty (the smolmachines indicator) it raises CapabilityApplyError with a clear operator message before any teardown runs. Docker bottles (non-empty compose_project) and unknown bottles (no metadata) fall through to the existing Docker path unchanged. Closes #136
This commit is contained in:
@@ -175,6 +175,13 @@ def approve(
|
||||
qp.proposal.bottle_slug, file_to_apply,
|
||||
)
|
||||
elif qp.proposal.tool == TOOL_CAPABILITY_BLOCK:
|
||||
_meta = read_metadata(qp.proposal.bottle_slug)
|
||||
if _meta is not None and not _meta.compose_project:
|
||||
raise CapabilityApplyError(
|
||||
"capability-block remediation is not supported for smolmachines "
|
||||
"bottles. Reject this proposal or handle the capability change "
|
||||
"manually, then restart the bottle."
|
||||
)
|
||||
diff_before, diff_after = apply_capability_change(
|
||||
qp.proposal.bottle_slug, file_to_apply,
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user