Skip to content

feat: surface privacy-safe Podman reclaim evidence - #150

Draft
seonghobae wants to merge 78 commits into
mainfrom
feat/podman-desktop-evidence-v3
Draft

feat: surface privacy-safe Podman reclaim evidence#150
seonghobae wants to merge 78 commits into
mainfrom
feat/podman-desktop-evidence-v3

Conversation

@seonghobae

@seonghobae seonghobae commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Purpose

Surface privacy-safe, read-only Podman reclaim evidence in the desktop without turning logical reclaim candidates into mutation authority or verified host-physical-reclaim claims. This remains the canonical clean product line replacing stale #133.

Exact current state

  • exact source head: 05688274c428d5c57152ea93d4e336ba89a1b49b
  • live protected base: main@79067c1160ddedf7fc962cbf8067ce7e83c4564a
  • PR is Ready for review / mergeable, not merge-ready
  • exact Test 33048735988 — SUCCESS
  • exact Security Scan 33048736051 — SUCCESS
  • exact SAST 33048735909 — SUCCESS
  • exact Release 33048735904 — FAILURE in the shared release-artifact verifier dependency; this PR does not own that verifier and carries no release-verifier delta
  • all current inline review threads are resolved

Product/security/accessibility boundary

  • read-only evidence only; no prune/remove/machine lifecycle/VM deletion/TRIM/raw-image mutation authority is added
  • configured capacity, raw logical bytes, host allocation, guest filesystem usage, Podman logical candidates, and physical reclaimability remain distinct
  • physically_reclaimable_bytes remains unknown unless a future versioned before/after proof establishes it
  • image, stopped-container, and volume review domains remain independent and conservative
  • complete exact-image evidence requires the exact image-record observation and candidate-set fingerprint
  • machine names, paths, image IDs/tags, command output, account-local context, dynamic unsafe text, and malformed assessment fields cannot cross the desktop evidence schema
  • no shell-string construction from frontend input
  • loading/error/result states use accessible status/alert/live-region semantics

Current dependency boundary

The Release failure is owned by canonical release-verifier PR #264. Do not add a Podman-local workaround or duplicate verifier implementation. Review can proceed while that independent dependency is repaired/integrated; Release remains a non-passing merge gate.

Repository-wide exact owned-production coverage remains independently owned by Draft PR #156 and is still materially below the required exact 100%. Feature-local Test/Security/SAST success does not substitute for that global gate.

Required before merge

Merge only after an unchanged exact head satisfies the shared Release verifier, actual repository-wide exact non-vacuous 100% owned-production coverage, every applicable central required workflow, zero valid unresolved findings, fresh ancestry/mergeability, package/SBOM/provenance requirements, and the live ruleset's qualifying approval requirements. Pending, failed, stale, predecessor, synthetic, configuration-only, or dependency-bypassed evidence is non-passing.

Summary by CodeRabbit

  • 새로운 기능

    • Podman 저장 공간 상태와 정리 가능 항목을 확인하는 읽기 전용 점검 화면을 추가했습니다.
    • 이미지, 중지된 컨테이너, 볼륨의 검토 필요 여부와 회수 가능 상태를 표시합니다.
    • 캐시, 개발 아티팩트, dangling 이미지 정리 흐름을 분리하고 실행 전 재확인을 지원합니다.
  • 개선 사항

    • 불완전하거나 확인되지 않은 정보는 보수적으로 검토 대상으로 표시합니다.
    • 오류 메시지에서 사용자명, 호스트명, 로컬 경로 등 개인정보가 노출되지 않습니다.
    • 정리 실패 시 최신 상태를 다시 확인하고 재시도할 수 있습니다.

@coderabbitai

coderabbitai Bot commented Aug 10, 2026

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: a0159c4d-d6f8-4b0c-b52d-2fdd700a2a80

📥 Commits

Reviewing files that changed from the base of the PR and between cb3267f and 0568827.

📒 Files selected for processing (8)
  • src-tauri/src/podman_desktop.rs
  • src-tauri/tests/podman_desktop_branch_coverage.rs
  • src-tauri/tests/podman_desktop_candidate_review_consistency.rs
  • src-tauri/tests/podman_desktop_issue_privacy.rs
  • src-tauri/tests/podman_desktop_physical_reclaim_claim.rs
  • src/lib/PodmanEvidence.svelte
  • src/lib/podmanEvidence.test.ts
  • src/lib/podmanEvidence.ts
🚧 Files skipped from review as they are similar to previous changes (1)
  • src-tauri/tests/podman_desktop_physical_reclaim_claim.rs

Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review.


📝 Walkthrough

Walkthrough

Podman reclaim 계획을 개인정보 보호형 증거 계약으로 투영합니다. 읽기 전용 Tauri 명령과 프런트엔드 검증을 추가합니다. 후보별 검토 경계를 강화하고, Cleanup 화면에 증거 조회와 승인된 dangling 이미지 정리를 통합합니다.

Changes

Podman 증거 조회

Layer / File(s) Summary
증거 계약과 개인정보 제거
docs/architecture/podman-desktop-evidence.md, src-tauri/src/podman_desktop.rs, src-tauri/tests/*
PodmanReclaimPlan을 제한된 PodmanDesktopEvidence로 투영합니다. 경로와 식별자를 제거하고, fingerprint·레코드 수·완전성·후보별 검토 경계를 검증합니다.
Tauri 명령 경계
src-tauri/src/lib.rs, src-tauri/src/podman_desktop_bridge.rs, src-tauri/tests/*command*, src-tauri/tests/*regressions*
읽기 전용 inspect_podman_desktop_evidence 명령을 등록합니다. 공개 명령의 스키마와 비파괴 probe 조건을 검증합니다.
프런트엔드 증거 검증
src/lib/podmanEvidence.ts, src/lib/podmanEvidenceError.ts, src/lib/podmanEvidence*.test.ts, vitest.config.ts
Tauri 반환값을 검증하고 null 관측값, SHA-256 fingerprint, 상태와 오류 코드를 처리합니다. 오류 메시지와 커버리지 계약을 추가합니다.
Cleanup 화면 통합
src/lib/Cleanup.svelte, src/lib/PodmanEvidence.svelte, src/routes/+page.svelte, src/lib/*PrivacyContract.test.ts, src/lib/*CustomerCopyContract.test.ts
Podman 증거 조회를 화면에 표시합니다. 승인 문구와 사유를 확인한 뒤 dangling 이미지 정리를 실행하고 결과를 다시 조회합니다. 캐시와 개발 아티팩트 정리 흐름도 분리합니다.

Estimated code review effort: 4 (Complex) | ~60 minutes

Merge Risk: 🟡 Moderate · up to 05688

The PR adds a privacy-safe, read-only Podman evidence view, but the older desktop route can still expose sensitive machine and filesystem details, so the new privacy boundary is not exclusive. The image-cleanup confirmation also presents the approval phrase only as placeholder text, and parallel Podman views may drift. These bounded security and UX-safety risks require owner follow-up or explicit acceptance before merge.

Sequence Diagram(s)

sequenceDiagram
  participant Cleanup
  participant PodmanEvidence
  participant Tauri
  participant Podman
  Cleanup->>PodmanEvidence: load evidence
  PodmanEvidence->>Tauri: invoke inspect_podman_desktop_evidence
  Tauri->>Podman: run read-only probe
  Podman-->>Tauri: reclaim plan
  Tauri-->>PodmanEvidence: privacy-safe evidence
  PodmanEvidence-->>Cleanup: validated status and review labels
  Cleanup->>Tauri: execute approved dangling-image cleanup
  Tauri-->>Cleanup: cleanup result
Loading
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed Docstring coverage is 96.72% which is sufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 61 functions across 18 files. (1 skipped: 1…
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed 제목은 개인정보 보호형 Podman reclaim evidence를 읽기 전용 경로로 노출하는 주요 변경 사항을 정확하고 간결하게 요약합니다.
Full details: Docstring Coverage

Explanation

Docstring coverage is 96.72% which is sufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 61 functions across 18 files. (1 skipped: 1 unsupported.)

✨ Finishing Touches 💡 1
🛠️ Fix failing CI checks 💡
  • Create stacked PR
  • Commit on current branch
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/podman-desktop-evidence-v3

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.

coderabbitai[bot]

This comment was marked as resolved.

@opencode-agent opencode-agent Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

OpenCode cannot approve yet because required coverage evidence did not pass.

Review outcome

1. HIGH .github/workflows/opencode-review.yml:1 - Coverage evidence did not prove required test/docstring evidence

  • Problem: The required coverage-evidence job result was failure, so OpenCode cannot establish approval sufficiency for this head.

  • Root cause: Automated approval is only valid when the same-head coverage-evidence job proves supported repository test suites passed and configured docstring gates passed or were advisory, or reports not applicable because no supported source files or package manifests exist. Missing, failed, skipped, unavailable, or unsupported-tooling test evidence is a blocker.

  • Fix: Install or configure the repository test/docstring evidence tooling when source files or package manifests exist, rerun the current-head coverage-evidence job, and approve only after it reports success with required evidence or explicit no-source not-applicable evidence.

  • Regression test: Keep the approval branch checking needs.coverage-evidence.result == success before posting APPROVE, and publish REQUEST_CHANGES when coverage-evidence blocker states such as cancelled, skipped, failed, unsupported-tooling, or below-100 evidence are present.

  • Result: REQUEST_CHANGES

  • Reason: coverage-evidence result was failure, so required test/docstring evidence was not proven for current head 53b7d53481f3375bd58013bc181ceb9b6971c07d.

  • Head SHA: 53b7d53481f3375bd58013bc181ceb9b6971c07d

  • Workflow run: 31357301155

  • Workflow attempt: 1

Coverage evidence

Coverage Decision

  • Result: FAIL
  • Test evidence: not proven passing
  • Docstring evidence: not proven passing when configured
  • Failure count: 3

Changed-File Evidence Map

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Changed file (18 files)"]
  S1 --> I1["repository behavior"]
  I1 --> R1["Review risk: Changed file (18 files)"]
  R1 --> V1["required checks"]
  Evidence --> S2["Docs: podman-desktop-evidence.md"]
  S2 --> I2["operator or user guidance"]
  I2 --> R2["Review risk: Docs: podman-desktop-evidence.md"]
  R2 --> V2["docs review"]
Loading

@opencode-agent

Copy link
Copy Markdown
Contributor

OpenCode Review Overview

  • Head SHA: 53b7d53481f3375bd58013bc181ceb9b6971c07d
  • Workflow run: 31357301155
  • Workflow attempt: 1
  • Gate result: REQUEST_CHANGES (approval step)

Pull request overview

OpenCode cannot approve yet because required coverage evidence did not pass.

Review outcome

1. HIGH .github/workflows/opencode-review.yml:1 - Coverage evidence did not prove required test/docstring evidence

  • Problem: The required coverage-evidence job result was failure, so OpenCode cannot establish approval sufficiency for this head.

  • Root cause: Automated approval is only valid when the same-head coverage-evidence job proves supported repository test suites passed and configured docstring gates passed or were advisory, or reports not applicable because no supported source files or package manifests exist. Missing, failed, skipped, unavailable, or unsupported-tooling test evidence is a blocker.

  • Fix: Install or configure the repository test/docstring evidence tooling when source files or package manifests exist, rerun the current-head coverage-evidence job, and approve only after it reports success with required evidence or explicit no-source not-applicable evidence.

  • Regression test: Keep the approval branch checking needs.coverage-evidence.result == success before posting APPROVE, and publish REQUEST_CHANGES when coverage-evidence blocker states such as cancelled, skipped, failed, unsupported-tooling, or below-100 evidence are present.

  • Result: REQUEST_CHANGES

  • Reason: coverage-evidence result was failure, so required test/docstring evidence was not proven for current head 53b7d53481f3375bd58013bc181ceb9b6971c07d.

  • Head SHA: 53b7d53481f3375bd58013bc181ceb9b6971c07d

  • Workflow run: 31357301155

  • Workflow attempt: 1

Coverage evidence

Coverage Decision

  • Result: FAIL
  • Test evidence: not proven passing
  • Docstring evidence: not proven passing when configured
  • Failure count: 3

Changed-File Evidence Map

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Changed file (18 files)"]
  S1 --> I1["repository behavior"]
  I1 --> R1["Review risk: Changed file (18 files)"]
  R1 --> V1["required checks"]
  Evidence --> S2["Docs: podman-desktop-evidence.md"]
  S2 --> I2["operator or user guidance"]
  I2 --> R2["Review risk: Docs: podman-desktop-evidence.md"]
  R2 --> V2["docs review"]
Loading

@seonghobae
seonghobae marked this pull request as draft August 10, 2026 05:16
@seonghobae
seonghobae marked this pull request as ready for review August 26, 2026 10:16
@seonghobae
seonghobae enabled auto-merge (squash) August 26, 2026 10:16
devin-ai-integration[bot]

This comment was marked as resolved.

devin-ai-integration[bot]

This comment was marked as resolved.

devin-ai-integration[bot]

This comment was marked as resolved.

coderabbitai[bot]

This comment was marked as resolved.

devin-ai-integration[bot]

This comment was marked as resolved.

@seonghobae
seonghobae marked this pull request as draft August 26, 2026 11:23
auto-merge was automatically disabled August 26, 2026 11:23

Pull request was converted to draft

devin-ai-integration[bot]

This comment was marked as resolved.

@seonghobae
seonghobae marked this pull request as ready for review August 26, 2026 11:53
@seonghobae
seonghobae enabled auto-merge (squash) August 26, 2026 11:53
@seonghobae
seonghobae marked this pull request as draft August 27, 2026 07:05
auto-merge was automatically disabled August 27, 2026 07:05

Pull request was converted to draft

@seonghobae
seonghobae marked this pull request as ready for review August 27, 2026 09:08

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 1 new potential issue.

Devin Review

Comment thread src/lib/Cleanup.svelte
Comment on lines 91 to +92
} catch (e) {
podmanPruneError = String(e);
podmanPruneError = podmanEvidenceErrorMessage(e);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📝 Info: Prune failures collapse to one generic message

prunePodmanDanglingImages now routes errors through podmanEvidenceErrorMessage, which always returns one static sentence, discarding actionable causes such as confirmation-mismatch or candidate-set-changed that String(e) previously surfaced. Enforced by a contract test as a privacy boundary, but it removes all diagnostic distinction from prune failures.

Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

@seonghobae
seonghobae marked this pull request as draft August 27, 2026 11:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

priority: medium Normal-priority or P2 work status: draft Draft pull request type: feature New or expanded product capability

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant