Skip to content

CPD tidy-up: one End of year page, Job applications to Admin, More menu down to seven - #3460

Merged
gitar-bot[bot] merged 16 commits into
mainfrom
claude/cpd-tidy-9jh19q
Oct 11, 2026
Merged

gitar-bot[bot] merged 16 commits into
mainfrom
claude/cpd-tidy-9jh19q

Conversation

@BigSimmo

@BigSimmo BigSimmo commented Oct 11, 2026 •

Copy link
Copy Markdown
Owner

User description

Requested by Josh · project thread

Summary

Before: CPD had five menu pages for the end of the year (Report, Evidence, Export, AMA CPD Home, Annual summary), each repeating the activity list. Evidence showed a green "None known to need evidence" tick and then listed every activity as "Not counted". AMA CPD Home opened with a large "Format to be confirmed" card. Job applications sat in CPD. The More menu had 15 entries, including Customise and a Set up entry that opened the same page as Targets. The "replaces a missed session" tick box was the first thing on Log an activity.

After: Report becomes End of year, one page in three numbered steps: what is missing, evidence to tidy (with Attach on each activity lacking a certificate), and hand it in (save, copy to your CPD home, close the year). Evidence, Export and AMA CPD Home leave the menu and stay as the detail pages each step opens. The CPD More menu is down to seven. Evidence says plainly when nothing was checked yet. AMA CPD Home puts its caveat in one line. Job applications and its CV live at /admin/applications in Admin's menu (old addresses redirect). The missed-session box sits after the main fields. Saved favourites for moved pages open their new home.

How: Wording, layout and navigation only, plus the route move. No data, clinical wording or sign-off changes. From the 11 Oct usefulness and layout audit; Josh approved the End of year mockup.

Areas touched: Personal practice, App experience, Design system, Data platform and access, Knowledge and records

Verification

  • Checks run: Vitest over every CPD test file plus work frame, favourites and work-mode launch (Test Files 95, 1215 tests, one weight rule fixed then cme-type-weight 4 passed, cme-year-check 17 passed), tsc --noEmit clean, ESLint clean on changed files, phone screenshot of End of year checked against the mockup. Browser suites left to CI.

Risk and rollout

  • Risk: low; UI and navigation only.
  • Rollback: revert the PR.
  • Provider or production effects: None

🤖 Generated with Claude Code

https://claude.ai/code/session_01JZNXNqu4ZWvQwW613xMf1P


CodeAnt-AI Description

Streamline CPD year-end review and move job applications to Admin

What Changed

  • Replaces separate year-end menu pages with one End of year page in three steps: check what is missing, tidy evidence, then save, copy and close the year. Evidence, Export and AMA CPD Home remain accessible from those steps.
  • Moves Job applications and its CV to Admin. Old CPD links redirect to the new pages, and saved favourites follow moved pages.
  • Makes it clear when activity evidence has not been checked, rather than suggesting nothing needs evidence. The AMA CPD Home import caveat is now brief, with details under Import format.
  • Moves the missed-session option below the main activity fields.

Impact

✅ One guided path from CPD checks to year closure
✅ Clearer evidence status when certificates have not been checked
✅ Job applications and CV available from Admin

💡 Usage Guide

Checking Your Pull Request

Every time you make a pull request, our system automatically looks through it. We check for security issues, mistakes in how you're setting up your infrastructure, and common code problems. We do this to make sure your changes are solid and won't cause any trouble later.

Talking to CodeAnt AI

Got a question or need a hand with something in your pull request? You can easily get in touch with CodeAnt AI right here. Just type the following in a comment on your pull request, and replace "Your question here" with whatever you want to ask:

@codeant-ai ask: Your question here

This lets you have a chat with CodeAnt AI about your pull request, making it easier to understand and improve your code.

Example

@codeant-ai ask: Can you suggest a safer alternative to storing this secret?

Preserve Org Learnings with CodeAnt

You can record team preferences so CodeAnt AI applies them in future reviews. Reply directly to the specific CodeAnt AI suggestion (in the same thread) and replace "Your feedback here" with your input:

@codeant-ai: Your feedback here

This helps CodeAnt AI learn and adapt to your team's coding style and standards.

Example

@codeant-ai: Do not flag unused imports.

Retrigger review

Ask CodeAnt AI to review the PR again, by typing:

@codeant-ai: review

Check Your Repository Health

To analyze the health of your code repository, visit our dashboard at https://app.codeant.ai. This tool helps you identify potential issues and areas for improvement in your codebase, ensuring your repository maintains high standards of code health.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JZNXNqu4ZWvQwW613xMf1P
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JZNXNqu4ZWvQwW613xMf1P
…ion box after main fields

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JZNXNqu4ZWvQwW613xMf1P
@BigSimmo BigSimmo self-assigned this Oct 11, 2026
@coderabbitai

coderabbitai Bot commented Oct 11, 2026 •

Copy link
Copy Markdown
Contributor

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: ASSERTIVE
  • Plan: Advanced
  • Run ID: 4a6b7aff-498f-443a-9a76-87ad091010e4

  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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.

@supabase

supabase Bot commented Oct 11, 2026

Copy link
Copy Markdown

This pull request has been ignored for the connected project sjrfecxgysukkwxsowpy because there are no changes detected in supabase directory. You can change this behaviour in Project Integrations Settings ↗︎.


Preview Branches by Supabase.
Learn more about Supabase Branching ↗︎.

@codeant-ai

codeant-ai Bot commented Oct 11, 2026 •

Copy link
Copy Markdown

🏁 CodeAnt Quality Gate Results

Commit: 0951a771
Scan Time: 2026-10-11 10:00:12 UTC

✅ Overall Status: PASSED

Quality Gate Details

Quality Gate Status Details
Secrets ✅ PASSED 0 secrets found
Duplicate Code ✅ PASSED 0.0% duplicated
SAST ✅ PASSED No security issues
Bugs ✅ PASSED Rating S: No bugs
IAC ✅ PASSED Rating S: No issues

View Full Results

@codspeed

