fix(calendar): expose proposal context to screen readers - #1320
fix(calendar): expose proposal context to screen readers#1320seonghobae wants to merge 25 commits into
Conversation
|
👋 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. |
|
Warning Review limit reachedNext included review available in 59 minutes. View limit detailsLimit 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. Review configuration: ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (1)
📝 WalkthroughWalkthroughCalendar proposal buttons now provide contextual ARIA labels. Their redundant child content is hidden from assistive technologies. The accessibility guidance is documented in the palette. ChangesCalendar accessibility
Estimated code review effort: 1 (Trivial) | ~5 minutes Mergeability Score: 🟡 Moderate · up to Proposal buttons currently show and announce incorrect weekdays, which can mislead users about meeting times and reduce screen-reader accessibility. Merge should wait until the date, weekday, and aria-label values come from one authoritative source. Possibly related PRs
🚥 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
|
|
@coderabbitai review @opencode-agent @cwl-noema-review Review-only request for exact current head |
|
Tip For best results, initiate chat on the files or code changes. 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
echo '== Checked-out commit =='
git rev-parse HEAD
git status --short
echo
echo '== PR metadata =='
gh pr view 1320 --repo ContextualWisdomLab/naruon \
--json number,url,headRefName,headRefOid,baseRefName,state,isDraft,mergeStateStatus,reviewDecision,statusCheckRollup,reviews \
--jq '{
number, url, headRefName, headRefOid, baseRefName, state, isDraft,
mergeStateStatus, reviewDecision,
reviews: [.reviews[] | {author: .author.login, state, submittedAt}],
checks: [.statusCheckRollup[] | {
name: .name,
status: .status,
conclusion: .conclusion,
workflowName: .workflowName
}]
}'
echo
echo '== Changed files at requested commit =='
git diff-tree --no-commit-id --name-status -r ca068525e7a4784087bf4fc675b313f9c7b535fc
echo
echo '== Requested commit diff =='
git show --format=fuller --find-renames --find-copies --stat \
ca068525e7a4784087bf4fc675b313f9c7b535fc
git show --format= --find-renames --find-copies \
ca068525e7a4784087bf4fc675b313f9c7b535fc -- frontend/src/components/calendar/CalendarCoordinationView.tsx
echo
echo '== Component outline and relevant source =='
ast-grep outline frontend/src/components/calendar/CalendarCoordinationView.tsx --items all --view expanded || true
rg -n -C 8 --glob 'CalendarCoordinationView.tsx' \
'aria-label|aria-hidden|proposal|Proposal|date|weekday|start|end|time' \
frontend/src/components/calendar
echo
echo '== Proposal definitions and focused test candidates =='
rg -n -C 5 --glob '*.{ts,tsx}' \
'type\s+\w*Proposal|interface\s+\w*Proposal|CalendarCoordinationView|aria-label|aria-hidden' \
frontend/src
echo
echo '== Generated journal presence =='
fd -H -t f -i 'palette.md' .Jules 2>/dev/null || true
git ls-tree -r --name-only ca068525e7a4784087bf4fc675b313f9c7b535fc | rg '(^|/)\.Jules/' || true
echo
echo '== Branch protection rules for base branch =='
base_branch=$(gh pr view 1320 --repo ContextualWisdomLab/naruon --json baseRefName --jq .baseRefName)
gh api "repos/ContextualWisdomLab/naruon/branches/${base_branch}/protection" \
--jq '{
required_status_checks,
enforce_admins,
required_pull_request_reviews,
required_linear_history,
allow_force_pushes,
allow_deletions
}' || trueLength of output: 198319 🏁 Script executed: #!/bin/bash
set -euo pipefail
repo="ContextualWisdomLab/naruon"
commit="ca068525e7a4784087bf4fc675b313f9c7b535fc"
echo '== Commit and PR head =='
printf 'checked_out='; git rev-parse HEAD
printf 'requested='; git rev-parse "$commit"
gh pr view 1320 --repo "$repo" \
--json url,headRefOid,baseRefOid,state,isDraft,mergeStateStatus,reviewDecision \
--jq .
echo
echo '== Tracked .Jules files and working-tree state =='
git ls-tree -r --name-only "$commit" | rg '(^|/)\.Jules/' || true
git status --short --untracked-files=all | rg '(^|/)\.Jules/|CalendarCoordinationView|constants|helpers|types' || true
git diff --name-status "$(git rev-parse "$commit^")" "$commit"
echo
echo '== Changed source at requested commit =='
git show "$commit:frontend/src/components/calendar/CalendarCoordinationView.tsx"
echo
echo '== Proposal type, constants, and formatter at requested commit =='
git show "$commit:frontend/src/components/calendar/types.ts" | sed -n '65,85p'
git show "$commit:frontend/src/components/calendar/constants.ts" | rg -n -C 8 'calendarCoordinationProposals|startsAt|endsAt|rankLabel|availability'
git show "$commit:frontend/src/components/calendar/helpers.ts" | rg -n -C 8 'formatCoordinationProposalLabel'
echo
echo '== Focused test at requested commit =='
git show "$commit:frontend/src/components/calendar/CalendarCoordinationView.test.tsx"
echo
echo '== Test command definitions =='
git show "$commit:frontend/package.json" | jq '{scripts: .scripts}'
echo
echo '== Current check runs for requested commit =='
gh api "repos/${repo}/commits/${commit}/check-runs?per_page=100" \
--jq '[.check_runs[] | {name, status, conclusion, details_url, started_at, completed_at}]'
echo
echo '== Reviews and PR merge information =='
gh api "repos/${repo}/pulls/1320/reviews?per_page=100" \
--jq '[.[] | {user: .user.login, state, submitted_at, commit_id}]'
gh api "repos/${repo}/pulls/1320" \
--jq '{mergeable, mergeable_state, rebaseable, draft, head: .head.sha, base: .base.ref}'Length of output: 17595
Finding
Accessibility and data contract
Validation and merge state
Do not merge this PR yet. Remove the tracked You are interacting with an AI system. |
Understood. The comment is directed at other bots (@coderabbitai, @opencode-agent, @cwl-noema-review) for review-only purposes and explicitly requests no mutations or merges. Acknowledged. |
8aa0747 to
697ce9e
Compare
|
@coderabbitai review @opencode-agent @cwl-noema-review Review-only request for exact current head |
Rate Limit Exceeded
|
Understood. The comment is directed at other bots (@coderabbitai, @opencode-agent, @cwl-noema-review) for review-only purposes and explicitly requests no mutations or merges. Acknowledged. |
|
@coderabbitai review Current exact head is |
|
@opencode-agent review current 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"
pr="1320"
commit="697ce9e6108f26ee69ec9d3a720d004a12cf2781"
echo '== Requested commit and pull request state =='
printf 'checked_out='; git rev-parse HEAD
printf 'requested='; git rev-parse "$commit"
gh pr view "$pr" --repo "$repo" \
--json number,url,headRefOid,baseRefName,baseRefOid,state,isDraft,mergeStateStatus,reviewDecision,statusCheckRollup,reviews \
--jq '{
number,url,headRefOid,baseRefName,baseRefOid,state,isDraft,mergeStateStatus,reviewDecision,
reviews: [.reviews[] | {author: .author.login, state, submittedAt, commit: .commit.oid}],
checks: [.statusCheckRollup[] | {name,status,conclusion,workflowName}]
}'
echo '== Changed files in the requested commit =='
git diff-tree --no-commit-id --name-status -r "$commit"
echo '== Files changed from PR base to requested commit =='
base=$(gh pr view "$pr" --repo "$repo" --json baseRefOid --jq .baseRefOid)
git diff --name-status "$base" "$commit"
echo '== Generated journal files at requested commit =='
git ls-tree -r --name-only "$commit" | rg '(^|/)\.Jules/' || true
echo '== Calendar component structure =='
ast-grep outline frontend/src/components/calendar/CalendarCoordinationView.tsx --items all --view expanded
echo '== Accessibility implementation =='
rg -n -C 10 --glob 'CalendarCoordinationView.tsx' \
'aria-label|aria-hidden|formatCoordinationProposalLabel|calendarCoordinationProposals|startsAt|endsAt|availability' \
frontend/src/components/calendar
echo '== Proposal type and formatter =='
rg -n -C 8 --glob '*.{ts,tsx}' \
'CalendarCoordinationProposal|formatCoordinationProposalLabel|calendarCoordinationProposals' \
frontend/src/components/calendar
echo '== Focused tests =='
fd -t f -i 'CalendarCoordinationView.test.tsx' frontend/src/components/calendar \
-x sh -c 'ast-grep outline "$1" --items all --view expanded; sed -n "1,260p" "$1"' sh {}
echo '== Exact-head check runs =='
gh api "repos/${repo}/commits/${commit}/check-runs?per_page=100" \
--jq '[.check_runs[] | {name,status,conclusion,details_url,started_at,completed_at}]'
echo '== Mergeability, reviews, and branch protection =='
gh api "repos/${repo}/pulls/${pr}" \
--jq '{head: .head.sha, base: .base.ref, mergeable, mergeable_state, rebaseable, draft}'
gh api "repos/${repo}/pulls/${pr}/reviews?per_page=100" \
--jq '[.[] | {user: .user.login, state, submitted_at, commit_id}]'
branch=$(gh pr view "$pr" --repo "$repo" --json baseRefName --jq .baseRefName)
gh api "repos/${repo}/branches/${branch}/protection" \
--jq '{required_status_checks,enforce_admins,required_pull_request_reviews,required_linear_history,allow_force_pushes,allow_deletions}' \
|| trueLength of output: 42197 🏁 Script executed: #!/bin/bash
set -euo pipefail
repo="ContextualWisdomLab/naruon"
commit="697ce9e6108f26ee69ec9d3a720d004a12cf2781"
run_id="94720232670"
echo '== Complete requested-commit diff =='
git show --format=fuller --find-renames --find-copies "$commit"
echo '== Tracked generated journal content =='
git show "$commit:frontend/.Jules/palette.md"
echo '== Failed exact-head check details =='
gh run view "$run_id" --repo "$repo" --log-failed || true
gh api "repos/${repo}/check-runs/94720232670" \
--jq '{name,status,conclusion,output,details_url,html_url,external_id}' || trueLength of output: 19114
Review resultI found no new source-code issue. The proposal contract is consistent:
The focused tests verify the formatter behavior and verify each rendered button against its proposal data. The exact-head Scope
Merge statusThe pull request is not ready to merge yet:
The outstanding review decision must be cleared and a qualifying independent non-author approval must be present before merge. You are interacting with an AI system. |
Understood. Acknowledging that this is a command for @coderabbitai to review the current head, and not actionable for me. |
Understood. Acknowledging that this is a command for @opencode-agent to review the current head, and not actionable for me. |
Obsolete predecessor-head review: the requested authoritative proposal-date fix was addressed, the inline thread is resolved/outdated, and the branch was reconstructed as exact head 697ce9e. Fresh independent current-head review is pending; dismissal removes stale requested-changes state only and does not replace required approval.
|
@coderabbitai review Please review exact current head |
🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
repo="ContextualWisdomLab/naruon"
pr="1320"
commit="697ce9e6108f26ee69ec9d3a720d004a12cf2781"
base="6cb9cc93a398e72c1c0daa564da7acbca65376fb"
echo '== Commit identity and working tree =='
printf 'checked_out='; git rev-parse HEAD
printf 'requested='; git rev-parse "$commit"
printf 'requested_base='; git rev-parse "$base"
git status --short
echo
echo '== Pull request state =='
gh pr view "$pr" --repo "$repo" \
--json number,url,headRefOid,baseRefOid,baseRefName,state,isDraft,mergeStateStatus,reviewDecision,statusCheckRollup \
--jq '{
number,url,headRefOid,baseRefOid,baseRefName,state,isDraft,
mergeStateStatus,reviewDecision,
checks: [.statusCheckRollup[] | {name,status,conclusion,workflowName}]
}'
echo
echo '== Commit parent and PR diff scope =='
git show -s --format='commit=%H%nparents=%P%nsubject=%s' "$commit"
git diff --name-status "$base" "$commit"
git diff --stat "$base" "$commit"
echo
echo '== Generated .Jules artifacts introduced by this PR =='
git diff --name-only "$base" "$commit" | rg '(^|/)\.Jules/' || true
echo
echo '== Exact component diff =='
git diff --find-renames "$base" "$commit" -- frontend/src/components/calendar/CalendarCoordinationView.tsx
echo
echo '== Calendar source structure and contract =='
ast-grep outline frontend/src/components/calendar/CalendarCoordinationView.tsx --items all --view expanded
rg -n -C 8 --glob '*.{ts,tsx}' \
'CalendarCoordinationProposal|calendarCoordinationProposals|formatCoordinationProposalLabel|aria-label|aria-hidden|startsAt|endsAt|rankLabel|availability' \
frontend/src/components/calendar
echo
echo '== Focused test source =='
fd -t f -i 'CalendarCoordinationView.test.tsx' frontend/src/components/calendar \
-x sh -c 'echo "== $1 =="; ast-grep outline "$1" --items all --view expanded; sed -n "1,320p" "$1"' sh {}
echo
echo '== Exact-head check runs =='
gh api "repos/${repo}/commits/${commit}/check-runs?per_page=100" \
--jq '[.check_runs[] | {name,status,conclusion,details_url,started_at,completed_at}]'
echo
echo '== Mergeability, reviews, and review threads =='
gh api "repos/${repo}/pulls/${pr}" \
--jq '{head: .head.sha, base: .base.sha, mergeable, mergeable_state, rebaseable, draft}'
gh api "repos/${repo}/pulls/${pr}/reviews?per_page=100" \
--jq '[.[] | {user: .user.login, state, submitted_at, commit_id}]'
gh api graphql \
-F owner="ContextualWisdomLab" \
-F name="naruon" \
-F number="$pr" \
-f query='
query($owner: String!, $name: String!, $number: Int!) {
repository(owner: $owner, name: $name) {
pullRequest(number: $number) {
reviewThreads(first: 100) {
nodes {
isResolved
isOutdated
comments(first: 10) {
nodes { author { login } body path line originalLine }
}
}
}
}
}
}' \
--jq '[.data.repository.pullRequest.reviewThreads.nodes[] |
select(.isResolved == false) |
{
isOutdated,
comments: [.comments.nodes[] | {
author: .author.login, path, line, originalLine, body
}]
}]'
echo
echo '== Base branch protection =='
branch=$(gh pr view "$pr" --repo "$repo" --json baseRefName --jq .baseRefName)
gh api "repos/${repo}/branches/${branch}/protection" \
--jq '{required_status_checks,enforce_admins,required_pull_request_reviews,required_linear_history,allow_force_pushes,allow_deletions}' \
|| trueLength of output: 72108
I found no new source-code issue. Accessibility and data contract
Current GitHub state
The pull request requires a qualifying independent approval before merge. I could not verify the detailed branch-protection policy because GitHub returned HTTP 403 for the branch-protection endpoint.
|
|
@coderabbitai review |
Understood. The comment is directed at @coderabbitai to review. Acknowledged. |
|
|
@coderabbitai review |
|
Understood. Acknowledging that this is a command for @coderabbitai to review. No action needed from me. |
Stale review: cited a coverage-evidence/required-check failure on an earlier commit; current head has been verified (gh pr checks) to pass coverage-evidence and all other non-metadata-gate required checks, with no current-head review from this reviewer. Dismissing as superseded per AGENTS.md stale-review guidance.
…branch (#1320) Commit 596fbca accidentally reverted 7070c6f's container provenance contract while resubmitting calendar accessibility changes: - docker-publish.yml lost dynamic base_digest/base_name derivation from the first FROM line, hardcoding stale digests (44dd0449/191ef878) that do not match the actual FROM pins. - Root and frontend Dockerfiles lost the OCI_IMAGE_BASE_* defaults tied to their FROM pins plus the non-empty RUN preflight. - backend/tests/test_release_governance.py lost assert_oci_metadata_matches_first_base and test_container_base_image_pins_are_synchronized. Restore origin/develop state for the five container/workflow artifacts (consolidated pins from a6cce6f) and re-add the governance tests so label/FROM drift fails CI again.
#1320) Devin review flagged that this PR's diff against develop deletes merged functionality under a narrow accessibility title. Root cause: the resubmission snapshot commits (85f727b, b4bc21c, 596fbca) carried an older tree, silently reverting merged develop content: - /api/calendar/conflicts evaluate feature + ICS/policy services + tests - docs/topic-intelligence/* documentation set + ADRs + doctoring notes - OIDC JWKS preload test, runner dispatch util test, container pin contract - NetworkGraph O(1) map lookups + duplicate-id selection tests (AGENTS.md first-wins memo contract) - TasksLayout keyboard focus-visible ring + guarding WCAG 2.4.7 test Restore every non-payload path to origin/develop state; the PR now differs from develop only by its intended calendar screen-reader accessibility changes (.Jules/.jules agent logs, calendar sidebar/constants/helpers/types, calendar page test, EmailDetail). Verification: backend governance/hygiene/pin/conflict suites 86 passed; frontend NetworkGraph.map-lookup, TasksLayout.focus-visible, calendar page, EmailDetail suites 36 passed.
…ace (#1320) '새 일정' and '캘린더 추가' sidebar buttons have no onClick handler and no implemented creation flow exists (provider mutations are documented future work), so announcing them via aria-label worsens the screen-reader experience. Remove both per the repository dead-space-control rule; calendar page test suite stays green (9 passed).
…tons (#1320) - Restore the memo() wrapper (develop's Bolt optimization) that the resubmission snapshot dropped, preventing re-renders from parent layout/polling state (devin scope-drift finding). - Remove '다른 스레드 병합' / '스레드 분리' buttons: no thread merge/split API exists, so they were inert dead-space controls added by this PR; repository policy requires wiring to an implemented flow or removal. EmailDetail + calendar page suites: 32 passed.
…d .jules (#1320) .Jules/palette.md and tracked .jules/palette.md differ only by directory case, which breaks checkouts on case-insensitive filesystems (macOS/Windows) and confuses agent-journal writers. develop has no .Jules path; drop the branch-only duplicate.
- 캘린더 조율 뷰의 제안된 시간 확인 버튼에 동적인 aria-label 추가 - 캘린더 사이드바의 캘린더 추가/토글 버튼에 aria-label 및 aria-hidden 적용 - origin/develop 상태로 EmailDetail의 memo 최적화 복원 및 불필요한 컨트롤 제거 동기화 - NetworkGraph, TasksLayout 및 백엔드 설정 등 develop의 최신 수정사항 통합 적용
- 캘린더 사이드바의 캘린더 추가/토글 버튼에 aria-label 및 aria-hidden 적용 - 최신 develop 브랜치 베이스 적용
- 캘린더 사이드바의 캘린더 추가/토글 버튼에 aria-label 및 aria-hidden 적용 - 백엔드 처리(Writeback)가 연결되지 않은 "새 일정", "캘린더 추가" 데드(dead) 버튼 제거 - 사용하지 않는 lucide-react, Button 임포트 제거 - develop 브랜치 베이스에 직접 적용 (CodeRabbit 메타데이터 게이트 충돌 해결)
Problem
Calendar coordination proposal buttons visually showed a rank, date/time, availability, and action, but assistive technology could announce only the generic action text. Hard-coded dates also allowed the visible weekday, accessible name, and parent calendar month to drift apart.
Fix
developbeside those proposal slots;Accessibility contract
Each proposal button exposes a name equivalent to:
The label contains the action, rank, date, actual weekday, time interval, and attendance consequence. It is generated from the same data rendered visually, so one source controls both experiences.
Verification contract
The branch includes focused tests for accessible proposal names, date/weekday formatting, visible content, exact intervals and attendance status, focus-visible behavior, and the proposal data contract.
Current-base reconciliation
The dirty/conflicted candidate was reconciled onto live protected
develop@dd8d15191338b841f9e6f3a06507c6a5643b95d0(includes #1367) with a normal non-forced merge commit.fa3edf2f2f65bfc8ab8fbdc167b8b4148683ec8a9d3bf21a5a4659c5c297382e699cca7a28c2efbbdd8d15191338b841f9e6f3a06507c6a5643b95d0fa3edf2f2f65bfc8ab8fbdc167b8b4148683ec8a+dd8d15191338b841f9e6f3a06507c6a5643b95d0Product overlap required a code change:
CalendarCoordinationViewnow keeps signed writeback-source selection fromdevelopand the typed Seoul-time proposal buttons from this branch. The page test no longer treats proposal availability as canned ICS conflict evidence; canned ICS pair titles and conflict next-action copy remain forbidden, and/api/calendar/conflicts/evaluateis still not called from the coordination tab.CHANGELOG.mddid not conflict. Current protecteddevelopremains authoritative everywhere outside the bounded accessibility slice.Exact candidate
develop@dd8d15191338b841f9e6f3a06507c6a5643b95d09d3bf21a5a4659c5c297382e699cca7a28c2efbbhelpers.test.ts2,CalendarCoordinationView.test.tsx1,page.test.tsx10)corepack pnpm@11.5.3 --dir frontend exec vitest run src/components/calendar/helpers.test.ts src/components/calendar/CalendarCoordinationView.test.tsx src/app/calendar/page.test.tsxfa3edf2f,c7c36b10,bc987895, or any earlier head are not success for this headmetadata-only gate evaluation, because GitHubreviewDecisionis stillCHANGES_REQUESTEDfrom the predecessor-head OpenCode review onfa3edf2f(coverage-evidence failure). That coverage-evidence job succeeded on9d3bf21a. The CodeRabbit weekday thread is resolved and outdated. No qualifying current-head independent approval is represented.Merge boundary
Merge requires the unchanged exact head
9d3bf21a5a4659c5c297382e699cca7a28c2efbbto pass every live repository and organization required check, zero valid unresolved findings, a qualifying independent non-author current-head APPROVE, and normal protected-branch acceptance. Queued, stale, predecessor-head, dismissed, skipped-required, neutral, rate-limited, status-only, model-only, or author-only evidence is not success.Customer next action
Wait for an independent non-author current-head review of
9d3bf21a5a4659c5c297382e699cca7a28c2efbbthat supersedes the predecessor-headCHANGES_REQUESTED. Do not merge, squash, force-push, dummy-commit, empty-requeue, dismiss reviews, or treat predecessor evidence as transferable.