Skip to content

feat: persist provider sync goals and runtime ADRs - #213

Merged
seonghobae merged 529 commits into
mainfrom
feat/provider-sync-dynamic-goals
Aug 24, 2026
Merged

feat: persist provider sync goals and runtime ADRs#213
seonghobae merged 529 commits into
mainfrom
feat/provider-sync-dynamic-goals

Conversation

@seonghobae

@seonghobae seonghobae commented Aug 13, 2026

Copy link
Copy Markdown
Contributor

Summary

  • persist explicit provider sync states, including local-current with is_uploaded=false as pending-upload; incomplete File Provider items fail closed
  • write and atomically update receipt-scoped ADR/Goal projections from immutable provider evidence in desktop and headless workflows
  • keep receipt/evidence/approval operations authoritative; projection failures never fabricate copy or eviction authority
  • export ontology class/relation, provider sync state, and copy-approval lineage in the Naruon envelope
  • keep Goal gates and source eviction fail-closed when provider state is unknown or incomplete
  • recover bounded stale Git worktree metadata read-only; never invoke prune/remove from the audit path
  • require fast-mlsirm calibration before Homebrew cleanup execution and keep macOS catalog child opens non-blocking
  • bind provider-global-sync admission and Naruon readiness to canonical, complete, quiet evidence
  • terminate cloud-planner help before HOME/provider/filesystem work and reject non-UTF-8 host arguments through a bounded process boundary
  • bind Podman image cleanup to the exact reviewed image identities instead of a broad prune primitive

Exact current state

  • exact source head: 4fab5d8fa91c5f72c59fb78c3104b0be23a896ab
  • protected main: be418bac9bfbdc8aa41b1a698713833e3dbccfdc
  • PR is open, Ready for review, and GitHub reports it mergeable; Ready/mergeable is not merge authorization
  • exact-current-head Test 32274241586, Release 32274241576, Security Scan 32274241579, and SAST Semgrep 32274241674 are queued/pending or running; none is passing evidence until completed on this unchanged head
  • predecessor reviews/checks do not transfer to this head

Current-head security repair: exact Podman mutation authority

The predecessor head introduced an approval phrase bound to the observed dangling-image fingerprint but executed podman image prune --force. Podman's documented image prune behavior removes all dangling images visible at execution time, so a newly dangling image could enter the mutation set after review without being represented by the approved fingerprint.

The current head adds a production regression before the fix and routes the public Podman reclaim module through an explicit mutation-authority boundary. Execution now:

  1. validates the requested machine and human rationale;
  2. collects the exact unreferenced image IDs/tags/sizes and binds them to the existing SHA-256 candidate fingerprint;
  3. requires the exact approval phrase and a bounded candidate count;
  4. immediately re-lists the candidate set and rejects any ID/tag/reference/size drift with podman-prune-candidate-set-changed before mutation;
  5. removes only those immutable reviewed IDs using podman image rm --no-prune;
  6. never invokes broad image prune, never uses --force, and therefore does not authorize removal of newly dangling images, parent images, or containers outside the reviewed set;
  7. keeps image IDs out of the returned public command/evidence payload.

The regression src-tauri/tests/podman_prune_candidate_set_race.rs exercises both candidate-set drift and the exact-ID/no-force/no-parent-prune command boundary with a real subprocess fixture.

Cloud-planner process boundary

The predecessor regression showed that run() resolved HOME/USERPROFILE before argument parsing. The process boundary screens std::env::args_os() first, makes sole --help / -h terminate successfully without HOME, and maps non-UTF-8 host input to stable invalid-argument-encoding without reflecting payload bytes. The existing planner implementation remains behind an internal include/module boundary.

Windows MSI bundle repair

A predecessor Release run exposed WiX LGHT0103 for the nonexistent disksage-cloud-plan-implementation.rs.exe. Tauri CLI scanned the source fragment under src/bin as a binary name. The fragment now lives outside src/bin, while build.rs keeps the generated include contract and a package contract test prevents recurrence.

Provider-global-sync and Naruon integrity

Provider-global-sync admission requires canonical evidence identity, complete evidence, empty blockers, and quiet aggregate progress. Naruon readiness binds the same fileproviderctl-global-dump evidence contract and rejects forged evidence kind or contradictory clear aggregate progress. These paths remain fail-closed and do not grant provider write or source-eviction authority.

Integration boundary

  • semantic-data-portal and Naruon remain separately owned integration dependencies; this DiskSage PR does not mutate their repositories
  • no foreign dedicated-writer repository or its automation is modified to make this PR pass

Required before merge

Revalidate the unchanged exact head against branch protection, all applicable Test/Release/Security/SAST/coverage/package/provenance gates, zero valid unresolved findings, fresh protected-main ancestry, and qualifying independent review where live governance requires it. Queued, pending, skipped, cancelled, absent, neutral, failed, stale/predecessor, synthetic, status-only, model-only, author-only, no-source, or infrastructure-only evidence is non-passing.


Open in Devin Review

@coderabbitai

coderabbitai Bot commented Aug 13, 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
📝 Walkthrough

Walkthrough

Provider 동기화 상태와 불변 receipt에서 Cloud offload Goal·ADR projection을 생성합니다. 복사, attestation, reconciliation, source eviction 결과에 상태와 projection 정보를 추가합니다. Judge calibration, iCloud native 상태, bounded scan, 캐시 정리와 worktree fallback도 갱신합니다.

Changes

클라우드 오프로드 상태와 증거

Layer / File(s) Summary
오프로드 상태·증거·실행 흐름
src-tauri/src/cloud_transfer.rs, src-tauri/src/provider_sync.rs, src-tauri/src/cloud_adr.rs, src-tauri/src/commands.rs, src-tauri/src/bin/disksage-cloud-plan.rs, src/lib/api.ts, src/lib/CloudArchive.svelte
Provider 상태, Goal 상태, receipt reconciliation, 원자적 projection 저장과 결과 표시를 추가합니다.
Bounded source scan과 lineage
src-tauri/src/cloud.rs, src-tauri/src/naruon_lineage.rs, src-tauri/src/provider_global_sync.rs
Source scan, metadata probe, lineage와 provider global sync를 제한된 증거 처리로 변경합니다.

Judge calibration 승인 게이트

Layer / File(s) Summary
Calibration 검증과 실행 게이트
src-tauri/src/judge_calibration.rs, src-tauri/src/commands.rs, src-tauri/src/brew_cleanup.rs, src/lib/api.ts, src/lib/BrewCleanup.svelte
Calibration 입력과 일치도 게이트를 검증합니다. 성공한 calibration이 없으면 Homebrew 실행을 허용하지 않습니다.

iCloud 복사 준비성

Layer / File(s) Summary
Native 상태 수집과 readiness 계약
src-tauri/src/icloud_sync_health.rs, src-tauri/src/naruon_cloud_copy_readiness.rs, src-tauri/src/bin/disksage-naruon-copy-readiness-verify.rs
bounded brctl status 증거를 수집하고 readiness envelope에 저장합니다. 불완전 증거와 needs-sync-up을 차단 요인으로 처리합니다.
Native admission 차단과 화면 통합
src-tauri/src/cloud_local_eviction.rs, src/lib/CloudArchive.svelte, src/lib/cloudReviewQueue.ts
File Provider native 상태 누락과 provider 차단 상태를 신규 복사와 source eviction 판단에 반영합니다.

실행 및 파일 처리 안전성