codspeed Bot commented Oct 11, 2026 •

Copy link
Copy Markdown

Merging this PR will not alter performance

⚠️ 2 benchmarks spent significant time in system calls

System calls cannot be consistently instrumented, so they are not included in the measure, which understates the real cost. Please switch to the Walltime instrument to accurately measure system calls.

Measurement and system calls

✅ 8 untouched benchmarks


Comparing claude/cpd-tidy-9jh19q (0951a77) with main (7af4ab7)

Open in CodSpeed

Report becomes End of year: what is missing, evidence to tidy, hand it in.
Evidence, Export and AMA CPD Home leave the More menu and stay as the pages
each step opens. Saved favourites for moved pages open their new home.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JZNXNqu4ZWvQwW613xMf1P
Comment thread src/lib/favourites/work-page-stars.ts Resolved
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JZNXNqu4ZWvQwW613xMf1P
@BigSimmo BigSimmo changed the title CPD tidy-up: Evidence and CPD Home wording, Job applications to Admin, shorter More menu CPD tidy-up: one End of year page, Job applications to Admin, More menu down to seven Oct 11, 2026
@BigSimmo
BigSimmo marked this pull request as ready for review October 11, 2026 09:27
@codeant-ai

codeant-ai Bot commented Oct 11, 2026 •

Copy link
Copy Markdown

🤖 CodeAnt AI — Review Status

Status Commit Started (UTC) Finished (UTC)
✅ Reviewed your PR 9045dd5 Oct 11, 2026 · 09:27 09:31

@codeant-ai

codeant-ai Bot commented Oct 11, 2026

Copy link
Copy Markdown

Thanks for using CodeAnt! 🎉

We're free for open-source projects. if you're enjoying it, help us grow by sharing.

Share on X ·
Reddit ·
LinkedIn

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

BigSimmo has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.

@claude

claude Bot commented Oct 11, 2026 •

Copy link
Copy Markdown
Contributor

Claude encountered an error after 2s —— View job


I'll analyze this and get back to you.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 11, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-11T09:44:52.136866Z a22c095 Draft marked ready
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@codeant-ai codeant-ai Bot added the size:XL This PR changes 500-999 lines, ignoring generated files label Oct 11, 2026
@BigSimmo
BigSimmo marked this pull request as draft October 11, 2026 09:27
@qodo-code-review

qodo-code-review Bot commented Oct 11, 2026 •

Copy link
Copy Markdown
Contributor

PR Summary by Qodo

Consolidate CPD year-end tasks and move job applications to Admin

✨ Enhancement 🐞 Bug fix 🧪 Tests 📝 Documentation 🕐 40+ Minutes

Grey Divider

AI Description

• Consolidates year-end checks, evidence and hand-in actions into one three-step CPD page.
• Moves job applications and CV to Admin, preserving old links and saved favourites.
• Simplifies CPD navigation and clarifies unchecked evidence and AMA CPD Home guidance.
Diagram

graph TD
  Menu["Work menus"] --> Year["End of year"] --> Evidence["Evidence detail"] --> Activity["Activity log"]
  Year --> Export["Export options"]
  Year --> Home["AMA CPD Home"]
  Menu --> Admin["Admin applications"] --> CV["CV draft"]
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Guided year-end wizard
  • ➕ Could focus attention on one task at a time.
  • ➖ Adds navigation and state to a process that benefits from a visible overview.
  • ➖ Would duplicate or obscure existing detail pages.

Recommendation: Keep the single overview with links to existing detail pages. It makes the hand-in sequence visible without changing CPD rules or rebuilding the evidence and export workflows; a wizard would add complexity without a clear benefit.

Files changed (48) +842 / -496

Enhancement (22) +460 / -315
loading.tsxAdd CV loading state under Admin +0/-0

Add CV loading state under Admin

• Provides the existing CV loading placeholder at its new route.

src/app/(search-app)/admin/applications/cv/loading.tsx

page.tsxServe the CV from Admin +26/-0

Serve the CV from Admin

• Relocates the CV route while retaining its all-years CPD loading and signed-out handling.

src/app/(search-app)/admin/applications/cv/page.tsx

loading.tsxAdd applications loading state under Admin +0/-0

Add applications loading state under Admin

• Provides the existing applications loading placeholder at its new route.

src/app/(search-app)/admin/applications/loading.tsx

page.tsxServe job applications from Admin +41/-0

Serve job applications from Admin

• Relocates the device-held applications page with its existing sign-in and demo behaviour, and updates its page title.

src/app/(search-app)/admin/applications/page.tsx

page.tsxRedirect the old CV address +4/-24

Redirect the old CV address

• Replaces the former CPD CV page with a redirect to its Admin address.

src/app/(search-app)/cme/applications/cv/page.tsx

page.tsxRedirect the old applications address +4/-39

Redirect the old applications address

• Preserves existing bookmarks by redirecting the former CPD route to Admin.

src/app/(search-app)/cme/applications/page.tsx

page.tsxRename year-check metadata +2/-2

Rename year-check metadata

• Names the existing route End of year and describes its three-step purpose.

src/app/(search-app)/cme/check/page.tsx

applications-cv-page.tsxGive the CV Admin identity and back navigation +2/-1

Give the CV Admin identity and back navigation

• Points its back link to Admin applications and applies the Admin colour identity.

src/components/cme/applications/applications-cv-page.tsx

applications-entry-link.tsxOpen applications in Admin +1/-1

Open applications in Admin

• Updates the applications entry link to the new route.

src/components/cme/applications/applications-entry-link.tsx

applications-page.tsxAlign applications page with Admin +4/-3

Align applications page with Admin

• Applies the Admin page identity and points the CV link to its new address.

src/components/cme/applications/applications-page.tsx

applications-today-card.tsxRetarget the applications Today card +1/-1

Retarget the applications Today card

• Opens job applications at its Admin address.

src/components/cme/applications/applications-today-card.tsx

cme-entry-form.tsxSupport options after the main activity fields +5/-0

Support options after the main activity fields

