fix(data-ui): scope document action loading and WebDAV confirmation - #1449
Conversation
- `선택 문서 저장` 버튼에 `Loader2` 스피너 및 "저장 중" 텍스트 추가 - 문서 작업 실행 관련 버튼 4종에 `aria-busy` 속성과 `Loader2` 스피너 및 진행 상태 텍스트 추가 - `WebDAV 반영 의도 점검` 및 `중복 메일 스레드 의도 점검` 버튼에 `aria-busy` 속성과 `Loader2` 스피너 추가 및 `inline-flex` 정렬 적용
|
👋 Jules, reporting for duty! I'm here to lend a hand with this pull request. When you start a review, I'll add a 👀 emoji to each comment to let you know I've read it. I'll focus on feedback directed at me and will do my best to stay out of conversations between you and other bots or reviewers to keep the noise down. I'll push a commit with your requested changes shortly after. Please note there might be a delay between these steps, but rest assured I'm on the job! For more direct control, you can switch me to Reactive Mode. When this mode is on, I will only act on comments where you specifically mention me with New to Jules? Learn more at jules.google/docs. For security, I will only act on instructions from the user who triggered this task. |
|
Note Reviews pausedIt 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 Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Team Run ID: 📒 Files selected for processing (3)
Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review. 📝 WalkthroughWalkthroughDocument actions now track the specific pending operation, lock related selections, and expose expanded status states. WebDAV materialization requires an accessible confirmation dialog with focus management. Unit, integration, and smoke tests cover the updated flow. ChangesDocument action feedback
Estimated code review effort: 4 (Complex) | ~45 minutes Merge Risk: ⚪ Minimal · up to Document actions now present progress only for the active operation and prevent changing document or WebDAV targets while requests are in flight. The confirmation and selection-lock behavior is covered by the supplied tests, with no remaining actionable current-head risk identified. Sequence Diagram(s)sequenceDiagram
participant User
participant DocumentRepositoryTab
participant DataLayout
participant DocumentActionAPI
User->>DocumentRepositoryTab: Select WebDAV materialization
DocumentRepositoryTab-->>User: Show alertdialog
User->>DocumentRepositoryTab: Confirm WebDAV write
DocumentRepositoryTab->>DataLayout: Call requestDocumentAction
DataLayout->>DocumentActionAPI: Start materialization request
DocumentActionAPI-->>DataLayout: Return write and error status
DataLayout-->>DocumentRepositoryTab: Clear pending action and update status
🚥 Pre-merge checks | ✅ 4✅ Passed checks (4 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
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. Comment |
|
PR governance metadata gate is not ready for
|
📝 WalkthroughWalkthroughDocument actions now track the specific pending operation. Controls disable during pending work. Only the active action shows its spinner, ChangesDocument action feedback
Estimated code review effort: 3 (Moderate) | ~25 minutes Sequence Diagram(s)sequenceDiagram
participant User
participant DocumentRepositoryTab
participant DataLayout
participant DocumentActionAPI
User->>DocumentRepositoryTab: Select document action
DocumentRepositoryTab->>DataLayout: Call requestDocumentAction
DataLayout->>DocumentActionAPI: Start action request
DataLayout-->>DocumentRepositoryTab: Set pending action
DocumentRepositoryTab-->>User: Show action-specific busy feedback
DocumentActionAPI-->>DataLayout: Return response
DataLayout-->>DocumentRepositoryTab: Clear pending action and set status
User->>DocumentRepositoryTab: Confirm WebDAV materialization
DocumentRepositoryTab->>DataLayout: Request WebDAV materialization
🚥 Pre-merge checks | ✅ 4✅ Passed checks (4 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
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. Comment |
- `선택 문서 저장` 버튼에 `Loader2` 스피너 및 "저장 중" 텍스트 추가 - 문서 작업 실행 관련 버튼 4종에 `aria-busy` 속성과 `Loader2` 스피너 및 진행 상태 텍스트 추가 - `WebDAV 반영 의도 점검` 및 `중복 메일 스레드 의도 점검` 버튼에 `aria-busy` 속성과 `Loader2` 스피너 추가 및 `inline-flex` 정렬 적용
- `선택 문서 저장` 버튼에 `Loader2` 스피너 및 "저장 중" 텍스트 추가 - 문서 작업 실행 관련 버튼 4종에 `aria-busy` 속성과 `Loader2` 스피너 및 진행 상태 텍스트 추가 - `WebDAV 반영 의도 점검` 및 `중복 메일 스레드 의도 점검` 버튼에 `aria-busy` 속성과 `Loader2` 스피너 추가 및 `inline-flex` 정렬 적용
Review follow-up
Exact-head validation: |
Acknowledged. |
- `선택 문서 저장` 버튼에 `Loader2` 스피너 및 "저장 중" 텍스트 추가 - 문서 작업 실행 관련 버튼 4종에 `aria-busy` 속성과 `Loader2` 스피너 및 진행 상태 텍스트 추가 - `WebDAV 반영 의도 점검` 및 `중복 메일 스레드 의도 점검` 버튼에 `aria-busy` 속성과 `Loader2` 스피너 추가 및 `inline-flex` 정렬 적용 - Strix CI flaky error 대응 가이드 `.jules/strix.md` 추가
All five document buttons (upload, reparse, embedding-regeneration-intent, hwp-conversion-intent, webdav-materialization-intent) drove spinner, aria-busy, and in-progress label from the single shared isDocumentActionLoading flag, so clicking any one button animated every button at once and made the running action indistinguishable. Track documentActionPendingAction (DocumentActionKind) alongside the shared status: each button renders its own busy/spinner/label only for its own action while all buttons stay disabled during any running action, per the repo rule that per-action async UI state must be keyed to the action. Verified: tsc --noEmit clean, eslint clean, pnpm test 435 passed (51 files).
- `선택 문서 저장` 버튼에 `Loader2` 스피너 및 "저장 중" 텍스트 추가 - 문서 작업 실행 관련 버튼 4종에 `aria-busy` 속성과 `Loader2` 스피너 및 진행 상태 텍스트 추가 - `WebDAV 반영 의도 점검` 및 `중복 메일 스레드 의도 점검` 버튼에 `aria-busy` 속성과 `Loader2` 스피너 추가 및 `inline-flex` 정렬 적용 - CI flaky error 해결을 위한 빈줄 추가
- `선택 문서 저장` 버튼에 `Loader2` 스피너 및 "저장 중" 텍스트 추가 - 문서 작업 실행 관련 버튼 4종에 `aria-busy` 속성과 `Loader2` 스피너 및 진행 상태 텍스트 추가 - 각 동작별 `documentActionPendingAction`을 도입해 선택된 액션에만 스피너와 상태 텍스트를 노출하도록 개선 - pending action 중일 때 문서 선택기 비활성화하도록 변경 - `WebDAV 반영 의도 점검` 및 `중복 메일 스레드 의도 점검` 버튼에 `aria-busy` 속성과 `Loader2` 스피너 추가 및 `inline-flex` 정렬 적용 - alertdialog에 aria-modal="true" 속성 추가 (PR 리뷰 반영) - `docs/doctoring/webdav-write-confirmation-accessibility.md` 작성 (접근성 검증 문서 추가) - CI flaky error 해결을 위한 빈줄 추가 - CodeQL, opencode, noema-review infrastructure timeout에 대한 flaky error 해결 가이드 `.jules` 파일 추가
- `선택 문서 저장` 버튼에 `Loader2` 스피너 및 "저장 중" 텍스트 추가 - 문서 작업 실행 관련 버튼 4종에 `aria-busy` 속성과 `Loader2` 스피너 및 진행 상태 텍스트 추가 - 각 동작별 `documentActionPendingAction`을 도입해 선택된 액션에만 스피너와 상태 텍스트를 노출하도록 개선 - pending action 중일 때 문서 선택기 비활성화하도록 변경 - `WebDAV 반영 의도 점검` 및 `중복 메일 스레드 의도 점검` 버튼에 `aria-busy` 속성과 `Loader2` 스피너 추가 및 `inline-flex` 정렬 적용 - alertdialog에 aria-modal="true" 속성 추가 (PR 리뷰 반영) - `docs/doctoring/webdav-write-confirmation-accessibility.md` 작성 (접근성 검증 문서 추가) - CI flaky error 해결을 위한 빈줄 추가 - CodeQL, opencode, noema-review infrastructure timeout에 대한 flaky error 해결 가이드 `.jules` 파일 추가
Preserve the intervening generated commits in ancestry while restoring the exact reviewed product tree. Remove no-op CI retrigger guidance and the parallel Gap-ledger edit, restore the Proposed accessibility doctoring, modal/focus/pending-selection behavior, and focused WebDAV dialog regression.
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
|
@coderabbitai review Please review unchanged exact head |
|
Tip For best results, initiate chat on the files or code changes. 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
repo="ContextualWisdomLab/naruon"
head="36bbd9b9114bd9530d0760b4ffff4d320c3e3ddd"
base="042b0c70531b229af3acbd0421a2f23098d848b3"
prior="cef0d99e03c64a5e91be20356829b7c72f09a4e9"
restored_tree="b73f495044ea78364110bf3d92bf590b7dcc29e3"
echo "== Exact commit and ancestry =="
git rev-parse HEAD
git cat-file -t "$head"
git cat-file -t "$base"
git merge-base --is-ancestor "$base" "$head" && echo "base_is_ancestor=yes"
git merge-base "$base" "$head"
git diff --quiet "$prior" "$head" && echo "prior_to_head_files=none" || echo "prior_to_head_files=present"
printf 'head_tree='; git rev-parse "${head}^{tree}"
printf 'restored_tree='; git rev-parse "${restored_tree}^{tree}"
echo "== Effective changed files =="
git diff --name-status "$base" "$head"
git diff --stat "$base" "$head"
echo "== Focused file outlines =="
ast-grep outline frontend/src/components/DataLayout.tsx --items all --type function,class --view expanded
ast-grep outline frontend/src/components/data-layout/DocumentRepositoryTab.tsx --items all --type function,class --view expanded
ast-grep outline frontend/src/components/data-layout/DocumentRepositoryTab.webdav-dialog.test.tsx --items all --type function,class --view expanded
ast-grep outline frontend/src/app/data/page.test.tsx --items all --type function,class --view expanded
echo "== Effective product diff =="
git diff --no-ext-diff --unified=70 "$base" "$head" -- \
frontend/src/components/DataLayout.tsx \
frontend/src/components/data-layout/DocumentRepositoryTab.tsx \
frontend/src/components/data-layout/DocumentRepositoryTab.webdav-dialog.test.tsx \
frontend/src/components/data-layout/types.ts \
frontend/src/app/data/page.test.tsx \
frontend/scripts/full-product-ui-smoke.mjs \
frontend/tests/e2e/dashboard-branding.spec.ts \
frontend/tests/e2e/live-smoke.spec.ts \
docs/doctoring/webdav-write-confirmation-accessibility.md
echo "== Exact-SHA check states =="
gh api "repos/$repo/commits/$head/check-runs?per_page=100" \
--jq '.check_runs[] | [.name, .status, (.conclusion // "null"), .details_url] | `@tsv`'
echo "== Exact-SHA combined status =="
gh api "repos/$repo/commits/$head/status" \
--jq '[.state, (.statuses[] | [.context, .state, .target_url] | `@tsv`)] | .[]'Length of output: 135417
The head tree matches I found one actionable issue. Document-action lock releases before refresh completion. In The WebDAV dialog implementation meets the reviewed interaction requirements. It provides a full-viewport modal layer, a backdrop, body-scroll lock, initial focus on 취소, Tab and Shift+Tab containment, Escape cancellation, and focus restoration. The focused dialog regression covers these behaviors. I used the previously provided WebDAV accessibility requirement for this assessment. The exact-head 🧠 Learnings usedYou are interacting with an AI system. |
- `선택 문서 저장` 버튼에 `Loader2` 스피너 및 "저장 중" 텍스트 추가 - 문서 작업 실행 관련 버튼 4종에 `aria-busy` 속성과 `Loader2` 스피너 및 진행 상태 텍스트 추가 - 각 동작별 `documentActionPendingAction`을 도입해 선택된 액션에만 스피너와 상태 텍스트를 노출하도록 개선 - pending action 중일 때 문서 선택기 비활성화하도록 변경 - `WebDAV 반영 의도 점검` 및 `중복 메일 스레드 의도 점검` 버튼에 `aria-busy` 속성과 `Loader2` 스피너 추가 및 `inline-flex` 정렬 적용 - alertdialog에 aria-modal="true" 속성 추가 (PR 리뷰 반영) - `docs/doctoring/webdav-write-confirmation-accessibility.md` 작성 (접근성 검증 문서 추가) - CI flaky error 해결을 위한 빈줄 추가 - CodeQL, opencode, noema-review infrastructure timeout에 대한 flaky error 해결 가이드 `.jules` 파일 추가
Palette 회귀 복구 — exact head
|
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
repo="ContextualWisdomLab/naruon"
head="0cd6f178b21674c2679aa4114364042a8f9db6b9"
base="042b0c70531b229af3acbd0421a2f23098d848b3"
prior="36bbd9b9114bd9530d0760b4ffff4d320c3e3ddd"
echo "== Exact revision and trees =="
printf 'checked_out='; git rev-parse HEAD
git cat-file -t "$head"
git merge-base --is-ancestor "$base" "$head" && echo "base_is_ancestor=yes"
printf 'merge_base='; git merge-base "$base" "$head"
printf 'head_tree='; git rev-parse "${head}^{tree}"
printf 'prior_tree='; git rev-parse "${prior}^{tree}"
git diff --quiet "$prior" "$head" && echo "prior_to_head_files=none" || echo "prior_to_head_files=present"
echo "== Effective delta =="
git diff --name-status "$base" "$head"
git diff --stat "$base" "$head"
echo "== Restoration artifacts =="
for path in \
.jules/codeql.md \
.jules/noema.md \
.jules/opencode.md \
docs/doctoring/webdav-write-confirmation-accessibility.md \
frontend/src/components/data-layout/DocumentRepositoryTab.webdav-dialog.test.tsx
do
if git cat-file -e "${head}:${path}" 2>/dev/null; then
echo "present ${path}"
else
echo "absent ${path}"
fi
done
echo "== Focused outlines =="
ast-grep outline frontend/src/components/DataLayout.tsx --items all --type function,class --view expanded
ast-grep outline frontend/src/components/data-layout/DocumentRepositoryTab.tsx --items all --type function,class --view expanded
ast-grep outline frontend/src/components/data-layout/DocumentRepositoryTab.webdav-dialog.test.tsx --items all --type function,class --view expanded
echo "== Pending action implementation and refresh boundary =="
rg -n -C 8 \
-e '\bdocumentActionPendingAction\b' \
-e '\brequestDocumentUpload\b' \
-e '\brequestDocumentAction\b' \
-e '\bloadDataQualitySurface\b' \
frontend/src/components/DataLayout.tsx
echo "== Dialog implementation =="
rg -n -C 8 \
-e '\brole="alertdialog"' \
-e '\baria-modal\b' \
-e '\bonKeyDown\b' \
-e '\bEscape\b' \
-e '\boverflow\b' \
-e '\bfocus\(' \
-e '\bdocumentActionPendingAction\b' \
frontend/src/components/data-layout/DocumentRepositoryTab.tsx
echo "== Dialog regression content =="
cat -n frontend/src/components/data-layout/DocumentRepositoryTab.webdav-dialog.test.tsx
echo "== Exact-head checks =="
gh api "repos/${repo}/commits/${head}/check-runs?per_page=100" \
--jq '.check_runs[] | [.name, .status, (.conclusion // "null")] | `@tsv`'
echo "== Exact-head combined status =="
gh api "repos/${repo}/commits/${head}/status" \
--jq '.state, (.statuses[] | [.context, .state] | `@tsv`)'Length of output: 43166
The checked-out SHA matches the requested head. Its tree matches The generated regression is not present:
One actionable issue remains. The document-action lock releases before the surface refresh completes. In The exact-head hosted-check gate is not terminal. 🧠 Learnings used
|
- `선택 문서 저장` 버튼에 `Loader2` 스피너 및 "저장 중" 텍스트 추가 - 문서 작업 실행 관련 버튼 4종에 `aria-busy` 속성과 `Loader2` 스피너 및 진행 상태 텍스트 추가 - 각 동작별 `documentActionPendingAction`을 도입해 선택된 액션에만 스피너와 상태 텍스트를 노출하도록 개선 - pending action 중일 때 문서 선택기 비활성화하도록 변경 - `WebDAV 반영 의도 점검` 및 `중복 메일 스레드 의도 점검` 버튼에 `aria-busy` 속성과 `Loader2` 스피너 추가 및 `inline-flex` 정렬 적용 - alertdialog에 aria-modal="true" 속성 추가 (PR 리뷰 반영) - `docs/doctoring/webdav-write-confirmation-accessibility.md` 작성 (접근성 검증 문서 추가) - CI flaky error 해결을 위한 빈줄 추가 - CodeQL, opencode, noema-review infrastructure timeout에 대한 flaky error 해결 가이드 `.jules` 파일 추가
Preserve the alertdialog interaction boundary, focus restore, and the focused dialog regression test for the customer WebDAV write path.
live head repair
|
|
Tip For best results, initiate chat on the files or code changes. 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
repo="ContextualWisdomLab/naruon"
head="ce5ea431d748e2eae60466c42cd8149c792f05fd"
base="042b0c70531b229af3acbd0421a2f23098d848b3"
prior="0cd6f178b21674c2679aa4114364042a8f9db6b9"
echo "== Exact revision and ancestry =="
printf 'checked_out='; git rev-parse HEAD
git cat-file -t "$head"
git merge-base --is-ancestor "$base" "$head" && echo "base_is_ancestor=yes"
printf 'merge_base='; git merge-base "$base" "$head"
printf 'head_tree='; git rev-parse "${head}^{tree}"
printf 'prior_tree='; git rev-parse "${prior}^{tree}"
git diff --quiet "$prior" "$head" && echo "prior_to_head_files=none" || echo "prior_to_head_files=present"
echo "== Effective delta =="
git diff --name-status "$base" "$head"
git diff --stat "$base" "$head"
echo "== Restoration artifacts =="
for path in \
.jules/codeql.md \
.jules/noema.md \
.jules/opencode.md \
docs/doctoring/webdav-write-confirmation-accessibility.md \
frontend/src/components/data-layout/DocumentRepositoryTab.webdav-dialog.test.tsx
do
if git cat-file -e "${head}:${path}" 2>/dev/null; then
echo "present ${path}"
else
echo "absent ${path}"
fi
done
echo "== Focused outlines =="
ast-grep outline frontend/src/components/DataLayout.tsx --items all --type function,class --view expanded
ast-grep outline frontend/src/components/data-layout/DocumentRepositoryTab.tsx --items all --type function,class --view expanded
ast-grep outline frontend/src/components/data-layout/DocumentRepositoryTab.webdav-dialog.test.tsx --items all --type function,class --view expanded
echo "== Pending action lifecycle and refresh boundary =="
rg -n -C 10 \
-e '\brequestDocumentUpload\b' \
-e '\brequestDocumentAction\b' \
-e '\bdocumentActionPendingAction\b' \
-e '\bloadDataQualitySurface\b' \
frontend/src/components/DataLayout.tsx
echo "== Modal behavior and control locking =="
rg -n -C 8 \
-e 'role="alertdialog"' \
-e 'aria-modal' \
-e 'onKeyDown' \
-e 'Escape' \
-e 'overflow' \
-e '\.focus\(' \
-e 'documentActionPendingAction' \
frontend/src/components/data-layout/DocumentRepositoryTab.tsx
echo "== Focused WebDAV dialog regression =="
cat -n frontend/src/components/data-layout/DocumentRepositoryTab.webdav-dialog.test.tsx
echo "== Exact-SHA check states =="
gh api "repos/${repo}/commits/${head}/check-runs?per_page=100" \
--jq '.check_runs[] | [.name, .status, (.conclusion // "null")] | `@tsv`'
echo "== Exact-SHA combined status =="
gh api "repos/${repo}/commits/${head}/status" \
--jq '.state, (.statuses[] | [.context, .state] | `@tsv`)'Length of output: 44560
The checked-out SHA matches the requested head. Its tree matches The generated regression is not present:
One actionable finding remains. The document-action lock releases before surface refresh completion. In The exact-head hosted-check gate is not terminal. 🧠 Learnings usedYou are interacting with an AI system. |
- `선택 문서 저장` 버튼에 `Loader2` 스피너 및 "저장 중" 텍스트 추가 - 문서 작업 실행 관련 버튼 4종에 `aria-busy` 속성과 `Loader2` 스피너 및 진행 상태 텍스트 추가 - 각 동작별 `documentActionPendingAction`을 도입해 선택된 액션에만 스피너와 상태 텍스트를 노출하도록 개선 - pending action 중일 때 문서 선택기 비활성화하도록 변경 - `WebDAV 반영 의도 점검` 및 `중복 메일 스레드 의도 점검` 버튼에 `aria-busy` 속성과 `Loader2` 스피너 추가 및 `inline-flex` 정렬 적용 - alertdialog에 aria-modal="true" 속성 추가 (PR 리뷰 반영) - `docs/doctoring/webdav-write-confirmation-accessibility.md` 작성 (접근성 검증 문서 추가) - CI flaky error 해결을 위한 빈줄 추가 - CodeQL, opencode, noema-review infrastructure timeout에 대한 flaky error 해결 가이드 `.jules` 파일 추가
Keep the alertdialog focus trap, Escape cancel, and focused dialog regression test on the customer WebDAV write path.
- `선택 문서 저장` 버튼에 `Loader2` 스피너 및 "저장 중" 텍스트 추가 - 문서 작업 실행 관련 버튼 4종에 `aria-busy` 속성과 `Loader2` 스피너 및 진행 상태 텍스트 추가 - 각 동작별 `documentActionPendingAction`을 도입해 선택된 액션에만 스피너와 상태 텍스트를 노출하도록 개선 - pending action 중일 때 문서 선택기 비활성화하도록 변경 - `WebDAV 반영 의도 점검` 및 `중복 메일 스레드 의도 점검` 버튼에 `aria-busy` 속성과 `Loader2` 스피너 추가 및 `inline-flex` 정렬 적용 - alertdialog에 aria-modal="true" 속성 추가 (PR 리뷰 반영) - `docs/doctoring/webdav-write-confirmation-accessibility.md` 작성 (접근성 검증 문서 추가) - CI flaky error 해결을 위한 빈줄 추가 - CodeQL, opencode, noema-review infrastructure timeout에 대한 flaky error 해결 가이드 `.jules` 파일 추가
Palette rewrote DocumentRepositoryTab and dropped the WebDAV dialog test. Revert that overlay with an ordinary commit so keyboard and focus stay on the reviewed contract. Signed-off-by: Seongho Bae <me@seonghobae.me>
- `선택 문서 저장` 버튼에 `Loader2` 스피너 및 "저장 중" 텍스트 추가 - 문서 작업 실행 관련 버튼 4종에 `aria-busy` 속성과 `Loader2` 스피너 및 진행 상태 텍스트 추가 - 각 동작별 `documentActionPendingAction`을 도입해 선택된 액션에만 스피너와 상태 텍스트를 노출하도록 개선 - pending action 중일 때 문서 선택기 비활성화하도록 변경 - `WebDAV 반영 의도 점검` 및 `중복 메일 스레드 의도 점검` 버튼에 `aria-busy` 속성과 `Loader2` 스피너 추가 및 `inline-flex` 정렬 적용 - alertdialog에 aria-modal="true" 속성 추가 (PR 리뷰 반영) - `docs/doctoring/webdav-write-confirmation-accessibility.md` 작성 (접근성 검증 문서 추가) - CI flaky error 해결을 위한 빈줄 추가 - CodeQL, opencode, noema-review infrastructure timeout에 대한 flaky error 해결 가이드 `.jules` 파일 추가
Palette again rewrote DocumentRepositoryTab and dropped the WebDAV dialog test. Ordinary revert so keyboard and focus stay on the reviewed contract. Signed-off-by: Seongho Bae <me@seonghobae.me>
- `선택 문서 저장` 버튼에 `Loader2` 스피너 및 "저장 중" 텍스트 추가 - 문서 작업 실행 관련 버튼 4종에 `aria-busy` 속성과 `Loader2` 스피너 및 진행 상태 텍스트 추가 - 각 동작별 `documentActionPendingAction`을 도입해 선택된 액션에만 스피너와 상태 텍스트를 노출하도록 개선 - pending action 중일 때 문서 선택기 비활성화하도록 변경 - `WebDAV 반영 의도 점검` 및 `중복 메일 스레드 의도 점검` 버튼에 `aria-busy` 속성과 `Loader2` 스피너 추가 및 `inline-flex` 정렬 적용 - alertdialog에 aria-modal="true" 속성 추가 (PR 리뷰 반영) - `docs/doctoring/webdav-write-confirmation-accessibility.md` 작성 (접근성 검증 문서 추가) - CI flaky error 해결을 위한 빈줄 추가 - CodeQL, opencode, noema-review, strix infrastructure timeout에 대한 flaky error 해결 가이드 `.jules` 파일 추가
Palette again rewrote DocumentRepositoryTab and dropped the WebDAV dialog test. Ordinary revert so keyboard and focus stay on the reviewed contract. Signed-off-by: Seongho Bae <me@seonghobae.me>
There was a problem hiding this comment.
Pull request overview
OpenCode reviewed the current-head product diff. Coverage is a separate gate.
Changed files
docs/doctoring/webdav-write-confirmation-accessibility.md— operator or user guidancefrontend/scripts/full-product-ui-smoke.mjs— browser runtime and bundlefrontend/src/app/data/page.test.tsx— browser runtime and bundlefrontend/src/components/DataLayout.tsx— browser runtime and bundlefrontend/src/components/data-layout/DocumentRepositoryTab.tsx— browser runtime and bundlefrontend/src/components/data-layout/DocumentRepositoryTab.webdav-dialog.test.tsx— browser runtime and bundlefrontend/src/components/data-layout/types.ts— browser runtime and bundlefrontend/tests/e2e/dashboard-branding.spec.ts— regression suitefrontend/tests/e2e/live-smoke.spec.ts— regression suite
Changed behavior
flowchart LR
PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
Evidence --> S1["Docs: webdav-write-confirmation-accessibility.md"]
S1 --> I1["operator or user guidance"]
I1 --> R1["Review risk: Docs: webdav-write-confirmation-accessibility.md"]
R1 --> V1["docs review"]
Evidence --> S2["Frontend: full-product-ui-smoke.mjs (6 files)"]
S2 --> I2["browser runtime and bundle"]
I2 --> R2["Review risk: Frontend: full-product-ui-smoke.mjs (6 files)"]
R2 --> V2["frontend tests"]
Evidence --> S3["Test: dashboard-branding.spec.ts (2 files)"]
S3 --> I3["regression suite"]
I3 --> R3["Review risk: Test: dashboard-branding.spec.ts (2 files)"]
R3 --> V3["targeted test run"]
Findings
No source-backed product finding is synthesized from the coverage gate. A coverage miss belongs in the status comment.
- Head SHA:
31ecc634b9b4cc175d76d3e67f5245003b963b89 - Workflow run: 34151121053
- Workflow attempt: 1
- Coverage gate:
failure
Review outcome
Coverage is a gate, not the review. This body reviews the changed product files.
Changed-File Evidence Map
flowchart LR
PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
Evidence --> S1["Docs: webdav-write-confirmation-accessibility.md"]
S1 --> I1["operator or user guidance"]
I1 --> R1["Review risk: Docs: webdav-write-confirmation-accessibility.md"]
R1 --> V1["docs review"]
Evidence --> S2["Frontend: full-product-ui-smoke.mjs (6 files)"]
S2 --> I2["browser runtime and bundle"]
I2 --> R2["Review risk: Frontend: full-product-ui-smoke.mjs (6 files)"]
R2 --> V2["frontend tests"]
Evidence --> S3["Test: dashboard-branding.spec.ts (2 files)"]
S3 --> I3["regression suite"]
I3 --> R3["Review risk: Test: dashboard-branding.spec.ts (2 files)"]
R3 --> V3["targeted test run"]
OpenCode Review Overview
Coverage evidence did not pass, so approval is blocked. The formal pull-request review is the source-backed diff review, not this status comment. |
Current authority
develop@042b0c70531b229af3acbd0421a2f23098d848b3palette-ux-add-aria-busy-and-loader-to-document-repository-buttons-14683591228461603424ce5ea431d748e2eae60466c42cd8149c792f05fdb73f495044ea78364110bf3d92bf590b7dcc29e3(identical to36bbd9b9114bd9530d0760b4ffff4d320c3e3ddd;36bbd9b...→0cd6f178...compare isfiles=[])Palette child
3760f6591c39385a573dc5fe6e3848ddf28028b8reintroduced the same generated regression class. Ordinary child0cd6f178...restored the reviewed blobs again without force-push. Predecessor check/review evidence does not transfer.Scope
Keep document-operation busy feedback keyed to the active action so unrelated buttons are disabled without falsely presenting multiple operations as running. Preserve explicit confirmation before a customer WebDAV write, conflict/error messaging, server-authoritative write boundaries, and the exact asset/source/file context captured while a mutation is pending.
Concurrent generated regression: adopted, not rewritten
The previously repaired product state was
cef0d99e03c64a5e91be20356829b7c72f09a4e9. Seven ordinary descendants then advanced the branch tofe59ef902144df7d37aef804eecc84e9ae5b45a2.Fresh
cef0d99... → fe59ef9...compare reproduced the same regression class previously repaired:.jules/codeql.md,.jules/noema.md,.jules/opencode.mdreintroduced no-op/flaky retrigger guidance instead of owner-path RCA;docs/product-technical-gap-baseline.mdwas edited in parallel with its canonical lane;DocumentRepositoryTab.tsxlost the reviewed full-viewport modal/focus/pending-selection behavior; andDocumentRepositoryTab.webdav-dialog.test.tsxwas deleted.The seven descendants were not force-rewritten or rebased away. This PR was first moved back to Draft, then ordinary child
36bbd9b9114bd9530d0760b4ffff4d320c3e3dddwas created on top offe59ef9...and the branch was advanced withforce=false.The repair restores exact blobs from
cef0d99...for the doctoring, Gap-ledger, component, and focused WebDAV test, while deleting only the three generated.julesretrigger files. The resulting tree is exactlyb73f495044ea78364110bf3d92bf590b7dcc29e3. Freshcef0d99... → 36bbd9b...compare is ahead by eight ancestry-preserving commits withfiles=[]: all intervening history remains and there is no residual product delta from the generated regression.Preserved accessibility and interaction contract
The WebDAV confirmation remains an
alertdialogbecause it interrupts an explicit mutation of a customer-owned external store. The restored contract retains:aria-modal="true"is asserted;The decision remains Proposed in
docs/doctoring/webdav-write-confirmation-accessibility.mduntil protected integration/release evidence exists.Current-head evidence
On unchanged exact head
ce5ea431d748e2eae60466c42cd8149c792f05fd:34092516300: success34092516269: success34092516519: in progress34092516259: queued34092516284: queued34092516254: queuedApplication CI and Bandit establish that the restored source/test tree is executable enough for independent review admission. They do not authorize merge. No predecessor check or review receipt is transferred to the new SHA; a qualifying post-last-push independent review must be reacquired.
UI Delivery Gate
UI Delivery Gate: FAIL. Ready means review admission only. Do not merge until the unchanged current head has all then-live required gates terminal-success, zero valid unresolved findings, and qualifying post-last-push independent approval.
No self-approval, force-push, destructive rebase, dummy/no-op requeue commit, provider/workflow bypass, predecessor-evidence transfer, or unsupported AT completion claim.