Layer / File(s) Summary
프로세스 그룹 종료와 worktree fallback
src-tauri/src/git_worktree.rs
Unix timeout 시 프로세스 그룹을 종료합니다. 검증된 Git 관리 파일을 증거 불완전 fallback으로 복구합니다.
Identity-bound 캐시 정리
src-tauri/src/rules.rs, src-tauri/src/cache_cleanup.rs, src/lib/Cleanup.svelte, src/lib/cacheCleanup*.test.ts
캐시 대상의 객체 ID, 크기와 수정 시각을 검증합니다. 변경된 대상은 거부하고 검증된 대상만 Trash로 이동합니다.
Workflow와 계약 지원 변경
.github/workflows/*.yml, src-tauri/Cargo.toml, src-tauri/tests/package_metadata_contract.rs, README.md, docs/architecture/, docs/development/, docs/superpowers/specs/
실행 시간 제한, 의존성 선언, 운영 절차와 readiness·lineage·offload 계약을 갱신합니다.

Estimated code review effort: 5 (Critical) | ~100 minutes

Merge Risk: 🟠 High · up to aa8bd

This PR changes cloud-copy admission, provider-state persistence, and ADR/Goal projections, but the current head can still leave projections inconsistent and allow iCloud copies after admission is blocked. Additional unresolved paths may bypass or misstate cleanup, scan, evidence, reconciliation, and worktree safety gates, so merging should wait for fixes or explicit acceptance.

Sequence Diagram(s)

sequenceDiagram
  participant CloudArchive
  participant CloudCommands
  participant ProviderSync
  participant CloudAdr
  participant ProjectionFiles
  CloudArchive->>CloudCommands: copy 또는 receipt reconciliation 요청
  CloudCommands->>ProviderSync: provider evidence 수집
  ProviderSync-->>CloudCommands: sync_state 반환
  CloudCommands->>CloudAdr: Goal·ADR snapshot 생성
  CloudAdr->>ProjectionFiles: JSON 원자적 교체
  ProjectionFiles-->>CloudCommands: projection 경로와 경고 반환
  CloudCommands-->>CloudArchive: Goal 상태·동기화 상태·projection 표시
Loading
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed Docstring coverage is 92.45% which is sufficient. The required threshold is 80.00%.
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 제목은 provider sync 상태와 Goal·runtime ADR projection을 영속화하는 PR의 주요 변경을 명확하고 간결하게 설명합니다.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/provider-sync-dynamic-goals

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 force-pushed the feat/provider-sync-dynamic-goals branch from cdd839c to 4f970d7 Compare August 13, 2026 10:50
coderabbitai[bot]

This comment was marked as resolved.

coderabbitai[bot]

This comment was marked as resolved.

coderabbitai[bot]

This comment was marked as resolved.

coderabbitai[bot]

This comment was marked as resolved.

coderabbitai[bot]

This comment was marked as resolved.

Copy link
Copy Markdown
Contributor Author

Current-head release-gate finding on exact PR head 809823682d31841d8fd51e2e2e3f967281f07b5b (live base be418bac9bfbdc8aa41b1a698713833e3dbccfdc): .github/workflows/release.yml still captures packaged CLI help with help_output="$("$asset_path" --help 2>&1 || true)" and then only greps for a usage marker. The || true erases the executable's exit status, so a packaged CLI that prints usage while exiting non-zero still satisfies this release smoke. That conflicts with the successful-help contract tracked in #210 and can let Release remain green on the exact failure mode those CLI repairs are meant to eliminate.

Please keep this in the existing release.yml owner lane rather than creating a competing workflow. A narrow test-first repair should make stage_cli require --help exit 0, require the expected usage on stdout, and reject stderr for the successful-help path; do not weaken other package/SBOM/provenance gates. Re-run the actual packaged binaries on Linux/macOS/Windows on the unchanged repaired head. Pending/skipped/predecessor status is not proof.

Copy link
Copy Markdown
Contributor Author

Separate current-head release-supply-chain finding on exact head 809823682d31841d8fd51e2e2e3f967281f07b5b / live base be418bac9bfbdc8aa41b1a698713833e3dbccfdc: the tag release path attests the packaged files, but it does not generate or publish an SBOM. Repository-wide searches on the same protected head found no CycloneDX, SPDX, or Syft generation path, while attest-release explicitly requires exactly 17 regular files (5 desktop bundles + 6 CLIs + 6 CLI checksum files). actions/attest therefore gives provenance for the artifact set, not a software-component inventory.

Please keep this in the existing release.yml owner lane. Test-first acceptance should add a deterministic SBOM artifact for the exact source/dependency lock state, validate its schema/content before publication, include its digest/attestation binding in the exact tag artifact set, and update the closed-world artifact-count check so an absent, stale, duplicate, malformed, or wrong-source SBOM fails closed. Preserve the current pinned actions, checksum verification, provenance attestation, least-privilege permissions, and no-extra-files invariant; do not treat provenance alone as SBOM evidence.

@cursor

cursor Bot commented Aug 16, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@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 221744d5a49811d696e916f13f4185491c0a0abe.

  • Head SHA: 221744d5a49811d696e916f13f4185491c0a0abe

  • Workflow run: 32148570654

  • Workflow attempt: 1

Coverage evidence

Coverage Decision

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

Changed-File Evidence Map

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Workflow (2 files)"]
  S1 --> I1["GitHub Actions review job"]
  I1 --> R1["Review risk: Workflow (2 files)"]
  R1 --> V1["actionlint plus required checks"]
  Evidence --> S2["Changed file (50 files)"]
  S2 --> I2["repository behavior"]
  I2 --> R2["Review risk: Changed file (50 files)"]
  R2 --> V2["required checks"]
  Evidence --> S3["Docs (7 files)"]
  S3 --> I3["operator or user guidance"]
  I3 --> R3["Review risk: Docs (7 files)"]
  R3 --> V3["docs review"]
Loading

@opencode-agent

opencode-agent Bot commented Aug 18, 2026

Copy link
Copy Markdown
Contributor

OpenCode Review Overview

  • Head SHA: 53d92d18ace763a1378c3b68ca1f47b46a3777a7
  • Workflow run: 32213498207
  • 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 53d92d18ace763a1378c3b68ca1f47b46a3777a7.

  • Head SHA: 53d92d18ace763a1378c3b68ca1f47b46a3777a7

  • Workflow run: 32213498207

  • Workflow attempt: 1

Coverage evidence

Coverage Decision

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

Changed-File Evidence Map

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Workflow (2 files)"]
  S1 --> I1["GitHub Actions review job"]
  I1 --> R1["Review risk: Workflow (2 files)"]
  R1 --> V1["actionlint plus required checks"]
  Evidence --> S2["Changed file (53 files)"]
  S2 --> I2["repository behavior"]
  I2 --> R2["Review risk: Changed file (53 files)"]
  R2 --> V2["required checks"]
  Evidence --> S3["Docs (7 files)"]
  S3 --> I3["operator or user guidance"]
  I3 --> R3["Review risk: Docs (7 files)"]
  R3 --> V3["docs review"]
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 f8d92181f275a8602cdab2c34a4c1683acacb3ad.

  • Head SHA: f8d92181f275a8602cdab2c34a4c1683acacb3ad

  • Workflow run: 32189898261

  • Workflow attempt: 1

Coverage evidence

Coverage Decision

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

Changed-File Evidence Map

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Workflow (2 files)"]
  S1 --> I1["GitHub Actions review job"]
  I1 --> R1["Review risk: Workflow (2 files)"]
  R1 --> V1["actionlint plus required checks"]
  Evidence --> S2["Changed file (50 files)"]
  S2 --> I2["repository behavior"]
  I2 --> R2["Review risk: Changed file (50 files)"]
  R2 --> V2["required checks"]
  Evidence --> S3["Docs (7 files)"]
  S3 --> I3["operator or user guidance"]
  I3 --> R3["Review risk: Docs (7 files)"]
  R3 --> V3["docs review"]
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 f8d92181f275a8602cdab2c34a4c1683acacb3ad.

  • Head SHA: f8d92181f275a8602cdab2c34a4c1683acacb3ad

  • Workflow run: 32194522265

  • Workflow attempt: 1

Coverage evidence

Coverage Decision

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

Changed-File Evidence Map

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Workflow (2 files)"]
  S1 --> I1["GitHub Actions review job"]
  I1 --> R1["Review risk: Workflow (2 files)"]
  R1 --> V1["actionlint plus required checks"]
  Evidence --> S2["Changed file (50 files)"]
  S2 --> I2["repository behavior"]
  I2 --> R2["Review risk: Changed file (50 files)"]
  R2 --> V2["required checks"]
  Evidence --> S3["Docs (7 files)"]
  S3 --> I3["operator or user guidance"]
  I3 --> R3["Review risk: Docs (7 files)"]
  R3 --> V3["docs review"]
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 53d92d18ace763a1378c3b68ca1f47b46a3777a7.

  • Head SHA: 53d92d18ace763a1378c3b68ca1f47b46a3777a7

  • Workflow run: 32213498207

  • Workflow attempt: 1

Coverage evidence

Coverage Decision

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

Changed-File Evidence Map

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Workflow (2 files)"]
  S1 --> I1["GitHub Actions review job"]
  I1 --> R1["Review risk: Workflow (2 files)"]
  R1 --> V1["actionlint plus required checks"]
  Evidence --> S2["Changed file (53 files)"]
  S2 --> I2["repository behavior"]
  I2 --> R2["Review risk: Changed file (53 files)"]
  R2 --> V2["required checks"]
  Evidence --> S3["Docs (7 files)"]
  S3 --> I3["operator or user guidance"]
  I3 --> R3["Review risk: Docs (7 files)"]
  R3 --> V3["docs review"]
Loading

@seonghobae
seonghobae force-pushed the feat/provider-sync-dynamic-goals branch from 129249b to 853b409 Compare August 19, 2026 13:09

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Aug 20, 2026

Copy link
Copy Markdown
⚠️ Action not completed

Review rate limited.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

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.

@seonghobae

Copy link
Copy Markdown
Contributor Author

Current-head fix pushed at 3e72277: integration test now uses the public exact copy-approval boundary (the helper was unit-test-only), and asserts legacy unknown sync evidence fails closed as provider-sync-incomplete. Please review and rerun checks for this exact head.

@seonghobae

Copy link
Copy Markdown
Contributor Author

Current-head CI repair a6ec6e2: the same timed-out lsof shell-descendant race found in the stack was present here too. The bounded lsof probe now creates and kills a process group, preserving the independent ps active-use probe budget. Focused test passed on the equivalent fix (3/3, Rust 1.97.1). Please review this exact head.

@seonghobae

Copy link
Copy Markdown
Contributor Author

Current-head follow-up at 2b9833c63e01298453985af416d65e26ffbeddfc:

  • Recorded the 2026-08-22 Finder/iCloud evidence and the dynamic ADR amendment in the product baseline and ADR-0001.
  • cloud_local_eviction_lsof_warning: 3 passed, including slow_lsof_does_not_starve_the_process_command_probe.
  • The lsof timeout fix kills only its private process group before joining readers; it does not cancel Finder or touch File Provider/cloud/source state.

Hosted required checks and protected review remain pending; no merge is claimed.

Copy link
Copy Markdown
Contributor Author

Validated current-head data-integrity/reliability defect requiring owner repair before this Draft can advance: exact #213 head 2b9833c63e01298453985af416d65e26ffbeddfc calls require_local_copy_headroom(candidate) before non-adoption copy, and that helper probes volume_pressure::snapshot_volume(Path::new(&candidate.src), ...). The actual macOS copy path stages with tempdir_in(destination.parent()) and then finalizes into the destination. For a supported cross-volume layout (for example source on an external filesystem and File Provider destination under ~/Library/CloudStorage), the source-volume probe can both false-block a valid copy and, more seriously, admit mutation when the destination/staging filesystem lacks candidate.size + 1 GiB reserve.

Required test-first repair on this canonical owner: add a focused regression that supplies distinct source/destination volume probe identities and proves headroom admission is bound to the actual staging/destination filesystem; then move the probe to the destination/staging boundary immediately before mutation while preserving adoption exemption and stable fail-closed local-volume-headroom-insufficient. Re-run focused + exact-head Test/Release/Security/SAST and verify the tested checkout SHA before resolving the downstream #247 review thread. I did not add a #247 leaf workaround or weaken the reserve gate.

@seonghobae

Copy link
Copy Markdown
Contributor Author

Current exact head f40bd901bb8206e7051790dcd0e4a129548cda34 binds the native copy headroom probe to the nearest existing destination ancestor through commands::copy_headroom::require_destination_copy_headroom; the source volume is no longer used for this mutation-time gate.

Read-only local proof on that exact head with Rust 1.97.1:

  • cargo test --locked --manifest-path src-tauri/Cargo.toml --test cloud_copy_headroom_destination_contract: 1 passed
  • cargo test --locked --manifest-path src-tauri/Cargo.toml --lib copy_headroom: 5 passed
  • git diff --check: passed

The focused proof covers missing destination descendants, nearest existing destination authority, symlink-parent rejection, overflow/headroom behavior, and the source-vs-destination contract. No provider, Finder, cloud object, or user data was mutated.

@seonghobae

Copy link
Copy Markdown
Contributor Author

@OpenCode review current exact head f40bd901bb8206e7051790dcd0e4a129548cda34; review the destination-volume headroom fix and current full diff only. Do not reuse predecessor approvals or findings.

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

Dismissing: this REQUEST_CHANGES was posted against commit 53d92d1 where coverage-evidence failed. The PR's current head has coverage-evidence passing (verified via gh pr checks). All 102 review threads on this PR are resolved. Re-request review to re-validate.

@opencode-agent opencode-agent Bot added priority: medium Normal-priority or P2 work status: draft Draft pull request type: feature New or expanded product capability labels Aug 22, 2026
@seonghobae

Copy link
Copy Markdown
Contributor Author

@OpenCode review current exact head 0584bcc600e037d564a4ff254b6e8570361d9218. Hosted coverage-evidence, test, security, and release checks are green on this head; prior coverage REQUEST_CHANGES comments refer to stale commits. Publish review only for this exact SHA.

@seonghobae
seonghobae marked this pull request as ready for review August 24, 2026 03:04

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

Open in Devin Review

Comment thread src-tauri/src/icloud_sync_health.rs
@seonghobae
seonghobae marked this pull request as draft August 24, 2026 03:13
@seonghobae
seonghobae marked this pull request as ready for review August 24, 2026 03:29
@seonghobae
seonghobae merged commit 68f903c into main Aug 24, 2026
37 checks passed
@seonghobae
seonghobae deleted the feat/provider-sync-dynamic-goals branch August 24, 2026 04:04
seonghobae added a commit that referenced this pull request Aug 24, 2026
Reapply the #247 unique delta (post-#213 lineage) onto current main:
- pending iCloud File Provider indexing detection and admission blocker duration
- backend-clock stall timing with restart-safe preservation
- Naruon readiness indexing-blocker binding and numeric disk-full markers
- preview headroom bound to destination; impossible stall onset rejected
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