• Adds a slot before save controls for less-common entry options.

src/components/cme/cme-entry-form.tsx

cme-new-entry-route.tsxMove missed-session controls below primary fields +35/-33

Move missed-session controls below primary fields

• Places the replacement-session checkbox and conditional input after the main activity fields without changing their behaviour.

src/components/cme/cme-new-entry-route.tsx

cme-year-check-page.tsxPresent year-end work in three steps +254/-107

Present year-end work in three steps

• Groups missing checks, certificate tasks and hand-in actions on one page. Previews activities needing certificates and links to the existing evidence, export, CPD Home and close-year destinations.

src/components/cme/cme-year-check-page.tsx

cpd-feature-kit.tsxAllow Admin identity on shared feature pages +4/-1

Allow Admin identity on shared feature pages

• Makes the page colour identity configurable while retaining CPD as the default.

src/components/cme/cpd-feature-kit.tsx

cpd-home-send-page.tsxMake CPD Home actions lead +38/-41

Make CPD Home actions lead

• Replaces the prominent import-format warning with a short caveat and moves its detailed uncertainties under Import format.

src/components/cme/cpd-home/cpd-home-send-page.tsx

my-day-feature-cards.tsxCheck visibility at the new applications route +1/-1

Check visibility at the new applications route

• Uses the Admin address when deciding whether to show the applications Today card.

src/components/my-day/my-day-feature-cards.tsx

applications-cv.tsPoint CV statement edits to Admin +1/-1

Point CV statement edits to Admin

• Updates the statement correction link to the relocated CV.

src/lib/cme/applications-cv.ts

applications.tsClassify application links and records as Admin +10/-10

Classify application links and records as Admin

• Changes shared application URLs and assigns Admin ownership to reminders and search records.

src/lib/cme/applications.ts

information-pages.tsUse Admin's information-page handling for the CV +2/-4

Use Admin's information-page handling for the CV

• Removes the old CPD CV exception because Admin routes already suppress the search composer.

src/lib/information-pages.ts

areas.tsReduce CPD menu and add applications to Admin +24/-45

Reduce CPD menu and add applications to Admin

• Makes End of year the menu entry for its detail pages, removes redundant CPD entries, and adds applications beside other Admin tasks.

src/lib/work-frame/areas.ts

feature-pages.tsGroup application search results under Admin +1/-1

Group application search results under Admin

• Moves application feature-search records from the CPD group to the Admin group.

src/lib/work-search/feature-pages.ts

Bug fix (3) +208 / -120
cpd-evidence-page.tsxClarify evidence that has not been checked +140/-113

Clarify evidence that has not been checked

• Shows a plain unchecked state instead of misleading zero-count and all-clear displays. Retains filters when active and labels unknown activity evidence as Not checked.

src/components/work-screens/cpd/cpd-evidence-page.tsx

work-page-stars.tsMigrate favourites for moved menu pages +56/-3

Migrate favourites for moved menu pages

• Maps saved evidence, export and CPD Home stars to End of year, Set up to Targets, and applications to Admin. Merges duplicate stars while preserving their timestamps.

src/lib/favourites/work-page-stars.ts

evidence.tsDistinguish unchecked evidence from missing evidence +12/-4

Distinguish unchecked evidence from missing evidence

• Rewords unknown-evidence labels and adds a helper to identify years where no activity evidence was checked.

src/lib/work-screens/cpd/evidence.ts

Tests (15) +103 / -34
cme-annual-summary-months.dom.test.tsxVerify the summary's Admin applications link +1/-1

Verify the summary's Admin applications link

• Updates the expected applications destination in the annual summary.

tests/cme-annual-summary-months.dom.test.tsx

cme-applications-cv-page.dom.test.tsxTest the CV at its Admin location +2/-2

Test the CV at its Admin location

• Uses the new pathname and verifies navigation back to Admin applications.

tests/cme-applications-cv-page.dom.test.tsx

cme-applications-page.dom.test.tsxTest relocated applications navigation +3/-3

Test relocated applications navigation

• Uses the Admin pathname and checks the CV, entry and Today-card links.

tests/cme-applications-page.dom.test.tsx

cme-applications.test.tsExpect Admin-owned application reminders +4/-4

Expect Admin-owned application reminders

• Updates reminder expectations for their Admin area and destination.

tests/cme-applications.test.ts

cme-cpd-home-send-page.dom.test.tsxCheck concise CPD Home caveat +4/-2

Check concise CPD Home caveat

• Verifies the new one-line import-format warning.

tests/cme-cpd-home-send-page.dom.test.tsx

cme-dashboard-today.dom.test.tsxCheck the dashboard's applications destination +1/-1

Check the dashboard's applications destination

• Expects the applications Today card to open Admin.

tests/cme-dashboard-today.dom.test.tsx

cme-year-check.dom.test.tsxCover three-step year-end presentation +21/-1

Cover three-step year-end presentation

• Checks numbered steps, relocated record checks, certificate attachment links and the CPD Home caveat.

tests/cme-year-check.dom.test.tsx

information-pages.test.tsCover Admin application information pages +3/-4

Cover Admin application information pages

• Tests applications and CV at their new Admin paths.

tests/information-pages.test.ts

work-frame-route.test.tsCheck current menu items after the move +3/-2

Check current menu items after the move

• Verifies Admin owns the CV and End of year stays current on CPD Export.

tests/work-frame-route.test.ts

work-mode-launch-proxy.test.tsGate the new Admin applications route +1/-1

Gate the new Admin applications route

• Checks classic-mode proxy behaviour at the relocated address.

tests/work-mode-launch-proxy.test.ts

work-mode-launch.test.tsCheck launch visibility for Admin applications +3/-3

Check launch visibility for Admin applications

• Updates classic and launched mode assertions to use the Admin paths.

tests/work-mode-launch.test.ts

work-page-favourite-visibility.dom.test.tsxCover visibility and remapping of saved pages +21/-6

Cover visibility and remapping of saved pages

• Uses an unchanged new-only page for visibility checks and verifies old CPD favourites resolve to End of year or Admin.

tests/work-page-favourite-visibility.dom.test.tsx

work-page-stars.test.tsTest favourite migration and editing +25/-0

Test favourite migration and editing

• Checks duplicate-star merging and confirms a migrated favourite can be opened, unpinned and removed by its new key.

tests/work-page-stars.test.ts

work-screens-cpd-evidence-export.test.tsTest unchecked-evidence classification and wording +6/-3

Test unchecked-evidence classification and wording

• Asserts the new labels and distinguishes wholly unchecked years from partly checked ones.

tests/work-screens-cpd-evidence-export.test.ts

work-screens-cpd-pages.dom.test.tsxVerify the evidence page's unchecked state +5/-1

Verify the evidence page's unchecked state

• Confirms the demo shows an actionable unchecked message without misleading counts or an all-clear state.

tests/work-screens-cpd-pages.dom.test.tsx

Documentation (6) +65 / -23
repo-awareness-snapshot.jsonRegister relocated application routes +20/-10

Register relocated application routes

• Records the two Admin application pages as product routes and their old CPD addresses as redirects.

data/repo-awareness-snapshot.json

ADOPTION.mdUpdate design-system route counts +4/-4

Update design-system route counts

• Refreshes documented product-root and production-route totals for the new Admin pages.

docs/design-system/ADOPTION.md

adoption-contract.jsonDeclare Admin application pages in the adoption contract +2/-0

Declare Admin application pages in the adoption contract

• Adds the application and CV routes to the owned design-system surface.

docs/design-system/adoption-contract.json

adoption-manifest.jsonRefresh adoption coverage for Admin routes +31/-5

Refresh adoption coverage for Admin routes

• Records both new pages and updates discovered-route and adoption totals.

docs/design-system/adoption-manifest.json

site-map.mdDocument new application routes and legacy redirects +6/-2

Document new application routes and legacy redirects

• Lists the Admin destinations and identifies the former CPD addresses as redirects.

docs/site-map.md

generate-site-map.tsDescribe application pages at their new addresses +2/-2

Describe application pages at their new addresses

• Moves site-map descriptions from the CPD paths to the Admin paths.

scripts/generate-site-map.ts

Other (2) +6 / -4
jobs.jsonPoint application captures at Admin +4/-4

Point application captures at Admin

• Changes phone and desktop capture URLs for job applications and CV to their Admin routes.

scripts/figma-sync/jobs.json

routes.tsGate the relocated applications page +2/-0

Gate the relocated applications page

• Registers the new Admin address while retaining the old CPD address in work-mode route handling.

src/lib/work-mode-launch/routes.ts

…what it holds

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JZNXNqu4ZWvQwW613xMf1P
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JZNXNqu4ZWvQwW613xMf1P

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 9045dd50f0

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/lib/favourites/work-page-stars.ts Resolved
Comment thread src/lib/cme/applications.ts Resolved
@qodo-code-review

qodo-code-review Bot commented Oct 11, 2026 •

Copy link
Copy Markdown
Contributor

Code Review by Qodo

🐞 Bugs (0) 📘 Rule violations (0) 🔗 Cross-repo conflicts (0) 📜 Skill insights (0)

Grey Divider


Action required

No findings for this group


Remediation recommended

No findings for this group


Informational

No findings for this group

Grey Divider


Resolved findings

1. Classic users hit a 404 from End of year ✓ Resolved
Description
In step 2 of End of year, the CmeTextLink to /cme/evidence?year=… ("Every activity's evidence" /
"All N") is rendered without the NewWorkModeOnly wrapper. /cme/evidence is in
NEW_WORK_MODE_ROUTES, so classic work-mode users get the proxy's 404. The same page wraps its
other new-only links: the evidence row's action, All export options and Copy everything.
Code

src/components/cme/cme-year-check-page.tsx[R393-401]

+              <CmeTextLink
+                href={`/cme/evidence?year=${set.year}`}
+                testId="cme-year-end-evidence-all"
+                className="min-h-0"
+              >
+                {evidence.needs.length > EVIDENCE_PREVIEW
+                  ? `All ${evidence.needs.length}`
+                  : "Every activity's evidence"}
+              </CmeTextLink>
Relevance

●●● Strong

An unguarded new-only link can expose classic users to a known 404 route gate.

PR-#3441

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
/cme/evidence is listed as new-only, and the proxy hides it on classic mode. CheckRow already
guards the same href with NewWorkModeOnly and a fallback, and step 3 wraps the export and cpd-home
links. The new step-2 link has no such guard.

src/lib/work-mode-launch/routes.ts[46-48]
src/components/cme/cme-year-check-page.tsx[129-134]
src/components/cme/cme-year-check-page.tsx[449-453]
PR-#3441

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The End of year step 2 link to `/cme/evidence` is shown to classic work-mode users, but that route is new-only and returns a 404 for them.

## Fix Focus Areas
- src/components/cme/cme-year-check-page.tsx[391-402]

## Recommended Fix
Wrap the `CmeTextLink` with testId `cme-year-end-evidence-all` in `<NewWorkModeOnly>`, as step 3 does for its new-only links. If classic mode needs a way in, give it a fallback that points to `/cme/log`.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


2. Readers lose evidence filters ✓ Resolved
Description
CpdEvidencePage hides the Type, Show, and Order controls when every activity is unchecked, but
still uses the active category, status, and order filters to build the unchecked-state action and
list. A saved or carried show=missing, show=attached, or category filter can leave no activity
to open and no on-page way to clear the filter, while order=oldest makes the “Open the latest
activity” action open the oldest one.
Code

src/components/work-screens/cpd/cpd-evidence-page.tsx[R233-234]

+            {unchecked ? (
+              <WorkEmpty
Relevance

●●● Strong

Hidden filters make saved query state inaccessible and can select the wrong unchecked activity.

PR-#3197
PR-#3228

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The unchecked condition uses year-wide totals, while the unchecked-state action and list use
view.notCounted, which is filtered by category, empty when status is not all, and sorted by
order. The route accepts filters from the query string and year-chip links preserve them, but the
controls that could change those filters render only outside the unchecked branch.

src/components/work-screens/cpd/cpd-evidence-page.tsx[233-251]
src/lib/work-screens/cpd/evidence.ts[110-139]
src/app/(search-app)/cme/evidence/page.tsx[42-60]
src/lib/work-screens/cpd/evidence.ts[109-135]
src/components/work-screens/cpd/cpd-evidence-page.tsx[199-205]
src/components/work-screens/cpd/cpd-evidence-page.tsx[233-252]
src/lib/work-screens/cpd/evidence.ts[117-143]
src/lib/work-screens/cpd/evidence.ts[174-180]
src/components/work-screens/cpd/cpd-evidence-page.tsx[167-171]
src/components/work-screens/cpd/cpd-evidence-page.tsx[233-305]
src/app/(search-app)/cme/evidence/page.tsx[43-59]
Skill: ux-review

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The all-unchecked state hides filter controls while continuing to use a filtered view. Saved or carried status and category filters can remove its activity action and list, and an oldest-first order can make its “latest” action open the wrong activity.

## Fix Focus Areas
- src/components/work-screens/cpd/cpd-evidence-page.tsx[128-131]
- src/components/work-screens/cpd/cpd-evidence-page.tsx[167-171]
- src/components/work-screens/cpd/cpd-evidence-page.tsx[233-305]
- src/lib/work-screens/cpd/evidence.ts[110-139]

## Recommended Fix
Keep Type and Show controls accessible in the unchecked state, or clear category and status to `all` and update the address before presenting unfiltered activities. Derive the unchecked-state action and list from an unfiltered, newest-first view so filters cannot remove the action or make “latest” open the oldest activity. Add coverage for bookmarked status and category filters.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


3. Moved favourites cannot be removed ✓ Resolved
Description
resolveWorkPageStars remaps legacy favourite keys only in its returned list, while removal,
pinning, opening, and star toggling still compare destination keys with unchanged stored keys. For
favourites saved before the Evidence, Export, Set up, or Job applications moves, those controls
leave the old record unchanged, and toggling the current-page star can create a duplicate.
Code

src/lib/favourites/work-page-stars.ts[R267-268]

+    const moved = MOVED_WORK_PAGES[workPageStarKey(saved.areaId, saved.itemId)];
+    const star = moved ? { ...saved, ...moved } : saved;
Relevance

●●● Strong

Display-only key remapping leaves mutation controls unable to operate on legacy favourites.

PR-#2186
PR-#2402

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
Resolution changes keys only in the returned objects, leaving stored entries under their legacy
keys. Removal, pinning, opening, and star toggling compare supplied keys against those stored
entries, so controls using destination keys cannot match the legacy records.

src/lib/favourites/work-page-stars.ts[252-276]
src/lib/favourites/work-page-stars.ts[157-215]
src/components/favourites/work-page-favourite-button.tsx[30-46]
src/lib/favourites/work-page-stars.ts[164-217]
src/components/clinical-dashboard/favourites-command-library-page.tsx[1199-1202]
src/components/clinical-dashboard/favourites-command-library-page.tsx[1310-1314]
Skill: code-quality-review

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
Moved favourites display under destination keys, but controls acting on those keys cannot remove or update records still stored under legacy keys and may create duplicates.

## Fix Focus Areas
- src/lib/favourites/work-page-stars.ts[164-217]
- src/lib/favourites/work-page-stars.ts[252-276]
- src/components/favourites/work-page-favourite-button.tsx[30-46]

## Recommended Fix
Normalize or migrate stored favourites to destination keys before resolving or mutating them. Deduplicate entries that map to the same destination while preserving appropriate pin and open timestamps. Test removal, pinning, opening, and star toggling for favourites saved under legacy keys.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


View resolved (2)
4. The year can falsely show full evidence ✓ Resolved
Description
evidenceSub says “Every activity has evidence” whenever none are classified as missing and the
activities are not *all* unchecked. A year containing both an attached activity and an activity
whose evidence count is unknown reaches that message, even though the unknown activity is absent
from the step’s missing-certificate preview.
Code

src/components/cme/cme-year-check-page.tsx[R275-279]

+    : evidenceUnchecked
+      ? "Evidence not checked yet"
+      : evidence.missing
+        ? `${activities(evidence.missing)} ${evidence.missing === 1 ? "has" : "have"} no certificate`
+        : "Every activity has evidence";
Relevance

●●● Strong

Mixed attached and unknown activities can falsely claim complete evidence; this is a clear
correctness defect.

PR-#3197
PR-#3219

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The evidence view counts unknown activities separately, while its needs list contains only missing
activities. The existing year-check logic treats an undefined evidence count as not checked rather
than as evidence present.

src/lib/work-screens/cpd/evidence.ts[110-143]
src/lib/cme/year-check.ts[156-178]
src/components/cme/cme-year-check-page.tsx[268-279]
src/components/cme/cme-year-check-page.tsx[372-400]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The End of year evidence summary claims every activity has evidence when some activities have unknown evidence counts.
## Fix Focus Areas
- src/components/cme/cme-year-check-page.tsx[268-279]
- src/components/cme/cme-year-check-page.tsx[372-402]
## Recommended Fix
Only show the all-evidence message when both missing and unknown counts are zero. Describe unknown activities separately in mixed years and provide a clear route to check them.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


5. Job applications reminders still say CPD ✓ Resolved
Description
applicationsNeedsYouItems still tags each reminder with area: "cpd" and ids prefixed
cpd:applications:, but href now points to /admin/applications. Notification-centre and My Day
reminders for application dates and quiet referees are labelled and coloured as CPD, then open a
page in Admin.
Code

src/lib/cme/applications.ts[R494-495]

+export const APPLICATIONS_HREF = "/admin/applications";
+export const APPLICATIONS_CV_HREF = "/admin/applications/cv";
Relevance

●●● Strong

Moved Admin reminders should use Admin identity; current CPD labeling conflicts with the
destination.

PR-#3228
PR-#3387

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The href constants moved to Admin, but the items built from them keep area: "cpd". The updated
test in tests/cme-applications.test.ts expects area: "cpd" together with the new admin href.

src/lib/cme/applications.ts[511-537]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
Job applications moved to Admin, but its reminders still carry `area: "cpd"`, so they are labelled as CPD while opening an Admin page.

## Fix Focus Areas
- src/lib/cme/applications.ts[511-537]

## Recommended Fix
Set `area` to the Admin area id used by other Admin needs-you items, and update the test in tests/cme-applications.test.ts. Keep the existing id prefixes, or migrate them, so dismissed or snoozed state is not lost.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Context sources
✅ Compliance rules (platform): 9 rules
✅ Skills: testing-review
✅ Cross-repo context — repo relationships
✅ REVIEW.md
Review mode: Auto: 🚀 Fast: Localized test and allowlist updates with limited behavioral risk.

Grey Divider

Tip of the day
💡 Did you know, you can tweak Display settings with a live preview to see your comment before it ships

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Previous reviews

Review updated until commit 0951a77 🚀 Fast

Results up to commit 9045dd5 🧠 Deep


🐞 Bugs (0) 📘 Rule violations (0) 📎 Requirement gaps (0) 🎨 UX issues (0) 🔗 Cross-repo conflicts (0) 📜 Skill insights (0)


Action required

No findings for this group


Remediation recommended

No findings for this group


Informational

No findings for this group


Resolved findings

1. Classic users hit a 404 from End of year ✓ Resolved
Description
In step 2 of End of year, the CmeTextLink to /cme/evidence?year=… ("Every activity's evidence" /
"All N") is rendered without the NewWorkModeOnly wrapper. /cme/evidence is in
NEW_WORK_MODE_ROUTES, so classic work-mode users get the proxy's 404. The same page wraps its
other new-only links: the evidence row's action, All export options and Copy everything.
Code

src/components/cme/cme-year-check-page.tsx[R393-401]

+              <CmeTextLink
+                href={`/cme/evidence?year=${set.year}`}
+                testId="cme-year-end-evidence-all"
+                className="min-h-0"
+              >
+                {evidence.needs.length > EVIDENCE_PREVIEW
+                  ? `All ${evidence.needs.length}`
+                  : "Every activity's evidence"}
+              </CmeTextLink>
Relevance

●●● Strong

An unguarded new-only link can expose classic users to a known 404 route gate.

PR-#3441

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
/cme/evidence is listed as new-only, and the proxy hides it on classic mode. CheckRow already
guards the same href with NewWorkModeOnly and a fallback, and step 3 wraps the export and cpd-home
links. The new step-2 link has no such guard.

src/lib/work-mode-launch/routes.ts[46-48]
src/components/cme/cme-year-check-page.tsx[129-134]
src/components/cme/cme-year-check-page.tsx[449-453]
PR-#3441

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The End of year step 2 link to `/cme/evidence` is shown to classic work-mode users, but that route is new-only and returns a 404 for them.

## Fix Focus Areas
- src/components/cme/cme-year-check-page.tsx[391-402]

## Recommended Fix
Wrap the `CmeTextLink` with testId `cme-year-end-evidence-all` in `<NewWorkModeOnly>`, as step 3 does for its new-only links. If classic mode needs a way in, give it a fallback that points to `/cme/log`.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


2. Readers lose evidence filters ✓ Resolved
Description
CpdEvidencePage hides the Type, Show, and Order controls when every activity is unchecked, but
still uses the active category, status, and order filters to build the unchecked-state action and
list. A saved or carried show=missing, show=attached, or category filter can leave no activity
to open and no on-page way to clear the filter, while order=oldest makes the “Open the latest
activity” action open the oldest one.
Code

src/components/work-screens/cpd/cpd-evidence-page.tsx[R233-234]

+            {unchecked ? (
+              <WorkEmpty
Relevance

●●● Strong

Hidden filters make saved query state inaccessible and can select the wrong unchecked activity.

PR-#3197
PR-#3228

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The unchecked condition uses year-wide totals, while the unchecked-state action and list use
view.notCounted, which is filtered by category, empty when status is not all, and sorted by
order. The route accepts filters from the query string and year-chip links preserve them, but the
controls that could change those filters render only outside the unchecked branch.

src/components/work-screens/cpd/cpd-evidence-page.tsx[233-251]
src/lib/work-screens/cpd/evidence.ts[110-139]
src/app/(search-app)/cme/evidence/page.tsx[42-60]
src/lib/work-screens/cpd/evidence.ts[109-135]
src/components/work-screens/cpd/cpd-evidence-page.tsx[199-205]
src/components/work-screens/cpd/cpd-evidence-page.tsx[233-252]
src/lib/work-screens/cpd/evidence.ts[117-143]
src/lib/work-screens/cpd/evidence.ts[174-180]
src/components/work-screens/cpd/cpd-evidence-page.tsx[167-171]
src/components/work-screens/cpd/cpd-evidence-page.tsx[233-305]
src/app/(search-app)/cme/evidence/page.tsx[43-59]
Skill: ux-review

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The all-unchecked state hides filter controls while continuing to use a filtered view. Saved or carried status and category filters can remove its activity action and list, and an oldest-first order can make its “latest” action open the wrong activity.

## Fix Focus Areas
- src/components/work-screens/cpd/cpd-evidence-page.tsx[128-131]
- src/components/work-screens/cpd/cpd-evidence-page.tsx[167-171]
- src/components/work-screens/cpd/cpd-evidence-page.tsx[233-305]
- src/lib/work-screens/cpd/evidence.ts[110-139]

## Recommended Fix
Keep Type and Show controls accessible in the unchecked state, or clear category and status to `all` and update the address before presenting unfiltered activities. Derive the unchecked-state action and list from an unfiltered, newest-first view so filters cannot remove the action or make “latest” open the oldest activity. Add coverage for bookmarked status and category filters.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


3. Moved favourites cannot be removed ✓ Resolved
Description
resolveWorkPageStars remaps legacy favourite keys only in its returned list, while removal,
pinning, opening, and star toggling still compare destination keys with unchanged stored keys. For
favourites saved before the Evidence, Export, Set up, or Job applications moves, those controls
leave the old record unchanged, and toggling the current-page star can create a duplicate.
Code

src/lib/favourites/work-page-stars.ts[R267-268]

+    const moved = MOVED_WORK_PAGES[workPageStarKey(saved.areaId, saved.itemId)];
+    const star = moved ? { ...saved, ...moved } : saved;
Relevance

●●● Strong

Display-only key remapping leaves mutation controls unable to operate on legacy favourites.

PR-#2186
PR-#2402

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
Resolution changes keys only in the returned objects, leaving stored entries under their legacy
keys. Removal, pinning, opening, and star toggling compare supplied keys against those stored
entries, so controls using destination keys cannot match the legacy records.

src/lib/favourites/work-page-stars.ts[252-276]
src/lib/favourites/work-page-stars.ts[157-215]
src/components/favourites/work-page-favourite-button.tsx[30-46]
src/lib/favourites/work-page-stars.ts[164-217]
src/components/clinical-dashboard/favourites-command-library-page.tsx[1199-1202]
src/components/clinical-dashboard/favourites-command-library-page.tsx[1310-1314]
Skill: code-quality-review

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
Moved favourites display under destination keys, but controls acting on those keys cannot remove or update records still stored under legacy keys and may create duplicates.

## Fix Focus Areas
- src/lib/favourites/work-page-stars.ts[164-217]
- src/lib/favourites/work-page-stars.ts[252-276]
- src/components/favourites/work-page-favourite-button.tsx[30-46]

## Recommended Fix
Normalize or migrate stored favourites to destination keys before resolving or mutating them. Deduplicate entries that map to the same destination while preserving appropriate pin and open timestamps. Test removal, pinning, opening, and star toggling for favourites saved under legacy keys.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


View resolved (2)
4. The year can falsely show full evidence ✓ Resolved
Description
evidenceSub says “Every activity has evidence” whenever none are classified as missing and the
activities are not *all* unchecked. A year containing both an attached activity and an activity
whose evidence count is unknown reaches that message, even though the unknown activity is absent
from the step’s missing-certificate preview.
Code

src/components/cme/cme-year-check-page.tsx[R275-279]

+    : evidenceUnchecked
+      ? "Evidence not checked yet"
+      : evidence.missing
+        ? `${activities(evidence.missing)} ${evidence.missing === 1 ? "has" : "have"} no certificate`
+        : "Every activity has evidence";
Relevance

●●● Strong

Mixed attached and unknown activities can falsely claim complete evidence; this is a clear
correctness defect.

PR-#3197
PR-#3219

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The evidence view counts unknown activities separately, while its needs list contains only missing
activities. The existing year-check logic treats an undefined evidence count as not checked rather
than as evidence present.

src/lib/work-screens/cpd/evidence.ts[110-143]
src/lib/cme/year-check.ts[156-178]
src/components/cme/cme-year-check-page.tsx[268-279]
src/components/cme/cme-year-check-page.tsx[372-400]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The End of year evidence summary claims every activity has evidence when some activities have unknown evidence counts.
## Fix Focus Areas
- src/components/cme/cme-year-check-page.tsx[268-279]
- src/components/cme/cme-year-check-page.tsx[372-402]
## Recommended Fix
Only show the all-evidence message when both missing and unknown counts are zero. Describe unknown activities separately in mixed years and provide a clear route to check them.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


5. Job applications reminders still say CPD ✓ Resolved
Description
applicationsNeedsYouItems still tags each reminder with area: "cpd" and ids prefixed
cpd:applications:, but href now points to /admin/applications. Notification-centre and My Day
reminders for application dates and quiet referees are labelled and coloured as CPD, then open a
page in Admin.
Code

src/lib/cme/applications.ts[R494-495]

+export const APPLICATIONS_HREF = "/admin/applications";
+export const APPLICATIONS_CV_HREF = "/admin/applications/cv";
Relevance

●●● Strong

Moved Admin reminders should use Admin identity; current CPD labeling conflicts with the
destination.

PR-#3228
PR-#3387

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The href constants moved to Admin, but the items built from them keep area: "cpd". The updated
test in tests/cme-applications.test.ts expects area: "cpd" together with the new admin href.

src/lib/cme/applications.ts[511-537]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
Job applications moved to Admin, but its reminders still carry `area: "cpd"`, so they are labelled as CPD while opening an Admin page.

## Fix Focus Areas
- src/lib/cme/applications.ts[511-537]

## Recommended Fix
Set `area` to the Admin area id used by other Admin needs-you items, and update the test in tests/cme-applications.test.ts. Keep the existing id prefixes, or migrate them, so dismissed or snoozed state is not lost.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Results up to commit a22c095 ⚖️ Balanced


No changes from previous review

Results up to commit 9dac5ef ⚖️ Balanced


No changes from previous review

Grey Divider

Qodo Logo

Comment thread src/lib/favourites/work-page-stars.ts Resolved
Comment thread src/lib/favourites/work-page-stars.ts Resolved
@qodo-code-review

Copy link
Copy Markdown
Contributor

Qodo Fixer

✅ Committed (5) · ☑ Fixed (5)

Grey Divider

Commits pushed directly to this PR — no separate fix PR opened.

Process — 5 fixed
  • ☑ Fixed: Classic users hit a 404 from End of year
  • ☑ Fixed: 0c682db2-eb77-40ad-a936-f9s54c6741fd
  • ☑ Fixed: Moved favourites cannot be removed
  • ☑ Fixed: The year can falsely show full evidence
  • ☑ Fixed: Job applications reminders still say CPD

gitar-bot[bot]
gitar-bot Bot previously approved these changes Oct 11, 2026

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

Gitar has auto-approved this PR (configure)

…dence state, test moved favourites

- Job applications search results now sit under Admin, like its reminders.
- Evidence keeps 'No activities logged' when the year has none, filters or not.
- Tests: moved favourites open, unpin and remove by their new key; exactly three End of year steps.
- Refresh the repo-awareness snapshot for the moved routes.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JZNXNqu4ZWvQwW613xMf1P

Copy link
Copy Markdown
Owner Author

Review findings addressed (commits 2af6e9b, 9ddcb25, e98f157, 5673d95 and a22c095):

  • End of year step 2's link to the Evidence page is now new-work-mode only, so classic mode no longer reaches a 404.
  • The Evidence step no longer says "Every activity has evidence" when some activities are unchecked.
  • The Evidence page keeps its filter chips whenever a filter or the oldest-first order is active, so a carried filter is never a dead end. The empty "No activities logged" state still shows whenever the year has none.
  • Moved favourites are migrated to their new keys when storage is read, with duplicates merged. A new test checks that a moved favourite can be opened, unpinned and removed.
  • Job applications reminders and search results are now classed as Admin; reminder ids are kept so snoozes survive.
  • The step-heading test now requires exactly three steps.
  • The repo-awareness snapshot is refreshed for the moved routes.

Generated by Claude Code

gitar-bot[bot]
gitar-bot Bot previously approved these changes Oct 11, 2026

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

Gitar has auto-approved this PR (configure)

@BigSimmo
BigSimmo marked this pull request as ready for review October 11, 2026 09:39

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

BigSimmo has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.

@gitar-bot
gitar-bot Bot enabled auto-merge (squash) October 11, 2026 09:40
@qodo-code-review

Copy link
Copy Markdown
Contributor

Code review by qodo was updated up to the latest commit a22c095

@qodo-code-review

Copy link
Copy Markdown
Contributor

Qodo Fixer

Found 5 findings, but none include a fix that can be applied automatically.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JZNXNqu4ZWvQwW613xMf1P

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: a22c09501f

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

gitar-bot[bot]
gitar-bot Bot previously approved these changes Oct 11, 2026

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

Gitar has auto-approved this PR (configure)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JZNXNqu4ZWvQwW613xMf1P
gitar-bot[bot]
gitar-bot Bot previously approved these changes Oct 11, 2026

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

Gitar has auto-approved this PR (configure)

@qodo-code-review

Copy link
Copy Markdown
Contributor

Code review by qodo was updated up to the latest commit 9dac5ef

…er CPD menu

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JZNXNqu4ZWvQwW613xMf1P

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

Gitar has auto-approved this PR (configure)

@gitar-bot

gitar-bot Bot commented Oct 11, 2026

Copy link
Copy Markdown
Contributor
Code Review ✅ Approved 2 closed / 2 findings

🟡 Medium risk · Moving Job applications into Admin and consolidating CPD year-end pages changes routes, which could make saved plans or evidence actions harder to reach.

Consolidates CPD year-end into one three-step End of year page, moves Job applications and its CV to Admin at /admin/applications with old links redirecting, and trims the CPD More menu to seven entries. Resolved the unchecked-view filter bug where URL filters still applied while chips were hidden, and fixed moved favourites so they can be removed, pinned and opened. No open issues found.

Auto-approved: No blocking issues found.
Please see Auto-approve Docs for details on setting custom approval criteria.

✅ 2 closed
✅ Edge Case: Unchecked view hides filter chips but still obeys URL filters

📄 src/components/work-screens/cpd/cpd-evidence-page.tsx:170-171 📄 src/components/work-screens/cpd/cpd-evidence-page.tsx:233-247 📄 src/components/work-screens/cpd/cpd-evidence-page.tsx:370 📄 src/lib/work-screens/cpd/evidence.ts:178-180
evidenceUnchecked looks at the whole year (total/unknown ignore filters). firstUnchecked is view.notCounted[0], and notCounted does follow the filters: it is [] whenever status !== "all" and only holds the chosen type when category is set. The new branch also hides the Type and Show chips. So if someone opens a shared or remembered /cme/evidence?status=missing (or ?category=… for a type with no activities) for a year where nothing was checked, the page says "These N activities have not been checked", but there is no 'Open the latest activity' button, no 'Not checked yet' list, and no chip to clear the filter. The page is a dead end. With order=oldest, the button labelled 'Open the latest activity' opens the oldest one instead. Fix: in the unchecked state, take the first activity from an unfiltered, newest-first view, and either ignore the filters or keep the chips visible.

✅ Bug: Moved favourites can't be removed, pinned or recorded as opened

📄 src/lib/favourites/work-page-stars.ts:252-266
resolveWorkPageStars rewrites a saved cpd:cpd-export (or another moved page) to cpd:setup and returns that new key. favourite-items.ts then uses it as workKey. removeWorkPageStars, setWorkPageStarsPinned and recordWorkPageOpened look up stored entries by that key, but storage still holds the old cpd:cpd-export key, so none of them match. Removing the favourite does nothing and it comes straight back, and pin and opened-time updates are lost. Fix: move the stored entries to their new keys when storage is read (in read(), removing duplicates). Or carry the original stored keys on each resolved star and use them in those write calls.

Review coverage

🤖 Auto-approval Approved

📋 Rules No rules evaluated

🧪 Functional validation Not enabled · Set up

Options

Auto-apply is off → Gitar will not commit updates to this branch.
Display: compact → Counting what did not apply, without listing it.

Comment with these commands to change the behavior for this request:

Auto-apply Compact
gitar auto-apply:on         
gitar display:verbose         

Was this helpful? React with 👍 / 👎 | Gitar

@qodo-code-review

Copy link
Copy Markdown
Contributor

Code review by qodo was updated up to the latest commit 0951a77

@gitar-bot
gitar-bot Bot merged commit 36c1ba3 into main Oct 11, 2026
40 checks passed
@gitar-bot
gitar-bot Bot deleted the claude/cpd-tidy-9jh19q branch October 11, 2026 10:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🔴 Large blast radius size:XL This PR changes 500-999 lines, ignoring generated files 🕐 40+ Minutes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants