Skip to content

fix: bound iCloud eviction failure feedback - #198

Merged
seonghobae merged 14 commits into
mainfrom
fix/icloud-eviction-error-privacy-v1
Aug 26, 2026
Merged

fix: bound iCloud eviction failure feedback#198
seonghobae merged 14 commits into
mainfrom
fix/icloud-eviction-error-privacy-v1

Conversation

@seonghobae

@seonghobae seonghobae commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Purpose

Prevent arbitrary thrown frontend/backend exception text and raw native blocker detail from crossing the iCloud local-copy eviction desktop boundary while ensuring every blocked, failed, or unverified state gives the customer a bounded next action, without changing planning, approval, fingerprint/revalidation, filesystem/cloud mutation, persistence, or object-authority semantics.

Exact current state

  • Exact source head: 94cc1d6035396fc629e995abda16682c25f991c8.
  • Live protected main: be418bac9bfbdc8aa41b1a698713833e3dbccfdc.
  • The PR is open, Ready for review, mergeable, and based directly on protected main.
  • Current semantic delta is exactly:
    • src/lib/IcloudLocalEviction.svelte;
    • src/lib/icloudLocalEvictionFeedback.ts;
    • src/lib/icloudLocalEvictionFeedback.test.ts;
    • src/lib/icloudLocalEvictionErrorPrivacyContract.test.ts.
  • Current-head formal reviews and review threads are empty; no approval is claimed.

Test-first privacy and recovery repair

  • The initial RED contract proved the desktop projected arbitrary String(e) values for file selection, local-copy state inspection, and eviction execution.
  • The first bounded implementation removed those projections and retained the accessible role="alert" boundary plus the unchanged planIcloudLocalCopyEviction and evictIcloudLocalCopy authority calls.
  • Review then found two additional customer-facing gaps: raw result_record_error and native blocker codes still crossed the UI boundary, and bounded failure messages did not consistently explain the next safe action.
  • icloudLocalEvictionFeedback.ts now maps every current planning blocker and post-operation verification blocker to deduplicated customer guidance. Unknown backend values are never reflected; they receive a generic safe fallback.
  • File-selection, state-inspection, execution, and immutable-record persistence failures now use stable path-free guidance. Deliberately selected file paths and verified result evidence remain visible where needed for the task.
  • Test-only head edbaec7aa44275a13e7dbc795b1f27cbb82254a4 additionally required guidance even when an ineligible or unverified native result supplies an empty blocker list.
  • Current implementation 94cc1d6035396fc629e995abda16682c25f991c8 makes empty evidence fail closed to a generic next action, improves File Provider capability guidance to tell the customer to verify Finder’s ‘다운로드 제거’ availability, and makes the human-approval instruction independent of an impossible preceding blocker.

Planning, plan fingerprints, exact confirmation, rationale, execution-time state revalidation, cloud-object retention checks, local-allocation verification, immutable approval/result records, and filesystem/cloud mutation authority remain unchanged.

Exact-head validation

For exact head 94cc1d6035396fc629e995abda16682c25f991c8:

  • Release 31884072291 — success;
  • Test 31884072306 — queued;
  • Security Scan 31884072284 — queued;
  • SAST Semgrep 31884072301 — queued.

Queued evidence is not passing, and predecessor-head success does not transfer. Conditional PR-inapplicable publication or attestation helpers are not represented as passing release or provenance evidence.

Scope / non-duplication

This line owns only iCloud local-copy eviction feedback and its focused privacy/recovery contracts. It does not import repository-wide coverage #156, generic cleanup #174, canonical documentation #149, or another provider/cloud durable-authority line.

Remaining integration blockers

  • The live organization ruleset requires one independent approving review, approval after the last push, and review-thread resolution; the current head has no approval.
  • Repository-wide exact 100% owned-production region/statement-equivalent, branch, function, and line coverage remains materially unsatisfied on canonical owner ci: require exact-head production coverage evidence #156.
  • Ready-for-review status is not merge authorization.

Required before merge

Do not merge unless the unchanged exact head satisfies every applicable live required workflow and current finding, every review thread is resolved, a qualifying independent approval covers the last push/current head, fresh protected-main ancestry remains current, the live review ruleset is satisfied, and repository-wide exact coverage is satisfied without exclusions or threshold weakening. Pending, queued, skipped-required, neutral-required, failed, stale, predecessor, synthetic, diagnostic-only, status-only, model-only, rate-limited, no-source scanner, or infrastructure-only evidence is not passing.


Open in Devin Review

@coderabbitai

coderabbitai Bot commented Aug 12, 2026

Copy link
Copy Markdown

Warning

Review limit reached

Next included review available in 9 minutes.

View limit details

Limit details: You’ve used the included review currently available.

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: a1ef0404-85f4-4c19-91b3-785008ddf1ab

📥 Commits

Reviewing files that changed from the base of the PR and between 7eb131c and c1281fb.

