Skip to content

Configurable workday tick appearance - #2950

Merged
steipete merged 5 commits into
steipete:mainfrom
dstier-git:configurable-workday-ticks
Aug 16, 2026
Merged

Configurable workday tick appearance#2950
steipete merged 5 commits into
steipete:mainfrom
dstier-git:configurable-workday-ticks

Conversation

@dstier-git

Copy link
Copy Markdown
Contributor

Summary

Adds configurable workday boundary tick visibility and contrast for weekly usage bars.

Closes #2904.

Changes

  • Adds a Workday tick appearance picker under Usage:
  • Hidden — removes workday boundary ticks without changing pace calculations.
  • Subtle (current main) — preserves the existing appearance and remains the default.
  • High contrast — uses full-height, 1.96 pt-wide ticks with increased opacity.
  • Disables the picker when Work Days is set to Automatic, where no boundaries are available.
  • Applies the setting to global and provider-detail weekly usage bars.
  • Persists the selection locally and through CloudKit preferences sync.
  • Maintains backward compatibility with existing synced preferences.
  • Localizes the new setting across all supported languages.
  • Adds coverage for rendering, persistence, sync, model projection, preferences, and localization.

Screenshots

Each picture includes the option toggled on the left side, and the resulting ticks on the right side (Codex shown).

Menu option (dropdown)

image

Subtle (default)

Screenshot 2026-08-15 at 12 26 27 AM

High contrast

Screenshot 2026-08-15 at 12 26 06 AM

Hidden

Screenshot 2026-08-15 at 12 26 39 AM

Testing

  • Focused renderer, settings, sync, model, preferences, and localization tests.
  • make check
  • make test — 860 selections across 72 groups passed before the final visual-only thickness adjustment.
  • Final 1.96 pt thickness adjustment was not rerun through verification.

@clawsweeper

clawsweeper Bot commented Aug 15, 2026

Copy link
Copy Markdown

🦞👀
ClawSweeper picked this up.

Pull request received. I will update this pull request when review starts.

@clawsweeper clawsweeper Bot added merge-risk: 🚨 compatibility 🚨 Merging this PR could break existing users, config, migrations, defaults, or upgrades. P3 Low-risk cleanup, docs, polish, ergonomics, or speculative feature. proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. proof: sufficient Contributor real behavior proof is sufficient. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. labels Aug 15, 2026
@clawsweeper

clawsweeper Bot commented Aug 15, 2026

Copy link
Copy Markdown

Codex review: needs maintainer review before merge. Reviewed August 16, 2026, 12:00 AM ET / 04:00 UTC.

ClawSweeper review

What this changes

Adds a setting to hide, preserve, or increase the contrast of workday boundary ticks in weekly usage bars.

Merge readiness

⚠️ Ready for maintainer review - 3 items remain

Keep open for maintainer product direction. The implementation is coherent and does not show a concrete correctness or security defect, but it adds a permanent synced configuration surface.

Priority: P3
Reviewed head: 0179be795156c6d3fdae28191799537687e60e65
Owner decision: Required. See Decision needed.

Review scores

Measure Result What it means
Overall readiness 🐚 platinum hermit (4/6) Direct UI proof and focused coverage support a coherent patch; product approval of the new sync surface remains the merge gate.
Proof confidence 🦞 diamond lobster (5/6) ✨ media proof bonus Sufficient (screenshot): The PR body provides after-change screenshots of the picker and each visible rendering option.
Patch quality 🐚 platinum hermit (4/6) No actionable review findings were identified.

Verification

Check Result Evidence
Real behavior Verified Sufficient (screenshot): The PR body provides after-change screenshots of the picker and each visible rendering option.
Evidence reviewed 6 items Current main lacks this setting: Current main retains fixed workday-boundary calculations but has no WorkdayTickAppearance or workdayTickAppearance symbol, so the central requested capability is not already implemented.
Renderer propagation: The PR removes weekly workday markers when hidden and carries the selected appearance into the metric rendered by the weekly card.
Sync compatibility path: The new CloudKit field is optional on decode and only applies a recognized value, preserving decoding of older preference payloads.
Findings None None.
Security None None.

How this fits together

CodexBar derives weekly usage-bar models from provider data and user settings, then renders them in the menu and provider-detail views. This PR threads a tick-appearance preference through local storage and CloudKit sync into those renderers.

flowchart LR
A[Provider usage] --> B[Weekly usage model]
C[Local and Cloud preferences] --> D[Tick appearance]
D --> B
B --> E[Usage-bar renderer]
E --> F[Menu and provider details]
Loading

Decision needed

Question Recommendation
Should CodexBar expose and sync a permanent three-option workday tick appearance setting? Accept the preference: Keep subtle as the upgrade default while allowing hidden and high-contrast workday ticks.

Why: The code preserves the current default, but whether this visual preference should become lasting local and CloudKit product surface requires maintainer intent.

Before merge

  • Resolve merge risk (P1) - Merging creates a permanent local and CloudKit-synced preference; maintainers need to accept its long-term configuration and older-client behavior before landing it.
  • Complete next step (P2) - A maintainer must decide whether the new permanent synced configuration surface belongs in the product before merge.
Agent review details

Security

None.

Review metrics

Metric Value Why it matters
Implementation and coverage delta production +254/-22, tests +154/-60, release notes +3 The broad 48-file surface is primarily settings propagation, 23 localized catalogs, and focused renderer/sync coverage.

Root-cause cluster

Relationship: fixed_by_candidate
Canonical: #2904
Summary: This PR is the explicit implementation candidate for the linked feature request.

Members:

Proposal only: this assessment does not dispatch repair, suppress jobs, mutate sibling items, close, or merge anything.

Merge-risk options

Maintainer options:

  1. Accept the synced preference contract (recommended)
    Approve the setting with subtle as the default and intentionally preserve a device’s local choice when an older CloudKit payload omits the field.
  2. Keep the fixed appearance
    Pause or close the PR if the extra persisted configuration surface is not wanted.

Technical review

Best possible solution:

If product direction is approved, retain the subtle default and optional sync decoding so upgrades and older payloads remain compatible; otherwise keep the existing fixed presentation.

Do we have a high-confidence way to reproduce the issue?

Not applicable: this PR proposes a new visual preference rather than repairing a failing existing behavior.

Is this the best way to solve the issue?

Unclear: the implementation is a narrow path that preserves the current default, but maintainers must first choose whether the permanent synced setting is desirable.

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning high; reviewed against 823f6b7c4ec8.

Labels

Label justifications:

  • P3: This is an optional visual-preference feature with limited user-impact scope.
  • merge-risk: 🚨 compatibility: The PR adds persisted and CloudKit-synced preference state that must remain safe across upgrades and older clients.
  • rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🦞 diamond lobster and patch quality is 🐚 platinum hermit.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (screenshot): The PR body provides after-change screenshots of the picker and each visible rendering option.
  • proof: sufficient: Contributor real behavior proof is sufficient. The PR body provides after-change screenshots of the picker and each visible rendering option.
  • proof: 📸 screenshot: Contributor real behavior proof includes screenshot evidence. The PR body provides after-change screenshots of the picker and each visible rendering option.

Evidence

What I checked:

Likely related people:

  • steipete: Current-base history and the final PR-head integration identify steipete as the strongest available routing contact for weekly usage rendering and preference direction. (role: recent area contributor; confidence: medium; commits: 823f6b7c4ec8, 0179be795156; files: Sources/CodexBar/MenuCardQuotaWarningMarkers.swift, Sources/CodexBar/UsageProgressBar.swift, Sources/CodexBar/SettingsStore+Sync.swift)

Rank-up moves

Optional improvements that raise the rating; they are not merge blockers.

  • Obtain maintainer confirmation that the new persisted CloudKit-synced preference is wanted.

Rating scale

Score Internal tier Crab rank Meaning
6/6 S 🦀 challenger crab Exceptional readiness
5/6 A 🦞 diamond lobster Very strong readiness
4/6 B 🐚 platinum hermit Good normal PR; ordinary maintainer review
3/6 C 🦐 gold shrimp Useful, but confidence is limited
2/6 D 🦪 silver shellfish Proof or implementation needs work
1/6 F 🧂 unranked krab Not merge-ready
N/A NA 🌊 off-meta tidepool Rating does not apply

Overall follows the weaker of proof and patch quality.
Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics.

Workflow

  • ClawSweeper keeps one durable marker-backed review comment per issue or PR.
  • Re-runs edit this comment so the latest verdict, findings, and automation markers stay together instead of adding duplicate bot comments.
  • A fresh review can be triggered by eligible @clawsweeper re-review comments, exact-item GitHub events, scheduled/background review runs, or manual workflow dispatch.
  • PR/issue authors and users with repository write access can comment @clawsweeper re-review or @clawsweeper re-run on an open PR or issue to request a fresh review only.
  • Maintainers can also comment @clawsweeper review to request a fresh review only.
  • Fresh-review commands do not start repair, autofix, rebase, CI repair, or automerge.
  • Maintainer-only repair and merge flows require explicit commands such as @clawsweeper autofix, @clawsweeper automerge, @clawsweeper fix ci, or @clawsweeper address review.
  • Maintainers can comment @clawsweeper explain to ask for more context, or @clawsweeper stop to stop active automation.

History

Review history (1 earlier review cycle)
  • reviewed 2026-08-15T08:20:20.933Z sha 54a32e5 :: needs maintainer review before merge. :: none

@dstier-git

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Another round soon, please!

Reviewed commit: 54a32e5ed3

ℹ️ 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".

@steipete
steipete merged commit 2f951e2 into steipete:main Aug 16, 2026
9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

merge-risk: 🚨 compatibility 🚨 Merging this PR could break existing users, config, migrations, defaults, or upgrades. P3 Low-risk cleanup, docs, polish, ergonomics, or speculative feature. proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. proof: sufficient Contributor real behavior proof is sufficient. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Feature request: configurable workday tick appearance for weekly quota bars

2 participants