📒 Files selected for processing (11)
  • docs/architecture/adr/0001-cloud-offload-goal-state.md
  • docs/architecture/adr/0002-cache-cleanup-is-per-item-evidence-bound.md
  • docs/architecture/adr/0004-bounded-maintenance-command-execution.md
  • docs/architecture/adr/0006-redacted-icloud-health-evidence.md
  • docs/architecture/adr/0007-pre-copy-evidence-cohort.md
  • docs/architecture/adr/0008-hourly-loop-foreign-dependencies-read-only.md
  • src/lib/IcloudLocalEviction.svelte
  • src/lib/icloudLocalEvictionErrorPrivacyContract.test.ts
  • src/lib/icloudLocalEvictionFeedback.test.ts
  • src/lib/icloudLocalEvictionFeedback.ts
  • src/lib/icloudLocalEvictionSafetyUiContract.test.ts

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.

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

@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 94cc1d6035396fc629e995abda16682c25f991c8.

  • Head SHA: 94cc1d6035396fc629e995abda16682c25f991c8

  • Workflow run: 32132421407

  • Workflow attempt: 1

Coverage evidence

Coverage Decision

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

Changed-File Evidence Map

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Changed file (4 files)"]
  S1 --> I1["repository behavior"]
  I1 --> R1["Review risk: Changed file (4 files)"]
  R1 --> V1["required checks"]
Loading

@opencode-agent

opencode-agent Bot commented Aug 18, 2026

Copy link
Copy Markdown
Contributor

OpenCode Review Overview

  • Head SHA: 94cc1d6035396fc629e995abda16682c25f991c8
  • Workflow run: 32138787466
  • 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 94cc1d6035396fc629e995abda16682c25f991c8.

  • Head SHA: 94cc1d6035396fc629e995abda16682c25f991c8

  • Workflow run: 32138787466

  • Workflow attempt: 1

Coverage evidence

Coverage Decision

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

Changed-File Evidence Map

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Changed file (4 files)"]
  S1 --> I1["repository behavior"]
  I1 --> R1["Review risk: Changed file (4 files)"]
  R1 --> V1["required checks"]
Loading

@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 94cc1d6035396fc629e995abda16682c25f991c8.

  • Head SHA: 94cc1d6035396fc629e995abda16682c25f991c8

  • Workflow run: 32138787466

  • Workflow attempt: 1

Coverage evidence

Coverage Decision

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

Changed-File Evidence Map

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Changed file (4 files)"]
  S1 --> I1["repository behavior"]
  I1 --> R1["Review risk: Changed file (4 files)"]
  R1 --> V1["required checks"]
Loading

@seonghobae
seonghobae dismissed opencode-agent[bot]’s stale review August 22, 2026 07:35

Dismissing: this REQUEST_CHANGES referenced workflow run 32138787466 where coverage-evidence failed at the same head SHA. coverage-evidence has since been re-run and now reports pass (verified via gh pr checks). No unresolved review threads remain. Re-request review to re-validate.

@opencode-agent opencode-agent Bot added priority: medium Normal-priority or P2 work status: blocked Blocked by conflict, dependency, or required prerequisite type: bug Defect or incorrect behavior labels Aug 22, 2026
devin-ai-integration[bot]

This comment was marked as resolved.

@seonghobae
seonghobae enabled auto-merge (squash) August 24, 2026 01:03
@opencode-agent
opencode-agent Bot disabled auto-merge August 24, 2026 02:24
@seonghobae
seonghobae marked this pull request as draft August 24, 2026 06:10
@seonghobae

Copy link
Copy Markdown
Contributor Author

Hardened the blocker guidance lookup on current head 83e8e6dd: uniqueActions now rejects inherited prototype keys (constructor, toString, __proto__) before rendering an action, with regression coverage for each key.

Validation: focused Vitest (6 passed), svelte-check (0 errors/0 warnings), and git diff --check. The informational review thread is resolved. The PR remains a draft with a stale/conflicting base; no merge is claimed.

@seonghobae

Copy link
Copy Markdown
Contributor Author

Rebased the draft PR onto current main with one conflict resolved in IcloudLocalEviction.svelte, preserving the richer bounded feedback and safe record-error guidance. Exact head is now cf763cdf; focused Vitest (6 passed), svelte-check (0 errors/0 warnings), and staged diff-check are clean. The earlier DIRTY state is cleared; hosted checks and protected review are rerunning.

@seonghobae
seonghobae marked this pull request as ready for review August 25, 2026 19:07
@seonghobae
seonghobae enabled auto-merge (squash) August 25, 2026 19:07
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, you can upgrade your account or add credits to your account and enable them for code reviews in your settings.

devin-ai-integration[bot]

This comment was marked as resolved.

@opencode-agent
opencode-agent Bot disabled auto-merge August 25, 2026 19:20
@seonghobae
seonghobae enabled auto-merge (squash) August 25, 2026 21:04
devin-ai-integration[bot]

This comment was marked as resolved.

@seonghobae
seonghobae merged commit 633c565 into main Aug 26, 2026
37 checks passed
@seonghobae
seonghobae deleted the fix/icloud-eviction-error-privacy-v1 branch August 26, 2026 07:39
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: blocked Blocked by conflict, dependency, or required prerequisite type: bug Defect or incorrect behavior

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant